@strapi/content-type-builder 5.0.0-rc.9 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_chunks/{ListView-BUKiiZrv.js → ListView-CxvINB8V.js} +12 -11
- package/dist/_chunks/ListView-CxvINB8V.js.map +1 -0
- package/dist/_chunks/{ListView-B33vu6Br.mjs → ListView-D1VH47yt.mjs} +12 -11
- package/dist/_chunks/ListView-D1VH47yt.mjs.map +1 -0
- package/dist/_chunks/{index-Hl6JWkwo.js → index-BVbHj3Bu.js} +101 -177
- package/dist/_chunks/index-BVbHj3Bu.js.map +1 -0
- package/dist/_chunks/{index-BxeoMEGY.mjs → index-Bd7-GZsY.mjs} +156 -16
- package/dist/_chunks/index-Bd7-GZsY.mjs.map +1 -0
- package/dist/_chunks/{index-nJaZni0J.js → index-Be2fSfxp.js} +146 -5
- package/dist/_chunks/index-Be2fSfxp.js.map +1 -0
- package/dist/_chunks/{index-CCJpNwsW.mjs → index-S6EtktTB.mjs} +105 -181
- package/dist/_chunks/index-S6EtktTB.mjs.map +1 -0
- package/dist/admin/index.js +5 -2
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +4 -2
- package/dist/admin/src/components/FormModal/attributes/form.d.ts +1 -1
- package/dist/admin/src/components/FormModal/utils/relations.d.ts +2 -2
- package/dist/admin/src/components/FormModalNavigationProvider/constants.d.ts +1 -0
- package/dist/admin/src/contexts/FormModalNavigationContext.d.ts +2 -0
- package/dist/admin/src/exports.d.ts +15 -0
- package/dist/admin/src/index.d.ts +1 -0
- package/dist/admin/src/utils/parseDateValue.d.ts +1 -0
- package/dist/admin/src/utils/timeFormat.d.ts +16 -0
- package/dist/server/index.js +91 -54
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +92 -55
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/src/controllers/validation/model-schema.d.ts.map +1 -1
- package/dist/server/src/services/builder.d.ts +4 -0
- package/dist/server/src/services/builder.d.ts.map +1 -1
- package/dist/server/src/services/constants.d.ts +0 -1
- package/dist/server/src/services/constants.d.ts.map +1 -1
- package/dist/server/src/services/schema-builder/content-type-builder.d.ts.map +1 -1
- package/package.json +9 -8
- package/dist/_chunks/ListView-B33vu6Br.mjs.map +0 -1
- package/dist/_chunks/ListView-BUKiiZrv.js.map +0 -1
- package/dist/_chunks/index-BxeoMEGY.mjs.map +0 -1
- package/dist/_chunks/index-CCJpNwsW.mjs.map +0 -1
- package/dist/_chunks/index-Hl6JWkwo.js.map +0 -1
- package/dist/_chunks/index-nJaZni0J.js.map +0 -1
- package/strapi-server.js +0 -3
|
@@ -13,7 +13,7 @@ const reactRouterDom = require("react-router-dom");
|
|
|
13
13
|
const styledComponents = require("styled-components");
|
|
14
14
|
const React = require("react");
|
|
15
15
|
const Symbols = require("@strapi/icons/symbols");
|
|
16
|
-
const index = require("./index-
|
|
16
|
+
const index = require("./index-BVbHj3Bu.js");
|
|
17
17
|
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
18
18
|
const get__default = /* @__PURE__ */ _interopDefault(get);
|
|
19
19
|
const has__default = /* @__PURE__ */ _interopDefault(has);
|
|
@@ -445,8 +445,8 @@ const List = ({
|
|
|
445
445
|
...isMain && { style: { overflowX: "auto" } },
|
|
446
446
|
children: /* @__PURE__ */ jsxRuntime.jsxs("table", { children: [
|
|
447
447
|
isMain && /* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
|
|
448
|
-
/* @__PURE__ */ jsxRuntime.jsx("th", { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", textColor: "
|
|
449
|
-
/* @__PURE__ */ jsxRuntime.jsx("th", { colSpan: 2, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", textColor: "
|
|
448
|
+
/* @__PURE__ */ jsxRuntime.jsx("th", { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", textColor: "neutral800", children: formatMessage({ id: "global.name", defaultMessage: "Name" }) }) }),
|
|
449
|
+
/* @__PURE__ */ jsxRuntime.jsx("th", { colSpan: 2, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", textColor: "neutral800", children: formatMessage({ id: "global.type", defaultMessage: "Type" }) }) })
|
|
450
450
|
] }) }),
|
|
451
451
|
/* @__PURE__ */ jsxRuntime.jsx("tbody", { children: items.map((item) => {
|
|
452
452
|
const { type } = item;
|
|
@@ -568,7 +568,7 @@ const DisplayedType = ({
|
|
|
568
568
|
defaultMessage: "Custom field"
|
|
569
569
|
}) });
|
|
570
570
|
}
|
|
571
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { children: [
|
|
571
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { textColor: "neutral800", children: [
|
|
572
572
|
formatMessage({
|
|
573
573
|
id: index.getTrad(`attribute.${readableType}`),
|
|
574
574
|
defaultMessage: type
|
|
@@ -645,10 +645,10 @@ const ListRow = React.memo(
|
|
|
645
645
|
loopNumber !== 0 && /* @__PURE__ */ jsxRuntime.jsx(Curve, { color: isFromDynamicZone ? "primary200" : "neutral150" }),
|
|
646
646
|
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { paddingLeft: 2, gap: 4, children: [
|
|
647
647
|
/* @__PURE__ */ jsxRuntime.jsx(index.AttributeIcon, { type: src, customField }),
|
|
648
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { fontWeight: "bold", children: name })
|
|
648
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "neutral800", fontWeight: "bold", children: name })
|
|
649
649
|
] })
|
|
650
650
|
] }),
|
|
651
|
-
/* @__PURE__ */ jsxRuntime.jsx("td", { children: target ? /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { children: [
|
|
651
|
+
/* @__PURE__ */ jsxRuntime.jsx("td", { children: target ? /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { textColor: "neutral800", children: [
|
|
652
652
|
formatMessage({
|
|
653
653
|
id: index.getTrad(
|
|
654
654
|
`modelPage.attribute.${isMorph ? "relation-polymorphic" : "relationWith"}`
|
|
@@ -790,12 +790,13 @@ const LinkToCMSettingsView = React.memo(
|
|
|
790
790
|
if (!isInContentTypeView) {
|
|
791
791
|
permissionsToApply = componentsConfigurations;
|
|
792
792
|
}
|
|
793
|
-
const {
|
|
794
|
-
allowedActions: { canViewConfig }
|
|
795
|
-
} = strapiAdmin.useRBAC({
|
|
793
|
+
const { isLoading, allowedActions } = strapiAdmin.useRBAC({
|
|
796
794
|
viewConfig: permissionsToApply
|
|
797
795
|
});
|
|
798
|
-
if (
|
|
796
|
+
if (isLoading) {
|
|
797
|
+
return null;
|
|
798
|
+
}
|
|
799
|
+
if (!allowedActions.canConfigureView) {
|
|
799
800
|
return null;
|
|
800
801
|
}
|
|
801
802
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -960,4 +961,4 @@ const ListView = () => {
|
|
|
960
961
|
] });
|
|
961
962
|
};
|
|
962
963
|
exports.default = ListView;
|
|
963
|
-
//# sourceMappingURL=ListView-
|
|
964
|
+
//# sourceMappingURL=ListView-CxvINB8V.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ListView-CxvINB8V.js","sources":["../../admin/src/components/BoxWrapper.tsx","../../admin/src/components/Tr.tsx","../../admin/src/components/ComponentList.tsx","../../admin/src/components/ComponentCard/ComponentIcon/ComponentIcon.tsx","../../admin/src/components/ComponentCard/ComponentCard.tsx","../../admin/src/components/DynamicZoneList.tsx","../../admin/src/components/NestedFooter.tsx","../../admin/src/components/List.tsx","../../admin/src/icons/Curve.tsx","../../admin/src/components/DisplayedType.tsx","../../admin/src/components/UpperFirst.tsx","../../admin/src/components/ListRow.tsx","../../admin/src/utils/getAttributeDisplayedType.ts","../../admin/src/pages/ListView/LinkToCMSettingsView.tsx","../../admin/src/pages/ListView/ListView.tsx"],"sourcesContent":["import { Box } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nexport const BoxWrapper = styled(Box)`\n table {\n width: 100%;\n white-space: nowrap;\n }\n\n thead {\n border-bottom: 1px solid ${({ theme }) => theme.colors.neutral150};\n\n tr {\n border-top: 0;\n }\n }\n\n tr {\n border-top: 1px solid ${({ theme }) => theme.colors.neutral150};\n\n & td,\n & th {\n padding: ${({ theme }) => theme.spaces[4]};\n }\n\n & td:first-of-type,\n & th:first-of-type {\n padding: 0 ${({ theme }) => theme.spaces[1]};\n }\n }\n\n th,\n td {\n vertical-align: middle;\n text-align: left;\n color: ${({ theme }) => theme.colors.neutral600};\n outline-offset: -4px;\n }\n`;\n","import { styled } from 'styled-components';\n\n// Keep component-row for css specificity\nexport const Tr = styled.tr<{\n $isFromDynamicZone?: boolean;\n $isChildOfDynamicZone?: boolean;\n}>`\n &.component-row,\n &.dynamiczone-row {\n position: relative;\n border-top: none !important;\n\n table tr:first-child {\n border-top: none;\n }\n\n > td:first-of-type {\n padding: 0 0 0 2rem;\n position: relative;\n\n &::before {\n content: '';\n width: 0.4rem;\n height: calc(100% - 40px);\n position: absolute;\n top: -7px;\n left: 2.6rem;\n border-radius: 4px;\n\n ${({ $isFromDynamicZone, $isChildOfDynamicZone, theme }) => {\n if ($isChildOfDynamicZone) {\n return `background-color: ${theme.colors.primary200};`;\n }\n\n if ($isFromDynamicZone) {\n return `background-color: ${theme.colors.primary200};`;\n }\n\n return `background: ${theme.colors.neutral150};`;\n }}\n }\n }\n }\n\n &.dynamiczone-row > td:first-of-type {\n padding: 0;\n }\n`;\n","import get from 'lodash/get';\n\nimport { useDataManager } from '../hooks/useDataManager';\n\nimport { List } from './List';\nimport { Tr } from './Tr';\n\nimport type { Internal } from '@strapi/types';\n\ninterface ComponentListProps {\n component: Internal.UID.Component;\n customRowComponent: any;\n firstLoopComponentUid?: string;\n isFromDynamicZone?: boolean;\n isNestedInDZComponent?: boolean;\n}\n\nexport const ComponentList = ({\n customRowComponent,\n component,\n isFromDynamicZone = false,\n isNestedInDZComponent = false,\n firstLoopComponentUid,\n}: ComponentListProps) => {\n const { modifiedData } = useDataManager();\n const {\n schema: { attributes },\n } = get(modifiedData, ['components', component], {\n schema: { attributes: [] },\n });\n\n return (\n <Tr $isChildOfDynamicZone={isFromDynamicZone} className=\"component-row\">\n <td colSpan={12}>\n <List\n customRowComponent={customRowComponent}\n items={attributes}\n targetUid={component}\n firstLoopComponentUid={firstLoopComponentUid || component}\n editTarget=\"components\"\n isFromDynamicZone={isFromDynamicZone}\n isNestedInDZComponent={isNestedInDZComponent}\n isSub\n secondLoopComponentUid={firstLoopComponentUid ? component : null}\n />\n </td>\n </Tr>\n );\n};\n","import { Flex } from '@strapi/design-system';\n\nimport { COMPONENT_ICONS } from '../../IconPicker/constants';\n\ninterface ComponentIconProps {\n isActive?: boolean;\n icon?: keyof typeof COMPONENT_ICONS;\n}\n\nexport const ComponentIcon = ({ isActive = false, icon = 'dashboard' }: ComponentIconProps) => {\n const Icon = COMPONENT_ICONS[icon] || COMPONENT_ICONS.dashboard;\n\n return (\n <Flex\n alignItems=\"center\"\n background={isActive ? 'primary200' : 'neutral200'}\n justifyContent=\"center\"\n height={8}\n width={8}\n borderRadius=\"50%\"\n >\n <Icon height=\"2rem\" width=\"2rem\" />\n </Flex>\n );\n};\n","import { Box, Flex, Typography } from '@strapi/design-system';\nimport { Cross } from '@strapi/icons';\nimport get from 'lodash/get';\nimport { styled } from 'styled-components';\n\nimport { useDataManager } from '../../hooks/useDataManager';\n\nimport { ComponentIcon } from './ComponentIcon';\n\ninterface ComponentCardProps {\n component: string;\n dzName: string;\n index: number;\n isActive?: boolean;\n isInDevelopmentMode?: boolean;\n onClick?: () => void;\n}\n\nconst CloseButton = styled(Box)`\n position: absolute;\n display: none;\n top: 5px;\n right: 0.8rem;\n\n svg {\n width: 1rem;\n height: 1rem;\n\n path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n }\n`;\n\nconst ComponentBox = styled(Flex)`\n width: 14rem;\n height: 8rem;\n position: relative;\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n background: ${({ theme }) => theme.colors.neutral100};\n border-radius: ${({ theme }) => theme.borderRadius};\n max-width: 100%;\n\n &.active,\n &:focus,\n &:hover {\n border: 1px solid ${({ theme }) => theme.colors.primary200};\n background: ${({ theme }) => theme.colors.primary100};\n color: ${({ theme }) => theme.colors.primary600};\n\n ${CloseButton} {\n display: block;\n }\n\n /* > ComponentIcon */\n > div:first-child {\n background: ${({ theme }) => theme.colors.primary200};\n color: ${({ theme }) => theme.colors.primary600};\n\n svg {\n path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n }\n }\n }\n`;\n\nexport const ComponentCard = ({\n component,\n dzName,\n index,\n isActive = false,\n isInDevelopmentMode = false,\n onClick,\n}: ComponentCardProps) => {\n const { modifiedData, removeComponentFromDynamicZone } = useDataManager();\n const {\n schema: { icon, displayName },\n } = get(modifiedData, ['components', component], { schema: {} });\n\n const onClose = (e: any) => {\n e.stopPropagation();\n removeComponentFromDynamicZone(dzName, index);\n };\n\n return (\n <ComponentBox\n alignItems=\"center\"\n direction=\"column\"\n className={isActive ? 'active' : ''}\n borderRadius=\"borderRadius\"\n justifyContent=\"center\"\n paddingLeft={4}\n paddingRight={4}\n shrink={0}\n onClick={onClick}\n role=\"tab\"\n tabIndex={isActive ? 0 : -1}\n cursor=\"pointer\"\n aria-selected={isActive}\n aria-controls={`dz-${dzName}-panel-${index}`}\n id={`dz-${dzName}-tab-${index}`}\n >\n <ComponentIcon icon={icon} isActive={isActive} />\n\n <Box marginTop={1} maxWidth=\"100%\">\n <Typography variant=\"pi\" fontWeight=\"bold\" ellipsis>\n {displayName}\n </Typography>\n </Box>\n\n {isInDevelopmentMode && (\n <CloseButton tag=\"button\" onClick={onClose}>\n <Cross />\n </CloseButton>\n )}\n </ComponentBox>\n );\n};\n","import { useState } from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useDataManager } from '../hooks/useDataManager';\nimport { getTrad } from '../utils/getTrad';\n\nimport { ComponentCard } from './ComponentCard';\nimport { ComponentList } from './ComponentList';\nimport { Tr } from './Tr';\n\nimport type { Internal } from '@strapi/types';\n\ninterface DynamicZoneListProps {\n addComponent: (name?: string) => void;\n components: Array<string>;\n customRowComponent?: () => void;\n name?: string;\n targetUid: Internal.UID.Component;\n}\n\nconst StyledAddIcon = styled(Plus)`\n width: 3.2rem;\n height: 3.2rem;\n padding: 0.9rem;\n border-radius: 6.4rem;\n background: ${({ theme }) => theme.colors.primary100};\n path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n`;\n\nconst FixedBox = styled(Box)`\n height: 9rem;\n position: absolute;\n width: 100%;\n top: 0;\n left: 0;\n`;\n\nconst ScrollableStack = styled(Flex)`\n width: 100%;\n overflow-x: auto;\n`;\n\nconst ComponentContentBox = styled(Box)`\n padding-top: 9rem;\n`;\n\nconst ComponentStack = styled(Flex)`\n flex-shrink: 0;\n width: 14rem;\n height: 8rem;\n justify-content: center;\n align-items: center;\n`;\n\nexport const DynamicZoneList = ({\n customRowComponent,\n components = [],\n addComponent,\n name,\n targetUid,\n}: DynamicZoneListProps) => {\n const { isInDevelopmentMode } = useDataManager();\n const [activeTab, setActiveTab] = useState(0);\n const { formatMessage } = useIntl();\n\n const toggle = (tab: number) => {\n if (activeTab !== tab) {\n setActiveTab(tab);\n }\n };\n\n const handleClickAdd = () => {\n addComponent(name);\n };\n\n return (\n <Tr className=\"dynamiczone-row\" $isFromDynamicZone>\n <td colSpan={12}>\n <FixedBox paddingLeft={8}>\n <ScrollableStack gap={2}>\n {isInDevelopmentMode && (\n <button type=\"button\" onClick={handleClickAdd}>\n <ComponentStack direction=\"column\" alignItems=\"stretch\" gap={1}>\n <StyledAddIcon />\n <Typography variant=\"pi\" fontWeight=\"bold\" textColor=\"primary600\">\n {formatMessage({\n id: getTrad('button.component.add'),\n defaultMessage: 'Add a component',\n })}\n </Typography>\n </ComponentStack>\n </button>\n )}\n <Flex role=\"tablist\" gap={2}>\n {components.map((component, index) => {\n return (\n <ComponentCard\n key={component}\n dzName={name || ''}\n index={index}\n component={component}\n isActive={activeTab === index}\n isInDevelopmentMode={isInDevelopmentMode}\n onClick={() => toggle(index)}\n />\n );\n })}\n </Flex>\n </ScrollableStack>\n </FixedBox>\n <ComponentContentBox>\n {components.map((component, index) => {\n const props = {\n customRowComponent,\n component,\n };\n\n return (\n <Box\n id={`dz-${name}-panel-${index}`}\n role=\"tabpanel\"\n aria-labelledby={`dz-${name}-tab-${index}`}\n key={component}\n style={{ display: activeTab === index ? 'block' : 'none' }}\n >\n <table>\n <tbody>\n <ComponentList\n {...props}\n isFromDynamicZone\n component={targetUid}\n key={component}\n />\n </tbody>\n </table>\n </Box>\n );\n })}\n </ComponentContentBox>\n </td>\n </Tr>\n );\n};\n","import type { ReactNode } from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nconst IconBox = styled(Box)`\n height: 2.4rem;\n width: 2.4rem;\n border-radius: 50%;\n display: flex;\n justify-content: center;\n align-items: center;\n\n svg {\n height: 1rem;\n width: 1rem;\n }\n\n svg path {\n fill: ${({ theme, color }) => theme.colors[`${color}600`]};\n }\n`;\n\nconst ButtonBox = styled(Box)`\n border-radius: 0 0 ${({ theme }) => theme.borderRadius} ${({ theme }) => theme.borderRadius};\n display: block;\n width: 100%;\n border: none;\n position: relative;\n left: -0.4rem;\n`;\n\ninterface NestedTFooterProps {\n color: string;\n children: ReactNode;\n icon: ReactNode;\n onClick?: () => void;\n}\n\nexport const NestedTFooter = ({ children, icon, color, ...props }: NestedTFooterProps) => {\n return (\n <ButtonBox paddingBottom={4} paddingTop={4} tag=\"button\" type=\"button\" {...props}>\n <Flex>\n <IconBox color={color} aria-hidden background={`${color}200`}>\n {icon}\n </IconBox>\n <Box paddingLeft={3}>\n <Typography variant=\"pi\" fontWeight=\"bold\" textColor={`${color}600`}>\n {children}\n </Typography>\n </Box>\n </Flex>\n </ButtonBox>\n );\n};\n","import { ComponentType, Fragment } from 'react';\n\nimport { useTracking } from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Button,\n EmptyStateLayout,\n Table,\n Tbody,\n Td,\n TFooter,\n Th,\n Thead,\n Tr,\n Typography,\n} from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { useIntl } from 'react-intl';\n\nimport { useDataManager } from '../hooks/useDataManager';\nimport { useFormModalNavigation } from '../hooks/useFormModalNavigation';\nimport { getTrad } from '../utils/getTrad';\n\nimport { BoxWrapper } from './BoxWrapper';\nimport { ComponentList } from './ComponentList';\nimport { DynamicZoneList } from './DynamicZoneList';\nimport { NestedTFooter } from './NestedFooter';\n\nimport type { SchemaType } from '../types';\nimport type { Internal } from '@strapi/types';\n\ninterface ListProps {\n addComponentToDZ?: () => void;\n customRowComponent: ComponentType<any>;\n editTarget: SchemaType;\n firstLoopComponentUid?: string;\n isFromDynamicZone?: boolean;\n isNestedInDZComponent?: boolean;\n isMain?: boolean;\n items: any[];\n secondLoopComponentUid?: string | null;\n targetUid?: Internal.UID.Schema;\n isSub?: boolean;\n}\n\nexport const List = ({\n addComponentToDZ,\n customRowComponent,\n editTarget,\n firstLoopComponentUid,\n isFromDynamicZone = false,\n isMain = false,\n isNestedInDZComponent = false,\n isSub = false,\n items = [],\n secondLoopComponentUid,\n targetUid,\n}: ListProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { isInDevelopmentMode, modifiedData, isInContentTypeView } = useDataManager();\n\n const { onOpenModalAddField } = useFormModalNavigation();\n const onClickAddField = () => {\n trackUsage('hasClickedCTBAddFieldBanner');\n\n onOpenModalAddField({ forTarget: editTarget, targetUid });\n };\n\n if (!targetUid) {\n return (\n <Table colCount={2} rowCount={2}>\n <Thead>\n <Tr>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({ id: 'global.name', defaultMessage: 'Name' })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({ id: 'global.type', defaultMessage: 'Type' })}\n </Typography>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n <Tr>\n <Td colSpan={2}>\n <EmptyStateLayout\n content={formatMessage({\n id: getTrad('table.content.create-first-content-type'),\n defaultMessage: 'Create your first Collection-Type',\n })}\n hasRadius\n icon={<EmptyDocuments width=\"16rem\" />}\n />\n </Td>\n </Tr>\n </Tbody>\n </Table>\n );\n }\n\n if (items.length === 0 && isMain) {\n return (\n <Table colCount={2} rowCount={2}>\n <Thead>\n <Tr>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({ id: 'global.name', defaultMessage: 'Name' })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({ id: 'global.type', defaultMessage: 'Type' })}\n </Typography>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n <Tr>\n <Td colSpan={2}>\n <EmptyStateLayout\n action={\n <Button\n onClick={onClickAddField}\n size=\"L\"\n startIcon={<Plus />}\n variant=\"secondary\"\n >\n {formatMessage({\n id: getTrad('table.button.no-fields'),\n defaultMessage: 'Add new field',\n })}\n </Button>\n }\n content={formatMessage(\n isInContentTypeView\n ? {\n id: getTrad('table.content.no-fields.collection-type'),\n defaultMessage: 'Add your first field to this Collection-Type',\n }\n : {\n id: getTrad('table.content.no-fields.component'),\n defaultMessage: 'Add your first field to this component',\n }\n )}\n hasRadius\n icon={<EmptyDocuments width=\"16rem\" />}\n />\n </Td>\n </Tr>\n </Tbody>\n </Table>\n );\n }\n\n return (\n <BoxWrapper>\n <Box\n paddingLeft={6}\n paddingRight={isMain ? 6 : 0}\n {...(isMain && { style: { overflowX: 'auto' } })}\n >\n <table>\n {isMain && (\n <thead>\n <tr>\n <th>\n <Typography variant=\"sigma\" textColor=\"neutral800\">\n {formatMessage({ id: 'global.name', defaultMessage: 'Name' })}\n </Typography>\n </th>\n <th colSpan={2}>\n <Typography variant=\"sigma\" textColor=\"neutral800\">\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 textColor=\"neutral800\">\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 tag=\"tr\"\n onClick={isInDevelopmentMode && configurable && !isMorph ? handleClick : undefined}\n >\n <td style={{ position: 'relative' }}>\n {loopNumber !== 0 && <Curve color={isFromDynamicZone ? 'primary200' : 'neutral150'} />}\n <Flex paddingLeft={2} gap={4}>\n <AttributeIcon type={src} customField={customField} />\n <Typography textColor=\"neutral800\" fontWeight=\"bold\">\n {name}\n </Typography>\n </Flex>\n </td>\n <td>\n {target ? (\n <Typography textColor=\"neutral800\">\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 variant=\"ghost\"\n >\n <Pencil />\n </IconButton>\n )}\n <IconButton\n onClick={(e) => {\n e.stopPropagation();\n removeAttribute(\n editTarget,\n name,\n secondLoopComponentUid || firstLoopComponentUid || ''\n );\n }}\n label={`${formatMessage({\n id: 'global.delete',\n defaultMessage: 'Delete',\n })} ${name}`}\n variant=\"ghost\"\n >\n <Trash />\n </IconButton>\n </Flex>\n ) : (\n <Lock />\n )}\n </Flex>\n ) : (\n /*\n In production mode the edit icons aren't visible, therefore\n we need to reserve the same space, otherwise the height of the\n row might collapse, leading to bad positioned curve icons\n */\n <Box height=\"3.2rem\" />\n )}\n </td>\n </BoxWrapper>\n );\n }\n);\n","export const getAttributeDisplayedType = (type: string) => {\n let displayedType;\n\n switch (type) {\n case 'date':\n case 'datetime':\n case 'time':\n case 'timestamp':\n displayedType = 'date';\n break;\n case 'integer':\n case 'biginteger':\n case 'decimal':\n case 'float':\n displayedType = 'number';\n break;\n case 'string':\n case 'text':\n displayedType = 'text';\n break;\n case '':\n displayedType = 'relation';\n break;\n default:\n displayedType = type;\n }\n\n return displayedType;\n};\n","import { memo } from 'react';\n\nimport { type Permission, useRBAC } from '@strapi/admin/strapi-admin';\nimport { Button } from '@strapi/design-system';\nimport { ListPlus } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useNavigate } from 'react-router-dom';\n\nconst cmPermissions: Record<string, Permission[]> = {\n collectionTypesConfigurations: [\n {\n action: 'plugin::content-manager.collection-types.configure-view',\n subject: null,\n },\n ],\n componentsConfigurations: [\n {\n action: 'plugin::content-manager.components.configure-layout',\n subject: null,\n },\n ],\n singleTypesConfigurations: [\n {\n action: 'plugin::content-manager.single-types.configure-view',\n subject: null,\n },\n ],\n};\n\ninterface LinkToCMSettingsViewProps {\n disabled: boolean;\n contentTypeKind?: string;\n isInContentTypeView?: boolean;\n isTemporary?: boolean;\n targetUid?: string;\n}\n\nexport const LinkToCMSettingsView = memo(\n ({\n disabled,\n isTemporary = false,\n isInContentTypeView = true,\n contentTypeKind = 'collectionType',\n targetUid = '',\n }: LinkToCMSettingsViewProps) => {\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const { collectionTypesConfigurations, componentsConfigurations, singleTypesConfigurations } =\n cmPermissions;\n const label = formatMessage({\n id: 'content-type-builder.form.button.configure-view',\n defaultMessage: 'Configure the view',\n });\n let permissionsToApply = collectionTypesConfigurations;\n\n const handleClick = () => {\n if (isTemporary) {\n return false;\n }\n\n if (isInContentTypeView) {\n navigate(`/content-manager/collection-types/${targetUid}/configurations/edit`);\n } else {\n navigate(`/content-manager/components/${targetUid}/configurations/edit`);\n }\n\n return false;\n };\n\n if (isInContentTypeView && contentTypeKind === 'singleType') {\n permissionsToApply = singleTypesConfigurations;\n }\n\n if (!isInContentTypeView) {\n permissionsToApply = componentsConfigurations;\n }\n const { isLoading, allowedActions } = useRBAC({\n viewConfig: permissionsToApply,\n });\n\n if (isLoading) {\n return null;\n }\n\n if (!allowedActions.canConfigureView) {\n return null;\n }\n\n return (\n <Button\n startIcon={<ListPlus />}\n variant=\"tertiary\"\n onClick={handleClick}\n disabled={isTemporary || disabled}\n >\n {label}\n </Button>\n );\n }\n);\n","import { BackButton, useTracking, Layouts } from '@strapi/admin/strapi-admin';\nimport { Box, Button, Flex } from '@strapi/design-system';\nimport { Check, Pencil, Plus } from '@strapi/icons';\nimport get from 'lodash/get';\nimport has from 'lodash/has';\nimport isEqual from 'lodash/isEqual';\nimport upperFirst from 'lodash/upperFirst';\nimport { useIntl } from 'react-intl';\nimport { unstable_usePrompt as usePrompt, useMatch } from 'react-router-dom';\nimport { styled } from 'styled-components';\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 LayoutsHeaderCustom = styled(Layouts.Header)`\n overflow-wrap: anywhere;\n`;\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 <LayoutsHeaderCustom\n id=\"title\"\n primaryAction={\n isInDevelopmentMode && (\n <Flex gap={2} marginLeft={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 minWidth=\"max-content\"\n onClick={() => {\n onOpenModalAddField({ forTarget, targetUid });\n }}\n >\n {formatMessage({\n id: getTrad('button.attributes.add.another'),\n defaultMessage: 'Add another field',\n })}\n </Button>\n )}\n <Button\n startIcon={<Check />}\n onClick={async () => await submitData()}\n type=\"submit\"\n disabled={isEqual(modifiedData, initialData)}\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n )\n }\n secondaryAction={\n isInDevelopmentMode &&\n !isFromPlugin &&\n !isCreatingFirstContentType && (\n <Button startIcon={<Pencil />} variant=\"tertiary\" onClick={onEdit}>\n {formatMessage({\n id: 'app.utils.edit',\n defaultMessage: 'Edit',\n })}\n </Button>\n )\n }\n title={upperFirst(label)}\n subtitle={formatMessage({\n id: getTrad('listView.headerLayout.description'),\n defaultMessage: 'Build the data architecture of your content',\n })}\n navigationAction={<BackButton />}\n />\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex justifyContent=\"flex-end\">\n <Flex gap={2}>\n <LinkToCMSettingsView\n key=\"link-to-cm-settings-view\"\n targetUid={targetUid}\n isTemporary={isTemporary}\n isInContentTypeView={isInContentTypeView}\n contentTypeKind={contentTypeKind}\n disabled={isCreatingFirstContentType}\n />\n </Flex>\n </Flex>\n <Box background=\"neutral0\" shadow=\"filterShadow\" hasRadius>\n <List\n items={attributes}\n customRowComponent={(props) => <ListRow {...props} onClick={handleClickEditField} />}\n addComponentToDZ={handleClickAddComponentToDZ}\n targetUid={targetUid}\n editTarget={forTarget}\n isMain\n />\n </Box>\n </Flex>\n </Layouts.Content>\n </>\n );\n};\n\n// eslint-disable-next-line import/no-default-export\nexport default ListView;\n"],"names":["BoxWrapper","styled","Box","useDataManager","get","jsx","COMPONENT_ICONS","Flex","index","jsxs","Typography","Cross","Plus","useState","useIntl","getTrad","createElement","useTracking","useFormModalNavigation","Table","Thead","Tr","Th","Tbody","Td","EmptyStateLayout","EmptyDocuments","Button","Fragment","TFooter","upperFirst","memo","AttributeIcon","IconButton","Pencil","Trash","Lock","useNavigate","useRBAC","ListPlus","Layouts","useMatch","has","isEqual","forTarget","targetUid","usePrompt","Check","BackButton"],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@ import { useNavigate, useMatch, unstable_usePrompt } from "react-router-dom";
|
|
|
11
11
|
import { styled } from "styled-components";
|
|
12
12
|
import { useState, createElement, Fragment, memo } from "react";
|
|
13
13
|
import { EmptyDocuments } from "@strapi/icons/symbols";
|
|
14
|
-
import { u as useDataManager, C as COMPONENT_ICONS, g as getTrad, a as useFormModalNavigation, A as AttributeIcon } from "./index-
|
|
14
|
+
import { u as useDataManager, C as COMPONENT_ICONS, g as getTrad, a as useFormModalNavigation, A as AttributeIcon } from "./index-S6EtktTB.mjs";
|
|
15
15
|
const BoxWrapper$1 = styled(Box)`
|
|
16
16
|
table {
|
|
17
17
|
width: 100%;
|
|
@@ -438,8 +438,8 @@ const List = ({
|
|
|
438
438
|
...isMain && { style: { overflowX: "auto" } },
|
|
439
439
|
children: /* @__PURE__ */ jsxs("table", { children: [
|
|
440
440
|
isMain && /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { children: [
|
|
441
|
-
/* @__PURE__ */ jsx("th", { children: /* @__PURE__ */ jsx(Typography, { variant: "sigma", textColor: "
|
|
442
|
-
/* @__PURE__ */ jsx("th", { colSpan: 2, children: /* @__PURE__ */ jsx(Typography, { variant: "sigma", textColor: "
|
|
441
|
+
/* @__PURE__ */ jsx("th", { children: /* @__PURE__ */ jsx(Typography, { variant: "sigma", textColor: "neutral800", children: formatMessage({ id: "global.name", defaultMessage: "Name" }) }) }),
|
|
442
|
+
/* @__PURE__ */ jsx("th", { colSpan: 2, children: /* @__PURE__ */ jsx(Typography, { variant: "sigma", textColor: "neutral800", children: formatMessage({ id: "global.type", defaultMessage: "Type" }) }) })
|
|
443
443
|
] }) }),
|
|
444
444
|
/* @__PURE__ */ jsx("tbody", { children: items.map((item) => {
|
|
445
445
|
const { type } = item;
|
|
@@ -561,7 +561,7 @@ const DisplayedType = ({
|
|
|
561
561
|
defaultMessage: "Custom field"
|
|
562
562
|
}) });
|
|
563
563
|
}
|
|
564
|
-
return /* @__PURE__ */ jsxs(Typography, { children: [
|
|
564
|
+
return /* @__PURE__ */ jsxs(Typography, { textColor: "neutral800", children: [
|
|
565
565
|
formatMessage({
|
|
566
566
|
id: getTrad(`attribute.${readableType}`),
|
|
567
567
|
defaultMessage: type
|
|
@@ -638,10 +638,10 @@ const ListRow = memo(
|
|
|
638
638
|
loopNumber !== 0 && /* @__PURE__ */ jsx(Curve, { color: isFromDynamicZone ? "primary200" : "neutral150" }),
|
|
639
639
|
/* @__PURE__ */ jsxs(Flex, { paddingLeft: 2, gap: 4, children: [
|
|
640
640
|
/* @__PURE__ */ jsx(AttributeIcon, { type: src, customField }),
|
|
641
|
-
/* @__PURE__ */ jsx(Typography, { fontWeight: "bold", children: name })
|
|
641
|
+
/* @__PURE__ */ jsx(Typography, { textColor: "neutral800", fontWeight: "bold", children: name })
|
|
642
642
|
] })
|
|
643
643
|
] }),
|
|
644
|
-
/* @__PURE__ */ jsx("td", { children: target ? /* @__PURE__ */ jsxs(Typography, { children: [
|
|
644
|
+
/* @__PURE__ */ jsx("td", { children: target ? /* @__PURE__ */ jsxs(Typography, { textColor: "neutral800", children: [
|
|
645
645
|
formatMessage({
|
|
646
646
|
id: getTrad(
|
|
647
647
|
`modelPage.attribute.${isMorph ? "relation-polymorphic" : "relationWith"}`
|
|
@@ -783,12 +783,13 @@ const LinkToCMSettingsView = memo(
|
|
|
783
783
|
if (!isInContentTypeView) {
|
|
784
784
|
permissionsToApply = componentsConfigurations;
|
|
785
785
|
}
|
|
786
|
-
const {
|
|
787
|
-
allowedActions: { canViewConfig }
|
|
788
|
-
} = useRBAC({
|
|
786
|
+
const { isLoading, allowedActions } = useRBAC({
|
|
789
787
|
viewConfig: permissionsToApply
|
|
790
788
|
});
|
|
791
|
-
if (
|
|
789
|
+
if (isLoading) {
|
|
790
|
+
return null;
|
|
791
|
+
}
|
|
792
|
+
if (!allowedActions.canConfigureView) {
|
|
792
793
|
return null;
|
|
793
794
|
}
|
|
794
795
|
return /* @__PURE__ */ jsx(
|
|
@@ -955,4 +956,4 @@ const ListView = () => {
|
|
|
955
956
|
export {
|
|
956
957
|
ListView as default
|
|
957
958
|
};
|
|
958
|
-
//# sourceMappingURL=ListView-
|
|
959
|
+
//# sourceMappingURL=ListView-D1VH47yt.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ListView-D1VH47yt.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\n// Keep component-row for css specificity\nexport const Tr = styled.tr<{\n $isFromDynamicZone?: boolean;\n $isChildOfDynamicZone?: boolean;\n}>`\n &.component-row,\n &.dynamiczone-row {\n position: relative;\n border-top: none !important;\n\n table tr:first-child {\n border-top: none;\n }\n\n > td:first-of-type {\n padding: 0 0 0 2rem;\n position: relative;\n\n &::before {\n content: '';\n width: 0.4rem;\n height: calc(100% - 40px);\n position: absolute;\n top: -7px;\n left: 2.6rem;\n border-radius: 4px;\n\n ${({ $isFromDynamicZone, $isChildOfDynamicZone, theme }) => {\n if ($isChildOfDynamicZone) {\n return `background-color: ${theme.colors.primary200};`;\n }\n\n if ($isFromDynamicZone) {\n return `background-color: ${theme.colors.primary200};`;\n }\n\n return `background: ${theme.colors.neutral150};`;\n }}\n }\n }\n }\n\n &.dynamiczone-row > td:first-of-type {\n padding: 0;\n }\n`;\n","import get from 'lodash/get';\n\nimport { useDataManager } from '../hooks/useDataManager';\n\nimport { List } from './List';\nimport { Tr } from './Tr';\n\nimport type { Internal } from '@strapi/types';\n\ninterface ComponentListProps {\n component: Internal.UID.Component;\n customRowComponent: any;\n firstLoopComponentUid?: string;\n isFromDynamicZone?: boolean;\n isNestedInDZComponent?: boolean;\n}\n\nexport const ComponentList = ({\n customRowComponent,\n component,\n isFromDynamicZone = false,\n isNestedInDZComponent = false,\n firstLoopComponentUid,\n}: ComponentListProps) => {\n const { modifiedData } = useDataManager();\n const {\n schema: { attributes },\n } = get(modifiedData, ['components', component], {\n schema: { attributes: [] },\n });\n\n return (\n <Tr $isChildOfDynamicZone={isFromDynamicZone} className=\"component-row\">\n <td colSpan={12}>\n <List\n customRowComponent={customRowComponent}\n items={attributes}\n targetUid={component}\n firstLoopComponentUid={firstLoopComponentUid || component}\n editTarget=\"components\"\n isFromDynamicZone={isFromDynamicZone}\n isNestedInDZComponent={isNestedInDZComponent}\n isSub\n secondLoopComponentUid={firstLoopComponentUid ? component : null}\n />\n </td>\n </Tr>\n );\n};\n","import { Flex } from '@strapi/design-system';\n\nimport { COMPONENT_ICONS } from '../../IconPicker/constants';\n\ninterface ComponentIconProps {\n isActive?: boolean;\n icon?: keyof typeof COMPONENT_ICONS;\n}\n\nexport const ComponentIcon = ({ isActive = false, icon = 'dashboard' }: ComponentIconProps) => {\n const Icon = COMPONENT_ICONS[icon] || COMPONENT_ICONS.dashboard;\n\n return (\n <Flex\n alignItems=\"center\"\n background={isActive ? 'primary200' : 'neutral200'}\n justifyContent=\"center\"\n height={8}\n width={8}\n borderRadius=\"50%\"\n >\n <Icon height=\"2rem\" width=\"2rem\" />\n </Flex>\n );\n};\n","import { Box, Flex, Typography } from '@strapi/design-system';\nimport { Cross } from '@strapi/icons';\nimport get from 'lodash/get';\nimport { styled } from 'styled-components';\n\nimport { useDataManager } from '../../hooks/useDataManager';\n\nimport { ComponentIcon } from './ComponentIcon';\n\ninterface ComponentCardProps {\n component: string;\n dzName: string;\n index: number;\n isActive?: boolean;\n isInDevelopmentMode?: boolean;\n onClick?: () => void;\n}\n\nconst CloseButton = styled(Box)`\n position: absolute;\n display: none;\n top: 5px;\n right: 0.8rem;\n\n svg {\n width: 1rem;\n height: 1rem;\n\n path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n }\n`;\n\nconst ComponentBox = styled(Flex)`\n width: 14rem;\n height: 8rem;\n position: relative;\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n background: ${({ theme }) => theme.colors.neutral100};\n border-radius: ${({ theme }) => theme.borderRadius};\n max-width: 100%;\n\n &.active,\n &:focus,\n &:hover {\n border: 1px solid ${({ theme }) => theme.colors.primary200};\n background: ${({ theme }) => theme.colors.primary100};\n color: ${({ theme }) => theme.colors.primary600};\n\n ${CloseButton} {\n display: block;\n }\n\n /* > ComponentIcon */\n > div:first-child {\n background: ${({ theme }) => theme.colors.primary200};\n color: ${({ theme }) => theme.colors.primary600};\n\n svg {\n path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n }\n }\n }\n`;\n\nexport const ComponentCard = ({\n component,\n dzName,\n index,\n isActive = false,\n isInDevelopmentMode = false,\n onClick,\n}: ComponentCardProps) => {\n const { modifiedData, removeComponentFromDynamicZone } = useDataManager();\n const {\n schema: { icon, displayName },\n } = get(modifiedData, ['components', component], { schema: {} });\n\n const onClose = (e: any) => {\n e.stopPropagation();\n removeComponentFromDynamicZone(dzName, index);\n };\n\n return (\n <ComponentBox\n alignItems=\"center\"\n direction=\"column\"\n className={isActive ? 'active' : ''}\n borderRadius=\"borderRadius\"\n justifyContent=\"center\"\n paddingLeft={4}\n paddingRight={4}\n shrink={0}\n onClick={onClick}\n role=\"tab\"\n tabIndex={isActive ? 0 : -1}\n cursor=\"pointer\"\n aria-selected={isActive}\n aria-controls={`dz-${dzName}-panel-${index}`}\n id={`dz-${dzName}-tab-${index}`}\n >\n <ComponentIcon icon={icon} isActive={isActive} />\n\n <Box marginTop={1} maxWidth=\"100%\">\n <Typography variant=\"pi\" fontWeight=\"bold\" ellipsis>\n {displayName}\n </Typography>\n </Box>\n\n {isInDevelopmentMode && (\n <CloseButton tag=\"button\" onClick={onClose}>\n <Cross />\n </CloseButton>\n )}\n </ComponentBox>\n );\n};\n","import { useState } from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useDataManager } from '../hooks/useDataManager';\nimport { getTrad } from '../utils/getTrad';\n\nimport { ComponentCard } from './ComponentCard';\nimport { ComponentList } from './ComponentList';\nimport { Tr } from './Tr';\n\nimport type { Internal } from '@strapi/types';\n\ninterface DynamicZoneListProps {\n addComponent: (name?: string) => void;\n components: Array<string>;\n customRowComponent?: () => void;\n name?: string;\n targetUid: Internal.UID.Component;\n}\n\nconst StyledAddIcon = styled(Plus)`\n width: 3.2rem;\n height: 3.2rem;\n padding: 0.9rem;\n border-radius: 6.4rem;\n background: ${({ theme }) => theme.colors.primary100};\n path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n`;\n\nconst FixedBox = styled(Box)`\n height: 9rem;\n position: absolute;\n width: 100%;\n top: 0;\n left: 0;\n`;\n\nconst ScrollableStack = styled(Flex)`\n width: 100%;\n overflow-x: auto;\n`;\n\nconst ComponentContentBox = styled(Box)`\n padding-top: 9rem;\n`;\n\nconst ComponentStack = styled(Flex)`\n flex-shrink: 0;\n width: 14rem;\n height: 8rem;\n justify-content: center;\n align-items: center;\n`;\n\nexport const DynamicZoneList = ({\n customRowComponent,\n components = [],\n addComponent,\n name,\n targetUid,\n}: DynamicZoneListProps) => {\n const { isInDevelopmentMode } = useDataManager();\n const [activeTab, setActiveTab] = useState(0);\n const { formatMessage } = useIntl();\n\n const toggle = (tab: number) => {\n if (activeTab !== tab) {\n setActiveTab(tab);\n }\n };\n\n const handleClickAdd = () => {\n addComponent(name);\n };\n\n return (\n <Tr className=\"dynamiczone-row\" $isFromDynamicZone>\n <td colSpan={12}>\n <FixedBox paddingLeft={8}>\n <ScrollableStack gap={2}>\n {isInDevelopmentMode && (\n <button type=\"button\" onClick={handleClickAdd}>\n <ComponentStack direction=\"column\" alignItems=\"stretch\" gap={1}>\n <StyledAddIcon />\n <Typography variant=\"pi\" fontWeight=\"bold\" textColor=\"primary600\">\n {formatMessage({\n id: getTrad('button.component.add'),\n defaultMessage: 'Add a component',\n })}\n </Typography>\n </ComponentStack>\n </button>\n )}\n <Flex role=\"tablist\" gap={2}>\n {components.map((component, index) => {\n return (\n <ComponentCard\n key={component}\n dzName={name || ''}\n index={index}\n component={component}\n isActive={activeTab === index}\n isInDevelopmentMode={isInDevelopmentMode}\n onClick={() => toggle(index)}\n />\n );\n })}\n </Flex>\n </ScrollableStack>\n </FixedBox>\n <ComponentContentBox>\n {components.map((component, index) => {\n const props = {\n customRowComponent,\n component,\n };\n\n return (\n <Box\n id={`dz-${name}-panel-${index}`}\n role=\"tabpanel\"\n aria-labelledby={`dz-${name}-tab-${index}`}\n key={component}\n style={{ display: activeTab === index ? 'block' : 'none' }}\n >\n <table>\n <tbody>\n <ComponentList\n {...props}\n isFromDynamicZone\n component={targetUid}\n key={component}\n />\n </tbody>\n </table>\n </Box>\n );\n })}\n </ComponentContentBox>\n </td>\n </Tr>\n );\n};\n","import type { ReactNode } from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nconst IconBox = styled(Box)`\n height: 2.4rem;\n width: 2.4rem;\n border-radius: 50%;\n display: flex;\n justify-content: center;\n align-items: center;\n\n svg {\n height: 1rem;\n width: 1rem;\n }\n\n svg path {\n fill: ${({ theme, color }) => theme.colors[`${color}600`]};\n }\n`;\n\nconst ButtonBox = styled(Box)`\n border-radius: 0 0 ${({ theme }) => theme.borderRadius} ${({ theme }) => theme.borderRadius};\n display: block;\n width: 100%;\n border: none;\n position: relative;\n left: -0.4rem;\n`;\n\ninterface NestedTFooterProps {\n color: string;\n children: ReactNode;\n icon: ReactNode;\n onClick?: () => void;\n}\n\nexport const NestedTFooter = ({ children, icon, color, ...props }: NestedTFooterProps) => {\n return (\n <ButtonBox paddingBottom={4} paddingTop={4} tag=\"button\" type=\"button\" {...props}>\n <Flex>\n <IconBox color={color} aria-hidden background={`${color}200`}>\n {icon}\n </IconBox>\n <Box paddingLeft={3}>\n <Typography variant=\"pi\" fontWeight=\"bold\" textColor={`${color}600`}>\n {children}\n </Typography>\n </Box>\n </Flex>\n </ButtonBox>\n );\n};\n","import { ComponentType, Fragment } from 'react';\n\nimport { useTracking } from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Button,\n EmptyStateLayout,\n Table,\n Tbody,\n Td,\n TFooter,\n Th,\n Thead,\n Tr,\n Typography,\n} from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { useIntl } from 'react-intl';\n\nimport { useDataManager } from '../hooks/useDataManager';\nimport { useFormModalNavigation } from '../hooks/useFormModalNavigation';\nimport { getTrad } from '../utils/getTrad';\n\nimport { BoxWrapper } from './BoxWrapper';\nimport { ComponentList } from './ComponentList';\nimport { DynamicZoneList } from './DynamicZoneList';\nimport { NestedTFooter } from './NestedFooter';\n\nimport type { SchemaType } from '../types';\nimport type { Internal } from '@strapi/types';\n\ninterface ListProps {\n addComponentToDZ?: () => void;\n customRowComponent: ComponentType<any>;\n editTarget: SchemaType;\n firstLoopComponentUid?: string;\n isFromDynamicZone?: boolean;\n isNestedInDZComponent?: boolean;\n isMain?: boolean;\n items: any[];\n secondLoopComponentUid?: string | null;\n targetUid?: Internal.UID.Schema;\n isSub?: boolean;\n}\n\nexport const List = ({\n addComponentToDZ,\n customRowComponent,\n editTarget,\n firstLoopComponentUid,\n isFromDynamicZone = false,\n isMain = false,\n isNestedInDZComponent = false,\n isSub = false,\n items = [],\n secondLoopComponentUid,\n targetUid,\n}: ListProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { isInDevelopmentMode, modifiedData, isInContentTypeView } = useDataManager();\n\n const { onOpenModalAddField } = useFormModalNavigation();\n const onClickAddField = () => {\n trackUsage('hasClickedCTBAddFieldBanner');\n\n onOpenModalAddField({ forTarget: editTarget, targetUid });\n };\n\n if (!targetUid) {\n return (\n <Table colCount={2} rowCount={2}>\n <Thead>\n <Tr>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({ id: 'global.name', defaultMessage: 'Name' })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({ id: 'global.type', defaultMessage: 'Type' })}\n </Typography>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n <Tr>\n <Td colSpan={2}>\n <EmptyStateLayout\n content={formatMessage({\n id: getTrad('table.content.create-first-content-type'),\n defaultMessage: 'Create your first Collection-Type',\n })}\n hasRadius\n icon={<EmptyDocuments width=\"16rem\" />}\n />\n </Td>\n </Tr>\n </Tbody>\n </Table>\n );\n }\n\n if (items.length === 0 && isMain) {\n return (\n <Table colCount={2} rowCount={2}>\n <Thead>\n <Tr>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({ id: 'global.name', defaultMessage: 'Name' })}\n </Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({ id: 'global.type', defaultMessage: 'Type' })}\n </Typography>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n <Tr>\n <Td colSpan={2}>\n <EmptyStateLayout\n action={\n <Button\n onClick={onClickAddField}\n size=\"L\"\n startIcon={<Plus />}\n variant=\"secondary\"\n >\n {formatMessage({\n id: getTrad('table.button.no-fields'),\n defaultMessage: 'Add new field',\n })}\n </Button>\n }\n content={formatMessage(\n isInContentTypeView\n ? {\n id: getTrad('table.content.no-fields.collection-type'),\n defaultMessage: 'Add your first field to this Collection-Type',\n }\n : {\n id: getTrad('table.content.no-fields.component'),\n defaultMessage: 'Add your first field to this component',\n }\n )}\n hasRadius\n icon={<EmptyDocuments width=\"16rem\" />}\n />\n </Td>\n </Tr>\n </Tbody>\n </Table>\n );\n }\n\n return (\n <BoxWrapper>\n <Box\n paddingLeft={6}\n paddingRight={isMain ? 6 : 0}\n {...(isMain && { style: { overflowX: 'auto' } })}\n >\n <table>\n {isMain && (\n <thead>\n <tr>\n <th>\n <Typography variant=\"sigma\" textColor=\"neutral800\">\n {formatMessage({ id: 'global.name', defaultMessage: 'Name' })}\n </Typography>\n </th>\n <th colSpan={2}>\n <Typography variant=\"sigma\" textColor=\"neutral800\">\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 textColor=\"neutral800\">\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 tag=\"tr\"\n onClick={isInDevelopmentMode && configurable && !isMorph ? handleClick : undefined}\n >\n <td style={{ position: 'relative' }}>\n {loopNumber !== 0 && <Curve color={isFromDynamicZone ? 'primary200' : 'neutral150'} />}\n <Flex paddingLeft={2} gap={4}>\n <AttributeIcon type={src} customField={customField} />\n <Typography textColor=\"neutral800\" fontWeight=\"bold\">\n {name}\n </Typography>\n </Flex>\n </td>\n <td>\n {target ? (\n <Typography textColor=\"neutral800\">\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 variant=\"ghost\"\n >\n <Pencil />\n </IconButton>\n )}\n <IconButton\n onClick={(e) => {\n e.stopPropagation();\n removeAttribute(\n editTarget,\n name,\n secondLoopComponentUid || firstLoopComponentUid || ''\n );\n }}\n label={`${formatMessage({\n id: 'global.delete',\n defaultMessage: 'Delete',\n })} ${name}`}\n variant=\"ghost\"\n >\n <Trash />\n </IconButton>\n </Flex>\n ) : (\n <Lock />\n )}\n </Flex>\n ) : (\n /*\n In production mode the edit icons aren't visible, therefore\n we need to reserve the same space, otherwise the height of the\n row might collapse, leading to bad positioned curve icons\n */\n <Box height=\"3.2rem\" />\n )}\n </td>\n </BoxWrapper>\n );\n }\n);\n","export const getAttributeDisplayedType = (type: string) => {\n let displayedType;\n\n switch (type) {\n case 'date':\n case 'datetime':\n case 'time':\n case 'timestamp':\n displayedType = 'date';\n break;\n case 'integer':\n case 'biginteger':\n case 'decimal':\n case 'float':\n displayedType = 'number';\n break;\n case 'string':\n case 'text':\n displayedType = 'text';\n break;\n case '':\n displayedType = 'relation';\n break;\n default:\n displayedType = type;\n }\n\n return displayedType;\n};\n","import { memo } from 'react';\n\nimport { type Permission, useRBAC } from '@strapi/admin/strapi-admin';\nimport { Button } from '@strapi/design-system';\nimport { ListPlus } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useNavigate } from 'react-router-dom';\n\nconst cmPermissions: Record<string, Permission[]> = {\n collectionTypesConfigurations: [\n {\n action: 'plugin::content-manager.collection-types.configure-view',\n subject: null,\n },\n ],\n componentsConfigurations: [\n {\n action: 'plugin::content-manager.components.configure-layout',\n subject: null,\n },\n ],\n singleTypesConfigurations: [\n {\n action: 'plugin::content-manager.single-types.configure-view',\n subject: null,\n },\n ],\n};\n\ninterface LinkToCMSettingsViewProps {\n disabled: boolean;\n contentTypeKind?: string;\n isInContentTypeView?: boolean;\n isTemporary?: boolean;\n targetUid?: string;\n}\n\nexport const LinkToCMSettingsView = memo(\n ({\n disabled,\n isTemporary = false,\n isInContentTypeView = true,\n contentTypeKind = 'collectionType',\n targetUid = '',\n }: LinkToCMSettingsViewProps) => {\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const { collectionTypesConfigurations, componentsConfigurations, singleTypesConfigurations } =\n cmPermissions;\n const label = formatMessage({\n id: 'content-type-builder.form.button.configure-view',\n defaultMessage: 'Configure the view',\n });\n let permissionsToApply = collectionTypesConfigurations;\n\n const handleClick = () => {\n if (isTemporary) {\n return false;\n }\n\n if (isInContentTypeView) {\n navigate(`/content-manager/collection-types/${targetUid}/configurations/edit`);\n } else {\n navigate(`/content-manager/components/${targetUid}/configurations/edit`);\n }\n\n return false;\n };\n\n if (isInContentTypeView && contentTypeKind === 'singleType') {\n permissionsToApply = singleTypesConfigurations;\n }\n\n if (!isInContentTypeView) {\n permissionsToApply = componentsConfigurations;\n }\n const { isLoading, allowedActions } = useRBAC({\n viewConfig: permissionsToApply,\n });\n\n if (isLoading) {\n return null;\n }\n\n if (!allowedActions.canConfigureView) {\n return null;\n }\n\n return (\n <Button\n startIcon={<ListPlus />}\n variant=\"tertiary\"\n onClick={handleClick}\n disabled={isTemporary || disabled}\n >\n {label}\n </Button>\n );\n }\n);\n","import { BackButton, useTracking, Layouts } from '@strapi/admin/strapi-admin';\nimport { Box, Button, Flex } from '@strapi/design-system';\nimport { Check, Pencil, Plus } from '@strapi/icons';\nimport get from 'lodash/get';\nimport has from 'lodash/has';\nimport isEqual from 'lodash/isEqual';\nimport upperFirst from 'lodash/upperFirst';\nimport { useIntl } from 'react-intl';\nimport { unstable_usePrompt as usePrompt, useMatch } from 'react-router-dom';\nimport { styled } from 'styled-components';\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 LayoutsHeaderCustom = styled(Layouts.Header)`\n overflow-wrap: anywhere;\n`;\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 <LayoutsHeaderCustom\n id=\"title\"\n primaryAction={\n isInDevelopmentMode && (\n <Flex gap={2} marginLeft={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 minWidth=\"max-content\"\n onClick={() => {\n onOpenModalAddField({ forTarget, targetUid });\n }}\n >\n {formatMessage({\n id: getTrad('button.attributes.add.another'),\n defaultMessage: 'Add another field',\n })}\n </Button>\n )}\n <Button\n startIcon={<Check />}\n onClick={async () => await submitData()}\n type=\"submit\"\n disabled={isEqual(modifiedData, initialData)}\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n )\n }\n secondaryAction={\n isInDevelopmentMode &&\n !isFromPlugin &&\n !isCreatingFirstContentType && (\n <Button startIcon={<Pencil />} variant=\"tertiary\" onClick={onEdit}>\n {formatMessage({\n id: 'app.utils.edit',\n defaultMessage: 'Edit',\n })}\n </Button>\n )\n }\n title={upperFirst(label)}\n subtitle={formatMessage({\n id: getTrad('listView.headerLayout.description'),\n defaultMessage: 'Build the data architecture of your content',\n })}\n navigationAction={<BackButton />}\n />\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex justifyContent=\"flex-end\">\n <Flex gap={2}>\n <LinkToCMSettingsView\n key=\"link-to-cm-settings-view\"\n targetUid={targetUid}\n isTemporary={isTemporary}\n isInContentTypeView={isInContentTypeView}\n contentTypeKind={contentTypeKind}\n disabled={isCreatingFirstContentType}\n />\n </Flex>\n </Flex>\n <Box background=\"neutral0\" shadow=\"filterShadow\" hasRadius>\n <List\n items={attributes}\n customRowComponent={(props) => <ListRow {...props} onClick={handleClickEditField} />}\n addComponentToDZ={handleClickAddComponentToDZ}\n targetUid={targetUid}\n editTarget={forTarget}\n isMain\n />\n </Box>\n </Flex>\n </Layouts.Content>\n </>\n );\n};\n\n// eslint-disable-next-line import/no-default-export\nexport default ListView;\n"],"names":["BoxWrapper","Tr","Fragment","forTarget","targetUid","usePrompt"],"mappings":"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"}
|