@strapi/content-type-builder 5.0.0-beta.6 → 5.0.0-beta.8

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.
Files changed (30) hide show
  1. package/dist/_chunks/{ListView-C-9-V_FI.mjs → ListView-CyNHQ-YV.mjs} +20 -23
  2. package/dist/_chunks/ListView-CyNHQ-YV.mjs.map +1 -0
  3. package/dist/_chunks/{ListView-BG19KtnI.js → ListView-j9TFQZBa.js} +32 -36
  4. package/dist/_chunks/ListView-j9TFQZBa.js.map +1 -0
  5. package/dist/_chunks/{index-CBlX4byY.mjs → index-1y0vXVON.mjs} +17 -18
  6. package/dist/_chunks/index-1y0vXVON.mjs.map +1 -0
  7. package/dist/_chunks/{index-ClkMXXk0.js → index-BHhTJaW2.js} +420 -562
  8. package/dist/_chunks/index-BHhTJaW2.js.map +1 -0
  9. package/dist/_chunks/{index-BfUcwV-B.js → index-BwQpCent.js} +17 -18
  10. package/dist/_chunks/index-BwQpCent.js.map +1 -0
  11. package/dist/_chunks/{index-BtxPpV-M.mjs → index-DnkyThcz.mjs} +408 -549
  12. package/dist/_chunks/index-DnkyThcz.mjs.map +1 -0
  13. package/dist/admin/index.js +2 -1
  14. package/dist/admin/index.js.map +1 -1
  15. package/dist/admin/index.mjs +2 -1
  16. package/dist/admin/index.mjs.map +1 -1
  17. package/dist/admin/src/components/AttributeOptions/OptionBoxWrapper.d.ts +4 -1
  18. package/dist/admin/src/components/BoxWrapper.d.ts +4 -1
  19. package/dist/admin/src/components/CustomRadioGroup/Styles.d.ts +4 -1
  20. package/dist/admin/src/components/ListRow.d.ts +3 -1
  21. package/dist/admin/src/components/Relation/RelationNaturePicker/Components.d.ts +12 -46
  22. package/dist/admin/src/components/Tr.d.ts +5 -6
  23. package/package.json +14 -14
  24. package/dist/_chunks/ListView-BG19KtnI.js.map +0 -1
  25. package/dist/_chunks/ListView-C-9-V_FI.mjs.map +0 -1
  26. package/dist/_chunks/index-BfUcwV-B.js.map +0 -1
  27. package/dist/_chunks/index-BtxPpV-M.mjs.map +0 -1
  28. package/dist/_chunks/index-CBlX4byY.mjs.map +0 -1
  29. package/dist/_chunks/index-ClkMXXk0.js.map +0 -1
  30. package/dist/admin/src/components/PluginIcon.d.ts +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListView-j9TFQZBa.js","sources":["../../admin/src/components/BoxWrapper.tsx","../../admin/src/components/Tr.tsx","../../admin/src/components/ComponentList.tsx","../../admin/src/components/ComponentCard/ComponentIcon/ComponentIcon.tsx","../../admin/src/components/ComponentCard/ComponentCard.tsx","../../admin/src/components/DynamicZoneList.tsx","../../admin/src/components/NestedFooter.tsx","../../admin/src/components/List.tsx","../../admin/src/icons/Curve.tsx","../../admin/src/components/DisplayedType.tsx","../../admin/src/components/UpperFirst.tsx","../../admin/src/components/ListRow.tsx","../../admin/src/utils/getAttributeDisplayedType.ts","../../admin/src/pages/ListView/LinkToCMSettingsView.tsx","../../admin/src/pages/ListView/ListView.tsx"],"sourcesContent":["import { Box } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nexport const BoxWrapper = styled(Box)`\n table {\n width: 100%;\n white-space: nowrap;\n }\n\n thead {\n border-bottom: 1px solid ${({ theme }) => theme.colors.neutral150};\n\n tr {\n border-top: 0;\n }\n }\n\n tr {\n border-top: 1px solid ${({ theme }) => theme.colors.neutral150};\n\n & td,\n & th {\n padding: ${({ theme }) => theme.spaces[4]};\n }\n\n & td:first-of-type,\n & th:first-of-type {\n padding: 0 ${({ theme }) => theme.spaces[1]};\n }\n }\n\n th,\n td {\n vertical-align: middle;\n text-align: left;\n color: ${({ theme }) => theme.colors.neutral600};\n outline-offset: -4px;\n }\n`;\n","import { styled } from 'styled-components';\n\n// Keep component-row for css specificity\nexport const Tr = styled.tr<{\n $isFromDynamicZone?: boolean;\n $isChildOfDynamicZone?: boolean;\n}>`\n &.component-row,\n &.dynamiczone-row {\n position: relative;\n border-top: none !important;\n\n table tr:first-child {\n border-top: none;\n }\n\n > td:first-of-type {\n padding: 0 0 0 2rem;\n position: relative;\n\n &::before {\n content: '';\n width: 0.4rem;\n height: calc(100% - 40px);\n position: absolute;\n top: -7px;\n left: 2.6rem;\n border-radius: 4px;\n\n ${({ $isFromDynamicZone, $isChildOfDynamicZone, theme }) => {\n if ($isChildOfDynamicZone) {\n return `background-color: ${theme.colors.primary200};`;\n }\n\n if ($isFromDynamicZone) {\n return `background-color: ${theme.colors.primary200};`;\n }\n\n return `background: ${theme.colors.neutral150};`;\n }}\n }\n }\n }\n\n &.dynamiczone-row > td:first-of-type {\n padding: 0;\n }\n`;\n","import get from 'lodash/get';\n\nimport { useDataManager } from '../hooks/useDataManager';\n\nimport { List } from './List';\nimport { Tr } from './Tr';\n\nimport type { Internal } from '@strapi/types';\n\ninterface ComponentListProps {\n component: Internal.UID.Component;\n customRowComponent: any;\n firstLoopComponentUid?: string;\n isFromDynamicZone?: boolean;\n isNestedInDZComponent?: boolean;\n}\n\nexport const ComponentList = ({\n customRowComponent,\n component,\n isFromDynamicZone = false,\n isNestedInDZComponent = false,\n firstLoopComponentUid,\n}: ComponentListProps) => {\n const { modifiedData } = useDataManager();\n const {\n schema: { attributes },\n } = get(modifiedData, ['components', component], {\n schema: { attributes: [] },\n });\n\n return (\n <Tr $isChildOfDynamicZone={isFromDynamicZone} className=\"component-row\">\n <td colSpan={12}>\n <List\n customRowComponent={customRowComponent}\n items={attributes}\n targetUid={component}\n firstLoopComponentUid={firstLoopComponentUid || component}\n editTarget=\"components\"\n isFromDynamicZone={isFromDynamicZone}\n isNestedInDZComponent={isNestedInDZComponent}\n isSub\n secondLoopComponentUid={firstLoopComponentUid ? component : null}\n />\n </td>\n </Tr>\n );\n};\n","import { Flex } from '@strapi/design-system';\n\nimport { COMPONENT_ICONS } from '../../IconPicker/constants';\n\ninterface ComponentIconProps {\n isActive?: boolean;\n icon?: keyof typeof COMPONENT_ICONS;\n}\n\nexport const ComponentIcon = ({ isActive = false, icon = 'dashboard' }: ComponentIconProps) => {\n const Icon = COMPONENT_ICONS[icon] || COMPONENT_ICONS.dashboard;\n\n return (\n <Flex\n alignItems=\"center\"\n background={isActive ? 'primary200' : 'neutral200'}\n justifyContent=\"center\"\n height={8}\n width={8}\n borderRadius=\"50%\"\n >\n <Icon height=\"2rem\" width=\"2rem\" />\n </Flex>\n );\n};\n","import { Box, Flex, Typography } from '@strapi/design-system';\nimport { Cross } from '@strapi/icons';\nimport get from 'lodash/get';\nimport { styled } from 'styled-components';\n\nimport { useDataManager } from '../../hooks/useDataManager';\n\nimport { ComponentIcon } from './ComponentIcon';\n\ninterface ComponentCardProps {\n component: string;\n dzName: string;\n index: number;\n isActive?: boolean;\n isInDevelopmentMode?: boolean;\n onClick?: () => void;\n}\n\nconst CloseButton = styled(Box)`\n position: absolute;\n display: none;\n top: 5px;\n right: 0.8rem;\n\n svg {\n width: 1rem;\n height: 1rem;\n\n path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n }\n`;\n\nconst ComponentBox = styled(Flex)`\n width: 14rem;\n height: 8rem;\n position: relative;\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n background: ${({ theme }) => theme.colors.neutral100};\n border-radius: ${({ theme }) => theme.borderRadius};\n max-width: 100%;\n\n &.active,\n &:focus,\n &:hover {\n border: 1px solid ${({ theme }) => theme.colors.primary200};\n background: ${({ theme }) => theme.colors.primary100};\n color: ${({ theme }) => theme.colors.primary600};\n\n ${CloseButton} {\n display: block;\n }\n\n /* > ComponentIcon */\n > div:first-child {\n background: ${({ theme }) => theme.colors.primary200};\n color: ${({ theme }) => theme.colors.primary600};\n\n svg {\n path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n }\n }\n }\n`;\n\nexport const ComponentCard = ({\n component,\n dzName,\n index,\n isActive = false,\n isInDevelopmentMode = false,\n onClick,\n}: ComponentCardProps) => {\n const { modifiedData, removeComponentFromDynamicZone } = useDataManager();\n const {\n schema: { icon, displayName },\n } = get(modifiedData, ['components', component], { schema: {} });\n\n const onClose = (e: any) => {\n e.stopPropagation();\n removeComponentFromDynamicZone(dzName, index);\n };\n\n return (\n <ComponentBox\n alignItems=\"center\"\n direction=\"column\"\n className={isActive ? 'active' : ''}\n borderRadius=\"borderRadius\"\n justifyContent=\"center\"\n paddingLeft={4}\n paddingRight={4}\n shrink={0}\n onClick={onClick}\n role=\"tab\"\n tabIndex={isActive ? 0 : -1}\n cursor=\"pointer\"\n aria-selected={isActive}\n aria-controls={`dz-${dzName}-panel-${index}`}\n id={`dz-${dzName}-tab-${index}`}\n >\n <ComponentIcon icon={icon} isActive={isActive} />\n\n <Box marginTop={1} maxWidth=\"100%\">\n <Typography variant=\"pi\" fontWeight=\"bold\" ellipsis>\n {displayName}\n </Typography>\n </Box>\n\n {isInDevelopmentMode && (\n <CloseButton tag=\"button\" onClick={onClose}>\n <Cross />\n </CloseButton>\n )}\n </ComponentBox>\n );\n};\n","import { useState } from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useDataManager } from '../hooks/useDataManager';\nimport { getTrad } from '../utils/getTrad';\n\nimport { ComponentCard } from './ComponentCard';\nimport { ComponentList } from './ComponentList';\nimport { Tr } from './Tr';\n\nimport type { Internal } from '@strapi/types';\n\ninterface DynamicZoneListProps {\n addComponent: (name?: string) => void;\n components: Array<string>;\n customRowComponent?: () => void;\n name?: string;\n targetUid: Internal.UID.Component;\n}\n\nconst StyledAddIcon = styled(Plus)`\n width: 3.2rem;\n height: 3.2rem;\n padding: 0.9rem;\n border-radius: 6.4rem;\n background: ${({ theme }) => theme.colors.primary100};\n path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n`;\n\nconst FixedBox = styled(Box)`\n height: 9rem;\n position: absolute;\n width: 100%;\n top: 0;\n left: 0;\n`;\n\nconst ScrollableStack = styled(Flex)`\n width: 100%;\n overflow-x: auto;\n`;\n\nconst ComponentContentBox = styled(Box)`\n padding-top: 9rem;\n`;\n\nconst ComponentStack = styled(Flex)`\n flex-shrink: 0;\n width: 14rem;\n height: 8rem;\n justify-content: center;\n align-items: center;\n`;\n\nexport const DynamicZoneList = ({\n customRowComponent,\n components = [],\n addComponent,\n name,\n targetUid,\n}: DynamicZoneListProps) => {\n const { isInDevelopmentMode } = useDataManager();\n const [activeTab, setActiveTab] = useState(0);\n const { formatMessage } = useIntl();\n\n const toggle = (tab: number) => {\n if (activeTab !== tab) {\n setActiveTab(tab);\n }\n };\n\n const handleClickAdd = () => {\n addComponent(name);\n };\n\n return (\n <Tr className=\"dynamiczone-row\" $isFromDynamicZone>\n <td colSpan={12}>\n <FixedBox paddingLeft={8}>\n <ScrollableStack gap={2}>\n {isInDevelopmentMode && (\n <button type=\"button\" onClick={handleClickAdd}>\n <ComponentStack direction=\"column\" alignItems=\"stretch\" gap={1}>\n <StyledAddIcon />\n <Typography variant=\"pi\" fontWeight=\"bold\" textColor=\"primary600\">\n {formatMessage({\n id: getTrad('button.component.add'),\n defaultMessage: 'Add a component',\n })}\n </Typography>\n </ComponentStack>\n </button>\n )}\n <Flex role=\"tablist\" gap={2}>\n {components.map((component, index) => {\n return (\n <ComponentCard\n key={component}\n dzName={name || ''}\n index={index}\n component={component}\n isActive={activeTab === index}\n isInDevelopmentMode={isInDevelopmentMode}\n onClick={() => toggle(index)}\n />\n );\n })}\n </Flex>\n </ScrollableStack>\n </FixedBox>\n <ComponentContentBox>\n {components.map((component, index) => {\n const props = {\n customRowComponent,\n component,\n };\n\n return (\n <Box\n id={`dz-${name}-panel-${index}`}\n role=\"tabpanel\"\n aria-labelledby={`dz-${name}-tab-${index}`}\n key={component}\n style={{ display: activeTab === index ? 'block' : 'none' }}\n >\n <table>\n <tbody>\n <ComponentList\n {...props}\n isFromDynamicZone\n component={targetUid}\n key={component}\n />\n </tbody>\n </table>\n </Box>\n );\n })}\n </ComponentContentBox>\n </td>\n </Tr>\n );\n};\n","import type { ReactNode } from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nconst IconBox = styled(Box)`\n height: 2.4rem;\n width: 2.4rem;\n border-radius: 50%;\n display: flex;\n justify-content: center;\n align-items: center;\n\n svg {\n height: 1rem;\n width: 1rem;\n }\n\n svg path {\n fill: ${({ theme, color }) => theme.colors[`${color}600`]};\n }\n`;\n\nconst ButtonBox = styled(Box)`\n border-radius: 0 0 ${({ theme }) => theme.borderRadius} ${({ theme }) => theme.borderRadius};\n display: block;\n width: 100%;\n border: none;\n position: relative;\n left: -0.4rem;\n`;\n\ninterface NestedTFooterProps {\n color: string;\n children: ReactNode;\n icon: ReactNode;\n onClick?: () => void;\n}\n\nexport const NestedTFooter = ({ children, icon, color, ...props }: NestedTFooterProps) => {\n return (\n <ButtonBox paddingBottom={4} paddingTop={4} tag=\"button\" type=\"button\" {...props}>\n <Flex>\n <IconBox color={color} aria-hidden background={`${color}200`}>\n {icon}\n </IconBox>\n <Box paddingLeft={3}>\n <Typography variant=\"pi\" fontWeight=\"bold\" textColor={`${color}600`}>\n {children}\n </Typography>\n </Box>\n </Flex>\n </ButtonBox>\n );\n};\n","import { ComponentType, Fragment } from 'react';\n\nimport { useTracking } from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Button,\n EmptyStateLayout,\n Table,\n Tbody,\n Td,\n TFooter,\n Th,\n Thead,\n Tr,\n Typography,\n} from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { useIntl } from 'react-intl';\n\nimport { useDataManager } from '../hooks/useDataManager';\nimport { useFormModalNavigation } from '../hooks/useFormModalNavigation';\nimport { getTrad } from '../utils/getTrad';\n\nimport { BoxWrapper } from './BoxWrapper';\nimport { ComponentList } from './ComponentList';\nimport { DynamicZoneList } from './DynamicZoneList';\nimport { NestedTFooter } from './NestedFooter';\n\nimport type { SchemaType } from '../types';\nimport type { Internal } from '@strapi/types';\n\ninterface ListProps {\n addComponentToDZ?: () => void;\n customRowComponent: ComponentType<any>;\n editTarget: SchemaType;\n firstLoopComponentUid?: string;\n isFromDynamicZone?: boolean;\n isNestedInDZComponent?: boolean;\n isMain?: boolean;\n items: any[];\n secondLoopComponentUid?: string | null;\n targetUid?: Internal.UID.Schema;\n isSub?: boolean;\n}\n\nexport const List = ({\n addComponentToDZ,\n customRowComponent,\n editTarget,\n firstLoopComponentUid,\n isFromDynamicZone = false,\n isMain = false,\n isNestedInDZComponent = false,\n isSub = false,\n items = [],\n secondLoopComponentUid,\n targetUid,\n}: ListProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { isInDevelopmentMode, modifiedData, isInContentTypeView } = useDataManager();\n\n const { onOpenModalAddField } = useFormModalNavigation();\n const onClickAddField = () => {\n trackUsage('hasClickedCTBAddFieldBanner');\n\n onOpenModalAddField({ forTarget: editTarget, targetUid });\n };\n\n if (!targetUid) {\n return (\n <Table colCount={2} rowCount={2}>\n <Thead>\n <Tr>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({ id: 'global.name', defaultMessage: 'Name' })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({ id: 'global.type', defaultMessage: 'Type' })}\n </Typography>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n <Tr>\n <Td colSpan={2}>\n <EmptyStateLayout\n content={formatMessage({\n id: getTrad('table.content.create-first-content-type'),\n defaultMessage: 'Create your first Collection-Type',\n })}\n hasRadius\n icon={<EmptyDocuments width=\"16rem\" />}\n />\n </Td>\n </Tr>\n </Tbody>\n </Table>\n );\n }\n\n if (items.length === 0 && isMain) {\n return (\n <Table colCount={2} rowCount={2}>\n <Thead>\n <Tr>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({ id: 'global.name', defaultMessage: 'Name' })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({ id: 'global.type', defaultMessage: 'Type' })}\n </Typography>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n <Tr>\n <Td colSpan={2}>\n <EmptyStateLayout\n action={\n <Button\n onClick={onClickAddField}\n size=\"L\"\n startIcon={<Plus />}\n variant=\"secondary\"\n >\n {formatMessage({\n id: getTrad('table.button.no-fields'),\n defaultMessage: 'Add new field',\n })}\n </Button>\n }\n content={formatMessage(\n isInContentTypeView\n ? {\n id: getTrad('table.content.no-fields.collection-type'),\n defaultMessage: 'Add your first field to this Collection-Type',\n }\n : {\n id: getTrad('table.content.no-fields.component'),\n defaultMessage: 'Add your first field to this component',\n }\n )}\n hasRadius\n icon={<EmptyDocuments width=\"16rem\" />}\n />\n </Td>\n </Tr>\n </Tbody>\n </Table>\n );\n }\n\n return (\n <BoxWrapper>\n <Box\n paddingLeft={6}\n paddingRight={isMain ? 6 : 0}\n {...(isMain && { style: { overflowX: 'auto' } })}\n >\n <table>\n {isMain && (\n <thead>\n <tr>\n <th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({ id: 'global.name', defaultMessage: 'Name' })}\n </Typography>\n </th>\n <th colSpan={2}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({ id: 'global.type', defaultMessage: 'Type' })}\n </Typography>\n </th>\n </tr>\n </thead>\n )}\n <tbody>\n {items.map((item) => {\n const { type } = item;\n const CustomRow = customRowComponent;\n\n return (\n <Fragment key={item.name}>\n <CustomRow\n {...item}\n isNestedInDZComponent={isNestedInDZComponent}\n targetUid={targetUid}\n editTarget={editTarget}\n firstLoopComponentUid={firstLoopComponentUid}\n isFromDynamicZone={isFromDynamicZone}\n secondLoopComponentUid={secondLoopComponentUid}\n />\n\n {type === 'component' && (\n <ComponentList\n {...item}\n customRowComponent={customRowComponent}\n targetUid={targetUid}\n isNestedInDZComponent={isFromDynamicZone}\n editTarget={editTarget}\n firstLoopComponentUid={firstLoopComponentUid}\n />\n )}\n\n {type === 'dynamiczone' && (\n <DynamicZoneList\n {...item}\n customRowComponent={customRowComponent}\n addComponent={addComponentToDZ}\n targetUid={targetUid}\n />\n )}\n </Fragment>\n );\n })}\n </tbody>\n </table>\n </Box>\n\n {isMain && isInDevelopmentMode && (\n <TFooter icon={<Plus />} onClick={onClickAddField}>\n {formatMessage({\n id: getTrad(\n `form.button.add.field.to.${\n modifiedData.contentType\n ? modifiedData.contentType.schema.kind\n : editTarget || 'collectionType'\n }`\n ),\n defaultMessage: 'Add another field',\n })}\n </TFooter>\n )}\n {isSub && isInDevelopmentMode && !isFromDynamicZone && (\n <NestedTFooter\n icon={<Plus />}\n onClick={onClickAddField}\n color={isFromDynamicZone ? 'primary' : 'neutral'}\n >\n {formatMessage({\n id: getTrad(`form.button.add.field.to.component`),\n defaultMessage: 'Add another field',\n })}\n </NestedTFooter>\n )}\n </BoxWrapper>\n );\n};\n","import { Box } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nconst StyledBox = styled(Box)`\n position: absolute;\n left: -1.8rem;\n top: 0px;\n\n &:before {\n content: '';\n width: 0.4rem;\n height: 1.2rem;\n background: ${({ theme, color }) => theme.colors[color!]};\n display: block;\n }\n`;\n\nconst Svg = styled.svg`\n position: relative;\n flex-shrink: 0;\n transform: translate(-0.5px, -1px);\n\n * {\n fill: ${({ theme, color }) => theme.colors[color!]};\n }\n`;\n\ninterface CurveProps {\n color: string;\n}\n\nexport const Curve = (props: CurveProps) => (\n <StyledBox>\n <Svg\n width=\"20\"\n height=\"23\"\n viewBox=\"0 0 20 23\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M7.02477 14.7513C8.65865 17.0594 11.6046 18.6059 17.5596 18.8856C18.6836 18.9384 19.5976 19.8435 19.5976 20.9688V20.9688C19.5976 22.0941 18.6841 23.0125 17.5599 22.9643C10.9409 22.6805 6.454 20.9387 3.75496 17.1258C0.937988 13.1464 0.486328 7.39309 0.486328 0.593262H4.50974C4.50974 7.54693 5.06394 11.9813 7.02477 14.7513Z\"\n />\n </Svg>\n </StyledBox>\n);\n","import { Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../utils/getTrad';\n\ntype DisplayedTypeProps = {\n type: string;\n customField?: string | null;\n repeatable?: boolean;\n};\n\nexport const DisplayedType = ({\n type,\n customField = null,\n repeatable = false,\n}: DisplayedTypeProps) => {\n const { formatMessage } = useIntl();\n\n let readableType = type;\n\n if (['integer', 'biginteger', 'float', 'decimal'].includes(type)) {\n readableType = 'number';\n } else if (['string'].includes(type)) {\n readableType = 'text';\n }\n\n if (customField) {\n return (\n <Typography>\n {formatMessage({\n id: getTrad('attribute.customField'),\n defaultMessage: 'Custom field',\n })}\n </Typography>\n );\n }\n\n return (\n <Typography>\n {formatMessage({\n id: getTrad(`attribute.${readableType}`),\n defaultMessage: type,\n })}\n &nbsp;\n {repeatable &&\n formatMessage({\n id: getTrad('component.repeatable'),\n defaultMessage: '(repeatable)',\n })}\n </Typography>\n );\n};\n","import upperFirst from 'lodash/upperFirst';\n\nexport const UpperFirst = ({ content }: { content: string }) => <>{upperFirst(content)}</>;\n","import { memo } from 'react';\n\nimport { Box, Flex, IconButton, Typography } from '@strapi/design-system';\nimport { Lock, Pencil, Trash } from '@strapi/icons';\nimport get from 'lodash/get';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useDataManager } from '../hooks/useDataManager';\nimport { Curve } from '../icons/Curve';\nimport { getTrad } from '../utils/getTrad';\n\nimport { AttributeIcon, IconByType } from './AttributeIcon';\nimport { DisplayedType } from './DisplayedType';\nimport { UpperFirst } from './UpperFirst';\n\nexport const BoxWrapper = styled(Box)`\n position: relative;\n`;\n\ntype ListRowProps = {\n configurable?: boolean;\n customField?: string | null;\n editTarget: string;\n firstLoopComponentUid?: string | null;\n isFromDynamicZone?: boolean;\n name: string;\n onClick: (\n editTarget: string,\n targetUid: string | null,\n attributeName: string,\n attributeType: string,\n customField: string | null\n ) => void;\n relation?: string;\n repeatable?: boolean;\n secondLoopComponentUid?: string | null;\n target?: string | null;\n targetUid?: string | null;\n type: IconByType;\n};\n\nexport const ListRow = memo(\n ({\n configurable = true,\n customField = null,\n editTarget,\n firstLoopComponentUid = null,\n isFromDynamicZone = false,\n name,\n onClick,\n relation = '',\n repeatable = false,\n secondLoopComponentUid = null,\n target = null,\n targetUid = null,\n type,\n }: ListRowProps) => {\n const { contentTypes, isInDevelopmentMode, removeAttribute } = useDataManager();\n const { formatMessage } = useIntl();\n\n const isMorph = type === 'relation' && relation.includes('morph');\n const ico = ['integer', 'biginteger', 'float', 'decimal'].includes(type) ? 'number' : type;\n\n const contentType = get(contentTypes, [target as keyof typeof contentTypes], {});\n const contentTypeFriendlyName = get(contentType, ['schema', 'displayName'], '');\n const isPluginContentType = get(contentType, 'plugin');\n\n const src = target ? 'relation' : ico;\n\n const handleClick = () => {\n if (isMorph) {\n return;\n }\n\n if (configurable !== false) {\n const attrType = type;\n\n onClick(\n // Tells where the attribute is located in the main modifiedData object : contentType, component or components\n editTarget,\n // main data type uid\n secondLoopComponentUid || firstLoopComponentUid || targetUid,\n // Name of the attribute\n name,\n // Type of the attribute\n attrType,\n customField\n );\n }\n };\n let loopNumber;\n\n if (secondLoopComponentUid && firstLoopComponentUid) {\n loopNumber = 2;\n } else if (firstLoopComponentUid) {\n loopNumber = 1;\n } else {\n loopNumber = 0;\n }\n\n return (\n <BoxWrapper\n tag=\"tr\"\n onClick={isInDevelopmentMode && configurable && !isMorph ? handleClick : undefined}\n >\n <td style={{ position: 'relative' }}>\n {loopNumber !== 0 && <Curve color={isFromDynamicZone ? 'primary200' : 'neutral150'} />}\n <Flex paddingLeft={2} gap={4}>\n <AttributeIcon type={src} customField={customField} />\n <Typography fontWeight=\"bold\">{name}</Typography>\n </Flex>\n </td>\n <td>\n {target ? (\n <Typography>\n {formatMessage({\n id: getTrad(\n `modelPage.attribute.${isMorph ? 'relation-polymorphic' : 'relationWith'}`\n ),\n defaultMessage: 'Relation with',\n })}\n &nbsp;\n <span style={{ fontStyle: 'italic' }}>\n <UpperFirst content={contentTypeFriendlyName} />\n &nbsp;\n {isPluginContentType &&\n `(${formatMessage({\n id: getTrad(`from`),\n defaultMessage: 'from',\n })}: ${isPluginContentType})`}\n </span>\n </Typography>\n ) : (\n <DisplayedType type={type} customField={customField} repeatable={repeatable} />\n )}\n </td>\n <td>\n {isInDevelopmentMode ? (\n <Flex justifyContent=\"flex-end\" onClick={(e) => e.stopPropagation()}>\n {configurable ? (\n <Flex gap={1}>\n {!isMorph && (\n <IconButton\n onClick={handleClick}\n label={`${formatMessage({\n id: 'app.utils.edit',\n defaultMessage: 'Edit',\n })} ${name}`}\n borderWidth={0}\n >\n <Pencil />\n </IconButton>\n )}\n <IconButton\n onClick={(e) => {\n e.stopPropagation();\n removeAttribute(\n editTarget,\n name,\n secondLoopComponentUid || firstLoopComponentUid || ''\n );\n }}\n label={`${formatMessage({\n id: 'global.delete',\n defaultMessage: 'Delete',\n })} ${name}`}\n borderWidth={0}\n >\n <Trash />\n </IconButton>\n </Flex>\n ) : (\n <Lock />\n )}\n </Flex>\n ) : (\n /*\n In production mode the edit icons aren't visible, therefore\n we need to reserve the same space, otherwise the height of the\n row might collapse, leading to bad positioned curve icons\n */\n <Box height=\"3.2rem\" />\n )}\n </td>\n </BoxWrapper>\n );\n }\n);\n","export const getAttributeDisplayedType = (type: string) => {\n let displayedType;\n\n switch (type) {\n case 'date':\n case 'datetime':\n case 'time':\n case 'timestamp':\n displayedType = 'date';\n break;\n case 'integer':\n case 'biginteger':\n case 'decimal':\n case 'float':\n displayedType = 'number';\n break;\n case 'string':\n case 'text':\n displayedType = 'text';\n break;\n case '':\n displayedType = 'relation';\n break;\n default:\n displayedType = type;\n }\n\n return displayedType;\n};\n","import { memo } from 'react';\n\nimport { type Permission, useRBAC } from '@strapi/admin/strapi-admin';\nimport { Button } from '@strapi/design-system';\nimport { ListPlus } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useNavigate } from 'react-router-dom';\n\nconst cmPermissions: Record<string, Permission[]> = {\n collectionTypesConfigurations: [\n {\n action: 'plugin::content-manager.collection-types.configure-view',\n subject: null,\n },\n ],\n componentsConfigurations: [\n {\n action: 'plugin::content-manager.components.configure-layout',\n subject: null,\n },\n ],\n singleTypesConfigurations: [\n {\n action: 'plugin::content-manager.single-types.configure-view',\n subject: null,\n },\n ],\n};\n\ninterface LinkToCMSettingsViewProps {\n disabled: boolean;\n contentTypeKind?: string;\n isInContentTypeView?: boolean;\n isTemporary?: boolean;\n targetUid?: string;\n}\n\nexport const LinkToCMSettingsView = memo(\n ({\n disabled,\n isTemporary = false,\n isInContentTypeView = true,\n contentTypeKind = 'collectionType',\n targetUid = '',\n }: LinkToCMSettingsViewProps) => {\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const { collectionTypesConfigurations, componentsConfigurations, singleTypesConfigurations } =\n cmPermissions;\n const label = formatMessage({\n id: 'content-type-builder.form.button.configure-view',\n defaultMessage: 'Configure the view',\n });\n let permissionsToApply = collectionTypesConfigurations;\n\n const handleClick = () => {\n if (isTemporary) {\n return false;\n }\n\n if (isInContentTypeView) {\n navigate(`/content-manager/collection-types/${targetUid}/configurations/edit`);\n } else {\n navigate(`/content-manager/components/${targetUid}/configurations/edit`);\n }\n\n return false;\n };\n\n if (isInContentTypeView && contentTypeKind === 'singleType') {\n permissionsToApply = singleTypesConfigurations;\n }\n\n if (!isInContentTypeView) {\n permissionsToApply = componentsConfigurations;\n }\n const {\n allowedActions: { canViewConfig },\n } = useRBAC({\n viewConfig: permissionsToApply,\n });\n\n if (!canViewConfig) {\n return null;\n }\n\n return (\n <Button\n startIcon={<ListPlus />}\n variant=\"tertiary\"\n onClick={handleClick}\n disabled={isTemporary || disabled}\n >\n {label}\n </Button>\n );\n }\n);\n","import { BackButton, useTracking, Layouts } from '@strapi/admin/strapi-admin';\nimport { Box, Button, Flex } from '@strapi/design-system';\nimport { Check, Pencil, Plus } from '@strapi/icons';\nimport get from 'lodash/get';\nimport has from 'lodash/has';\nimport isEqual from 'lodash/isEqual';\nimport upperFirst from 'lodash/upperFirst';\nimport { useIntl } from 'react-intl';\nimport { unstable_usePrompt as usePrompt, useMatch } from 'react-router-dom';\n\nimport { List } from '../../components/List';\nimport { ListRow } from '../../components/ListRow';\nimport { useDataManager } from '../../hooks/useDataManager';\nimport { useFormModalNavigation } from '../../hooks/useFormModalNavigation';\nimport { getAttributeDisplayedType } from '../../utils/getAttributeDisplayedType';\nimport { getTrad } from '../../utils/getTrad';\n\nimport { LinkToCMSettingsView } from './LinkToCMSettingsView';\n\n/* eslint-disable indent */\n\nconst ListView = () => {\n const { initialData, modifiedData, isInDevelopmentMode, isInContentTypeView, submitData } =\n useDataManager();\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n\n const match = useMatch('/plugins/content-type-builder/:kind/:currentUID');\n\n const {\n onOpenModalAddComponentsToDZ,\n onOpenModalAddField,\n onOpenModalEditField,\n onOpenModalEditSchema,\n onOpenModalEditCustomField,\n } = useFormModalNavigation();\n\n const firstMainDataPath = isInContentTypeView ? 'contentType' : 'component';\n const mainDataTypeAttributesPath = [firstMainDataPath, 'schema', 'attributes'];\n const targetUid = get(modifiedData, [firstMainDataPath, 'uid']);\n const isTemporary = get(modifiedData, [firstMainDataPath, 'isTemporary'], false);\n const contentTypeKind = get(modifiedData, [firstMainDataPath, 'schema', 'kind'], null);\n\n const attributes = get(modifiedData, mainDataTypeAttributesPath, []);\n const isFromPlugin = has(initialData, [firstMainDataPath, 'plugin']);\n const hasModelBeenModified = !isEqual(modifiedData, initialData);\n\n const forTarget = isInContentTypeView ? 'contentType' : 'component';\n\n const handleClickAddComponentToDZ = (dynamicZoneTarget?: string) => {\n onOpenModalAddComponentsToDZ({ dynamicZoneTarget, targetUid });\n };\n\n const handleClickEditField = async (\n forTarget: string,\n targetUid: string,\n attributeName: string,\n type: string,\n customField: any\n ) => {\n const attributeType = getAttributeDisplayedType(type);\n const step = type === 'component' ? '2' : null;\n\n if (customField) {\n onOpenModalEditCustomField({\n forTarget,\n targetUid,\n attributeName,\n attributeType,\n customFieldUid: customField,\n });\n } else {\n onOpenModalEditField({\n forTarget,\n targetUid,\n attributeName,\n attributeType,\n step,\n });\n }\n };\n\n let label = get(modifiedData, [firstMainDataPath, 'schema', 'displayName'], '');\n const kind = get(modifiedData, [firstMainDataPath, 'schema', 'kind'], '');\n\n const isCreatingFirstContentType = match?.params.currentUID === 'create-content-type';\n\n if (!label && isCreatingFirstContentType) {\n label = formatMessage({\n id: getTrad('button.model.create'),\n defaultMessage: 'Create new collection type',\n });\n }\n\n const onEdit = () => {\n const contentType = kind || firstMainDataPath;\n\n if (contentType === 'collectionType') {\n trackUsage('willEditNameOfContentType');\n }\n if (contentType === 'singleType') {\n trackUsage('willEditNameOfSingleType');\n }\n\n onOpenModalEditSchema({\n modalType: firstMainDataPath,\n forTarget: firstMainDataPath,\n targetUid,\n kind: contentType,\n });\n };\n\n usePrompt({\n when: hasModelBeenModified,\n message: formatMessage({ id: getTrad('prompt.unsaved'), defaultMessage: 'Are you sure?' }),\n });\n\n return (\n <>\n <Layouts.Header\n id=\"title\"\n primaryAction={\n isInDevelopmentMode && (\n <Flex gap={2}>\n {/* DON'T display the add field button when the content type has not been created */}\n {!isCreatingFirstContentType && (\n <Button\n startIcon={<Plus />}\n variant=\"secondary\"\n onClick={() => {\n onOpenModalAddField({ forTarget, targetUid });\n }}\n >\n {formatMessage({\n id: getTrad('button.attributes.add.another'),\n defaultMessage: 'Add another field',\n })}\n </Button>\n )}\n <Button\n startIcon={<Check />}\n onClick={async () => await submitData()}\n type=\"submit\"\n disabled={isEqual(modifiedData, initialData)}\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n )\n }\n secondaryAction={\n isInDevelopmentMode &&\n !isFromPlugin &&\n !isCreatingFirstContentType && (\n <Button startIcon={<Pencil />} variant=\"tertiary\" onClick={onEdit}>\n {formatMessage({\n id: 'app.utils.edit',\n defaultMessage: 'Edit',\n })}\n </Button>\n )\n }\n title={upperFirst(label)}\n subtitle={formatMessage({\n id: getTrad('listView.headerLayout.description'),\n defaultMessage: 'Build the data architecture of your content',\n })}\n navigationAction={<BackButton />}\n />\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex justifyContent=\"flex-end\">\n <Flex gap={2}>\n <LinkToCMSettingsView\n key=\"link-to-cm-settings-view\"\n targetUid={targetUid}\n isTemporary={isTemporary}\n isInContentTypeView={isInContentTypeView}\n contentTypeKind={contentTypeKind}\n disabled={isCreatingFirstContentType}\n />\n </Flex>\n </Flex>\n <Box background=\"neutral0\" shadow=\"filterShadow\" hasRadius>\n <List\n items={attributes}\n customRowComponent={(props) => <ListRow {...props} onClick={handleClickEditField} />}\n addComponentToDZ={handleClickAddComponentToDZ}\n targetUid={targetUid}\n editTarget={forTarget}\n isMain\n />\n </Box>\n </Flex>\n </Layouts.Content>\n </>\n );\n};\n\n// eslint-disable-next-line import/no-default-export\nexport default ListView;\n"],"names":["BoxWrapper","styled","Box","useDataManager","get","jsx","COMPONENT_ICONS","Flex","index","jsxs","Typography","Cross","Plus","useState","useIntl","getTrad","createElement","useTracking","useFormModalNavigation","Table","Thead","Tr","Th","Tbody","Td","EmptyStateLayout","EmptyDocuments","Button","Fragment","TFooter","upperFirst","memo","AttributeIcon","IconButton","Pencil","Trash","Lock","useNavigate","useRBAC","ListPlus","useMatch","has","isEqual","forTarget","targetUid","usePrompt","Layouts","Check","BackButton"],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- import { jsx } from "react/jsx-runtime";
