@strapi/content-manager 5.16.0 → 5.17.0-beta.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.
Files changed (43) hide show
  1. package/dist/admin/history/components/VersionContent.js +24 -3
  2. package/dist/admin/history/components/VersionContent.js.map +1 -1
  3. package/dist/admin/history/components/VersionContent.mjs +25 -4
  4. package/dist/admin/history/components/VersionContent.mjs.map +1 -1
  5. package/dist/admin/pages/EditView/EditViewPage.js +11 -1
  6. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  7. package/dist/admin/pages/EditView/EditViewPage.mjs +11 -1
  8. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  9. package/dist/admin/pages/EditView/components/DocumentActions.js +33 -47
  10. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  11. package/dist/admin/pages/EditView/components/DocumentActions.mjs +34 -48
  12. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  13. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +12 -1
  14. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  15. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +13 -2
  16. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  17. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +13 -2
  18. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  19. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +14 -3
  20. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  21. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +18 -5
  22. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  23. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +20 -7
  24. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  25. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js +86 -118
  26. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js.map +1 -1
  27. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs +86 -118
  28. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs.map +1 -1
  29. package/dist/admin/pages/EditView/components/FormLayout.js +27 -3
  30. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  31. package/dist/admin/pages/EditView/components/FormLayout.mjs +27 -3
  32. package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
  33. package/dist/admin/pages/EditView/utils/data.js +103 -0
  34. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  35. package/dist/admin/pages/EditView/utils/data.mjs +103 -1
  36. package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
  37. package/dist/admin/src/pages/EditView/utils/data.d.ts +19 -1
  38. package/dist/admin/src/utils/validation.d.ts +1 -0
  39. package/dist/admin/utils/validation.js +16 -5
  40. package/dist/admin/utils/validation.js.map +1 -1
  41. package/dist/admin/utils/validation.mjs +16 -5
  42. package/dist/admin/utils/validation.mjs.map +1 -1
  43. package/package.json +5 -5
@@ -81,9 +81,18 @@ const createLayoutFromFields = (fields)=>{
81
81
  /* -------------------------------------------------------------------------------------------------
82
82
  * FormPanel
83
83
  * -----------------------------------------------------------------------------------------------*/ const FormPanel = ({ panel })=>{
84
+ const fieldValues = strapiAdmin.useForm('Fields', (state)=>state.values);
85
+ const rulesEngine = strapiAdmin.createRulesEngine();
84
86
  if (panel.some((row)=>row.some((field)=>field.type === 'dynamiczone'))) {
85
87
  const [row] = panel;
86
88
  const [field] = row;
89
+ const condition = field.attribute?.conditions?.visible;
90
+ if (condition) {
91
+ const isVisible = rulesEngine.evaluate(condition, fieldValues);
92
+ if (!isVisible) {
93
+ return null; // Skip rendering the dynamic zone if the condition is not met
94
+ }
95
+ }
87
96
  return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Root, {
88
97
  gap: 4,
89
98
  children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
@@ -111,9 +120,20 @@ const createLayoutFromFields = (fields)=>{
111
120
  direction: "column",
112
121
  alignItems: "stretch",
113
122
  gap: 6,
114
- children: panel.map((row, gridRowIndex)=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Root, {
123
+ children: panel.map((row, gridRowIndex)=>{
124
+ const visibleFields = row.filter((field)=>{
125
+ const condition = field.attribute?.conditions?.visible;
126
+ if (condition) {
127
+ return rulesEngine.evaluate(condition, fieldValues);
128
+ }
129
+ return true;
130
+ });
131
+ if (visibleFields.length === 0) {
132
+ return null; // Skip rendering the entire grid row
133
+ }
134
+ return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Root, {
115
135
  gap: 4,
116
- children: row.map(({ size, ...field })=>{
136
+ children: visibleFields.map(({ size, ...field })=>{
117
137
  return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
118
138
  col: size,
119
139
  s: 12,
@@ -125,7 +145,8 @@ const createLayoutFromFields = (fields)=>{
125
145
  })
126
146
  }, field.name);
127
147
  })
128
- }, gridRowIndex))
148
+ }, gridRowIndex);
149
+ })
129
150
  })
130
151
  });
131
152
  };
