{"version":3,"file":"Field.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n  createContext,\n  InputProps,\n  useField,\n  useForm,\n  useNotification,\n} from '@strapi/admin/strapi-admin';\nimport { Box, Flex, VisuallyHidden } from '@strapi/design-system';\nimport pipe from 'lodash/fp/pipe';\nimport { useIntl } from 'react-intl';\n\nimport { useDocumentContext } from '../../../../../hooks/useDocumentContext';\nimport { type EditFieldLayout } from '../../../../../hooks/useDocumentLayout';\nimport { getTranslation } from '../../../../../utils/translations';\nimport { transformDocument } from '../../../utils/data';\nimport { createDefaultForm } from '../../../utils/forms';\nimport { ComponentProvider, useComponent } from '../ComponentContext';\n\nimport { AddComponentButton } from './AddComponentButton';\nimport { ComponentPicker } from './ComponentPicker';\nimport { DynamicComponent, DynamicComponentProps } from './DynamicComponent';\nimport { DynamicZoneLabel, DynamicZoneLabelProps } from './DynamicZoneLabel';\n\nimport type { InputRendererProps } from '../../InputRenderer';\nimport type { Schema } from '@strapi/types';\n\ninterface DynamicZoneContextValue {\n  isInDynamicZone: boolean;\n}\n\nconst [DynamicZoneProvider, useDynamicZone] = createContext<DynamicZoneContextValue>(\n  'DynamicZone',\n  {\n    isInDynamicZone: false,\n  }\n);\n\ninterface DynamicZoneProps\n  extends Omit<Extract<EditFieldLayout, { type: 'dynamiczone' }>, 'size' | 'hint'>,\n    Pick<InputProps, 'hint'>,\n    Pick<DynamicZoneLabelProps, 'labelAction'> {\n  children?: (props: InputRendererProps) => React.ReactNode;\n}\n\nconst DynamicZone = ({\n  attribute,\n  disabled: disabledProp,\n  hint,\n  label,\n  labelAction,\n  name,\n  required = false,\n  children,\n}: DynamicZoneProps) => {\n  // We cannot use the default props here\n  const { max = Infinity, min = -Infinity } = attribute ?? {};\n\n  const [addComponentIsOpen, setAddComponentIsOpen] = React.useState(false);\n  const [liveText, setLiveText] = React.useState('');\n\n  const {\n    currentDocument: { components, isLoading },\n  } = useDocumentContext('DynamicZone');\n\n  const disabled = disabledProp || isLoading;\n  const { addFieldRow, removeFieldRow, moveFieldRow } = useForm(\n    'DynamicZone',\n    ({ addFieldRow, removeFieldRow, moveFieldRow }) => ({\n      addFieldRow,\n      removeFieldRow,\n      moveFieldRow,\n    })\n  );\n\n  type DzWithTempKey =\n    Schema.Attribute.GetDynamicZoneValue<Schema.Attribute.DynamicZone>[number] & {\n      __temp_key__: number;\n    };\n\n  const { value = [], error } = useField<Array<DzWithTempKey>>(name);\n\n  const dynamicComponentsByCategory = React.useMemo(() => {\n    return attribute.components.reduce<\n      NonNullable<DynamicComponentProps['dynamicComponentsByCategory']>\n    >((acc, componentUid) => {\n      const { category, info } = components[componentUid] ?? { info: {} };\n\n      const component = { uid: componentUid, displayName: info.displayName, icon: info.icon };\n\n      if (!acc[category]) {\n        acc[category] = [];\n      }\n\n      acc[category] = [...acc[category], component];\n\n      return acc;\n    }, {});\n  }, [attribute.components, components]);\n\n  const { formatMessage } = useIntl();\n\n  const { toggleNotification } = useNotification();\n\n  const dynamicDisplayedComponentsLength = value.length;\n\n  const handleAddComponent = (uid: string, position?: number) => {\n    setAddComponentIsOpen(false);\n\n    const schema = components[uid];\n    const form = createDefaultForm(schema, components);\n    const transformations = pipe(transformDocument(schema, components), (data) => ({\n      ...data,\n      __component: uid,\n    }));\n\n    const data = transformations(form);\n\n    addFieldRow(name, data, position);\n  };\n\n  const handleClickOpenPicker = () => {\n    if (dynamicDisplayedComponentsLength < max) {\n      setAddComponentIsOpen((prev) => !prev);\n    } else {\n      toggleNotification({\n        type: 'info',\n        message: formatMessage({\n          id: getTranslation('components.notification.info.maximum-requirement'),\n        }),\n      });\n    }\n  };\n\n  const handleMoveComponent = (newIndex: number, currentIndex: number) => {\n    setLiveText(\n      formatMessage(\n        {\n          id: getTranslation('dnd.reorder'),\n          defaultMessage: '{item}, moved. New position in list: {position}.',\n        },\n        {\n          item: `${name}.${currentIndex}`,\n          position: getItemPos(newIndex),\n        }\n      )\n    );\n\n    moveFieldRow(name, currentIndex, newIndex);\n  };\n\n  const getItemPos = (index: number) => `${index + 1} of ${value.length}`;\n\n  const handleCancel = (index: number) => {\n    setLiveText(\n      formatMessage(\n        {\n          id: getTranslation('dnd.cancel-item'),\n          defaultMessage: '{item}, dropped. Re-order cancelled.',\n        },\n        {\n          item: `${name}.${index}`,\n        }\n      )\n    );\n  };\n\n  const handleGrabItem = (index: number) => {\n    setLiveText(\n      formatMessage(\n        {\n          id: getTranslation('dnd.grab-item'),\n          defaultMessage: `{item}, grabbed. Current position in list: {position}. Press up and down arrow to change position, Spacebar to drop, Escape to cancel.`,\n        },\n        {\n          item: `${name}.${index}`,\n          position: getItemPos(index),\n        }\n      )\n    );\n  };\n\n  const handleDropItem = (index: number) => {\n    setLiveText(\n      formatMessage(\n        {\n          id: getTranslation('dnd.drop-item'),\n          defaultMessage: `{item}, dropped. Final position in list: {position}.`,\n        },\n        {\n          item: `${name}.${index}`,\n          position: getItemPos(index),\n        }\n      )\n    );\n  };\n\n  const handleRemoveComponent = (name: string, currentIndex: number) => () => {\n    removeFieldRow(name, currentIndex);\n  };\n\n  const hasError = error !== undefined;\n\n  const renderButtonLabel = () => {\n    if (addComponentIsOpen) {\n      return formatMessage({ id: 'app.utils.close-label', defaultMessage: 'Close' });\n    }\n\n    if (hasError && dynamicDisplayedComponentsLength > max) {\n      return formatMessage(\n        {\n          id: getTranslation(`components.DynamicZone.extra-components`),\n          defaultMessage:\n            'There {number, plural, =0 {are # extra components} one {is # extra component} other {are # extra components}}',\n        },\n        {\n          number: dynamicDisplayedComponentsLength - max,\n        }\n      );\n    }\n\n    if (hasError && dynamicDisplayedComponentsLength < min) {\n      return formatMessage(\n        {\n          id: getTranslation(`components.DynamicZone.missing-components`),\n          defaultMessage:\n            'There {number, plural, =0 {are # missing components} one {is # missing component} other {are # missing components}}',\n        },\n        { number: min - dynamicDisplayedComponentsLength }\n      );\n    }\n\n    return formatMessage(\n      {\n        id: getTranslation('components.DynamicZone.add-component'),\n        defaultMessage: 'Add a component to {componentName}',\n      },\n      { componentName: label || name }\n    );\n  };\n\n  const level = useComponent('DynamicZone', (state) => state.level);\n\n  const ariaDescriptionId = React.useId();\n\n  return (\n    <DynamicZoneProvider isInDynamicZone>\n      <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n        {dynamicDisplayedComponentsLength > 0 && (\n          <Box>\n            <DynamicZoneLabel\n              hint={hint}\n              label={label}\n              labelAction={labelAction}\n              name={name}\n              numberOfComponents={dynamicDisplayedComponentsLength}\n              required={required}\n            />\n            <VisuallyHidden id={ariaDescriptionId}>\n              {formatMessage({\n                id: getTranslation('dnd.instructions'),\n                defaultMessage: `Press spacebar to grab and re-order`,\n              })}\n            </VisuallyHidden>\n            <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>\n            <ol aria-describedby={ariaDescriptionId}>\n              {value.map((field, index) => (\n                <ComponentProvider\n                  key={field.__temp_key__}\n                  level={level + 1}\n                  uid={field.__component}\n                  // id is always a number in a dynamic zone.\n                  id={field.id as number}\n                  type=\"dynamiczone\"\n                >\n                  <DynamicComponent\n                    disabled={disabled}\n                    name={name}\n                    index={index}\n                    componentUid={field.__component}\n                    onMoveComponent={handleMoveComponent}\n                    onRemoveComponentClick={handleRemoveComponent(name, index)}\n                    onCancel={handleCancel}\n                    onDropItem={handleDropItem}\n                    onGrabItem={handleGrabItem}\n                    onAddComponent={handleAddComponent}\n                    dynamicComponentsByCategory={dynamicComponentsByCategory}\n                  >\n                    {children}\n                  </DynamicComponent>\n                </ComponentProvider>\n              ))}\n            </ol>\n          </Box>\n        )}\n        <Flex justifyContent=\"center\">\n          <AddComponentButton\n            hasError={hasError}\n            isDisabled={disabled}\n            isOpen={addComponentIsOpen}\n            onClick={handleClickOpenPicker}\n          >\n            {renderButtonLabel()}\n          </AddComponentButton>\n        </Flex>\n        <ComponentPicker\n          dynamicComponentsByCategory={dynamicComponentsByCategory}\n          isOpen={addComponentIsOpen}\n          onClickAddComponent={handleAddComponent}\n        />\n      </Flex>\n    </DynamicZoneProvider>\n  );\n};\n\nexport { DynamicZone, useDynamicZone };\nexport type { DynamicZoneProps };\n"],"names":["DynamicZoneProvider","useDynamicZone","createContext","isInDynamicZone","DynamicZone","attribute","disabled","disabledProp","hint","label","labelAction","name","required","children","max","Infinity","min","addComponentIsOpen","setAddComponentIsOpen","React","useState","liveText","setLiveText","currentDocument","components","isLoading","useDocumentContext","addFieldRow","removeFieldRow","moveFieldRow","useForm","value","error","useField","dynamicComponentsByCategory","useMemo","reduce","acc","componentUid","category","info","component","uid","displayName","icon","formatMessage","useIntl","toggleNotification","useNotification","dynamicDisplayedComponentsLength","length","handleAddComponent","position","schema","form","createDefaultForm","transformations","pipe","transformDocument","data","__component","handleClickOpenPicker","prev","type","message","id","getTranslation","handleMoveComponent","newIndex","currentIndex","defaultMessage","item","getItemPos","index","handleCancel","handleGrabItem","handleDropItem","handleRemoveComponent","hasError","undefined","renderButtonLabel","number","componentName","level","useComponent","state","ariaDescriptionId","useId","_jsx","_jsxs","Flex","direction","alignItems","gap","Box","DynamicZoneLabel","numberOfComponents","VisuallyHidden","aria-live","ol","aria-describedby","map","field","ComponentProvider","DynamicComponent","onMoveComponent","onRemoveComponentClick","onCancel","onDropItem","onGrabItem","onAddComponent","__temp_key__","justifyContent","AddComponentButton","isDisabled","isOpen","onClick","ComponentPicker","onClickAddComponent"],"mappings":"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"}