2
1
  import { Layout } from "@strapi/icons";
3
2
  import produce, { current, produce as produce$1 } from "immer";
4
3
  import get from "lodash/get";
@@ -18,7 +17,7 @@ const __variableDynamicImportRuntimeHelper = (glob, path) => {
18
17
  });
19
18
  };
20
19
  const name$1 = "@strapi/content-type-builder";
21
- const version = "5.0.0-beta.5";
20
+ const version = "5.0.0-beta.7";
22
21
  const description = "Create and manage content types";
23
22
  const repository = {
24
23
  type: "git",
@@ -76,10 +75,10 @@ const scripts = {
76
75
  const dependencies = {
77
76
  "@reduxjs/toolkit": "1.9.7",
78
77
  "@sindresorhus/slugify": "1.1.0",
79
- "@strapi/design-system": "2.0.0-beta.2",
80
- "@strapi/generators": "5.0.0-beta.5",
81
- "@strapi/icons": "2.0.0-beta.2",
82
- "@strapi/utils": "5.0.0-beta.5",
78
+ "@strapi/design-system": "2.0.0-beta.4",
79
+ "@strapi/generators": "5.0.0-beta.7",
80
+ "@strapi/icons": "2.0.0-beta.4",
81
+ "@strapi/utils": "5.0.0-beta.7",
83
82
  "date-fns": "2.30.0",
84
83
  "fs-extra": "11.2.0",
85
84
  immer: "9.0.21",
@@ -91,27 +90,27 @@ const dependencies = {
91
90
  yup: "0.32.9"
92
91
  };
93
92
  const devDependencies = {
94
- "@strapi/admin": "5.0.0-beta.5",
93
+ "@strapi/admin": "5.0.0-beta.7",
95
94
  "@strapi/pack-up": "5.0.0",
96
- "@strapi/types": "5.0.0-beta.5",
97
- "@testing-library/react": "14.0.0",
98
- "@testing-library/user-event": "14.4.3",
95
+ "@strapi/types": "5.0.0-beta.7",
96
+ "@testing-library/react": "15.0.7",
97
+ "@testing-library/user-event": "14.5.2",
99
98
  "@types/fs-extra": "11.0.4",
100
99
  "@types/pluralize": "0.0.30",
101
100
  koa: "2.15.2",
102
101
  "koa-body": "6.0.1",
103
- react: "^18.2.0",
104
- "react-dom": "^18.2.0",
102
+ react: "18.3.1",
103
+ "react-dom": "18.3.1",
105
104
  "react-query": "3.39.3",
106
105
  "react-router-dom": "6.22.3",
107
- "styled-components": "5.3.11"
106
+ "styled-components": "6.1.8"
108
107
  };
109
108
  const peerDependencies = {
110
109
  "@strapi/admin": "^5.0.0 || ^5.0.0-beta || ^5.0.0-alpha || ^5.0.0-rc",
111
110
  react: "^17.0.0 || ^18.0.0",
112
111
  "react-dom": "^17.0.0 || ^18.0.0",
113
112
  "react-router-dom": "^6.0.0",
114
- "styled-components": "^5.2.1"
113
+ "styled-components": "^6.0.0"
115
114
  };
116
115
  const engines = {
117
116
  node: ">=18.0.0 <=20.x.x",
@@ -142,7 +141,6 @@ const pluginPkg = {
142
141
  engines,
143
142
  strapi
144
143
  };
145
- const PluginIcon = () => /* @__PURE__ */ jsx(Layout, {});
146
144
  const PERMISSIONS = {
147
145
  // This permission regards the main component (App) and is used to tell
148
146
  // If the plugin link should be displayed in the menu
@@ -1102,13 +1100,14 @@ const index = {
1102
1100
  app.addReducers(reducers);
1103
1101
  app.addMenuLink({
1104
1102
  to: `plugins/${pluginId}`,
1105
- icon: PluginIcon,
1103
+ icon: Layout,
1106
1104
  intlLabel: {
1107
1105
  id: `${pluginId}.plugin.name`,
1108
1106
  defaultMessage: "Content Types Builder"
1109
1107
  },
1110
1108
  permissions: PERMISSIONS.main,
1111
- Component: () => import("./index-BtxPpV-M.mjs").then((n) => n.i)
1109
+ Component: () => import("./index-DnkyThcz.mjs").then((n) => n.i),
1110
+ position: 5
1112
1111
  });
1113
1112
  app.registerPlugin({
1114
1113
  id: pluginId,
@@ -1182,4 +1181,4 @@ export {
1182
1181
  ADD_ATTRIBUTE as y,
1183
1182
  CREATE_SCHEMA as z
1184
1183
  };
1185
- //# sourceMappingURL=index-CBlX4byY.mjs.map
1184
+ //# sourceMappingURL=index-1y0vXVON.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-1y0vXVON.mjs","sources":["../../admin/src/constants.ts","../../admin/src/pluginId.ts","../../admin/src/utils/getRelationType.ts","../../admin/src/utils/makeUnique.ts","../../admin/src/components/DataManagerProvider/constants.ts","../../admin/src/components/DataManagerProvider/utils/retrieveComponentsFromSchema.ts","../../admin/src/components/DataManagerProvider/reducer.ts","../../admin/src/utils/nameToSlug.ts","../../admin/src/components/FormModal/constants.ts","../../admin/src/components/FormModal/utils/createUid.ts","../../admin/src/components/FormModal/utils/customFieldDefaultOptionsReducer.ts","../../admin/src/components/FormModal/utils/relations.ts","../../admin/src/components/FormModal/reducer.ts","../../admin/src/reducers.ts","../../admin/src/utils/formAPI.ts","../../admin/src/utils/prefixPluginTranslations.ts","../../admin/src/index.ts"],"sourcesContent":["export const PERMISSIONS = {\n // This permission regards the main component (App) and is used to tell\n // If the plugin link should be displayed in the menu\n // And also if the plugin is accessible. This use case is found when a user types the url of the\n // plugin directly in the browser\n main: [{ action: 'plugin::content-type-builder.read', subject: null }],\n};\n","import pluginPkg from '../../package.json';\n\nexport const pluginId = pluginPkg.name.replace(/^@strapi\\//i, '');\n","import type { Schema } from '@strapi/types';\n\n/**\n *\n * Retrieves the relation type\n */\nexport const getRelationType = (\n relation: Schema.Attribute.RelationKind.WithTarget | undefined,\n targetAttribute?: string | null\n) => {\n const hasNotTargetAttribute = targetAttribute === undefined || targetAttribute === null;\n\n if (relation === 'oneToOne' && hasNotTargetAttribute) {\n return 'oneWay';\n }\n\n if (relation === 'oneToMany' && hasNotTargetAttribute) {\n return 'manyWay';\n }\n\n return relation;\n};\n","const makeUnique = <T extends string>(array: T[]): T[] => [...new Set(array)];\n\nexport { makeUnique };\n","export const ADD_ATTRIBUTE = 'ContentTypeBuilder/DataManagerProvider/ADD_ATTRIBUTE';\nexport const ADD_CUSTOM_FIELD_ATTRIBUTE =\n 'ContentTypeBuilder/DataManagerProvider/ADD_CUSTOM_FIELD_ATTRIBUTE';\nexport const ADD_CREATED_COMPONENT_TO_DYNAMIC_ZONE =\n 'ContentTypeBuilder/DataManagerProvider/ADD_CREATED_COMPONENT_TO_DYNAMIC_ZONE';\nexport const CHANGE_DYNAMIC_ZONE_COMPONENTS =\n 'ContentTypeBuilder/DataManagerProvider/CHANGE_DYNAMIC_ZONE_COMPONENTS';\nexport const CREATE_SCHEMA = 'ContentTypeBuilder/DataManagerProvider/CREATE_SCHEMA';\nexport const CREATE_COMPONENT_SCHEMA =\n 'ContentTypeBuilder/DataManagerProvider/CREATE_COMPONENT_SCHEMA';\nexport const DELETE_NOT_SAVED_TYPE = 'ContentTypeBuilder/DataManagerProvider/DELETE_NOT_SAVED_TYPE';\nexport const EDIT_ATTRIBUTE = 'ContentTypeBuilder/DataManagerProvider/EDIT_ATTRIBUTE';\nexport const EDIT_CUSTOM_FIELD_ATTRIBUTE =\n 'ContentTypeBuilder/DataManagerProvider/EDIT_CUSTOM_FIELD_ATTRIBUTE';\nexport const GET_DATA_SUCCEEDED = 'ContentTypeBuilder/DataManagerProvider/GET_DATA_SUCCEEDED';\nexport const RELOAD_PLUGIN = 'ContentTypeBuilder/DataManagerProvider/RELOAD_PLUGIN';\nexport const REMOVE_FIELD_FROM_DISPLAYED_COMPONENT =\n 'ContentTypeBuilder/DataManagerProvider/REMOVE_FIELD_FROM_DISPLAYED_COMPONENT';\nexport const REMOVE_COMPONENT_FROM_DYNAMIC_ZONE =\n 'ContentTypeBuilder/DataManagerProvider/REMOVE_COMPONENT_FROM_DYNAMIC_ZONE';\nexport const REMOVE_FIELD = 'ContentTypeBuilder/DataManagerProvider/REMOVE_FIELD';\nexport const SET_MODIFIED_DATA = 'ContentTypeBuilder/DataManagerProvider/SET_MODIFIED_DATA';\nexport const UPDATE_SCHEMA = 'ContentTypeBuilder/DataManagerProvider/UPDATE_SCHEMA';\nexport const UPDATE_INITIAL_STATE = 'ContentTypeBuilder/DataManagerProvider/UPDATE_INITIAL_STATE';\n","import get from 'lodash/get';\n\nimport { makeUnique } from '../../../utils/makeUnique';\n\nimport type { AttributeType, Components } from '../../../types';\nimport type { Internal } from '@strapi/types';\n\nconst retrieveComponentsFromSchema = (\n attributes: AttributeType[],\n allComponentsData: Components\n): Internal.UID.Component[] => {\n const allComponents: Internal.UID.Component[] = attributes.reduce((acc: any, current) => {\n const type = current.type;\n if (type === 'component') {\n const currentComponentName = current.component;\n // Push the existing compo\n acc.push(currentComponentName);\n\n const currentComponentAttributes = get(\n allComponentsData,\n [currentComponentName, 'schema', 'attributes'],\n []\n );\n\n // Retrieve the nested ones\n acc.push(...retrieveComponentsFromSchema(currentComponentAttributes, allComponentsData));\n }\n\n if (type === 'dynamiczone') {\n const dynamicZoneComponents = current.components;\n const componentsFromDZComponents = dynamicZoneComponents.reduce((acc2: any, currentUid) => {\n const compoAttrs = get(allComponentsData, [currentUid, 'schema', 'attributes'], []);\n\n return [...acc2, ...retrieveComponentsFromSchema(compoAttrs, allComponentsData)];\n }, []);\n\n return [...acc, ...dynamicZoneComponents, ...componentsFromDZComponents];\n }\n\n return acc;\n }, []);\n\n return makeUnique<Internal.UID.Component>(allComponents);\n};\n\nexport { retrieveComponentsFromSchema };\n","import produce, { current } from 'immer';\nimport get from 'lodash/get';\nimport set from 'lodash/set';\n\nimport { getRelationType } from '../../utils/getRelationType';\nimport { makeUnique } from '../../utils/makeUnique';\n\nimport * as actions from './constants';\nimport { retrieveComponentsFromSchema } from './utils/retrieveComponentsFromSchema';\n\nimport type { DataManagerStateType, ContentType, AttributeType, Component } from '../../types';\nimport type { Internal, Schema } from '@strapi/types';\n\n// TODO: Define all possible actions based on type\nexport type Action = {\n type: string;\n uid?: string;\n mainDataKey: 'component' | 'components' | 'contentTypes' | 'contentType';\n schemaType: 'component' | 'contentType';\n attributeToRemoveName?: string;\n [key: string]: any;\n};\n\nconst initialState: DataManagerStateType = {\n components: {},\n contentTypes: {},\n initialComponents: {},\n initialContentTypes: {},\n initialData: {},\n modifiedData: {\n components: {},\n contentTypes: {},\n },\n reservedNames: {},\n isLoading: true,\n isLoadingForDataToBeSet: true,\n};\n\nconst ONE_SIDE_RELATIONS = ['oneWay', 'manyWay'];\n\nconst getOppositeRelation = (originalRelation?: Schema.Attribute.RelationKind.WithTarget) => {\n if (originalRelation === 'manyToOne') {\n return 'oneToMany';\n }\n\n if (originalRelation === 'oneToMany') {\n return 'manyToOne';\n }\n\n return originalRelation;\n};\n\nconst findAttributeIndex = (schema: any, attributeToFind?: string) => {\n return schema.schema.attributes.findIndex(\n ({ name }: { name: string }) => name === attributeToFind\n );\n};\n\nconst reducer = (state = initialState, action: Action) =>\n produce(state, (draftState: any) => {\n switch (action.type) {\n case actions.ADD_ATTRIBUTE: {\n const {\n attributeToSet: { name, ...rest },\n forTarget,\n targetUid,\n } = action;\n delete rest.createComponent;\n\n const pathToDataToEdit = ['component', 'contentType'].includes(forTarget)\n ? [forTarget]\n : [forTarget, targetUid];\n\n const currentAttributes = get(\n state,\n ['modifiedData', ...pathToDataToEdit, 'schema', 'attributes'],\n []\n ).slice();\n\n // Add the createdAttribute\n const updatedAttributes = [...currentAttributes, { ...rest, name }];\n\n set(\n draftState,\n ['modifiedData', ...pathToDataToEdit, 'schema', 'attributes'],\n updatedAttributes\n );\n\n if (action.shouldAddComponentToData) {\n const componentToAddUID = rest.component;\n const componentToAdd = state.components[componentToAddUID];\n const isTemporaryComponent = componentToAdd?.isTemporary;\n const hasComponentAlreadyBeenAdded =\n state.modifiedData.components?.[componentToAddUID] !== undefined;\n\n if (isTemporaryComponent || hasComponentAlreadyBeenAdded) {\n break;\n }\n\n // Initialize modifiedData.components if it is undefined\n if (!draftState.modifiedData.components) {\n draftState.modifiedData.components = {};\n }\n\n // Add the added component to the modifiedData.components\n draftState.modifiedData.components[componentToAddUID] = componentToAdd;\n\n const nestedComponents = retrieveComponentsFromSchema(\n componentToAdd.schema.attributes as AttributeType[],\n state.components\n );\n\n // We dont' need to set the already added components otherwise all modifications will be lost so we need to only add the not modified ones\n const nestedComponentsToAddInModifiedData = nestedComponents.filter(\n (compoUID: Internal.UID.Component) => {\n return get(state, ['modifiedData', 'components', compoUID]) === undefined;\n }\n );\n\n nestedComponentsToAddInModifiedData.forEach((compoUID: Internal.UID.Component) => {\n const compoSchema = get(state, ['components', compoUID], {}) as Component;\n const isTemporary = compoSchema.isTemporary || false;\n\n // If the nested component has not been saved we don't need to add them as they are already in the state\n if (!isTemporary) {\n if (!draftState.modifiedData.components) {\n draftState.modifiedData.components = {};\n }\n draftState.modifiedData.components[compoUID] = compoSchema;\n }\n });\n\n break;\n }\n\n const isCreatingRelationAttribute = rest.type === 'relation';\n\n if (isCreatingRelationAttribute) {\n const target = rest.target;\n const targetAttribute = rest.targetAttribute || null;\n const relation = rest.relation;\n const relationType = getRelationType(relation, targetAttribute);\n const currentUid = get(state, ['modifiedData', ...pathToDataToEdit, 'uid']);\n\n // When the user in creating a relation with the same content type we need to create another attribute\n // that is the opposite of the created one\n if (\n rest.type === 'relation' &&\n relationType !== 'oneWay' &&\n relationType !== 'manyWay' &&\n target === currentUid\n ) {\n const oppositeAttribute = {\n name: targetAttribute,\n relation: getOppositeRelation(relationType),\n target,\n targetAttribute: name,\n type: 'relation',\n } as AttributeType;\n\n if (rest.private) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n oppositeAttribute.private = rest.private;\n }\n\n const attributesToSet = [...updatedAttributes, oppositeAttribute];\n\n set(\n draftState,\n ['modifiedData', ...pathToDataToEdit, 'schema', 'attributes'],\n attributesToSet\n );\n }\n }\n\n break;\n }\n case actions.ADD_CREATED_COMPONENT_TO_DYNAMIC_ZONE: {\n const { dynamicZoneTarget, componentsToAdd } = action;\n\n const dzAttributeIndex = findAttributeIndex(\n state.modifiedData.contentType,\n dynamicZoneTarget\n );\n\n componentsToAdd.forEach((componentUid: Internal.UID.Component) => {\n if (\n !draftState.modifiedData.contentType?.schema.attributes[dzAttributeIndex].components\n ) {\n draftState.modifiedData.contentType.schema.attributes[dzAttributeIndex].components = [];\n }\n draftState.modifiedData.contentType.schema.attributes[dzAttributeIndex].components.push(\n componentUid\n );\n });\n\n break;\n }\n case actions.ADD_CUSTOM_FIELD_ATTRIBUTE: {\n const {\n attributeToSet: { name, ...rest },\n forTarget,\n targetUid,\n } = action;\n\n const pathToDataToEdit = ['component', 'contentType'].includes(forTarget)\n ? [forTarget]\n : [forTarget, targetUid];\n\n const currentAttributes = get(\n state,\n ['modifiedData', ...pathToDataToEdit, 'schema', 'attributes'],\n []\n ).slice();\n\n // Add the createdAttribute\n const updatedAttributes = [...currentAttributes, { ...rest, name }];\n\n set(\n draftState,\n ['modifiedData', ...pathToDataToEdit, 'schema', 'attributes'],\n updatedAttributes\n );\n\n break;\n }\n case actions.CHANGE_DYNAMIC_ZONE_COMPONENTS: {\n const { dynamicZoneTarget, newComponents } = action;\n\n const dzAttributeIndex = findAttributeIndex(\n state.modifiedData.contentType,\n dynamicZoneTarget\n );\n\n const currentDZComponents =\n (state.modifiedData.contentType?.schema.attributes[dzAttributeIndex]).components;\n\n const updatedComponents = makeUnique([...currentDZComponents, ...newComponents]);\n\n (draftState.modifiedData.contentType?.schema.attributes[dzAttributeIndex]).components =\n updatedComponents;\n\n // Retrieve all the components that needs to be added to the modifiedData.components\n const nestedComponents = retrieveComponentsFromSchema(\n current(draftState.modifiedData.contentType.schema.attributes),\n state.components\n );\n\n // We dont' need to set the already added components otherwise all modifications will be lost so we need to only add the not modified ones\n const nestedComponentsToAddInModifiedData = nestedComponents.filter((compoUID) => {\n return get(state, ['modifiedData', 'components', compoUID]) === undefined;\n });\n\n nestedComponentsToAddInModifiedData.forEach((compoUID: Internal.UID.Component) => {\n const compoSchema = get(state, ['components', compoUID], {}) as Component;\n const isTemporary = compoSchema.isTemporary || false;\n\n // If the nested component has not been saved we don't need to add them as they are already in the state\n if (!isTemporary) {\n if (!draftState.modifiedData.components) {\n draftState.modifiedData.components = {};\n }\n draftState.modifiedData.components[compoUID] = compoSchema;\n }\n });\n\n break;\n }\n case actions.CREATE_COMPONENT_SCHEMA: {\n const newSchema: Component = {\n uid: action.uid as Internal.UID.Component,\n isTemporary: true,\n category: action.componentCategory,\n schema: {\n ...action.data,\n attributes: [],\n },\n };\n draftState.components[action.uid as string] = newSchema;\n\n if (action.shouldAddComponentToData) {\n draftState.modifiedData.components[action.uid as string] = newSchema;\n }\n\n break;\n }\n case actions.CREATE_SCHEMA: {\n const newSchema: ContentType = {\n uid: action.uid as Internal.UID.ContentType,\n isTemporary: true,\n schema: {\n ...action.data,\n attributes: [],\n },\n };\n\n draftState.contentTypes[action.uid as string] = newSchema;\n\n break;\n }\n case actions.EDIT_ATTRIBUTE: {\n const {\n attributeToSet: { name, ...rest },\n forTarget,\n targetUid,\n initialAttribute,\n } = action;\n\n const initialAttributeName = initialAttribute.name;\n const pathToDataToEdit = ['component', 'contentType'].includes(forTarget)\n ? [forTarget]\n : [forTarget, targetUid];\n\n const initialAttributeIndex = findAttributeIndex(\n get(state, ['modifiedData', ...pathToDataToEdit]),\n initialAttributeName\n );\n\n const isEditingRelation = rest.type === 'relation';\n\n if (!isEditingRelation) {\n set(\n draftState,\n ['modifiedData', ...pathToDataToEdit, 'schema', 'attributes', initialAttributeIndex],\n action.attributeToSet\n );\n\n break;\n }\n\n const updatedAttributes: AttributeType[] = get(state, [\n 'modifiedData',\n ...pathToDataToEdit,\n 'schema',\n 'attributes',\n ]).slice();\n\n // First create the current relation attribute updated\n const toSet = {\n name,\n relation: rest.relation,\n target: rest.target,\n targetAttribute: rest.targetAttribute,\n type: 'relation',\n } as AttributeType;\n\n if (rest.private) {\n toSet.private = rest.private;\n }\n\n if (rest.pluginOptions) {\n toSet.pluginOptions = rest.pluginOptions;\n }\n\n const currentAttributeIndex = updatedAttributes.findIndex((value: AttributeType) => {\n return value.name !== undefined && value.name === initialAttribute.name;\n });\n\n // First set it in the updatedAttributes\n if (currentAttributeIndex !== -1) {\n updatedAttributes.splice(currentAttributeIndex, 1, toSet);\n }\n\n let oppositeAttributeNameToRemove: string | null = null;\n let oppositeAttributeNameToUpdate: string | null = null;\n let oppositeAttributeToCreate: AttributeType | null = null;\n let initialOppositeAttribute = null;\n\n const currentUid = get(state, ['modifiedData', ...pathToDataToEdit, 'uid']);\n const didChangeTargetRelation = initialAttribute.target !== rest.target;\n const didCreateInternalRelation = rest.target === currentUid;\n const relationType = getRelationType(rest.relation, rest.targetAttribute);\n const initialRelationType = getRelationType(\n initialAttribute.relation,\n initialAttribute.targetAttribute\n );\n const hadInternalRelation = initialAttribute.target === currentUid;\n const didChangeRelationType = initialRelationType !== relationType;\n const shouldRemoveOppositeAttributeBecauseOfTargetChange =\n didChangeTargetRelation &&\n !didCreateInternalRelation &&\n hadInternalRelation &&\n isEditingRelation;\n const shouldRemoveOppositeAttributeBecauseOfRelationTypeChange =\n didChangeRelationType &&\n hadInternalRelation &&\n ['oneWay', 'manyWay'].includes(relationType!) &&\n isEditingRelation;\n const shouldUpdateOppositeAttributeBecauseOfRelationTypeChange =\n !ONE_SIDE_RELATIONS.includes(initialRelationType!) &&\n !ONE_SIDE_RELATIONS.includes(relationType!) &&\n hadInternalRelation &&\n didCreateInternalRelation &&\n isEditingRelation;\n const shouldCreateOppositeAttributeBecauseOfRelationTypeChange =\n ONE_SIDE_RELATIONS.includes(initialRelationType!) &&\n !ONE_SIDE_RELATIONS.includes(relationType!) &&\n hadInternalRelation &&\n didCreateInternalRelation &&\n isEditingRelation;\n const shouldCreateOppositeAttributeBecauseOfTargetChange =\n didChangeTargetRelation &&\n didCreateInternalRelation &&\n !ONE_SIDE_RELATIONS.includes(relationType!);\n\n // Store opposite attribute name to remove at the end of the loop\n if (\n shouldRemoveOppositeAttributeBecauseOfTargetChange ||\n shouldRemoveOppositeAttributeBecauseOfRelationTypeChange\n ) {\n oppositeAttributeNameToRemove = initialAttribute.targetAttribute;\n }\n\n // In case of oneWay or manyWay relation there isn't an opposite attribute\n if (oppositeAttributeNameToRemove) {\n const indexToRemove = updatedAttributes.findIndex(\n (value) => value.name === oppositeAttributeNameToRemove\n );\n\n updatedAttributes.splice(indexToRemove, 1);\n }\n\n // In order to preserve plugin options need to get the initial opposite attribute settings\n if (!shouldRemoveOppositeAttributeBecauseOfTargetChange) {\n const initialTargetContentType = get(state, [\n 'initialContentTypes',\n initialAttribute.target,\n ]);\n\n if (initialTargetContentType) {\n const oppositeAttributeIndex = findAttributeIndex(\n initialTargetContentType,\n initialAttribute.targetAttribute\n );\n\n initialOppositeAttribute = get(state, [\n 'initialContentTypes',\n initialAttribute.target,\n 'schema',\n 'attributes',\n oppositeAttributeIndex,\n ]);\n }\n }\n\n // Create the opposite attribute\n if (\n shouldCreateOppositeAttributeBecauseOfRelationTypeChange ||\n shouldCreateOppositeAttributeBecauseOfTargetChange\n ) {\n oppositeAttributeToCreate = {\n name: rest.targetAttribute,\n relation: getOppositeRelation(relationType),\n target: rest.target,\n targetAttribute: name,\n type: 'relation',\n } as AttributeType;\n\n if (rest.private) {\n oppositeAttributeToCreate.private = rest.private;\n }\n\n if (initialOppositeAttribute && initialOppositeAttribute.pluginOptions) {\n oppositeAttributeToCreate.pluginOptions = initialOppositeAttribute.pluginOptions;\n }\n\n const indexOfInitialAttribute = updatedAttributes.findIndex(\n ({ name }) => name === initialAttribute.name\n );\n const indexOfUpdatedAttribute = updatedAttributes.findIndex(\n ({ name: attrName }) => name === attrName\n );\n\n const indexToInsert =\n (indexOfInitialAttribute === -1 ? indexOfUpdatedAttribute : indexOfInitialAttribute) +\n 1;\n\n updatedAttributes.splice(indexToInsert, 0, oppositeAttributeToCreate);\n }\n\n if (shouldUpdateOppositeAttributeBecauseOfRelationTypeChange) {\n oppositeAttributeNameToUpdate = initialAttribute.targetAttribute;\n\n oppositeAttributeToCreate = {\n name: rest.targetAttribute,\n relation: getOppositeRelation(relationType),\n target: rest.target,\n targetAttribute: name,\n type: 'relation',\n } as AttributeType;\n\n if (rest.private) {\n oppositeAttributeToCreate.private = rest.private;\n }\n\n if (initialOppositeAttribute && initialOppositeAttribute.pluginOptions) {\n oppositeAttributeToCreate.pluginOptions = initialOppositeAttribute.pluginOptions;\n }\n\n if (oppositeAttributeNameToUpdate) {\n const indexToUpdate = updatedAttributes.findIndex(\n ({ name }) => name === oppositeAttributeNameToUpdate\n );\n\n updatedAttributes.splice(indexToUpdate, 1, oppositeAttributeToCreate);\n }\n }\n\n set(\n draftState,\n ['modifiedData', ...pathToDataToEdit, 'schema', 'attributes'],\n updatedAttributes\n );\n\n break;\n }\n case actions.EDIT_CUSTOM_FIELD_ATTRIBUTE: {\n const { forTarget, targetUid, initialAttribute, attributeToSet } = action;\n\n const initialAttributeName = initialAttribute.name;\n const pathToDataToEdit = ['component', 'contentType'].includes(forTarget)\n ? [forTarget]\n : [forTarget, targetUid];\n\n const initialAttributeIndex = findAttributeIndex(\n get(state, ['modifiedData', ...pathToDataToEdit]),\n initialAttributeName\n );\n\n set(\n draftState,\n ['modifiedData', ...pathToDataToEdit, 'schema', 'attributes', initialAttributeIndex],\n attributeToSet\n );\n\n break;\n }\n case actions.GET_DATA_SUCCEEDED: {\n draftState.components = action.components;\n draftState.initialComponents = action.components;\n draftState.initialContentTypes = action.contentTypes;\n draftState.contentTypes = action.contentTypes;\n draftState.reservedNames = action.reservedNames;\n draftState.isLoading = false;\n break;\n }\n case actions.UPDATE_INITIAL_STATE: {\n draftState.initialData = draftState.modifiedData;\n\n break;\n }\n case actions.UPDATE_INITIAL_STATE: {\n draftState.initialData = draftState.modifiedData;\n\n break;\n }\n case actions.DELETE_NOT_SAVED_TYPE: {\n // Doing so will also reset the modified and the initial data\n draftState.contentTypes = state.initialContentTypes;\n draftState.components = state.initialComponents;\n\n break;\n }\n case actions.RELOAD_PLUGIN: {\n return initialState;\n }\n case actions.REMOVE_COMPONENT_FROM_DYNAMIC_ZONE: {\n const dzAttributeIndex = findAttributeIndex(state.modifiedData.contentType, action.dzName);\n draftState.modifiedData.contentType.schema.attributes[dzAttributeIndex].components.splice(\n action.componentToRemoveIndex,\n 1\n );\n\n break;\n }\n case actions.REMOVE_FIELD: {\n const { mainDataKey, attributeToRemoveName } = action;\n const pathToAttributes = ['modifiedData', mainDataKey, 'schema', 'attributes'];\n const attributeToRemoveIndex = findAttributeIndex(\n state.modifiedData[mainDataKey],\n attributeToRemoveName\n );\n\n const pathToAttributeToRemove = [...pathToAttributes, attributeToRemoveIndex];\n const attributeToRemoveData = get(state, pathToAttributeToRemove);\n const isRemovingRelationAttribute = attributeToRemoveData.type === 'relation';\n // Only content types can have relations with themselves since\n // components can only have oneWay or manyWay relations\n const canTheAttributeToRemoveHaveARelationWithItself = mainDataKey === 'contentType';\n\n if (isRemovingRelationAttribute && canTheAttributeToRemoveHaveARelationWithItself) {\n const { target, relation, targetAttribute } = attributeToRemoveData;\n const relationType = getRelationType(relation, targetAttribute);\n\n const uid = state.modifiedData.contentType?.uid;\n const shouldRemoveOppositeAttribute =\n target === uid && !ONE_SIDE_RELATIONS.includes(relationType!);\n\n if (shouldRemoveOppositeAttribute) {\n const attributes: AttributeType[] =\n state.modifiedData[mainDataKey]?.schema.attributes.slice();\n const nextAttributes = attributes.filter((attribute) => {\n if (attribute.name === attributeToRemoveName) {\n return false;\n }\n\n if (attribute.target === uid && attribute.targetAttribute === attributeToRemoveName) {\n return false;\n }\n\n return true;\n });\n\n draftState.modifiedData[mainDataKey].schema.attributes = nextAttributes;\n\n break;\n }\n }\n\n // Find all uid fields that have the targetField set to the field we are removing\n\n const uidFieldsToUpdate: string[] = state.modifiedData[\n mainDataKey\n ]!.schema.attributes.slice().reduce((acc: string[], current: AttributeType) => {\n if (current.type !== 'uid') {\n return acc;\n }\n\n if (current.targetField !== attributeToRemoveName) {\n return acc;\n }\n\n acc.push(current.name as string);\n\n return acc;\n }, []);\n\n uidFieldsToUpdate.forEach((fieldName) => {\n const fieldIndex = findAttributeIndex(state.modifiedData[mainDataKey], fieldName);\n\n delete draftState.modifiedData[mainDataKey]?.schema.attributes[fieldIndex].targetField;\n });\n\n draftState.modifiedData[mainDataKey]?.schema.attributes.splice(attributeToRemoveIndex, 1);\n\n break;\n }\n case actions.REMOVE_FIELD_FROM_DISPLAYED_COMPONENT: {\n const { attributeToRemoveName, componentUid } = action;\n\n const attributeToRemoveIndex = findAttributeIndex(\n state.modifiedData.components?.[componentUid],\n attributeToRemoveName\n );\n\n draftState.modifiedData.components?.[componentUid]?.schema?.attributes?.splice(\n attributeToRemoveIndex,\n 1\n );\n\n break;\n }\n case actions.SET_MODIFIED_DATA: {\n draftState.isLoadingForDataToBeSet = false;\n draftState.initialData = action.schemaToSet;\n draftState.modifiedData = action.schemaToSet;\n\n // Reset the state with the initial data\n // All created components and content types will be lost\n if (!action.hasJustCreatedSchema) {\n draftState.components = state.initialComponents;\n draftState.contentTypes = state.initialContentTypes;\n }\n\n break;\n }\n case actions.UPDATE_SCHEMA: {\n const {\n data: { displayName, category, icon, kind },\n schemaType,\n uid,\n } = action;\n\n draftState.modifiedData[schemaType].schema.displayName = displayName;\n\n if (action.schemaType === 'component') {\n draftState.modifiedData.component.category = category;\n draftState.modifiedData.component.schema.icon = icon;\n const addedComponent = current(draftState.modifiedData.component);\n draftState.components[uid as string] = addedComponent;\n\n break;\n }\n\n draftState.modifiedData.contentType.schema.kind = kind;\n\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport { initialState, reducer };\n","import slugify from '@sindresorhus/slugify';\n\nexport const nameToSlug = (name: string) => slugify(name, { separator: '-' });\n","export const ON_CHANGE = 'ContentTypeBuilder/FormModal/ON_CHANGE';\nexport const ON_CHANGE_RELATION_TARGET = 'ContentTypeBuilder/FormModal/ON_CHANGE_RELATION_TARGET';\nexport const ON_CHANGE_RELATION_TYPE = 'ContentTypeBuilder/FormModal/ON_CHANGE_RELATION_TYPE';\nexport const RESET_PROPS = 'ContentTypeBuilder/FormModal/RESET_PROPS';\nexport const RESET_PROPS_AND_SET_FORM_FOR_ADDING_AN_EXISTING_COMPO =\n 'ContentTypeBuilder/FormModal/RESET_PROPS_AND_SET_FORM_FOR_ADDING_AN_EXISTING_COMPO';\nexport const RESET_PROPS_AND_SAVE_CURRENT_DATA =\n 'ContentTypeBuilder/FormModal/RESET_PROPS_AND_SAVE_CURRENT_DATA';\nexport const RESET_PROPS_AND_SET_THE_FORM_FOR_ADDING_A_COMPO_TO_A_DZ =\n 'ContentTypeBuilder/FormModal/RESET_PROPS_AND_SET_THE_FORM_FOR_ADDING_A_COMPO_TO_A_DZ';\nexport const SET_DATA_TO_EDIT = 'ContentTypeBuilder/FormModal/SET_DATA_TO_EDIT';\nexport const SET_ATTRIBUTE_DATA_SCHEMA = 'ContentTypeBuilder/FormModal/SET_ATTRIBUTE_DATA_SCHEMA';\nexport const SET_CUSTOM_FIELD_DATA_SCHEMA =\n 'ContentTypeBuilder/FormModal/SET_CUSTOM_FIELD_DATA_SCHEMA';\nexport const SET_DYNAMIC_ZONE_DATA_SCHEMA =\n 'ContentTypeBuilder/FormModal/SET_DYNAMIC_ZONE_DATA_SCHEMA';\nexport const SET_ERRORS = 'ContentTypeBuilder/FormModal/SET_ERRORS';\n","import { nameToSlug } from '../../../utils/nameToSlug';\n\nimport type { Internal } from '@strapi/types';\n\nconst createUid = (name: string): Internal.UID.ContentType => {\n const modelName = nameToSlug(name);\n return `api::${modelName}.${modelName}`;\n};\n\n// From `content-type-builder/services/Components/createComponentUid`\nconst createComponentUid = (name: string, category: string): Internal.UID.Component => {\n return `${nameToSlug(category)}.${nameToSlug(name)}`;\n};\n\nexport { createComponentUid, createUid };\n","export const customFieldDefaultOptionsReducer = (acc: any, option: any) => {\n if (option.items) {\n return option.items.reduce(customFieldDefaultOptionsReducer, acc);\n }\n\n if ('defaultValue' in option) {\n const { name, defaultValue } = option;\n acc.push({ name, defaultValue });\n }\n\n return acc;\n};\n","/* eslint-disable no-confusing-arrow */\n\nimport type { Schema } from '@strapi/types';\n\nconst shouldPluralizeName = (nature: Schema.Attribute.RelationKind.Any) =>\n ['manyToMany', 'oneToMany', 'manyWay'].includes(nature) ? 2 : 1;\n\nconst shouldPluralizeTargetAttribute = (nature: Schema.Attribute.RelationKind.Any) =>\n ['manyToMany', 'manyToOne'].includes(nature) ? 2 : 1;\n\nexport { shouldPluralizeName, shouldPluralizeTargetAttribute };\n","import { produce } from 'immer';\nimport set from 'lodash/set';\nimport snakeCase from 'lodash/snakeCase';\nimport pluralize from 'pluralize';\n\nimport { getRelationType } from '../../utils/getRelationType';\nimport { nameToSlug } from '../../utils/nameToSlug';\n\nimport * as actions from './constants';\nimport { createComponentUid } from './utils/createUid';\nimport { customFieldDefaultOptionsReducer } from './utils/customFieldDefaultOptionsReducer';\nimport { shouldPluralizeName, shouldPluralizeTargetAttribute } from './utils/relations';\n\nimport type { AnyAction } from '@reduxjs/toolkit';\n\nconst initialState: any = {\n formErrors: {},\n modifiedData: {},\n initialData: {},\n componentToCreate: {},\n isCreatingComponentWhileAddingAField: false,\n};\n\nconst reducer = (state = initialState, action: AnyAction) =>\n // eslint-disable-next-line consistent-return\n produce(state, (draftState: any) => {\n switch (action.type) {\n case actions.ON_CHANGE: {\n const { keys, value } = action;\n const obj = state.modifiedData;\n const hasDefaultValue = Boolean(obj.default);\n\n // There is no need to remove the default key if the default value isn't defined\n if (hasDefaultValue && keys.length === 1 && keys.includes('type')) {\n const previousType = obj.type;\n\n if (previousType && ['date', 'datetime', 'time'].includes(previousType)) {\n // return obj.updateIn(keys, () => value).remove('default');\n delete draftState.modifiedData.default;\n }\n }\n\n set(draftState, ['modifiedData', ...keys], value);\n\n break;\n }\n case actions.ON_CHANGE_RELATION_TARGET: {\n const {\n target: {\n oneThatIsCreatingARelationWithAnother,\n selectedContentTypeFriendlyName,\n targetContentTypeAllowedRelations,\n value,\n },\n } = action;\n // Special case for the admin user...\n let didChangeRelationTypeBecauseOfRestrictedRelation = false;\n let changedRelationType = null;\n\n set(draftState, ['modifiedData', 'target'], value);\n\n const modifiedData = state.modifiedData;\n\n // Don't change the relation type if the allowed relations are not restricted\n // TODO: replace with an obj { relation: 'x', bidirctional: true|false } when BE ready\n if (Array.isArray(targetContentTypeAllowedRelations)) {\n const currentRelationType = getRelationType(\n modifiedData.relation,\n modifiedData.targetAttribute\n );\n\n if (!targetContentTypeAllowedRelations.includes(currentRelationType)) {\n const relationToSet = targetContentTypeAllowedRelations[0];\n didChangeRelationTypeBecauseOfRestrictedRelation = true;\n changedRelationType = relationToSet;\n\n if (relationToSet === 'oneWay') {\n set(draftState, ['modifiedData', 'relation'], 'oneToOne');\n } else if (relationToSet === 'manyWay') {\n set(draftState, ['modifiedData', 'relation'], 'oneToMany');\n } else {\n set(draftState, ['modifiedData', 'relation'], relationToSet);\n }\n }\n }\n\n let nameToSet;\n\n if (didChangeRelationTypeBecauseOfRestrictedRelation) {\n nameToSet = pluralize(\n snakeCase(nameToSlug(selectedContentTypeFriendlyName)),\n shouldPluralizeName(changedRelationType)\n );\n } else {\n nameToSet = pluralize(\n snakeCase(nameToSlug(selectedContentTypeFriendlyName)),\n\n shouldPluralizeName(modifiedData.relation)\n );\n }\n\n set(draftState, ['modifiedData', 'name'], nameToSet);\n\n const currentTargetAttribute = state.modifiedData.targetAttribute;\n\n if (currentTargetAttribute === null) {\n break;\n }\n\n // Changing the target and the relation is either oneWay or manyWay\n // Case when we need to change the relation to oneWay (ex: admin user)\n if (\n didChangeRelationTypeBecauseOfRestrictedRelation &&\n ['oneWay', 'manyWay'].includes(changedRelationType)\n ) {\n set(draftState, ['modifiedData', 'targetAttribute'], null);\n\n break;\n }\n\n const targetAttributeToSet = pluralize(\n snakeCase(nameToSlug(oneThatIsCreatingARelationWithAnother)),\n shouldPluralizeTargetAttribute(modifiedData.relation)\n );\n\n set(draftState, ['modifiedData', 'targetAttribute'], targetAttributeToSet);\n\n break;\n }\n case actions.ON_CHANGE_RELATION_TYPE: {\n const {\n target: { oneThatIsCreatingARelationWithAnother, value },\n } = action;\n\n const currentName = state.modifiedData.name;\n\n // Switching from oneWay\n if (!['oneWay', 'manyWay'].includes(value)) {\n set(draftState, ['modifiedData', 'relation'], value);\n const currentTargetAttribute = state.modifiedData.targetAttribute;\n\n set(\n draftState,\n ['modifiedData', 'name'],\n pluralize(snakeCase(nameToSlug(currentName)), shouldPluralizeName(value))\n );\n\n set(\n draftState,\n ['modifiedData', 'targetAttribute'],\n pluralize(\n currentTargetAttribute ||\n snakeCase(nameToSlug(oneThatIsCreatingARelationWithAnother)),\n shouldPluralizeTargetAttribute(value)\n )\n );\n\n break;\n }\n\n if (value === 'oneWay') {\n set(draftState, ['modifiedData', 'relation'], 'oneToOne');\n set(draftState, ['modifiedData', 'targetAttribute'], null);\n set(draftState, ['modifiedData', 'name'], pluralize(snakeCase(currentName), 1));\n\n break;\n }\n\n // manyWay\n set(draftState, ['modifiedData', 'relation'], 'oneToMany');\n set(draftState, ['modifiedData', 'targetAttribute'], null);\n set(draftState, ['modifiedData', 'name'], pluralize(snakeCase(currentName), 2));\n\n break;\n }\n\n case actions.RESET_PROPS:\n return initialState;\n case actions.RESET_PROPS_AND_SET_FORM_FOR_ADDING_AN_EXISTING_COMPO: {\n // This is run when the user doesn't want to create a new component\n\n const nextState = {\n ...initialState,\n modifiedData: {\n type: 'component',\n repeatable: true,\n ...action.options,\n },\n };\n\n return nextState;\n }\n case actions.RESET_PROPS_AND_SAVE_CURRENT_DATA: {\n // This is run when the user has created a new component\n const componentToCreate = state.modifiedData.componentToCreate;\n const modifiedData = {\n displayName: componentToCreate.displayName,\n type: 'component',\n repeatable: false,\n ...action.options,\n component: createComponentUid(componentToCreate.displayName, componentToCreate.category),\n };\n\n const nextState = {\n ...initialState,\n componentToCreate,\n modifiedData,\n isCreatingComponentWhileAddingAField: state.modifiedData.createComponent,\n };\n\n return nextState;\n }\n case actions.RESET_PROPS_AND_SET_THE_FORM_FOR_ADDING_A_COMPO_TO_A_DZ: {\n const createdDZ = state.modifiedData;\n const dataToSet = {\n ...createdDZ,\n createComponent: true,\n componentToCreate: { type: 'component' },\n };\n\n return { ...initialState, modifiedData: dataToSet };\n }\n case actions.SET_DATA_TO_EDIT: {\n draftState.modifiedData = action.data;\n draftState.initialData = action.data;\n break;\n }\n case actions.SET_ATTRIBUTE_DATA_SCHEMA: {\n const {\n attributeType,\n isEditing,\n modifiedDataToSetForEditing,\n nameToSetForRelation,\n targetUid,\n step,\n options = {},\n } = action;\n\n if (isEditing) {\n draftState.modifiedData = modifiedDataToSetForEditing;\n draftState.initialData = modifiedDataToSetForEditing;\n\n break;\n }\n\n let dataToSet;\n\n if (attributeType === 'component') {\n if (step === '1') {\n dataToSet = {\n type: 'component',\n createComponent: true,\n componentToCreate: { type: 'component' },\n };\n } else {\n dataToSet = {\n ...options,\n type: 'component',\n repeatable: true,\n };\n }\n } else if (attributeType === 'dynamiczone') {\n dataToSet = {\n ...options,\n type: 'dynamiczone',\n components: [],\n };\n } else if (attributeType === 'text') {\n dataToSet = { ...options, type: 'string' };\n } else if (attributeType === 'number' || attributeType === 'date') {\n dataToSet = options;\n } else if (attributeType === 'media') {\n dataToSet = {\n allowedTypes: ['images', 'files', 'videos', 'audios'],\n type: 'media',\n multiple: true,\n ...options,\n };\n } else if (attributeType === 'enumeration') {\n dataToSet = { ...options, type: 'enumeration', enum: [] };\n } else if (attributeType === 'relation') {\n dataToSet = {\n name: snakeCase(nameToSetForRelation),\n relation: 'oneToOne',\n targetAttribute: null,\n target: targetUid,\n type: 'relation',\n };\n } else {\n dataToSet = { ...options, type: attributeType, default: null };\n }\n\n draftState.modifiedData = dataToSet;\n\n break;\n }\n case actions.SET_CUSTOM_FIELD_DATA_SCHEMA: {\n const { customField, isEditing, modifiedDataToSetForEditing, options = {} } = action;\n\n if (isEditing) {\n draftState.modifiedData = modifiedDataToSetForEditing;\n draftState.initialData = modifiedDataToSetForEditing;\n\n break;\n }\n\n draftState.modifiedData = { ...options, type: customField.type };\n\n const allOptions = [\n ...(customField?.options?.base || []),\n ...(customField?.options?.advanced || []),\n ];\n\n const optionDefaults = allOptions.reduce(customFieldDefaultOptionsReducer, []);\n\n if (optionDefaults.length) {\n optionDefaults.forEach(({ name, defaultValue }: { name: string; defaultValue: string }) =>\n set(draftState.modifiedData, name, defaultValue)\n );\n }\n\n break;\n }\n case actions.SET_DYNAMIC_ZONE_DATA_SCHEMA: {\n draftState.modifiedData = action.attributeToEdit;\n draftState.initialData = action.attributeToEdit;\n break;\n }\n case actions.SET_ERRORS: {\n draftState.formErrors = action.errors;\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport { initialState, reducer };\n","import { reducer } from './components/DataManagerProvider/reducer';\nimport { reducer as formModalReducer } from './components/FormModal/reducer';\nimport { pluginId } from './pluginId';\n\nexport const reducers = {\n [`${pluginId}_formModal`]: formModalReducer,\n [`${pluginId}_dataManagerProvider`]: reducer,\n};\n","import cloneDeep from 'lodash/cloneDeep';\nimport get from 'lodash/get';\nimport * as yup from 'yup';\n// TODO V5 Convert any into real types\nexport const formsAPI: any = {\n components: {\n inputs: {} as Record<string, any>,\n add({ id, component }: { id: string; component: any }) {\n if (!this.inputs[id]) {\n this.inputs[id] = component;\n }\n },\n },\n types: {\n attribute: {\n // test: {\n // validators: [],\n // form: {\n // advanced: [\n // /* cb */\n // ],\n // base: [\n // /* cb */\n // ],\n // },\n // },\n },\n contentType: {\n validators: [],\n form: {\n advanced: [],\n base: [],\n },\n },\n component: {\n validators: [],\n form: {\n advanced: [],\n base: [],\n },\n },\n },\n contentTypeSchemaMutations: [],\n addContentTypeSchemaMutation(cb: any) {\n this.contentTypeSchemaMutations.push(cb);\n },\n extendContentType({ validator, form: { advanced, base } }: any) {\n const { contentType } = this.types;\n\n contentType.validators.push(validator);\n contentType.form.advanced.push(advanced);\n contentType.form.base.push(base);\n },\n extendFields(fields: any, { validator, form: { advanced, base } }: any) {\n const formType = this.types.attribute;\n\n fields.forEach((field: any) => {\n if (!formType[field]) {\n formType[field] = {\n validators: [],\n form: {\n advanced: [\n /* cb */\n ],\n base: [\n /* cb */\n ],\n },\n };\n }\n\n formType[field].validators.push(validator);\n formType[field].form.advanced.push(advanced);\n formType[field].form.base.push(base);\n });\n },\n\n getAdvancedForm(target: any, props = null) {\n const sectionsToAdd = get(this.types, [...target, 'form', 'advanced'], []).reduce(\n (acc: any, current: any) => {\n const sections = current(props);\n\n return [...acc, ...sections];\n },\n []\n );\n\n return sectionsToAdd;\n },\n\n makeCustomFieldValidator(attributeShape: any, validator: any, ...validatorArgs: any) {\n // When no validator, return the attribute shape\n if (!validator) return attributeShape;\n\n // Otherwise extend the shape with the provided validator\n return attributeShape.shape({ options: yup.object().shape(validator(validatorArgs)) });\n },\n\n makeValidator(target: any, initShape: any, ...args: any) {\n const validators = get(this.types, [...target, 'validators'], []);\n\n const pluginOptionsShape = validators.reduce((acc: any, current: any) => {\n const pluginOptionShape = current(args);\n\n return { ...acc, ...pluginOptionShape };\n }, {});\n\n return initShape.shape({ pluginOptions: yup.object().shape(pluginOptionsShape) });\n },\n mutateContentTypeSchema(data: Record<string, unknown>, initialData: Record<string, unknown>) {\n let enhancedData: any = cloneDeep(data);\n\n const refData: any = cloneDeep(initialData);\n\n this.contentTypeSchemaMutations.forEach((cb: any) => {\n enhancedData = cb(enhancedData, refData);\n });\n\n return enhancedData;\n },\n};\n","type TradOptions = Record<string, string>;\n\nconst prefixPluginTranslations = (trad: TradOptions, pluginId: string): TradOptions => {\n if (!pluginId) {\n throw new TypeError(\"pluginId can't be empty\");\n }\n return Object.keys(trad).reduce((acc, current) => {\n acc[`${pluginId}.${current}`] = trad[current];\n return acc;\n }, {} as TradOptions);\n};\n\nexport { prefixPluginTranslations };\n","import { Layout } from '@strapi/icons';\n\nimport pluginPkg from '../../package.json';\n\nimport { PERMISSIONS } from './constants';\nimport { pluginId } from './pluginId';\nimport { reducers } from './reducers';\nimport { formsAPI } from './utils/formAPI';\nimport { prefixPluginTranslations } from './utils/prefixPluginTranslations';\n\nconst name = pluginPkg.strapi.name;\n\n// eslint-disable-next-line import/no-default-export\nexport default {\n register(app: any) {\n app.addReducers(reducers);\n app.addMenuLink({\n to: `plugins/${pluginId}`,\n icon: Layout,\n intlLabel: {\n id: `${pluginId}.plugin.name`,\n defaultMessage: 'Content Types Builder',\n },\n permissions: PERMISSIONS.main,\n Component: () => import('./pages/App'),\n position: 5,\n });\n\n app.registerPlugin({\n id: pluginId,\n name,\n // Internal APIs exposed by the CTB for the other plugins to use\n apis: {\n forms: formsAPI,\n },\n });\n },\n bootstrap() {},\n async registerTrads({ locales }: { locales: string[] }) {\n const importedTrads = await Promise.all(\n locales.map((locale) => {\n return import(`./translations/${locale}.json`)\n .then(({ default: data }) => {\n return {\n data: prefixPluginTranslations(data, pluginId),\n locale,\n };\n })\n .catch(() => {\n return {\n data: {},\n locale,\n };\n });\n })\n );\n\n return Promise.resolve(importedTrads);\n },\n};\n"],"names":["current","initialState","name","reducer","actions.ADD_ATTRIBUTE","actions.ADD_CREATED_COMPONENT_TO_DYNAMIC_ZONE","actions.ADD_CUSTOM_FIELD_ATTRIBUTE","actions.CHANGE_DYNAMIC_ZONE_COMPONENTS","actions.CREATE_COMPONENT_SCHEMA","actions.CREATE_SCHEMA","actions.EDIT_ATTRIBUTE","actions.EDIT_CUSTOM_FIELD_ATTRIBUTE","actions.GET_DATA_SUCCEEDED","actions.UPDATE_INITIAL_STATE","actions.DELETE_NOT_SAVED_TYPE","actions.RELOAD_PLUGIN","actions.REMOVE_COMPONENT_FROM_DYNAMIC_ZONE","actions.REMOVE_FIELD","actions.REMOVE_FIELD_FROM_DISPLAYED_COMPONENT","actions.SET_MODIFIED_DATA","actions.UPDATE_SCHEMA","produce","actions.ON_CHANGE","actions.ON_CHANGE_RELATION_TARGET","actions.ON_CHANGE_RELATION_TYPE","actions.RESET_PROPS","actions.RESET_PROPS_AND_SET_FORM_FOR_ADDING_AN_EXISTING_COMPO","actions.RESET_PROPS_AND_SAVE_CURRENT_DATA","actions.RESET_PROPS_AND_SET_THE_FORM_FOR_ADDING_A_COMPO_TO_A_DZ","actions.SET_DATA_TO_EDIT","actions.SET_ATTRIBUTE_DATA_SCHEMA","actions.SET_CUSTOM_FIELD_DATA_SCHEMA","actions.SET_DYNAMIC_ZONE_DATA_SCHEMA","actions.SET_ERRORS","formModalReducer","pluginId"],"mappings":"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"}