@strapi/content-type-builder 5.0.0-beta.6 → 5.0.0-beta.7
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-BG19KtnI.js → ListView-BuXQ605A.js} +28 -32
- package/dist/_chunks/ListView-BuXQ605A.js.map +1 -0
- package/dist/_chunks/{ListView-C-9-V_FI.mjs → ListView-C4hI-wBm.mjs} +16 -19
- package/dist/_chunks/ListView-C4hI-wBm.mjs.map +1 -0
- package/dist/_chunks/{index-ClkMXXk0.js → index-2ofTO2HM.js} +410 -553
- package/dist/_chunks/index-2ofTO2HM.js.map +1 -0
- package/dist/_chunks/{index-BfUcwV-B.js → index-CH93OgkC.js} +12 -14
- package/dist/_chunks/index-CH93OgkC.js.map +1 -0
- package/dist/_chunks/{index-BtxPpV-M.mjs → index-CPBF498m.mjs} +398 -540
- package/dist/_chunks/index-CPBF498m.mjs.map +1 -0
- package/dist/_chunks/{index-CBlX4byY.mjs → index-DmqlavBo.mjs} +12 -14
- package/dist/_chunks/index-DmqlavBo.mjs.map +1 -0
- package/dist/admin/index.js +2 -1
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +2 -1
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/src/components/AttributeOptions/OptionBoxWrapper.d.ts +4 -1
- package/dist/admin/src/components/BoxWrapper.d.ts +4 -1
- package/dist/admin/src/components/CustomRadioGroup/Styles.d.ts +4 -1
- package/dist/admin/src/components/ListRow.d.ts +3 -1
- package/dist/admin/src/components/Relation/RelationNaturePicker/Components.d.ts +12 -46
- package/dist/admin/src/components/Tr.d.ts +5 -6
- package/package.json +10 -10
- package/dist/_chunks/ListView-BG19KtnI.js.map +0 -1
- package/dist/_chunks/ListView-C-9-V_FI.mjs.map +0 -1
- package/dist/_chunks/index-BfUcwV-B.js.map +0 -1
- package/dist/_chunks/index-BtxPpV-M.mjs.map +0 -1
- package/dist/_chunks/index-CBlX4byY.mjs.map +0 -1
- package/dist/_chunks/index-ClkMXXk0.js.map +0 -1
- package/dist/admin/src/components/PluginIcon.d.ts +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ListView-BG19KtnI.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\ninterface TrProps {\n isFromDynamicZone?: boolean;\n isChildOfDynamicZone?: boolean;\n}\n\n// Keep component-row for css specificity\nexport const Tr = styled.tr<TrProps>`\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\n ${CloseButton} {\n display: block;\n }\n\n ${Typography} {\n color: ${({ theme }) => theme.colors.primary600};\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 as=\"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} as=\"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 \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 as=\"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 \n <span style={{ fontStyle: 'italic' }}>\n <UpperFirst content={contentTypeFriendlyName} />\n \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 noBorder\n icon={<Pencil />}\n />\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 noBorder\n icon={<Trash />}\n />\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 } from '@strapi/admin/strapi-admin';\nimport { Box, Button, ContentLayout, Flex, HeaderLayout } 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 <HeaderLayout\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 <ContentLayout>\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 </ContentLayout>\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","Typography","index","jsxs","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","HeaderLayout","Check","BackButton","ContentLayout"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ListView-C-9-V_FI.mjs","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\ninterface TrProps {\n isFromDynamicZone?: boolean;\n isChildOfDynamicZone?: boolean;\n}\n\n// Keep component-row for css specificity\nexport const Tr = styled.tr<TrProps>`\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\n ${CloseButton} {\n display: block;\n }\n\n ${Typography} {\n color: ${({ theme }) => theme.colors.primary600};\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 as=\"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} as=\"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 \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 as=\"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 \n <span style={{ fontStyle: 'italic' }}>\n <UpperFirst content={contentTypeFriendlyName} />\n \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 noBorder\n icon={<Pencil />}\n />\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 noBorder\n icon={<Trash />}\n />\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 } from '@strapi/admin/strapi-admin';\nimport { Box, Button, ContentLayout, Flex, HeaderLayout } 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 <HeaderLayout\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 <ContentLayout>\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 </ContentLayout>\n </>\n );\n};\n\n// eslint-disable-next-line import/no-default-export\nexport default ListView;\n"],"names":["BoxWrapper","Tr","Fragment","forTarget","targetUid","usePrompt"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-BfUcwV-B.js","sources":["../../admin/src/components/PluginIcon.tsx","../../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":["import { Layout } from '@strapi/icons';\n\nexport const PluginIcon = () => <Layout />;\n","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 pluginPkg from '../../package.json';\n\nimport { PluginIcon } from './components/PluginIcon';\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: PluginIcon,\n intlLabel: {\n id: `${pluginId}.plugin.name`,\n defaultMessage: 'Content Types Builder',\n },\n permissions: PERMISSIONS.main,\n Component: () => import('./pages/App'),\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":["jsx","Layout","get","initialState","name","reducer","produce","actions.ADD_ATTRIBUTE","set","actions.ADD_CREATED_COMPONENT_TO_DYNAMIC_ZONE","actions.ADD_CUSTOM_FIELD_ATTRIBUTE","actions.CHANGE_DYNAMIC_ZONE_COMPONENTS","current","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","slugify","actions.ON_CHANGE","actions.ON_CHANGE_RELATION_TARGET","pluralize","snakeCase","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","yup","cloneDeep","pluginId"],"mappings":"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"}
|