@@ -1 +1 @@
1
- {"version":3,"file":"VersionContent.js","sources":["../../../../admin/src/history/components/VersionContent.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Form, Layouts } from '@strapi/admin/strapi-admin';\nimport { Box, Divider, Flex, Grid, Typography } from '@strapi/design-system';\nimport pipe from 'lodash/fp/pipe';\nimport { useIntl } from 'react-intl';\n\nimport { useDoc } from '../../hooks/useDocument';\nimport { useTypedSelector } from '../../modules/hooks';\nimport {\n prepareTempKeys,\n removeFieldsThatDontExistOnSchema,\n} from '../../pages/EditView/utils/data';\nimport { HistoryContextValue, useHistoryContext } from '../pages/History';\n\nimport { VersionInputRenderer } from './VersionInputRenderer';\n\nimport type { Metadatas } from '../../../../shared/contracts/content-types';\nimport type { GetInitData } from '../../../../shared/contracts/init';\nimport type { ComponentsDictionary, Document } from '../../hooks/useDocument';\nimport type { EditFieldLayout } from '../../hooks/useDocumentLayout';\nimport type { Schema } from '@strapi/types';\n\nconst createLayoutFromFields = <T extends EditFieldLayout | UnknownField>(fields: T[]) => {\n return (\n fields\n .reduce<Array<T[]>>((rows, field) => {\n if (field.type === 'dynamiczone') {\n // Dynamic zones take up all the columns in a row\n rows.push([field]);\n\n return rows;\n }\n\n if (!rows[rows.length - 1]) {\n // Create a new row if there isn't one available\n rows.push([]);\n }\n\n // Push fields to the current row, they wrap and handle their own column size\n rows[rows.length - 1].push(field);\n\n return rows;\n }, [])\n // Map the rows to panels\n .map((row) => [row])\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * getRemainingFieldsLayout\n * -----------------------------------------------------------------------------------------------*/\n\ninterface GetRemainingFieldsLayoutOptions\n extends Pick<HistoryContextValue, 'layout'>,\n Pick<GetInitData.Response['data'], 'fieldSizes'> {\n schemaAttributes: HistoryContextValue['schema']['attributes'];\n metadatas: Metadatas;\n}\n\n/**\n * Build a layout for the fields that are were deleted from the edit view layout\n * via the configure the view page. This layout will be merged with the main one.\n * Those fields would be restored if the user restores the history version, which is why it's\n * important to show them, even if they're not in the normal layout.\n */\nfunction getRemaingFieldsLayout({\n layout,\n metadatas,\n schemaAttributes,\n fieldSizes,\n}: GetRemainingFieldsLayoutOptions) {\n const fieldsInLayout = layout.flatMap((panel) =>\n panel.flatMap((row) => row.flatMap((field) => field.name))\n );\n const remainingFields = Object.entries(metadatas).reduce<EditFieldLayout[]>(\n (currentRemainingFields, [name, field]) => {\n // Make sure we do not fields that are not visible, e.g. \"id\"\n if (!fieldsInLayout.includes(name) && field.edit.visible === true) {\n const attribute = schemaAttributes[name];\n // @ts-expect-error not sure why attribute causes type error\n currentRemainingFields.push({\n attribute,\n type: attribute.type,\n visible: true,\n disabled: true,\n label: field.edit.label || name,\n name: name,\n size: fieldSizes[attribute.type].default ?? 12,\n });\n }\n\n return currentRemainingFields;\n },\n []\n );\n\n return createLayoutFromFields(remainingFields);\n}\n\n/* -------------------------------------------------------------------------------------------------\n * FormPanel\n * -----------------------------------------------------------------------------------------------*/\n\nconst FormPanel = ({ panel }: { panel: EditFieldLayout[][] }) => {\n if (panel.some((row) => row.some((field) => field.type === 'dynamiczone'))) {\n const [row] = panel;\n const [field] = row;\n\n return (\n <Grid.Root key={field.name} gap={4}>\n <Grid.Item col={12} s={12} xs={12} direction=\"column\" alignItems=\"stretch\">\n <VersionInputRenderer {...field} />\n </Grid.Item>\n </Grid.Root>\n );\n }\n\n return (\n <Box\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n paddingLeft={6}\n paddingRight={6}\n paddingTop={6}\n paddingBottom={6}\n borderColor=\"neutral150\"\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {panel.map((row, gridRowIndex) => (\n <Grid.Root key={gridRowIndex} gap={4}>\n {row.map(({ size, ...field }) => {\n return (\n <Grid.Item\n col={size}\n key={field.name}\n s={12}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <VersionInputRenderer {...field} />\n </Grid.Item>\n );\n })}\n </Grid.Root>\n ))}\n </Flex>\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * VersionContent\n * -----------------------------------------------------------------------------------------------*/\n\ntype UnknownField = EditFieldLayout & { shouldIgnoreRBAC: boolean };\n\nconst VersionContent = () => {\n const { formatMessage } = useIntl();\n const { fieldSizes } = useTypedSelector((state) => state['content-manager'].app);\n const version = useHistoryContext('VersionContent', (state) => state.selectedVersion);\n const layout = useHistoryContext('VersionContent', (state) => state.layout);\n const configuration = useHistoryContext('VersionContent', (state) => state.configuration);\n const schema = useHistoryContext('VersionContent', (state) => state.schema);\n\n // Build a layout for the unknown fields section\n const removedAttributes = version.meta.unknownAttributes.removed;\n const removedAttributesAsFields = Object.entries(removedAttributes).map(\n ([attributeName, attribute]) => {\n const field = {\n attribute,\n shouldIgnoreRBAC: true,\n type: attribute.type,\n visible: true,\n disabled: true,\n label: attributeName,\n name: attributeName,\n size: fieldSizes[attribute.type].default ?? 12,\n } as UnknownField;\n\n return field;\n }\n );\n const unknownFieldsLayout = createLayoutFromFields(removedAttributesAsFields);\n\n // Build a layout for the fields that are were deleted from the layout\n const remainingFieldsLayout = getRemaingFieldsLayout({\n metadatas: configuration.contentType.metadatas,\n layout,\n schemaAttributes: schema.attributes,\n fieldSizes,\n });\n\n const { components } = useDoc();\n\n /**\n * Transform the data before passing it to the form so that each field\n * has a uniquely generated key\n */\n const transformedData = React.useMemo(() => {\n const transform =\n (schemaAttributes: Schema.Attributes, components: ComponentsDictionary = {}) =>\n (document: Omit<Document, 'id'>) => {\n const schema = { attributes: schemaAttributes };\n\n const transformations = pipe(\n removeFieldsThatDontExistOnSchema(schema),\n prepareTempKeys(schema, components)\n );\n return transformations(document);\n };\n\n return transform(version.schema, components)(version.data);\n }, [components, version.data, version.schema]);\n\n return (\n <Layouts.Content>\n <Box paddingBottom={8}>\n <Form disabled={true} method=\"PUT\" initialValues={transformedData}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6} position=\"relative\">\n {[...layout, ...remainingFieldsLayout].map((panel, index) => {\n return <FormPanel key={index} panel={panel} />;\n })}\n </Flex>\n </Form>\n </Box>\n {removedAttributesAsFields.length > 0 && (\n <>\n <Divider />\n <Box paddingTop={8}>\n <Flex direction=\"column\" alignItems=\"flex-start\" paddingBottom={6} gap={1}>\n <Typography variant=\"delta\">\n {formatMessage({\n id: 'content-manager.history.content.unknown-fields.title',\n defaultMessage: 'Unknown fields',\n })}\n </Typography>\n <Typography variant=\"pi\">\n {formatMessage(\n {\n id: 'content-manager.history.content.unknown-fields.message',\n defaultMessage:\n 'These fields have been deleted or renamed in the Content-Type Builder. <b>These fields will not be restored.</b>',\n },\n {\n b: (chunks: React.ReactNode) => (\n <Typography variant=\"pi\" fontWeight=\"bold\">\n {chunks}\n </Typography>\n ),\n }\n )}\n </Typography>\n </Flex>\n <Form disabled={true} method=\"PUT\" initialValues={version.data}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6} position=\"relative\">\n {unknownFieldsLayout.map((panel, index) => {\n return <FormPanel key={index} panel={panel} />;\n })}\n </Flex>\n </Form>\n </Box>\n </>\n )}\n </Layouts.Content>\n );\n};\n\nexport { VersionContent, getRemaingFieldsLayout };\n"],"names":["createLayoutFromFields","fields","reduce","rows","field","type","push","length","map","row","getRemaingFieldsLayout","layout","metadatas","schemaAttributes","fieldSizes","fieldsInLayout","flatMap","panel","name","remainingFields","Object","entries","currentRemainingFields","includes","edit","visible","attribute","disabled","label","size","default","FormPanel","some","_jsx","Grid","Root","gap","Item","col","s","xs","direction","alignItems","VersionInputRenderer","Box","hasRadius","background","shadow","paddingLeft","paddingRight","paddingTop","paddingBottom","borderColor","Flex","gridRowIndex","VersionContent","formatMessage","useIntl","useTypedSelector","state","app","version","useHistoryContext","selectedVersion","configuration","schema","removedAttributes","meta","unknownAttributes","removed","removedAttributesAsFields","attributeName","shouldIgnoreRBAC","unknownFieldsLayout","remainingFieldsLayout","contentType","attributes","components","useDoc","transformedData","React","useMemo","transform","document","transformations","pipe","removeFieldsThatDontExistOnSchema","prepareTempKeys","data","_jsxs","Layouts","Content","Form","method","initialValues","position","index","_Fragment","Divider","Typography","variant","id","defaultMessage","b","chunks","fontWeight"],"mappings":"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"}
1
+ {"version":3,"file":"VersionContent.js","sources":["../../../../admin/src/history/components/VersionContent.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Form, Layouts, useForm, createRulesEngine } from '@strapi/admin/strapi-admin';\nimport { Box, Divider, Flex, Grid, Typography } from '@strapi/design-system';\nimport pipe from 'lodash/fp/pipe';\nimport { useIntl } from 'react-intl';\n\nimport { useDoc } from '../../hooks/useDocument';\nimport { useTypedSelector } from '../../modules/hooks';\nimport {\n prepareTempKeys,\n removeFieldsThatDontExistOnSchema,\n} from '../../pages/EditView/utils/data';\nimport { HistoryContextValue, useHistoryContext } from '../pages/History';\n\nimport { VersionInputRenderer } from './VersionInputRenderer';\n\nimport type { Metadatas } from '../../../../shared/contracts/content-types';\nimport type { GetInitData } from '../../../../shared/contracts/init';\nimport type { ComponentsDictionary, Document } from '../../hooks/useDocument';\nimport type { EditFieldLayout } from '../../hooks/useDocumentLayout';\nimport type { Schema } from '@strapi/types';\n\nconst createLayoutFromFields = <T extends EditFieldLayout | UnknownField>(fields: T[]) => {\n return (\n fields\n .reduce<Array<T[]>>((rows, field) => {\n if (field.type === 'dynamiczone') {\n // Dynamic zones take up all the columns in a row\n rows.push([field]);\n\n return rows;\n }\n\n if (!rows[rows.length - 1]) {\n // Create a new row if there isn't one available\n rows.push([]);\n }\n\n // Push fields to the current row, they wrap and handle their own column size\n rows[rows.length - 1].push(field);\n\n return rows;\n }, [])\n // Map the rows to panels\n .map((row) => [row])\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * getRemainingFieldsLayout\n * -----------------------------------------------------------------------------------------------*/\n\ninterface GetRemainingFieldsLayoutOptions\n extends Pick<HistoryContextValue, 'layout'>,\n Pick<GetInitData.Response['data'], 'fieldSizes'> {\n schemaAttributes: HistoryContextValue['schema']['attributes'];\n metadatas: Metadatas;\n}\n\n/**\n * Build a layout for the fields that are were deleted from the edit view layout\n * via the configure the view page. This layout will be merged with the main one.\n * Those fields would be restored if the user restores the history version, which is why it's\n * important to show them, even if they're not in the normal layout.\n */\nfunction getRemaingFieldsLayout({\n layout,\n metadatas,\n schemaAttributes,\n fieldSizes,\n}: GetRemainingFieldsLayoutOptions) {\n const fieldsInLayout = layout.flatMap((panel) =>\n panel.flatMap((row) => row.flatMap((field) => field.name))\n );\n const remainingFields = Object.entries(metadatas).reduce<EditFieldLayout[]>(\n (currentRemainingFields, [name, field]) => {\n // Make sure we do not fields that are not visible, e.g. \"id\"\n if (!fieldsInLayout.includes(name) && field.edit.visible === true) {\n const attribute = schemaAttributes[name];\n // @ts-expect-error not sure why attribute causes type error\n currentRemainingFields.push({\n attribute,\n type: attribute.type,\n visible: true,\n disabled: true,\n label: field.edit.label || name,\n name: name,\n size: fieldSizes[attribute.type].default ?? 12,\n });\n }\n\n return currentRemainingFields;\n },\n []\n );\n\n return createLayoutFromFields(remainingFields);\n}\n\n/* -------------------------------------------------------------------------------------------------\n * FormPanel\n * -----------------------------------------------------------------------------------------------*/\n\nconst FormPanel = ({ panel }: { panel: EditFieldLayout[][] }) => {\n const fieldValues = useForm('Fields', (state) => state.values);\n const rulesEngine = createRulesEngine();\n if (panel.some((row) => row.some((field) => field.type === 'dynamiczone'))) {\n const [row] = panel;\n const [field] = row;\n const condition = field.attribute?.conditions?.visible;\n\n if (condition) {\n const isVisible = rulesEngine.evaluate(condition, fieldValues);\n if (!isVisible) {\n return null; // Skip rendering the dynamic zone if the condition is not met\n }\n }\n\n return (\n <Grid.Root key={field.name} gap={4}>\n <Grid.Item col={12} s={12} xs={12} direction=\"column\" alignItems=\"stretch\">\n <VersionInputRenderer {...field} />\n </Grid.Item>\n </Grid.Root>\n );\n }\n\n return (\n <Box\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n paddingLeft={6}\n paddingRight={6}\n paddingTop={6}\n paddingBottom={6}\n borderColor=\"neutral150\"\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {panel.map((row, gridRowIndex) => {\n const visibleFields = row.filter((field) => {\n const condition = field.attribute?.conditions?.visible;\n\n if (condition) {\n return rulesEngine.evaluate(condition, fieldValues);\n }\n\n return true;\n });\n\n if (visibleFields.length === 0) {\n return null; // Skip rendering the entire grid row\n }\n\n return (\n <Grid.Root key={gridRowIndex} gap={4}>\n {visibleFields.map(({ size, ...field }) => {\n return (\n <Grid.Item\n col={size}\n key={field.name}\n s={12}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <VersionInputRenderer {...field} />\n </Grid.Item>\n );\n })}\n </Grid.Root>\n );\n })}\n </Flex>\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * VersionContent\n * -----------------------------------------------------------------------------------------------*/\n\ntype UnknownField = EditFieldLayout & { shouldIgnoreRBAC: boolean };\n\nconst VersionContent = () => {\n const { formatMessage } = useIntl();\n const { fieldSizes } = useTypedSelector((state) => state['content-manager'].app);\n const version = useHistoryContext('VersionContent', (state) => state.selectedVersion);\n const layout = useHistoryContext('VersionContent', (state) => state.layout);\n const configuration = useHistoryContext('VersionContent', (state) => state.configuration);\n const schema = useHistoryContext('VersionContent', (state) => state.schema);\n\n // Build a layout for the unknown fields section\n const removedAttributes = version.meta.unknownAttributes.removed;\n const removedAttributesAsFields = Object.entries(removedAttributes).map(\n ([attributeName, attribute]) => {\n const field = {\n attribute,\n shouldIgnoreRBAC: true,\n type: attribute.type,\n visible: true,\n disabled: true,\n label: attributeName,\n name: attributeName,\n size: fieldSizes[attribute.type].default ?? 12,\n } as UnknownField;\n\n return field;\n }\n );\n const unknownFieldsLayout = createLayoutFromFields(removedAttributesAsFields);\n\n // Build a layout for the fields that are were deleted from the layout\n const remainingFieldsLayout = getRemaingFieldsLayout({\n metadatas: configuration.contentType.metadatas,\n layout,\n schemaAttributes: schema.attributes,\n fieldSizes,\n });\n\n const { components } = useDoc();\n\n /**\n * Transform the data before passing it to the form so that each field\n * has a uniquely generated key\n */\n const transformedData = React.useMemo(() => {\n const transform =\n (schemaAttributes: Schema.Attributes, components: ComponentsDictionary = {}) =>\n (document: Omit<Document, 'id'>) => {\n const schema = { attributes: schemaAttributes };\n\n const transformations = pipe(\n removeFieldsThatDontExistOnSchema(schema),\n prepareTempKeys(schema, components)\n );\n return transformations(document);\n };\n\n return transform(version.schema, components)(version.data);\n }, [components, version.data, version.schema]);\n\n return (\n <Layouts.Content>\n <Box paddingBottom={8}>\n <Form disabled={true} method=\"PUT\" initialValues={transformedData}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6} position=\"relative\">\n {[...layout, ...remainingFieldsLayout].map((panel, index) => {\n return <FormPanel key={index} panel={panel} />;\n })}\n </Flex>\n </Form>\n </Box>\n {removedAttributesAsFields.length > 0 && (\n <>\n <Divider />\n <Box paddingTop={8}>\n <Flex direction=\"column\" alignItems=\"flex-start\" paddingBottom={6} gap={1}>\n <Typography variant=\"delta\">\n {formatMessage({\n id: 'content-manager.history.content.unknown-fields.title',\n defaultMessage: 'Unknown fields',\n })}\n </Typography>\n <Typography variant=\"pi\">\n {formatMessage(\n {\n id: 'content-manager.history.content.unknown-fields.message',\n defaultMessage:\n 'These fields have been deleted or renamed in the Content-Type Builder. <b>These fields will not be restored.</b>',\n },\n {\n b: (chunks: React.ReactNode) => (\n <Typography variant=\"pi\" fontWeight=\"bold\">\n {chunks}\n </Typography>\n ),\n }\n )}\n </Typography>\n </Flex>\n <Form disabled={true} method=\"PUT\" initialValues={version.data}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6} position=\"relative\">\n {unknownFieldsLayout.map((panel, index) => {\n return <FormPanel key={index} panel={panel} />;\n })}\n </Flex>\n </Form>\n </Box>\n </>\n )}\n </Layouts.Content>\n );\n};\n\nexport { VersionContent, getRemaingFieldsLayout };\n"],"names":["createLayoutFromFields","fields","reduce","rows","field","type","push","length","map","row","getRemaingFieldsLayout","layout","metadatas","schemaAttributes","fieldSizes","fieldsInLayout","flatMap","panel","name","remainingFields","Object","entries","currentRemainingFields","includes","edit","visible","attribute","disabled","label","size","default","FormPanel","fieldValues","useForm","state","values","rulesEngine","createRulesEngine","some","condition","conditions","isVisible","evaluate","_jsx","Grid","Root","gap","Item","col","s","xs","direction","alignItems","VersionInputRenderer","Box","hasRadius","background","shadow","paddingLeft","paddingRight","paddingTop","paddingBottom","borderColor","Flex","gridRowIndex","visibleFields","filter","VersionContent","formatMessage","useIntl","useTypedSelector","app","version","useHistoryContext","selectedVersion","configuration","schema","removedAttributes","meta","unknownAttributes","removed","removedAttributesAsFields","attributeName","shouldIgnoreRBAC","unknownFieldsLayout","remainingFieldsLayout","contentType","attributes","components","useDoc","transformedData","React","useMemo","transform","document","transformations","pipe","removeFieldsThatDontExistOnSchema","prepareTempKeys","data","_jsxs","Layouts","Content","Form","method","initialValues","position","index","_Fragment","Divider","Typography","variant","id","defaultMessage","b","chunks","fontWeight"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBA,MAAMA,yBAAyB,CAA2CC,MAAAA,GAAAA;AACxE,IAAA,OACEA,MACGC,CAAAA,MAAM,CAAa,CAACC,IAAMC,EAAAA,KAAAA,GAAAA;QACzB,IAAIA,KAAAA,CAAMC,IAAI,KAAK,aAAe,EAAA;;AAEhCF,YAAAA,IAAAA,CAAKG,IAAI,CAAC;AAACF,gBAAAA;AAAM,aAAA,CAAA;YAEjB,OAAOD,IAAAA;AACT;AAEA,QAAA,IAAI,CAACA,IAAI,CAACA,KAAKI,MAAM,GAAG,EAAE,EAAE;;YAE1BJ,IAAKG,CAAAA,IAAI,CAAC,EAAE,CAAA;AACd;;AAGAH,QAAAA,IAAI,CAACA,IAAKI,CAAAA,MAAM,GAAG,CAAE,CAAA,CAACD,IAAI,CAACF,KAAAA,CAAAA;QAE3B,OAAOD,IAAAA;KACN,EAAA,EAAE,CACL;KACCK,GAAG,CAAC,CAACC,GAAQ,GAAA;AAACA,YAAAA;AAAI,SAAA,CAAA;AAEzB,CAAA;AAaA;;;;;IAMA,SAASC,sBAAuB,CAAA,EAC9BC,MAAM,EACNC,SAAS,EACTC,gBAAgB,EAChBC,UAAU,EACsB,EAAA;AAChC,IAAA,MAAMC,iBAAiBJ,MAAOK,CAAAA,OAAO,CAAC,CAACC,QACrCA,KAAMD,CAAAA,OAAO,CAAC,CAACP,MAAQA,GAAIO,CAAAA,OAAO,CAAC,CAACZ,KAAAA,GAAUA,MAAMc,IAAI,CAAA,CAAA,CAAA;IAE1D,MAAMC,eAAAA,GAAkBC,MAAOC,CAAAA,OAAO,CAACT,SAAAA,CAAAA,CAAWV,MAAM,CACtD,CAACoB,sBAAAA,EAAwB,CAACJ,IAAAA,EAAMd,KAAM,CAAA,GAAA;;QAEpC,IAAI,CAACW,cAAeQ,CAAAA,QAAQ,CAACL,IAAAA,CAAAA,IAASd,MAAMoB,IAAI,CAACC,OAAO,KAAK,IAAM,EAAA;YACjE,MAAMC,SAAAA,GAAYb,gBAAgB,CAACK,IAAK,CAAA;;AAExCI,YAAAA,sBAAAA,CAAuBhB,IAAI,CAAC;AAC1BoB,gBAAAA,SAAAA;AACArB,gBAAAA,IAAAA,EAAMqB,UAAUrB,IAAI;gBACpBoB,OAAS,EAAA,IAAA;gBACTE,QAAU,EAAA,IAAA;AACVC,gBAAAA,KAAAA,EAAOxB,KAAMoB,CAAAA,IAAI,CAACI,KAAK,IAAIV,IAAAA;gBAC3BA,IAAMA,EAAAA,IAAAA;AACNW,gBAAAA,IAAAA,EAAMf,UAAU,CAACY,SAAAA,CAAUrB,IAAI,CAAC,CAACyB,OAAO,IAAI;AAC9C,aAAA,CAAA;AACF;QAEA,OAAOR,sBAAAA;AACT,KAAA,EACA,EAAE,CAAA;AAGJ,IAAA,OAAOtB,sBAAuBmB,CAAAA,eAAAA,CAAAA;AAChC;AAEA;;AAEkG,qGAElG,MAAMY,SAAAA,GAAY,CAAC,EAAEd,KAAK,EAAkC,GAAA;AAC1D,IAAA,MAAMe,cAAcC,mBAAQ,CAAA,QAAA,EAAU,CAACC,KAAAA,GAAUA,MAAMC,MAAM,CAAA;AAC7D,IAAA,MAAMC,WAAcC,GAAAA,6BAAAA,EAAAA;AACpB,IAAA,IAAIpB,KAAMqB,CAAAA,IAAI,CAAC,CAAC7B,GAAQA,GAAAA,GAAAA,CAAI6B,IAAI,CAAC,CAAClC,KAAAA,GAAUA,KAAMC,CAAAA,IAAI,KAAK,aAAiB,CAAA,CAAA,EAAA;QAC1E,MAAM,CAACI,IAAI,GAAGQ,KAAAA;QACd,MAAM,CAACb,MAAM,GAAGK,GAAAA;AAChB,QAAA,MAAM8B,SAAYnC,GAAAA,KAAAA,CAAMsB,SAAS,EAAEc,UAAYf,EAAAA,OAAAA;AAE/C,QAAA,IAAIc,SAAW,EAAA;AACb,YAAA,MAAME,SAAYL,GAAAA,WAAAA,CAAYM,QAAQ,CAACH,SAAWP,EAAAA,WAAAA,CAAAA;AAClD,YAAA,IAAI,CAACS,SAAW,EAAA;AACd,gBAAA,OAAO;AACT;AACF;QAEA,qBACEE,cAAA,CAACC,kBAAKC,IAAI,EAAA;YAAkBC,GAAK,EAAA,CAAA;oCAC/BH,cAAA,CAACC,kBAAKG,IAAI,EAAA;gBAACC,GAAK,EAAA,EAAA;gBAAIC,CAAG,EAAA,EAAA;gBAAIC,EAAI,EAAA,EAAA;gBAAIC,SAAU,EAAA,QAAA;gBAASC,UAAW,EAAA,SAAA;AAC/D,gBAAA,QAAA,gBAAAT,cAACU,CAAAA,yCAAAA,EAAAA;AAAsB,oBAAA,GAAGjD;;;AAFdA,SAAAA,EAAAA,KAAAA,CAAMc,IAAI,CAAA;AAM9B;AAEA,IAAA,qBACEyB,cAACW,CAAAA,gBAAAA,EAAAA;QACCC,SAAS,EAAA,IAAA;QACTC,UAAW,EAAA,UAAA;QACXC,MAAO,EAAA,aAAA;QACPC,WAAa,EAAA,CAAA;QACbC,YAAc,EAAA,CAAA;QACdC,UAAY,EAAA,CAAA;QACZC,aAAe,EAAA,CAAA;QACfC,WAAY,EAAA,YAAA;AAEZ,QAAA,QAAA,gBAAAnB,cAACoB,CAAAA,iBAAAA,EAAAA;YAAKZ,SAAU,EAAA,QAAA;YAASC,UAAW,EAAA,SAAA;YAAUN,GAAK,EAAA,CAAA;sBAChD7B,KAAMT,CAAAA,GAAG,CAAC,CAACC,GAAKuD,EAAAA,YAAAA,GAAAA;AACf,gBAAA,MAAMC,aAAgBxD,GAAAA,GAAAA,CAAIyD,MAAM,CAAC,CAAC9D,KAAAA,GAAAA;AAChC,oBAAA,MAAMmC,SAAYnC,GAAAA,KAAAA,CAAMsB,SAAS,EAAEc,UAAYf,EAAAA,OAAAA;AAE/C,oBAAA,IAAIc,SAAW,EAAA;wBACb,OAAOH,WAAAA,CAAYM,QAAQ,CAACH,SAAWP,EAAAA,WAAAA,CAAAA;AACzC;oBAEA,OAAO,IAAA;AACT,iBAAA,CAAA;gBAEA,IAAIiC,aAAAA,CAAc1D,MAAM,KAAK,CAAG,EAAA;AAC9B,oBAAA,OAAO;AACT;gBAEA,qBACEoC,cAAA,CAACC,kBAAKC,IAAI,EAAA;oBAAoBC,GAAK,EAAA,CAAA;AAChCmB,oBAAAA,QAAAA,EAAAA,aAAAA,CAAczD,GAAG,CAAC,CAAC,EAAEqB,IAAI,EAAE,GAAGzB,KAAO,EAAA,GAAA;wBACpC,qBACEuC,cAAA,CAACC,kBAAKG,IAAI,EAAA;4BACRC,GAAKnB,EAAAA,IAAAA;4BAELoB,CAAG,EAAA,EAAA;4BACHC,EAAI,EAAA,EAAA;4BACJC,SAAU,EAAA,QAAA;4BACVC,UAAW,EAAA,SAAA;AAEX,4BAAA,QAAA,gBAAAT,cAACU,CAAAA,yCAAAA,EAAAA;AAAsB,gCAAA,GAAGjD;;AANrBA,yBAAAA,EAAAA,KAAAA,CAAMc,IAAI,CAAA;AASrB,qBAAA;AAdc8C,iBAAAA,EAAAA,YAAAA,CAAAA;AAiBpB,aAAA;;;AAIR,CAAA;AAQA,MAAMG,cAAiB,GAAA,IAAA;IACrB,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAM,EAAEvD,UAAU,EAAE,GAAGwD,sBAAAA,CAAiB,CAACpC,KAAAA,GAAUA,KAAK,CAAC,iBAAkB,CAAA,CAACqC,GAAG,CAAA;AAC/E,IAAA,MAAMC,UAAUC,yBAAkB,CAAA,gBAAA,EAAkB,CAACvC,KAAAA,GAAUA,MAAMwC,eAAe,CAAA;AACpF,IAAA,MAAM/D,SAAS8D,yBAAkB,CAAA,gBAAA,EAAkB,CAACvC,KAAAA,GAAUA,MAAMvB,MAAM,CAAA;AAC1E,IAAA,MAAMgE,gBAAgBF,yBAAkB,CAAA,gBAAA,EAAkB,CAACvC,KAAAA,GAAUA,MAAMyC,aAAa,CAAA;AACxF,IAAA,MAAMC,SAASH,yBAAkB,CAAA,gBAAA,EAAkB,CAACvC,KAAAA,GAAUA,MAAM0C,MAAM,CAAA;;AAG1E,IAAA,MAAMC,oBAAoBL,OAAQM,CAAAA,IAAI,CAACC,iBAAiB,CAACC,OAAO;IAChE,MAAMC,yBAAAA,GAA4B7D,MAAOC,CAAAA,OAAO,CAACwD,iBAAAA,CAAAA,CAAmBrE,GAAG,CACrE,CAAC,CAAC0E,aAAAA,EAAexD,SAAU,CAAA,GAAA;AACzB,QAAA,MAAMtB,KAAQ,GAAA;AACZsB,YAAAA,SAAAA;YACAyD,gBAAkB,EAAA,IAAA;AAClB9E,YAAAA,IAAAA,EAAMqB,UAAUrB,IAAI;YACpBoB,OAAS,EAAA,IAAA;YACTE,QAAU,EAAA,IAAA;YACVC,KAAOsD,EAAAA,aAAAA;YACPhE,IAAMgE,EAAAA,aAAAA;AACNrD,YAAAA,IAAAA,EAAMf,UAAU,CAACY,SAAAA,CAAUrB,IAAI,CAAC,CAACyB,OAAO,IAAI;AAC9C,SAAA;QAEA,OAAO1B,KAAAA;AACT,KAAA,CAAA;AAEF,IAAA,MAAMgF,sBAAsBpF,sBAAuBiF,CAAAA,yBAAAA,CAAAA;;AAGnD,IAAA,MAAMI,wBAAwB3E,sBAAuB,CAAA;QACnDE,SAAW+D,EAAAA,aAAAA,CAAcW,WAAW,CAAC1E,SAAS;AAC9CD,QAAAA,MAAAA;AACAE,QAAAA,gBAAAA,EAAkB+D,OAAOW,UAAU;AACnCzE,QAAAA;AACF,KAAA,CAAA;IAEA,MAAM,EAAE0E,UAAU,EAAE,GAAGC,kBAAAA,EAAAA;AAEvB;;;AAGC,MACD,MAAMC,eAAAA,GAAkBC,gBAAMC,CAAAA,OAAO,CAAC,IAAA;AACpC,QAAA,MAAMC,YACJ,CAAChF,gBAAAA,EAAqC2E,aAAmC,EAAE,GAC3E,CAACM,QAAAA,GAAAA;AACC,gBAAA,MAAMlB,MAAS,GAAA;oBAAEW,UAAY1E,EAAAA;AAAiB,iBAAA;AAE9C,gBAAA,MAAMkF,eAAkBC,GAAAA,IAAAA,CACtBC,sCAAkCrB,CAAAA,MAAAA,CAAAA,EAClCsB,qBAAgBtB,MAAQY,EAAAA,UAAAA,CAAAA,CAAAA;AAE1B,gBAAA,OAAOO,eAAgBD,CAAAA,QAAAA,CAAAA;AACzB,aAAA;AAEF,QAAA,OAAOD,UAAUrB,OAAQI,CAAAA,MAAM,EAAEY,UAAAA,CAAAA,CAAYhB,QAAQ2B,IAAI,CAAA;KACxD,EAAA;AAACX,QAAAA,UAAAA;AAAYhB,QAAAA,OAAAA,CAAQ2B,IAAI;AAAE3B,QAAAA,OAAAA,CAAQI;AAAO,KAAA,CAAA;IAE7C,qBACEwB,eAAA,CAACC,oBAAQC,OAAO,EAAA;;0BACd3D,cAACW,CAAAA,gBAAAA,EAAAA;gBAAIO,aAAe,EAAA,CAAA;AAClB,gBAAA,QAAA,gBAAAlB,cAAC4D,CAAAA,gBAAAA,EAAAA;oBAAK5E,QAAU,EAAA,IAAA;oBAAM6E,MAAO,EAAA,KAAA;oBAAMC,aAAef,EAAAA,eAAAA;AAChD,oBAAA,QAAA,gBAAA/C,cAACoB,CAAAA,iBAAAA,EAAAA;wBAAKZ,SAAU,EAAA,QAAA;wBAASC,UAAW,EAAA,SAAA;wBAAUN,GAAK,EAAA,CAAA;wBAAG4D,QAAS,EAAA,UAAA;AAC5D,wBAAA,QAAA,EAAA;AAAI/F,4BAAAA,GAAAA,MAAAA;AAAW0E,4BAAAA,GAAAA;yBAAsB,CAAC7E,GAAG,CAAC,CAACS,KAAO0F,EAAAA,KAAAA,GAAAA;AACjD,4BAAA,qBAAOhE,cAACZ,CAAAA,SAAAA,EAAAA;gCAAsBd,KAAOA,EAAAA;AAAd0F,6BAAAA,EAAAA,KAAAA,CAAAA;AACzB,yBAAA;;;;YAIL1B,yBAA0B1E,CAAAA,MAAM,GAAG,CAClC,kBAAA6F,eAAA,CAAAQ,mBAAA,EAAA;;kCACEjE,cAACkE,CAAAA,oBAAAA,EAAAA,EAAAA,CAAAA;kCACDT,eAAC9C,CAAAA,gBAAAA,EAAAA;wBAAIM,UAAY,EAAA,CAAA;;0CACfwC,eAACrC,CAAAA,iBAAAA,EAAAA;gCAAKZ,SAAU,EAAA,QAAA;gCAASC,UAAW,EAAA,YAAA;gCAAaS,aAAe,EAAA,CAAA;gCAAGf,GAAK,EAAA,CAAA;;kDACtEH,cAACmE,CAAAA,uBAAAA,EAAAA;wCAAWC,OAAQ,EAAA,OAAA;kDACjB3C,aAAc,CAAA;4CACb4C,EAAI,EAAA,sDAAA;4CACJC,cAAgB,EAAA;AAClB,yCAAA;;kDAEFtE,cAACmE,CAAAA,uBAAAA,EAAAA;wCAAWC,OAAQ,EAAA,IAAA;kDACjB3C,aACC,CAAA;4CACE4C,EAAI,EAAA,wDAAA;4CACJC,cACE,EAAA;yCAEJ,EAAA;4CACEC,CAAG,EAAA,CAACC,uBACFxE,cAACmE,CAAAA,uBAAAA,EAAAA;oDAAWC,OAAQ,EAAA,IAAA;oDAAKK,UAAW,EAAA,MAAA;AACjCD,oDAAAA,QAAAA,EAAAA;;AAGP,yCAAA;;;;0CAINxE,cAAC4D,CAAAA,gBAAAA,EAAAA;gCAAK5E,QAAU,EAAA,IAAA;gCAAM6E,MAAO,EAAA,KAAA;AAAMC,gCAAAA,aAAAA,EAAejC,QAAQ2B,IAAI;AAC5D,gCAAA,QAAA,gBAAAxD,cAACoB,CAAAA,iBAAAA,EAAAA;oCAAKZ,SAAU,EAAA,QAAA;oCAASC,UAAW,EAAA,SAAA;oCAAUN,GAAK,EAAA,CAAA;oCAAG4D,QAAS,EAAA,UAAA;8CAC5DtB,mBAAoB5E,CAAAA,GAAG,CAAC,CAACS,KAAO0F,EAAAA,KAAAA,GAAAA;AAC/B,wCAAA,qBAAOhE,cAACZ,CAAAA,SAAAA,EAAAA;4CAAsBd,KAAOA,EAAAA;AAAd0F,yCAAAA,EAAAA,KAAAA,CAAAA;AACzB,qCAAA;;;;;;;;;AAQhB;;;;;"}
@@ -1,6 +1,6 @@
1
1
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
- import { Layouts, Form } from '@strapi/admin/strapi-admin';
3
+ import { Layouts, Form, useForm, createRulesEngine } from '@strapi/admin/strapi-admin';
4
4
  import { Box, Flex, Divider, Typography, Grid } from '@strapi/design-system';
5
5
  import pipe from 'lodash/fp/pipe';
6
6
  import { useIntl } from 'react-intl';
@@ -60,9 +60,18 @@ const createLayoutFromFields = (fields)=>{
60
60
  /* -------------------------------------------------------------------------------------------------
61
61
  * FormPanel
62
62
  * -----------------------------------------------------------------------------------------------*/ const FormPanel = ({ panel })=>{
63
+ const fieldValues = useForm('Fields', (state)=>state.values);
64
+ const rulesEngine = createRulesEngine();
63
65
  if (panel.some((row)=>row.some((field)=>field.type === 'dynamiczone'))) {
64
66
  const [row] = panel;
65
67
  const [field] = row;
68
+ const condition = field.attribute?.conditions?.visible;
69
+ if (condition) {
70
+ const isVisible = rulesEngine.evaluate(condition, fieldValues);
71
+ if (!isVisible) {
72
+ return null; // Skip rendering the dynamic zone if the condition is not met
73
+ }
74
+ }
66
75
  return /*#__PURE__*/ jsx(Grid.Root, {
67
76
  gap: 4,
68
77
  children: /*#__PURE__*/ jsx(Grid.Item, {
@@ -90,9 +99,20 @@ const createLayoutFromFields = (fields)=>{
90
99
  direction: "column",
91
100
  alignItems: "stretch",
92
101
  gap: 6,
93
- children: panel.map((row, gridRowIndex)=>/*#__PURE__*/ jsx(Grid.Root, {
102
+ children: panel.map((row, gridRowIndex)=>{
103
+ const visibleFields = row.filter((field)=>{
104
+ const condition = field.attribute?.conditions?.visible;
105
+ if (condition) {
106
+ return rulesEngine.evaluate(condition, fieldValues);
107
+ }
108
+ return true;
109
+ });
110
+ if (visibleFields.length === 0) {
111
+ return null; // Skip rendering the entire grid row
112
+ }
113
+ return /*#__PURE__*/ jsx(Grid.Root, {
94
114
  gap: 4,
95
- children: row.map(({ size, ...field })=>{
115
+ children: visibleFields.map(({ size, ...field })=>{
96
116
  return /*#__PURE__*/ jsx(Grid.Item, {
97
117
  col: size,
98
118
  s: 12,
@@ -104,7 +124,8 @@ const createLayoutFromFields = (fields)=>{
104
124
  })
105
125
  }, field.name);
106
126
  })
107
- }, gridRowIndex))
127
+ }, gridRowIndex);
128
+ })
108
129
  })
109
130
  });
110
131
  };
@@ -1 +1 @@
1
- {"version":3,"file":"VersionContent.mjs","sources":["../../../../admin/src/history/components/VersionContent.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Form, Layouts } from '@strapi/admin/strapi-admin';\nimport { Box, Divider, Flex, Grid, Typography } from '@strapi/design-system';\nimport pipe from 'lodash/fp/pipe';\nimport { useIntl } from 'react-intl';\n\nimport { useDoc } from '../../hooks/useDocument';\nimport { useTypedSelector } from '../../modules/hooks';\nimport {\n prepareTempKeys,\n removeFieldsThatDontExistOnSchema,\n} from '../../pages/EditView/utils/data';\nimport { HistoryContextValue, useHistoryContext } from '../pages/History';\n\nimport { VersionInputRenderer } from './VersionInputRenderer';\n\nimport type { Metadatas } from '../../../../shared/contracts/content-types';\nimport type { GetInitData } from '../../../../shared/contracts/init';\nimport type { ComponentsDictionary, Document } from '../../hooks/useDocument';\nimport type { EditFieldLayout } from '../../hooks/useDocumentLayout';\nimport type { Schema } from '@strapi/types';\n\nconst createLayoutFromFields = <T extends EditFieldLayout | UnknownField>(fields: T[]) => {\n return (\n fields\n .reduce<Array<T[]>>((rows, field) => {\n if (field.type === 'dynamiczone') {\n // Dynamic zones take up all the columns in a row\n rows.push([field]);\n\n return rows;\n }\n\n if (!rows[rows.length - 1]) {\n // Create a new row if there isn't one available\n rows.push([]);\n }\n\n // Push fields to the current row, they wrap and handle their own column size\n rows[rows.length - 1].push(field);\n\n return rows;\n }, [])\n // Map the rows to panels\n .map((row) => [row])\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * getRemainingFieldsLayout\n * -----------------------------------------------------------------------------------------------*/\n\ninterface GetRemainingFieldsLayoutOptions\n extends Pick<HistoryContextValue, 'layout'>,\n Pick<GetInitData.Response['data'], 'fieldSizes'> {\n schemaAttributes: HistoryContextValue['schema']['attributes'];\n metadatas: Metadatas;\n}\n\n/**\n * Build a layout for the fields that are were deleted from the edit view layout\n * via the configure the view page. This layout will be merged with the main one.\n * Those fields would be restored if the user restores the history version, which is why it's\n * important to show them, even if they're not in the normal layout.\n */\nfunction getRemaingFieldsLayout({\n layout,\n metadatas,\n schemaAttributes,\n fieldSizes,\n}: GetRemainingFieldsLayoutOptions) {\n const fieldsInLayout = layout.flatMap((panel) =>\n panel.flatMap((row) => row.flatMap((field) => field.name))\n );\n const remainingFields = Object.entries(metadatas).reduce<EditFieldLayout[]>(\n (currentRemainingFields, [name, field]) => {\n // Make sure we do not fields that are not visible, e.g. \"id\"\n if (!fieldsInLayout.includes(name) && field.edit.visible === true) {\n const attribute = schemaAttributes[name];\n // @ts-expect-error not sure why attribute causes type error\n currentRemainingFields.push({\n attribute,\n type: attribute.type,\n visible: true,\n disabled: true,\n label: field.edit.label || name,\n name: name,\n size: fieldSizes[attribute.type].default ?? 12,\n });\n }\n\n return currentRemainingFields;\n },\n []\n );\n\n return createLayoutFromFields(remainingFields);\n}\n\n/* -------------------------------------------------------------------------------------------------\n * FormPanel\n * -----------------------------------------------------------------------------------------------*/\n\nconst FormPanel = ({ panel }: { panel: EditFieldLayout[][] }) => {\n if (panel.some((row) => row.some((field) => field.type === 'dynamiczone'))) {\n const [row] = panel;\n const [field] = row;\n\n return (\n <Grid.Root key={field.name} gap={4}>\n <Grid.Item col={12} s={12} xs={12} direction=\"column\" alignItems=\"stretch\">\n <VersionInputRenderer {...field} />\n </Grid.Item>\n </Grid.Root>\n );\n }\n\n return (\n <Box\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n paddingLeft={6}\n paddingRight={6}\n paddingTop={6}\n paddingBottom={6}\n borderColor=\"neutral150\"\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {panel.map((row, gridRowIndex) => (\n <Grid.Root key={gridRowIndex} gap={4}>\n {row.map(({ size, ...field }) => {\n return (\n <Grid.Item\n col={size}\n key={field.name}\n s={12}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <VersionInputRenderer {...field} />\n </Grid.Item>\n );\n })}\n </Grid.Root>\n ))}\n </Flex>\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * VersionContent\n * -----------------------------------------------------------------------------------------------*/\n\ntype UnknownField = EditFieldLayout & { shouldIgnoreRBAC: boolean };\n\nconst VersionContent = () => {\n const { formatMessage } = useIntl();\n const { fieldSizes } = useTypedSelector((state) => state['content-manager'].app);\n const version = useHistoryContext('VersionContent', (state) => state.selectedVersion);\n const layout = useHistoryContext('VersionContent', (state) => state.layout);\n const configuration = useHistoryContext('VersionContent', (state) => state.configuration);\n const schema = useHistoryContext('VersionContent', (state) => state.schema);\n\n // Build a layout for the unknown fields section\n const removedAttributes = version.meta.unknownAttributes.removed;\n const removedAttributesAsFields = Object.entries(removedAttributes).map(\n ([attributeName, attribute]) => {\n const field = {\n attribute,\n shouldIgnoreRBAC: true,\n type: attribute.type,\n visible: true,\n disabled: true,\n label: attributeName,\n name: attributeName,\n size: fieldSizes[attribute.type].default ?? 12,\n } as UnknownField;\n\n return field;\n }\n );\n const unknownFieldsLayout = createLayoutFromFields(removedAttributesAsFields);\n\n // Build a layout for the fields that are were deleted from the layout\n const remainingFieldsLayout = getRemaingFieldsLayout({\n metadatas: configuration.contentType.metadatas,\n layout,\n schemaAttributes: schema.attributes,\n fieldSizes,\n });\n\n const { components } = useDoc();\n\n /**\n * Transform the data before passing it to the form so that each field\n * has a uniquely generated key\n */\n const transformedData = React.useMemo(() => {\n const transform =\n (schemaAttributes: Schema.Attributes, components: ComponentsDictionary = {}) =>\n (document: Omit<Document, 'id'>) => {\n const schema = { attributes: schemaAttributes };\n\n const transformations = pipe(\n removeFieldsThatDontExistOnSchema(schema),\n prepareTempKeys(schema, components)\n );\n return transformations(document);\n };\n\n return transform(version.schema, components)(version.data);\n }, [components, version.data, version.schema]);\n\n return (\n <Layouts.Content>\n <Box paddingBottom={8}>\n <Form disabled={true} method=\"PUT\" initialValues={transformedData}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6} position=\"relative\">\n {[...layout, ...remainingFieldsLayout].map((panel, index) => {\n return <FormPanel key={index} panel={panel} />;\n })}\n </Flex>\n </Form>\n </Box>\n {removedAttributesAsFields.length > 0 && (\n <>\n <Divider />\n <Box paddingTop={8}>\n <Flex direction=\"column\" alignItems=\"flex-start\" paddingBottom={6} gap={1}>\n <Typography variant=\"delta\">\n {formatMessage({\n id: 'content-manager.history.content.unknown-fields.title',\n defaultMessage: 'Unknown fields',\n })}\n </Typography>\n <Typography variant=\"pi\">\n {formatMessage(\n {\n id: 'content-manager.history.content.unknown-fields.message',\n defaultMessage:\n 'These fields have been deleted or renamed in the Content-Type Builder. <b>These fields will not be restored.</b>',\n },\n {\n b: (chunks: React.ReactNode) => (\n <Typography variant=\"pi\" fontWeight=\"bold\">\n {chunks}\n </Typography>\n ),\n }\n )}\n </Typography>\n </Flex>\n <Form disabled={true} method=\"PUT\" initialValues={version.data}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6} position=\"relative\">\n {unknownFieldsLayout.map((panel, index) => {\n return <FormPanel key={index} panel={panel} />;\n })}\n </Flex>\n </Form>\n </Box>\n </>\n )}\n </Layouts.Content>\n );\n};\n\nexport { VersionContent, getRemaingFieldsLayout };\n"],"names":["createLayoutFromFields","fields","reduce","rows","field","type","push","length","map","row","getRemaingFieldsLayout","layout","metadatas","schemaAttributes","fieldSizes","fieldsInLayout","flatMap","panel","name","remainingFields","Object","entries","currentRemainingFields","includes","edit","visible","attribute","disabled","label","size","default","FormPanel","some","_jsx","Grid","Root","gap","Item","col","s","xs","direction","alignItems","VersionInputRenderer","Box","hasRadius","background","shadow","paddingLeft","paddingRight","paddingTop","paddingBottom","borderColor","Flex","gridRowIndex","VersionContent","formatMessage","useIntl","useTypedSelector","state","app","version","useHistoryContext","selectedVersion","configuration","schema","removedAttributes","meta","unknownAttributes","removed","removedAttributesAsFields","attributeName","shouldIgnoreRBAC","unknownFieldsLayout","remainingFieldsLayout","contentType","attributes","components","useDoc","transformedData","React","useMemo","transform","document","transformations","pipe","removeFieldsThatDontExistOnSchema","prepareTempKeys","data","_jsxs","Layouts","Content","Form","method","initialValues","position","index","_Fragment","Divider","Typography","variant","id","defaultMessage","b","chunks","fontWeight"],"mappings":"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"}
1
+ {"version":3,"file":"VersionContent.mjs","sources":["../../../../admin/src/history/components/VersionContent.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Form, Layouts, useForm, createRulesEngine } from '@strapi/admin/strapi-admin';\nimport { Box, Divider, Flex, Grid, Typography } from '@strapi/design-system';\nimport pipe from 'lodash/fp/pipe';\nimport { useIntl } from 'react-intl';\n\nimport { useDoc } from '../../hooks/useDocument';\nimport { useTypedSelector } from '../../modules/hooks';\nimport {\n prepareTempKeys,\n removeFieldsThatDontExistOnSchema,\n} from '../../pages/EditView/utils/data';\nimport { HistoryContextValue, useHistoryContext } from '../pages/History';\n\nimport { VersionInputRenderer } from './VersionInputRenderer';\n\nimport type { Metadatas } from '../../../../shared/contracts/content-types';\nimport type { GetInitData } from '../../../../shared/contracts/init';\nimport type { ComponentsDictionary, Document } from '../../hooks/useDocument';\nimport type { EditFieldLayout } from '../../hooks/useDocumentLayout';\nimport type { Schema } from '@strapi/types';\n\nconst createLayoutFromFields = <T extends EditFieldLayout | UnknownField>(fields: T[]) => {\n return (\n fields\n .reduce<Array<T[]>>((rows, field) => {\n if (field.type === 'dynamiczone') {\n // Dynamic zones take up all the columns in a row\n rows.push([field]);\n\n return rows;\n }\n\n if (!rows[rows.length - 1]) {\n // Create a new row if there isn't one available\n rows.push([]);\n }\n\n // Push fields to the current row, they wrap and handle their own column size\n rows[rows.length - 1].push(field);\n\n return rows;\n }, [])\n // Map the rows to panels\n .map((row) => [row])\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * getRemainingFieldsLayout\n * -----------------------------------------------------------------------------------------------*/\n\ninterface GetRemainingFieldsLayoutOptions\n extends Pick<HistoryContextValue, 'layout'>,\n Pick<GetInitData.Response['data'], 'fieldSizes'> {\n schemaAttributes: HistoryContextValue['schema']['attributes'];\n metadatas: Metadatas;\n}\n\n/**\n * Build a layout for the fields that are were deleted from the edit view layout\n * via the configure the view page. This layout will be merged with the main one.\n * Those fields would be restored if the user restores the history version, which is why it's\n * important to show them, even if they're not in the normal layout.\n */\nfunction getRemaingFieldsLayout({\n layout,\n metadatas,\n schemaAttributes,\n fieldSizes,\n}: GetRemainingFieldsLayoutOptions) {\n const fieldsInLayout = layout.flatMap((panel) =>\n panel.flatMap((row) => row.flatMap((field) => field.name))\n );\n const remainingFields = Object.entries(metadatas).reduce<EditFieldLayout[]>(\n (currentRemainingFields, [name, field]) => {\n // Make sure we do not fields that are not visible, e.g. \"id\"\n if (!fieldsInLayout.includes(name) && field.edit.visible === true) {\n const attribute = schemaAttributes[name];\n // @ts-expect-error not sure why attribute causes type error\n currentRemainingFields.push({\n attribute,\n type: attribute.type,\n visible: true,\n disabled: true,\n label: field.edit.label || name,\n name: name,\n size: fieldSizes[attribute.type].default ?? 12,\n });\n }\n\n return currentRemainingFields;\n },\n []\n );\n\n return createLayoutFromFields(remainingFields);\n}\n\n/* -------------------------------------------------------------------------------------------------\n * FormPanel\n * -----------------------------------------------------------------------------------------------*/\n\nconst FormPanel = ({ panel }: { panel: EditFieldLayout[][] }) => {\n const fieldValues = useForm('Fields', (state) => state.values);\n const rulesEngine = createRulesEngine();\n if (panel.some((row) => row.some((field) => field.type === 'dynamiczone'))) {\n const [row] = panel;\n const [field] = row;\n const condition = field.attribute?.conditions?.visible;\n\n if (condition) {\n const isVisible = rulesEngine.evaluate(condition, fieldValues);\n if (!isVisible) {\n return null; // Skip rendering the dynamic zone if the condition is not met\n }\n }\n\n return (\n <Grid.Root key={field.name} gap={4}>\n <Grid.Item col={12} s={12} xs={12} direction=\"column\" alignItems=\"stretch\">\n <VersionInputRenderer {...field} />\n </Grid.Item>\n </Grid.Root>\n );\n }\n\n return (\n <Box\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n paddingLeft={6}\n paddingRight={6}\n paddingTop={6}\n paddingBottom={6}\n borderColor=\"neutral150\"\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {panel.map((row, gridRowIndex) => {\n const visibleFields = row.filter((field) => {\n const condition = field.attribute?.conditions?.visible;\n\n if (condition) {\n return rulesEngine.evaluate(condition, fieldValues);\n }\n\n return true;\n });\n\n if (visibleFields.length === 0) {\n return null; // Skip rendering the entire grid row\n }\n\n return (\n <Grid.Root key={gridRowIndex} gap={4}>\n {visibleFields.map(({ size, ...field }) => {\n return (\n <Grid.Item\n col={size}\n key={field.name}\n s={12}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <VersionInputRenderer {...field} />\n </Grid.Item>\n );\n })}\n </Grid.Root>\n );\n })}\n </Flex>\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * VersionContent\n * -----------------------------------------------------------------------------------------------*/\n\ntype UnknownField = EditFieldLayout & { shouldIgnoreRBAC: boolean };\n\nconst VersionContent = () => {\n const { formatMessage } = useIntl();\n const { fieldSizes } = useTypedSelector((state) => state['content-manager'].app);\n const version = useHistoryContext('VersionContent', (state) => state.selectedVersion);\n const layout = useHistoryContext('VersionContent', (state) => state.layout);\n const configuration = useHistoryContext('VersionContent', (state) => state.configuration);\n const schema = useHistoryContext('VersionContent', (state) => state.schema);\n\n // Build a layout for the unknown fields section\n const removedAttributes = version.meta.unknownAttributes.removed;\n const removedAttributesAsFields = Object.entries(removedAttributes).map(\n ([attributeName, attribute]) => {\n const field = {\n attribute,\n shouldIgnoreRBAC: true,\n type: attribute.type,\n visible: true,\n disabled: true,\n label: attributeName,\n name: attributeName,\n size: fieldSizes[attribute.type].default ?? 12,\n } as UnknownField;\n\n return field;\n }\n );\n const unknownFieldsLayout = createLayoutFromFields(removedAttributesAsFields);\n\n // Build a layout for the fields that are were deleted from the layout\n const remainingFieldsLayout = getRemaingFieldsLayout({\n metadatas: configuration.contentType.metadatas,\n layout,\n schemaAttributes: schema.attributes,\n fieldSizes,\n });\n\n const { components } = useDoc();\n\n /**\n * Transform the data before passing it to the form so that each field\n * has a uniquely generated key\n */\n const transformedData = React.useMemo(() => {\n const transform =\n (schemaAttributes: Schema.Attributes, components: ComponentsDictionary = {}) =>\n (document: Omit<Document, 'id'>) => {\n const schema = { attributes: schemaAttributes };\n\n const transformations = pipe(\n removeFieldsThatDontExistOnSchema(schema),\n prepareTempKeys(schema, components)\n );\n return transformations(document);\n };\n\n return transform(version.schema, components)(version.data);\n }, [components, version.data, version.schema]);\n\n return (\n <Layouts.Content>\n <Box paddingBottom={8}>\n <Form disabled={true} method=\"PUT\" initialValues={transformedData}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6} position=\"relative\">\n {[...layout, ...remainingFieldsLayout].map((panel, index) => {\n return <FormPanel key={index} panel={panel} />;\n })}\n </Flex>\n </Form>\n </Box>\n {removedAttributesAsFields.length > 0 && (\n <>\n <Divider />\n <Box paddingTop={8}>\n <Flex direction=\"column\" alignItems=\"flex-start\" paddingBottom={6} gap={1}>\n <Typography variant=\"delta\">\n {formatMessage({\n id: 'content-manager.history.content.unknown-fields.title',\n defaultMessage: 'Unknown fields',\n })}\n </Typography>\n <Typography variant=\"pi\">\n {formatMessage(\n {\n id: 'content-manager.history.content.unknown-fields.message',\n defaultMessage:\n 'These fields have been deleted or renamed in the Content-Type Builder. <b>These fields will not be restored.</b>',\n },\n {\n b: (chunks: React.ReactNode) => (\n <Typography variant=\"pi\" fontWeight=\"bold\">\n {chunks}\n </Typography>\n ),\n }\n )}\n </Typography>\n </Flex>\n <Form disabled={true} method=\"PUT\" initialValues={version.data}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6} position=\"relative\">\n {unknownFieldsLayout.map((panel, index) => {\n return <FormPanel key={index} panel={panel} />;\n })}\n </Flex>\n </Form>\n </Box>\n </>\n )}\n </Layouts.Content>\n );\n};\n\nexport { VersionContent, getRemaingFieldsLayout };\n"],"names":["createLayoutFromFields","fields","reduce","rows","field","type","push","length","map","row","getRemaingFieldsLayout","layout","metadatas","schemaAttributes","fieldSizes","fieldsInLayout","flatMap","panel","name","remainingFields","Object","entries","currentRemainingFields","includes","edit","visible","attribute","disabled","label","size","default","FormPanel","fieldValues","useForm","state","values","rulesEngine","createRulesEngine","some","condition","conditions","isVisible","evaluate","_jsx","Grid","Root","gap","Item","col","s","xs","direction","alignItems","VersionInputRenderer","Box","hasRadius","background","shadow","paddingLeft","paddingRight","paddingTop","paddingBottom","borderColor","Flex","gridRowIndex","visibleFields","filter","VersionContent","formatMessage","useIntl","useTypedSelector","app","version","useHistoryContext","selectedVersion","configuration","schema","removedAttributes","meta","unknownAttributes","removed","removedAttributesAsFields","attributeName","shouldIgnoreRBAC","unknownFieldsLayout","remainingFieldsLayout","contentType","attributes","components","useDoc","transformedData","React","useMemo","transform","document","transformations","pipe","removeFieldsThatDontExistOnSchema","prepareTempKeys","data","_jsxs","Layouts","Content","Form","method","initialValues","position","index","_Fragment","Divider","Typography","variant","id","defaultMessage","b","chunks","fontWeight"],"mappings":"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"}
@@ -19,6 +19,7 @@ var validation = require('../../utils/validation.js');
19
19
  var FormLayout = require('./components/FormLayout.js');
20
20
  var Header = require('./components/Header.js');
21
21
  var Panels = require('./components/Panels.js');
22
+ var data = require('./utils/data.js');
22
23
 
23
24
  /* -------------------------------------------------------------------------------------------------
24
25
  * EditViewPage
@@ -100,11 +101,20 @@ const EditViewPage = ()=>{
100
101
  initialValues: initialValues,
101
102
  method: isCreatingDocument ? 'POST' : 'PUT',
102
103
  validate: (values, options)=>{
104
+ // removes hidden fields from the validation
105
+ // this is necessary because the yup schema doesn't know about the visibility conditions
106
+ // and we don't want to validate fields that are not visible
107
+ const { data: cleanedValues, removedAttributes } = data.handleInvisibleAttributes(values, {
108
+ schema,
109
+ initialValues,
110
+ components
111
+ });
103
112
  const yupSchema = validation.createYupSchema(schema?.attributes, components, {
104
113
  status,
114
+ removedAttributes,
105
115
  ...options
106
116
  });
107
- return yupSchema.validate(values, {
117
+ return yupSchema.validate(cleanedValues, {
108
118
  abortEarly: false
109
119
  });
110
120
  },
@@ -1 +1 @@
1
- {"version":3,"file":"EditViewPage.js","sources":["../../../../admin/src/pages/EditView/EditViewPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Page,\n Blocker,\n Form,\n useForm,\n useRBAC,\n useNotification,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport { Grid, Main, Tabs } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useParams } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { SINGLE_TYPES } from '../../constants/collections';\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { DocumentRBAC, useDocumentRBAC } from '../../features/DocumentRBAC';\nimport { useDoc, type UseDocument } from '../../hooks/useDocument';\nimport { useDocumentLayout } from '../../hooks/useDocumentLayout';\nimport { useLazyComponents } from '../../hooks/useLazyComponents';\nimport { useOnce } from '../../hooks/useOnce';\nimport { getTranslation } from '../../utils/translations';\nimport { createYupSchema } from '../../utils/validation';\n\nimport { FormLayout } from './components/FormLayout';\nimport { Header } from './components/Header';\nimport { Panels } from './components/Panels';\n\n/* -------------------------------------------------------------------------------------------------\n * EditViewPage\n * -----------------------------------------------------------------------------------------------*/\n\n// Needs to be wrapped in a component to have access to the form context via a hook.\n// Using the Form component's render prop instead would cause unnecessary re-renders of Form children\nconst BlockerWrapper = () => {\n const resetForm = useForm('BlockerWrapper', (state) => state.resetForm);\n\n // We reset the form to the published version to avoid errors like – https://strapi-inc.atlassian.net/browse/CONTENT-2284\n return <Blocker onProceed={resetForm} />;\n};\n\nconst EditViewPage = () => {\n const location = useLocation();\n const [\n {\n query: { status },\n },\n setQuery,\n ] = useQueryParams<{ status: 'draft' | 'published' }>({\n status: 'draft',\n });\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n\n const doc = useDoc();\n const {\n document,\n meta,\n isLoading: isLoadingDocument,\n schema,\n components,\n collectionType,\n id,\n model,\n hasError,\n getTitle,\n getInitialFormValues,\n } = doc;\n\n const hasDraftAndPublished = schema?.options?.draftAndPublish ?? false;\n\n useOnce(() => {\n /**\n * We only ever want to fire the notification once otherwise\n * whenever the app re-renders it'll pop up regardless of\n * what we do because the state comes from react-router-dom\n */\n if (location?.state && 'error' in location.state) {\n toggleNotification({\n type: 'danger',\n message: location.state.error,\n timeout: 5000,\n });\n }\n });\n\n const isLoadingActionsRBAC = useDocumentRBAC('EditViewPage', (state) => state.isLoading);\n\n const isSingleType = collectionType === SINGLE_TYPES;\n\n /**\n * single-types don't current have an id, but because they're a singleton\n * we can simply use the update operation to continuously update the same\n * document with varying params.\n */\n const isCreatingDocument = !id && !isSingleType;\n\n const {\n isLoading: isLoadingLayout,\n edit: {\n layout,\n settings: { mainField },\n },\n } = useDocumentLayout(model);\n const pageTitle = getTitle(mainField);\n\n const { isLazyLoading } = useLazyComponents([]);\n\n const isLoading = isLoadingActionsRBAC || isLoadingDocument || isLoadingLayout || isLazyLoading;\n\n const initialValues = getInitialFormValues(isCreatingDocument);\n\n if (isLoading && !document?.documentId) {\n return <Page.Loading />;\n }\n\n if (!initialValues || hasError) {\n return <Page.Error />;\n }\n\n const handleTabChange = (status: string) => {\n if (status === 'published' || status === 'draft') {\n setQuery({ status }, 'push', true);\n }\n };\n\n const validateSync = (values: Record<string, unknown>, options: Record<string, string>) => {\n const yupSchema = createYupSchema(schema?.attributes, components, {\n status,\n ...options,\n });\n\n return yupSchema.validateSync(values, { abortEarly: false });\n };\n\n return (\n <Main paddingLeft={10} paddingRight={10}>\n <Page.Title>{pageTitle}</Page.Title>\n <Form\n disabled={hasDraftAndPublished && status === 'published'}\n initialValues={initialValues}\n method={isCreatingDocument ? 'POST' : 'PUT'}\n validate={(values: Record<string, unknown>, options: Record<string, string>) => {\n const yupSchema = createYupSchema(schema?.attributes, components, {\n status,\n ...options,\n });\n\n return yupSchema.validate(values, { abortEarly: false });\n }}\n initialErrors={location?.state?.forceValidation ? validateSync(initialValues, {}) : {}}\n >\n <>\n <Header\n isCreating={isCreatingDocument}\n status={hasDraftAndPublished ? getDocumentStatus(document, meta) : undefined}\n title={pageTitle}\n />\n <Tabs.Root variant=\"simple\" value={status} onValueChange={handleTabChange}>\n <Tabs.List\n aria-label={formatMessage({\n id: getTranslation('containers.edit.tabs.label'),\n defaultMessage: 'Document status',\n })}\n >\n {hasDraftAndPublished ? (\n <>\n <StatusTab value=\"draft\">\n {formatMessage({\n id: getTranslation('containers.edit.tabs.draft'),\n defaultMessage: 'draft',\n })}\n </StatusTab>\n <StatusTab\n disabled={!meta || meta.availableStatus.length === 0}\n value=\"published\"\n >\n {formatMessage({\n id: getTranslation('containers.edit.tabs.published'),\n defaultMessage: 'published',\n })}\n </StatusTab>\n </>\n ) : null}\n </Tabs.List>\n <Grid.Root paddingTop={8} gap={4}>\n <Grid.Item col={9} s={12} direction=\"column\" alignItems=\"stretch\">\n <Tabs.Content value=\"draft\">\n <FormLayout layout={layout} document={doc} />\n </Tabs.Content>\n <Tabs.Content value=\"published\">\n <FormLayout layout={layout} document={doc} />\n </Tabs.Content>\n </Grid.Item>\n <Grid.Item col={3} s={12} direction=\"column\" alignItems=\"stretch\">\n <Panels />\n </Grid.Item>\n </Grid.Root>\n </Tabs.Root>\n <BlockerWrapper />\n </>\n </Form>\n </Main>\n );\n};\n\nconst StatusTab = styled(Tabs.Trigger)`\n text-transform: uppercase;\n`;\n\n/**\n * @internal\n * @description Returns the status of the document where its latest state takes priority,\n * this typically will be \"published\" unless a user has edited their draft in which we should\n * display \"modified\".\n */\nconst getDocumentStatus = (\n document: ReturnType<UseDocument>['document'],\n meta: ReturnType<UseDocument>['meta']\n): 'draft' | 'published' | 'modified' => {\n const docStatus = document?.status;\n const statuses = meta?.availableStatus ?? [];\n\n /**\n * Creating an entry\n */\n if (!docStatus) {\n return 'draft';\n }\n\n /**\n * We're viewing a draft, but the document could have a published version\n */\n if (docStatus === 'draft' && statuses.find((doc) => doc.publishedAt !== null)) {\n return 'published';\n }\n\n return docStatus;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedEditViewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedEditViewPage = () => {\n const { slug = '' } = useParams<{\n slug: string;\n }>();\n const {\n permissions = [],\n isLoading,\n error,\n } = useRBAC(\n PERMISSIONS.map((action) => ({\n action,\n subject: slug,\n }))\n );\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error || !slug) {\n return <Page.Error />;\n }\n\n return (\n <Page.Protect permissions={permissions}>\n {({ permissions }) => (\n <DocumentRBAC permissions={permissions}>\n <EditViewPage />\n </DocumentRBAC>\n )}\n </Page.Protect>\n );\n};\n\nexport { EditViewPage, ProtectedEditViewPage, getDocumentStatus };\n"],"names":["BlockerWrapper","resetForm","useForm","state","_jsx","Blocker","onProceed","EditViewPage","location","useLocation","query","status","setQuery","useQueryParams","formatMessage","useIntl","toggleNotification","useNotification","doc","useDoc","document","meta","isLoading","isLoadingDocument","schema","components","collectionType","id","model","hasError","getTitle","getInitialFormValues","hasDraftAndPublished","options","draftAndPublish","useOnce","type","message","error","timeout","isLoadingActionsRBAC","useDocumentRBAC","isSingleType","SINGLE_TYPES","isCreatingDocument","isLoadingLayout","edit","layout","settings","mainField","useDocumentLayout","pageTitle","isLazyLoading","useLazyComponents","initialValues","documentId","Page","Loading","Error","handleTabChange","validateSync","values","yupSchema","createYupSchema","attributes","abortEarly","_jsxs","Main","paddingLeft","paddingRight","Title","Form","disabled","method","validate","initialErrors","forceValidation","_Fragment","Header","isCreating","getDocumentStatus","undefined","title","Tabs","Root","variant","value","onValueChange","List","aria-label","getTranslation","defaultMessage","StatusTab","availableStatus","length","Grid","paddingTop","gap","Item","col","s","direction","alignItems","Content","FormLayout","Panels","styled","Trigger","docStatus","statuses","find","publishedAt","ProtectedEditViewPage","slug","useParams","permissions","useRBAC","PERMISSIONS","map","action","subject","Protect","DocumentRBAC"],"mappings":"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"}
1
+ {"version":3,"file":"EditViewPage.js","sources":["../../../../admin/src/pages/EditView/EditViewPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Page,\n Blocker,\n Form,\n useForm,\n useRBAC,\n useNotification,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport { Grid, Main, Tabs } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useParams } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { SINGLE_TYPES } from '../../constants/collections';\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { DocumentRBAC, useDocumentRBAC } from '../../features/DocumentRBAC';\nimport { useDoc, type UseDocument } from '../../hooks/useDocument';\nimport { useDocumentLayout } from '../../hooks/useDocumentLayout';\nimport { useLazyComponents } from '../../hooks/useLazyComponents';\nimport { useOnce } from '../../hooks/useOnce';\nimport { getTranslation } from '../../utils/translations';\nimport { createYupSchema } from '../../utils/validation';\n\nimport { FormLayout } from './components/FormLayout';\nimport { Header } from './components/Header';\nimport { Panels } from './components/Panels';\nimport { handleInvisibleAttributes } from './utils/data';\n\n/* -------------------------------------------------------------------------------------------------\n * EditViewPage\n * -----------------------------------------------------------------------------------------------*/\n\n// Needs to be wrapped in a component to have access to the form context via a hook.\n// Using the Form component's render prop instead would cause unnecessary re-renders of Form children\nconst BlockerWrapper = () => {\n const resetForm = useForm('BlockerWrapper', (state) => state.resetForm);\n\n // We reset the form to the published version to avoid errors like – https://strapi-inc.atlassian.net/browse/CONTENT-2284\n return <Blocker onProceed={resetForm} />;\n};\n\nconst EditViewPage = () => {\n const location = useLocation();\n const [\n {\n query: { status },\n },\n setQuery,\n ] = useQueryParams<{ status: 'draft' | 'published' }>({\n status: 'draft',\n });\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n\n const doc = useDoc();\n const {\n document,\n meta,\n isLoading: isLoadingDocument,\n schema,\n components,\n collectionType,\n id,\n model,\n hasError,\n getTitle,\n getInitialFormValues,\n } = doc;\n\n const hasDraftAndPublished = schema?.options?.draftAndPublish ?? false;\n\n useOnce(() => {\n /**\n * We only ever want to fire the notification once otherwise\n * whenever the app re-renders it'll pop up regardless of\n * what we do because the state comes from react-router-dom\n */\n if (location?.state && 'error' in location.state) {\n toggleNotification({\n type: 'danger',\n message: location.state.error,\n timeout: 5000,\n });\n }\n });\n\n const isLoadingActionsRBAC = useDocumentRBAC('EditViewPage', (state) => state.isLoading);\n\n const isSingleType = collectionType === SINGLE_TYPES;\n\n /**\n * single-types don't current have an id, but because they're a singleton\n * we can simply use the update operation to continuously update the same\n * document with varying params.\n */\n const isCreatingDocument = !id && !isSingleType;\n\n const {\n isLoading: isLoadingLayout,\n edit: {\n layout,\n settings: { mainField },\n },\n } = useDocumentLayout(model);\n const pageTitle = getTitle(mainField);\n\n const { isLazyLoading } = useLazyComponents([]);\n\n const isLoading = isLoadingActionsRBAC || isLoadingDocument || isLoadingLayout || isLazyLoading;\n\n const initialValues = getInitialFormValues(isCreatingDocument);\n\n if (isLoading && !document?.documentId) {\n return <Page.Loading />;\n }\n\n if (!initialValues || hasError) {\n return <Page.Error />;\n }\n\n const handleTabChange = (status: string) => {\n if (status === 'published' || status === 'draft') {\n setQuery({ status }, 'push', true);\n }\n };\n\n const validateSync = (values: Record<string, unknown>, options: Record<string, string>) => {\n const yupSchema = createYupSchema(schema?.attributes, components, {\n status,\n ...options,\n });\n\n return yupSchema.validateSync(values, { abortEarly: false });\n };\n\n return (\n <Main paddingLeft={10} paddingRight={10}>\n <Page.Title>{pageTitle}</Page.Title>\n <Form\n disabled={hasDraftAndPublished && status === 'published'}\n initialValues={initialValues}\n method={isCreatingDocument ? 'POST' : 'PUT'}\n validate={(values: Record<string, unknown>, options: Record<string, string>) => {\n // removes hidden fields from the validation\n // this is necessary because the yup schema doesn't know about the visibility conditions\n // and we don't want to validate fields that are not visible\n const { data: cleanedValues, removedAttributes } = handleInvisibleAttributes(values, {\n schema,\n initialValues,\n components,\n });\n\n const yupSchema = createYupSchema(schema?.attributes, components, {\n status,\n removedAttributes,\n ...options,\n });\n\n return yupSchema.validate(cleanedValues, { abortEarly: false });\n }}\n initialErrors={location?.state?.forceValidation ? validateSync(initialValues, {}) : {}}\n >\n <>\n <Header\n isCreating={isCreatingDocument}\n status={hasDraftAndPublished ? getDocumentStatus(document, meta) : undefined}\n title={pageTitle}\n />\n <Tabs.Root variant=\"simple\" value={status} onValueChange={handleTabChange}>\n <Tabs.List\n aria-label={formatMessage({\n id: getTranslation('containers.edit.tabs.label'),\n defaultMessage: 'Document status',\n })}\n >\n {hasDraftAndPublished ? (\n <>\n <StatusTab value=\"draft\">\n {formatMessage({\n id: getTranslation('containers.edit.tabs.draft'),\n defaultMessage: 'draft',\n })}\n </StatusTab>\n <StatusTab\n disabled={!meta || meta.availableStatus.length === 0}\n value=\"published\"\n >\n {formatMessage({\n id: getTranslation('containers.edit.tabs.published'),\n defaultMessage: 'published',\n })}\n </StatusTab>\n </>\n ) : null}\n </Tabs.List>\n <Grid.Root paddingTop={8} gap={4}>\n <Grid.Item col={9} s={12} direction=\"column\" alignItems=\"stretch\">\n <Tabs.Content value=\"draft\">\n <FormLayout layout={layout} document={doc} />\n </Tabs.Content>\n <Tabs.Content value=\"published\">\n <FormLayout layout={layout} document={doc} />\n </Tabs.Content>\n </Grid.Item>\n <Grid.Item col={3} s={12} direction=\"column\" alignItems=\"stretch\">\n <Panels />\n </Grid.Item>\n </Grid.Root>\n </Tabs.Root>\n <BlockerWrapper />\n </>\n </Form>\n </Main>\n );\n};\n\nconst StatusTab = styled(Tabs.Trigger)`\n text-transform: uppercase;\n`;\n\n/**\n * @internal\n * @description Returns the status of the document where its latest state takes priority,\n * this typically will be \"published\" unless a user has edited their draft in which we should\n * display \"modified\".\n */\nconst getDocumentStatus = (\n document: ReturnType<UseDocument>['document'],\n meta: ReturnType<UseDocument>['meta']\n): 'draft' | 'published' | 'modified' => {\n const docStatus = document?.status;\n const statuses = meta?.availableStatus ?? [];\n\n /**\n * Creating an entry\n */\n if (!docStatus) {\n return 'draft';\n }\n\n /**\n * We're viewing a draft, but the document could have a published version\n */\n if (docStatus === 'draft' && statuses.find((doc) => doc.publishedAt !== null)) {\n return 'published';\n }\n\n return docStatus;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedEditViewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedEditViewPage = () => {\n const { slug = '' } = useParams<{\n slug: string;\n }>();\n const {\n permissions = [],\n isLoading,\n error,\n } = useRBAC(\n PERMISSIONS.map((action) => ({\n action,\n subject: slug,\n }))\n );\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error || !slug) {\n return <Page.Error />;\n }\n\n return (\n <Page.Protect permissions={permissions}>\n {({ permissions }) => (\n <DocumentRBAC permissions={permissions}>\n <EditViewPage />\n </DocumentRBAC>\n )}\n </Page.Protect>\n );\n};\n\nexport { EditViewPage, ProtectedEditViewPage, getDocumentStatus };\n"],"names":["BlockerWrapper","resetForm","useForm","state","_jsx","Blocker","onProceed","EditViewPage","location","useLocation","query","status","setQuery","useQueryParams","formatMessage","useIntl","toggleNotification","useNotification","doc","useDoc","document","meta","isLoading","isLoadingDocument","schema","components","collectionType","id","model","hasError","getTitle","getInitialFormValues","hasDraftAndPublished","options","draftAndPublish","useOnce","type","message","error","timeout","isLoadingActionsRBAC","useDocumentRBAC","isSingleType","SINGLE_TYPES","isCreatingDocument","isLoadingLayout","edit","layout","settings","mainField","useDocumentLayout","pageTitle","isLazyLoading","useLazyComponents","initialValues","documentId","Page","Loading","Error","handleTabChange","validateSync","values","yupSchema","createYupSchema","attributes","abortEarly","_jsxs","Main","paddingLeft","paddingRight","Title","Form","disabled","method","validate","data","cleanedValues","removedAttributes","handleInvisibleAttributes","initialErrors","forceValidation","_Fragment","Header","isCreating","getDocumentStatus","undefined","title","Tabs","Root","variant","value","onValueChange","List","aria-label","getTranslation","defaultMessage","StatusTab","availableStatus","length","Grid","paddingTop","gap","Item","col","s","direction","alignItems","Content","FormLayout","Panels","styled","Trigger","docStatus","statuses","find","publishedAt","ProtectedEditViewPage","slug","useParams","permissions","useRBAC","PERMISSIONS","map","action","subject","Protect","DocumentRBAC"],"mappings":"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"}
@@ -17,6 +17,7 @@ import { createYupSchema } from '../../utils/validation.mjs';
17
17
  import { FormLayout } from './components/FormLayout.mjs';
18
18
  import { Header } from './components/Header.mjs';
19
19
  import { Panels } from './components/Panels.mjs';
20
+ import { handleInvisibleAttributes } from './utils/data.mjs';
20
21
 
21
22
  /* -------------------------------------------------------------------------------------------------
22
23
  * EditViewPage
@@ -98,11 +99,20 @@ const EditViewPage = ()=>{
98
99
  initialValues: initialValues,
99
100
  method: isCreatingDocument ? 'POST' : 'PUT',
100
101
  validate: (values, options)=>{
102
+ // removes hidden fields from the validation
103
+ // this is necessary because the yup schema doesn't know about the visibility conditions
104
+ // and we don't want to validate fields that are not visible
105
+ const { data: cleanedValues, removedAttributes } = handleInvisibleAttributes(values, {
106
+ schema,
107
+ initialValues,
108
+ components
109
+ });
101
110
  const yupSchema = createYupSchema(schema?.attributes, components, {
102
111
  status,
112
+ removedAttributes,
103
113
  ...options
104
114
  });
105
- return yupSchema.validate(values, {
115
+ return yupSchema.validate(cleanedValues, {
106
116
  abortEarly: false
107
117
  });
108
118
  },
@@ -1 +1 @@
1
- {"version":3,"file":"EditViewPage.mjs","sources":["../../../../admin/src/pages/EditView/EditViewPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Page,\n Blocker,\n Form,\n useForm,\n useRBAC,\n useNotification,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport { Grid, Main, Tabs } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useParams } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { SINGLE_TYPES } from '../../constants/collections';\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { DocumentRBAC, useDocumentRBAC } from '../../features/DocumentRBAC';\nimport { useDoc, type UseDocument } from '../../hooks/useDocument';\nimport { useDocumentLayout } from '../../hooks/useDocumentLayout';\nimport { useLazyComponents } from '../../hooks/useLazyComponents';\nimport { useOnce } from '../../hooks/useOnce';\nimport { getTranslation } from '../../utils/translations';\nimport { createYupSchema } from '../../utils/validation';\n\nimport { FormLayout } from './components/FormLayout';\nimport { Header } from './components/Header';\nimport { Panels } from './components/Panels';\n\n/* -------------------------------------------------------------------------------------------------\n * EditViewPage\n * -----------------------------------------------------------------------------------------------*/\n\n// Needs to be wrapped in a component to have access to the form context via a hook.\n// Using the Form component's render prop instead would cause unnecessary re-renders of Form children\nconst BlockerWrapper = () => {\n const resetForm = useForm('BlockerWrapper', (state) => state.resetForm);\n\n // We reset the form to the published version to avoid errors like – https://strapi-inc.atlassian.net/browse/CONTENT-2284\n return <Blocker onProceed={resetForm} />;\n};\n\nconst EditViewPage = () => {\n const location = useLocation();\n const [\n {\n query: { status },\n },\n setQuery,\n ] = useQueryParams<{ status: 'draft' | 'published' }>({\n status: 'draft',\n });\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n\n const doc = useDoc();\n const {\n document,\n meta,\n isLoading: isLoadingDocument,\n schema,\n components,\n collectionType,\n id,\n model,\n hasError,\n getTitle,\n getInitialFormValues,\n } = doc;\n\n const hasDraftAndPublished = schema?.options?.draftAndPublish ?? false;\n\n useOnce(() => {\n /**\n * We only ever want to fire the notification once otherwise\n * whenever the app re-renders it'll pop up regardless of\n * what we do because the state comes from react-router-dom\n */\n if (location?.state && 'error' in location.state) {\n toggleNotification({\n type: 'danger',\n message: location.state.error,\n timeout: 5000,\n });\n }\n });\n\n const isLoadingActionsRBAC = useDocumentRBAC('EditViewPage', (state) => state.isLoading);\n\n const isSingleType = collectionType === SINGLE_TYPES;\n\n /**\n * single-types don't current have an id, but because they're a singleton\n * we can simply use the update operation to continuously update the same\n * document with varying params.\n */\n const isCreatingDocument = !id && !isSingleType;\n\n const {\n isLoading: isLoadingLayout,\n edit: {\n layout,\n settings: { mainField },\n },\n } = useDocumentLayout(model);\n const pageTitle = getTitle(mainField);\n\n const { isLazyLoading } = useLazyComponents([]);\n\n const isLoading = isLoadingActionsRBAC || isLoadingDocument || isLoadingLayout || isLazyLoading;\n\n const initialValues = getInitialFormValues(isCreatingDocument);\n\n if (isLoading && !document?.documentId) {\n return <Page.Loading />;\n }\n\n if (!initialValues || hasError) {\n return <Page.Error />;\n }\n\n const handleTabChange = (status: string) => {\n if (status === 'published' || status === 'draft') {\n setQuery({ status }, 'push', true);\n }\n };\n\n const validateSync = (values: Record<string, unknown>, options: Record<string, string>) => {\n const yupSchema = createYupSchema(schema?.attributes, components, {\n status,\n ...options,\n });\n\n return yupSchema.validateSync(values, { abortEarly: false });\n };\n\n return (\n <Main paddingLeft={10} paddingRight={10}>\n <Page.Title>{pageTitle}</Page.Title>\n <Form\n disabled={hasDraftAndPublished && status === 'published'}\n initialValues={initialValues}\n method={isCreatingDocument ? 'POST' : 'PUT'}\n validate={(values: Record<string, unknown>, options: Record<string, string>) => {\n const yupSchema = createYupSchema(schema?.attributes, components, {\n status,\n ...options,\n });\n\n return yupSchema.validate(values, { abortEarly: false });\n }}\n initialErrors={location?.state?.forceValidation ? validateSync(initialValues, {}) : {}}\n >\n <>\n <Header\n isCreating={isCreatingDocument}\n status={hasDraftAndPublished ? getDocumentStatus(document, meta) : undefined}\n title={pageTitle}\n />\n <Tabs.Root variant=\"simple\" value={status} onValueChange={handleTabChange}>\n <Tabs.List\n aria-label={formatMessage({\n id: getTranslation('containers.edit.tabs.label'),\n defaultMessage: 'Document status',\n })}\n >\n {hasDraftAndPublished ? (\n <>\n <StatusTab value=\"draft\">\n {formatMessage({\n id: getTranslation('containers.edit.tabs.draft'),\n defaultMessage: 'draft',\n })}\n </StatusTab>\n <StatusTab\n disabled={!meta || meta.availableStatus.length === 0}\n value=\"published\"\n >\n {formatMessage({\n id: getTranslation('containers.edit.tabs.published'),\n defaultMessage: 'published',\n })}\n </StatusTab>\n </>\n ) : null}\n </Tabs.List>\n <Grid.Root paddingTop={8} gap={4}>\n <Grid.Item col={9} s={12} direction=\"column\" alignItems=\"stretch\">\n <Tabs.Content value=\"draft\">\n <FormLayout layout={layout} document={doc} />\n </Tabs.Content>\n <Tabs.Content value=\"published\">\n <FormLayout layout={layout} document={doc} />\n </Tabs.Content>\n </Grid.Item>\n <Grid.Item col={3} s={12} direction=\"column\" alignItems=\"stretch\">\n <Panels />\n </Grid.Item>\n </Grid.Root>\n </Tabs.Root>\n <BlockerWrapper />\n </>\n </Form>\n </Main>\n );\n};\n\nconst StatusTab = styled(Tabs.Trigger)`\n text-transform: uppercase;\n`;\n\n/**\n * @internal\n * @description Returns the status of the document where its latest state takes priority,\n * this typically will be \"published\" unless a user has edited their draft in which we should\n * display \"modified\".\n */\nconst getDocumentStatus = (\n document: ReturnType<UseDocument>['document'],\n meta: ReturnType<UseDocument>['meta']\n): 'draft' | 'published' | 'modified' => {\n const docStatus = document?.status;\n const statuses = meta?.availableStatus ?? [];\n\n /**\n * Creating an entry\n */\n if (!docStatus) {\n return 'draft';\n }\n\n /**\n * We're viewing a draft, but the document could have a published version\n */\n if (docStatus === 'draft' && statuses.find((doc) => doc.publishedAt !== null)) {\n return 'published';\n }\n\n return docStatus;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedEditViewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedEditViewPage = () => {\n const { slug = '' } = useParams<{\n slug: string;\n }>();\n const {\n permissions = [],\n isLoading,\n error,\n } = useRBAC(\n PERMISSIONS.map((action) => ({\n action,\n subject: slug,\n }))\n );\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error || !slug) {\n return <Page.Error />;\n }\n\n return (\n <Page.Protect permissions={permissions}>\n {({ permissions }) => (\n <DocumentRBAC permissions={permissions}>\n <EditViewPage />\n </DocumentRBAC>\n )}\n </Page.Protect>\n );\n};\n\nexport { EditViewPage, ProtectedEditViewPage, getDocumentStatus };\n"],"names":["BlockerWrapper","resetForm","useForm","state","_jsx","Blocker","onProceed","EditViewPage","location","useLocation","query","status","setQuery","useQueryParams","formatMessage","useIntl","toggleNotification","useNotification","doc","useDoc","document","meta","isLoading","isLoadingDocument","schema","components","collectionType","id","model","hasError","getTitle","getInitialFormValues","hasDraftAndPublished","options","draftAndPublish","useOnce","type","message","error","timeout","isLoadingActionsRBAC","useDocumentRBAC","isSingleType","SINGLE_TYPES","isCreatingDocument","isLoadingLayout","edit","layout","settings","mainField","useDocumentLayout","pageTitle","isLazyLoading","useLazyComponents","initialValues","documentId","Page","Loading","Error","handleTabChange","validateSync","values","yupSchema","createYupSchema","attributes","abortEarly","_jsxs","Main","paddingLeft","paddingRight","Title","Form","disabled","method","validate","initialErrors","forceValidation","_Fragment","Header","isCreating","getDocumentStatus","undefined","title","Tabs","Root","variant","value","onValueChange","List","aria-label","getTranslation","defaultMessage","StatusTab","availableStatus","length","Grid","paddingTop","gap","Item","col","s","direction","alignItems","Content","FormLayout","Panels","styled","Trigger","docStatus","statuses","find","publishedAt","ProtectedEditViewPage","slug","useParams","permissions","useRBAC","PERMISSIONS","map","action","subject","Protect","DocumentRBAC"],"mappings":"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"}
1
+ {"version":3,"file":"EditViewPage.mjs","sources":["../../../../admin/src/pages/EditView/EditViewPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Page,\n Blocker,\n Form,\n useForm,\n useRBAC,\n useNotification,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport { Grid, Main, Tabs } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useParams } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { SINGLE_TYPES } from '../../constants/collections';\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { DocumentRBAC, useDocumentRBAC } from '../../features/DocumentRBAC';\nimport { useDoc, type UseDocument } from '../../hooks/useDocument';\nimport { useDocumentLayout } from '../../hooks/useDocumentLayout';\nimport { useLazyComponents } from '../../hooks/useLazyComponents';\nimport { useOnce } from '../../hooks/useOnce';\nimport { getTranslation } from '../../utils/translations';\nimport { createYupSchema } from '../../utils/validation';\n\nimport { FormLayout } from './components/FormLayout';\nimport { Header } from './components/Header';\nimport { Panels } from './components/Panels';\nimport { handleInvisibleAttributes } from './utils/data';\n\n/* -------------------------------------------------------------------------------------------------\n * EditViewPage\n * -----------------------------------------------------------------------------------------------*/\n\n// Needs to be wrapped in a component to have access to the form context via a hook.\n// Using the Form component's render prop instead would cause unnecessary re-renders of Form children\nconst BlockerWrapper = () => {\n const resetForm = useForm('BlockerWrapper', (state) => state.resetForm);\n\n // We reset the form to the published version to avoid errors like – https://strapi-inc.atlassian.net/browse/CONTENT-2284\n return <Blocker onProceed={resetForm} />;\n};\n\nconst EditViewPage = () => {\n const location = useLocation();\n const [\n {\n query: { status },\n },\n setQuery,\n ] = useQueryParams<{ status: 'draft' | 'published' }>({\n status: 'draft',\n });\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n\n const doc = useDoc();\n const {\n document,\n meta,\n isLoading: isLoadingDocument,\n schema,\n components,\n collectionType,\n id,\n model,\n hasError,\n getTitle,\n getInitialFormValues,\n } = doc;\n\n const hasDraftAndPublished = schema?.options?.draftAndPublish ?? false;\n\n useOnce(() => {\n /**\n * We only ever want to fire the notification once otherwise\n * whenever the app re-renders it'll pop up regardless of\n * what we do because the state comes from react-router-dom\n */\n if (location?.state && 'error' in location.state) {\n toggleNotification({\n type: 'danger',\n message: location.state.error,\n timeout: 5000,\n });\n }\n });\n\n const isLoadingActionsRBAC = useDocumentRBAC('EditViewPage', (state) => state.isLoading);\n\n const isSingleType = collectionType === SINGLE_TYPES;\n\n /**\n * single-types don't current have an id, but because they're a singleton\n * we can simply use the update operation to continuously update the same\n * document with varying params.\n */\n const isCreatingDocument = !id && !isSingleType;\n\n const {\n isLoading: isLoadingLayout,\n edit: {\n layout,\n settings: { mainField },\n },\n } = useDocumentLayout(model);\n const pageTitle = getTitle(mainField);\n\n const { isLazyLoading } = useLazyComponents([]);\n\n const isLoading = isLoadingActionsRBAC || isLoadingDocument || isLoadingLayout || isLazyLoading;\n\n const initialValues = getInitialFormValues(isCreatingDocument);\n\n if (isLoading && !document?.documentId) {\n return <Page.Loading />;\n }\n\n if (!initialValues || hasError) {\n return <Page.Error />;\n }\n\n const handleTabChange = (status: string) => {\n if (status === 'published' || status === 'draft') {\n setQuery({ status }, 'push', true);\n }\n };\n\n const validateSync = (values: Record<string, unknown>, options: Record<string, string>) => {\n const yupSchema = createYupSchema(schema?.attributes, components, {\n status,\n ...options,\n });\n\n return yupSchema.validateSync(values, { abortEarly: false });\n };\n\n return (\n <Main paddingLeft={10} paddingRight={10}>\n <Page.Title>{pageTitle}</Page.Title>\n <Form\n disabled={hasDraftAndPublished && status === 'published'}\n initialValues={initialValues}\n method={isCreatingDocument ? 'POST' : 'PUT'}\n validate={(values: Record<string, unknown>, options: Record<string, string>) => {\n // removes hidden fields from the validation\n // this is necessary because the yup schema doesn't know about the visibility conditions\n // and we don't want to validate fields that are not visible\n const { data: cleanedValues, removedAttributes } = handleInvisibleAttributes(values, {\n schema,\n initialValues,\n components,\n });\n\n const yupSchema = createYupSchema(schema?.attributes, components, {\n status,\n removedAttributes,\n ...options,\n });\n\n return yupSchema.validate(cleanedValues, { abortEarly: false });\n }}\n initialErrors={location?.state?.forceValidation ? validateSync(initialValues, {}) : {}}\n >\n <>\n <Header\n isCreating={isCreatingDocument}\n status={hasDraftAndPublished ? getDocumentStatus(document, meta) : undefined}\n title={pageTitle}\n />\n <Tabs.Root variant=\"simple\" value={status} onValueChange={handleTabChange}>\n <Tabs.List\n aria-label={formatMessage({\n id: getTranslation('containers.edit.tabs.label'),\n defaultMessage: 'Document status',\n })}\n >\n {hasDraftAndPublished ? (\n <>\n <StatusTab value=\"draft\">\n {formatMessage({\n id: getTranslation('containers.edit.tabs.draft'),\n defaultMessage: 'draft',\n })}\n </StatusTab>\n <StatusTab\n disabled={!meta || meta.availableStatus.length === 0}\n value=\"published\"\n >\n {formatMessage({\n id: getTranslation('containers.edit.tabs.published'),\n defaultMessage: 'published',\n })}\n </StatusTab>\n </>\n ) : null}\n </Tabs.List>\n <Grid.Root paddingTop={8} gap={4}>\n <Grid.Item col={9} s={12} direction=\"column\" alignItems=\"stretch\">\n <Tabs.Content value=\"draft\">\n <FormLayout layout={layout} document={doc} />\n </Tabs.Content>\n <Tabs.Content value=\"published\">\n <FormLayout layout={layout} document={doc} />\n </Tabs.Content>\n </Grid.Item>\n <Grid.Item col={3} s={12} direction=\"column\" alignItems=\"stretch\">\n <Panels />\n </Grid.Item>\n </Grid.Root>\n </Tabs.Root>\n <BlockerWrapper />\n </>\n </Form>\n </Main>\n );\n};\n\nconst StatusTab = styled(Tabs.Trigger)`\n text-transform: uppercase;\n`;\n\n/**\n * @internal\n * @description Returns the status of the document where its latest state takes priority,\n * this typically will be \"published\" unless a user has edited their draft in which we should\n * display \"modified\".\n */\nconst getDocumentStatus = (\n document: ReturnType<UseDocument>['document'],\n meta: ReturnType<UseDocument>['meta']\n): 'draft' | 'published' | 'modified' => {\n const docStatus = document?.status;\n const statuses = meta?.availableStatus ?? [];\n\n /**\n * Creating an entry\n */\n if (!docStatus) {\n return 'draft';\n }\n\n /**\n * We're viewing a draft, but the document could have a published version\n */\n if (docStatus === 'draft' && statuses.find((doc) => doc.publishedAt !== null)) {\n return 'published';\n }\n\n return docStatus;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedEditViewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedEditViewPage = () => {\n const { slug = '' } = useParams<{\n slug: string;\n }>();\n const {\n permissions = [],\n isLoading,\n error,\n } = useRBAC(\n PERMISSIONS.map((action) => ({\n action,\n subject: slug,\n }))\n );\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error || !slug) {\n return <Page.Error />;\n }\n\n return (\n <Page.Protect permissions={permissions}>\n {({ permissions }) => (\n <DocumentRBAC permissions={permissions}>\n <EditViewPage />\n </DocumentRBAC>\n )}\n </Page.Protect>\n );\n};\n\nexport { EditViewPage, ProtectedEditViewPage, getDocumentStatus };\n"],"names":["BlockerWrapper","resetForm","useForm","state","_jsx","Blocker","onProceed","EditViewPage","location","useLocation","query","status","setQuery","useQueryParams","formatMessage","useIntl","toggleNotification","useNotification","doc","useDoc","document","meta","isLoading","isLoadingDocument","schema","components","collectionType","id","model","hasError","getTitle","getInitialFormValues","hasDraftAndPublished","options","draftAndPublish","useOnce","type","message","error","timeout","isLoadingActionsRBAC","useDocumentRBAC","isSingleType","SINGLE_TYPES","isCreatingDocument","isLoadingLayout","edit","layout","settings","mainField","useDocumentLayout","pageTitle","isLazyLoading","useLazyComponents","initialValues","documentId","Page","Loading","Error","handleTabChange","validateSync","values","yupSchema","createYupSchema","attributes","abortEarly","_jsxs","Main","paddingLeft","paddingRight","Title","Form","disabled","method","validate","data","cleanedValues","removedAttributes","handleInvisibleAttributes","initialErrors","forceValidation","_Fragment","Header","isCreating","getDocumentStatus","undefined","title","Tabs","Root","variant","value","onValueChange","List","aria-label","getTranslation","defaultMessage","StatusTab","availableStatus","length","Grid","paddingTop","gap","Item","col","s","direction","alignItems","Content","FormLayout","Panels","styled","Trigger","docStatus","statuses","find","publishedAt","ProtectedEditViewPage","slug","useParams","permissions","useRBAC","PERMISSIONS","map","action","subject","Protect","DocumentRBAC"],"mappings":"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"}