@strapi/content-type-builder 5.7.0-beta.0 → 5.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_chunks/{ListView-BI2crq1a.js → ListView-CraWLpAj.js} +3 -3
- package/dist/_chunks/ListView-CraWLpAj.js.map +1 -0
- package/dist/_chunks/{ListView-DPAOqb31.mjs → ListView-DGZsXEt_.mjs} +3 -3
- package/dist/_chunks/ListView-DGZsXEt_.mjs.map +1 -0
- package/dist/_chunks/{index-CVI-0sAj.js → index-CMBVvimF.js} +11 -8
- package/dist/_chunks/{index-CVI-0sAj.js.map → index-CMBVvimF.js.map} +1 -1
- package/dist/_chunks/{index-CZ49j0tX.js → index-DGtcRPec.js} +5 -4
- package/dist/_chunks/index-DGtcRPec.js.map +1 -0
- package/dist/_chunks/{index-C-ZiEQxP.mjs → index-edCTB1Ue.mjs} +5 -4
- package/dist/_chunks/index-edCTB1Ue.mjs.map +1 -0
- package/dist/_chunks/{index-jXo3naiB.mjs → index-kD3V-jrl.mjs} +11 -8
- package/dist/_chunks/{index-jXo3naiB.mjs.map → index-kD3V-jrl.mjs.map} +1 -1
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/package.json +6 -7
- package/dist/_chunks/ListView-BI2crq1a.js.map +0 -1
- package/dist/_chunks/ListView-DPAOqb31.mjs.map +0 -1
- package/dist/_chunks/index-C-ZiEQxP.mjs.map +0 -1
- package/dist/_chunks/index-CZ49j0tX.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-DGtcRPec.js","sources":["../../admin/src/utils/getTrad.ts","../../admin/src/contexts/DataManagerContext.ts","../../admin/src/hooks/useDataManager.ts","../../admin/src/contexts/FormModalNavigationContext.ts","../../admin/src/hooks/useFormModalNavigation.ts","../../admin/src/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.ts","../../admin/src/components/ContentTypeBuilderNav/ContentTypeBuilderNav.tsx","../../admin/src/utils/isAllowedContentTypesForRelations.ts","../../admin/src/utils/findAttribute.ts","../../admin/src/utils/getYupInnerErrors.ts","../../admin/src/components/AllowedTypesSelect.tsx","../../admin/src/components/AttributeIcon.tsx","../../admin/src/components/AttributeOptions/OptionBoxWrapper.tsx","../../admin/src/components/AttributeOptions/AttributeOption.tsx","../../admin/src/components/AttributeOptions/AttributeList.tsx","../../admin/src/components/AttributeOptions/CustomFieldOption.tsx","../../admin/src/components/AttributeOptions/EmptyAttributes.tsx","../../admin/src/components/AttributeOptions/CustomFieldsList.tsx","../../admin/src/components/AttributeOptions/AttributeOptions.tsx","../../admin/src/components/BooleanDefaultValueSelect.tsx","../../admin/src/components/CustomRadioGroup/Styles.tsx","../../admin/src/components/CustomRadioGroup/CustomRadioGroup.tsx","../../admin/src/components/BooleanRadioGroup.tsx","../../admin/src/components/CheckboxWithNumberField.tsx","../../admin/src/components/ContentTypeRadioGroup.tsx","../../admin/src/components/DraftAndPublishToggle.tsx","../../admin/src/components/FormModalEndActions.tsx","../../admin/src/components/FormModalHeader.tsx","../../admin/src/components/FormModalSubHeader.tsx","../../admin/src/components/IconPicker/constants.ts","../../admin/src/components/IconPicker/IconPicker.tsx","../../admin/src/components/PluralName.tsx","../../admin/src/utils/parseDateValue.ts","../../admin/src/utils/timeFormat.ts","../../admin/src/components/GenericInputs.tsx","../../admin/src/components/Relation/RelationField/RelationTargetPicker/RelationTargetPicker.tsx","../../admin/src/components/Relation/RelationField/RelationField.tsx","../../admin/src/components/Relation/RelationNaturePicker/Components.tsx","../../admin/src/components/Relation/RelationNaturePicker/RelationNaturePicker.tsx","../../admin/src/components/Relation/Relation.tsx","../../admin/src/components/SelectCategory.tsx","../../admin/src/utils/getMaxDepth.ts","../../admin/src/components/SelectComponent.tsx","../../admin/src/components/SelectComponents.tsx","../../admin/src/components/SelectDateType.tsx","../../admin/src/components/SelectNumber.tsx","../../admin/src/components/SingularName.tsx","../../admin/src/components/TabForm.tsx","../../admin/src/components/TextareaEnum.tsx","../../admin/src/components/FormModal/attributes/nameField.ts","../../admin/src/components/FormModal/attributes/commonBaseForm.ts","../../admin/src/components/FormModal/component/componentForm.ts","../../admin/src/components/FormModal/attributes/attributeOptions.ts","../../admin/src/components/FormModal/attributes/advancedForm.ts","../../admin/src/components/FormModal/component/componentField.ts","../../admin/src/components/FormModal/attributes/baseForm.ts","../../admin/src/components/FormModal/attributes/form.ts","../../admin/src/utils/toRegressedEnumValue.ts","../../admin/src/components/FormModal/attributes/validation/common.ts","../../admin/src/components/FormModal/attributes/types.ts","../../admin/src/components/FormModal/category/regex.ts","../../admin/src/components/FormModal/category/createCategorySchema.ts","../../admin/src/components/FormModal/category/form.ts","../../admin/src/components/FormModal/component/createComponentSchema.ts","../../admin/src/components/FormModal/contentType/contentTypeForm.ts","../../admin/src/components/FormModal/contentType/createContentTypeSchema.ts","../../admin/src/components/FormModal/dynamiczoneForm.ts","../../admin/src/components/FormModal/forms/utils/addItemsToFormSection.ts","../../admin/src/components/FormModal/forms/utils/createCollectionName.ts","../../admin/src/components/FormModal/forms/utils/getUsedAttributeNames.ts","../../admin/src/components/FormModal/forms/forms.ts","../../admin/src/components/FormModal/selectors.ts","../../admin/src/components/FormModal/utils/canEditContentType.ts","../../admin/src/components/FormModal/utils/getAttributesToDisplay.ts","../../admin/src/components/FormModal/utils/getFormInputNames.ts","../../admin/src/components/FormModal/FormModal.tsx","../../admin/src/components/DataManagerProvider/selectors.ts","../../admin/src/components/DataManagerProvider/utils/cleanData.ts","../../admin/src/components/DataManagerProvider/utils/createDataObject.ts","../../admin/src/components/DataManagerProvider/utils/createModifiedDataSchema.ts","../../admin/src/components/DataManagerProvider/utils/formatSchemas.ts","../../admin/src/components/DataManagerProvider/utils/retrieveComponentsThatHaveComponents.ts","../../admin/src/components/DataManagerProvider/utils/retrieveNestedComponents.ts","../../admin/src/components/DataManagerProvider/utils/retrieveSpecificInfoFromComponents.ts","../../admin/src/components/DataManagerProvider/utils/serverRestartWatcher.ts","../../admin/src/components/DataManagerProvider/utils/validateSchema.ts","../../admin/src/components/DataManagerProvider/DataManagerProvider.tsx","../../admin/src/components/FormModalNavigationProvider/constants.ts","../../admin/src/components/FormModalNavigationProvider/FormModalNavigationProvider.tsx","../../admin/src/pages/RecursivePath/RecursivePath.tsx","../../admin/src/pages/App/index.tsx"],"sourcesContent":["import { pluginId } from '../pluginId';\n\nexport const getTrad = (id: string) => `${pluginId}.${id}`;\n","/* eslint-disable check-file/filename-naming-convention */\nimport { createContext } from 'react';\n\nimport type { SchemaType, Component } from '../types';\nimport type { Internal } from '@strapi/types';\n\n// TODO V5 Convert this any types to real types\nexport interface CustomFieldAttributeParams {\n attributeToSet: Record<string, any>;\n forTarget: SchemaType;\n targetUid: Internal.UID.Schema;\n initialAttribute: Record<string, any>;\n}\nexport interface DataManagerContextValue {\n addAttribute: (\n attributeToSet: Record<string, any>,\n forTarget: SchemaType,\n targetUid: Internal.UID.Schema,\n isEditing?: boolean,\n initialAttribute?: Record<string, any>,\n shouldAddComponentToData?: boolean\n ) => void;\n addCustomFieldAttribute: (params: CustomFieldAttributeParams) => void;\n editCustomFieldAttribute: (params: CustomFieldAttributeParams) => void;\n addCreatedComponentToDynamicZone: (dynamicZoneTarget: string, componentsToAdd: string[]) => void;\n createSchema: (\n data: Record<string, any>,\n schemaType: SchemaType,\n uid: Internal.UID.Schema,\n componentCategory?: string,\n shouldAddComponentToData?: boolean\n ) => void;\n changeDynamicZoneComponents: (dynamicZoneTarget: string, newComponents: string[]) => void;\n removeAttribute: (\n mainDataKey: string,\n attributeToRemoveName: string,\n componentUid?: string\n ) => void;\n deleteCategory: (categoryUid: string) => void;\n deleteData: () => void;\n editCategory: (categoryUid: string, body: any) => void;\n removeComponentFromDynamicZone: (dzName: string, componentToRemoveIndex: number) => void;\n setModifiedData: () => void;\n sortedContentTypesList: any[]; // Define the actual type\n submitData: (additionalContentTypeData?: Record<string, any>) => Promise<void>;\n updateSchema: (\n data: Record<string, any>,\n schemaType: SchemaType,\n componentUID: Internal.UID.Component\n ) => void;\n components: Record<Internal.UID.Component, Component>;\n componentsGroupedByCategory: Record<string, Component[]>;\n componentsThatHaveOtherComponentInTheirAttributes: any[]; // Define the actual type\n contentTypes: Record<string, any>;\n initialData: Record<string, any>;\n isInContentTypeView: boolean;\n isInDevelopmentMode?: boolean;\n modifiedData: Record<string, any>;\n nestedComponents: any[]; // Define the actual type\n reservedNames: {\n models: string[];\n attributes: string[];\n };\n allComponentsCategories: any[];\n}\n\n// @ts-expect-error need to pass initial value to params\nexport const DataManagerContext = createContext<DataManagerContextValue>();\n","import { useContext } from 'react';\n\nimport { DataManagerContext } from '../contexts/DataManagerContext';\n\nexport const useDataManager = () => useContext(DataManagerContext);\n","/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport { INITIAL_STATE_DATA } from '../components/FormModalNavigationProvider/constants';\n\nimport type {\n ModalEventProps,\n State,\n} from '../components/FormModalNavigationProvider/FormModalNavigationProvider';\nimport type { SchemaType } from '../types';\nimport type { Internal } from '@strapi/types';\n\nexport interface FormModalNavigationContextValue {\n onCloseModal: () => void;\n onOpenModalAddField: (options: {\n forTarget: SchemaType;\n targetUid?: Internal.UID.Schema;\n }) => void;\n onClickSelectField: (option: ModalEventProps) => void;\n onClickSelectCustomField: (option: ModalEventProps) => void;\n onNavigateToChooseAttributeModal: (options: ModalEventProps) => void;\n onNavigateToAddCompoToDZModal: (options: ModalEventProps) => void;\n onOpenModalAddComponentsToDZ: (options: ModalEventProps) => void;\n onNavigateToCreateComponentStep2: () => void;\n onOpenModalCreateSchema: (options: State) => void;\n onOpenModalEditCategory: (categoryName: string) => void;\n onOpenModalEditField: (options: ModalEventProps) => void;\n onOpenModalEditCustomField: (options: ModalEventProps) => void;\n onOpenModalEditSchema: (options: ModalEventProps) => void;\n setFormModalNavigationState: (value: React.SetStateAction<typeof INITIAL_STATE_DATA>) => void;\n actionType: string;\n attributeName: string;\n attributeType: string;\n customFieldUid: string;\n categoryName: string;\n dynamicZoneTarget: string;\n forTarget: SchemaType;\n modalType: string;\n isOpen: boolean;\n showBackLink: boolean;\n kind: string;\n step: string;\n targetUid: Internal.UID.Schema;\n activeTab: string;\n setActiveTab: (value: React.SetStateAction<string>) => void;\n}\n\n// @ts-expect-error need to pass initial value to params\nexport const FormModalNavigationContext = React.createContext<FormModalNavigationContextValue>();\n","import { useContext } from 'react';\n\nimport { FormModalNavigationContext } from '../contexts/FormModalNavigationContext';\n\nexport const useFormModalNavigation = () => useContext(FormModalNavigationContext);\n","import { useState, MouseEvent } from 'react';\n\nimport { useTracking, useNotification } from '@strapi/admin/strapi-admin';\nimport { useCollator, useFilter } from '@strapi/design-system';\nimport isEqual from 'lodash/isEqual';\nimport { useIntl } from 'react-intl';\n\nimport { useDataManager } from '../../hooks/useDataManager';\nimport { useFormModalNavigation } from '../../hooks/useFormModalNavigation';\nimport { pluginId } from '../../pluginId';\nimport { getTrad } from '../../utils/getTrad';\n\nimport type { Internal } from '@strapi/types';\n\nexport const useContentTypeBuilderMenu = () => {\n const {\n components,\n componentsGroupedByCategory,\n contentTypes,\n isInDevelopmentMode,\n sortedContentTypesList,\n modifiedData,\n initialData,\n } = useDataManager();\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const [search, setSearch] = useState('');\n const { onOpenModalCreateSchema, onOpenModalEditCategory } = useFormModalNavigation();\n const { locale } = useIntl();\n\n const { startsWith } = useFilter(locale, {\n sensitivity: 'base',\n });\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const canOpenModalCreateCTorComponent =\n !Object.keys(contentTypes).some((ct) => contentTypes[ct].isTemporary === true) &&\n !Object.keys(components).some(\n (component) => components[component as Internal.UID.Component].isTemporary === true\n ) &&\n isEqual(modifiedData, initialData);\n\n const handleClickOpenModalCreateCollectionType = () => {\n if (canOpenModalCreateCTorComponent) {\n trackUsage(`willCreateContentType`);\n\n const nextState = {\n modalType: 'contentType',\n kind: 'collectionType',\n actionType: 'create',\n forTarget: 'contentType',\n };\n\n onOpenModalCreateSchema(nextState);\n } else {\n toggleNotificationCannotCreateSchema();\n }\n };\n\n const handleClickOpenModalCreateSingleType = () => {\n if (canOpenModalCreateCTorComponent) {\n trackUsage(`willCreateSingleType`);\n\n const nextState = {\n modalType: 'contentType',\n kind: 'singleType',\n actionType: 'create',\n forTarget: 'contentType',\n };\n\n onOpenModalCreateSchema(nextState);\n } else {\n toggleNotificationCannotCreateSchema();\n }\n };\n\n const handleClickOpenModalCreateComponent = () => {\n if (canOpenModalCreateCTorComponent) {\n trackUsage('willCreateComponent');\n\n const nextState = {\n modalType: 'component',\n kind: null,\n actionType: 'create',\n forTarget: 'component',\n };\n\n onOpenModalCreateSchema(nextState);\n } else {\n toggleNotificationCannotCreateSchema();\n }\n };\n\n const toggleNotificationCannotCreateSchema = () => {\n toggleNotification({\n type: 'info',\n message: formatMessage({\n id: getTrad('notification.info.creating.notSaved'),\n defaultMessage: 'Please save your work before creating a new collection type or component',\n }),\n });\n };\n\n const componentsData = Object.entries(componentsGroupedByCategory)\n .map(([category, components]) => ({\n name: category,\n title: category,\n isEditable: isInDevelopmentMode,\n onClickEdit(e: MouseEvent, data: any) {\n e.stopPropagation();\n\n if (canOpenModalCreateCTorComponent) {\n onOpenModalEditCategory(data.name);\n } else {\n toggleNotificationCannotCreateSchema();\n }\n },\n links: components\n .map((component) => ({\n name: component.uid,\n to: `/plugins/${pluginId}/component-categories/${category}/${component.uid}`,\n title: component.schema.displayName,\n }))\n .sort((a, b) => formatter.compare(a.title, b.title)),\n }))\n .sort((a, b) => formatter.compare(a.title, b.title));\n\n const displayedContentTypes = sortedContentTypesList.filter((obj) => obj.visible);\n\n const data = [\n {\n name: 'models',\n title: {\n id: `${getTrad('menu.section.models.name')}`,\n defaultMessage: 'Collection Types',\n },\n customLink: isInDevelopmentMode && {\n id: `${getTrad('button.model.create')}`,\n defaultMessage: 'Create new collection type',\n onClick: handleClickOpenModalCreateCollectionType,\n },\n links: displayedContentTypes.filter((contentType) => contentType.kind === 'collectionType'),\n },\n {\n name: 'singleTypes',\n title: {\n id: `${getTrad('menu.section.single-types.name')}`,\n defaultMessage: 'Single Types',\n },\n customLink: isInDevelopmentMode && {\n id: `${getTrad('button.single-types.create')}`,\n defaultMessage: 'Create new single type',\n onClick: handleClickOpenModalCreateSingleType,\n },\n links: displayedContentTypes.filter((singleType) => singleType.kind === 'singleType'),\n },\n {\n name: 'components',\n title: {\n id: `${getTrad('menu.section.components.name')}`,\n defaultMessage: 'Components',\n },\n customLink: isInDevelopmentMode && {\n id: `${getTrad('button.component.create')}`,\n defaultMessage: 'Create a new component',\n onClick: handleClickOpenModalCreateComponent,\n },\n links: componentsData,\n },\n ].map((section) => {\n const hasChild = section.links.some((l) => Array.isArray(l.links));\n\n if (hasChild) {\n let filteredLinksCount = 0;\n\n return {\n ...section,\n links: section.links\n .map((link) => {\n const filteredLinks = link.links.filter((link: any) => startsWith(link.title, search));\n\n if (filteredLinks.length === 0) {\n return null;\n }\n\n filteredLinksCount += filteredLinks.length;\n\n return {\n ...link,\n links: filteredLinks.sort((a: any, b: any) => formatter.compare(a.title, b.title)),\n };\n })\n .filter(Boolean),\n linksCount: filteredLinksCount,\n };\n }\n\n const filteredLinks = section.links\n .filter((link) => startsWith(link.title, search))\n .sort((a, b) => formatter.compare(a.title, b.title));\n\n return {\n ...section,\n links: filteredLinks,\n linksCount: filteredLinks.length,\n };\n });\n\n return {\n menu: data,\n searchValue: search,\n onSearchChange: setSearch,\n };\n};\n","import { Fragment } from 'react';\n\nimport {\n Box,\n TextButton,\n SubNav,\n SubNavHeader,\n SubNavLink,\n SubNavLinkSection,\n SubNavSection,\n SubNavSections,\n} from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport upperFirst from 'lodash/upperFirst';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { getTrad } from '../../utils/getTrad';\n\nimport { useContentTypeBuilderMenu } from './useContentTypeBuilderMenu';\n\nconst SubNavLinkCustom = styled(SubNavLink)`\n div {\n width: inherit;\n span:nth-child(2) {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n width: inherit;\n }\n }\n`;\n\nexport const ContentTypeBuilderNav = () => {\n const { menu, searchValue, onSearchChange } = useContentTypeBuilderMenu();\n const { formatMessage } = useIntl();\n\n const pluginName = formatMessage({\n id: getTrad('plugin.name'),\n defaultMessage: 'Content-Type Builder',\n });\n\n return (\n <SubNav aria-label={pluginName}>\n <SubNavHeader\n searchable\n value={searchValue}\n onClear={() => onSearchChange('')}\n onChange={(e) => onSearchChange(e.target.value)}\n label={pluginName}\n searchLabel={formatMessage({\n id: 'global.search',\n defaultMessage: 'Search',\n })}\n />\n <SubNavSections>\n {menu.map((section) => (\n <Fragment key={section.name}>\n <SubNavSection\n label={formatMessage({\n id: section.title.id,\n defaultMessage: section.title.defaultMessage,\n })}\n collapsable\n badgeLabel={section.linksCount.toString()}\n >\n {section.links.map((link) => {\n if (link.links) {\n return (\n <SubNavLinkSection key={link.name} label={upperFirst(link.title)}>\n {link.links.map((subLink: any) => (\n <SubNavLink\n tag={NavLink}\n to={subLink.to}\n active={subLink.active}\n key={subLink.name}\n isSubSectionChild\n >\n {upperFirst(\n formatMessage({ id: subLink.name, defaultMessage: subLink.title })\n )}\n </SubNavLink>\n ))}\n </SubNavLinkSection>\n );\n }\n\n return (\n <SubNavLinkCustom\n tag={NavLink}\n to={link.to}\n active={link.active}\n key={link.name}\n width=\"100%\"\n >\n {upperFirst(formatMessage({ id: link.name, defaultMessage: link.title }))}\n </SubNavLinkCustom>\n );\n })}\n </SubNavSection>\n {section.customLink && (\n <Box paddingLeft={7}>\n <TextButton\n onClick={section.customLink.onClick}\n startIcon={<Plus width=\"0.8rem\" height=\"0.8rem\" />}\n marginTop={2}\n cursor=\"pointer\"\n >\n {formatMessage({\n id: section.customLink.id,\n defaultMessage: section.customLink.defaultMessage,\n })}\n </TextButton>\n </Box>\n )}\n </Fragment>\n ))}\n </SubNavSections>\n </SubNav>\n );\n};\n","import type { ContentType } from '../types';\n\nexport const isAllowedContentTypesForRelations = (contentType: ContentType) => {\n return (\n contentType.kind === 'collectionType' &&\n (contentType.restrictRelationsTo === null ||\n (Array.isArray(contentType.restrictRelationsTo) &&\n contentType.restrictRelationsTo.length > 0))\n );\n};\n","import { AttributeType } from '../types';\n\nexport const findAttribute = (attributes: AttributeType[], attributeToFind: string) => {\n return attributes.find(({ name }) => name === attributeToFind);\n};\n","import type { MessageDescriptor, PrimitiveType } from 'react-intl';\nimport type { ValidationError } from 'yup';\n\ninterface TranslationMessage extends MessageDescriptor {\n values?: Record<string, PrimitiveType>;\n}\n\nconst extractValuesFromYupError = (\n errorType?: string | undefined,\n errorParams?: Record<string, any> | undefined\n) => {\n if (!errorType || !errorParams) {\n return {};\n }\n\n return {\n [errorType]: errorParams[errorType],\n };\n};\n\nconst getYupInnerErrors = (error: ValidationError) =>\n (error?.inner || []).reduce<Record<string, TranslationMessage>>((acc, currentError) => {\n if (currentError.path) {\n acc[currentError.path.split('[').join('.').split(']').join('')] = {\n id: currentError.message,\n defaultMessage: currentError.message,\n values: extractValuesFromYupError(currentError?.type, currentError?.params),\n };\n }\n\n return acc;\n }, {});\n\nexport { getYupInnerErrors };\n","import { Field, MultiSelectNested } from '@strapi/design-system';\nimport upperFirst from 'lodash/upperFirst';\nimport { useIntl } from 'react-intl';\n\nimport { IntlLabel } from '../types';\n\ninterface AllowedTypesSelectProps {\n intlLabel: IntlLabel;\n name: string;\n onChange: (value: any) => void;\n value?: any;\n}\n\nconst options = [\n {\n label: 'All',\n children: [\n { label: 'images (JPEG, PNG, GIF, SVG, TIFF, ICO, DVU)', value: 'images' },\n { label: 'videos (MPEG, MP4, Quicktime, WMV, AVI, FLV)', value: 'videos' },\n { label: 'audios (MP3, WAV, OGG)', value: 'audios' },\n { label: 'files (CSV, ZIP, PDF, Excel, JSON, ...)', value: 'files' },\n ],\n },\n];\n\nexport const AllowedTypesSelect = ({\n intlLabel,\n name,\n onChange,\n value = null,\n}: AllowedTypesSelectProps) => {\n const { formatMessage } = useIntl();\n\n /* eslint-disable indent */\n const displayedValue =\n value === null || value?.length === 0\n ? formatMessage({ id: 'global.none', defaultMessage: 'None' })\n : [...value]\n .sort()\n .map((v) => upperFirst(v))\n .join(', ');\n\n /* eslint-enable indent */\n\n const label = intlLabel.id\n ? formatMessage({ id: intlLabel.id, defaultMessage: intlLabel.defaultMessage })\n : name;\n\n return (\n <Field.Root name={name}>\n <Field.Label>{label}</Field.Label>\n <MultiSelectNested\n customizeContent={() => displayedValue}\n onChange={(values: any[]) => {\n if (values.length > 0) {\n onChange({ target: { name, value: values, type: 'allowed-types-select' } });\n } else {\n onChange({ target: { name, value: null, type: 'allowed-types-select' } });\n }\n }}\n options={options}\n value={value || []}\n />\n </Field.Root>\n );\n};\n","import { ComponentType, SVGProps } from 'react';\n\nimport { useStrapiApp } from '@strapi/admin/strapi-admin';\nimport { Box } from '@strapi/design-system';\nimport {\n BooleanField,\n CollectionType,\n ComponentField,\n DateField,\n DynamicZoneField,\n EmailField,\n EnumerationField,\n JsonField,\n MediaField,\n NumberField,\n PasswordField,\n RelationField,\n MarkdownField,\n SingleType,\n TextField,\n UidField,\n BlocksField,\n} from '@strapi/icons/symbols';\nimport { styled } from 'styled-components';\n\nconst iconByTypes: Record<string, ComponentType<SVGProps<SVGSVGElement>>> = {\n biginteger: NumberField,\n blocks: BlocksField,\n boolean: BooleanField,\n collectionType: CollectionType,\n component: ComponentField,\n contentType: CollectionType,\n date: DateField,\n datetime: DateField,\n decimal: NumberField,\n dynamiczone: DynamicZoneField,\n email: EmailField,\n enum: EnumerationField,\n enumeration: EnumerationField,\n file: MediaField,\n files: MediaField,\n float: NumberField,\n integer: NumberField,\n json: JsonField,\n JSON: JsonField,\n media: MediaField,\n number: NumberField,\n password: PasswordField,\n relation: RelationField,\n richtext: MarkdownField,\n singleType: SingleType,\n string: TextField,\n text: TextField,\n time: DateField,\n timestamp: DateField,\n uid: UidField,\n};\n\nconst IconBox = styled(Box)`\n svg {\n height: 100%;\n width: 100%;\n }\n`;\n\nexport type IconByType = keyof typeof iconByTypes;\n\ntype AttributeIconProps = {\n type: IconByType;\n customField?: string | null;\n};\n\nexport const AttributeIcon = ({ type, customField = null, ...rest }: AttributeIconProps) => {\n const getCustomField = useStrapiApp('AttributeIcon', (state) => state.customFields.get);\n\n let Compo: any = iconByTypes[type];\n\n if (customField) {\n const customFieldObject = getCustomField(customField);\n const icon = customFieldObject?.icon;\n if (icon) {\n Compo = icon;\n }\n }\n\n if (!iconByTypes[type]) {\n return null;\n }\n\n return (\n <IconBox width=\"3.2rem\" shrink={0} {...rest} aria-hidden>\n <Box tag={Compo} />\n </IconBox>\n );\n};\n","import { Box } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nexport const OptionBoxWrapper = styled(Box)`\n width: 100%;\n height: 100%;\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n text-align: left;\n &:hover {\n cursor: pointer;\n background: ${({ theme }) => theme.colors.primary100};\n border: 1px solid ${({ theme }) => theme.colors.primary200};\n }\n`;\n","/**\n *\n * AttributeOption\n *\n */\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { Sparkle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { useFormModalNavigation } from '../../hooks/useFormModalNavigation';\nimport { getTrad } from '../../utils/getTrad';\nimport { AttributeIcon, IconByType } from '../AttributeIcon';\n\nimport { OptionBoxWrapper } from './OptionBoxWrapper';\n\nconst newAttributes: string[] = [];\n\nconst NewBadge = () => (\n <Flex grow={1} justifyContent=\"flex-end\">\n <Flex gap={1} hasRadius background=\"alternative100\" padding={`0.2rem 0.4rem`}>\n <Sparkle width={`1rem`} height={`1rem`} fill=\"alternative600\" />\n <Typography textColor=\"alternative600\" variant=\"sigma\">\n New\n </Typography>\n </Flex>\n </Flex>\n);\n\ntype AttributeOptionProps = {\n type: IconByType;\n};\n\nexport const AttributeOption = ({ type = 'text' }: AttributeOptionProps) => {\n const { formatMessage } = useIntl();\n\n const { onClickSelectField } = useFormModalNavigation();\n\n const handleClick = () => {\n const step = type === 'component' ? '1' : null;\n\n onClickSelectField({\n attributeType: type,\n step,\n });\n };\n\n return (\n <OptionBoxWrapper padding={4} tag=\"button\" hasRadius type=\"button\" onClick={handleClick}>\n <Flex>\n <AttributeIcon type={type} />\n <Box paddingLeft={4} width=\"100%\">\n <Flex justifyContent=\"space-between\">\n <Typography fontWeight=\"bold\" textColor=\"neutral800\">\n {formatMessage({ id: getTrad(`attribute.${type}`), defaultMessage: type })}\n </Typography>\n {newAttributes.includes(type) && <NewBadge />}\n </Flex>\n <Flex>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: getTrad(`attribute.${type}.description`),\n defaultMessage: 'A type for modeling data',\n })}\n </Typography>\n </Flex>\n </Box>\n </Flex>\n </OptionBoxWrapper>\n );\n};\n","import { Flex, Grid, KeyboardNavigable } from '@strapi/design-system';\n\nimport { IconByType } from '../AttributeIcon';\n\nimport { AttributeOption } from './AttributeOption';\n\ntype AttributeListProps = {\n attributes: IconByType[][];\n};\n\nexport const AttributeList = ({ attributes }: AttributeListProps) => (\n <KeyboardNavigable tagName=\"button\">\n <Flex direction=\"column\" alignItems=\"stretch\" gap={8}>\n {attributes.map((attributeRow, index) => {\n return (\n // eslint-disable-next-line react/no-array-index-key\n <Grid.Root key={index} gap={3}>\n {attributeRow.map((attribute) => (\n <Grid.Item key={attribute} col={6} direction=\"column\" alignItems=\"stretch\">\n <AttributeOption type={attribute} />\n </Grid.Item>\n ))}\n </Grid.Root>\n );\n })}\n </Flex>\n </KeyboardNavigable>\n);\n","import * as React from 'react';\n\nimport { StrapiAppContextValue } from '@strapi/admin/strapi-admin';\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useFormModalNavigation } from '../../hooks/useFormModalNavigation';\nimport { AttributeIcon, IconByType } from '../AttributeIcon';\n\nimport { OptionBoxWrapper } from './OptionBoxWrapper';\n\nexport type CustomFieldOption = {\n name: string;\n type: IconByType;\n icon: React.ComponentType;\n intlLabel: {\n id: string;\n defaultMessage: string;\n };\n intlDescription: {\n id: string;\n defaultMessage: string;\n };\n};\n\ntype CustomFieldOptionProps = {\n customFieldUid: string;\n customField: NonNullable<ReturnType<StrapiAppContextValue['customFields']['get']>>;\n};\n\nexport const CustomFieldOption = ({ customFieldUid, customField }: CustomFieldOptionProps) => {\n const { type, intlLabel, intlDescription } = customField;\n const { formatMessage } = useIntl();\n\n const { onClickSelectCustomField } = useFormModalNavigation();\n\n const handleClick = () => {\n onClickSelectCustomField({\n attributeType: type,\n customFieldUid,\n });\n };\n\n return (\n <OptionBoxWrapper padding={4} tag=\"button\" hasRadius type=\"button\" onClick={handleClick}>\n <Flex>\n <AttributeIcon type={type} customField={customFieldUid} />\n <Box paddingLeft={4}>\n <Flex>\n <Typography fontWeight=\"bold\" textColor=\"neutral800\">\n {formatMessage(intlLabel)}\n </Typography>\n </Flex>\n <Flex>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage(intlDescription)}\n </Typography>\n </Flex>\n </Box>\n </Flex>\n </OptionBoxWrapper>\n );\n};\n","import { Box, Flex, Typography, LinkButton } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport * as qs from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { getTrad } from '../../utils';\n\nconst EmptyCard = styled(Box)`\n background: ${({ theme }) =>\n `linear-gradient(180deg, rgba(234, 234, 239, 0) 0%, ${theme.colors.neutral150} 100%)`};\n opacity: 0.33;\n`;\n\nexport const EmptyCardGrid = () => {\n return (\n <Flex wrap=\"wrap\" gap={4}>\n {[...Array(4)].map((_, idx) => {\n return (\n <EmptyCard\n // eslint-disable-next-line react/no-array-index-key\n key={`empty-card-${idx}`}\n height=\"138px\"\n width=\"375px\"\n hasRadius\n />\n );\n })}\n </Flex>\n );\n};\n\nexport const EmptyAttributes = () => {\n const { formatMessage } = useIntl();\n\n return (\n <Box position=\"relative\">\n <EmptyCardGrid />\n <Box position=\"absolute\" top={6} width=\"100%\">\n <Flex alignItems=\"center\" justifyContent=\"center\" direction=\"column\">\n <EmptyDocuments width=\"160px\" height=\"88px\" />\n <Box paddingTop={6} paddingBottom={4}>\n <Box textAlign=\"center\">\n <Typography variant=\"delta\" tag=\"p\" textColor=\"neutral600\">\n {formatMessage({\n id: getTrad('modalForm.empty.heading'),\n defaultMessage: 'Nothing in here yet.',\n })}\n </Typography>\n <Box paddingTop={4}>\n <Typography variant=\"delta\" tag=\"p\" textColor=\"neutral600\">\n {formatMessage({\n id: getTrad('modalForm.empty.sub-heading'),\n defaultMessage:\n 'Find what you are looking for through a wide range of extensions.',\n })}\n </Typography>\n </Box>\n </Box>\n </Box>\n <LinkButton\n tag={Link}\n to={`/marketplace?${qs.stringify({ categories: ['Custom fields'] })}`}\n variant=\"secondary\"\n startIcon={<Plus />}\n >\n {formatMessage({\n id: getTrad('modalForm.empty.button'),\n defaultMessage: 'Add custom fields',\n })}\n </LinkButton>\n </Flex>\n </Box>\n </Box>\n );\n};\n","import { useStrapiApp } from '@strapi/admin/strapi-admin';\nimport { Flex, Grid, KeyboardNavigable, Link } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../utils';\n\nimport { CustomFieldOption } from './CustomFieldOption';\nimport { EmptyAttributes } from './EmptyAttributes';\n\nexport const CustomFieldsList = () => {\n const { formatMessage } = useIntl();\n const getAllCustomFields = useStrapiApp('CustomFieldsList', (state) => state.customFields.getAll);\n // TODO change this once useCustomFields is typed (helper-plugin types are solved)\n const registeredCustomFields = Object.entries(getAllCustomFields());\n\n if (!registeredCustomFields.length) {\n return <EmptyAttributes />;\n }\n\n // Sort the array alphabetically by customField name\n const sortedCustomFields = registeredCustomFields.sort((a, b) =>\n a[1].name > b[1].name ? 1 : -1\n );\n\n return (\n <KeyboardNavigable tagName=\"button\">\n <Flex direction=\"column\" alignItems=\"stretch\" gap={3}>\n <Grid.Root gap={3}>\n {sortedCustomFields.map(([uid, customField]) => (\n <Grid.Item key={uid} col={6} direction=\"column\" alignItems=\"stretch\">\n <CustomFieldOption key={uid} customFieldUid={uid} customField={customField} />\n </Grid.Item>\n ))}\n </Grid.Root>\n <Link\n href=\"https://docs.strapi.io/developer-docs/latest/development/custom-fields.html\"\n isExternal\n >\n {formatMessage({\n id: getTrad('modalForm.tabs.custom.howToLink'),\n defaultMessage: 'How to add custom fields',\n })}\n </Link>\n </Flex>\n </KeyboardNavigable>\n );\n};\n","/**\n *\n * AttributeOptions\n *\n */\n\nimport { Divider, Flex, Modal, Tabs, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../utils';\nimport { IconByType } from '../AttributeIcon';\n\nimport { AttributeList } from './AttributeList';\nimport { CustomFieldsList } from './CustomFieldsList';\n\ntype AttributeOptionsProps = {\n attributes: IconByType[][];\n forTarget: string;\n kind: string;\n};\n\nexport const AttributeOptions = ({ attributes, forTarget, kind }: AttributeOptionsProps) => {\n const { formatMessage } = useIntl();\n\n const defaultTabId = getTrad('modalForm.tabs.default');\n const customTabId = getTrad('modalForm.tabs.custom');\n\n const titleIdSuffix = forTarget.includes('component') ? 'component' : kind;\n const titleId = getTrad(`modalForm.sub-header.chooseAttribute.${titleIdSuffix}`);\n\n return (\n <Modal.Body>\n <Tabs.Root variant=\"simple\" defaultValue=\"default\">\n <Flex justifyContent=\"space-between\">\n <Typography variant=\"beta\" tag=\"h2\">\n {formatMessage({ id: titleId, defaultMessage: 'Select a field' })}\n </Typography>\n <Tabs.List>\n <Tabs.Trigger value=\"default\">\n {formatMessage({ id: defaultTabId, defaultMessage: 'Default' })}\n </Tabs.Trigger>\n <Tabs.Trigger value=\"custom\">\n {formatMessage({ id: customTabId, defaultMessage: 'Custom' })}\n </Tabs.Trigger>\n </Tabs.List>\n </Flex>\n <Divider marginBottom={6} />\n <Tabs.Content value=\"default\">\n <AttributeList attributes={attributes} />\n </Tabs.Content>\n <Tabs.Content value=\"custom\">\n <CustomFieldsList />\n </Tabs.Content>\n </Tabs.Root>\n </Modal.Body>\n );\n};\n","import { Field, SingleSelect, SingleSelectOption } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { IntlLabel } from '../types';\n\ninterface Metadata {\n intlLabel: IntlLabel;\n disabled?: boolean;\n hidden?: boolean;\n}\n\ninterface Option {\n metadatas: Metadata;\n key: string | number;\n value: string | number;\n}\n\ninterface BooleanDefaultValueSelectProps {\n intlLabel: IntlLabel;\n name: string;\n onChange: (value: any) => void;\n options: Option[];\n value?: any;\n}\n\nexport const BooleanDefaultValueSelect = ({\n intlLabel,\n name,\n options,\n onChange,\n value = null,\n}: BooleanDefaultValueSelectProps) => {\n const { formatMessage } = useIntl();\n const label = intlLabel.id\n ? formatMessage(\n { id: intlLabel.id, defaultMessage: intlLabel.defaultMessage },\n { ...intlLabel.values }\n )\n : name;\n\n const handleChange = (value: any) => {\n let nextValue: boolean | string = '';\n\n if (value === 'true') {\n nextValue = true;\n }\n\n if (value === 'false') {\n nextValue = false;\n }\n\n onChange({ target: { name, value: nextValue, type: 'select-default-boolean' } });\n };\n\n return (\n <Field.Root name={name}>\n <Field.Label>{label}</Field.Label>\n <SingleSelect onChange={handleChange} value={(value === null ? '' : value).toString()}>\n {options.map(({ metadatas: { intlLabel, disabled, hidden }, key, value }) => {\n return (\n <SingleSelectOption key={key} value={value} disabled={disabled} hidden={hidden}>\n {/* No need to translate the options */}\n {intlLabel.defaultMessage}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n </Field.Root>\n );\n};\n","import { Flex, inputFocusStyle } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nconst Wrapper = styled(Flex)`\n position: relative;\n align-items: stretch;\n\n label {\n border-radius: 4px;\n max-width: 50%;\n cursor: pointer;\n user-select: none;\n flex: 1;\n border-radius: 4px;\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n\n ${inputFocusStyle()}\n }\n\n input {\n position: absolute;\n opacity: 0;\n }\n\n .option {\n height: 100%;\n border-radius: 4px;\n will-change: transform, opacity;\n background: ${({ theme }) => theme.colors.neutral0};\n\n .checkmark {\n position: relative;\n display: block;\n will-change: transform;\n background: ${({ theme }) => theme.colors.neutral0};\n width: ${({ theme }) => theme.spaces[5]};\n height: ${({ theme }) => theme.spaces[5]};\n border: solid 1px ${({ theme }) => theme.colors.neutral300};\n border-radius: 50%;\n\n &:before,\n &:after {\n content: '';\n display: block;\n border-radius: 50%;\n width: ${({ theme }) => theme.spaces[3]};\n height: ${({ theme }) => theme.spaces[3]};\n position: absolute;\n top: 3px;\n left: 3px;\n }\n\n &:after {\n transform: scale(0);\n transition: inherit;\n will-change: transform;\n }\n }\n }\n\n .container input:checked ~ div {\n background: ${({ theme }) => theme.colors.primary100};\n color: ${({ theme }) => theme.colors.primary600};\n .checkmark {\n border: solid 1px ${({ theme }) => theme.colors.primary600};\n &::after {\n background: ${({ theme }) => theme.colors.primary600};\n transform: scale(1);\n }\n }\n }\n`;\n\nexport { Wrapper };\n","import { Box, Flex, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { Wrapper } from './Styles';\n\nimport type { IntlLabel } from '../../types';\n\ninterface Radio {\n title: IntlLabel;\n description: IntlLabel;\n value: any;\n}\n\ninterface CustomRadioGroupProps {\n intlLabel: IntlLabel;\n name: string;\n onChange: (value: any) => void;\n radios?: Radio[];\n value?: string | boolean;\n}\n\nexport const CustomRadioGroup = ({\n intlLabel,\n name,\n onChange,\n radios = [],\n value,\n}: CustomRadioGroupProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Typography variant=\"pi\" fontWeight=\"bold\" textColor=\"neutral800\" htmlFor={name} tag=\"label\">\n {formatMessage(intlLabel)}\n </Typography>\n <Wrapper gap={4} alignItems=\"stretch\">\n {radios.map((radio) => {\n return (\n <label htmlFor={radio.value.toString()} key={radio.value} className=\"container\">\n <input\n id={radio.value.toString()}\n name={name}\n className=\"option-input\"\n checked={radio.value === value}\n value={radio.value}\n key={radio.value}\n onChange={onChange}\n type=\"radio\"\n />\n <Box className=\"option\" padding={4}>\n <Flex>\n <Box paddingRight={4}>\n <span className=\"checkmark\" />\n </Box>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Typography fontWeight=\"bold\">{formatMessage(radio.title)}</Typography>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage(radio.description)}\n </Typography>\n </Flex>\n </Flex>\n </Box>\n </label>\n );\n })}\n </Wrapper>\n </Flex>\n );\n};\n","import * as React from 'react';\n\nimport { IntlLabel } from '../types';\n\nimport { CustomRadioGroup } from './CustomRadioGroup';\n\ninterface BooleanRadioGroupProps {\n intlLabel: IntlLabel;\n name: string;\n onChange: (value: any) => void;\n}\n\nexport const BooleanRadioGroup = ({\n onChange,\n name,\n intlLabel,\n ...rest\n}: BooleanRadioGroupProps) => {\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const checked = e.target.value !== 'false';\n\n onChange({ target: { name, value: checked, type: 'boolean-radio-group' } });\n };\n\n return <CustomRadioGroup {...rest} name={name} onChange={handleChange} intlLabel={intlLabel} />;\n};\n","import { Box, Checkbox, Field, Flex, NumberInput, TextInput } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { IntlLabel } from '../types';\n\ninterface CheckboxWithNumberFieldProps {\n error?: string;\n intlLabel: IntlLabel;\n modifiedData: Record<string, any>;\n name: string;\n onChange: (value: any) => void;\n value?: any;\n}\n\nexport const CheckboxWithNumberField = ({\n error,\n intlLabel,\n modifiedData,\n name,\n onChange,\n value = null,\n}: CheckboxWithNumberFieldProps) => {\n const { formatMessage } = useIntl();\n const label = intlLabel.id\n ? formatMessage(\n { id: intlLabel.id, defaultMessage: intlLabel.defaultMessage },\n { ...intlLabel.values }\n )\n : name;\n\n const type = modifiedData.type === 'biginteger' ? 'text' : 'number';\n\n const disabled = !modifiedData.type;\n const errorMessage = error ? formatMessage({ id: error, defaultMessage: error }) : '';\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Checkbox\n id={name}\n name={name}\n onCheckedChange={(value) => {\n const initValue = type === 'text' ? '0' : 0;\n const nextValue = value ? initValue : null;\n\n onChange({ target: { name, value: nextValue } });\n }}\n checked={value !== null}\n >\n {label}\n </Checkbox>\n {value !== null && (\n <Box paddingLeft={6} style={{ maxWidth: '200px' }}>\n {type === 'text' ? (\n <Field.Root error={errorMessage} name={name}>\n <TextInput\n aria-label={label}\n disabled={disabled}\n onChange={onChange}\n value={value === null ? '' : value}\n />\n <Field.Error />\n </Field.Root>\n ) : (\n <Field.Root error={errorMessage} name={name}>\n <NumberInput\n aria-label={label}\n disabled={disabled}\n onValueChange={(value: any) => {\n onChange({ target: { name, value: value ?? 0, type } });\n }}\n value={value || 0}\n />\n <Field.Error />\n </Field.Root>\n )}\n </Box>\n )}\n </Flex>\n );\n};\n","import { useNotification } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../utils';\n\nimport { CustomRadioGroup } from './CustomRadioGroup';\n\nimport type { IntlLabel } from '../types';\n\ninterface Radio {\n title: IntlLabel;\n description: IntlLabel;\n value: any;\n}\n\ninterface ContentTypeRadioGroupProps {\n intlLabel: IntlLabel;\n name: string;\n onChange: (value: any) => void;\n radios?: Radio[];\n value?: string | boolean;\n}\n\nexport const ContentTypeRadioGroup = ({ onChange, ...rest }: ContentTypeRadioGroupProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n\n const handleChange = (e: any) => {\n toggleNotification({\n type: 'info',\n message: formatMessage({\n id: getTrad('contentType.kind.change.warning'),\n defaultMessage:\n 'You just changed the kind of a content type: API will be reset (routes, controllers, and services will be overwritten).',\n }),\n });\n\n onChange(e);\n };\n\n return <CustomRadioGroup {...rest} onChange={handleChange} />;\n};\n","/**\n *\n * DraftAndPublishToggle\n *\n */\n\nimport { useState } from 'react';\n\nimport { ConfirmDialog } from '@strapi/admin/strapi-admin';\nimport { Button, Checkbox, CheckboxProps, Dialog, Field } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../utils';\n\nimport type { IntlLabel } from '../types';\n\ninterface Description {\n id: string;\n defaultMessage: string;\n values?: Record<string, any>;\n}\n\ninterface DraftAndPublishToggleProps {\n description?: Description;\n disabled?: boolean;\n intlLabel: IntlLabel;\n isCreating: boolean;\n name: string;\n onChange: (value: { target: { name: string; value: boolean } }) => void;\n value?: boolean;\n}\n\nexport const DraftAndPublishToggle = ({\n description,\n disabled = false,\n intlLabel,\n isCreating,\n name,\n onChange,\n value = false,\n}: DraftAndPublishToggleProps) => {\n const { formatMessage } = useIntl();\n const [showWarning, setShowWarning] = useState(false);\n const label = intlLabel.id\n ? formatMessage(\n { id: intlLabel.id, defaultMessage: intlLabel.defaultMessage },\n { ...intlLabel.values }\n )\n : name;\n\n const hint = description\n ? formatMessage(\n { id: description.id, defaultMessage: description.defaultMessage },\n { ...description.values }\n )\n : '';\n\n const handleConfirm = () => {\n onChange({ target: { name, value: false } });\n\n setShowWarning(false);\n };\n\n const handleChange: CheckboxProps['onCheckedChange'] = (checked) => {\n if (!checked && !isCreating) {\n setShowWarning(true);\n\n return;\n }\n\n onChange({ target: { name, value: !!checked } });\n };\n\n return (\n <>\n <Field.Root hint={hint} name={name}>\n <Checkbox checked={value} disabled={disabled} onCheckedChange={handleChange}>\n {label}\n </Checkbox>\n <Field.Hint />\n </Field.Root>\n\n <Dialog.Root open={showWarning} onOpenChange={(isOpen) => setShowWarning(isOpen)}>\n <ConfirmDialog\n endAction={\n <Button onClick={handleConfirm} variant=\"danger\" width=\"100%\" justifyContent=\"center\">\n {formatMessage({\n id: getTrad('popUpWarning.draft-publish.button.confirm'),\n defaultMessage: 'Yes, disable',\n })}\n </Button>\n }\n >\n {formatMessage({\n id: getTrad('popUpWarning.draft-publish.message'),\n defaultMessage: 'If you disable the draft & publish, your drafts will be deleted.',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n </>\n );\n};\n","/**\n *\n * FormModalEndActions\n *\n */\n\nimport { SyntheticEvent } from 'react';\n\nimport { Button, Flex } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../utils';\n\ntype FormModalEndActionsProps = {\n categoryName?: string;\n deleteCategory: (categoryName: string) => void;\n deleteComponent: () => void;\n deleteContentType: () => void;\n isAttributeModal: boolean;\n isCustomFieldModal: boolean;\n isComponentAttribute: boolean;\n isComponentModal: boolean;\n isComponentToDzModal: boolean;\n isContentTypeModal: boolean;\n isCreatingComponent: boolean;\n isCreatingComponentAttribute: boolean;\n isCreatingComponentInDz: boolean;\n isCreatingComponentWhileAddingAField: boolean;\n isCreatingContentType: boolean;\n isCreatingDz: boolean;\n isDzAttribute: boolean;\n isEditingAttribute: boolean;\n isEditingCategory: boolean;\n isInFirstComponentStep: boolean;\n onSubmitAddComponentAttribute: (e: SyntheticEvent, shouldContinue: boolean) => void;\n onSubmitAddComponentToDz: (e: SyntheticEvent, shouldContinue: boolean) => void;\n onSubmitCreateContentType: (e: SyntheticEvent, shouldContinue: boolean) => void;\n onSubmitCreateComponent: (e: SyntheticEvent, shouldContinue: boolean) => void;\n onSubmitCreateDz: (e: SyntheticEvent, shouldContinue: boolean) => void;\n onSubmitEditAttribute: (e: SyntheticEvent, shouldContinue: boolean) => void;\n onSubmitEditCategory: (e: SyntheticEvent) => void;\n onSubmitEditComponent: (e: SyntheticEvent, shouldContinue: boolean) => void;\n onSubmitEditContentType: (e: SyntheticEvent, shouldContinue: boolean) => void;\n onSubmitEditCustomFieldAttribute: (e: SyntheticEvent, shouldContinue: boolean) => void;\n onSubmitEditDz: (e: SyntheticEvent, shouldContinue: boolean) => void;\n onClickFinish: () => void;\n};\n\nexport const FormModalEndActions = ({\n categoryName,\n deleteCategory,\n deleteComponent,\n deleteContentType,\n isAttributeModal,\n isCustomFieldModal,\n isComponentAttribute,\n isComponentToDzModal,\n isContentTypeModal,\n isCreatingComponent,\n isCreatingComponentAttribute,\n isCreatingComponentInDz,\n isCreatingComponentWhileAddingAField,\n isCreatingContentType,\n isCreatingDz,\n isComponentModal,\n isDzAttribute,\n isEditingAttribute,\n isEditingCategory,\n isInFirstComponentStep,\n onSubmitAddComponentAttribute,\n onSubmitAddComponentToDz,\n onSubmitCreateContentType,\n onSubmitCreateComponent,\n onSubmitCreateDz,\n onSubmitEditAttribute,\n onSubmitEditCategory,\n onSubmitEditComponent,\n onSubmitEditContentType,\n onSubmitEditCustomFieldAttribute,\n onSubmitEditDz,\n onClickFinish,\n}: FormModalEndActionsProps) => {\n const { formatMessage } = useIntl();\n\n if (isComponentToDzModal) {\n if (isCreatingComponentInDz) {\n return (\n <Button\n variant=\"secondary\"\n type=\"submit\"\n onClick={(e: SyntheticEvent) => {\n e.preventDefault();\n\n onSubmitAddComponentToDz(e, true);\n }}\n startIcon={<Plus />}\n >\n {formatMessage({\n id: getTrad('form.button.add-first-field-to-created-component'),\n defaultMessage: 'Add first field to the component',\n })}\n </Button>\n );\n }\n\n return (\n <Button\n variant=\"default\"\n type=\"submit\"\n onClick={(e: SyntheticEvent) => {\n e.preventDefault();\n\n onSubmitAddComponentToDz(e, false);\n }}\n >\n {formatMessage({\n id: 'global.finish',\n defaultMessage: 'Finish',\n })}\n </Button>\n );\n }\n\n if (isAttributeModal && isDzAttribute && !isCreatingDz) {\n return (\n <Button\n variant=\"default\"\n type=\"submit\"\n onClick={(e: SyntheticEvent) => {\n e.preventDefault();\n\n onClickFinish();\n onSubmitEditDz(e, false);\n }}\n >\n {formatMessage({\n id: 'global.finish',\n defaultMessage: 'Finish',\n })}\n </Button>\n );\n }\n\n if (isAttributeModal && isDzAttribute && isCreatingDz) {\n return (\n <>\n <Button\n variant=\"secondary\"\n type=\"submit\"\n onClick={(e: SyntheticEvent) => {\n e.preventDefault();\n\n onSubmitCreateDz(e, true);\n }}\n startIcon={<Plus />}\n >\n {formatMessage({\n id: getTrad('form.button.add-components-to-dynamiczone'),\n defaultMessage: 'Add components to the zone',\n })}\n </Button>\n {/* // TO FIX fix doesnt close the modal */}\n {/* <Button\n variant=\"default\"\n type=\"button\"\n onClick={e => {\n e.preventDefault();\n\n onSubmitCreateDz(e, false);\n }}\n >\n {formatMessage({\n id: 'global.finish',\n defaultMessage: 'Finish',\n })}\n </Button> */}\n </>\n );\n }\n\n if (isAttributeModal && isComponentAttribute) {\n if (isInFirstComponentStep) {\n return (\n <Button\n variant=\"secondary\"\n type=\"submit\"\n onClick={(e: SyntheticEvent) => {\n e.preventDefault();\n\n onSubmitAddComponentAttribute(e, true);\n }}\n >\n {isCreatingComponentAttribute\n ? formatMessage({\n id: getTrad('form.button.configure-component'),\n defaultMessage: 'Configure the component',\n })\n : formatMessage({\n id: getTrad('form.button.select-component'),\n defaultMessage: 'Configure the component',\n })}\n </Button>\n );\n }\n\n return (\n <Flex gap={2}>\n <Button\n variant=\"secondary\"\n type=\"submit\"\n onClick={(e: SyntheticEvent) => {\n e.preventDefault();\n\n onSubmitAddComponentAttribute(e, true);\n }}\n startIcon={<Plus />}\n >\n {isCreatingComponentWhileAddingAField\n ? formatMessage({\n id: getTrad('form.button.add-first-field-to-created-component'),\n defaultMessage: 'Add first field to the component',\n })\n : formatMessage({\n id: getTrad('form.button.add-field'),\n defaultMessage: 'Add another field',\n })}\n </Button>\n <Button\n variant=\"default\"\n type=\"button\"\n onClick={(e: SyntheticEvent) => {\n e.preventDefault();\n\n onClickFinish();\n onSubmitAddComponentAttribute(e, false);\n }}\n >\n {formatMessage({\n id: 'global.finish',\n defaultMessage: 'Finish',\n })}\n </Button>\n </Flex>\n );\n }\n\n if (isAttributeModal && !isComponentAttribute && !isDzAttribute) {\n return (\n <Flex gap={2}>\n <Button\n type={isEditingAttribute ? 'button' : 'submit'}\n variant=\"secondary\"\n onClick={(e: SyntheticEvent) => {\n e.preventDefault();\n\n onSubmitEditAttribute(e, true);\n }}\n startIcon={<Plus />}\n >\n {formatMessage({\n id: getTrad('form.button.add-field'),\n defaultMessage: 'Add another field',\n })}\n </Button>\n <Button\n type={isEditingAttribute ? 'submit' : 'button'}\n variant=\"default\"\n onClick={(e: SyntheticEvent) => {\n e.preventDefault();\n\n onClickFinish();\n onSubmitEditAttribute(e, false);\n }}\n >\n {formatMessage({\n id: 'global.finish',\n defaultMessage: 'Finish',\n })}\n </Button>\n </Flex>\n );\n }\n\n if (isContentTypeModal) {\n return (\n <Flex gap={2}>\n {!isCreatingContentType && (\n <>\n <Button\n type=\"button\"\n variant=\"danger\"\n onClick={(e: SyntheticEvent) => {\n e.preventDefault();\n deleteContentType();\n }}\n >\n {formatMessage({\n id: 'global.delete',\n defaultMessage: 'Delete',\n })}\n </Button>\n <Button\n type=\"submit\"\n variant=\"default\"\n onClick={(e: SyntheticEvent) => {\n e.preventDefault();\n\n onSubmitEditContentType(e, false);\n }}\n >\n {formatMessage({\n id: 'global.finish',\n defaultMessage: 'Finish',\n })}\n </Button>\n </>\n )}\n {isCreatingContentType && (\n <Button\n type=\"submit\"\n variant=\"secondary\"\n onClick={(e: SyntheticEvent) => {\n e.preventDefault();\n\n onSubmitCreateContentType(e, true);\n }}\n >\n {formatMessage({\n id: 'global.continue',\n defaultMessage: 'Continue',\n })}\n </Button>\n )}\n </Flex>\n );\n }\n\n if (isComponentModal) {\n return (\n <Flex gap={2}>\n {!isCreatingComponent && (\n <>\n <Button\n type=\"button\"\n variant=\"danger\"\n onClick={(e: SyntheticEvent) => {\n e.preventDefault();\n deleteComponent();\n }}\n >\n {formatMessage({\n id: 'global.delete',\n defaultMessage: 'Delete',\n })}\n </Button>\n <Button\n type=\"submit\"\n variant=\"default\"\n onClick={(e: SyntheticEvent) => {\n e.preventDefault();\n\n onSubmitEditComponent(e, false);\n }}\n >\n {formatMessage({\n id: 'global.finish',\n defaultMessage: 'Finish',\n })}\n </Button>\n </>\n )}\n {isCreatingComponent && (\n <Button\n type=\"submit\"\n variant=\"secondary\"\n onClick={(e: SyntheticEvent) => {\n e.preventDefault();\n\n onSubmitCreateComponent(e, true);\n }}\n >\n {formatMessage({\n id: 'global.continue',\n defaultMessage: 'Continue',\n })}\n </Button>\n )}\n </Flex>\n );\n }\n\n if (isEditingCategory) {\n return (\n <Flex gap={2}>\n <Button\n type=\"button\"\n variant=\"danger\"\n onClick={(e: SyntheticEvent) => {\n e.preventDefault();\n if (categoryName) {\n deleteCategory(categoryName);\n }\n }}\n >\n {formatMessage({\n id: 'global.delete',\n defaultMessage: 'Delete',\n })}\n </Button>\n <Button\n type=\"submit\"\n variant=\"default\"\n onClick={(e: SyntheticEvent) => {\n e.preventDefault();\n\n onSubmitEditCategory(e);\n }}\n >\n {formatMessage({\n id: 'global.finish',\n defaultMessage: 'finish',\n })}\n </Button>\n </Flex>\n );\n }\n\n if (isCustomFieldModal) {\n return (\n <Flex gap={2}>\n <Button\n type={isEditingAttribute ? 'button' : 'submit'}\n variant=\"secondary\"\n onClick={(e: SyntheticEvent) => {\n e.preventDefault();\n\n onSubmitEditCustomFieldAttribute(e, true);\n }}\n startIcon={<Plus />}\n >\n {formatMessage({\n id: getTrad('form.button.add-field'),\n defaultMessage: 'Add another field',\n })}\n </Button>\n <Button\n type={isEditingAttribute ? 'submit' : 'button'}\n variant=\"default\"\n onClick={(e: SyntheticEvent) => {\n e.preventDefault();\n\n onClickFinish();\n onSubmitEditCustomFieldAttribute(e, false);\n }}\n >\n {formatMessage({\n id: 'global.finish',\n defaultMessage: 'Finish',\n })}\n </Button>\n </Flex>\n );\n }\n\n return null;\n};\n","/**\n *\n * FormModalHeader\n *\n */\nimport { Box, Flex, Breadcrumbs, Crumb, Link, Modal } from '@strapi/design-system';\nimport { ArrowLeft } from '@strapi/icons';\nimport upperFirst from 'lodash/upperFirst';\nimport { useIntl } from 'react-intl';\n\nimport { useDataManager } from '../hooks/useDataManager';\nimport { useFormModalNavigation } from '../hooks/useFormModalNavigation';\nimport { getTrad } from '../utils';\n\nimport { AttributeIcon, IconByType } from './AttributeIcon';\n\nimport type { SchemaType } from '../types';\nimport type { Internal } from '@strapi/types';\n\ninterface Header {\n label: string;\n info?: { category: string; name: string };\n}\n\ninterface FormModalHeaderProps {\n actionType?: string | null;\n attributeName: string;\n attributeType: IconByType;\n categoryName: string;\n contentTypeKind: IconByType;\n dynamicZoneTarget: string;\n forTarget: SchemaType;\n modalType: string | null;\n targetUid: Internal.UID.Schema;\n customFieldUid?: string | null;\n showBackLink?: boolean;\n}\n\nexport const FormModalHeader = ({\n actionType = null,\n attributeName,\n attributeType,\n categoryName,\n contentTypeKind,\n dynamicZoneTarget,\n forTarget,\n modalType = null,\n targetUid,\n customFieldUid = null,\n showBackLink = false,\n}: FormModalHeaderProps) => {\n const { formatMessage } = useIntl();\n const { modifiedData } = useDataManager();\n const { onOpenModalAddField } = useFormModalNavigation();\n\n let icon: IconByType = 'component';\n let headers: Header[] = [];\n\n const schema = modifiedData?.[forTarget]?.[targetUid] || modifiedData?.[forTarget] || null;\n const displayName = schema?.schema.displayName;\n\n if (modalType === 'contentType') {\n icon = contentTypeKind;\n }\n\n if (['component', 'editCategory'].includes(modalType || '')) {\n icon = 'component';\n }\n\n const isCreatingMainSchema = ['component', 'contentType'].includes(modalType || '');\n\n if (isCreatingMainSchema) {\n let headerId = getTrad(`modalForm.component.header-${actionType}`);\n\n if (modalType === 'contentType') {\n headerId = getTrad(`modalForm.${contentTypeKind}.header-create`);\n }\n\n if (actionType === 'edit') {\n headerId = getTrad(`modalForm.header-edit`);\n }\n\n return (\n <Modal.Header>\n <Flex>\n <Box>\n <AttributeIcon type={icon} />\n </Box>\n <Box paddingLeft={3}>\n <Modal.Title>{formatMessage({ id: headerId }, { name: displayName })}</Modal.Title>\n </Box>\n </Flex>\n </Modal.Header>\n );\n }\n\n headers = [\n {\n label: displayName,\n info: { category: schema?.category || null, name: schema?.schema.displayName },\n },\n ];\n\n if (modalType === 'chooseAttribute') {\n icon = ['component', 'components'].includes(forTarget) ? 'component' : schema.schema.kind;\n }\n\n if (modalType === 'addComponentToDynamicZone') {\n icon = 'dynamiczone';\n headers.push({ label: dynamicZoneTarget });\n }\n\n if (modalType === 'attribute' || modalType === 'customField') {\n icon = attributeType;\n headers.push({ label: attributeName });\n }\n\n if (modalType === 'editCategory') {\n const label = formatMessage({\n id: getTrad('modalForm.header.categories'),\n defaultMessage: 'Categories',\n });\n\n headers = [{ label }, { label: categoryName }];\n }\n\n return (\n <Modal.Header>\n <Flex gap={3}>\n {showBackLink && (\n // This is a workaround and should use the LinkButton with a variant that currently doesn't exist\n <Link\n aria-label={formatMessage({\n id: getTrad('modalForm.header.back'),\n defaultMessage: 'Back',\n })}\n startIcon={<ArrowLeft />}\n onClick={() => onOpenModalAddField({ forTarget, targetUid })}\n href=\"#back\"\n isExternal={false}\n />\n )}\n <AttributeIcon type={icon} customField={customFieldUid} />\n\n <Breadcrumbs label={headers.map(({ label }) => label).join(',')}>\n {headers.map(({ label, info }, index, arr) => {\n label = upperFirst(label);\n\n if (!label) {\n return null;\n }\n\n const key = `${label}.${index}`;\n\n if (info?.category) {\n label = `${label} (${upperFirst(info.category)} - ${upperFirst(info.name)})`;\n }\n\n return (\n <Crumb isCurrent={index === arr.length - 1} key={key}>\n {label}\n </Crumb>\n );\n })}\n </Breadcrumbs>\n </Flex>\n </Modal.Header>\n );\n};\n","import { StrapiAppContextValue } from '@strapi/admin/strapi-admin';\nimport { Flex, Typography } from '@strapi/design-system';\nimport upperFirst from 'lodash/upperFirst';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../utils';\n\nimport type { SchemaType } from '../types';\n\ntype ModalTitleProps = {\n forTarget?: SchemaType;\n step?: string;\n kind?: string;\n modalType?: string;\n actionType?: string;\n};\n\nexport const getModalTitleSubHeader = ({\n modalType,\n forTarget,\n kind,\n actionType,\n step,\n}: ModalTitleProps) => {\n switch (modalType) {\n case 'chooseAttribute':\n return getTrad(\n `modalForm.sub-header.chooseAttribute.${\n forTarget?.includes('component') ? 'component' : kind || 'collectionType'\n }`\n );\n case 'attribute': {\n return getTrad(\n `modalForm.sub-header.attribute.${actionType}${\n step !== 'null' && step !== null && actionType !== 'edit' ? '.step' : ''\n }`\n );\n }\n case 'customField': {\n return getTrad(`modalForm.sub-header.attribute.${actionType}`);\n }\n case 'addComponentToDynamicZone':\n return getTrad('modalForm.sub-header.addComponentToDynamicZone');\n default:\n return getTrad('configurations');\n }\n};\n\ntype FormModalSubHeaderProps = {\n actionType: string;\n modalType: string;\n forTarget: SchemaType;\n kind?: string;\n step?: string;\n attributeType: string;\n attributeName: string;\n customField?: ReturnType<StrapiAppContextValue['customFields']['get']>;\n};\n\nexport const FormModalSubHeader = ({\n actionType,\n modalType,\n forTarget,\n kind,\n step,\n attributeType,\n attributeName,\n customField,\n}: FormModalSubHeaderProps) => {\n const { formatMessage } = useIntl();\n const intlLabel =\n modalType === 'customField'\n ? customField?.intlLabel\n : { id: getTrad(`attribute.${attributeType}`) };\n\n return (\n <Flex direction=\"column\" alignItems=\"flex-start\" paddingBottom={1} gap={1}>\n <Typography tag=\"h2\" variant=\"beta\">\n {formatMessage(\n {\n id: getModalTitleSubHeader({\n actionType,\n forTarget,\n kind,\n step,\n modalType,\n }),\n defaultMessage: 'Add new field',\n },\n {\n type: intlLabel ? upperFirst(formatMessage(intlLabel)) : '',\n name: upperFirst(attributeName),\n step,\n }\n )}\n </Typography>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: getTrad(`attribute.${attributeType}.description`),\n defaultMessage: 'A type for modeling data',\n })}\n </Typography>\n </Flex>\n );\n};\n","import * as Icons from '@strapi/icons';\nimport * as Symbols from '@strapi/icons/symbols';\n\nexport type Icon = (typeof Icons)[keyof typeof Icons] | (typeof Symbols)[keyof typeof Symbols];\n\nconst COMPONENT_ICONS: Record<string, Icon> = {\n alien: Icons.Alien,\n apps: Icons.GridNine,\n archive: Icons.Archive,\n arrowDown: Icons.ArrowDown,\n arrowLeft: Icons.ArrowLeft,\n arrowRight: Icons.ArrowRight,\n arrowUp: Icons.ArrowUp,\n attachment: Icons.Paperclip,\n bell: Icons.Bell,\n bold: Icons.Bold,\n book: Icons.Book,\n briefcase: Icons.Briefcase,\n brush: Icons.PaintBrush,\n bulletList: Icons.BulletList,\n calendar: Icons.Calendar,\n car: Icons.Car,\n cast: Icons.Cast,\n chartBubble: Icons.ChartBubble,\n chartCircle: Icons.ChartCircle,\n chartPie: Icons.ChartPie,\n check: Icons.Check,\n clock: Icons.Clock,\n cloud: Icons.Cloud,\n code: Icons.Code,\n cog: Icons.Cog,\n collapse: Icons.Collapse,\n command: Icons.Command,\n connector: Icons.Faders,\n crop: Icons.Crop,\n crown: Icons.Crown,\n cup: Icons.Coffee,\n cursor: Icons.Cursor,\n dashboard: Icons.SquaresFour,\n database: Icons.Database,\n discuss: Icons.Discuss,\n doctor: Icons.Stethoscope,\n earth: Icons.Earth,\n emotionHappy: Icons.EmotionHappy,\n emotionUnhappy: Icons.EmotionUnhappy,\n envelop: Icons.Mail,\n exit: Icons.SignOut,\n expand: Icons.Expand,\n eye: Icons.Eye,\n feather: Icons.Feather,\n file: Icons.File,\n fileError: Icons.FileError,\n filePdf: Icons.FilePdf,\n filter: Icons.Filter,\n folder: Icons.Folder,\n gate: Icons.CastleTurret,\n gift: Icons.Gift,\n globe: Icons.Globe,\n grid: Icons.GridFour,\n handHeart: Icons.HandHeart,\n hashtag: Icons.Hashtag,\n headphone: Icons.Headphones,\n heart: Icons.Heart,\n house: Icons.House,\n information: Icons.Information,\n italic: Icons.Italic,\n key: Icons.Key,\n landscape: Icons.Images,\n layer: Icons.ListPlus,\n layout: Icons.Layout,\n lightbulb: Icons.Lightbulb,\n link: Icons.Link,\n lock: Icons.Lock,\n magic: Icons.Magic,\n manyToMany: Icons.ManyToMany,\n manyToOne: Icons.ManyToOne,\n manyWays: Icons.ManyWays,\n medium: Symbols.Medium,\n message: Icons.Message,\n microphone: Icons.Microphone,\n monitor: Icons.Monitor,\n moon: Icons.Moon,\n music: Icons.MusicNotes,\n oneToMany: Icons.OneToMany,\n oneToOne: Icons.OneToOne,\n oneWay: Icons.OneWay,\n paint: Icons.PaintBrush,\n paintBrush: Icons.PaintBrush,\n paperPlane: Icons.PaperPlane,\n pencil: Icons.Pencil,\n phone: Icons.Phone,\n picture: Icons.Image,\n pin: Icons.Pin,\n pinMap: Icons.PinMap,\n plane: Icons.Plane,\n play: Icons.Play,\n plus: Icons.Plus,\n priceTag: Icons.PriceTag,\n puzzle: Icons.PuzzlePiece,\n question: Icons.Question,\n quote: Icons.Quotes,\n refresh: Icons.ArrowClockwise,\n restaurant: Icons.Restaurant,\n rocket: Icons.Rocket,\n rotate: Icons.ArrowsCounterClockwise,\n scissors: Icons.Scissors,\n search: Icons.Search,\n seed: Icons.Plant,\n server: Icons.Server,\n shield: Icons.Shield,\n shirt: Icons.Shirt,\n shoppingCart: Icons.ShoppingCart,\n slideshow: Icons.PresentationChart,\n stack: Icons.Stack,\n star: Icons.Star,\n store: Icons.Store,\n strikeThrough: Icons.StrikeThrough,\n sun: Icons.Sun,\n television: Icons.Television,\n thumbDown: Icons.ThumbDown,\n thumbUp: Icons.ThumbUp,\n train: Icons.Train,\n twitter: Symbols.X,\n typhoon: Icons.Typhoon,\n underline: Icons.Underline,\n user: Icons.User,\n volumeMute: Icons.VolumeMute,\n volumeUp: Icons.VolumeUp,\n walk: Icons.Walk,\n wheelchair: Icons.Wheelchair,\n write: Icons.Feather,\n};\n\nexport { COMPONENT_ICONS };\n","import { useEffect, useRef, useState } from 'react';\n\nimport {\n Box,\n Field,\n Flex,\n IconButton,\n inputFocusStyle,\n Searchbar,\n Tooltip,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { Search, Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { getTrad } from '../../utils';\n\nimport { COMPONENT_ICONS } from './constants';\n\nimport type { IntlLabel } from '../../types';\n\nconst IconPickerWrapper = styled(Flex)`\n label {\n ${inputFocusStyle()}\n border-radius: ${({ theme }) => theme.borderRadius};\n border: 1px solid ${({ theme }) => theme.colors.neutral100};\n }\n`;\n\ntype Icons = keyof typeof COMPONENT_ICONS;\n\ninterface IconPickProps {\n iconKey: Icons;\n name: string;\n onChange: (value: any) => void;\n isSelected: boolean;\n ariaLabel: string;\n}\n\nconst IconPick = ({ iconKey, name, onChange, isSelected, ariaLabel }: IconPickProps) => {\n const Icon = COMPONENT_ICONS[iconKey];\n\n return (\n <Field.Root name={name} required={false}>\n <Field.Label>\n <VisuallyHidden>\n {ariaLabel}\n <Field.Input\n type=\"radio\"\n checked={isSelected}\n onChange={onChange}\n value={iconKey}\n aria-checked={isSelected}\n />\n </VisuallyHidden>\n <Flex\n padding={2}\n cursor=\"pointer\"\n hasRadius\n background={isSelected ? 'primary200' : undefined}\n >\n <Icon fill={isSelected ? 'primary600' : 'neutral300'} />\n </Flex>\n </Field.Label>\n </Field.Root>\n );\n};\n\nexport interface IconPickerProps {\n intlLabel: IntlLabel;\n name: string;\n onChange: (value: { target: { name: string; value: string } }) => void;\n value?: string;\n}\n\nexport const IconPicker = ({ intlLabel, name, onChange, value = '' }: IconPickerProps) => {\n const { formatMessage } = useIntl();\n const [showSearch, setShowSearch] = useState(false);\n const [search, setSearch] = useState('');\n const allIcons = Object.keys(COMPONENT_ICONS) as Icons[];\n const [icons, setIcons] = useState(allIcons);\n const searchIconRef = useRef(null);\n const searchBarRef = useRef(null);\n\n const toggleSearch = () => {\n setShowSearch(!showSearch);\n };\n\n const onChangeSearch = ({ target: { value } }: { target: { value: string } }) => {\n setSearch(value);\n setIcons(() => allIcons.filter((icon) => icon.toLowerCase().includes(value.toLowerCase())));\n };\n\n const onClearSearch = () => {\n toggleSearch();\n setSearch('');\n setIcons(allIcons);\n };\n\n const removeIconSelected = () => {\n onChange({ target: { name, value: '' } });\n };\n\n useEffect(() => {\n if (showSearch) {\n (searchBarRef.current as unknown as HTMLInputElement)?.focus();\n }\n }, [showSearch]);\n\n return (\n <>\n <Flex justifyContent=\"space-between\" paddingBottom={2}>\n <Typography variant=\"pi\" fontWeight=\"bold\" textColor=\"neutral800\" tag=\"label\">\n {formatMessage(intlLabel)}\n </Typography>\n <Flex gap={1}>\n {showSearch ? (\n <Searchbar\n ref={searchBarRef}\n name=\"searchbar\"\n placeholder={formatMessage({\n id: getTrad('ComponentIconPicker.search.placeholder'),\n defaultMessage: 'Search for an icon',\n })}\n onBlur={() => {\n if (!search) {\n toggleSearch();\n }\n }}\n onChange={onChangeSearch}\n value={search}\n onClear={onClearSearch}\n clearLabel={formatMessage({\n id: getTrad('IconPicker.search.clear.label'),\n defaultMessage: 'Clear the icon search',\n })}\n >\n {formatMessage({\n id: getTrad('IconPicker.search.placeholder.label'),\n defaultMessage: 'Search for an icon',\n })}\n </Searchbar>\n ) : (\n <IconButton\n ref={searchIconRef}\n onClick={toggleSearch}\n withTooltip={false}\n label={formatMessage({\n id: getTrad('IconPicker.search.button.label'),\n defaultMessage: 'Search icon button',\n })}\n variant=\"ghost\"\n >\n <Search />\n </IconButton>\n )}\n {value && (\n <Tooltip\n label={formatMessage({\n id: getTrad('IconPicker.remove.tooltip'),\n defaultMessage: 'Remove the selected icon',\n })}\n >\n <IconButton\n onClick={removeIconSelected}\n withTooltip={false}\n label={formatMessage({\n id: getTrad('IconPicker.remove.button'),\n defaultMessage: 'Remove the selected icon',\n })}\n variant=\"ghost\"\n >\n <Trash />\n </IconButton>\n </Tooltip>\n )}\n </Flex>\n </Flex>\n <IconPickerWrapper\n position=\"relative\"\n padding={1}\n background=\"neutral100\"\n hasRadius\n wrap=\"wrap\"\n gap={2}\n maxHeight=\"126px\"\n overflow=\"auto\"\n textAlign=\"center\"\n >\n {icons.length > 0 ? (\n icons.map((iconKey) => (\n <IconPick\n key={iconKey}\n iconKey={iconKey}\n name={name}\n onChange={onChange}\n isSelected={iconKey === value}\n ariaLabel={formatMessage(\n {\n id: getTrad('IconPicker.icon.label'),\n defaultMessage: 'Select {icon} icon',\n },\n { icon: iconKey }\n )}\n />\n ))\n ) : (\n <Box padding={4} grow={2}>\n <Typography variant=\"delta\" textColor=\"neutral600\" textAlign=\"center\">\n {formatMessage({\n id: getTrad('IconPicker.emptyState.label'),\n defaultMessage: 'No icon found',\n })}\n </Typography>\n </Box>\n )}\n </IconPickerWrapper>\n </>\n );\n};\n","import { useEffect, useRef } from 'react';\n\nimport { Field, TextInput } from '@strapi/design-system';\nimport pluralize from 'pluralize';\nimport { useIntl } from 'react-intl';\n\nimport { nameToSlug } from '../utils/nameToSlug';\n\nimport type { IntlLabel } from '../types';\n\ninterface Description {\n id: string;\n defaultMessage: string;\n values?: Record<string, any>;\n}\n\ninterface PluralNameProps {\n description?: Description;\n error?: string;\n intlLabel: IntlLabel;\n modifiedData: Record<string, any>;\n name: string;\n onChange: (value: { target: { name: string; value: string } }) => void;\n value?: string;\n}\n\nexport const PluralName = ({\n description,\n error,\n intlLabel,\n modifiedData,\n name,\n onChange,\n value,\n}: PluralNameProps) => {\n const { formatMessage } = useIntl();\n const onChangeRef = useRef(onChange);\n const displayName = modifiedData?.displayName || '';\n\n useEffect(() => {\n if (displayName) {\n const value = nameToSlug(displayName);\n\n try {\n const plural = pluralize(value, 2);\n onChangeRef.current({ target: { name, value: plural } });\n } catch (err) {\n onChangeRef.current({ target: { name, value } });\n }\n } else {\n onChangeRef.current({ target: { name, value: '' } });\n }\n }, [displayName, name]);\n\n const errorMessage = error ? formatMessage({ id: error, defaultMessage: error }) : '';\n const hint = description\n ? formatMessage(\n { id: description.id, defaultMessage: description.defaultMessage },\n { ...description.values }\n )\n : '';\n const label = formatMessage(intlLabel);\n\n return (\n <Field.Root error={errorMessage} hint={hint} name={name}>\n <Field.Label>{label}</Field.Label>\n <TextInput onChange={onChange} value={value || ''} />\n <Field.Error />\n </Field.Root>\n );\n};\n","export const parseDateValue = (value: unknown): Date | undefined => {\n if (value instanceof Date && isValidDate(value)) {\n return value;\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n const date = new Date(value);\n if (isValidDate(date)) {\n return date;\n }\n }\n};\n\nconst isValidDate = (date: Date): boolean => !isNaN(date.getTime());\n","type TimeChangeHandler = (params: {\n target: { name: string; value: string | undefined; type: string };\n}) => void;\n\ntype TimeChangeParams = {\n value?: string;\n onChange: TimeChangeHandler;\n name: string;\n type: string;\n};\n\n// The backend sends a value which has the following format: '00:45:00.000'\n// but the time picker only supports hours & minutes so we need to mutate the value\nconst removeSeconds = (time: string): string => {\n const [hours, minutes] = time.split(':');\n return `${hours}:${minutes}`;\n};\n\n// we need to send back the value with the same '00:45:00.000' format\nconst addSecondsAndMilliseconds = (time: string): string => {\n return time.split(':').length === 2 ? `${time}:00.000` : time;\n};\n\nconst formatTimeForInput = (value?: string): string | undefined => {\n if (!value) return;\n return value.split(':').length > 2 ? removeSeconds(value) : value;\n};\n\nconst formatTimeForOutput = (value?: string): string | undefined => {\n if (!value) return undefined;\n return addSecondsAndMilliseconds(value);\n};\n\nexport const handleTimeChange = ({ value }: TimeChangeParams): string | undefined => {\n const formattedInputTime = formatTimeForInput(value);\n\n return formattedInputTime;\n};\n\nexport const handleTimeChangeEvent = (\n onChange: TimeChangeHandler,\n name: string,\n type: string,\n time?: string\n): void => {\n const formattedOutputTime = formatTimeForOutput(time);\n\n onChange({\n target: {\n name,\n value: formattedOutputTime,\n type,\n },\n });\n};\n","/**\n * TODO: we should be using the FormRenderer from the admin to do this,\n * but the CTB has no tests or types, so we can't refactor it safely.\n * So we're just adding this to the tech debt.\n */\n\nimport * as React from 'react';\n\nimport {\n Checkbox,\n DatePicker,\n DateTimePicker,\n Field,\n JSONInput,\n NumberInput,\n SingleSelect,\n SingleSelectOption,\n Textarea,\n TextInput,\n TimePicker,\n Toggle,\n} from '@strapi/design-system';\nimport { Eye, EyeStriked } from '@strapi/icons';\nimport formatISO from 'date-fns/formatISO';\nimport isEqual from 'lodash/isEqual';\nimport { type MessageDescriptor, type PrimitiveType, useIntl } from 'react-intl';\n\nimport { parseDateValue } from '../utils/parseDateValue';\nimport { handleTimeChange, handleTimeChangeEvent } from '../utils/timeFormat';\n\nimport type { Schema } from '@strapi/types';\n\ninterface TranslationMessage extends MessageDescriptor {\n values?: Record<string, PrimitiveType>;\n}\n\ninterface InputOption {\n metadatas: {\n intlLabel: TranslationMessage;\n disabled: boolean;\n hidden: boolean;\n };\n key: string;\n value: string;\n}\n\ninterface CustomInputProps<TAttribute extends Schema.Attribute.AnyAttribute>\n extends Omit<GenericInputProps<TAttribute>, 'customInputs'> {\n ref?: React.Ref<HTMLElement>;\n hint?: string | React.JSX.Element | (string | React.JSX.Element)[];\n}\n\ninterface GenericInputProps<\n TAttribute extends Schema.Attribute.AnyAttribute = Schema.Attribute.AnyAttribute,\n> {\n attribute?: TAttribute;\n autoComplete?: string;\n customInputs?: Record<string, React.ComponentType<CustomInputProps<TAttribute>>>;\n description?: TranslationMessage;\n disabled?: boolean;\n error?: string | TranslationMessage;\n intlLabel: TranslationMessage;\n labelAction?: React.ReactNode;\n name: string;\n onChange: (\n payload: {\n target: {\n name: string;\n value: Schema.Attribute.Value<TAttribute>;\n type?: string;\n };\n },\n shouldSetInitialValue?: boolean\n ) => void;\n options?: InputOption[];\n placeholder?: TranslationMessage;\n required?: boolean;\n step?: number;\n type: string;\n // TODO: The value depends on the input type, too complicated to handle all cases here\n value?: Schema.Attribute.Value<TAttribute>;\n isNullable?: boolean;\n}\n\nconst GenericInput = ({\n autoComplete,\n customInputs,\n description,\n disabled,\n intlLabel,\n labelAction,\n error,\n name,\n onChange,\n options = [],\n placeholder,\n required,\n step,\n type,\n value: defaultValue,\n isNullable,\n attribute,\n ...rest\n}: GenericInputProps) => {\n const { formatMessage } = useIntl();\n\n // TODO: Workaround to get the field hint values if they exist on the type\n const getFieldHintValue = (\n attribute?: Schema.Attribute.AnyAttribute,\n key?: keyof FieldSchema\n ) => {\n if (!attribute) return;\n\n if (key === 'minLength' && key in attribute) {\n return attribute[key];\n }\n\n if (key === 'maxLength' && key in attribute) {\n return attribute[key];\n }\n\n if (key === 'max' && key in attribute) {\n return attribute[key];\n }\n\n if (key === 'min' && key in attribute) {\n return attribute[key];\n }\n };\n\n const { hint } = useFieldHint({\n description,\n fieldSchema: {\n minLength: getFieldHintValue(attribute, 'minLength'),\n maxLength: getFieldHintValue(attribute, 'maxLength'),\n max: getFieldHintValue(attribute, 'max'),\n min: getFieldHintValue(attribute, 'min'),\n },\n type: attribute?.type || type,\n });\n\n const [showPassword, setShowPassword] = React.useState(false);\n\n const CustomInput = customInputs ? customInputs[type] : null;\n\n // the API always returns null, which throws an error in React,\n // therefore we cast this case to undefined\n const value = defaultValue ?? undefined;\n\n /*\n TODO: ideally we should pass in `defaultValue` and `value` for\n inputs, in order to make them controlled components. This variable\n acts as a fallback for now, to prevent React errors in devopment mode\n\n See: https://github.com/strapi/strapi/pull/12861\n */\n const valueWithEmptyStringFallback = value ?? '';\n\n function getErrorMessage(error: string | TranslationMessage | undefined) {\n if (!error) {\n return null;\n }\n\n if (typeof error === 'string') {\n return formatMessage({ id: error, defaultMessage: error });\n }\n\n const values = {\n ...error.values,\n };\n\n return formatMessage(\n {\n id: error.id,\n defaultMessage: error?.defaultMessage ?? error.id,\n },\n values\n );\n }\n\n const errorMessage = getErrorMessage(error) ?? undefined;\n\n if (CustomInput) {\n return (\n <CustomInput\n {...rest}\n attribute={attribute}\n description={description}\n hint={hint}\n disabled={disabled}\n intlLabel={intlLabel}\n labelAction={labelAction}\n error={errorMessage || ''}\n name={name}\n onChange={onChange}\n options={options}\n required={required}\n placeholder={placeholder}\n type={type}\n value={value}\n />\n );\n }\n\n const label = intlLabel.id\n ? formatMessage(\n { id: intlLabel.id, defaultMessage: intlLabel.defaultMessage },\n { ...intlLabel.values }\n )\n : name;\n\n const formattedPlaceholder = placeholder\n ? formatMessage(\n { id: placeholder.id, defaultMessage: placeholder.defaultMessage },\n { ...placeholder.values }\n )\n : '';\n\n const getComponent = () => {\n switch (type) {\n case 'json': {\n return (\n <JSONInput\n value={value}\n disabled={disabled}\n onChange={(json) => {\n // Default to null when the field is not required and there is no input value\n const value =\n attribute && 'required' in attribute && !attribute?.required && !json.length\n ? null\n : json;\n onChange({ target: { name, value } }, false);\n }}\n minHeight=\"25.2rem\"\n maxHeight=\"50.4rem\"\n />\n );\n }\n case 'bool': {\n return (\n <Toggle\n checked={defaultValue === null ? null : defaultValue || false}\n disabled={disabled}\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'False',\n })}\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'True',\n })}\n onChange={(e) => {\n onChange({ target: { name, value: e.target.checked } });\n }}\n />\n );\n }\n case 'checkbox': {\n return (\n <Checkbox\n disabled={disabled}\n onCheckedChange={(value) => {\n onChange({ target: { name, value } });\n }}\n checked={Boolean(value)}\n >\n {label}\n </Checkbox>\n );\n }\n case 'datetime': {\n const dateValue = parseDateValue(value);\n return (\n <DateTimePicker\n clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}\n disabled={disabled}\n onChange={(date) => {\n // check if date is not null or undefined\n const formattedDate = date ? date.toISOString() : null;\n\n onChange({ target: { name, value: formattedDate, type } });\n }}\n onClear={() => onChange({ target: { name, value: null, type } })}\n placeholder={formattedPlaceholder}\n value={dateValue}\n />\n );\n }\n case 'date': {\n const dateValue = parseDateValue(value);\n return (\n <DatePicker\n clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}\n disabled={disabled}\n onChange={(date) => {\n onChange({\n target: {\n name,\n value: date ? formatISO(date, { representation: 'date' }) : null,\n type,\n },\n });\n }}\n onClear={() => onChange({ target: { name, value: null, type } })}\n placeholder={formattedPlaceholder}\n value={dateValue}\n />\n );\n }\n case 'number': {\n return (\n <NumberInput\n disabled={disabled}\n onValueChange={(value) => {\n onChange({ target: { name, value, type } });\n }}\n placeholder={formattedPlaceholder}\n step={step}\n value={value}\n />\n );\n }\n case 'email': {\n return (\n <TextInput\n autoComplete={autoComplete}\n disabled={disabled}\n onChange={(e) => {\n onChange({ target: { name, value: e.target.value, type } });\n }}\n placeholder={formattedPlaceholder}\n type=\"email\"\n value={valueWithEmptyStringFallback}\n />\n );\n }\n case 'timestamp':\n case 'text':\n case 'string': {\n return (\n <TextInput\n autoComplete={autoComplete}\n disabled={disabled}\n onChange={(e) => {\n onChange({ target: { name, value: e.target.value, type } });\n }}\n placeholder={formattedPlaceholder}\n type=\"text\"\n value={valueWithEmptyStringFallback}\n />\n );\n }\n case 'password': {\n return (\n <TextInput\n autoComplete={autoComplete}\n disabled={disabled}\n endAction={\n <button\n aria-label={formatMessage({\n id: 'Auth.form.password.show-password',\n defaultMessage: 'Show password',\n })}\n onClick={() => {\n setShowPassword((prev) => !prev);\n }}\n style={{\n border: 'none',\n padding: 0,\n background: 'transparent',\n }}\n type=\"button\"\n >\n {showPassword ? <Eye fill=\"neutral500\" /> : <EyeStriked fill=\"neutral500\" />}\n </button>\n }\n onChange={(e) => {\n onChange({ target: { name, value: e.target.value, type } });\n }}\n placeholder={formattedPlaceholder}\n type={showPassword ? 'text' : 'password'}\n value={valueWithEmptyStringFallback}\n />\n );\n }\n case 'select': {\n return (\n <SingleSelect\n disabled={disabled}\n onChange={(value) => {\n onChange({ target: { name, value, type: 'select' } });\n }}\n placeholder={formattedPlaceholder}\n value={value}\n >\n {options.map(({ metadatas: { intlLabel, disabled, hidden }, key, value }) => {\n return (\n <SingleSelectOption key={key} value={value} disabled={disabled} hidden={hidden}>\n {formatMessage(intlLabel)}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n );\n }\n case 'textarea': {\n return (\n <Textarea\n disabled={disabled}\n onChange={(event) => onChange({ target: { name, value: event.target.value, type } })}\n placeholder={formattedPlaceholder}\n value={valueWithEmptyStringFallback}\n />\n );\n }\n case 'time': {\n const formattedValue = handleTimeChange({ value, onChange, name, type });\n\n return (\n <TimePicker\n clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}\n disabled={disabled}\n onChange={(time) => handleTimeChangeEvent(onChange, name, type, time)}\n onClear={() => handleTimeChangeEvent(onChange, name, type, undefined)}\n value={formattedValue}\n />\n );\n }\n default: {\n /**\n * If there's no component for the given type, we return a disabled text input\n * showing a \"Not supported\" title to illustrate the issue.\n */\n return <TextInput disabled placeholder=\"Not supported\" type=\"text\" value=\"\" />;\n }\n }\n };\n\n return (\n <Field.Root error={errorMessage} name={name} hint={hint} required={required}>\n {type !== 'checkbox' ? <Field.Label action={labelAction}>{label}</Field.Label> : null}\n {getComponent()}\n <Field.Error />\n <Field.Hint />\n </Field.Root>\n );\n};\n\ntype FieldSchema = {\n minLength?: number | string;\n maxLength?: number | string;\n max?: number | string;\n min?: number | string;\n};\ninterface UseFieldHintProps {\n description?: MessageDescriptor & { values?: Record<string, PrimitiveType> };\n fieldSchema?: FieldSchema;\n type?: string;\n}\n\n/**\n * @description\n * A hook for generating the hint for a field\n */\nconst useFieldHint = ({ description, fieldSchema, type }: UseFieldHintProps) => {\n const { formatMessage } = useIntl();\n\n const buildDescription = () =>\n description?.id\n ? formatMessage(\n { id: description.id, defaultMessage: description.defaultMessage },\n { ...description.values }\n )\n : '';\n\n const buildHint = () => {\n const { maximum, minimum } = getMinMax(fieldSchema);\n const units = getFieldUnits({\n type,\n minimum,\n maximum,\n });\n\n const minIsNumber = typeof minimum === 'number';\n const maxIsNumber = typeof maximum === 'number';\n const hasMinAndMax = maxIsNumber && minIsNumber;\n const hasMinOrMax = maxIsNumber || minIsNumber;\n\n if (!description?.id && !hasMinOrMax) {\n return '';\n }\n\n return formatMessage(\n {\n id: 'content-manager.form.Input.hint.text',\n defaultMessage:\n '{min, select, undefined {} other {min. {min}}}{divider}{max, select, undefined {} other {max. {max}}}{unit}{br}{description}',\n },\n {\n min: minimum,\n max: maximum,\n description: buildDescription(),\n unit: units?.message && hasMinOrMax ? formatMessage(units.message, units.values) : null,\n divider: hasMinAndMax\n ? formatMessage({\n id: 'content-manager.form.Input.hint.minMaxDivider',\n defaultMessage: ' / ',\n })\n : null,\n br: hasMinOrMax ? <br /> : null,\n }\n );\n };\n\n return { hint: buildHint() };\n};\n\nconst getFieldUnits = ({\n type,\n minimum,\n maximum,\n}: {\n type?: string;\n minimum?: number;\n maximum?: number;\n}) => {\n if (type && ['biginteger', 'integer', 'number'].includes(type)) {\n return {};\n }\n const maxValue = Math.max(minimum || 0, maximum || 0);\n\n return {\n message: {\n id: 'content-manager.form.Input.hint.character.unit',\n defaultMessage: '{maxValue, plural, one { character} other { characters}}',\n },\n values: {\n maxValue,\n },\n };\n};\n\nconst getMinMax = (fieldSchema?: FieldSchema) => {\n if (!fieldSchema) {\n return { maximum: undefined, minimum: undefined };\n }\n\n const { minLength, maxLength, max, min } = fieldSchema;\n\n let minimum;\n let maximum;\n\n const parsedMin = Number(min);\n const parsedMinLength = Number(minLength);\n\n if (!Number.isNaN(parsedMin)) {\n minimum = parsedMin;\n } else if (!Number.isNaN(parsedMinLength)) {\n minimum = parsedMinLength;\n }\n\n const parsedMax = Number(max);\n const parsedMaxLength = Number(maxLength);\n\n if (!Number.isNaN(parsedMax)) {\n maximum = parsedMax;\n } else if (!Number.isNaN(parsedMaxLength)) {\n maximum = parsedMaxLength;\n }\n\n return { maximum, minimum };\n};\n\n/**\n * we've memoized this component because we use a context to store all the data in our form in the content-manager.\n * This then causes _every_ component to re-render because there are no selects incurring performance issues\n * in content-types as the content-type gets more complicated.\n */\nconst MemoizedGenericInput = React.memo(GenericInput, isEqual);\n\nexport type { GenericInputProps, CustomInputProps };\nexport { MemoizedGenericInput as GenericInput };\n","import { Menu } from '@strapi/design-system';\nimport { useDispatch } from 'react-redux';\nimport { styled } from 'styled-components';\n\nimport { useDataManager } from '../../../../hooks/useDataManager';\nimport { isAllowedContentTypesForRelations } from '../../../../utils';\nimport { ON_CHANGE_RELATION_TARGET } from '../../../FormModal/constants';\n\ninterface RelationTargetPickerProps {\n oneThatIsCreatingARelationWithAnother: string;\n target: string;\n}\n\nexport const RelationTargetPicker = ({\n oneThatIsCreatingARelationWithAnother,\n target,\n}: RelationTargetPickerProps) => {\n const { contentTypes, sortedContentTypesList } = useDataManager();\n const dispatch = useDispatch();\n // TODO: replace with an obj { relation: 'x', bidirctional: true|false }\n const allowedContentTypesForRelation = sortedContentTypesList.filter(\n isAllowedContentTypesForRelations\n );\n\n const { plugin = null, schema: { displayName } = { displayName: 'error' } } =\n contentTypes?.[target] ?? {};\n\n const handleSelect =\n ({\n uid,\n plugin,\n title,\n restrictRelationsTo,\n }: {\n uid: string;\n plugin: boolean;\n title: string;\n restrictRelationsTo: any;\n }) =>\n () => {\n const selectedContentTypeFriendlyName = plugin ? `${plugin}_${title}` : title;\n\n dispatch({\n type: ON_CHANGE_RELATION_TARGET,\n target: {\n value: uid,\n oneThatIsCreatingARelationWithAnother,\n selectedContentTypeFriendlyName,\n targetContentTypeAllowedRelations: restrictRelationsTo,\n },\n });\n };\n\n /**\n * TODO: This should be a Select but the design doesn't match the\n * styles of the select component and there isn't the ability to\n * change it correctly.\n */\n return (\n <Menu.Root>\n <MenuTrigger>{`${displayName} ${plugin ? `(from: ${plugin})` : ''}`}</MenuTrigger>\n <Menu.Content zIndex=\"popover\">\n {allowedContentTypesForRelation.map(({ uid, title, restrictRelationsTo, plugin }) => (\n <Menu.Item key={uid} onSelect={handleSelect({ uid, plugin, title, restrictRelationsTo })}>\n {title} \n {plugin && <>(from: {plugin})</>}\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Root>\n );\n};\n\nconst MenuTrigger = styled(Menu.Trigger)`\n max-width: 16.8rem;\n span {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n`;\n","import { Box, Divider, Flex, Typography } from '@strapi/design-system';\n\nimport { getTrad } from '../../../utils/getTrad';\nimport { GenericInput } from '../../GenericInputs';\n\nimport { RelationTargetPicker } from './RelationTargetPicker/RelationTargetPicker';\n\ninterface RelationFormBoxProps {\n disabled?: boolean;\n error?: Record<string, any>;\n header?: string;\n isMain?: boolean;\n name: string;\n onChange: (value: any) => void;\n oneThatIsCreatingARelationWithAnother?: string;\n target?: string;\n value?: string;\n}\n\nexport const RelationFormBox = ({\n disabled = false,\n error,\n header,\n isMain = false,\n name,\n onChange,\n oneThatIsCreatingARelationWithAnother = '',\n target = '',\n value = '',\n}: RelationFormBoxProps) => {\n return (\n <Box background=\"neutral100\" hasRadius borderColor=\"neutral200\">\n <Flex paddingTop={isMain ? 4 : 1} paddingBottom={isMain ? 3 : 1} justifyContent=\"center\">\n {isMain ? (\n <Typography variant=\"pi\" fontWeight=\"bold\" textColor=\"neutral800\">\n {header}\n </Typography>\n ) : (\n <RelationTargetPicker\n target={target}\n oneThatIsCreatingARelationWithAnother={oneThatIsCreatingARelationWithAnother}\n />\n )}\n </Flex>\n <Divider background=\"neutral200\" />\n <Box padding={4}>\n <GenericInput\n disabled={disabled}\n error={error?.id || null}\n intlLabel={{\n id: getTrad('form.attribute.item.defineRelation.fieldName'),\n defaultMessage: 'Field name',\n }}\n name={name}\n onChange={onChange}\n type=\"text\"\n value={value}\n />\n </Box>\n </Box>\n );\n};\n","import { Box, BoxComponent, Flex, FlexComponent } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nconst Wrapper = styled<BoxComponent>(Box)`\n position: relative;\n width: 100%;\n &::before {\n content: '';\n position: absolute;\n top: calc(50% - 0px);\n height: 2px;\n width: 100%;\n background-color: ${({ theme }) => theme.colors.primary600};\n z-index: 0;\n }\n`;\n\nconst IconWrapper = styled<BoxComponent<'button'>>(Box)<{ $isSelected: boolean }>`\n background: ${({ theme, $isSelected }) => theme.colors[$isSelected ? 'primary100' : 'neutral0']};\n border: 1px solid\n ${({ theme, $isSelected }) => theme.colors[$isSelected ? 'primary700' : 'neutral200']};\n border-radius: ${({ theme }) => theme.borderRadius};\n z-index: 1;\n flex: 0 0 2.4rem;\n svg {\n width: 2.4rem;\n height: 2.4rem;\n max-width: unset;\n path {\n fill: ${({ theme, $isSelected }) => theme.colors[$isSelected ? 'primary700' : 'neutral500']};\n }\n }\n cursor: pointer;\n &:disabled {\n cursor: not-allowed;\n }\n`;\n\nconst InfosWrapper = styled<FlexComponent>(Flex)`\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n`;\n\nexport { IconWrapper, InfosWrapper, Wrapper };\n","import { Flex, KeyboardNavigable, Typography } from '@strapi/design-system';\nimport {\n ManyToMany,\n ManyToOne,\n ManyWays as ManyWay,\n OneToMany,\n OneToOne,\n OneWay,\n} from '@strapi/icons';\nimport get from 'lodash/get';\nimport truncate from 'lodash/truncate';\nimport pluralize from 'pluralize';\nimport { useIntl } from 'react-intl';\nimport { useDispatch } from 'react-redux';\n\nimport { useDataManager } from '../../../hooks/useDataManager';\nimport { getTrad } from '../../../utils/getTrad';\nimport { ON_CHANGE_RELATION_TYPE } from '../../FormModal/constants';\n\nimport { IconWrapper, InfosWrapper, Wrapper } from './Components';\n\nconst relations = {\n oneWay: OneWay,\n oneToOne: OneToOne,\n oneToMany: OneToMany,\n manyToOne: ManyToOne,\n manyToMany: ManyToMany,\n manyWay: ManyWay,\n};\n\ntype RelationType = keyof typeof relations;\n\ninterface RelationNaturePickerProps {\n naturePickerType: string;\n oneThatIsCreatingARelationWithAnother: string;\n relationType: string;\n target: string;\n}\n\nexport const RelationNaturePicker = ({\n naturePickerType,\n oneThatIsCreatingARelationWithAnother,\n relationType,\n target,\n}: RelationNaturePickerProps) => {\n const dispatch = useDispatch();\n const { formatMessage } = useIntl();\n\n const { contentTypes, modifiedData } = useDataManager();\n const ctRelations = ['oneWay', 'oneToOne', 'oneToMany', 'manyToOne', 'manyToMany', 'manyWay'];\n const componentRelations = ['oneWay', 'manyWay'];\n const dataType =\n naturePickerType === 'contentType'\n ? get(modifiedData, [naturePickerType, 'schema', 'kind'], '')\n : naturePickerType;\n const relationsType = (\n dataType === 'collectionType' ? ctRelations : componentRelations\n ) as RelationType[];\n\n const areDisplayedNamesInverted = relationType === 'manyToOne';\n const targetLabel = get(contentTypes, [target, 'schema', 'displayName'], 'unknown');\n const leftTarget = areDisplayedNamesInverted\n ? targetLabel\n : oneThatIsCreatingARelationWithAnother;\n const rightTarget = areDisplayedNamesInverted\n ? oneThatIsCreatingARelationWithAnother\n : targetLabel;\n const leftDisplayedValue = pluralize(leftTarget, relationType === 'manyToMany' ? 2 : 1);\n const restrictedRelations = get(contentTypes, [target, 'schema', 'restrictRelationsTo'], null);\n\n const rightDisplayedValue = pluralize(\n rightTarget,\n ['manyToMany', 'oneToMany', 'manyToOne', 'manyWay'].includes(relationType) ? 2 : 1\n );\n\n if (!relationType) {\n return null;\n }\n\n return (\n <Flex style={{ flex: 1 }}>\n <Wrapper>\n <Flex paddingLeft={9} paddingRight={9} paddingTop={1} justifyContent=\"center\">\n <KeyboardNavigable tagName=\"button\">\n <Flex gap={3}>\n {relationsType.map((relation) => {\n const Asset = relations[relation];\n const isEnabled =\n restrictedRelations === null || restrictedRelations.includes(relation);\n\n return (\n <IconWrapper\n tag=\"button\"\n $isSelected={relationType === relation}\n disabled={!isEnabled}\n key={relation}\n onClick={() => {\n if (isEnabled) {\n dispatch({\n type: ON_CHANGE_RELATION_TYPE,\n target: {\n oneThatIsCreatingARelationWithAnother,\n targetContentType: target,\n value: relation,\n },\n });\n }\n }}\n padding={2}\n type=\"button\"\n >\n <Asset key={relation} />\n </IconWrapper>\n );\n })}\n </Flex>\n </KeyboardNavigable>\n </Flex>\n </Wrapper>\n <InfosWrapper justifyContent=\"center\">\n <Typography>{truncate(leftDisplayedValue, { length: 24 })} </Typography>\n <Typography textColor=\"primary600\">\n {formatMessage({ id: getTrad(`relation.${relationType}`) })} \n </Typography>\n <Typography>{truncate(rightDisplayedValue, { length: 24 })}</Typography>\n </InfosWrapper>\n </Flex>\n );\n};\n","import { Flex } from '@strapi/design-system';\n\nimport { getRelationType } from '../../utils/getRelationType';\n\nimport { RelationFormBox } from './RelationField/RelationField';\nimport { RelationNaturePicker } from './RelationNaturePicker/RelationNaturePicker';\n\ninterface RelationProps {\n formErrors: Record<string, any>;\n mainBoxHeader: string;\n modifiedData: Record<string, any>;\n onChange: (value: any) => void;\n naturePickerType: string;\n}\n\nexport const Relation = ({\n formErrors,\n mainBoxHeader,\n modifiedData,\n naturePickerType,\n onChange,\n}: RelationProps) => {\n const relationType = getRelationType(modifiedData.relation, modifiedData.targetAttribute);\n\n return (\n <Flex style={{ position: 'relative' }}>\n <RelationFormBox\n isMain\n header={mainBoxHeader}\n error={formErrors?.name || null}\n name=\"name\"\n onChange={onChange}\n value={modifiedData?.name || ''}\n />\n <RelationNaturePicker\n naturePickerType={naturePickerType}\n oneThatIsCreatingARelationWithAnother={mainBoxHeader}\n relationType={relationType!}\n target={modifiedData.target}\n />\n <RelationFormBox\n disabled={['oneWay', 'manyWay'].includes(relationType!)}\n error={formErrors?.targetAttribute || null}\n name=\"targetAttribute\"\n onChange={onChange}\n oneThatIsCreatingARelationWithAnother={mainBoxHeader}\n target={modifiedData.target}\n value={modifiedData?.targetAttribute || ''}\n />\n </Flex>\n );\n};\n","import { useState } from 'react';\n\nimport { ComboboxOption, Combobox, Field } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useDataManager } from '../hooks/useDataManager';\n\ninterface SelectCategoryProps {\n error?: string | null;\n intlLabel: {\n id: string;\n defaultMessage: string;\n values?: Record<string, any>;\n };\n name: string;\n onChange: (value: { target: { name: string; value: any; type: string } }) => void;\n value?: string;\n isCreating?: boolean;\n dynamicZoneTarget?: string | null;\n}\n\nexport const SelectCategory = ({\n error = null,\n intlLabel,\n name,\n onChange,\n value = undefined,\n isCreating,\n dynamicZoneTarget,\n}: SelectCategoryProps) => {\n const { formatMessage } = useIntl();\n const { allComponentsCategories } = useDataManager();\n const [categories, setCategories] = useState(allComponentsCategories);\n\n const errorMessage = error ? formatMessage({ id: error, defaultMessage: error }) : '';\n const label = formatMessage(intlLabel);\n\n const handleChange = (value: any) => {\n onChange({ target: { name, value, type: 'select-category' } });\n };\n\n const handleCreateOption = (value: any) => {\n setCategories((prev) => [...prev, value]);\n handleChange(value);\n };\n\n return (\n <Field.Root error={errorMessage} name={name}>\n <Field.Label>{label}</Field.Label>\n <Combobox\n // TODO: re-enable category edits, renaming categories of already existing components currently breaks other functionality\n // See https://github.com/strapi/strapi/issues/20356\n disabled={!isCreating && !dynamicZoneTarget}\n onChange={handleChange}\n onCreateOption={handleCreateOption}\n value={value}\n creatable\n >\n {categories.map((category) => (\n <ComboboxOption key={category} value={category}>\n {category}\n </ComboboxOption>\n ))}\n </Combobox>\n <Field.Error />\n </Field.Root>\n );\n};\n","import type { ComponentWithChildren } from '../components/DataManagerProvider/utils/retrieveComponentsThatHaveComponents';\nimport type { NestedComponent } from '../components/DataManagerProvider/utils/retrieveNestedComponents';\nimport type { Internal } from '@strapi/types';\n\nconst findComponent = <T extends { component: Internal.UID.Component }>(\n componentUid: Internal.UID.Schema,\n components: Array<T>\n) => {\n return components.find((c) => c.component === componentUid);\n};\n\n/**\n * Recursively calculates the maximum depth of nested child components\n * for a given component UID.\n *\n * @param componentUid - The UID of the component to start from.\n * @param components - The array of all components with their child components.\n * @param currentDepth - The current depth of the recursion. Defaults to 0.\n * @returns The maximum depth of the nested child components.\n */\nexport const getChildrenMaxDepth = (\n componentUid: Internal.UID.Component,\n components: Array<ComponentWithChildren>,\n currentDepth = 0\n) => {\n const component = findComponent(componentUid, components);\n\n // If the component doesn't exist or has no child components, return the current depth.\n if (!component || !component.childComponents || component.childComponents.length === 0) {\n return currentDepth;\n }\n\n let maxDepth = currentDepth;\n\n // Iterate through each child component to calculate their respective depths.\n component.childComponents.forEach((child) => {\n // Recursively calculate the depth of the child component.\n const depth = getChildrenMaxDepth(child.component, components, currentDepth + 1);\n // Update the maximum depth if the child's depth is greater.\n if (depth > maxDepth) {\n maxDepth = depth;\n }\n });\n\n return maxDepth;\n};\n\n/**\n * Calculates the depth of a component within a nested component tree.\n * Depth is defined as the level at which the component is nested.\n * For example, a component at Depth 3 is the third nested component.\n *\n * @param component - The UID of the component to find the depth for.\n * @param components - The array of all nested components.\n * @returns The depth level of the component within the nested tree.\n */\nexport const getComponentDepth = (\n component: Internal.UID.Schema,\n components: Array<NestedComponent>\n) => {\n /**\n * Helper function to recursively calculate the depth of a component.\n *\n * @param currentComponent - The current component being inspected.\n * @param currentLevel - The current level of depth in the tree.\n * @returns An array of depth levels found for the component.\n */\n const getDepth = (currentComponent: NestedComponent, currentLevel: number): Array<number> => {\n const levels = [];\n levels.push(currentLevel);\n\n // If the component has no parent UIDs, return the current levels\n if (!currentComponent.uidsOfAllParents) {\n return levels;\n }\n\n // Iterate over each parent UID to calculate their respective depths\n for (const parentUid of currentComponent.uidsOfAllParents) {\n const parentComponent = findComponent(parentUid, components);\n if (parentComponent) {\n levels.push(...getDepth(parentComponent, currentLevel + 1));\n }\n }\n\n return levels;\n };\n\n const nestedCompo = findComponent(component, components);\n // return depth 0 if component is not nested\n if (!nestedCompo) {\n return 0;\n }\n const compoDepth = Math.max(...getDepth(nestedCompo, 1));\n return compoDepth;\n};\n","import { SingleSelectOption, SingleSelect, Field } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { MAX_COMPONENT_DEPTH } from '../constants';\nimport { useDataManager } from '../hooks/useDataManager';\nimport { getChildrenMaxDepth, getComponentDepth } from '../utils/getMaxDepth';\n\nimport type { Internal } from '@strapi/types';\ninterface Option {\n uid: string;\n label: string;\n categoryName: string;\n}\n\ninterface SelectComponentProps {\n componentToCreate?: Record<string, any> | null;\n error?: string | null;\n intlLabel: {\n id: string;\n defaultMessage: string;\n values?: Record<string, any>;\n };\n isAddingAComponentToAnotherComponent: boolean;\n isCreating: boolean;\n isCreatingComponentWhileAddingAField: boolean;\n name: string;\n onChange: (value: any) => void;\n targetUid: Internal.UID.Schema;\n value: string;\n forTarget: string;\n}\n\nexport const SelectComponent = ({\n error = null,\n intlLabel,\n isAddingAComponentToAnotherComponent,\n isCreating,\n isCreatingComponentWhileAddingAField,\n componentToCreate,\n name,\n onChange,\n targetUid,\n forTarget,\n value,\n}: SelectComponentProps) => {\n const { formatMessage } = useIntl();\n const errorMessage = error ? formatMessage({ id: error, defaultMessage: error }) : '';\n const label = formatMessage(intlLabel);\n\n const {\n componentsGroupedByCategory,\n componentsThatHaveOtherComponentInTheirAttributes,\n nestedComponents,\n } = useDataManager();\n\n const isTargetAComponent = ['component', 'components'].includes(forTarget);\n\n let options: Option[] = Object.entries(componentsGroupedByCategory).reduce(\n (acc: Option[], current) => {\n const [categoryName, components] = current;\n const compos = components.map((component) => {\n return {\n uid: component.uid,\n label: component.schema.displayName,\n categoryName,\n };\n });\n\n return [...acc, ...compos];\n },\n []\n );\n\n if (isAddingAComponentToAnotherComponent) {\n options = options.filter(({ uid }: any) => {\n const maxDepth = getChildrenMaxDepth(uid, componentsThatHaveOtherComponentInTheirAttributes);\n const componentDepth = getComponentDepth(targetUid, nestedComponents);\n const totalDepth = maxDepth + componentDepth;\n return totalDepth <= MAX_COMPONENT_DEPTH;\n });\n }\n\n if (isTargetAComponent) {\n options = options.filter((option) => {\n return option.uid !== targetUid;\n });\n }\n\n if (isCreatingComponentWhileAddingAField) {\n options = [\n {\n uid: value,\n label: componentToCreate?.displayName,\n categoryName: componentToCreate?.category,\n },\n ];\n }\n\n return (\n <Field.Root error={errorMessage} name={name}>\n <Field.Label>{label}</Field.Label>\n <SingleSelect\n disabled={isCreatingComponentWhileAddingAField || !isCreating}\n onChange={(value: any) => {\n onChange({ target: { name, value, type: 'select-category' } });\n }}\n value={value || ''}\n >\n {options.map((option) => {\n return (\n <SingleSelectOption key={option.uid} value={option.uid}>\n {`${option.categoryName} - ${option.label}`}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n <Field.Error />\n </Field.Root>\n );\n};\n","import { Field, MultiSelectNested } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useDataManager } from '../hooks/useDataManager';\nimport { getTrad } from '../utils';\nimport { findAttribute } from '../utils/findAttribute';\n\nimport type { Component } from '../types';\n\ntype SelectComponentsProps = {\n dynamicZoneTarget: string;\n intlLabel: {\n id: string;\n defaultMessage: string;\n values?: object;\n };\n name: string;\n onChange: (value: {\n target: {\n name: string;\n value: string[];\n type?: string;\n };\n }) => void;\n value: string[];\n};\n\nexport const SelectComponents = ({\n dynamicZoneTarget,\n intlLabel,\n name,\n onChange,\n value,\n}: SelectComponentsProps) => {\n const { formatMessage } = useIntl();\n const { componentsGroupedByCategory, modifiedData } = useDataManager();\n const dzSchema = findAttribute(modifiedData.contentType.schema.attributes, dynamicZoneTarget);\n const alreadyUsedComponents = dzSchema?.components || [];\n const filteredComponentsGroupedByCategory = Object.keys(componentsGroupedByCategory).reduce(\n (acc, current) => {\n const filteredComponents = componentsGroupedByCategory[current].filter(({ uid }) => {\n return !alreadyUsedComponents.includes(uid);\n });\n\n if (filteredComponents.length > 0) {\n acc[current] = filteredComponents;\n }\n\n return acc;\n },\n {} as Record<string, Component[]>\n );\n const options = Object.entries(filteredComponentsGroupedByCategory).reduce(\n (acc, current) => {\n const [categoryName, components] = current;\n const section = {\n label: categoryName,\n children: components.map(({ uid, schema: { displayName } }) => {\n return { label: displayName, value: uid };\n }),\n };\n\n acc.push(section);\n\n return acc;\n },\n [] as Array<{ label: string; children: Array<{ label: string; value: string }> }>\n );\n\n const displayedValue = formatMessage(\n {\n id: getTrad('components.SelectComponents.displayed-value'),\n defaultMessage:\n '{number, plural, =0 {# components} one {# component} other {# components}} selected',\n },\n { number: value?.length ?? 0 }\n );\n\n return (\n <Field.Root name={name}>\n <Field.Label>{formatMessage(intlLabel)}</Field.Label>\n <MultiSelectNested\n id=\"select1\"\n customizeContent={() => displayedValue}\n onChange={(values) => {\n onChange({ target: { name, value: values, type: 'select-components' } });\n }}\n options={options}\n value={value || []}\n />\n </Field.Root>\n );\n};\n","import { Field, SingleSelect, SingleSelectOption } from '@strapi/design-system';\nimport { PrimitiveType, useIntl } from 'react-intl';\n\ntype SelectDateTypeProps = {\n intlLabel: {\n id: string;\n defaultMessage: string;\n values?: object;\n };\n error?: string;\n modifiedData: {\n default: number;\n max: number;\n min: number;\n };\n name: string;\n onChange: (value: {\n target: {\n name: string;\n value: string | number | null;\n type?: string;\n };\n }) => void;\n options: Array<{\n metadatas: {\n intlLabel: {\n id: string;\n defaultMessage: string;\n values: Record<string, PrimitiveType> | undefined;\n };\n disabled?: boolean;\n hidden?: boolean;\n };\n key: string | number;\n value: string | number;\n }>;\n value?: string;\n};\n\nexport const SelectDateType = ({\n intlLabel,\n error = undefined,\n modifiedData,\n name,\n onChange,\n options,\n value = '',\n}: SelectDateTypeProps) => {\n const { formatMessage } = useIntl();\n const label = formatMessage(intlLabel);\n const errorMessage = error ? formatMessage({ id: error, defaultMessage: error }) : '';\n\n const handleChange = (nextValue: string | number) => {\n onChange({ target: { name, value: nextValue, type: 'select' } });\n\n if (!value) {\n return;\n }\n\n if (modifiedData.default !== undefined && modifiedData.default !== null) {\n onChange({ target: { name: 'default', value: null } });\n }\n };\n\n return (\n <Field.Root error={errorMessage} name={name}>\n <Field.Label>{label}</Field.Label>\n <SingleSelect onChange={handleChange} value={value || ''}>\n {options.map(({ metadatas: { intlLabel, disabled, hidden }, key, value }) => {\n return (\n <SingleSelectOption key={key} value={value} disabled={disabled} hidden={hidden}>\n {formatMessage(\n { id: intlLabel.id, defaultMessage: intlLabel.defaultMessage },\n intlLabel.values\n )}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n <Field.Error />\n </Field.Root>\n );\n};\n","import { SingleSelectOption, SingleSelect, Field } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\ntype SelectNumberProps = {\n intlLabel: {\n id: string;\n defaultMessage: string;\n values?: object;\n };\n error?: string;\n modifiedData: {\n default: number;\n max: number;\n min: number;\n };\n name: string;\n onChange: (value: {\n target: {\n name: string;\n value: string | number | null;\n type?: string;\n };\n }) => void;\n options: Array<{\n metadatas: {\n intlLabel: {\n id: string;\n defaultMessage: string;\n };\n disabled?: boolean;\n hidden?: boolean;\n };\n key: string | number;\n value: string | number;\n }>;\n value?: string;\n};\n\nexport const SelectNumber = ({\n intlLabel,\n error = undefined,\n modifiedData,\n name,\n onChange,\n options,\n value = '',\n}: SelectNumberProps) => {\n const { formatMessage } = useIntl();\n const label = formatMessage(intlLabel);\n const errorMessage = error ? formatMessage({ id: error, defaultMessage: error }) : '';\n\n const handleChange = (nextValue: string | number) => {\n onChange({ target: { name, value: nextValue, type: 'select' } });\n\n if (!value) {\n return;\n }\n\n if (nextValue === 'biginteger' && value !== 'biginteger') {\n if (modifiedData.default !== undefined && modifiedData.default !== null) {\n onChange({ target: { name: 'default', value: null } });\n }\n\n if (modifiedData.max !== undefined && modifiedData.max !== null) {\n onChange({ target: { name: 'max', value: null } });\n }\n\n if (modifiedData.min !== undefined && modifiedData.min !== null) {\n onChange({ target: { name: 'min', value: null } });\n }\n }\n\n if (\n typeof nextValue === 'string' &&\n ['decimal', 'float', 'integer'].includes(nextValue) &&\n value === 'biginteger'\n ) {\n if (modifiedData.default !== undefined && modifiedData.default !== null) {\n onChange({ target: { name: 'default', value: null } });\n }\n\n if (modifiedData.max !== undefined && modifiedData.max !== null) {\n onChange({ target: { name: 'max', value: null } });\n }\n\n if (modifiedData.min !== undefined && modifiedData.min !== null) {\n onChange({ target: { name: 'min', value: null } });\n }\n }\n };\n\n return (\n <Field.Root error={errorMessage} name={name}>\n <Field.Label>{label}</Field.Label>\n <SingleSelect onChange={handleChange} value={value || ''}>\n {options.map(({ metadatas: { intlLabel, disabled, hidden }, key, value }) => {\n return (\n <SingleSelectOption key={key} value={value} disabled={disabled} hidden={hidden}>\n {formatMessage(intlLabel)}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n <Field.Error />\n </Field.Root>\n );\n};\n\nSelectNumber.defaultProps = {\n error: undefined,\n value: '',\n};\n","import { useEffect, useRef } from 'react';\n\nimport { Field, TextInput } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { nameToSlug } from '../utils/nameToSlug';\n\nimport type { IntlLabel } from '../types';\n\ninterface SingularNameProps {\n description?: IntlLabel | null;\n error?: string | null;\n intlLabel: IntlLabel;\n modifiedData: Record<string, any>;\n name: string;\n onChange: (value: { target: { name: string; value: string } }) => void;\n value?: string | null;\n}\n\nexport const SingularName = ({\n description = null,\n error = null,\n intlLabel,\n modifiedData,\n name,\n onChange,\n value = null,\n}: SingularNameProps) => {\n const { formatMessage } = useIntl();\n const onChangeRef = useRef(onChange);\n const displayName = modifiedData?.displayName || '';\n\n useEffect(() => {\n if (displayName) {\n onChangeRef.current({ target: { name, value: nameToSlug(displayName) } });\n } else {\n onChangeRef.current({ target: { name, value: '' } });\n }\n }, [displayName, name]);\n\n const errorMessage = error ? formatMessage({ id: error, defaultMessage: error }) : '';\n const hint = description\n ? formatMessage(\n { id: description.id, defaultMessage: description.defaultMessage },\n { ...description.values }\n )\n : '';\n const label = formatMessage(intlLabel);\n\n return (\n <Field.Root error={errorMessage} hint={hint} name={name}>\n <Field.Label>{label}</Field.Label>\n <TextInput onChange={onChange} value={value || ''} />\n <Field.Error />\n <Field.Hint />\n </Field.Root>\n );\n};\n","import { Box, Grid, Typography } from '@strapi/design-system';\nimport get from 'lodash/get';\nimport { useIntl } from 'react-intl';\n\nimport { GenericInput } from './GenericInputs';\n\ninterface TabFormProps {\n form: Array<Record<string, any>>;\n formErrors: Record<string, any>;\n genericInputProps: Record<string, any>;\n modifiedData: Record<string, any>;\n onChange: (value: any) => void;\n}\n\n/* eslint-disable react/no-array-index-key */\nexport const TabForm = ({\n form,\n formErrors,\n genericInputProps,\n modifiedData,\n onChange,\n}: TabFormProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <>\n {form.map((section, sectionIndex) => {\n // Don't display an empty section\n if (section.items.length === 0) {\n return null;\n }\n\n return (\n <Box key={sectionIndex}>\n {section.sectionTitle && (\n <Box paddingBottom={4}>\n <Typography variant=\"delta\" tag=\"h3\">\n {formatMessage(section.sectionTitle)}\n </Typography>\n </Box>\n )}\n <Grid.Root gap={4}>\n {section.items.map((input: any, i: number) => {\n const key = `${sectionIndex}.${i}`;\n\n /**\n * Use undefined as the default value because not every input wants a string e.g. Date pickers\n */\n const value = get(modifiedData, input.name, undefined);\n\n // When extending the yup schema of an existing field (like in https://github.com/strapi/strapi/blob/293ff3b8f9559236609d123a2774e3be05ce8274/packages/strapi-plugin-i18n/admin/src/index.js#L52)\n // and triggering a yup validation error in the UI (missing a required field for example)\n // We got an object that looks like: formErrors = { \"pluginOptions.i18n.localized\": {...} }\n // In order to deal with this error, we can't rely on lodash.get to resolve this key\n // - lodash will try to access {pluginOptions: {i18n: {localized: true}}})\n // - and we just want to access { \"pluginOptions.i18n.localized\": {...} }\n // NOTE: this is a hack\n const pluginOptionError = Object.keys(formErrors).find((key) => key === input.name);\n\n // Retrieve the error for a specific input\n const errorId = pluginOptionError\n ? formErrors[pluginOptionError].id\n : get(\n formErrors,\n [\n ...input.name\n .split('.')\n // The filter here is used when creating a component\n // in the component step 1 modal\n // Since the component info is stored in the\n // componentToCreate object we can access the error\n // By removing the key\n .filter((key: string) => key !== 'componentToCreate'),\n 'id',\n ],\n null\n );\n\n if (input.type === 'pushRight') {\n return (\n <Grid.Item\n col={input.size || 6}\n key={input.name || key}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <div />\n </Grid.Item>\n );\n }\n\n return (\n <Grid.Item\n col={input.size || 6}\n key={input.name || key}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <GenericInput\n {...input}\n {...genericInputProps}\n error={errorId}\n onChange={onChange}\n value={value}\n />\n </Grid.Item>\n );\n })}\n </Grid.Root>\n </Box>\n );\n })}\n </>\n );\n};\n","import { ReactNode, ChangeEvent } from 'react';\n\nimport { Field, Textarea } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport type { IntlLabel } from '../types';\n\ninterface TextareaEnumProps {\n description?: IntlLabel | null;\n disabled?: boolean;\n error?: string;\n intlLabel: IntlLabel;\n labelAction?: ReactNode;\n name: string;\n onChange: (value: { target: { name: string; value: string | string[] } }) => void;\n placeholder?: IntlLabel | null;\n value: string | string[] | undefined;\n}\n\nexport const TextareaEnum = ({\n description = null,\n disabled = false,\n error = '',\n intlLabel,\n labelAction,\n name,\n onChange,\n placeholder = null,\n value = '',\n}: TextareaEnumProps) => {\n const { formatMessage } = useIntl();\n const errorMessage = error ? formatMessage({ id: error, defaultMessage: error }) : '';\n const hint = description\n ? formatMessage(\n { id: description.id, defaultMessage: description.defaultMessage },\n { ...description.values }\n )\n : '';\n const label = formatMessage(intlLabel);\n const formattedPlaceholder = placeholder\n ? formatMessage(\n { id: placeholder.id, defaultMessage: placeholder.defaultMessage },\n { ...placeholder.values }\n )\n : '';\n\n const inputValue = Array.isArray(value) ? value.join('\\n') : '';\n\n const handleChange = (e: ChangeEvent<HTMLTextAreaElement>) => {\n const arrayValue = e.target.value.split('\\n');\n\n onChange({ target: { name, value: arrayValue } });\n };\n\n return (\n <Field.Root error={errorMessage} hint={hint} name={name}>\n <Field.Label action={labelAction}>{label}</Field.Label>\n <Textarea\n disabled={disabled}\n onChange={handleChange}\n placeholder={formattedPlaceholder}\n value={inputValue}\n />\n <Field.Error />\n <Field.Hint />\n </Field.Root>\n );\n};\n","import { getTrad } from '../../../utils/getTrad';\n\nexport const nameField = {\n name: 'name',\n type: 'text',\n intlLabel: {\n id: 'global.name',\n defaultMessage: 'Name',\n },\n description: {\n id: getTrad('modalForm.attribute.form.base.name.description'),\n defaultMessage: 'No space is allowed for the name of the attribute',\n },\n // validations: {\n // required: true,\n // },\n};\n","import { nameField } from './nameField';\n\nexport const commonBaseForm = {\n sections: [{ sectionTitle: null, items: [nameField] }],\n};\n","import { getTrad } from '../../../utils/getTrad';\n\nexport const componentForm = {\n base(prefix = '') {\n const sections = [\n {\n sectionTitle: null,\n items: [\n {\n name: `${prefix}displayName`,\n type: 'text',\n intlLabel: {\n id: getTrad('contentType.displayName.label'),\n defaultMessage: 'Display Name',\n },\n },\n {\n name: `${prefix}category`,\n type: 'select-category',\n intlLabel: {\n id: getTrad('modalForm.components.create-component.category.label'),\n defaultMessage: 'Select a category or enter a name to create a new one',\n },\n },\n ],\n },\n {\n sectionTitle: null,\n items: [\n {\n name: `${prefix}icon`,\n type: 'icon-picker',\n size: 12,\n intlLabel: {\n id: getTrad('modalForm.components.icon.label'),\n defaultMessage: 'Icon',\n },\n },\n ],\n },\n ];\n\n return sections;\n },\n advanced() {\n const sections: Array<unknown> = [];\n\n return sections;\n },\n};\n","import { getTrad } from '../../../utils/getTrad';\n\nexport const attributeOptions = {\n default: {\n name: 'default',\n type: 'text',\n intlLabel: {\n id: getTrad('form.attribute.settings.default'),\n defaultMessage: 'Default value',\n },\n },\n max: {\n name: 'max',\n type: 'checkbox-with-number-field',\n intlLabel: {\n id: getTrad('form.attribute.item.maximum'),\n defaultMessage: 'Maximum value',\n },\n },\n maxLength: {\n name: 'maxLength',\n type: 'checkbox-with-number-field',\n intlLabel: {\n id: getTrad('form.attribute.item.maximumLength'),\n defaultMessage: 'Maximum length',\n },\n },\n min: {\n name: 'min',\n type: 'checkbox-with-number-field',\n intlLabel: {\n id: getTrad('form.attribute.item.minimum'),\n defaultMessage: 'Minimum value',\n },\n },\n minLength: {\n name: 'minLength',\n type: 'checkbox-with-number-field',\n intlLabel: {\n id: getTrad('form.attribute.item.minimumLength'),\n defaultMessage: 'Minimum length',\n },\n },\n private: {\n name: 'private',\n type: 'checkbox',\n intlLabel: {\n id: getTrad('form.attribute.item.privateField'),\n defaultMessage: 'Private field',\n },\n description: {\n id: getTrad('form.attribute.item.privateField.description'),\n defaultMessage: 'This field will not show up in the API response',\n },\n },\n regex: {\n intlLabel: {\n id: getTrad('form.attribute.item.text.regex'),\n defaultMessage: 'RegExp pattern',\n },\n name: 'regex',\n type: 'text',\n description: {\n id: getTrad('form.attribute.item.text.regex.description'),\n defaultMessage: 'The text of the regular expression',\n },\n },\n required: {\n name: 'required',\n type: 'checkbox',\n intlLabel: {\n id: getTrad('form.attribute.item.requiredField'),\n defaultMessage: 'Required field',\n },\n description: {\n id: getTrad('form.attribute.item.requiredField.description'),\n defaultMessage: \"You won't be able to create an entry if this field is empty\",\n },\n },\n unique: {\n name: 'unique',\n type: 'checkbox',\n intlLabel: {\n id: getTrad('form.attribute.item.uniqueField'),\n defaultMessage: 'Unique field',\n },\n description: {\n id: getTrad('form.attribute.item.uniqueField.description'),\n defaultMessage:\n \"You won't be able to create an entry if there is an existing entry with identical content\",\n },\n },\n};\n","import { getTrad } from '../../../utils/getTrad';\nimport { componentForm } from '../component/componentForm';\n\nimport { attributeOptions } from './attributeOptions';\n\ntype DataType = 'biginteger' | 'string' | 'integer' | 'float' | 'decimal';\n\nexport const advancedForm = {\n blocks() {\n return {\n sections: [\n {\n sectionTitle: {\n id: 'global.settings',\n defaultMessage: 'Settings',\n },\n items: [attributeOptions.required, attributeOptions.private],\n },\n ],\n };\n },\n boolean() {\n return {\n sections: [\n {\n sectionTitle: null,\n items: [\n {\n autoFocus: true,\n type: 'select-default-boolean',\n intlLabel: {\n id: getTrad('form.attribute.settings.default'),\n defaultMessage: 'Default value',\n },\n name: 'default',\n options: [\n {\n value: 'true',\n key: 'true',\n metadatas: { intlLabel: { id: 'true', defaultMessage: 'true' } },\n },\n {\n value: '',\n key: 'null',\n metadatas: { intlLabel: { id: 'null', defaultMessage: 'null' } },\n },\n {\n value: 'false',\n key: 'false',\n metadatas: { intlLabel: { id: 'false', defaultMessage: 'false' } },\n },\n ],\n },\n ],\n },\n {\n sectionTitle: {\n id: 'global.settings',\n defaultMessage: 'Settings',\n },\n items: [attributeOptions.required, attributeOptions.private],\n },\n ],\n };\n },\n component({ repeatable }: { repeatable: boolean }, step: string) {\n if (step === '1') {\n return { sections: componentForm.advanced() };\n }\n\n if (repeatable) {\n return {\n sections: [\n {\n sectionTitle: {\n id: 'global.settings',\n defaultMessage: 'Settings',\n },\n items: [\n attributeOptions.required,\n attributeOptions.private,\n attributeOptions.max,\n attributeOptions.min,\n ],\n },\n ],\n };\n }\n\n return {\n sections: [\n {\n sectionTitle: {\n id: 'global.settings',\n defaultMessage: 'Settings',\n },\n items: [attributeOptions.required, attributeOptions.private],\n },\n ],\n };\n },\n date({ type }: { type: string }) {\n return {\n sections: [\n {\n sectionTitle: null,\n items: [\n {\n ...attributeOptions.default,\n type: type || 'date',\n value: null,\n withDefaultValue: false,\n disabled: !type,\n autoFocus: false,\n },\n ],\n },\n {\n sectionTitle: {\n id: 'global.settings',\n defaultMessage: 'Settings',\n },\n items: [attributeOptions.required, attributeOptions.unique, attributeOptions.private],\n },\n ],\n };\n },\n dynamiczone() {\n return {\n sections: [\n {\n sectionTitle: {\n id: 'global.settings',\n defaultMessage: 'Settings',\n },\n items: [attributeOptions.required, attributeOptions.max, attributeOptions.min],\n },\n ],\n };\n },\n email() {\n return {\n sections: [\n {\n sectionTitle: null,\n items: [\n {\n ...attributeOptions.default,\n type: 'email',\n },\n ],\n },\n\n {\n sectionTitle: {\n id: 'global.settings',\n defaultMessage: 'Settings',\n },\n items: [\n attributeOptions.required,\n attributeOptions.unique,\n attributeOptions.maxLength,\n attributeOptions.minLength,\n attributeOptions.private,\n ],\n },\n ],\n };\n },\n enumeration(data: { enum: Array<string> }) {\n return {\n sections: [\n {\n sectionTitle: null,\n items: [\n {\n name: 'default',\n type: 'select',\n intlLabel: {\n id: getTrad('form.attribute.settings.default'),\n defaultMessage: 'Default value',\n },\n validations: {},\n options: [\n {\n key: '__null_reset_value__',\n value: '',\n metadatas: {\n intlLabel: {\n id: 'components.InputSelect.option.placeholder',\n defaultMessage: 'Choose here',\n },\n },\n },\n ...(data.enum || [])\n .filter((value, index) => data.enum.indexOf(value) === index && value)\n .map((value) => {\n return {\n key: value,\n value,\n metadatas: {\n intlLabel: { id: `${value}.no-override`, defaultMessage: value },\n },\n };\n }),\n ],\n },\n {\n intlLabel: {\n id: getTrad('form.attribute.item.enumeration.graphql'),\n defaultMessage: 'Name override for GraphQL',\n },\n name: 'enumName',\n type: 'text',\n validations: {},\n description: {\n id: getTrad('form.attribute.item.enumeration.graphql.description'),\n defaultMessage: 'Allows you to override the default generated name for GraphQL',\n },\n },\n ],\n },\n\n {\n sectionTitle: {\n id: 'global.settings',\n defaultMessage: 'Settings',\n },\n items: [attributeOptions.required, attributeOptions.private],\n },\n ],\n };\n },\n json() {\n return {\n sections: [\n {\n sectionTitle: {\n id: 'global.settings',\n defaultMessage: 'Settings',\n },\n items: [attributeOptions.required, attributeOptions.private],\n },\n ],\n };\n },\n media() {\n return {\n sections: [\n {\n sectionTitle: null,\n items: [\n {\n intlLabel: {\n id: getTrad('form.attribute.media.allowed-types'),\n defaultMessage: 'Select allowed types of media',\n },\n name: 'allowedTypes',\n type: 'allowed-types-select',\n size: 7,\n value: '',\n validations: {},\n },\n ],\n },\n {\n sectionTitle: {\n id: 'global.settings',\n defaultMessage: 'Settings',\n },\n items: [attributeOptions.required, attributeOptions.private],\n },\n ],\n };\n },\n number(data: { type: DataType }) {\n const inputStep = data.type === 'decimal' || data.type === 'float' ? 'any' : 1;\n\n return {\n sections: [\n {\n sectionTitle: null,\n items: [\n {\n autoFocus: true,\n name: 'default',\n type: data.type === 'biginteger' ? 'text' : 'number',\n step: inputStep,\n intlLabel: {\n id: getTrad('form.attribute.settings.default'),\n defaultMessage: 'Default value',\n },\n validations: {},\n },\n ],\n },\n {\n sectionTitle: {\n id: 'global.settings',\n defaultMessage: 'Settings',\n },\n items: [\n attributeOptions.required,\n attributeOptions.unique,\n attributeOptions.max,\n attributeOptions.min,\n attributeOptions.private,\n ],\n },\n ],\n };\n },\n password() {\n return {\n sections: [\n { sectionTitle: null, items: [attributeOptions.default] },\n\n {\n sectionTitle: {\n id: 'global.settings',\n defaultMessage: 'Settings',\n },\n items: [\n attributeOptions.required,\n attributeOptions.maxLength,\n attributeOptions.minLength,\n attributeOptions.private,\n ],\n },\n ],\n };\n },\n relation() {\n return {\n sections: [\n {\n sectionTitle: {\n id: 'global.settings',\n defaultMessage: 'Settings',\n },\n items: [attributeOptions.private],\n },\n ],\n };\n },\n richtext() {\n return {\n sections: [\n { sectionTitle: null, items: [attributeOptions.default] },\n {\n sectionTitle: {\n id: 'global.settings',\n defaultMessage: 'Settings',\n },\n items: [\n attributeOptions.required,\n attributeOptions.maxLength,\n attributeOptions.minLength,\n attributeOptions.private,\n ],\n },\n ],\n };\n },\n text() {\n return {\n sections: [\n { sectionTitle: null, items: [attributeOptions.default, attributeOptions.regex] },\n\n {\n sectionTitle: {\n id: 'global.settings',\n defaultMessage: 'Settings',\n },\n items: [\n attributeOptions.required,\n attributeOptions.unique,\n attributeOptions.maxLength,\n attributeOptions.minLength,\n attributeOptions.private,\n ],\n },\n ],\n };\n },\n uid(data: { targetField: string }) {\n return {\n sections: [\n {\n sectionTitle: null,\n items: [\n { ...attributeOptions.default, disabled: Boolean(data.targetField), type: 'text' },\n ],\n },\n\n {\n sectionTitle: {\n id: 'global.settings',\n defaultMessage: 'Settings',\n },\n items: [\n attributeOptions.required,\n attributeOptions.maxLength,\n attributeOptions.minLength,\n attributeOptions.private,\n ],\n },\n ],\n };\n },\n};\n","import { getTrad } from '../../../utils/getTrad';\n\nexport const componentField = {\n intlLabel: {\n id: 'global.type',\n defaultMessage: 'Type',\n },\n name: 'createComponent',\n type: 'boolean-radio-group',\n size: 12,\n radios: [\n {\n title: {\n id: getTrad('form.attribute.component.option.create'),\n defaultMessage: 'Create a new component',\n },\n description: {\n id: getTrad('form.attribute.component.option.create.description'),\n defaultMessage:\n 'A component is shared across types and components, it will be available and accessible everywhere.',\n },\n value: true,\n },\n {\n title: {\n id: getTrad('form.attribute.component.option.reuse-existing'),\n defaultMessage: 'Use an existing component',\n },\n description: {\n id: getTrad('form.attribute.component.option.reuse-existing.description'),\n defaultMessage:\n 'Reuse a component already created to keep your data consistent across content-types.',\n },\n value: false,\n },\n ],\n};\n","import { getTrad } from '../../../utils/getTrad';\nimport { componentField } from '../component/componentField';\nimport { componentForm } from '../component/componentForm';\n\nimport { nameField } from './nameField';\n\nexport const baseForm = {\n component(data: { createComponent: boolean }, step: string) {\n if (step === '1') {\n const itemsToConcat =\n data.createComponent === true ? componentForm.base('componentToCreate.') : [];\n\n return {\n sections: [{ sectionTitle: null, items: [componentField] }, ...itemsToConcat],\n };\n }\n\n return {\n sections: [\n {\n sectionTitle: null,\n items: [\n nameField,\n {\n name: 'component',\n type: 'select-component',\n intlLabel: {\n id: getTrad('modalForm.attributes.select-component'),\n defaultMessage: 'Select a component',\n },\n isMultiple: false,\n },\n ],\n },\n {\n sectionTitle: null,\n items: [\n {\n intlLabel: {\n id: 'global.type',\n defaultMessage: 'Type',\n },\n name: 'repeatable',\n type: 'boolean-radio-group',\n size: 12,\n radios: [\n {\n title: {\n id: getTrad('form.attribute.component.option.repeatable'),\n defaultMessage: 'Repeatable component',\n },\n description: {\n id: getTrad('form.attribute.component.option.repeatable.description'),\n defaultMessage:\n 'Best for multiple instances (array) of ingredients, meta tags, etc..',\n },\n value: true,\n },\n {\n title: {\n id: getTrad('form.attribute.component.option.single'),\n defaultMessage: 'Single component',\n },\n description: {\n id: getTrad('form.attribute.component.option.single.description'),\n defaultMessage:\n 'Best for grouping fields like full address, main information, etc...',\n },\n value: false,\n },\n ],\n },\n ],\n },\n ],\n };\n },\n date() {\n return {\n sections: [\n {\n sectionTitle: null,\n items: [\n nameField,\n {\n intlLabel: {\n id: 'global.type',\n defaultMessage: 'Type',\n },\n name: 'type',\n type: 'select-date',\n options: [\n {\n key: '__null_reset_value__',\n value: '',\n metadatas: {\n intlLabel: {\n id: 'components.InputSelect.option.placeholder',\n defaultMessage: 'Choose here',\n },\n hidden: true,\n },\n },\n {\n key: 'date',\n value: 'date',\n metadatas: {\n intlLabel: {\n id: getTrad('form.attribute.item.date.type.date'),\n defaultMessage: 'date (ex: 01/01/{currentYear})',\n values: { currentYear: new Date().getFullYear() },\n },\n },\n },\n {\n key: 'datetime',\n value: 'datetime',\n metadatas: {\n intlLabel: {\n id: getTrad('form.attribute.item.date.type.datetime'),\n defaultMessage: 'datetime (ex: 01/01/{currentYear} 00:00 AM)',\n values: { currentYear: new Date().getFullYear() },\n },\n },\n },\n {\n key: 'time',\n value: 'time',\n metadatas: {\n intlLabel: {\n id: getTrad('form.attribute.item.date.type.time'),\n defaultMessage: 'time (ex: 00:00 AM)',\n },\n },\n },\n ],\n },\n ],\n },\n ],\n };\n },\n enumeration() {\n return {\n sections: [\n { sectionTitle: null, items: [nameField] },\n {\n sectionTitle: null,\n items: [\n {\n name: 'enum',\n type: 'textarea-enum',\n size: 6,\n intlLabel: {\n id: getTrad('form.attribute.item.enumeration.rules'),\n defaultMessage: 'Values (one line per value)',\n },\n placeholder: {\n id: getTrad('form.attribute.item.enumeration.placeholder'),\n defaultMessage: 'Ex:\\nmorning\\nnoon\\nevening',\n },\n validations: {\n required: true,\n },\n },\n ],\n },\n ],\n };\n },\n media() {\n return {\n sections: [\n { sectionTitle: null, items: [nameField] },\n {\n sectionTitle: null,\n items: [\n {\n intlLabel: {\n id: 'global.type',\n defaultMessage: 'Type',\n },\n name: 'multiple',\n size: 12,\n type: 'boolean-radio-group',\n radios: [\n {\n title: {\n id: getTrad('form.attribute.media.option.multiple'),\n defaultMessage: 'Multiple media',\n },\n description: {\n id: getTrad('form.attribute.media.option.multiple.description'),\n defaultMessage: 'Best for sliders, carousels or multiple files download',\n },\n value: true,\n },\n {\n title: {\n id: getTrad('form.attribute.media.option.single'),\n defaultMessage: 'Single media',\n },\n description: {\n id: getTrad('form.attribute.media.option.single.description'),\n defaultMessage: 'Best for avatar, profile picture or cover',\n },\n value: false,\n },\n ],\n },\n ],\n },\n ],\n };\n },\n number() {\n return {\n sections: [\n {\n sectionTitle: null,\n items: [\n nameField,\n {\n intlLabel: {\n id: getTrad('form.attribute.item.number.type'),\n defaultMessage: 'Number format',\n },\n name: 'type',\n type: 'select-number',\n options: [\n {\n key: '__null_reset_value__',\n value: '',\n metadatas: {\n intlLabel: {\n id: 'components.InputSelect.option.placeholder',\n defaultMessage: 'Choose here',\n },\n hidden: true,\n },\n },\n {\n key: 'integer',\n value: 'integer',\n metadatas: {\n intlLabel: {\n id: getTrad('form.attribute.item.number.type.integer'),\n defaultMessage: 'integer (ex: 10)',\n },\n },\n },\n {\n key: 'biginteger',\n value: 'biginteger',\n metadatas: {\n intlLabel: {\n id: getTrad('form.attribute.item.number.type.biginteger'),\n defaultMessage: 'biginteger (ex: 123456789)',\n },\n },\n },\n {\n key: 'decimal',\n value: 'decimal',\n metadatas: {\n intlLabel: {\n id: getTrad('form.attribute.item.number.type.decimal'),\n defaultMessage: 'decimal (ex: 2.22)',\n },\n },\n },\n {\n key: 'float',\n value: 'float',\n metadatas: {\n intlLabel: {\n id: getTrad('form.attribute.item.number.type.float'),\n defaultMessage: 'decimal (ex: 3.3333333)',\n },\n },\n },\n ],\n },\n ],\n },\n ],\n };\n },\n relation() {\n return {\n sections: [\n {\n sectionTitle: null,\n items: [\n {\n intlLabel: { id: 'FIXME', defaultMessage: 'FIXME' },\n name: 'relation',\n size: 12,\n type: 'relation',\n },\n ],\n },\n ],\n };\n },\n string() {\n return {\n sections: [\n { sectionTitle: null, items: [nameField] },\n {\n sectionTitle: null,\n items: [\n {\n intlLabel: {\n id: 'global.type',\n defaultMessage: 'Type',\n },\n name: 'type',\n size: 12,\n type: 'radio-group',\n radios: [\n {\n title: {\n id: getTrad('form.attribute.text.option.short-text'),\n defaultMessage: 'Sort text',\n },\n description: {\n id: getTrad('form.attribute.text.option.short-text.description'),\n defaultMessage:\n 'Best for titles, names, links (URL). It also enables exact search on the field.',\n },\n value: 'string',\n },\n {\n title: {\n id: getTrad('form.attribute.text.option.long-text'),\n defaultMessage: 'Long text',\n },\n description: {\n id: getTrad('form.attribute.text.option.long-text.description'),\n defaultMessage: 'Best for descriptions, biography. Exact search is disabled.',\n },\n value: 'text',\n },\n ],\n },\n ],\n },\n ],\n };\n },\n text() {\n return {\n sections: [\n { sectionTitle: null, items: [nameField] },\n {\n sectionTitle: null,\n items: [\n {\n intlLabel: {\n id: 'global.type',\n defaultMessage: 'Type',\n },\n name: 'type',\n size: 12,\n type: 'radio-group',\n radios: [\n {\n title: {\n id: getTrad('form.attribute.text.option.short-text'),\n defaultMessage: 'Sort text',\n },\n description: {\n id: getTrad('form.attribute.text.option.short-text.description'),\n defaultMessage:\n 'Best for titles, names, links (URL). It also enables exact search on the field.',\n },\n value: 'string',\n },\n {\n title: {\n id: getTrad('form.attribute.text.option.long-text'),\n defaultMessage: 'Long text',\n },\n description: {\n id: getTrad('form.attribute.text.option.long-text.description'),\n defaultMessage: 'Best for descriptions, biography. Exact search is disabled.',\n },\n value: 'text',\n },\n ],\n },\n ],\n },\n ],\n };\n },\n uid(_data: unknown, step: string, attributes: Array<{ type: string; name: string }>) {\n const options = attributes\n .filter(({ type }) => ['string', 'text'].includes(type))\n .map(({ name }) => ({\n key: name,\n value: name,\n metadatas: {\n intlLabel: { id: `${name}.no-override`, defaultMessage: name },\n },\n }));\n\n return {\n sections: [\n {\n sectionTitle: null,\n items: [\n {\n ...nameField,\n placeholder: {\n id: getTrad('modalForm.attribute.form.base.name.placeholder'),\n defaultMessage: 'e.g. slug, seoUrl, canonicalUrl',\n },\n },\n {\n intlLabel: {\n id: getTrad('modalForm.attribute.target-field'),\n defaultMessage: 'Attached field',\n },\n name: 'targetField',\n type: 'select',\n options: [\n {\n key: '__null_reset_value__',\n value: '',\n metadatas: { intlLabel: { id: 'global.none', defaultMessage: 'None' } },\n },\n ...options,\n ],\n },\n ],\n },\n ],\n };\n },\n};\n","import { advancedForm } from './advancedForm';\nimport { baseForm } from './baseForm';\n\nexport const attributesForm = {\n advanced: advancedForm,\n base: baseForm,\n};\n","import slugify from '@sindresorhus/slugify';\n\nexport const toRegressedEnumValue = (value: string | undefined) => {\n if (!value) {\n return '';\n }\n return slugify(value, {\n decamelize: false,\n lowercase: false,\n separator: '_',\n });\n};\n","import { translatedErrors as errorsTrads } from '@strapi/admin/strapi-admin';\nimport { snakeCase } from 'lodash/fp';\nimport toNumber from 'lodash/toNumber';\nimport * as yup from 'yup';\n\nimport { getTrad } from '../../../../utils/getTrad';\n\nconst NAME_REGEX = /^[A-Za-z][_0-9A-Za-z]*$/;\n\nconst alreadyUsedAttributeNames = (\n usedNames: Array<string>\n): yup.TestConfig<string | undefined, Record<string, unknown>> => {\n return {\n name: 'attributeNameAlreadyUsed',\n message: errorsTrads.unique.id,\n test(value: string | undefined) {\n if (!value) {\n return false;\n }\n const snakeCaseKey = snakeCase(value);\n\n return !usedNames.some((existingKey) => {\n return snakeCase(existingKey) === snakeCaseKey;\n });\n },\n };\n};\n\nconst getUsedContentTypeAttributeNames = (\n ctShema: any,\n isEdition: boolean,\n attributeNameToEdit: string\n) => {\n const attributes = ctShema?.schema?.attributes ?? {};\n\n return Object.keys(attributes).filter((attr) => {\n if (isEdition) {\n return attr !== attributeNameToEdit;\n }\n\n return true;\n });\n};\n\nconst isNameAllowed = (\n reservedNames: Array<string>\n): yup.TestConfig<string | undefined, Record<string, unknown>> => {\n return {\n name: 'forbiddenAttributeName',\n message: getTrad('error.attributeName.reserved-name'),\n test(value: string | undefined) {\n if (!value) {\n return false;\n }\n const snakeCaseKey = snakeCase(value);\n\n return !reservedNames.some((existingKey) => {\n return snakeCase(existingKey) === snakeCaseKey;\n });\n },\n };\n};\n\nconst validators = {\n default: () => yup.string().nullable(),\n max: () => yup.number().integer().nullable(),\n min: () =>\n yup\n .number()\n .integer()\n .when('max', (max, schema) => {\n if (max) {\n return schema.max(max, getTrad('error.validation.minSupMax'));\n }\n\n return schema;\n })\n .nullable(),\n maxLength: () => yup.number().integer().positive(getTrad('error.validation.positive')).nullable(),\n minLength: () =>\n yup\n .number()\n .integer()\n .min(1)\n .when('maxLength', (maxLength, schema) => {\n if (maxLength) {\n return schema.max(maxLength, getTrad('error.validation.minSupMax'));\n }\n\n return schema;\n })\n .nullable(),\n name(usedNames: Array<string>, reservedNames: Array<string>) {\n return yup\n .string()\n .test(alreadyUsedAttributeNames(usedNames))\n .test(isNameAllowed(reservedNames))\n .matches(NAME_REGEX, errorsTrads.regex.id)\n .required(errorsTrads.required.id);\n },\n required: () => yup.boolean(),\n type: () => yup.string().required(errorsTrads.required.id),\n unique: () => yup.boolean().nullable(),\n};\n\nconst createTextShape = (usedAttributeNames: Array<string>, reservedNames: Array<string>) => {\n const shape = {\n name: validators.name(usedAttributeNames, reservedNames),\n type: validators.type(),\n default: validators.default(),\n unique: validators.unique(),\n required: validators.required(),\n maxLength: validators.maxLength(),\n minLength: validators.minLength(),\n regex: yup\n .string()\n .test({\n name: 'isValidRegExpPattern',\n message: getTrad('error.validation.regex'),\n test(value) {\n try {\n return new RegExp(value || '') !== null;\n } catch (e) {\n return false;\n }\n },\n })\n .nullable(),\n };\n\n return shape;\n};\n\ntype GenericIsMinSuperiorThanMax<T extends (string | null) | number> = yup.TestConfig<\n T | undefined,\n Record<string, unknown>\n>;\n\nconst isMinSuperiorThanMax = <\n T extends (string | null) | number,\n>(): GenericIsMinSuperiorThanMax<T> => ({\n name: 'isMinSuperiorThanMax',\n message: getTrad('error.validation.minSupMax'),\n test(min: T | undefined) {\n if (!min) {\n return true;\n }\n\n const { max } = (this as any).parent;\n\n if (!max) {\n return true;\n }\n\n if (Number.isNaN(toNumber(min))) {\n return true;\n }\n\n return toNumber(max) >= toNumber(min);\n },\n});\n\nexport {\n alreadyUsedAttributeNames,\n createTextShape,\n getUsedContentTypeAttributeNames,\n isMinSuperiorThanMax,\n isNameAllowed,\n NAME_REGEX,\n validators,\n};\n","import { translatedErrors as errorsTrads } from '@strapi/admin/strapi-admin';\nimport uniq from 'lodash/uniq';\nimport * as yup from 'yup';\n\nimport { getRelationType } from '../../../utils/getRelationType';\nimport { getTrad } from '../../../utils/getTrad';\nimport { toRegressedEnumValue } from '../../../utils/toRegressedEnumValue';\n\nimport {\n alreadyUsedAttributeNames,\n createTextShape,\n isMinSuperiorThanMax,\n isNameAllowed,\n NAME_REGEX,\n validators,\n} from './validation/common';\n\nimport type { Schema } from '@strapi/types';\n\nexport const attributeTypes = {\n date(usedAttributeNames: Array<string>, reservedNames: Array<string>) {\n const shape = {\n name: validators.name(usedAttributeNames, reservedNames),\n type: validators.type(),\n };\n\n return yup.object(shape);\n },\n datetime(usedAttributeNames: Array<string>, reservedNames: Array<string>) {\n const shape = {\n name: validators.name(usedAttributeNames, reservedNames),\n type: validators.type(),\n };\n\n return yup.object(shape);\n },\n time(usedAttributeNames: Array<string>, reservedNames: Array<string>) {\n const shape = {\n name: validators.name(usedAttributeNames, reservedNames),\n type: validators.type(),\n };\n\n return yup.object(shape);\n },\n default(usedAttributeNames: Array<string>, reservedNames: Array<string>) {\n const shape = {\n name: validators.name(usedAttributeNames, reservedNames),\n type: validators.type(),\n };\n\n return yup.object(shape);\n },\n biginteger(usedAttributeNames: Array<string>, reservedNames: Array<string>) {\n const shape = {\n name: validators.name(usedAttributeNames, reservedNames),\n type: validators.type(),\n default: yup\n .string()\n .nullable()\n .matches(/^-?\\d*$/),\n unique: validators.unique(),\n required: validators.required(),\n max: yup\n .string()\n .nullable()\n .matches(/^-?\\d*$/, errorsTrads.regex.id),\n min: yup\n .string()\n .nullable()\n .test(isMinSuperiorThanMax<string | null>())\n .matches(/^-?\\d*$/, errorsTrads.regex.id),\n };\n\n return yup.object(shape);\n },\n boolean(usedAttributeNames: Array<string>, reservedNames: Array<string>) {\n const shape = {\n name: validators.name(usedAttributeNames, reservedNames),\n default: yup.boolean().nullable(),\n required: validators.required(),\n unique: validators.unique(),\n };\n\n return yup.object(shape);\n },\n component(usedAttributeNames: Array<string>, reservedNames: Array<string>) {\n const shape = {\n name: validators.name(usedAttributeNames, reservedNames),\n type: validators.type(),\n required: validators.required(),\n max: validators.max(),\n min: validators.min(),\n component: yup.string().required(errorsTrads.required.id),\n };\n\n return yup.object(shape);\n },\n decimal(usedAttributeNames: Array<string>, reservedNames: Array<string>) {\n const shape = {\n name: validators.name(usedAttributeNames, reservedNames),\n type: validators.type(),\n default: yup.number(),\n required: validators.required(),\n max: yup.number(),\n min: yup.number().test(isMinSuperiorThanMax<number>()),\n };\n\n return yup.object(shape);\n },\n dynamiczone(usedAttributeNames: Array<string>, reservedNames: Array<string>) {\n const shape = {\n name: validators.name(usedAttributeNames, reservedNames),\n type: validators.type(),\n required: validators.required(),\n max: validators.max(),\n min: validators.min(),\n };\n\n return yup.object(shape);\n },\n email(usedAttributeNames: Array<string>, reservedNames: Array<string>) {\n const shape = {\n name: validators.name(usedAttributeNames, reservedNames),\n type: validators.type(),\n default: yup.string().email().nullable(),\n unique: validators.unique(),\n required: validators.required(),\n maxLength: validators.maxLength(),\n minLength: validators.minLength(),\n };\n\n return yup.object(shape);\n },\n enumeration(usedAttributeNames: Array<string>, reservedNames: Array<string>) {\n /**\n * For enumerations the least common denomiator is GraphQL, where\n * values needs to match the secure name regex:\n * GraphQL Spec https://spec.graphql.org/June2018/#sec-Names\n *\n * Therefore we need to make sure our users only use values, which\n * can be returned by GraphQL, by checking the regressed values\n * agains the GraphQL regex.\n *\n * TODO V5: check if we can avoid this coupling by moving this logic\n * into the GraphQL plugin.\n */\n const GRAPHQL_ENUM_REGEX = /^[_A-Za-z][_0-9A-Za-z]*$/;\n\n const shape = {\n name: yup\n .string()\n .test(alreadyUsedAttributeNames(usedAttributeNames))\n .test(isNameAllowed(reservedNames))\n .matches(GRAPHQL_ENUM_REGEX, errorsTrads.regex.id)\n .required(errorsTrads.required.id),\n type: validators.type(),\n default: validators.default(),\n unique: validators.unique(),\n required: validators.required(),\n enum: yup\n .array()\n .of(yup.string())\n .min(1, errorsTrads.min.id)\n .test({\n name: 'areEnumValuesUnique',\n message: getTrad('error.validation.enum-duplicate'),\n test(values) {\n if (!values) {\n return false;\n }\n const duplicates = uniq(\n values\n .map(toRegressedEnumValue)\n .filter((value, index, values) => values.indexOf(value) !== index)\n );\n\n return !duplicates.length;\n },\n })\n .test({\n name: 'doesNotHaveEmptyValues',\n message: getTrad('error.validation.enum-empty-string'),\n test: (values) => {\n if (!values) {\n return false;\n }\n return !values.map(toRegressedEnumValue).some((val) => val === '');\n },\n })\n .test({\n name: 'doesMatchRegex',\n message: getTrad('error.validation.enum-regex'),\n test: (values) => {\n if (!values) {\n return false;\n }\n return values\n .map(toRegressedEnumValue)\n .every((value) => GRAPHQL_ENUM_REGEX.test(value));\n },\n }),\n enumName: yup.string().nullable(),\n };\n\n return yup.object(shape);\n },\n float(usedAttributeNames: Array<string>, reservedNames: Array<string>) {\n const shape = {\n name: validators.name(usedAttributeNames, reservedNames),\n type: validators.type(),\n required: validators.required(),\n default: yup.number(),\n max: yup.number(),\n min: yup.number().test(isMinSuperiorThanMax<number>()),\n };\n\n return yup.object(shape);\n },\n integer(usedAttributeNames: Array<string>, reservedNames: Array<string>) {\n const shape = {\n name: validators.name(usedAttributeNames, reservedNames),\n type: validators.type(),\n default: yup.number().integer(),\n unique: validators.unique(),\n required: validators.required(),\n max: validators.max(),\n min: validators.min(),\n };\n\n return yup.object(shape);\n },\n json(usedAttributeNames: Array<string>, reservedNames: Array<string>) {\n const shape = {\n name: validators.name(usedAttributeNames, reservedNames),\n type: validators.type(),\n required: validators.required(),\n unique: validators.unique(),\n };\n\n return yup.object(shape);\n },\n media(usedAttributeNames: Array<string>, reservedNames: Array<string>) {\n const shape = {\n name: validators.name(usedAttributeNames, reservedNames),\n type: validators.type(),\n multiple: yup.boolean(),\n required: validators.required(),\n allowedTypes: yup\n .array()\n .of(yup.string().oneOf(['images', 'videos', 'files', 'audios']))\n .min(1)\n .nullable(),\n };\n\n return yup.object(shape);\n },\n password(usedAttributeNames: Array<string>, reservedNames: Array<string>) {\n const shape = {\n name: validators.name(usedAttributeNames, reservedNames),\n type: validators.type(),\n default: validators.default(),\n unique: validators.unique(),\n required: validators.required(),\n maxLength: validators.maxLength(),\n minLength: validators.minLength(),\n };\n\n return yup.object(shape);\n },\n relation(\n usedAttributeNames: Array<string>,\n reservedNames: Array<string>,\n alreadyTakenTargetAttributes: Array<{ name: string }>,\n {\n initialData,\n modifiedData,\n }: {\n initialData: { targetAttribute?: string };\n modifiedData: {\n name?: string;\n relation?: Schema.Attribute.RelationKind.WithTarget;\n targetAttribute?: string;\n };\n }\n ) {\n const shape = {\n name: validators.name(usedAttributeNames, reservedNames),\n target: yup.string().required(errorsTrads.required.id),\n relation: yup.string().required(),\n type: yup.string().required(),\n targetAttribute: yup.lazy(() => {\n const relationType = getRelationType(modifiedData.relation, modifiedData.targetAttribute);\n\n if (relationType === 'oneWay' || relationType === 'manyWay') {\n return yup.string().nullable();\n }\n\n const schema = yup.string().test(isNameAllowed(reservedNames));\n const initialForbiddenName = [\n ...alreadyTakenTargetAttributes.map(({ name }) => name),\n modifiedData.name,\n ];\n\n const forbiddenTargetAttributeName = initialForbiddenName.filter(\n (val) => val !== initialData.targetAttribute\n );\n\n return schema\n .matches(NAME_REGEX, errorsTrads.regex.id)\n .test({\n name: 'forbiddenTargetAttributeName',\n message: getTrad('error.validation.relation.targetAttribute-taken'),\n test(value) {\n if (!value) {\n return false;\n }\n\n return !forbiddenTargetAttributeName.includes(value);\n },\n })\n .required(errorsTrads.required.id);\n }),\n };\n\n return yup.object(shape);\n },\n richtext(usedAttributeNames: Array<string>, reservedNames: Array<string>) {\n const shape = {\n name: validators.name(usedAttributeNames, reservedNames),\n type: validators.type(),\n default: validators.default(),\n unique: validators.unique(),\n required: validators.required(),\n maxLength: validators.maxLength(),\n minLength: validators.minLength(),\n };\n\n return yup.object(shape);\n },\n blocks(usedAttributeNames: Array<string>, reservedNames: Array<string>) {\n const shape = {\n name: validators.name(usedAttributeNames, reservedNames),\n type: validators.type(),\n default: validators.default(),\n unique: validators.unique(),\n required: validators.required(),\n maxLength: validators.maxLength(),\n minLength: validators.minLength(),\n };\n\n return yup.object(shape);\n },\n string(usedAttributeNames: Array<string>, reservedNames: Array<string>) {\n const shape = createTextShape(usedAttributeNames, reservedNames);\n\n return yup.object(shape);\n },\n text(usedAttributeNames: Array<string>, reservedNames: Array<string>) {\n const shape = createTextShape(usedAttributeNames, reservedNames);\n\n return yup.object(shape);\n },\n uid(usedAttributeNames: Array<string>, reservedNames: Array<string>) {\n const shape = createTextShape(usedAttributeNames, reservedNames);\n\n return yup.object(shape);\n },\n};\n","export const CATEGORY_NAME_REGEX = /^[A-Za-z][-_0-9A-Za-z]*$/;\n","import { translatedErrors as errorsTrads } from '@strapi/admin/strapi-admin';\nimport * as yup from 'yup';\n\nimport { CATEGORY_NAME_REGEX } from './regex';\n\nexport const createCategorySchema = (usedCategoryNames: Array<string>) => {\n const shape = {\n name: yup\n .string()\n .matches(CATEGORY_NAME_REGEX, errorsTrads.regex.id)\n .test({\n name: 'nameNotAllowed',\n message: errorsTrads.unique.id,\n test(value) {\n if (!value) {\n return false;\n }\n return !usedCategoryNames.includes(value?.toLowerCase());\n },\n })\n .required(errorsTrads.required.id),\n };\n\n return yup.object(shape);\n};\n","import { getTrad } from '../../../utils/getTrad';\n\nexport const categoryForm = {\n base: {\n sections: [\n {\n sectionTitle: null,\n items: [\n {\n autoFocus: true,\n name: 'name',\n type: 'text',\n intlLabel: {\n id: 'global.name',\n defaultMessage: 'Name',\n },\n\n // validations: {\n // required: true,\n // },\n description: {\n id: getTrad('modalForm.editCategory.base.name.description'),\n defaultMessage: 'No space is allowed for the name of the category',\n },\n },\n ],\n },\n ],\n },\n};\n","import { translatedErrors as errorsTrads } from '@strapi/admin/strapi-admin';\nimport { snakeCase } from 'lodash/fp';\nimport * as yup from 'yup';\n\nimport { getTrad } from '../../../utils/getTrad';\nimport { CATEGORY_NAME_REGEX } from '../category/regex';\nimport { createComponentUid } from '../utils/createUid';\n\nexport const createComponentSchema = (\n usedComponentNames: Array<string>,\n reservedNames: Array<string>,\n category: string,\n takenCollectionNames: Array<string>,\n currentCollectionName: string\n) => {\n const shape = {\n displayName: yup\n .string()\n .test({\n name: 'nameAlreadyUsed',\n message: errorsTrads.unique.id,\n test(value) {\n if (!value) {\n return false;\n }\n\n const name = createComponentUid(value, category);\n\n const snakeCaseKey = snakeCase(name);\n const snakeCaseCollectionName = snakeCase(currentCollectionName);\n\n return (\n usedComponentNames.every((reserved) => {\n return snakeCase(reserved) !== snakeCaseKey;\n }) &&\n takenCollectionNames.every(\n (collectionName) => snakeCase(collectionName) !== snakeCaseCollectionName\n )\n );\n },\n })\n .test({\n name: 'nameNotAllowed',\n message: getTrad('error.contentTypeName.reserved-name'),\n test(value) {\n if (!value) {\n return false;\n }\n\n const snakeCaseKey = snakeCase(value);\n return reservedNames.every((reserved) => {\n return snakeCase(reserved) !== snakeCaseKey;\n });\n },\n })\n .required(errorsTrads.required.id),\n category: yup\n .string()\n .matches(CATEGORY_NAME_REGEX, errorsTrads.regex.id)\n .required(errorsTrads.required.id),\n\n icon: yup.string(),\n };\n\n return yup.object(shape);\n};\n","import { getTrad } from '../../../utils/getTrad';\n\nconst nameField = {\n name: 'displayName',\n type: 'text',\n intlLabel: {\n id: getTrad('contentType.displayName.label'),\n defaultMessage: 'Display name',\n },\n};\n\nexport const contentTypeForm = {\n advanced: {\n default() {\n return {\n sections: [\n {\n items: [\n {\n intlLabel: {\n id: getTrad('contentType.draftAndPublish.label'),\n defaultMessage: 'Draft & publish',\n },\n description: {\n id: getTrad('contentType.draftAndPublish.description'),\n defaultMessage:\n 'Allows writing a draft version of an entry, before it is published',\n },\n name: 'draftAndPublish',\n type: 'toggle-draft-publish',\n validations: {},\n },\n ],\n },\n ],\n };\n },\n },\n base: {\n create() {\n return {\n sections: [\n {\n sectionTitle: null,\n items: [\n nameField,\n {\n description: {\n id: getTrad('contentType.apiId-singular.description'),\n defaultMessage:\n 'Used to generate the API routes and databases tables/collections',\n },\n intlLabel: {\n id: getTrad('contentType.apiId-singular.label'),\n defaultMessage: 'API ID (Singular)',\n },\n name: 'singularName',\n type: 'text-singular',\n },\n {\n type: 'pushRight',\n size: 6,\n intlLabel: { id: '', defaultMessage: '' },\n name: 'pushRight',\n },\n {\n description: {\n id: getTrad('contentType.apiId-plural.description'),\n defaultMessage: 'Pluralized API ID',\n },\n intlLabel: {\n id: getTrad('contentType.apiId-plural.label'),\n defaultMessage: 'API ID (Plural)',\n },\n name: 'pluralName',\n type: 'text-plural',\n },\n ],\n },\n ],\n };\n },\n edit() {\n return {\n sections: [\n {\n sectionTitle: null,\n items: [\n nameField,\n {\n disabled: true,\n description: {\n id: getTrad('contentType.apiId-singular.description'),\n defaultMessage:\n 'Used to generate the API routes and databases tables/collections',\n },\n intlLabel: {\n id: getTrad('contentType.apiId-singular.label'),\n defaultMessage: 'API ID (Singular)',\n },\n name: 'singularName',\n type: 'text',\n },\n {\n type: 'pushRight',\n size: 6,\n intlLabel: { id: '', defaultMessage: '' },\n name: 'pushRight',\n },\n {\n disabled: true,\n description: {\n id: getTrad('contentType.apiId-plural.description'),\n defaultMessage: 'Pluralized API ID',\n },\n intlLabel: {\n id: getTrad('contentType.apiId-plural.label'),\n defaultMessage: 'API ID (Plural)',\n },\n name: 'pluralName',\n type: 'text',\n },\n {\n intlLabel: {\n id: 'global.type',\n defaultMessage: 'Type',\n },\n name: 'kind',\n type: 'content-type-radio-group',\n size: 12,\n radios: [\n {\n title: {\n id: getTrad('form.button.collection-type.name'),\n defaultMessage: 'Collection Type',\n },\n description: {\n id: getTrad('form.button.collection-type.description'),\n defaultMessage:\n 'Best for multiple instances like articles, products, comments, etc.',\n },\n value: 'collectionType',\n },\n {\n title: {\n id: getTrad('form.button.single-type.name'),\n defaultMessage: 'Single Type',\n },\n description: {\n id: getTrad('form.button.single-type.description'),\n defaultMessage: 'Best for single instance like about us, homepage, etc.',\n },\n value: 'singleType',\n },\n ],\n },\n ],\n },\n ],\n };\n },\n },\n};\n","import { translatedErrors as errorsTrads } from '@strapi/admin/strapi-admin';\nimport { snakeCase } from 'lodash/fp';\nimport * as yup from 'yup';\n\nimport { getTrad } from '../../../utils/getTrad';\nimport { createUid } from '../utils/createUid';\n\ntype CreateContentTypeSchemaParams = {\n usedContentTypeNames: Array<string>;\n reservedModels: Array<string>;\n singularNames: Array<string>;\n pluralNames: Array<string>;\n collectionNames: Array<string>;\n};\n\nexport const createContentTypeSchema = ({\n usedContentTypeNames = [],\n reservedModels = [],\n singularNames = [],\n pluralNames = [],\n collectionNames = [],\n}: CreateContentTypeSchemaParams) => {\n const shape = {\n displayName: yup\n .string()\n .test({\n name: 'nameAlreadyUsed',\n message: errorsTrads.unique.id,\n test(value) {\n if (!value) {\n return false;\n }\n\n const name = createUid(value);\n\n const snakeCaseKey = snakeCase(name);\n\n return !usedContentTypeNames.some((value) => {\n return snakeCase(value) === snakeCaseKey;\n });\n },\n })\n .test({\n name: 'nameNotAllowed',\n message: getTrad('error.contentTypeName.reserved-name'),\n test(value) {\n if (!value) {\n return false;\n }\n const snakeCaseKey = snakeCase(value);\n\n return !reservedModels.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .required(errorsTrads.required.id),\n pluralName: yup\n .string()\n .test({\n name: 'pluralNameAlreadyUsed',\n message: errorsTrads.unique.id,\n test(value) {\n if (!value) {\n return false;\n }\n\n const snakeCaseKey = snakeCase(value);\n\n return !pluralNames.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .test({\n name: 'pluralNameAlreadyUsedAsSingular',\n message: getTrad('error.contentType.pluralName-equals-singularName'),\n test(value) {\n if (!value) {\n return false;\n }\n\n const snakeCaseKey = snakeCase(value);\n\n return !singularNames.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .test({\n name: 'pluralAndSingularAreUnique',\n message: getTrad('error.contentType.pluralName-used'),\n test(value, context) {\n if (!value) {\n return false;\n }\n\n return snakeCase(context.parent.singularName) !== snakeCase(value);\n },\n })\n .test({\n name: 'pluralNameNotAllowed',\n message: getTrad('error.contentTypeName.reserved-name'),\n test(value) {\n if (!value) {\n return false;\n }\n\n const snakeCaseKey = snakeCase(value);\n\n return !reservedModels.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .test({\n name: 'pluralNameNotAlreadyUsedInCollectionName',\n message: getTrad('error.contentType.pluralName-equals-collectionName'),\n test(value) {\n if (!value) {\n return false;\n }\n\n const snakeCaseKey = snakeCase(value);\n\n return !collectionNames.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .required(errorsTrads.required.id),\n singularName: yup\n .string()\n .test({\n name: 'singularNameAlreadyUsed',\n message: errorsTrads.unique.id,\n test(value) {\n if (!value) {\n return false;\n }\n\n const snakeCaseKey = snakeCase(value);\n\n return !singularNames.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .test({\n name: 'singularNameAlreadyUsedAsPlural',\n message: getTrad('error.contentType.singularName-equals-pluralName'),\n test(value) {\n if (!value) {\n return false;\n }\n\n const snakeCaseKey = snakeCase(value);\n\n return !pluralNames.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .test({\n name: 'pluralAndSingularAreUnique',\n message: getTrad('error.contentType.singularName-used'),\n test(value, context) {\n if (!value) {\n return false;\n }\n\n return snakeCase(context.parent.pluralName) !== snakeCase(value);\n },\n })\n .test({\n name: 'singularNameNotAllowed',\n message: getTrad('error.contentTypeName.reserved-name'),\n test(value) {\n if (!value) {\n return false;\n }\n\n const snakeCaseKey = snakeCase(value);\n\n return !reservedModels.some((key) => {\n return snakeCase(key) === snakeCaseKey;\n });\n },\n })\n .required(errorsTrads.required.id),\n draftAndPublish: yup.boolean(),\n kind: yup.string().oneOf(['singleType', 'collectionType']),\n };\n\n return yup.object(shape);\n};\n","import { getTrad } from '../../utils/getTrad';\n\nimport { componentField } from './component/componentField';\nimport { componentForm } from './component/componentForm';\n\nexport const dynamiczoneForm = {\n advanced: {\n default() {\n return {\n sections: componentForm.advanced(),\n };\n },\n },\n base: {\n createComponent() {\n return {\n sections: [\n { sectionTitle: null, items: [componentField] },\n ...componentForm.base('componentToCreate.'),\n ],\n };\n },\n default() {\n return {\n sections: [\n { sectionTitle: null, items: [componentField] },\n {\n sectionTitle: null,\n items: [\n {\n type: 'pushRight',\n size: 6,\n intlLabel: { id: '', defaultMessage: '' },\n name: 'pushRight',\n },\n {\n name: 'components',\n type: 'select-components',\n intlLabel: {\n id: getTrad('modalForm.attributes.select-components'),\n defaultMessage: 'Select the components',\n },\n isMultiple: true,\n },\n ],\n },\n ],\n };\n },\n },\n};\n","type SectionTitle = {\n id: string;\n defaultMessage: string;\n};\n\ntype Item = {\n intlLabel: {\n id: string;\n defaultMessage: string;\n };\n description?: { id: string; defaultMessage: string };\n name: string;\n type: string;\n value?: string;\n options?: {\n key: string;\n value: string;\n metadatas: {\n intlLabel: {\n id: string;\n defaultMessage: string;\n };\n };\n }[];\n};\n\ntype FormTypeOption = {\n sectionTitle: SectionTitle | null;\n items: Item[];\n};\n\nexport type FormTypeOptions = Array<FormTypeOption>;\n\n/**\n * @description\n * Adds form options to the default section or as a new section\n */\nexport const addItemsToFormSection = (\n formTypeOptions: FormTypeOptions | Item[],\n sections: FormTypeOptions\n) => {\n formTypeOptions.forEach((item) => {\n if (!('sectionTitle' in item)) {\n // When there is no sectionTitle key,\n // add the item to the default section\n sections[0].items?.push(item);\n return;\n }\n\n // Otherwise, when sectionTitle has a value (including null),\n // add the item as a new section\n sections.push(item);\n });\n};\n","import { snakeCase } from 'lodash/fp';\nimport pluralize from 'pluralize';\n\n// TODO: create a utility for this\n// Duplicate in server/src/services/schema-builder/component-builder.ts\nconst createComponentCollectionName = (name: string, category: string) => {\n return `components_${snakeCase(category)}_${pluralize(snakeCase(name))}`;\n};\n\nexport { createComponentCollectionName };\n","export type SchemaData = {\n initialData: {\n name: string;\n targetAttribute: any;\n };\n modifiedData: object;\n};\n\nexport type Attribute = {\n name: string;\n};\n\nexport const getUsedAttributeNames = (\n attributes: Array<Attribute>,\n schemaData: SchemaData\n): Array<string> => {\n return attributes\n .filter(({ name }) => {\n return name !== schemaData.initialData.name;\n })\n .map(({ name }) => name);\n};\n","import { getTrad } from '../../../utils';\nimport { commonBaseForm } from '../attributes/commonBaseForm';\nimport { attributesForm } from '../attributes/form';\nimport { nameField } from '../attributes/nameField';\nimport { attributeTypes } from '../attributes/types';\nimport { createCategorySchema } from '../category/createCategorySchema';\nimport { categoryForm } from '../category/form';\nimport { componentForm } from '../component/componentForm';\nimport { createComponentSchema } from '../component/createComponentSchema';\nimport { contentTypeForm } from '../contentType/contentTypeForm';\nimport { createContentTypeSchema } from '../contentType/createContentTypeSchema';\nimport { dynamiczoneForm } from '../dynamiczoneForm';\n\nimport { addItemsToFormSection, FormTypeOptions } from './utils/addItemsToFormSection';\nimport { createComponentCollectionName } from './utils/createCollectionName';\nimport { Attribute, getUsedAttributeNames, SchemaData } from './utils/getUsedAttributeNames';\n\nimport type { Internal } from '@strapi/types';\n\ntype ContentType = {\n schema: {\n singularName: string;\n pluralName: string;\n collectionName: string;\n };\n};\n\nexport type SchemaParams = {\n schemaAttributes: any;\n attributeType: keyof typeof attributeTypes;\n customFieldValidator: any;\n reservedNames: {\n attributes: Array<string>;\n };\n schemaData: any;\n ctbFormsAPI: any;\n};\n\ntype Base<TAttributesFormType extends 'base' | 'advanced'> = {\n data: any;\n type: keyof (typeof attributesForm)[TAttributesFormType];\n step: string;\n attributes: any;\n extensions: any;\n forTarget: string;\n};\n\nexport const forms = {\n customField: {\n schema({\n schemaAttributes,\n attributeType,\n customFieldValidator,\n reservedNames,\n schemaData,\n ctbFormsAPI,\n }: SchemaParams) {\n const usedAttributeNames = getUsedAttributeNames(schemaAttributes, schemaData);\n\n let attributeShape;\n if (attributeType === 'relation') {\n attributeShape = attributeTypes[attributeType](\n usedAttributeNames,\n reservedNames.attributes,\n [],\n { initialData: {}, modifiedData: {} }\n );\n } else {\n attributeShape = attributeTypes[attributeType](\n usedAttributeNames,\n reservedNames.attributes\n );\n }\n\n return ctbFormsAPI.makeCustomFieldValidator(\n attributeShape,\n customFieldValidator,\n usedAttributeNames,\n reservedNames.attributes,\n schemaData\n );\n },\n form: {\n base({ customField }: any) {\n // Default section with required name field\n const sections: FormTypeOptions = [{ sectionTitle: null, items: [nameField] }];\n\n if (customField.options?.base) {\n addItemsToFormSection(customField.options.base, sections);\n }\n\n return { sections };\n },\n advanced({ customField, data, step, extensions, ...rest }: any) {\n // Default section with no fields\n const sections: FormTypeOptions = [{ sectionTitle: null, items: [] }];\n const injectedInputs = extensions.getAdvancedForm(['attribute', customField.type], {\n data,\n type: customField.type,\n step,\n ...rest,\n });\n\n if (customField.options?.advanced) {\n addItemsToFormSection(customField.options.advanced, sections);\n }\n\n if (injectedInputs) {\n const extendedSettings = {\n sectionTitle: {\n id: getTrad('modalForm.custom-fields.advanced.settings.extended'),\n defaultMessage: 'Extended settings',\n },\n items: injectedInputs,\n };\n\n sections.push(extendedSettings);\n }\n\n return { sections };\n },\n },\n },\n attribute: {\n schema(\n currentSchema: any,\n attributeType: keyof typeof attributeTypes,\n reservedNames: {\n attributes: Array<string>;\n },\n alreadyTakenTargetContentTypeAttributes: Array<Attribute>,\n options: SchemaData,\n extensions: {\n makeValidator: any;\n }\n ) {\n // Get the attributes object on the schema\n const attributes: Array<Attribute> = currentSchema?.schema?.attributes ?? [];\n const usedAttributeNames = getUsedAttributeNames(attributes, options);\n\n try {\n const attributeShape = attributeTypes[attributeType](\n usedAttributeNames,\n reservedNames.attributes,\n alreadyTakenTargetContentTypeAttributes,\n options\n );\n\n return extensions.makeValidator(\n ['attribute', attributeType],\n attributeShape,\n usedAttributeNames,\n reservedNames.attributes,\n alreadyTakenTargetContentTypeAttributes,\n options\n );\n } catch (err) {\n console.error('Error yup build schema', err);\n\n return attributeTypes.default(usedAttributeNames, reservedNames.attributes);\n }\n },\n form: {\n advanced({ data, type, step, extensions, ...rest }: Base<'advanced'>) {\n try {\n const baseForm = attributesForm.advanced[type](data, step).sections;\n const itemsToAdd = extensions.getAdvancedForm(['attribute', type], {\n data,\n type,\n step,\n ...rest,\n });\n\n const sections = baseForm.reduce((acc: Array<any>, current: any) => {\n if (current.sectionTitle === null) {\n acc.push(current);\n } else {\n acc.push({ ...current, items: [...current.items, ...itemsToAdd] });\n }\n\n return acc;\n }, []);\n // IF we want a dedicated section for the plugins\n // const sections = [\n // ...baseForm,\n // {\n // sectionTitle: { id: 'Zone pour plugins', defaultMessage: 'Zone pour plugins' },\n // items: itemsToAdd,\n // },\n // ];\n\n return { sections };\n } catch (err) {\n console.error(err);\n\n return { sections: [] };\n }\n },\n base({ data, type, step, attributes }: Base<'base'>) {\n try {\n return attributesForm.base[type](data, step, attributes);\n } catch (err) {\n return commonBaseForm;\n }\n },\n },\n },\n contentType: {\n schema(\n alreadyTakenNames: Array<string>,\n isEditing: boolean,\n ctUid: Internal.UID.ContentType,\n reservedNames: {\n models: any;\n },\n extensions: any,\n contentTypes: Record<string, ContentType>\n ) {\n const singularNames = Object.values(contentTypes).map((contentType) => {\n return contentType.schema.singularName;\n });\n\n const pluralNames = Object.values(contentTypes).map((contentType: any) => {\n return contentType?.schema?.pluralName ?? '';\n });\n\n const takenNames = isEditing\n ? alreadyTakenNames.filter((uid) => uid !== ctUid)\n : alreadyTakenNames;\n\n const takenSingularNames = isEditing\n ? singularNames.filter((singName) => {\n const { schema } = contentTypes[ctUid];\n\n return schema.singularName !== singName;\n })\n : singularNames;\n\n const takenPluralNames = isEditing\n ? pluralNames.filter((pluralName) => {\n const { schema } = contentTypes[ctUid];\n\n return schema.pluralName !== pluralName;\n })\n : pluralNames;\n\n // return the array of collection names not all normalized\n const collectionNames = Object.values(contentTypes).map((contentType) => {\n return contentType?.schema?.collectionName ?? '';\n });\n\n const takenCollectionNames = isEditing\n ? collectionNames.filter((collectionName) => {\n const { schema } = contentTypes[ctUid];\n const currentCollectionName = schema.collectionName;\n\n return collectionName !== currentCollectionName;\n })\n : collectionNames;\n\n const contentTypeShape = createContentTypeSchema({\n usedContentTypeNames: takenNames,\n reservedModels: reservedNames.models,\n singularNames: takenSingularNames,\n pluralNames: takenPluralNames,\n collectionNames: takenCollectionNames,\n });\n\n // FIXME\n return extensions.makeValidator(\n ['contentType'],\n contentTypeShape,\n takenNames,\n reservedNames.models,\n takenSingularNames,\n takenPluralNames\n );\n },\n form: {\n base({ actionType }: any) {\n if (actionType === 'create') {\n return contentTypeForm.base.create();\n }\n\n return contentTypeForm.base.edit();\n },\n advanced({ extensions }: any) {\n const baseForm = contentTypeForm.advanced\n .default()\n .sections.map((section) => section.items)\n .flat();\n const itemsToAdd = extensions.getAdvancedForm(['contentType']);\n\n return {\n sections: [\n {\n items: [...baseForm, ...itemsToAdd],\n },\n ],\n };\n },\n },\n },\n component: {\n schema(\n alreadyTakenAttributes: Array<Internal.UID.Component>,\n componentCategory: string,\n reservedNames: {\n models: any;\n },\n isEditing = false,\n components: Record<string, any>,\n componentDisplayName: string,\n compoUid: Internal.UID.Component | null = null\n ) {\n const takenNames = isEditing\n ? alreadyTakenAttributes.filter((uid: Internal.UID.Component) => uid !== compoUid)\n : alreadyTakenAttributes;\n const collectionNames = Object.values(components).map((component: any) => {\n return component?.schema?.collectionName;\n });\n\n const currentCollectionName = createComponentCollectionName(\n componentDisplayName,\n componentCategory\n );\n\n const takenCollectionNames = isEditing\n ? collectionNames.filter((collectionName) => collectionName !== currentCollectionName)\n : collectionNames;\n\n return createComponentSchema(\n takenNames,\n reservedNames.models,\n componentCategory,\n takenCollectionNames,\n currentCollectionName\n );\n },\n form: {\n advanced() {\n return {\n sections: componentForm.advanced(),\n };\n },\n base() {\n return {\n sections: componentForm.base(),\n };\n },\n },\n },\n addComponentToDynamicZone: {\n form: {\n advanced() {\n return dynamiczoneForm.advanced.default();\n },\n base({ data }: any) {\n const isCreatingComponent = data?.createComponent ?? false;\n\n if (isCreatingComponent) {\n return dynamiczoneForm.base.createComponent();\n }\n\n return dynamiczoneForm.base.default();\n },\n },\n },\n editCategory: {\n schema(allCategories: Array<any>, initialData: any) {\n const allowedCategories = allCategories\n .filter((cat) => cat !== initialData.name)\n .map((cat) => cat.toLowerCase());\n\n return createCategorySchema(allowedCategories);\n },\n form: {\n advanced: () => ({ sections: [] }),\n base() {\n return categoryForm.base;\n },\n },\n },\n};\n","import { createSelector } from '@reduxjs/toolkit';\n\nimport { pluginId } from '../../pluginId';\n\nimport { initialState } from './reducer';\n\n/**\n * Direct selector to the formModal state domain\n */\nconst formModalDomain = () => (state: any) => state[`${pluginId}_formModal`] || initialState;\n\n/**\n * Other specific selectors\n */\n\n/**\n * Default selector used by formModal\n */\n\nexport const makeSelectFormModal = () =>\n createSelector(formModalDomain(), (substate) => {\n return substate;\n });\n\nexport { formModalDomain };\n","import get from 'lodash/get';\n\nimport { getRelationType } from '../../../utils/getRelationType';\n\nimport type { AttributeType } from '../../../types';\nimport type { Internal, Struct } from '@strapi/types';\n\nexport type EditableContentTypeSchema = {\n kind: Struct.ContentTypeKind;\n name: string;\n attributes: AttributeType[];\n};\n\nexport type EditableContentTypeData = {\n contentType: {\n uid: Internal.UID.ContentType;\n schema: EditableContentTypeSchema;\n };\n};\n\ntype ModifiedData = {\n kind: Struct.ContentTypeKind;\n};\n\nexport const canEditContentType = (data: Record<string, any>, modifiedData: ModifiedData) => {\n const kind = get(data, ['contentType', 'schema', 'kind'], '');\n\n // if kind isn't modified or content type is a single type, there is no need to check attributes.\n if (kind === 'singleType' || kind === modifiedData.kind) {\n return true;\n }\n\n const contentTypeAttributes = get(\n data,\n ['contentType', 'schema', 'attributes'],\n []\n ) as AttributeType[];\n\n const relationAttributes = contentTypeAttributes.filter(({ relation, type, targetAttribute }) => {\n const relationType = getRelationType(relation, targetAttribute);\n\n return type === 'relation' && !['oneWay', 'manyWay'].includes(relationType || '');\n });\n\n return relationAttributes.length === 0;\n};\n","import { MAX_COMPONENT_DEPTH } from '../../../constants';\nimport { getComponentDepth } from '../../../utils/getMaxDepth';\n\nimport type { IconByType } from '../../AttributeIcon';\nimport type { NestedComponent } from '../../DataManagerProvider/utils/retrieveNestedComponents';\nimport type { Internal } from '@strapi/types';\n\nexport const getAttributesToDisplay = (\n dataTarget = '',\n targetUid: Internal.UID.Schema,\n nestedComponents: Array<NestedComponent>\n): IconByType[][] => {\n const defaultAttributes: IconByType[] = [\n 'text',\n 'boolean',\n 'blocks',\n 'json',\n 'number',\n 'email',\n 'date',\n 'password',\n 'media',\n 'enumeration',\n 'relation',\n 'richtext',\n ];\n\n const isPickingAttributeForAContentType = dataTarget === 'contentType';\n\n if (isPickingAttributeForAContentType) {\n return [\n // Insert UID before the last item (richtext)\n [...defaultAttributes.slice(0, -1), 'uid', ...defaultAttributes.slice(-1)],\n ['component', 'dynamiczone'],\n ];\n }\n\n // this will only run when adding attributes to components\n if (dataTarget) {\n const componentDepth = getComponentDepth(targetUid, nestedComponents);\n const isNestedInAnotherComponent = componentDepth >= MAX_COMPONENT_DEPTH;\n const canAddComponentInAnotherComponent =\n !isPickingAttributeForAContentType && !isNestedInAnotherComponent;\n if (canAddComponentInAnotherComponent) {\n return [defaultAttributes, ['component']];\n }\n }\n\n return [defaultAttributes];\n};\n","export const getFormInputNames = (form: any) =>\n form.reduce((acc: any, current: any) => {\n const names = current.items.reduce((acc: any, current: any) => {\n if (current.name) {\n acc.push(current.name);\n }\n\n return acc;\n }, []);\n\n return [...acc, ...names];\n }, []);\n","import * as React from 'react';\n\nimport { useStrapiApp, useTracking, useNotification } from '@strapi/admin/strapi-admin';\nimport { Button, Divider, Flex, Modal, Tabs } from '@strapi/design-system';\nimport get from 'lodash/get';\nimport has from 'lodash/has';\nimport isEqual from 'lodash/isEqual';\nimport set from 'lodash/set';\nimport toLower from 'lodash/toLower';\nimport { useIntl } from 'react-intl';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport { useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useDataManager } from '../../hooks/useDataManager';\nimport { useFormModalNavigation } from '../../hooks/useFormModalNavigation';\nimport { pluginId } from '../../pluginId';\nimport { getTrad, isAllowedContentTypesForRelations } from '../../utils';\nimport { findAttribute } from '../../utils/findAttribute';\nimport { getYupInnerErrors } from '../../utils/getYupInnerErrors';\n// New compos\nimport { AllowedTypesSelect } from '../AllowedTypesSelect';\nimport { IconByType } from '../AttributeIcon';\nimport { AttributeOptions } from '../AttributeOptions/AttributeOptions';\nimport { BooleanDefaultValueSelect } from '../BooleanDefaultValueSelect';\nimport { BooleanRadioGroup } from '../BooleanRadioGroup';\nimport { CheckboxWithNumberField } from '../CheckboxWithNumberField';\nimport { ContentTypeRadioGroup } from '../ContentTypeRadioGroup';\nimport { CustomRadioGroup } from '../CustomRadioGroup';\nimport { DraftAndPublishToggle } from '../DraftAndPublishToggle';\nimport { FormModalEndActions } from '../FormModalEndActions';\nimport { FormModalHeader } from '../FormModalHeader';\nimport { FormModalSubHeader } from '../FormModalSubHeader';\nimport { IconPicker } from '../IconPicker/IconPicker';\nimport { PluralName } from '../PluralName';\nimport { Relation } from '../Relation/Relation';\nimport { SelectCategory } from '../SelectCategory';\nimport { SelectComponent } from '../SelectComponent';\nimport { SelectComponents } from '../SelectComponents';\nimport { SelectDateType } from '../SelectDateType';\nimport { SelectNumber } from '../SelectNumber';\nimport { SingularName } from '../SingularName';\nimport { TabForm } from '../TabForm';\nimport { TextareaEnum } from '../TextareaEnum';\n\nimport {\n ON_CHANGE,\n RESET_PROPS,\n RESET_PROPS_AND_SAVE_CURRENT_DATA,\n RESET_PROPS_AND_SET_FORM_FOR_ADDING_AN_EXISTING_COMPO,\n RESET_PROPS_AND_SET_THE_FORM_FOR_ADDING_A_COMPO_TO_A_DZ,\n SET_ATTRIBUTE_DATA_SCHEMA,\n SET_CUSTOM_FIELD_DATA_SCHEMA,\n SET_DATA_TO_EDIT,\n SET_DYNAMIC_ZONE_DATA_SCHEMA,\n SET_ERRORS,\n} from './constants';\nimport { forms } from './forms/forms';\nimport { makeSelectFormModal } from './selectors';\nimport { canEditContentType } from './utils/canEditContentType';\nimport { createComponentUid, createUid } from './utils/createUid';\nimport { getAttributesToDisplay } from './utils/getAttributesToDisplay';\nimport { getFormInputNames } from './utils/getFormInputNames';\n\nimport type { CustomFieldAttributeParams } from '../../contexts/DataManagerContext';\nimport type { AttributeType } from '../../types';\nimport type { Internal } from '@strapi/types';\n\n/* eslint-disable indent */\n/* eslint-disable react/no-array-index-key */\n\nconst FormComponent = styled.form`\n overflow: auto;\n`;\n\nexport const FormModal = () => {\n const {\n onCloseModal,\n onNavigateToChooseAttributeModal,\n onNavigateToAddCompoToDZModal,\n onNavigateToCreateComponentStep2,\n actionType,\n attributeName,\n attributeType,\n customFieldUid,\n categoryName,\n dynamicZoneTarget,\n forTarget,\n modalType,\n isOpen,\n kind,\n step,\n targetUid,\n showBackLink,\n activeTab,\n setActiveTab,\n } = useFormModalNavigation();\n\n const getPlugin = useStrapiApp('FormModal', (state) => state.getPlugin);\n const getCustomField = useStrapiApp('FormModal', (state) => state.customFields.get);\n const customField = getCustomField(customFieldUid);\n\n const formModalSelector = React.useMemo(makeSelectFormModal, []);\n const dispatch = useDispatch();\n const { toggleNotification } = useNotification();\n const reducerState = useSelector((state) => formModalSelector(state), shallowEqual);\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const ctbPlugin = getPlugin(pluginId);\n const ctbFormsAPI: any = ctbPlugin?.apis.forms;\n const inputsFromPlugins = ctbFormsAPI.components.inputs;\n\n const {\n addAttribute,\n addCustomFieldAttribute,\n addCreatedComponentToDynamicZone,\n allComponentsCategories,\n changeDynamicZoneComponents,\n contentTypes,\n components,\n createSchema,\n deleteCategory,\n deleteData,\n editCategory,\n editCustomFieldAttribute,\n submitData,\n modifiedData: allDataSchema,\n nestedComponents,\n setModifiedData,\n sortedContentTypesList,\n updateSchema,\n reservedNames,\n } = useDataManager();\n\n const {\n componentToCreate,\n formErrors,\n initialData,\n isCreatingComponentWhileAddingAField,\n modifiedData,\n } = reducerState;\n\n const pathToSchema =\n forTarget === 'contentType' || forTarget === 'component' ? [forTarget] : [forTarget, targetUid];\n\n React.useEffect(() => {\n if (isOpen) {\n const collectionTypesForRelation = sortedContentTypesList.filter(\n isAllowedContentTypesForRelations\n );\n\n // Reset all the modification when opening the edit category modal\n if (modalType === 'editCategory') {\n setModifiedData();\n }\n\n if (actionType === 'edit' && modalType === 'attribute' && forTarget === 'contentType') {\n trackUsage('willEditFieldOfContentType');\n }\n\n const pathToAttributes = [...pathToSchema, 'schema', 'attributes'];\n\n // Case:\n // the user opens the modal chooseAttributes\n // selects dynamic zone => set the field name\n // then goes to step 1 (the modal is addComponentToDynamicZone) and finally reloads the app.\n // In this particular if the user tries to add components to the zone it will pop an error since the dz is unknown\n const foundDynamicZoneTarget =\n findAttribute(get(allDataSchema, pathToAttributes, []), dynamicZoneTarget) || null;\n\n // Edit category\n if (modalType === 'editCategory' && actionType === 'edit') {\n dispatch({\n type: SET_DATA_TO_EDIT,\n modalType,\n actionType,\n data: {\n name: categoryName,\n },\n });\n }\n\n // Create content type we need to add the default option draftAndPublish\n if (modalType === 'contentType' && actionType === 'create') {\n dispatch({\n type: SET_DATA_TO_EDIT,\n modalType,\n actionType,\n data: {\n draftAndPublish: true,\n },\n pluginOptions: {},\n });\n }\n\n // Edit content type\n if (modalType === 'contentType' && actionType === 'edit') {\n const { displayName, draftAndPublish, kind, pluginOptions, pluralName, singularName } = get(\n allDataSchema,\n [...pathToSchema, 'schema'],\n {\n displayName: null,\n pluginOptions: {},\n singularName: null,\n pluralName: null,\n }\n );\n\n dispatch({\n type: SET_DATA_TO_EDIT,\n actionType,\n modalType,\n data: {\n displayName,\n draftAndPublish,\n kind,\n pluginOptions,\n pluralName,\n singularName,\n },\n });\n }\n\n // Edit component\n if (modalType === 'component' && actionType === 'edit') {\n const data = get(allDataSchema, pathToSchema, {});\n\n dispatch({\n type: SET_DATA_TO_EDIT,\n actionType,\n modalType,\n data: {\n displayName: data.schema.displayName,\n category: data.category,\n icon: data.schema.icon,\n },\n });\n }\n\n // Special case for the dynamic zone\n if (modalType === 'addComponentToDynamicZone' && actionType === 'edit') {\n const attributeToEdit = {\n ...foundDynamicZoneTarget,\n // We filter the available components\n // Because this modal is only used for adding components\n components: [],\n name: dynamicZoneTarget,\n createComponent: false,\n componentToCreate: { type: 'component' },\n };\n\n dispatch({\n type: SET_DYNAMIC_ZONE_DATA_SCHEMA,\n attributeToEdit,\n });\n }\n\n // Set the predefined data structure to create an attribute\n if (attributeType) {\n const attributeToEditNotFormatted = findAttribute(\n get(allDataSchema, pathToAttributes, []),\n attributeName\n ) as AttributeType;\n const attributeToEdit = {\n ...attributeToEditNotFormatted,\n name: attributeName,\n };\n\n // We need to set the repeatable key to false when editing a component\n // The API doesn't send this info\n if (attributeType === 'component' && actionType === 'edit') {\n if (!attributeToEdit.repeatable) {\n set(attributeToEdit, 'repeatable', false);\n }\n }\n\n if (modalType === 'customField') {\n dispatch({\n type: SET_CUSTOM_FIELD_DATA_SCHEMA,\n customField,\n isEditing: actionType === 'edit',\n modifiedDataToSetForEditing: attributeToEdit,\n // NOTE: forTarget is used in the i18n middleware\n forTarget,\n });\n } else {\n dispatch({\n type: SET_ATTRIBUTE_DATA_SCHEMA,\n attributeType,\n nameToSetForRelation: get(collectionTypesForRelation, ['0', 'title'], 'error'),\n targetUid: get(collectionTypesForRelation, ['0', 'uid'], 'error'),\n isEditing: actionType === 'edit',\n modifiedDataToSetForEditing: attributeToEdit,\n step,\n forTarget,\n });\n }\n }\n } else {\n dispatch({ type: RESET_PROPS });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n actionType,\n attributeName,\n attributeType,\n categoryName,\n dynamicZoneTarget,\n forTarget,\n isOpen,\n modalType,\n ]);\n\n const isCreatingContentType = modalType === 'contentType';\n const isCreatingComponent = modalType === 'component';\n const isCreatingAttribute = modalType === 'attribute';\n const isCreatingCustomFieldAttribute = modalType === 'customField';\n const isComponentAttribute = attributeType === 'component' && isCreatingAttribute;\n const isCreating = actionType === 'create';\n const isCreatingComponentFromAView =\n get(modifiedData, 'createComponent', false) || isCreatingComponentWhileAddingAField;\n const isInFirstComponentStep = step === '1';\n const isEditingCategory = modalType === 'editCategory';\n const isPickingAttribute = modalType === 'chooseAttribute';\n const uid = createUid(modifiedData.displayName || '');\n const attributes = get(allDataSchema, [...pathToSchema, 'schema', 'attributes'], null) as {\n name: string;\n }[];\n\n const checkFormValidity = async () => {\n let schema;\n const dataToValidate =\n isCreatingComponentFromAView && step === '1'\n ? get(modifiedData, 'componentToCreate', {})\n : modifiedData;\n // Check form validity for content type\n if (isCreatingContentType) {\n schema = forms.contentType.schema(\n Object.keys(contentTypes),\n actionType === 'edit',\n // currentUID\n get(allDataSchema, [...pathToSchema, 'uid'], null),\n reservedNames,\n ctbFormsAPI,\n contentTypes\n );\n\n // Check form validity for component\n // This is happening when the user click on the link from the left menu\n } else if (isCreatingComponent) {\n schema = forms.component.schema(\n Object.keys(components) as Internal.UID.Component[],\n modifiedData.category || '',\n reservedNames,\n actionType === 'edit',\n components,\n modifiedData.displayName || '',\n get(allDataSchema, [...pathToSchema, 'uid'], null)\n // ctbFormsAPI\n );\n } else if (isCreatingCustomFieldAttribute) {\n schema = forms.customField.schema({\n schemaAttributes: get(allDataSchema, [...pathToSchema, 'schema', 'attributes'], []),\n attributeType: customField!.type,\n reservedNames,\n schemaData: { modifiedData, initialData },\n ctbFormsAPI,\n customFieldValidator: customField!.options?.validator,\n });\n\n // Check for validity for creating a component\n // This is happening when the user creates a component \"on the fly\"\n // Since we temporarily store the component info in another object\n // The data is set in the componentToCreate key\n } else if (isComponentAttribute && isCreatingComponentFromAView && isInFirstComponentStep) {\n schema = forms.component.schema(\n Object.keys(components) as Internal.UID.Component[],\n get(modifiedData, 'componentToCreate.category', ''),\n reservedNames,\n actionType === 'edit',\n components,\n modifiedData.componentToCreate.displayName || ''\n );\n\n // Check form validity for creating a 'common attribute'\n // We need to make sure that it is independent from the step\n } else if (isCreatingAttribute && !isInFirstComponentStep) {\n const type = attributeType === 'relation' ? 'relation' : modifiedData.type;\n\n let alreadyTakenTargetContentTypeAttributes = [];\n\n if (type === 'relation') {\n const targetContentTypeUID = get(modifiedData, ['target'], null);\n\n const targetContentTypeAttributes = get(\n contentTypes,\n [targetContentTypeUID, 'schema', 'attributes'],\n []\n );\n\n // Create an array with all the targetContentType attributes name\n // in order to prevent the user from creating a relation with a targetAttribute\n // that may exist in the other content type\n alreadyTakenTargetContentTypeAttributes = targetContentTypeAttributes.filter(\n ({ name: attrName }: { name: string }) => {\n // Keep all the target content type attributes when creating a relation\n if (actionType !== 'edit') {\n return true;\n }\n\n // Remove the already created one when editing\n return attrName !== initialData.targetAttribute;\n }\n );\n }\n schema = forms.attribute.schema(\n get(allDataSchema, pathToSchema, {}),\n type,\n reservedNames,\n alreadyTakenTargetContentTypeAttributes,\n { modifiedData, initialData },\n ctbFormsAPI\n );\n } else if (isEditingCategory) {\n schema = forms.editCategory.schema(allComponentsCategories, initialData);\n } else {\n // The user is either in the addComponentToDynamicZone modal or\n // in step 1 of the add component (modalType=attribute&attributeType=component) but not creating a component\n // eslint-disable-next-line no-lonely-if\n if (isInFirstComponentStep && isCreatingComponentFromAView) {\n schema = forms.component.schema(\n Object.keys(components) as Internal.UID.Component[],\n get(modifiedData, 'componentToCreate.category', ''),\n reservedNames,\n actionType === 'edit',\n components,\n modifiedData.componentToCreate.displayName || ''\n );\n } else {\n // The form is valid\n // The case here is being in the addComponentToDynamicZone modal and not creating a component\n return;\n }\n }\n\n await schema.validate(dataToValidate, { abortEarly: false });\n };\n\n const handleChange = React.useCallback(\n ({\n target: { name, value, type, ...rest },\n }: {\n target: { name: string; value: string; type: string };\n }) => {\n const namesThatCanResetToNullValue = [\n 'enumName',\n 'max',\n 'min',\n 'maxLength',\n 'minLength',\n 'regex',\n 'default',\n ];\n\n let val;\n\n if (namesThatCanResetToNullValue.includes(name) && value === '') {\n val = null;\n } else {\n val = value;\n }\n\n const clonedErrors = Object.assign({}, formErrors);\n\n // Reset min error when modifying the max\n if (name === 'max') {\n delete clonedErrors.min;\n }\n\n // Same here\n if (name === 'maxLength') {\n delete clonedErrors.minLength;\n }\n\n // Since the onBlur is deactivated we remove the errors directly when changing an input\n delete clonedErrors[name];\n\n dispatch({\n type: SET_ERRORS,\n errors: clonedErrors,\n });\n\n dispatch({\n type: ON_CHANGE,\n keys: name.split('.'),\n value: val,\n ...rest,\n });\n },\n [dispatch, formErrors]\n );\n\n const handleSubmit = async (e: React.SyntheticEvent, shouldContinue = isCreating) => {\n e.preventDefault();\n\n try {\n await checkFormValidity();\n\n sendButtonAddMoreFieldEvent(shouldContinue);\n const ctTargetUid = forTarget === 'components' ? targetUid : uid;\n\n if (isCreatingContentType) {\n // Create the content type schema\n if (isCreating) {\n createSchema({ ...modifiedData, kind }, modalType, uid);\n // Redirect the user to the created content type\n navigate({ pathname: `/plugins/${pluginId}/content-types/${uid}` });\n\n // Navigate to the choose attribute modal\n onNavigateToChooseAttributeModal({\n forTarget,\n targetUid: ctTargetUid,\n });\n } else {\n // We cannot switch from collection type to single when the modal is making relations other than oneWay or manyWay\n if (canEditContentType(allDataSchema, modifiedData)) {\n onCloseModal();\n\n await submitData(modifiedData);\n } else {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.contentType.relations.conflict' }),\n });\n }\n\n return;\n }\n // We are creating a component using the component modal from the left menu\n } else if (modalType === 'component') {\n if (isCreating) {\n // Create the component schema\n const componentUid = createComponentUid(modifiedData.displayName, modifiedData.category);\n const { category, ...rest } = modifiedData;\n\n createSchema(rest, 'component', componentUid, category);\n\n // Redirect the user to the created component\n navigate({\n pathname: `/plugins/${pluginId}/component-categories/${category}/${componentUid}`,\n });\n\n // Navigate to the choose attribute modal\n onNavigateToChooseAttributeModal({\n forTarget,\n targetUid: componentUid,\n });\n } else {\n updateSchema(modifiedData, modalType, targetUid as Internal.UID.Component);\n\n // Close the modal\n onCloseModal();\n\n return;\n }\n } else if (isEditingCategory) {\n if (toLower(initialData.name) === toLower(modifiedData.name)) {\n // Close the modal\n onCloseModal();\n\n return;\n }\n\n editCategory(initialData.name, modifiedData);\n\n return;\n // Add/edit a field to a content type\n // Add/edit a field to a created component (the end modal is not step 2)\n } else if (isCreatingCustomFieldAttribute) {\n const customFieldAttributeUpdate: CustomFieldAttributeParams = {\n attributeToSet: { ...modifiedData, customField: customFieldUid },\n forTarget,\n targetUid,\n initialAttribute: initialData,\n };\n\n if (actionType === 'edit') {\n editCustomFieldAttribute(customFieldAttributeUpdate);\n } else {\n addCustomFieldAttribute(customFieldAttributeUpdate);\n }\n\n if (shouldContinue) {\n onNavigateToChooseAttributeModal({\n forTarget,\n targetUid: ctTargetUid,\n });\n } else {\n onCloseModal();\n }\n\n return;\n } else if (isCreatingAttribute && !isCreatingComponentFromAView) {\n const isDynamicZoneAttribute = attributeType === 'dynamiczone';\n\n // The user is creating a DZ (he had entered the name of the dz)\n if (isDynamicZoneAttribute) {\n addAttribute(modifiedData, forTarget, targetUid, actionType === 'edit', initialData);\n\n // Adding a component to a dynamiczone is not the same logic as creating a simple field\n // so the search is different\n if (isCreating) {\n // Step 1 of adding a component to a DZ, the user has the option to create a component\n dispatch({\n type: RESET_PROPS_AND_SET_THE_FORM_FOR_ADDING_A_COMPO_TO_A_DZ,\n });\n\n setActiveTab('basic');\n onNavigateToAddCompoToDZModal({ dynamicZoneTarget: modifiedData.name });\n } else {\n onCloseModal();\n }\n\n return;\n }\n\n // Normal fields like boolean relations or dynamic zone\n if (!isComponentAttribute) {\n addAttribute(modifiedData, forTarget, targetUid, actionType === 'edit', initialData);\n\n if (shouldContinue) {\n onNavigateToChooseAttributeModal({\n forTarget,\n targetUid: ctTargetUid,\n });\n } else {\n onCloseModal();\n }\n\n return;\n\n // Adding an existing component\n }\n // eslint-disable-next-line no-lonely-if\n if (isInFirstComponentStep) {\n // Navigate the user to step 2\n onNavigateToCreateComponentStep2();\n\n // Clear the reducer and prepare the modified data\n // This way we don't have to add some logic to re-run the useEffect\n // The first step is either needed to create a component or just to navigate\n // To the modal for adding a \"common field\"\n dispatch({\n type: RESET_PROPS_AND_SET_FORM_FOR_ADDING_AN_EXISTING_COMPO,\n forTarget,\n });\n\n // We don't want all the props to be reset\n return;\n\n // Here we are in step 2\n // The step 2 is also use to edit an attribute that is a component\n }\n\n addAttribute(\n modifiedData,\n forTarget,\n targetUid,\n // This change the dispatched type\n // either 'EDIT_ATTRIBUTE' or 'ADD_ATTRIBUTE' in the DataManagerProvider\n actionType === 'edit',\n // This is for the edit part\n initialData,\n // Passing true will add the component to the components object\n // This way we can add fields to the added component (if it wasn't there already)\n true\n );\n\n if (shouldContinue) {\n onNavigateToChooseAttributeModal({\n forTarget,\n targetUid,\n });\n } else {\n onCloseModal();\n }\n\n // We don't need to end the loop here we want the reducer to be reinitialized\n\n // Logic for creating a component without clicking on the link in\n // the left menu\n // We need to separate the logic otherwise the component would be created\n // even though the user didn't set any field\n // We need to prevent the component from being created if the user closes the modal at step 2 without any submission\n } else if (isCreatingAttribute && isCreatingComponentFromAView) {\n // Step 1\n if (isInFirstComponentStep) {\n // Here the search could be refactored since it is the same as the case from above\n // Navigate the user to step 2\n\n trackUsage('willCreateComponentFromAttributesModal');\n\n // Here we clear the reducer state but we also keep the created component\n // If we were to create the component before\n dispatch({\n type: RESET_PROPS_AND_SAVE_CURRENT_DATA,\n forTarget,\n });\n\n onNavigateToCreateComponentStep2();\n\n // Terminate because we don't want the reducer to be entirely reset\n return;\n\n // Step 2 of creating a component (which is setting the attribute name in the parent's schema)\n }\n // We are destructuring because the modifiedData object doesn't have the appropriate format to create a field\n const { category, type, ...rest } = componentToCreate;\n // Create a the component temp UID\n // This could be refactored but I think it's more understandable to separate the logic\n const componentUid = createComponentUid(componentToCreate.displayName, category);\n // Create the component first and add it to the components data\n createSchema(\n // Component data\n rest,\n // Type will always be component\n // It will dispatch the CREATE_COMPONENT_SCHEMA action\n // So the component will be added in the main components object\n // This might not be needed if we don't allow navigation between entries while editing\n type,\n componentUid,\n category,\n // This will add the created component in the datamanager modifiedData components key\n // Like explained above we will be able to modify the created component structure\n isCreatingComponentFromAView\n );\n // Add the field to the schema\n addAttribute(modifiedData, forTarget, targetUid, false);\n\n dispatch({ type: RESET_PROPS });\n\n // Open modal attribute for adding attr to component\n if (shouldContinue) {\n onNavigateToChooseAttributeModal({ forTarget: 'components', targetUid: componentUid });\n } else {\n onCloseModal();\n }\n\n return;\n } else {\n // The modal is addComponentToDynamicZone\n if (isInFirstComponentStep) {\n if (isCreatingComponentFromAView) {\n const { category, type, ...rest } = modifiedData.componentToCreate;\n const componentUid = createComponentUid(\n modifiedData.componentToCreate.displayName,\n category\n );\n // Create the component first and add it to the components data\n createSchema(\n // Component data\n rest,\n // Type will always be component\n // It will dispatch the CREATE_COMPONENT_SCHEMA action\n // So the component will be added in the main components object\n // This might not be needed if we don't allow navigation between entries while editing\n type,\n componentUid,\n category,\n // This will add the created component in the datamanager modifiedData components key\n // Like explained above we will be able to modify the created component structure\n isCreatingComponentFromAView\n );\n // Add the created component to the DZ\n // We don't want to remove the old ones\n addCreatedComponentToDynamicZone(dynamicZoneTarget, [componentUid]);\n\n // The Dynamic Zone and the component is created\n // Open the modal to add fields to the created component\n onNavigateToChooseAttributeModal({ forTarget: 'components', targetUid: componentUid });\n } else {\n // Add the components to the DZ\n changeDynamicZoneComponents(dynamicZoneTarget, modifiedData.components);\n\n onCloseModal();\n }\n } else {\n console.error('This case is not handled');\n }\n\n return;\n }\n\n dispatch({\n type: RESET_PROPS,\n });\n } catch (err: any) {\n const errors = getYupInnerErrors(err);\n\n dispatch({\n type: SET_ERRORS,\n errors,\n });\n }\n };\n\n const handleConfirmClose = () => {\n // eslint-disable-next-line no-alert\n const confirm = window.confirm(\n formatMessage({\n id: 'window.confirm.close-modal.file',\n defaultMessage: 'Are you sure? Your changes will be lost.',\n })\n );\n\n if (confirm) {\n onCloseModal();\n\n dispatch({\n type: RESET_PROPS,\n });\n }\n };\n\n const handleClosed = () => {\n // Close the modal\n if (!isEqual(modifiedData, initialData)) {\n handleConfirmClose();\n } else {\n onCloseModal();\n // Reset the reducer\n dispatch({\n type: RESET_PROPS,\n });\n }\n };\n\n const sendAdvancedTabEvent = (tab: string) => {\n if (tab !== 'advanced') {\n return;\n }\n\n if (isCreatingContentType) {\n trackUsage('didSelectContentTypeSettings');\n\n return;\n }\n\n if (forTarget === 'contentType') {\n trackUsage('didSelectContentTypeFieldSettings');\n }\n };\n\n const sendButtonAddMoreFieldEvent = (shouldContinue: boolean) => {\n if (\n modalType === 'attribute' &&\n forTarget === 'contentType' &&\n attributeType !== 'dynamiczone' &&\n shouldContinue\n ) {\n trackUsage('willAddMoreFieldToContentType');\n }\n };\n\n const shouldDisableAdvancedTab = () => {\n if (modalType === 'editCategory') {\n return true;\n }\n\n if (modalType === 'component') {\n return true;\n }\n\n if (has(modifiedData, 'createComponent')) {\n return true;\n }\n\n return false;\n };\n\n // Display data for the attributes picker modal\n const displayedAttributes = getAttributesToDisplay(\n forTarget,\n targetUid,\n // We need the nested components so we know when to remove the component option\n nestedComponents\n );\n\n if (!modalType) {\n return null;\n }\n\n const formToDisplay = get(forms, [modalType, 'form'], {\n advanced: () => ({\n sections: [],\n }),\n base: () => ({\n sections: [],\n }),\n });\n\n const isAddingAComponentToAnotherComponent =\n forTarget === 'components' || forTarget === 'component';\n\n const genericInputProps = {\n customInputs: {\n 'allowed-types-select': AllowedTypesSelect,\n 'boolean-radio-group': BooleanRadioGroup,\n 'checkbox-with-number-field': CheckboxWithNumberField,\n 'icon-picker': IconPicker,\n 'content-type-radio-group': ContentTypeRadioGroup,\n 'radio-group': CustomRadioGroup,\n relation: Relation,\n 'select-category': SelectCategory,\n 'select-component': SelectComponent,\n 'select-components': SelectComponents,\n 'select-default-boolean': BooleanDefaultValueSelect,\n 'select-number': SelectNumber,\n 'select-date': SelectDateType,\n 'toggle-draft-publish': DraftAndPublishToggle,\n 'text-plural': PluralName,\n 'text-singular': SingularName,\n 'textarea-enum': TextareaEnum,\n ...inputsFromPlugins,\n },\n componentToCreate,\n dynamicZoneTarget,\n formErrors,\n isAddingAComponentToAnotherComponent,\n isCreatingComponentWhileAddingAField,\n mainBoxHeader: get(allDataSchema, [...pathToSchema, 'schema', 'displayName'], ''),\n modifiedData,\n naturePickerType: forTarget,\n isCreating,\n targetUid,\n forTarget,\n };\n\n const advancedForm = formToDisplay.advanced({\n data: modifiedData,\n type: attributeType,\n step,\n actionType,\n attributes,\n extensions: ctbFormsAPI,\n forTarget,\n contentTypeSchema: allDataSchema.contentType || {},\n customField,\n }).sections;\n const baseForm = formToDisplay.base({\n data: modifiedData,\n type: attributeType,\n step,\n actionType,\n attributes,\n extensions: ctbFormsAPI,\n forTarget,\n contentTypeSchema: allDataSchema.contentType || {},\n customField,\n }).sections;\n\n const baseFormInputNames = getFormInputNames(baseForm);\n\n const advancedFormInputNames = getFormInputNames(advancedForm);\n const doesBaseFormHasError = Object.keys(formErrors).some((key) =>\n baseFormInputNames.includes(key)\n );\n\n const doesAdvancedFormHasError = Object.keys(formErrors).some((key) =>\n advancedFormInputNames.includes(key)\n );\n\n const schemaKind = get(contentTypes, [targetUid, 'schema', 'kind']);\n\n const checkIsEditingFieldName = () =>\n actionType === 'edit' && attributes.every(({ name }) => name !== modifiedData?.name);\n\n const handleClickFinish = () => {\n if (checkIsEditingFieldName()) {\n trackUsage('didEditFieldNameOnContentType');\n }\n };\n\n return (\n <Modal.Root open={isOpen} onOpenChange={handleClosed}>\n <Modal.Content>\n <FormModalHeader\n actionType={actionType}\n attributeName={attributeName}\n categoryName={categoryName}\n contentTypeKind={kind as IconByType}\n dynamicZoneTarget={dynamicZoneTarget}\n modalType={modalType}\n forTarget={forTarget}\n targetUid={targetUid}\n attributeType={attributeType as IconByType}\n customFieldUid={customFieldUid}\n showBackLink={showBackLink}\n />\n {isPickingAttribute && (\n <AttributeOptions\n attributes={displayedAttributes}\n forTarget={forTarget}\n kind={schemaKind || 'collectionType'}\n />\n )}\n {!isPickingAttribute && (\n <FormComponent onSubmit={handleSubmit}>\n <Modal.Body>\n <Tabs.Root\n variant=\"simple\"\n value={activeTab}\n onValueChange={(value) => {\n setActiveTab(value);\n sendAdvancedTabEvent(value);\n }}\n hasError={\n doesBaseFormHasError ? 'basic' : doesAdvancedFormHasError ? 'advanced' : undefined\n }\n >\n <Flex justifyContent=\"space-between\">\n <FormModalSubHeader\n actionType={actionType}\n forTarget={forTarget}\n kind={kind}\n step={step}\n modalType={modalType}\n attributeType={attributeType}\n attributeName={attributeName}\n customField={customField}\n />\n <Tabs.List>\n <Tabs.Trigger value=\"basic\">\n {formatMessage({\n id: getTrad('popUpForm.navContainer.base'),\n defaultMessage: 'Basic settings',\n })}\n </Tabs.Trigger>\n <Tabs.Trigger value=\"advanced\" disabled={shouldDisableAdvancedTab()}>\n {formatMessage({\n id: getTrad('popUpForm.navContainer.advanced'),\n defaultMessage: 'Advanced settings',\n })}\n </Tabs.Trigger>\n </Tabs.List>\n </Flex>\n <Divider marginBottom={6} />\n <Tabs.Content value=\"basic\">\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <TabForm\n form={baseForm}\n formErrors={formErrors}\n genericInputProps={genericInputProps}\n modifiedData={modifiedData}\n onChange={handleChange}\n />\n </Flex>\n </Tabs.Content>\n <Tabs.Content value=\"advanced\">\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <TabForm\n form={advancedForm}\n formErrors={formErrors}\n genericInputProps={genericInputProps}\n modifiedData={modifiedData}\n onChange={handleChange}\n />\n </Flex>\n </Tabs.Content>\n </Tabs.Root>\n </Modal.Body>\n <Modal.Footer>\n <Button variant=\"tertiary\" onClick={handleClosed}>\n {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'Cancel' })}\n </Button>\n {/* TODO: refactor this component. Nuf said. */}\n <FormModalEndActions\n deleteCategory={deleteCategory}\n deleteContentType={deleteData}\n deleteComponent={deleteData}\n categoryName={initialData.name}\n isAttributeModal={modalType === 'attribute'}\n isCustomFieldModal={modalType === 'customField'}\n isComponentToDzModal={modalType === 'addComponentToDynamicZone'}\n isComponentAttribute={attributeType === 'component'}\n isComponentModal={modalType === 'component'}\n isContentTypeModal={modalType === 'contentType'}\n isCreatingComponent={actionType === 'create'}\n isCreatingDz={actionType === 'create'}\n isCreatingComponentAttribute={modifiedData.createComponent || false}\n isCreatingComponentInDz={modifiedData.createComponent || false}\n isCreatingComponentWhileAddingAField={isCreatingComponentWhileAddingAField}\n isCreatingContentType={actionType === 'create'}\n isEditingAttribute={actionType === 'edit'}\n isDzAttribute={attributeType === 'dynamiczone'}\n isEditingCategory={modalType === 'editCategory'}\n isInFirstComponentStep={step === '1'}\n onSubmitAddComponentAttribute={handleSubmit}\n onSubmitAddComponentToDz={handleSubmit}\n onSubmitCreateComponent={handleSubmit}\n onSubmitCreateContentType={handleSubmit}\n onSubmitCreateDz={handleSubmit}\n onSubmitEditAttribute={handleSubmit}\n onSubmitEditCategory={handleSubmit}\n onSubmitEditComponent={handleSubmit}\n onSubmitEditContentType={handleSubmit}\n onSubmitEditCustomFieldAttribute={handleSubmit}\n onSubmitEditDz={handleSubmit}\n onClickFinish={handleClickFinish}\n />\n </Modal.Footer>\n </FormComponent>\n )}\n </Modal.Content>\n </Modal.Root>\n );\n};\n","import { createSelector } from '@reduxjs/toolkit';\n\nimport { pluginId } from '../../pluginId';\n\nimport { initialState } from './reducer';\n\nimport type { DataManagerStateType } from '../../types';\n\n/**\n * Direct selector to the dataManagerProvider state domain\n */\nconst dataManagerProviderDomain = () => (state: DataManagerStateType) =>\n state[`${pluginId}_dataManagerProvider`] || initialState;\n\n/**\n * Other specific selectors\n */\n\n/**\n * Default selector used by dataManagerProvider\n */\n\nconst makeSelectDataManagerProvider = () =>\n createSelector(dataManagerProviderDomain(), (substate) => {\n return substate;\n });\n\nexport { makeSelectDataManagerProvider, dataManagerProviderDomain };\n","import camelCase from 'lodash/camelCase';\nimport get from 'lodash/get';\nimport isEqual from 'lodash/isEqual';\nimport omit from 'lodash/omit';\nimport sortBy from 'lodash/sortBy';\n\nimport { pluginId } from '../../../pluginId';\nimport { makeUnique } from '../../../utils/makeUnique';\n\nimport type { Components, Component, AttributeType, ContentTypes } from '../../../types';\nimport type { Internal } from '@strapi/types';\n\nconst getCreatedAndModifiedComponents = (\n allComponents: Components,\n initialComponents: Components\n) => {\n const componentUIDsToReturn = Object.keys(allComponents).filter((compoUid) => {\n const currentCompo = get(allComponents, compoUid, {});\n const initialCompo = get(initialComponents, compoUid, {});\n const hasComponentBeenCreated = get(currentCompo, ['isTemporary'], false);\n const hasComponentBeenModified = !isEqual(currentCompo, initialCompo);\n\n return hasComponentBeenCreated || hasComponentBeenModified;\n });\n\n return makeUnique(componentUIDsToReturn);\n};\n\nconst formatComponent = (\n component: Component | Record<string, any>,\n mainDataUID: Internal.UID.Schema\n) => {\n const formattedAttributes = formatAttributes(\n get(component, 'schema.attributes', []),\n mainDataUID\n );\n\n // Set tmpUID if the component has just been created\n // Keep the uid if the component already exists\n const compoUID = get(component, 'isTemporary', false)\n ? { tmpUID: component.uid }\n : { uid: component.uid };\n\n const formattedComponent = Object.assign(\n {},\n compoUID,\n { category: component.category },\n // Omit the attributes since we want to format them\n omit(component.schema, 'attributes'),\n // Add the formatted attributes\n { attributes: formattedAttributes }\n );\n\n return formattedComponent;\n};\n\nconst formatMainDataType = (data: any, isComponent = false) => {\n const mainDataUID = get(data, 'uid', null);\n\n const formattedAttributes = formatAttributes(get(data, 'schema.attributes', []), mainDataUID);\n const initObj = isComponent ? { category: get(data, 'category', '') } : {};\n\n const formattedContentType = Object.assign(initObj, omit(data.schema, 'attributes'), {\n attributes: formattedAttributes,\n });\n\n delete formattedContentType.uid;\n delete formattedContentType.isTemporary;\n delete formattedContentType.visible;\n delete formattedContentType.restrictRelationsTo;\n\n return formattedContentType;\n};\n\n/**\n *\n * @param {Object} attributes\n * @param {String} mainDataUID uid of the main data type\n */\nconst formatAttributes = (attributes: AttributeType[], mainDataUID: Internal.UID.Schema) => {\n return attributes.reduce((acc: Record<string, AttributeType>, { name, ...rest }) => {\n const currentAttribute = rest;\n const hasARelationWithMainDataUID = currentAttribute.target === mainDataUID;\n const isRelationType = currentAttribute.type === 'relation';\n const currentTargetAttribute = get(currentAttribute, 'targetAttribute', null);\n\n if (!hasARelationWithMainDataUID) {\n if (isRelationType) {\n const relationAttr = Object.assign({}, currentAttribute, {\n targetAttribute: formatRelationTargetAttribute(currentTargetAttribute),\n });\n\n acc[name as string] = removeNullKeys(relationAttr) as AttributeType;\n } else {\n acc[name as string] = removeNullKeys(currentAttribute) as AttributeType;\n }\n }\n\n if (hasARelationWithMainDataUID) {\n const target = currentAttribute.target;\n\n const formattedRelationAttribute = Object.assign({}, currentAttribute, {\n target,\n targetAttribute: formatRelationTargetAttribute(currentTargetAttribute),\n });\n\n acc[name as string] = removeNullKeys(formattedRelationAttribute) as AttributeType;\n }\n\n if (currentAttribute.customField) {\n const customFieldAttribute = { ...currentAttribute, type: 'customField' };\n acc[name as string] = removeNullKeys(customFieldAttribute) as AttributeType;\n }\n\n return acc;\n }, {});\n};\n\nconst formatRelationTargetAttribute = (targetAttribute: string | null) =>\n targetAttribute === '-' ? null : targetAttribute;\n\nconst removeNullKeys = (obj: Record<string, any>) =>\n Object.keys(obj).reduce((acc: Record<string, any>, current) => {\n if (obj[current] !== null && current !== 'plugin') {\n acc[current] = obj[current];\n }\n\n return acc;\n }, {});\n\nconst getComponentsToPost = (\n allComponents: Components,\n initialComponents: Components,\n mainDataUID: Internal.UID.Schema\n) => {\n const componentsToFormat = getCreatedAndModifiedComponents(allComponents, initialComponents);\n const formattedComponents = componentsToFormat.map((compoUID) => {\n const currentCompo = get(allComponents, compoUID, {});\n const formattedComponent = formatComponent(currentCompo, mainDataUID);\n\n return formattedComponent;\n });\n\n return formattedComponents;\n};\n\nconst sortContentType = (types: ContentTypes) =>\n sortBy(\n Object.keys(types)\n .map((uid) => ({\n visible: types[uid].schema.visible,\n name: uid,\n title: types[uid].schema.displayName,\n plugin: types[uid].plugin || null,\n uid,\n to: `/plugins/${pluginId}/content-types/${uid}`,\n kind: types[uid].schema.kind,\n restrictRelationsTo: types[uid].schema.restrictRelationsTo,\n }))\n .filter((obj) => obj !== null),\n (obj) => camelCase(obj.title)\n );\n\nexport {\n formatComponent,\n formatMainDataType,\n getComponentsToPost,\n getCreatedAndModifiedComponents,\n sortContentType,\n};\n","import { ContentType } from '../../../types';\n\nexport const createDataObject = (arr: ContentType[]) =>\n arr.reduce((acc: Record<string, ContentType>, current) => {\n acc[current.uid!] = current;\n\n return acc;\n }, {});\n","import get from 'lodash/get';\n\nimport type { ContentType, Components } from '../../../types';\nimport type { Internal } from '@strapi/types';\n\nexport const createModifiedDataSchema = (\n contentTypeSchema: ContentType,\n retrievedComponents: Internal.UID.Component[],\n allComponentsSchema: Components,\n isInContentTypeView: boolean\n) => {\n const componentsAssociatedToContentType = retrievedComponents.reduce((acc: any, current) => {\n const componentSchema = get(allComponentsSchema, current, {});\n\n acc[current] = componentSchema;\n\n return acc;\n }, {});\n const keyName = isInContentTypeView ? 'contentType' : 'component';\n const schema = {\n [keyName]: contentTypeSchema,\n components: componentsAssociatedToContentType,\n };\n\n return schema;\n};\n","import { AttributeType } from '../../../types';\n\n/**\n * Format the attributes to array instead of an object\n */\nexport const formatSchemas = (schemas: Record<string, any>) => {\n return Object.keys(schemas).reduce((acc: any, current) => {\n const schema = schemas[current].schema;\n\n acc[current] = {\n ...schemas[current],\n schema: { ...schema, attributes: toAttributesArray(schema.attributes) },\n };\n\n return acc;\n }, {});\n};\n\nexport const toAttributesArray = (attributes: Record<string, AttributeType>) => {\n return Object.keys(attributes).reduce((acc: AttributeType[], current: any) => {\n acc.push({ ...attributes[current], name: current });\n\n return acc;\n }, []);\n};\n","import get from 'lodash/get';\n\nimport type { Component, AttributeType, Components } from '../../../types';\nimport type { Internal } from '@strapi/types';\n\ntype ChildComponent = {\n component: Internal.UID.Component;\n};\n\nexport type ComponentWithChildren = {\n component: Internal.UID.Component;\n childComponents: ChildComponent[];\n};\n\nconst retrieveComponentsThatHaveComponents = (allComponents: Components) => {\n const componentsThatHaveNestedComponents = Object.keys(allComponents).reduce(\n (acc: ComponentWithChildren[], current) => {\n const currentComponent = get(allComponents, [current]);\n\n const compoWithChildren = getComponentWithChildComponents(currentComponent);\n if (compoWithChildren.childComponents.length > 0) {\n acc.push(compoWithChildren);\n }\n\n return acc;\n },\n []\n );\n\n return componentsThatHaveNestedComponents;\n};\n\nconst getComponentWithChildComponents = (component: Component): ComponentWithChildren => {\n const attributes = get(component, ['schema', 'attributes'], []) as AttributeType[];\n return {\n component: component.uid,\n childComponents: attributes\n .filter((attribute) => {\n const { type } = attribute;\n\n return type === 'component';\n })\n .map((attribute) => {\n return {\n component: attribute.component,\n } as ChildComponent;\n }),\n };\n};\n\nexport { getComponentWithChildComponents, retrieveComponentsThatHaveComponents };\n","import type { Components, AttributeType } from '../../../types';\nimport type { Internal } from '@strapi/types';\n\nexport type NestedComponent = {\n component: Internal.UID.Component;\n uidsOfAllParents?: Internal.UID.Component[];\n parentCompoUid?: Internal.UID.Component;\n};\n\nexport const retrieveNestedComponents = (appComponents: Components): NestedComponent[] => {\n const nestedComponents = Object.keys(appComponents).reduce((acc: NestedComponent[], current) => {\n const componentAttributes = appComponents?.[current]?.schema?.attributes ?? [];\n const currentComponentNestedCompos = getComponentsNestedWithinComponent(\n componentAttributes,\n current as Internal.UID.Component\n );\n return [...acc, ...currentComponentNestedCompos];\n }, []);\n\n return mergeComponents(nestedComponents);\n};\n\nconst getComponentsNestedWithinComponent = (\n componentAttributes: AttributeType[],\n parentCompoUid: Internal.UID.Component\n) => {\n return componentAttributes.reduce((acc: NestedComponent[], current) => {\n const { type, component } = current;\n if (type === 'component') {\n acc.push({\n component,\n parentCompoUid,\n });\n }\n\n return acc;\n }, []);\n};\n\n// Merge duplicate components\nconst mergeComponents = (originalComponents: NestedComponent[]): NestedComponent[] => {\n const componentMap = new Map();\n // Populate the map with component and its parents\n originalComponents.forEach(({ component, parentCompoUid }) => {\n if (!componentMap.has(component)) {\n componentMap.set(component, new Set());\n }\n componentMap.get(component).add(parentCompoUid);\n });\n\n // Convert the map to the desired array format\n const transformedComponents: NestedComponent[] = Array.from(componentMap.entries()).map(\n ([component, parentCompoUidSet]) => ({\n component,\n uidsOfAllParents: Array.from(parentCompoUidSet),\n })\n );\n\n return transformedComponents;\n};\n","import get from 'lodash/get';\n\nimport { makeUnique } from '../../../utils/makeUnique';\n\nexport const retrieveSpecificInfoFromComponents = (allComponents: any, keysToRetrieve: any) => {\n const allData = Object.keys(allComponents).map((compo) => {\n return get(allComponents, [compo, ...keysToRetrieve], '');\n });\n\n return makeUnique(allData);\n};\n","const SERVER_HAS_NOT_BEEN_KILLED_MESSAGE = 'did-not-kill-server';\nconst SERVER_HAS_BEEN_KILLED_MESSAGE = 'server is down';\n\n/**\n * Server restart watcher\n * Sends an HEAD method to check if the server has been shut down correctly\n * and then pings until it's back on\n */\nexport function serverRestartWatcher(response: any, didShutDownServer?: boolean) {\n return new Promise((resolve) => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n fetch(`${window.strapi.backendURL}/_health`, {\n method: 'HEAD',\n mode: 'no-cors',\n headers: {\n 'Content-Type': 'application/json',\n 'Keep-Alive': 'false',\n },\n })\n .then((res) => {\n if (res.status >= 400) {\n throw new Error(SERVER_HAS_BEEN_KILLED_MESSAGE);\n }\n\n if (!didShutDownServer) {\n throw new Error(SERVER_HAS_NOT_BEEN_KILLED_MESSAGE);\n }\n\n resolve(response);\n })\n .catch((err) => {\n setTimeout(() => {\n return serverRestartWatcher(\n response,\n err.message !== SERVER_HAS_NOT_BEEN_KILLED_MESSAGE\n ).then(resolve);\n }, 100);\n });\n });\n}\n","export const validateSchema = (schema: any) => {\n const dynamicZoneAttributes = Object.values(schema.attributes).filter(\n (attribute: any) => attribute.type === 'dynamiczone'\n );\n\n return dynamicZoneAttributes.every(\n (attribute: any) => Array.isArray(attribute.components) && attribute.components.length > 0\n );\n};\n","import { memo, useEffect, useMemo, useRef, ReactNode } from 'react';\n\nimport {\n Page,\n useGuidedTour,\n useTracking,\n useStrapiApp,\n useNotification,\n useAppInfo,\n useFetchClient,\n useAuth,\n} from '@strapi/admin/strapi-admin';\nimport get from 'lodash/get';\nimport groupBy from 'lodash/groupBy';\nimport set from 'lodash/set';\nimport size from 'lodash/size';\nimport { useIntl } from 'react-intl';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { Navigate, useLocation, useMatch } from 'react-router-dom';\n\nimport { DataManagerContext } from '../../contexts/DataManagerContext';\nimport { useFormModalNavigation } from '../../hooks/useFormModalNavigation';\nimport { pluginId } from '../../pluginId';\nimport { getTrad } from '../../utils/getTrad';\nimport { useAutoReloadOverlayBlocker } from '../AutoReloadOverlayBlocker';\nimport { FormModal } from '../FormModal/FormModal';\n\nimport {\n ADD_ATTRIBUTE,\n ADD_CREATED_COMPONENT_TO_DYNAMIC_ZONE,\n ADD_CUSTOM_FIELD_ATTRIBUTE,\n CHANGE_DYNAMIC_ZONE_COMPONENTS,\n CREATE_COMPONENT_SCHEMA,\n CREATE_SCHEMA,\n DELETE_NOT_SAVED_TYPE,\n EDIT_ATTRIBUTE,\n EDIT_CUSTOM_FIELD_ATTRIBUTE,\n GET_DATA_SUCCEEDED,\n RELOAD_PLUGIN,\n REMOVE_COMPONENT_FROM_DYNAMIC_ZONE,\n REMOVE_FIELD,\n REMOVE_FIELD_FROM_DISPLAYED_COMPONENT,\n SET_MODIFIED_DATA,\n UPDATE_SCHEMA,\n UPDATE_INITIAL_STATE,\n} from './constants';\nimport { makeSelectDataManagerProvider } from './selectors';\nimport { formatMainDataType, getComponentsToPost, sortContentType } from './utils/cleanData';\nimport { createDataObject } from './utils/createDataObject';\nimport { createModifiedDataSchema } from './utils/createModifiedDataSchema';\nimport { formatSchemas } from './utils/formatSchemas';\nimport { retrieveComponentsFromSchema } from './utils/retrieveComponentsFromSchema';\nimport { retrieveComponentsThatHaveComponents } from './utils/retrieveComponentsThatHaveComponents';\nimport { retrieveNestedComponents } from './utils/retrieveNestedComponents';\nimport { retrieveSpecificInfoFromComponents } from './utils/retrieveSpecificInfoFromComponents';\nimport { serverRestartWatcher } from './utils/serverRestartWatcher';\nimport { validateSchema } from './utils/validateSchema';\n\nimport type { ContentType, SchemaType, Components } from '../../types';\nimport type { Internal } from '@strapi/types';\n\ninterface DataManagerProviderProps {\n children: ReactNode;\n}\n\ninterface CustomFieldAttributeParams {\n attributeToSet: Record<string, any>;\n forTarget: SchemaType;\n targetUid: Internal.UID.Schema;\n initialAttribute: Record<string, any>;\n}\n\nconst DataManagerProvider = ({ children }: DataManagerProviderProps) => {\n const dispatch = useDispatch();\n const {\n components,\n contentTypes,\n isLoading,\n isLoadingForDataToBeSet,\n initialData,\n modifiedData,\n reservedNames,\n } = useSelector(makeSelectDataManagerProvider());\n const { toggleNotification } = useNotification();\n const { lockAppWithAutoreload, unlockAppWithAutoreload } = useAutoReloadOverlayBlocker();\n const { setCurrentStep, setStepState } = useGuidedTour('DataManagerProvider', (state) => state);\n\n const getPlugin = useStrapiApp('DataManagerProvider', (state) => state.getPlugin);\n\n const plugin = getPlugin(pluginId);\n const autoReload = useAppInfo('DataManagerProvider', (state) => state.autoReload);\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const refetchPermissions = useAuth('DataManagerProvider', (state) => state.refetchPermissions);\n const { pathname } = useLocation();\n const { onCloseModal } = useFormModalNavigation();\n const contentTypeMatch = useMatch(`/plugins/${pluginId}/content-types/:uid`);\n const componentMatch = useMatch(\n `/plugins/${pluginId}/component-categories/:categoryUid/:componentUid`\n );\n const fetchClient = useFetchClient();\n const { put, post, del } = fetchClient;\n\n const formatMessageRef = useRef<any>();\n formatMessageRef.current = formatMessage;\n const isInDevelopmentMode = autoReload;\n\n const isInContentTypeView = contentTypeMatch !== null;\n const firstKeyToMainSchema = isInContentTypeView ? 'contentType' : 'component';\n const currentUid = isInContentTypeView\n ? get(contentTypeMatch, 'params.uid', null)\n : get(componentMatch, 'params.componentUid', null);\n\n const getDataRef = useRef<any>();\n const endPoint = isInContentTypeView ? 'content-types' : 'components';\n\n getDataRef.current = async () => {\n try {\n const [\n {\n data: { data: componentsArray },\n },\n {\n data: { data: contentTypesArray },\n },\n { data: reservedNames },\n ] = await Promise.all(\n ['components', 'content-types', 'reserved-names'].map((endPoint) => {\n return fetchClient.get<{ data: any }>(`/${pluginId}/${endPoint}`);\n })\n );\n\n const components = createDataObject(componentsArray);\n const formattedComponents = formatSchemas(components);\n const contentTypes = createDataObject(contentTypesArray);\n const formattedContentTypes = formatSchemas(contentTypes);\n\n dispatch({\n type: GET_DATA_SUCCEEDED,\n components: formattedComponents,\n contentTypes: formattedContentTypes,\n reservedNames,\n });\n } catch (err) {\n console.error({ err });\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n useEffect(() => {\n getDataRef.current();\n\n return () => {\n // Reload the plugin so the cycle is new again\n dispatch({ type: RELOAD_PLUGIN });\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n // We need to set the modifiedData after the data has been retrieved\n // and also on pathname change\n if (!isLoading && currentUid) {\n setModifiedData();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isLoading, pathname, currentUid]);\n\n useEffect(() => {\n if (!autoReload) {\n toggleNotification({\n type: 'info',\n message: formatMessage({ id: getTrad('notification.info.autoreaload-disable') }),\n });\n }\n }, [autoReload, toggleNotification]);\n\n const addAttribute = (\n attributeToSet: Record<string, any>,\n forTarget: SchemaType,\n targetUid: Internal.UID.Schema,\n isEditing = false,\n initialAttribute?: Record<string, any>,\n shouldAddComponentToData = false\n ) => {\n const actionType = isEditing ? EDIT_ATTRIBUTE : ADD_ATTRIBUTE;\n\n dispatch({\n type: actionType,\n attributeToSet,\n forTarget,\n targetUid,\n initialAttribute,\n shouldAddComponentToData,\n });\n };\n\n const addCustomFieldAttribute = ({\n attributeToSet,\n forTarget,\n targetUid,\n initialAttribute,\n }: CustomFieldAttributeParams) => {\n dispatch({\n type: ADD_CUSTOM_FIELD_ATTRIBUTE,\n attributeToSet,\n forTarget,\n targetUid,\n initialAttribute,\n });\n };\n\n const editCustomFieldAttribute = ({\n attributeToSet,\n forTarget,\n targetUid,\n initialAttribute,\n }: CustomFieldAttributeParams) => {\n dispatch({\n type: EDIT_CUSTOM_FIELD_ATTRIBUTE,\n attributeToSet,\n forTarget,\n targetUid,\n initialAttribute,\n });\n };\n\n const addCreatedComponentToDynamicZone = (\n dynamicZoneTarget: string,\n componentsToAdd: string[]\n ) => {\n dispatch({\n type: ADD_CREATED_COMPONENT_TO_DYNAMIC_ZONE,\n dynamicZoneTarget,\n componentsToAdd,\n });\n };\n\n const createSchema = (\n data: Record<string, any>,\n schemaType: SchemaType,\n uid: Internal.UID.Schema,\n componentCategory?: string,\n shouldAddComponentToData = false\n ) => {\n const type = schemaType === 'contentType' ? CREATE_SCHEMA : CREATE_COMPONENT_SCHEMA;\n\n dispatch({\n type,\n data,\n componentCategory,\n schemaType,\n uid,\n shouldAddComponentToData,\n });\n };\n\n const changeDynamicZoneComponents = (dynamicZoneTarget: string, newComponents: string[]) => {\n dispatch({\n type: CHANGE_DYNAMIC_ZONE_COMPONENTS,\n dynamicZoneTarget,\n newComponents,\n });\n };\n\n const removeAttribute = (\n mainDataKey: string,\n attributeToRemoveName: string,\n componentUid = ''\n ) => {\n const type =\n mainDataKey === 'components' ? REMOVE_FIELD_FROM_DISPLAYED_COMPONENT : REMOVE_FIELD;\n\n if (mainDataKey === 'contentType') {\n trackUsage('willDeleteFieldOfContentType');\n }\n\n dispatch({\n type,\n mainDataKey,\n attributeToRemoveName,\n componentUid,\n });\n };\n\n const deleteCategory = async (categoryUid: string) => {\n try {\n const requestURL = `/${pluginId}/component-categories/${categoryUid}`;\n // eslint-disable-next-line no-alert\n const userConfirm = window.confirm(\n formatMessage({\n id: getTrad('popUpWarning.bodyMessage.category.delete'),\n })\n );\n // Close the modal\n onCloseModal();\n\n if (userConfirm) {\n lockAppWithAutoreload?.();\n\n await del(requestURL);\n\n // Make sure the server has restarted\n await serverRestartWatcher(true);\n\n // Unlock the app\n unlockAppWithAutoreload?.();\n\n await updatePermissions();\n }\n } catch (err) {\n console.error({ err });\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n } finally {\n unlockAppWithAutoreload?.();\n }\n };\n\n const deleteData = async () => {\n try {\n const requestURL = `/${pluginId}/${endPoint}/${currentUid}`;\n const isTemporary = get(modifiedData, [firstKeyToMainSchema, 'isTemporary'], false);\n // eslint-disable-next-line no-alert\n const userConfirm = window.confirm(\n formatMessage({\n id: getTrad(\n `popUpWarning.bodyMessage.${isInContentTypeView ? 'contentType' : 'component'}.delete`\n ),\n })\n );\n\n // Close the modal\n onCloseModal();\n\n if (userConfirm) {\n if (isTemporary) {\n // Delete the not saved type\n // Here we just need to reset the components to the initial ones and also the content types\n // Doing so will trigging a url change since the type doesn't exist in either the contentTypes or the components\n // so the modified and the initial data will also be reset in the useEffect...\n dispatch({ type: DELETE_NOT_SAVED_TYPE });\n\n return;\n }\n\n lockAppWithAutoreload?.();\n\n await del(requestURL);\n\n // Make sure the server has restarted\n await serverRestartWatcher(true);\n\n // Unlock the app\n await unlockAppWithAutoreload?.();\n\n // Refetch the permissions\n await updatePermissions();\n }\n } catch (err) {\n console.error({ err });\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n } finally {\n unlockAppWithAutoreload?.();\n }\n };\n\n const editCategory = async (categoryUid: string, body: any) => {\n try {\n const requestURL = `/${pluginId}/component-categories/${categoryUid}`;\n\n // Close the modal\n onCloseModal();\n\n // Lock the app\n lockAppWithAutoreload?.();\n\n // Update the category\n await put(requestURL, body);\n\n // Make sure the server has restarted\n await serverRestartWatcher(true);\n\n // Unlock the app\n await unlockAppWithAutoreload?.();\n\n await updatePermissions();\n } catch (err) {\n console.error({ err });\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n } finally {\n unlockAppWithAutoreload?.();\n }\n };\n\n const getAllComponentsThatHaveAComponentInTheirAttributes = () => {\n // We need to create an object with all the non modified compos\n // plus the ones that are created on the fly\n const allCompos = Object.assign({}, components, modifiedData.components);\n\n // Since we apply the modification of a specific component only in the modified data\n // we need to update all compos with the modifications\n if (!isInContentTypeView) {\n const currentEditedCompo = get(modifiedData, 'component', {});\n\n set(allCompos, get(currentEditedCompo, ['uid'], ''), currentEditedCompo);\n }\n\n const composWithCompos = retrieveComponentsThatHaveComponents(allCompos);\n\n return composWithCompos;\n };\n\n const getAllNestedComponents = () => {\n const appNestedCompo = retrieveNestedComponents(components);\n\n return appNestedCompo;\n };\n\n const removeComponentFromDynamicZone = (dzName: string, componentToRemoveIndex: number) => {\n dispatch({\n type: REMOVE_COMPONENT_FROM_DYNAMIC_ZONE,\n dzName,\n componentToRemoveIndex,\n });\n };\n\n const setModifiedData = () => {\n const currentSchemas = isInContentTypeView ? contentTypes : components;\n const schemaToSet = get(currentSchemas, currentUid ?? '', {\n schema: { attributes: [] },\n });\n\n const retrievedComponents = retrieveComponentsFromSchema(\n schemaToSet.schema.attributes,\n components\n );\n\n const newSchemaToSet = createModifiedDataSchema(\n schemaToSet,\n retrievedComponents,\n components,\n isInContentTypeView\n );\n\n const hasJustCreatedSchema =\n get(schemaToSet, 'isTemporary', false) &&\n size(get(schemaToSet, 'schema.attributes', [])) === 0;\n\n dispatch({\n type: SET_MODIFIED_DATA,\n schemaToSet: newSchemaToSet,\n hasJustCreatedSchema,\n });\n };\n\n const shouldRedirect = useMemo(() => {\n const dataSet = isInContentTypeView ? contentTypes : components;\n if (currentUid === 'create-content-type') {\n return false;\n }\n\n return !Object.keys(dataSet).includes(currentUid || '') && !isLoading;\n }, [components, contentTypes, currentUid, isInContentTypeView, isLoading]);\n\n const redirectEndpoint = useMemo(() => {\n const allowedEndpoints = Object.keys(contentTypes)\n .filter((uid) => get(contentTypes, [uid, 'schema', 'visible'], true))\n .sort();\n\n return get(allowedEndpoints, '0', 'create-content-type');\n }, [contentTypes]);\n\n if (shouldRedirect) {\n return <Navigate to={`/plugins/${pluginId}/content-types/${redirectEndpoint}`} />;\n }\n\n const submitData = async (additionalContentTypeData?: Record<string, any>) => {\n try {\n const isCreating = get(modifiedData, [firstKeyToMainSchema, 'isTemporary'], false);\n\n const body: {\n components: any[];\n contentType?: Record<string, any>;\n component?: any;\n } = {\n components: getComponentsToPost(\n modifiedData.components as Components,\n components as Components,\n currentUid as Internal.UID.Schema\n ),\n };\n\n if (isInContentTypeView) {\n const PluginForms = plugin?.apis?.forms as any;\n const contentType = PluginForms.mutateContentTypeSchema(\n {\n ...formatMainDataType(modifiedData.contentType),\n ...additionalContentTypeData,\n },\n initialData.contentType\n ) as ContentType;\n\n const isValidSchema = validateSchema(contentType);\n\n if (!isValidSchema) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: getTrad('notification.error.dynamiczone-min.validation'),\n defaultMessage:\n 'At least one component is required in a dynamic zone to be able to save a content type',\n }),\n });\n\n return;\n }\n\n body.contentType = contentType;\n\n trackUsage('willSaveContentType');\n } else {\n body.component = formatMainDataType(modifiedData.component, true);\n\n trackUsage('willSaveComponent');\n }\n\n // Lock the app\n lockAppWithAutoreload?.();\n\n const baseURL = `/${pluginId}/${endPoint}`;\n const requestURL = isCreating ? baseURL : `${baseURL}/${currentUid}`;\n\n if (isCreating) {\n await post(requestURL, body);\n } else {\n await put(requestURL, body);\n }\n\n if (\n isCreating &&\n (initialData.contentType?.schema.kind === 'collectionType' ||\n initialData.contentType?.schema.kind === 'singleType')\n ) {\n setStepState('contentTypeBuilder.success', true);\n trackUsage('didCreateGuidedTourCollectionType');\n setCurrentStep(null);\n }\n\n // Submit ct tracking success\n if (isInContentTypeView) {\n trackUsage('didSaveContentType');\n\n const oldName = get(body, ['contentType', 'schema', 'name'], '');\n const newName = get(initialData, ['contentType', 'schema', 'name'], '');\n\n if (!isCreating && oldName !== newName) {\n trackUsage('didEditNameOfContentType');\n }\n } else {\n trackUsage('didSaveComponent');\n }\n\n // Make sure the server has restarted\n await serverRestartWatcher(true);\n\n // Unlock the app\n unlockAppWithAutoreload?.();\n\n // refetch and update initial state after the data has been saved\n await getDataRef.current();\n dispatch({ type: UPDATE_INITIAL_STATE });\n\n // Update the app's permissions\n await updatePermissions();\n } catch (err: any) {\n if (!isInContentTypeView) {\n trackUsage('didNotSaveComponent');\n }\n\n console.error({ err: err.response });\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n } finally {\n unlockAppWithAutoreload?.();\n }\n };\n\n const updatePermissions = async () => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n await refetchPermissions();\n };\n\n const updateSchema = (\n data: Record<string, any>,\n schemaType: SchemaType,\n componentUID: Internal.UID.Schema\n ) => {\n dispatch({\n type: UPDATE_SCHEMA,\n data,\n schemaType,\n uid: componentUID,\n });\n };\n\n return (\n <DataManagerContext.Provider\n value={{\n addAttribute,\n addCustomFieldAttribute,\n addCreatedComponentToDynamicZone,\n allComponentsCategories: retrieveSpecificInfoFromComponents(components, ['category']),\n changeDynamicZoneComponents,\n components,\n componentsGroupedByCategory: groupBy(components, 'category') as Record<string, any[]>,\n componentsThatHaveOtherComponentInTheirAttributes:\n getAllComponentsThatHaveAComponentInTheirAttributes(),\n contentTypes,\n createSchema,\n deleteCategory,\n deleteData,\n editCategory,\n editCustomFieldAttribute,\n isInDevelopmentMode,\n initialData,\n isInContentTypeView,\n modifiedData,\n nestedComponents: getAllNestedComponents(),\n removeAttribute,\n removeComponentFromDynamicZone,\n reservedNames,\n setModifiedData,\n sortedContentTypesList: sortContentType(contentTypes),\n submitData,\n updateSchema,\n }}\n >\n {isLoadingForDataToBeSet ? (\n <Page.Loading />\n ) : (\n <>\n {children}\n {isInDevelopmentMode && <FormModal />}\n </>\n )}\n </DataManagerContext.Provider>\n );\n};\n\n// eslint-disable-next-line import/no-default-export\nexport default memo(DataManagerProvider);\n","const INITIAL_STATE_DATA = {\n actionType: null,\n attributeName: null,\n attributeType: null,\n categoryName: null,\n dynamicZoneTarget: null,\n forTarget: null,\n modalType: null,\n isOpen: false,\n showBackLink: false,\n kind: null,\n step: null,\n targetUid: null,\n customFieldUid: null,\n activeTab: 'basic',\n};\n\nexport { INITIAL_STATE_DATA };\n","import * as React from 'react';\n\nimport { useTracking } from '@strapi/admin/strapi-admin';\n\nimport { FormModalNavigationContext } from '../../contexts/FormModalNavigationContext';\n\nimport { INITIAL_STATE_DATA } from './constants';\n\ntype FormModalNavigationProviderProps = {\n children: React.ReactNode;\n};\n\nexport type State = any;\n\nexport type ModalEventProps = {\n attributeType?: string;\n customFieldUid?: string;\n dynamicZoneTarget?: string;\n forTarget?: string;\n targetUid?: string;\n attributeName?: string;\n step?: string | null;\n kind?: string;\n categoryName?: string;\n modalType?: string;\n actionType?: string;\n isOpen?: boolean;\n showBackLink?: boolean;\n};\n\nexport const FormModalNavigationProvider = ({ children }: FormModalNavigationProviderProps) => {\n const [state, setFormModalNavigationState] = React.useState(INITIAL_STATE_DATA);\n const { trackUsage } = useTracking();\n\n const onClickSelectCustomField = ({ attributeType, customFieldUid }: ModalEventProps) => {\n // TODO: Add tracking for custom fields\n setFormModalNavigationState((prevState: any) => {\n return {\n ...prevState,\n actionType: 'create',\n modalType: 'customField',\n attributeType,\n customFieldUid,\n activeTab: 'basic',\n };\n });\n };\n\n const onClickSelectField = ({ attributeType, step }: ModalEventProps) => {\n if (state.forTarget === 'contentType') {\n trackUsage('didSelectContentTypeFieldType', { type: attributeType });\n }\n\n setFormModalNavigationState((prevState: State) => {\n return {\n ...prevState,\n actionType: 'create',\n modalType: 'attribute',\n step,\n attributeType,\n showBackLink: true,\n activeTab: 'basic',\n };\n });\n };\n\n const onOpenModalAddComponentsToDZ = ({ dynamicZoneTarget, targetUid }: ModalEventProps) => {\n setFormModalNavigationState((prevState: State) => {\n return {\n ...prevState,\n dynamicZoneTarget,\n targetUid,\n modalType: 'addComponentToDynamicZone',\n forTarget: 'contentType',\n step: '1',\n actionType: 'edit',\n isOpen: true,\n };\n });\n };\n\n const onOpenModalAddField = ({ forTarget, targetUid }: ModalEventProps) => {\n setFormModalNavigationState((prevState: State) => {\n return {\n ...prevState,\n actionType: 'create',\n forTarget,\n targetUid,\n modalType: 'chooseAttribute',\n isOpen: true,\n showBackLink: false,\n activeTab: 'basic',\n };\n });\n };\n\n const onOpenModalCreateSchema = (nextState: State) => {\n setFormModalNavigationState((prevState) => {\n return { ...prevState, ...nextState, isOpen: true, activeTab: 'basic' };\n });\n };\n\n const onOpenModalEditCategory = (categoryName: string) => {\n setFormModalNavigationState((prevState: State) => {\n return {\n ...prevState,\n categoryName,\n actionType: 'edit',\n modalType: 'editCategory',\n isOpen: true,\n activeTab: 'basic',\n };\n });\n };\n\n const onOpenModalEditCustomField = ({\n forTarget,\n targetUid,\n attributeName,\n attributeType,\n customFieldUid,\n }: ModalEventProps) => {\n setFormModalNavigationState((prevState: State) => {\n return {\n ...prevState,\n modalType: 'customField',\n customFieldUid,\n actionType: 'edit',\n forTarget,\n targetUid,\n attributeName,\n attributeType,\n isOpen: true,\n activeTab: 'basic',\n };\n });\n };\n\n const onOpenModalEditField = ({\n forTarget,\n targetUid,\n attributeName,\n attributeType,\n step,\n }: ModalEventProps) => {\n setFormModalNavigationState((prevState: State) => {\n return {\n ...prevState,\n modalType: 'attribute',\n actionType: 'edit',\n forTarget,\n targetUid,\n attributeName,\n attributeType,\n step,\n isOpen: true,\n };\n });\n };\n\n const onOpenModalEditSchema = ({ modalType, forTarget, targetUid, kind }: ModalEventProps) => {\n setFormModalNavigationState((prevState: State) => {\n return {\n ...prevState,\n modalType,\n actionType: 'edit',\n forTarget,\n targetUid,\n kind,\n isOpen: true,\n activeTab: 'basic',\n };\n });\n };\n\n const onCloseModal = () => {\n setFormModalNavigationState(INITIAL_STATE_DATA);\n };\n\n const onNavigateToChooseAttributeModal = ({ forTarget, targetUid }: ModalEventProps) => {\n setFormModalNavigationState((prev: State) => {\n return {\n ...prev,\n forTarget,\n targetUid,\n modalType: 'chooseAttribute',\n activeTab: 'basic',\n };\n });\n };\n\n const onNavigateToCreateComponentStep2 = () => {\n setFormModalNavigationState((prev: State) => {\n return {\n ...prev,\n attributeType: 'component',\n modalType: 'attribute',\n step: '2',\n activeTab: 'basic',\n };\n });\n };\n\n const onNavigateToAddCompoToDZModal = ({ dynamicZoneTarget }: ModalEventProps) => {\n setFormModalNavigationState((prev: State) => {\n return {\n ...prev,\n dynamicZoneTarget,\n modalType: 'addComponentToDynamicZone',\n actionType: 'create',\n step: '1',\n attributeType: null,\n attributeName: null,\n activeTab: 'basic',\n };\n });\n };\n\n const setActiveTab = (value: string) => {\n setFormModalNavigationState((prev: State) => {\n return {\n ...prev,\n activeTab: value,\n };\n });\n };\n\n return (\n <FormModalNavigationContext.Provider\n value={\n {\n ...state,\n onClickSelectField,\n onClickSelectCustomField,\n onCloseModal,\n onNavigateToChooseAttributeModal,\n onNavigateToAddCompoToDZModal,\n onOpenModalAddComponentsToDZ,\n onNavigateToCreateComponentStep2,\n onOpenModalAddField,\n onOpenModalCreateSchema,\n onOpenModalEditCategory,\n onOpenModalEditField,\n onOpenModalEditCustomField,\n onOpenModalEditSchema,\n setFormModalNavigationState,\n setActiveTab,\n } as any\n }\n >\n {children}\n </FormModalNavigationContext.Provider>\n );\n};\n","import { lazy, Suspense } from 'react';\n\nimport { Page } from '@strapi/admin/strapi-admin';\nimport { Route, Routes } from 'react-router-dom';\n\nconst ListView = lazy(() => import('../ListView/ListView'));\n\nexport const RecursivePath = () => {\n return (\n <Suspense fallback={<Page.Loading />}>\n <Routes>\n <Route path={`/:componentUid`} element={<ListView />} />\n </Routes>\n </Suspense>\n );\n};\n","/* eslint-disable import/no-default-export */\n/* eslint-disable check-file/filename-naming-convention */\n/* eslint-disable check-file/no-index */\nimport { lazy, Suspense, useEffect, useRef } from 'react';\n\nimport { Page, useGuidedTour, Layouts } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\nimport { Route, Routes } from 'react-router-dom';\n\nimport { AutoReloadOverlayBlockerProvider } from '../../components/AutoReloadOverlayBlocker';\nimport { ContentTypeBuilderNav } from '../../components/ContentTypeBuilderNav/ContentTypeBuilderNav';\nimport DataManagerProvider from '../../components/DataManagerProvider/DataManagerProvider';\nimport { FormModalNavigationProvider } from '../../components/FormModalNavigationProvider/FormModalNavigationProvider';\nimport { PERMISSIONS } from '../../constants';\nimport { pluginId } from '../../pluginId';\nimport { RecursivePath } from '../RecursivePath/RecursivePath';\n\nconst ListView = lazy(() => import('../ListView/ListView'));\n\nconst App = () => {\n const { formatMessage } = useIntl();\n const title = formatMessage({\n id: `${pluginId}.plugin.name`,\n defaultMessage: 'Content Types Builder',\n });\n const startSection = useGuidedTour('App', (state) => state.startSection);\n const startSectionRef = useRef(startSection);\n\n useEffect(() => {\n if (startSectionRef.current) {\n startSectionRef.current('contentTypeBuilder');\n }\n }, []);\n\n // FIXME Error here\n return (\n <Page.Protect permissions={PERMISSIONS.main}>\n <Page.Title>{title}</Page.Title>\n <AutoReloadOverlayBlockerProvider>\n <FormModalNavigationProvider>\n {/* eslint-disable-next-line @typescript-eslint/ban-ts-comment */}\n {/* @ts-ignore */}\n <DataManagerProvider>\n <Layouts.Root sideNav={<ContentTypeBuilderNav />}>\n <Suspense fallback={<Page.Loading />}>\n <Routes>\n <Route path=\"content-types/:uid\" element={<ListView />} />\n <Route path={`component-categories/:categoryUid/*`} element={<RecursivePath />} />\n </Routes>\n </Suspense>\n </Layouts.Root>\n </DataManagerProvider>\n </FormModalNavigationProvider>\n </AutoReloadOverlayBlockerProvider>\n </Page.Protect>\n );\n};\n\nexport default App;\n"],"names":["pluginId","createContext","useContext","React","useNotification","useIntl","useTracking","useState","useFilter","useCollator","isEqual","components","data","filteredLinks","link","styled","SubNavLink","jsxs","SubNav","jsx","SubNavHeader","SubNavSections","Fragment","SubNavSection","SubNavLinkSection","upperFirst","NavLink","Box","TextButton","Plus","Field","MultiSelectNested","NumberField","BlocksField","BooleanField","CollectionType","ComponentField","DateField","DynamicZoneField","EmailField","EnumerationField","MediaField","JsonField","PasswordField","RelationField","MarkdownField","SingleType","TextField","UidField","useStrapiApp","Flex","Sparkle","Typography","KeyboardNavigable","index","Grid","EmptyDocuments","LinkButton","Link","qs","Modal","Tabs","Divider","options","value","SingleSelect","intlLabel","SingleSelectOption","Wrapper","inputFocusStyle","Checkbox","TextInput","NumberInput","Dialog","ConfirmDialog","Button","ArrowLeft","Breadcrumbs","Crumb","Icons","Symbols","VisuallyHidden","useRef","useEffect","Searchbar","IconButton","Search","Tooltip","Trash","nameToSlug","pluralize","attribute","error","JSONInput","Toggle","DateTimePicker","DatePicker","formatISO","Eye","EyeStriked","disabled","Textarea","TimePicker","useDispatch","plugin","ON_CHANGE_RELATION_TARGET","Menu","GenericInput","OneWay","OneToOne","OneToMany","ManyToOne","ManyToMany","ManyWay","get","ON_CHANGE_RELATION_TYPE","truncate","getRelationType","Combobox","ComboboxOption","MAX_COMPONENT_DEPTH","key","nameField","slugify","errorsTrads","snakeCase","yup","toNumber","uniq","values","createComponentUid","createUid","baseForm","initialState","createSelector","acc","current","useSelector","shallowEqual","useNavigate","SET_DATA_TO_EDIT","kind","SET_DYNAMIC_ZONE_DATA_SCHEMA","set","SET_CUSTOM_FIELD_DATA_SCHEMA","SET_ATTRIBUTE_DATA_SCHEMA","RESET_PROPS","SET_ERRORS","ON_CHANGE","toLower","RESET_PROPS_AND_SET_THE_FORM_FOR_ADDING_A_COMPO_TO_A_DZ","RESET_PROPS_AND_SET_FORM_FOR_ADDING_AN_EXISTING_COMPO","RESET_PROPS_AND_SAVE_CURRENT_DATA","has","advancedForm","makeUnique","omit","sortBy","camelCase","useAutoReloadOverlayBlocker","useGuidedTour","useAppInfo","useAuth","useLocation","useMatch","useFetchClient","reservedNames","endPoint","contentTypes","GET_DATA_SUCCEEDED","RELOAD_PLUGIN","EDIT_ATTRIBUTE","ADD_ATTRIBUTE","ADD_CUSTOM_FIELD_ATTRIBUTE","EDIT_CUSTOM_FIELD_ATTRIBUTE","ADD_CREATED_COMPONENT_TO_DYNAMIC_ZONE","CREATE_SCHEMA","CREATE_COMPONENT_SCHEMA","CHANGE_DYNAMIC_ZONE_COMPONENTS","REMOVE_FIELD_FROM_DISPLAYED_COMPONENT","REMOVE_FIELD","DELETE_NOT_SAVED_TYPE","REMOVE_COMPONENT_FROM_DYNAMIC_ZONE","retrieveComponentsFromSchema","size","SET_MODIFIED_DATA","useMemo","Navigate","UPDATE_INITIAL_STATE","UPDATE_SCHEMA","groupBy","Page","memo","ListView","lazy","Suspense","Routes","Route","PERMISSIONS","AutoReloadOverlayBlockerProvider","DataManagerProvider","Layouts"],"mappings":"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"}
|