best-doctor/ke

View on GitHub
src/DetailView/widgets/RowWidget.tsx

Summary

Maintainability
A
2 hrs
Test Coverage
F
0%
// Это легаси
/* eslint-disable react/jsx-props-no-spreading */
import React from 'react'
import { Box, BoxProps, Flex, FlexProps } from '@chakra-ui/react'
import { Store } from 'effector'

import { getComponentFromCallable } from '../../common/utils/mountComponents'
import { UseTestIdProps, useCreateTestId } from '../../django-spa/aspects'

export interface RowWidgetProps extends Record<string, any>, UseTestIdProps {
  widgets: Array<any>
  style?: FlexProps
  elementWrapperStyle?: BoxProps
}

const RowWidget = (props: RowWidgetProps): JSX.Element => {
  const {
    setInitialValue,
    submitChange,
    resourceName,
    mainDetailObject,
    provider,
    setMainDetailObject,
    refreshMainDetailObject,
    notifier,
    user,
    analytics,
    ViewType,
    containerStore,
    widgets,
    name,
    style,
    setCurrentState,
    elementWrapperStyle: generalElementWrapperStyle,
  } = props

  const context = (containerStore as Store<object>).getState()

  const { getDataTestId } = useCreateTestId()

  return (
    <Flex data-name={name} flexWrap="wrap" {...getDataTestId(props)} {...style}>
      {widgets?.map((widgetElement: any) => {
        const { widget, elementWrapperStyle, name: widgetName, ...rest } = widgetElement
        const ComponentToMount = getComponentFromCallable(widget, user, mainDetailObject, context)
        return (
          <Box key={widgetName} name={widgetName} {...generalElementWrapperStyle} {...elementWrapperStyle}>
            <ComponentToMount
              name={widgetName}
              resource={resourceName}
              resourceName={resourceName}
              mainDetailObject={mainDetailObject}
              provider={provider}
              setMainDetailObject={setMainDetailObject}
              refreshMainDetailObject={refreshMainDetailObject}
              notifier={notifier}
              analytics={analytics}
              viewType={ViewType}
              setInitialValue={setInitialValue}
              submitChange={submitChange}
              containerStore={containerStore}
              setCurrentState={setCurrentState}
              {...rest}
            />
          </Box>
        )
      })}
    </Flex>
  )
}

export { RowWidget }