@strapi/content-manager 5.50.0 → 5.50.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/components/ComponentIcon.js.map +1 -1
- package/dist/admin/components/ComponentIcon.mjs.map +1 -1
- package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
- package/dist/admin/components/ConfigurationForm/Fields.mjs.map +1 -1
- package/dist/admin/components/DragLayer.js.map +1 -1
- package/dist/admin/components/DragLayer.mjs.map +1 -1
- package/dist/admin/components/LeftMenu.js +66 -67
- package/dist/admin/components/LeftMenu.js.map +1 -1
- package/dist/admin/components/LeftMenu.mjs +68 -69
- package/dist/admin/components/LeftMenu.mjs.map +1 -1
- package/dist/admin/history/components/VersionInputRenderer.js +3 -3
- package/dist/admin/history/components/VersionInputRenderer.js.map +1 -1
- package/dist/admin/history/components/VersionInputRenderer.mjs +3 -3
- package/dist/admin/history/components/VersionInputRenderer.mjs.map +1 -1
- package/dist/admin/history/routes.js.map +1 -1
- package/dist/admin/history/routes.mjs.map +1 -1
- package/dist/admin/hooks/useDocumentActions.js +15 -8
- package/dist/admin/hooks/useDocumentActions.js.map +1 -1
- package/dist/admin/hooks/useDocumentActions.mjs +15 -8
- package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
- package/dist/admin/hooks/useDocumentContext.js.map +1 -1
- package/dist/admin/hooks/useDocumentContext.mjs.map +1 -1
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/layout.js +18 -6
- package/dist/admin/layout.js.map +1 -1
- package/dist/admin/layout.mjs +18 -6
- package/dist/admin/layout.mjs.map +1 -1
- package/dist/admin/pages/ComponentConfigurationPage.js.map +1 -1
- package/dist/admin/pages/ComponentConfigurationPage.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.js +7 -6
- package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.mjs +7 -6
- package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js +6 -3
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs +6 -3
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.js +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.mjs +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +2 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +2 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +8 -5
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +8 -5
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/UID.js +5 -4
- package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +5 -4
- package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.mjs +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/Panels.js.map +1 -1
- package/dist/admin/pages/EditView/components/Panels.mjs.map +1 -1
- package/dist/admin/pages/EditView/utils/data.js.map +1 -1
- package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/Settings.js.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/Settings.mjs.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.js.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.mjs.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.js +71 -11
- package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.mjs +73 -13
- package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/Actions.js +2 -1
- package/dist/admin/pages/ListView/components/BulkActions/Actions.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/Actions.mjs +2 -1
- package/dist/admin/pages/ListView/components/BulkActions/Actions.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/Filters.js +5 -3
- package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
- package/dist/admin/pages/ListView/components/Filters.mjs +5 -3
- package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableActions.js +37 -0
- package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableActions.mjs +39 -2
- package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/CellContent.js +26 -1
- package/dist/admin/pages/ListView/components/TableCells/CellContent.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs +26 -2
- package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/CellValue.js +8 -7
- package/dist/admin/pages/ListView/components/TableCells/CellValue.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/CellValue.mjs +8 -7
- package/dist/admin/pages/ListView/components/TableCells/CellValue.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Components.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Components.mjs.map +1 -1
- package/dist/admin/preview/pages/Preview.js +2 -0
- package/dist/admin/preview/pages/Preview.js.map +1 -1
- package/dist/admin/preview/pages/Preview.mjs +2 -0
- package/dist/admin/preview/pages/Preview.mjs.map +1 -1
- package/dist/admin/preview/routes.js.map +1 -1
- package/dist/admin/preview/routes.mjs.map +1 -1
- package/dist/admin/preview/utils/fieldUtils.js.map +1 -1
- package/dist/admin/preview/utils/fieldUtils.mjs.map +1 -1
- package/dist/admin/router.js.map +1 -1
- package/dist/admin/router.mjs.map +1 -1
- package/dist/admin/services/documents.js.map +1 -1
- package/dist/admin/services/documents.mjs.map +1 -1
- package/dist/admin/src/components/ComponentIcon.d.ts +4 -3
- package/dist/admin/src/components/DragLayer.d.ts +1 -1
- package/dist/admin/src/history/routes.d.ts +2 -2
- package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
- package/dist/admin/src/hooks/useDocumentActions.d.ts +17 -16
- package/dist/admin/src/hooks/useDocumentContext.d.ts +1 -1
- package/dist/admin/src/index.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/UID.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/Editor.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.d.ts +7 -1
- package/dist/admin/src/pages/ListView/components/TableCells/CellContent.d.ts +11 -2
- package/dist/admin/src/pages/ListView/components/TableCells/CellValue.d.ts +1 -1
- package/dist/admin/src/preview/routes.d.ts +2 -2
- package/dist/admin/src/preview/services/preview.d.ts +1 -1
- package/dist/admin/src/router.d.ts +2 -2
- package/dist/admin/src/services/api.d.ts +1 -1
- package/dist/admin/src/services/components.d.ts +2 -2
- package/dist/admin/src/services/contentTypes.d.ts +3 -3
- package/dist/admin/src/services/documents.d.ts +19 -19
- package/dist/admin/src/services/homepage.d.ts +1 -1
- package/dist/admin/src/services/init.d.ts +1 -1
- package/dist/admin/src/services/relations.d.ts +2 -2
- package/dist/admin/src/services/uid.d.ts +3 -3
- package/dist/admin/src/utils/api.d.ts +2 -2
- package/dist/admin/src/utils/conditionalFields.d.ts +1 -0
- package/dist/admin/src/utils/objects.d.ts +7 -4
- package/dist/admin/src/utils/validation.d.ts +2 -1
- package/dist/admin/translations/en.json.js +1 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +1 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/utils/api.js +6 -1
- package/dist/admin/utils/api.js.map +1 -1
- package/dist/admin/utils/api.mjs +6 -1
- package/dist/admin/utils/api.mjs.map +1 -1
- package/dist/admin/utils/conditionalFields.js.map +1 -1
- package/dist/admin/utils/conditionalFields.mjs.map +1 -1
- package/dist/admin/utils/objects.js +43 -13
- package/dist/admin/utils/objects.js.map +1 -1
- package/dist/admin/utils/objects.mjs +43 -13
- package/dist/admin/utils/objects.mjs.map +1 -1
- package/dist/admin/utils/validation.js.map +1 -1
- package/dist/admin/utils/validation.mjs.map +1 -1
- package/dist/server/controllers/collection-types.js +4 -1
- package/dist/server/controllers/collection-types.js.map +1 -1
- package/dist/server/controllers/collection-types.mjs +4 -1
- package/dist/server/controllers/collection-types.mjs.map +1 -1
- package/dist/server/controllers/relations.js +5 -4
- package/dist/server/controllers/relations.js.map +1 -1
- package/dist/server/controllers/relations.mjs +5 -4
- package/dist/server/controllers/relations.mjs.map +1 -1
- package/dist/server/controllers/validation/model-configuration.js +3 -1
- package/dist/server/controllers/validation/model-configuration.js.map +1 -1
- package/dist/server/controllers/validation/model-configuration.mjs +3 -1
- package/dist/server/controllers/validation/model-configuration.mjs.map +1 -1
- package/dist/server/homepage/services/homepage.js +27 -7
- package/dist/server/homepage/services/homepage.js.map +1 -1
- package/dist/server/homepage/services/homepage.mjs +27 -7
- package/dist/server/homepage/services/homepage.mjs.map +1 -1
- package/dist/server/services/permission.js +4 -3
- package/dist/server/services/permission.js.map +1 -1
- package/dist/server/services/permission.mjs +4 -3
- package/dist/server/services/permission.mjs.map +1 -1
- package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
- package/dist/server/src/controllers/relations.d.ts.map +1 -1
- package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
- package/dist/server/src/services/permission.d.ts.map +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CellContent.mjs","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/CellContent.tsx"],"sourcesContent":["import { Tooltip, Typography } from '@strapi/design-system';\nimport isEmpty from 'lodash/isEmpty';\n\nimport { CellValue } from './CellValue';\nimport { SingleComponent, RepeatableComponent } from './Components';\nimport { MediaSingle, MediaMultiple } from './Media';\nimport { RelationMultiple, RelationSingle } from './Relations';\n\nimport type { ListFieldLayout } from '../../../../hooks/useDocumentLayout';\nimport type { Schema, Data } from '@strapi/types';\n\ninterface CellContentProps extends Omit<ListFieldLayout, 'cellFormatter'> {\n content: Schema.Attribute.Value<Schema.Attribute.AnyAttribute>;\n rowId: Data.ID;\n}\n\nconst CellContent = ({ content, mainField, attribute, rowId, name }: CellContentProps) => {\n const isIdColumn = name === 'id';\n\n if (!hasContent(content, mainField, attribute)) {\n return (\n <Typography\n textColor=\"neutral800\"\n paddingLeft={attribute.type === 'relation' || attribute.type === 'component' ? '1.6rem' : 0}\n paddingRight={\n attribute.type === 'relation' || attribute.type === 'component' ? '1.6rem' : 0\n }\n >\n -\n </Typography>\n );\n }\n\n switch (attribute.type) {\n case 'media':\n if (!attribute.multiple) {\n return <MediaSingle {...content} />;\n }\n\n return <MediaMultiple content={content} />;\n\n case 'relation': {\n if (isSingleRelation(attribute.relation)) {\n return <RelationSingle mainField={mainField} content={content} />;\n }\n\n return <RelationMultiple rowId={rowId} mainField={mainField} content={content} name={name} />;\n }\n\n case 'component':\n if (attribute.repeatable) {\n return <RepeatableComponent mainField={mainField} content={content} />;\n }\n\n return <SingleComponent mainField={mainField} content={content} />;\n\n case 'string':\n return (\n <Tooltip label={content}>\n <Typography maxWidth=\"30rem\" ellipsis textColor=\"neutral800\">\n <CellValue isIdColumn={isIdColumn} type={attribute.type} value={content} />\n </Typography>\n </Tooltip>\n );\n\n default:\n return (\n <Typography maxWidth=\"30rem\" ellipsis textColor=\"neutral800\">\n <CellValue isIdColumn={isIdColumn} type={attribute.type} value={content} />\n </Typography>\n );\n }\n};\n\nconst hasContent = (\n content: CellContentProps['content'],\n mainField: CellContentProps['mainField'],\n attribute: CellContentProps['attribute']\n) => {\n if (attribute.type === 'component') {\n // Repeatable fields show the ID as fallback, in case the mainField\n // doesn't have any content\n if (attribute.repeatable || !mainField) {\n return content?.length > 0;\n }\n\n const value = content?.[mainField.name];\n\n // relations, media ... show the id as fallback\n if (mainField.name === 'id' && ![undefined, null].includes(value)) {\n return true;\n }\n\n return !isEmpty(value);\n }\n\n if (attribute.type === 'relation') {\n if (isSingleRelation(attribute.relation)) {\n return !isEmpty(content);\n }\n\n if (Array.isArray(content)) {\n return content.length > 0;\n }\n\n return content?.count > 0;\n }\n\n /*\n Biginteger fields need to be treated as strings, as `isNumber`\n doesn't deal with them.\n */\n if (['integer', 'decimal', 'float', 'number'].includes(attribute.type)) {\n return typeof content === 'number';\n }\n\n if (attribute.type === 'boolean') {\n return content !== null;\n }\n\n return !isEmpty(content);\n};\n\nconst isSingleRelation = (\n type: Extract<CellContentProps['attribute'], { type: 'relation' }>['relation']\n) => ['oneToOne', 'manyToOne', 'oneToOneMorph'].includes(type);\n\nexport { CellContent };\nexport type { CellContentProps };\n"],"names":["CellContent","content","mainField","attribute","rowId","name","isIdColumn","hasContent","_jsx","Typography","textColor","paddingLeft","type","paddingRight","
|
|
1
|
+
{"version":3,"file":"CellContent.mjs","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/CellContent.tsx"],"sourcesContent":["import type { MouseEvent } from 'react';\n\nimport { Tooltip, Typography } from '@strapi/design-system';\nimport isEmpty from 'lodash/isEmpty';\nimport { Link as ReactRouterLink } from 'react-router-dom';\n\nimport { CellValue } from './CellValue';\nimport { SingleComponent, RepeatableComponent } from './Components';\nimport { MediaSingle, MediaMultiple } from './Media';\nimport { RelationMultiple, RelationSingle } from './Relations';\n\nimport type { ListFieldLayout } from '../../../../hooks/useDocumentLayout';\nimport type { Schema, Data } from '@strapi/types';\nimport type { To } from 'react-router-dom';\n\ninterface CellContentProps extends Omit<ListFieldLayout, 'cellFormatter'> {\n content: Schema.Attribute.Value<Schema.Attribute.AnyAttribute>;\n rowId: Data.ID;\n /**\n * When set, the cell renders its value as a navigational link to the entry.\n * Used for the primary (first scalar) column so users can open an entry in a\n * new tab via right-click / cmd+click / middle-click, while a plain click\n * still navigates within the SPA. Only passed for non-interactive cell types.\n */\n linkTo?: To;\n}\n\nconst CellContent = ({ content, mainField, attribute, rowId, name, linkTo }: CellContentProps) => {\n const isIdColumn = name === 'id';\n\n if (!hasContent(content, mainField, attribute)) {\n return (\n <Typography\n textColor=\"neutral800\"\n paddingLeft={attribute.type === 'relation' || attribute.type === 'component' ? '1.6rem' : 0}\n paddingRight={\n attribute.type === 'relation' || attribute.type === 'component' ? '1.6rem' : 0\n }\n >\n -\n </Typography>\n );\n }\n\n // Primary scalar column: render the value as a link to the entry so it gets\n // native open-in-new-tab semantics. stopPropagation prevents the row's own\n // onClick from firing a second navigation; React Router's Link still handles\n // the click (stopPropagation does not preventDefault).\n if (linkTo) {\n const link = (\n <Typography\n tag={ReactRouterLink}\n to={linkTo}\n onClick={(e: MouseEvent) => e.stopPropagation()}\n maxWidth=\"30rem\"\n ellipsis\n textColor=\"neutral800\"\n >\n <CellValue isIdColumn={isIdColumn} type={attribute.type} value={content} />\n </Typography>\n );\n\n return attribute.type === 'string' ? <Tooltip label={content}>{link}</Tooltip> : link;\n }\n\n switch (attribute.type) {\n case 'media':\n if (!attribute.multiple) {\n return <MediaSingle {...content} />;\n }\n\n return <MediaMultiple content={content} />;\n\n case 'relation': {\n if (isSingleRelation(attribute.relation)) {\n return <RelationSingle mainField={mainField} content={content} />;\n }\n\n return <RelationMultiple rowId={rowId} mainField={mainField} content={content} name={name} />;\n }\n\n case 'component':\n if (attribute.repeatable) {\n return <RepeatableComponent mainField={mainField} content={content} />;\n }\n\n return <SingleComponent mainField={mainField} content={content} />;\n\n case 'string':\n return (\n <Tooltip label={content}>\n <Typography maxWidth=\"30rem\" ellipsis textColor=\"neutral800\">\n <CellValue isIdColumn={isIdColumn} type={attribute.type} value={content} />\n </Typography>\n </Tooltip>\n );\n\n default:\n return (\n <Typography maxWidth=\"30rem\" ellipsis textColor=\"neutral800\">\n <CellValue isIdColumn={isIdColumn} type={attribute.type} value={content} />\n </Typography>\n );\n }\n};\n\nconst hasContent = (\n content: CellContentProps['content'],\n mainField: CellContentProps['mainField'],\n attribute: CellContentProps['attribute']\n) => {\n if (attribute.type === 'component') {\n // Repeatable fields show the ID as fallback, in case the mainField\n // doesn't have any content\n if (attribute.repeatable || !mainField) {\n return content?.length > 0;\n }\n\n const value = content?.[mainField.name];\n\n // relations, media ... show the id as fallback\n if (mainField.name === 'id' && ![undefined, null].includes(value)) {\n return true;\n }\n\n return !isEmpty(value);\n }\n\n if (attribute.type === 'relation') {\n if (isSingleRelation(attribute.relation)) {\n return !isEmpty(content);\n }\n\n if (Array.isArray(content)) {\n return content.length > 0;\n }\n\n return content?.count > 0;\n }\n\n /*\n Biginteger fields need to be treated as strings, as `isNumber`\n doesn't deal with them.\n */\n if (['integer', 'decimal', 'float', 'number'].includes(attribute.type)) {\n return typeof content === 'number';\n }\n\n if (attribute.type === 'boolean') {\n return content !== null;\n }\n\n return !isEmpty(content);\n};\n\nconst isSingleRelation = (\n type: Extract<CellContentProps['attribute'], { type: 'relation' }>['relation']\n) => ['oneToOne', 'manyToOne', 'oneToOneMorph'].includes(type);\n\nexport { CellContent, hasContent };\nexport type { CellContentProps };\n"],"names":["CellContent","content","mainField","attribute","rowId","name","linkTo","isIdColumn","hasContent","_jsx","Typography","textColor","paddingLeft","type","paddingRight","link","tag","ReactRouterLink","to","onClick","e","stopPropagation","maxWidth","ellipsis","CellValue","value","Tooltip","label","multiple","MediaSingle","MediaMultiple","isSingleRelation","relation","RelationSingle","RelationMultiple","repeatable","RepeatableComponent","SingleComponent","length","undefined","includes","isEmpty","Array","isArray","count"],"mappings":"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"}
|
|
@@ -12,7 +12,7 @@ var toString__default = /*#__PURE__*/_interopDefault(toString);
|
|
|
12
12
|
const CellValue = ({ isIdColumn = false, type, value })=>{
|
|
13
13
|
const { formatDate, formatTime, formatNumber, formatMessage } = reactIntl.useIntl();
|
|
14
14
|
let formattedValue = value;
|
|
15
|
-
if (type === 'date') {
|
|
15
|
+
if (type === 'date' && typeof value === 'string') {
|
|
16
16
|
formattedValue = formatDate(parseISO__default.default(value), {
|
|
17
17
|
dateStyle: 'full'
|
|
18
18
|
});
|
|
@@ -23,12 +23,12 @@ const CellValue = ({ isIdColumn = false, type, value })=>{
|
|
|
23
23
|
timeStyle: 'short'
|
|
24
24
|
});
|
|
25
25
|
}
|
|
26
|
-
if (type === 'time') {
|
|
26
|
+
if (type === 'time' && typeof value === 'string') {
|
|
27
27
|
const [hour, minute, second] = value.split(':');
|
|
28
28
|
const date = new Date();
|
|
29
|
-
date.setHours(hour);
|
|
30
|
-
date.setMinutes(minute);
|
|
31
|
-
date.setSeconds(second);
|
|
29
|
+
date.setHours(Number(hour));
|
|
30
|
+
date.setMinutes(Number(minute));
|
|
31
|
+
date.setSeconds(Number(second));
|
|
32
32
|
formattedValue = formatTime(date, {
|
|
33
33
|
timeStyle: 'short'
|
|
34
34
|
});
|
|
@@ -44,9 +44,10 @@ const CellValue = ({ isIdColumn = false, type, value })=>{
|
|
|
44
44
|
});
|
|
45
45
|
}
|
|
46
46
|
if (type === 'boolean') {
|
|
47
|
+
const booleanValue = Boolean(value);
|
|
47
48
|
formattedValue = formatMessage({
|
|
48
|
-
id:
|
|
49
|
-
defaultMessage:
|
|
49
|
+
id: booleanValue ? 'app.components.ToggleCheckbox.on-label' : 'app.components.ToggleCheckbox.off-label',
|
|
50
|
+
defaultMessage: booleanValue ? 'true' : 'false'
|
|
50
51
|
});
|
|
51
52
|
}
|
|
52
53
|
if ([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CellValue.js","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/CellValue.tsx"],"sourcesContent":["import parseISO from 'date-fns/parseISO';\nimport toString from 'lodash/toString';\nimport { useIntl } from 'react-intl';\n\nimport type { Schema } from '@strapi/types';\n\ninterface CellValueProps {\n isIdColumn?: boolean;\n type: Schema.Attribute.Kind | 'custom';\n value:
|
|
1
|
+
{"version":3,"file":"CellValue.js","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/CellValue.tsx"],"sourcesContent":["import parseISO from 'date-fns/parseISO';\nimport toString from 'lodash/toString';\nimport { useIntl } from 'react-intl';\n\nimport type { Schema } from '@strapi/types';\n\ninterface CellValueProps {\n isIdColumn?: boolean;\n type: Schema.Attribute.Kind | 'custom';\n value: unknown;\n}\n\nconst CellValue = ({ isIdColumn = false, type, value }: CellValueProps) => {\n const { formatDate, formatTime, formatNumber, formatMessage } = useIntl();\n let formattedValue = value;\n\n if (type === 'date' && typeof value === 'string') {\n formattedValue = formatDate(parseISO(value), { dateStyle: 'full' });\n }\n\n if (type === 'datetime') {\n formattedValue = formatDate(value as Parameters<typeof formatDate>[0], {\n dateStyle: 'full',\n timeStyle: 'short',\n });\n }\n\n if (type === 'time' && typeof value === 'string') {\n const [hour, minute, second] = value.split(':');\n const date = new Date();\n date.setHours(Number(hour));\n date.setMinutes(Number(minute));\n date.setSeconds(Number(second));\n\n formattedValue = formatTime(date, {\n timeStyle: 'short',\n });\n }\n\n if (['float', 'decimal'].includes(type)) {\n formattedValue = formatNumber(value as Parameters<typeof formatNumber>[0], {\n // Should be kept in sync with the corresponding value\n // in the design-system/NumberInput: https://github.com/strapi/design-system/blob/main/packages/strapi-design-system/src/NumberInput/NumberInput.js#L53\n maximumFractionDigits: 20,\n });\n }\n\n if (type === 'boolean') {\n const booleanValue = Boolean(value);\n formattedValue = formatMessage({\n id: booleanValue\n ? 'app.components.ToggleCheckbox.on-label'\n : 'app.components.ToggleCheckbox.off-label',\n defaultMessage: booleanValue ? 'true' : 'false',\n });\n }\n\n if (['integer', 'biginteger'].includes(type)) {\n formattedValue = formatNumber(value as Parameters<typeof formatNumber>[0], {\n maximumFractionDigits: 0,\n useGrouping: !isIdColumn,\n });\n }\n\n return toString(formattedValue);\n};\n\nexport { CellValue };\nexport type { CellValueProps };\n"],"names":["CellValue","isIdColumn","type","value","formatDate","formatTime","formatNumber","formatMessage","useIntl","formattedValue","parseISO","dateStyle","timeStyle","hour","minute","second","split","date","Date","setHours","Number","setMinutes","setSeconds","includes","maximumFractionDigits","booleanValue","Boolean","id","defaultMessage","useGrouping","toString"],"mappings":";;;;;;;;;;;AAYA,MAAMA,SAAAA,GAAY,CAAC,EAAEC,UAAAA,GAAa,KAAK,EAAEC,IAAI,EAAEC,KAAK,EAAkB,GAAA;IACpE,MAAM,EAAEC,UAAU,EAAEC,UAAU,EAAEC,YAAY,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAChE,IAAA,IAAIC,cAAAA,GAAiBN,KAAAA;AAErB,IAAA,IAAID,IAAAA,KAAS,MAAA,IAAU,OAAOC,KAAAA,KAAU,QAAA,EAAU;QAChDM,cAAAA,GAAiBL,UAAAA,CAAWM,0BAASP,KAAAA,CAAAA,EAAQ;YAAEQ,SAAAA,EAAW;AAAO,SAAA,CAAA;AACnE,IAAA;AAEA,IAAA,IAAIT,SAAS,UAAA,EAAY;AACvBO,QAAAA,cAAAA,GAAiBL,WAAWD,KAAAA,EAA2C;YACrEQ,SAAAA,EAAW,MAAA;YACXC,SAAAA,EAAW;AACb,SAAA,CAAA;AACF,IAAA;AAEA,IAAA,IAAIV,IAAAA,KAAS,MAAA,IAAU,OAAOC,KAAAA,KAAU,QAAA,EAAU;AAChD,QAAA,MAAM,CAACU,IAAAA,EAAMC,MAAAA,EAAQC,OAAO,GAAGZ,KAAAA,CAAMa,KAAK,CAAC,GAAA,CAAA;AAC3C,QAAA,MAAMC,OAAO,IAAIC,IAAAA,EAAAA;QACjBD,IAAAA,CAAKE,QAAQ,CAACC,MAAAA,CAAOP,IAAAA,CAAAA,CAAAA;QACrBI,IAAAA,CAAKI,UAAU,CAACD,MAAAA,CAAON,MAAAA,CAAAA,CAAAA;QACvBG,IAAAA,CAAKK,UAAU,CAACF,MAAAA,CAAOL,MAAAA,CAAAA,CAAAA;AAEvBN,QAAAA,cAAAA,GAAiBJ,WAAWY,IAAAA,EAAM;YAChCL,SAAAA,EAAW;AACb,SAAA,CAAA;AACF,IAAA;IAEA,IAAI;AAAC,QAAA,OAAA;AAAS,QAAA;KAAU,CAACW,QAAQ,CAACrB,IAAAA,CAAAA,EAAO;AACvCO,QAAAA,cAAAA,GAAiBH,aAAaH,KAAAA,EAA6C;;;YAGzEqB,qBAAAA,EAAuB;AACzB,SAAA,CAAA;AACF,IAAA;AAEA,IAAA,IAAItB,SAAS,SAAA,EAAW;AACtB,QAAA,MAAMuB,eAAeC,OAAAA,CAAQvB,KAAAA,CAAAA;AAC7BM,QAAAA,cAAAA,GAAiBF,aAAAA,CAAc;AAC7BoB,YAAAA,EAAAA,EAAIF,eACA,wCAAA,GACA,yCAAA;AACJG,YAAAA,cAAAA,EAAgBH,eAAe,MAAA,GAAS;AAC1C,SAAA,CAAA;AACF,IAAA;IAEA,IAAI;AAAC,QAAA,SAAA;AAAW,QAAA;KAAa,CAACF,QAAQ,CAACrB,IAAAA,CAAAA,EAAO;AAC5CO,QAAAA,cAAAA,GAAiBH,aAAaH,KAAAA,EAA6C;YACzEqB,qBAAAA,EAAuB,CAAA;AACvBK,YAAAA,WAAAA,EAAa,CAAC5B;AAChB,SAAA,CAAA;AACF,IAAA;AAEA,IAAA,OAAO6B,yBAAAA,CAASrB,cAAAA,CAAAA;AAClB;;;;"}
|
|
@@ -5,7 +5,7 @@ import { useIntl } from 'react-intl';
|
|
|
5
5
|
const CellValue = ({ isIdColumn = false, type, value })=>{
|
|
6
6
|
const { formatDate, formatTime, formatNumber, formatMessage } = useIntl();
|
|
7
7
|
let formattedValue = value;
|
|
8
|
-
if (type === 'date') {
|
|
8
|
+
if (type === 'date' && typeof value === 'string') {
|
|
9
9
|
formattedValue = formatDate(parseISO(value), {
|
|
10
10
|
dateStyle: 'full'
|
|
11
11
|
});
|
|
@@ -16,12 +16,12 @@ const CellValue = ({ isIdColumn = false, type, value })=>{
|
|
|
16
16
|
timeStyle: 'short'
|
|
17
17
|
});
|
|
18
18
|
}
|
|
19
|
-
if (type === 'time') {
|
|
19
|
+
if (type === 'time' && typeof value === 'string') {
|
|
20
20
|
const [hour, minute, second] = value.split(':');
|
|
21
21
|
const date = new Date();
|
|
22
|
-
date.setHours(hour);
|
|
23
|
-
date.setMinutes(minute);
|
|
24
|
-
date.setSeconds(second);
|
|
22
|
+
date.setHours(Number(hour));
|
|
23
|
+
date.setMinutes(Number(minute));
|
|
24
|
+
date.setSeconds(Number(second));
|
|
25
25
|
formattedValue = formatTime(date, {
|
|
26
26
|
timeStyle: 'short'
|
|
27
27
|
});
|
|
@@ -37,9 +37,10 @@ const CellValue = ({ isIdColumn = false, type, value })=>{
|
|
|
37
37
|
});
|
|
38
38
|
}
|
|
39
39
|
if (type === 'boolean') {
|
|
40
|
+
const booleanValue = Boolean(value);
|
|
40
41
|
formattedValue = formatMessage({
|
|
41
|
-
id:
|
|
42
|
-
defaultMessage:
|
|
42
|
+
id: booleanValue ? 'app.components.ToggleCheckbox.on-label' : 'app.components.ToggleCheckbox.off-label',
|
|
43
|
+
defaultMessage: booleanValue ? 'true' : 'false'
|
|
43
44
|
});
|
|
44
45
|
}
|
|
45
46
|
if ([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CellValue.mjs","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/CellValue.tsx"],"sourcesContent":["import parseISO from 'date-fns/parseISO';\nimport toString from 'lodash/toString';\nimport { useIntl } from 'react-intl';\n\nimport type { Schema } from '@strapi/types';\n\ninterface CellValueProps {\n isIdColumn?: boolean;\n type: Schema.Attribute.Kind | 'custom';\n value:
|
|
1
|
+
{"version":3,"file":"CellValue.mjs","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/CellValue.tsx"],"sourcesContent":["import parseISO from 'date-fns/parseISO';\nimport toString from 'lodash/toString';\nimport { useIntl } from 'react-intl';\n\nimport type { Schema } from '@strapi/types';\n\ninterface CellValueProps {\n isIdColumn?: boolean;\n type: Schema.Attribute.Kind | 'custom';\n value: unknown;\n}\n\nconst CellValue = ({ isIdColumn = false, type, value }: CellValueProps) => {\n const { formatDate, formatTime, formatNumber, formatMessage } = useIntl();\n let formattedValue = value;\n\n if (type === 'date' && typeof value === 'string') {\n formattedValue = formatDate(parseISO(value), { dateStyle: 'full' });\n }\n\n if (type === 'datetime') {\n formattedValue = formatDate(value as Parameters<typeof formatDate>[0], {\n dateStyle: 'full',\n timeStyle: 'short',\n });\n }\n\n if (type === 'time' && typeof value === 'string') {\n const [hour, minute, second] = value.split(':');\n const date = new Date();\n date.setHours(Number(hour));\n date.setMinutes(Number(minute));\n date.setSeconds(Number(second));\n\n formattedValue = formatTime(date, {\n timeStyle: 'short',\n });\n }\n\n if (['float', 'decimal'].includes(type)) {\n formattedValue = formatNumber(value as Parameters<typeof formatNumber>[0], {\n // Should be kept in sync with the corresponding value\n // in the design-system/NumberInput: https://github.com/strapi/design-system/blob/main/packages/strapi-design-system/src/NumberInput/NumberInput.js#L53\n maximumFractionDigits: 20,\n });\n }\n\n if (type === 'boolean') {\n const booleanValue = Boolean(value);\n formattedValue = formatMessage({\n id: booleanValue\n ? 'app.components.ToggleCheckbox.on-label'\n : 'app.components.ToggleCheckbox.off-label',\n defaultMessage: booleanValue ? 'true' : 'false',\n });\n }\n\n if (['integer', 'biginteger'].includes(type)) {\n formattedValue = formatNumber(value as Parameters<typeof formatNumber>[0], {\n maximumFractionDigits: 0,\n useGrouping: !isIdColumn,\n });\n }\n\n return toString(formattedValue);\n};\n\nexport { CellValue };\nexport type { CellValueProps };\n"],"names":["CellValue","isIdColumn","type","value","formatDate","formatTime","formatNumber","formatMessage","useIntl","formattedValue","parseISO","dateStyle","timeStyle","hour","minute","second","split","date","Date","setHours","Number","setMinutes","setSeconds","includes","maximumFractionDigits","booleanValue","Boolean","id","defaultMessage","useGrouping","toString"],"mappings":";;;;AAYA,MAAMA,SAAAA,GAAY,CAAC,EAAEC,UAAAA,GAAa,KAAK,EAAEC,IAAI,EAAEC,KAAK,EAAkB,GAAA;IACpE,MAAM,EAAEC,UAAU,EAAEC,UAAU,EAAEC,YAAY,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAChE,IAAA,IAAIC,cAAAA,GAAiBN,KAAAA;AAErB,IAAA,IAAID,IAAAA,KAAS,MAAA,IAAU,OAAOC,KAAAA,KAAU,QAAA,EAAU;QAChDM,cAAAA,GAAiBL,UAAAA,CAAWM,SAASP,KAAAA,CAAAA,EAAQ;YAAEQ,SAAAA,EAAW;AAAO,SAAA,CAAA;AACnE,IAAA;AAEA,IAAA,IAAIT,SAAS,UAAA,EAAY;AACvBO,QAAAA,cAAAA,GAAiBL,WAAWD,KAAAA,EAA2C;YACrEQ,SAAAA,EAAW,MAAA;YACXC,SAAAA,EAAW;AACb,SAAA,CAAA;AACF,IAAA;AAEA,IAAA,IAAIV,IAAAA,KAAS,MAAA,IAAU,OAAOC,KAAAA,KAAU,QAAA,EAAU;AAChD,QAAA,MAAM,CAACU,IAAAA,EAAMC,MAAAA,EAAQC,OAAO,GAAGZ,KAAAA,CAAMa,KAAK,CAAC,GAAA,CAAA;AAC3C,QAAA,MAAMC,OAAO,IAAIC,IAAAA,EAAAA;QACjBD,IAAAA,CAAKE,QAAQ,CAACC,MAAAA,CAAOP,IAAAA,CAAAA,CAAAA;QACrBI,IAAAA,CAAKI,UAAU,CAACD,MAAAA,CAAON,MAAAA,CAAAA,CAAAA;QACvBG,IAAAA,CAAKK,UAAU,CAACF,MAAAA,CAAOL,MAAAA,CAAAA,CAAAA;AAEvBN,QAAAA,cAAAA,GAAiBJ,WAAWY,IAAAA,EAAM;YAChCL,SAAAA,EAAW;AACb,SAAA,CAAA;AACF,IAAA;IAEA,IAAI;AAAC,QAAA,OAAA;AAAS,QAAA;KAAU,CAACW,QAAQ,CAACrB,IAAAA,CAAAA,EAAO;AACvCO,QAAAA,cAAAA,GAAiBH,aAAaH,KAAAA,EAA6C;;;YAGzEqB,qBAAAA,EAAuB;AACzB,SAAA,CAAA;AACF,IAAA;AAEA,IAAA,IAAItB,SAAS,SAAA,EAAW;AACtB,QAAA,MAAMuB,eAAeC,OAAAA,CAAQvB,KAAAA,CAAAA;AAC7BM,QAAAA,cAAAA,GAAiBF,aAAAA,CAAc;AAC7BoB,YAAAA,EAAAA,EAAIF,eACA,wCAAA,GACA,yCAAA;AACJG,YAAAA,cAAAA,EAAgBH,eAAe,MAAA,GAAS;AAC1C,SAAA,CAAA;AACF,IAAA;IAEA,IAAI;AAAC,QAAA,SAAA;AAAW,QAAA;KAAa,CAACF,QAAQ,CAACrB,IAAAA,CAAAA,EAAO;AAC5CO,QAAAA,cAAAA,GAAiBH,aAAaH,KAAAA,EAA6C;YACzEqB,qBAAAA,EAAuB,CAAA;AACvBK,YAAAA,WAAAA,EAAa,CAAC5B;AAChB,SAAA,CAAA;AACF,IAAA;AAEA,IAAA,OAAO6B,QAAAA,CAASrB,cAAAA,CAAAA;AAClB;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Components.js","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/Components.tsx"],"sourcesContent":["import { Badge, Tooltip, Typography, Menu } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\
|
|
1
|
+
{"version":3,"file":"Components.js","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/Components.tsx"],"sourcesContent":["import { Badge, Tooltip, Typography, Menu } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { CellContentProps } from './CellContent';\nimport { CellValue } from './CellValue';\n\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * SingleComponent\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SingleComponentProps extends Pick<CellContentProps, 'mainField'> {\n content: Schema.Attribute.Value<Schema.Attribute.Component<`${string}.${string}`, false>>;\n}\n\nconst SingleComponent = ({ content, mainField }: SingleComponentProps) => {\n if (!mainField) {\n return null;\n }\n\n return (\n <Tooltip label={content[mainField.name]}>\n <Typography maxWidth=\"25rem\" textColor=\"neutral800\" ellipsis>\n <CellValue type={mainField.type} value={content[mainField.name]} />\n </Typography>\n </Tooltip>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * RepeatableComponent\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RepeatableComponentProps extends Pick<CellContentProps, 'mainField'> {\n content: Schema.Attribute.Value<Schema.Attribute.Component<`${string}.${string}`, true>>;\n}\n\nconst RepeatableComponent = ({ content, mainField }: RepeatableComponentProps) => {\n const { formatMessage } = useIntl();\n\n if (!mainField) {\n return null;\n }\n\n return (\n <Menu.Root>\n <Menu.Trigger onClick={(e) => e.stopPropagation()}>\n <Badge>{content.length}</Badge>\n {formatMessage(\n {\n id: 'content-manager.containers.list.items',\n defaultMessage: '{number, plural, =0 {items} one {item} other {items}}',\n },\n { number: content.length }\n )}\n </Menu.Trigger>\n <Menu.Content>\n {content.map((item) => (\n <Menu.Item key={item.id} disabled>\n <Typography maxWidth=\"50rem\" ellipsis>\n <CellValue type={mainField.type} value={item[mainField.name]} />\n </Typography>\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Root>\n );\n};\n\nexport { SingleComponent, RepeatableComponent };\nexport type { SingleComponentProps, RepeatableComponentProps };\n"],"names":["SingleComponent","content","mainField","_jsx","Tooltip","label","name","Typography","maxWidth","textColor","ellipsis","CellValue","type","value","RepeatableComponent","formatMessage","useIntl","_jsxs","Menu","Root","Trigger","onClick","e","stopPropagation","Badge","length","id","defaultMessage","number","Content","map","item","Item","disabled"],"mappings":";;;;;;;AAgBA,MAAMA,kBAAkB,CAAC,EAAEC,OAAO,EAAEC,SAAS,EAAwB,GAAA;AACnE,IAAA,IAAI,CAACA,SAAAA,EAAW;QACd,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,qBACEC,cAAA,CAACC,oBAAAA,EAAAA;AAAQC,QAAAA,KAAAA,EAAOJ,OAAO,CAACC,SAAAA,CAAUI,IAAI,CAAC;AACrC,QAAA,QAAA,gBAAAH,cAAA,CAACI,uBAAAA,EAAAA;YAAWC,QAAAA,EAAS,OAAA;YAAQC,SAAAA,EAAU,YAAA;YAAaC,QAAQ,EAAA,IAAA;AAC1D,YAAA,QAAA,gBAAAP,cAAA,CAACQ,mBAAAA,EAAAA;AAAUC,gBAAAA,IAAAA,EAAMV,UAAUU,IAAI;AAAEC,gBAAAA,KAAAA,EAAOZ,OAAO,CAACC,SAAAA,CAAUI,IAAI;;;;AAItE;AAUA,MAAMQ,sBAAsB,CAAC,EAAEb,OAAO,EAAEC,SAAS,EAA4B,GAAA;IAC3E,MAAM,EAAEa,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAE1B,IAAA,IAAI,CAACd,SAAAA,EAAW;QACd,OAAO,IAAA;AACT,IAAA;IAEA,qBACEe,eAAA,CAACC,kBAAKC,IAAI,EAAA;;AACR,0BAAAF,eAAA,CAACC,kBAAKE,OAAO,EAAA;gBAACC,OAAAA,EAAS,CAACC,CAAAA,GAAMA,CAAAA,CAAEC,eAAe,EAAA;;kCAC7CpB,cAAA,CAACqB,kBAAAA,EAAAA;AAAOvB,wBAAAA,QAAAA,EAAAA,OAAAA,CAAQwB;;oBACfV,aAAAA,CACC;wBACEW,EAAAA,EAAI,uCAAA;wBACJC,cAAAA,EAAgB;qBAClB,EACA;AAAEC,wBAAAA,MAAAA,EAAQ3B,QAAQwB;AAAO,qBAAA;;;AAG7B,0BAAAtB,cAAA,CAACe,kBAAKW,OAAO,EAAA;AACV5B,gBAAAA,QAAAA,EAAAA,OAAAA,CAAQ6B,GAAG,CAAC,CAACC,IAAAA,iBACZ5B,cAAA,CAACe,kBAAKc,IAAI,EAAA;wBAAeC,QAAQ,EAAA,IAAA;AAC/B,wBAAA,QAAA,gBAAA9B,cAAA,CAACI,uBAAAA,EAAAA;4BAAWC,QAAAA,EAAS,OAAA;4BAAQE,QAAQ,EAAA,IAAA;AACnC,4BAAA,QAAA,gBAAAP,cAAA,CAACQ,mBAAAA,EAAAA;AAAUC,gCAAAA,IAAAA,EAAMV,UAAUU,IAAI;AAAEC,gCAAAA,KAAAA,EAAOkB,IAAI,CAAC7B,SAAAA,CAAUI,IAAI;;;AAF/CyB,qBAAAA,EAAAA,IAAAA,CAAKL,EAAE,CAAA;;;;AASjC;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Components.mjs","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/Components.tsx"],"sourcesContent":["import { Badge, Tooltip, Typography, Menu } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\
|
|
1
|
+
{"version":3,"file":"Components.mjs","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/Components.tsx"],"sourcesContent":["import { Badge, Tooltip, Typography, Menu } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { CellContentProps } from './CellContent';\nimport { CellValue } from './CellValue';\n\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * SingleComponent\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SingleComponentProps extends Pick<CellContentProps, 'mainField'> {\n content: Schema.Attribute.Value<Schema.Attribute.Component<`${string}.${string}`, false>>;\n}\n\nconst SingleComponent = ({ content, mainField }: SingleComponentProps) => {\n if (!mainField) {\n return null;\n }\n\n return (\n <Tooltip label={content[mainField.name]}>\n <Typography maxWidth=\"25rem\" textColor=\"neutral800\" ellipsis>\n <CellValue type={mainField.type} value={content[mainField.name]} />\n </Typography>\n </Tooltip>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * RepeatableComponent\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RepeatableComponentProps extends Pick<CellContentProps, 'mainField'> {\n content: Schema.Attribute.Value<Schema.Attribute.Component<`${string}.${string}`, true>>;\n}\n\nconst RepeatableComponent = ({ content, mainField }: RepeatableComponentProps) => {\n const { formatMessage } = useIntl();\n\n if (!mainField) {\n return null;\n }\n\n return (\n <Menu.Root>\n <Menu.Trigger onClick={(e) => e.stopPropagation()}>\n <Badge>{content.length}</Badge>\n {formatMessage(\n {\n id: 'content-manager.containers.list.items',\n defaultMessage: '{number, plural, =0 {items} one {item} other {items}}',\n },\n { number: content.length }\n )}\n </Menu.Trigger>\n <Menu.Content>\n {content.map((item) => (\n <Menu.Item key={item.id} disabled>\n <Typography maxWidth=\"50rem\" ellipsis>\n <CellValue type={mainField.type} value={item[mainField.name]} />\n </Typography>\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Root>\n );\n};\n\nexport { SingleComponent, RepeatableComponent };\nexport type { SingleComponentProps, RepeatableComponentProps };\n"],"names":["SingleComponent","content","mainField","_jsx","Tooltip","label","name","Typography","maxWidth","textColor","ellipsis","CellValue","type","value","RepeatableComponent","formatMessage","useIntl","_jsxs","Menu","Root","Trigger","onClick","e","stopPropagation","Badge","length","id","defaultMessage","number","Content","map","item","Item","disabled"],"mappings":";;;;;AAgBA,MAAMA,kBAAkB,CAAC,EAAEC,OAAO,EAAEC,SAAS,EAAwB,GAAA;AACnE,IAAA,IAAI,CAACA,SAAAA,EAAW;QACd,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,qBACEC,GAAA,CAACC,OAAAA,EAAAA;AAAQC,QAAAA,KAAAA,EAAOJ,OAAO,CAACC,SAAAA,CAAUI,IAAI,CAAC;AACrC,QAAA,QAAA,gBAAAH,GAAA,CAACI,UAAAA,EAAAA;YAAWC,QAAAA,EAAS,OAAA;YAAQC,SAAAA,EAAU,YAAA;YAAaC,QAAQ,EAAA,IAAA;AAC1D,YAAA,QAAA,gBAAAP,GAAA,CAACQ,SAAAA,EAAAA;AAAUC,gBAAAA,IAAAA,EAAMV,UAAUU,IAAI;AAAEC,gBAAAA,KAAAA,EAAOZ,OAAO,CAACC,SAAAA,CAAUI,IAAI;;;;AAItE;AAUA,MAAMQ,sBAAsB,CAAC,EAAEb,OAAO,EAAEC,SAAS,EAA4B,GAAA;IAC3E,MAAM,EAAEa,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAE1B,IAAA,IAAI,CAACd,SAAAA,EAAW;QACd,OAAO,IAAA;AACT,IAAA;IAEA,qBACEe,IAAA,CAACC,KAAKC,IAAI,EAAA;;AACR,0BAAAF,IAAA,CAACC,KAAKE,OAAO,EAAA;gBAACC,OAAAA,EAAS,CAACC,CAAAA,GAAMA,CAAAA,CAAEC,eAAe,EAAA;;kCAC7CpB,GAAA,CAACqB,KAAAA,EAAAA;AAAOvB,wBAAAA,QAAAA,EAAAA,OAAAA,CAAQwB;;oBACfV,aAAAA,CACC;wBACEW,EAAAA,EAAI,uCAAA;wBACJC,cAAAA,EAAgB;qBAClB,EACA;AAAEC,wBAAAA,MAAAA,EAAQ3B,QAAQwB;AAAO,qBAAA;;;AAG7B,0BAAAtB,GAAA,CAACe,KAAKW,OAAO,EAAA;AACV5B,gBAAAA,QAAAA,EAAAA,OAAAA,CAAQ6B,GAAG,CAAC,CAACC,IAAAA,iBACZ5B,GAAA,CAACe,KAAKc,IAAI,EAAA;wBAAeC,QAAQ,EAAA,IAAA;AAC/B,wBAAA,QAAA,gBAAA9B,GAAA,CAACI,UAAAA,EAAAA;4BAAWC,QAAAA,EAAS,OAAA;4BAAQE,QAAQ,EAAA,IAAA;AACnC,4BAAA,QAAA,gBAAAP,GAAA,CAACQ,SAAAA,EAAAA;AAAUC,gCAAAA,IAAAA,EAAMV,UAAUU,IAAI;AAAEC,gCAAAA,KAAAA,EAAOkB,IAAI,CAAC7B,SAAAA,CAAUI,IAAI;;;AAF/CyB,qBAAAA,EAAAA,IAAAA,CAAKL,EAAE,CAAA;;;;AASjC;;;;"}
|
|
@@ -145,6 +145,8 @@ const PreviewPage = ()=>{
|
|
|
145
145
|
return ()=>{
|
|
146
146
|
window.removeEventListener('message', handleMessage);
|
|
147
147
|
};
|
|
148
|
+
// Preserve the existing dependency behavior: previewHighlightColors is derived from theme.
|
|
149
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
148
150
|
}, [
|
|
149
151
|
documentId,
|
|
150
152
|
toggleNotification,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Preview.js","sources":["../../../../admin/src/preview/pages/Preview.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Page,\n useQueryParams,\n useRBAC,\n createContext,\n Form as FormContext,\n type FieldContentSourceMap,\n useNotification,\n} from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n FocusTrap,\n IconButton,\n Portal,\n SingleSelect,\n SingleSelectOption,\n} from '@strapi/design-system';\nimport { ArrowLineLeft } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useParams } from 'react-router-dom';\nimport { styled, useTheme } from 'styled-components';\n\nimport { GetPreviewUrl } from '../../../../shared/contracts/preview';\nimport { COLLECTION_TYPES } from '../../constants/collections';\nimport { DocumentRBAC } from '../../features/DocumentRBAC';\nimport { type UseDocument, useDocument } from '../../hooks/useDocument';\nimport { type EditLayout, useDocumentLayout } from '../../hooks/useDocumentLayout';\nimport { Blocker } from '../../pages/EditView/components/Blocker';\nimport { FormLayout } from '../../pages/EditView/components/FormLayout';\nimport { handleInvisibleAttributes } from '../../pages/EditView/utils/data';\nimport { buildValidParams } from '../../utils/api';\nimport { createYupSchema } from '../../utils/validation';\nimport { InputPopover } from '../components/InputPopover';\nimport { PreviewHeader } from '../components/PreviewHeader';\nimport { useGetPreviewUrlQuery } from '../services/preview';\nimport { INTERNAL_EVENTS, PUBLIC_EVENTS } from '../utils/constants';\nimport { getSendMessage } from '../utils/getSendMessage';\n\nimport type { Schema, UID } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * Constants\n * -----------------------------------------------------------------------------------------------*/\n\nconst DEVICES = [\n {\n name: 'desktop',\n label: {\n id: 'content-manager.preview.device.desktop',\n defaultMessage: 'Desktop',\n },\n width: '100%',\n height: '100%',\n },\n {\n name: 'mobile',\n label: {\n id: 'content-manager.preview.device.mobile',\n defaultMessage: 'Mobile',\n },\n width: '375px',\n height: '667px',\n },\n];\n\n/* -------------------------------------------------------------------------------------------------\n * PreviewProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PopoverField extends FieldContentSourceMap {\n position: DOMRect;\n attribute: Schema.Attribute.AnyAttribute;\n}\n\ninterface PreviewContextValue {\n url: string;\n title: string;\n document: NonNullable<ReturnType<UseDocument>['document']>;\n meta: NonNullable<ReturnType<UseDocument>['meta']>;\n schema: NonNullable<ReturnType<UseDocument>['schema']>;\n components: NonNullable<ReturnType<UseDocument>['components']>;\n layout: EditLayout;\n onPreview: () => void;\n iframeRef: React.RefObject<HTMLIFrameElement>;\n popoverField: PopoverField | null;\n setPopoverField: (value: PopoverField | null) => void;\n}\n\ntype PreviewHighlightColors = {\n highlightHoverColor: string;\n highlightActiveColor: string;\n};\n\nconst [PreviewProvider, usePreviewContext] = createContext<PreviewContextValue>('PreviewPage');\n\nconst getPreviewScript = (() => {\n let previewScript = '';\n return async (previewHighlightColors: PreviewHighlightColors) => {\n if (!previewScript) {\n const resp = await fetch(`${window.strapi.backendURL}/content-manager/preview/script`);\n\n if (!resp.ok) {\n throw new Error('Could not retrieve preview script from server.');\n }\n\n previewScript = await resp.text();\n\n if (!previewScript) {\n throw new Error('Could not retrieve preview script from server.');\n }\n }\n\n return `(${previewScript})(${JSON.stringify({\n colors: previewHighlightColors,\n events: INTERNAL_EVENTS,\n parentOrigin: window.location.origin,\n })})`;\n };\n})();\n\n/* -------------------------------------------------------------------------------------------------\n * PreviewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst AnimatedArrow = styled(ArrowLineLeft)<{ $isSideEditorOpen: boolean }>`\n will-change: transform;\n rotate: ${(props) => (props.$isSideEditorOpen ? '0deg' : '180deg')};\n transition: rotate 0.2s ease-in-out;\n`;\n\nconst PreviewPage = () => {\n const location = useLocation();\n const { formatMessage } = useIntl();\n const theme = useTheme();\n\n const iframeRef = React.useRef<HTMLIFrameElement>(null);\n const [isSideEditorOpen, setIsSideEditorOpen] = React.useState(true);\n const [popoverField, setPopoverField] = React.useState<PopoverField | null>(null);\n const { toggleNotification } = useNotification();\n\n // Read all the necessary data from the URL to find the right preview URL\n const {\n slug: model,\n id: documentId,\n collectionType,\n } = useParams<{\n slug: UID.ContentType;\n id: string;\n collectionType: string;\n }>();\n const [{ query }] = useQueryParams<{\n plugins?: Record<string, unknown>;\n status?: string;\n }>();\n\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n const [deviceName, setDeviceName] = React.useState<(typeof DEVICES)[number]['name']>(\n DEVICES[0].name\n );\n const device = DEVICES.find((d) => d.name === deviceName) ?? DEVICES[0];\n\n const previewHighlightColors: PreviewHighlightColors = {\n highlightHoverColor: theme.colors.primary500,\n highlightActiveColor: theme.colors.primary600,\n };\n\n // Listen for ready message from iframe before injecting script\n React.useEffect(() => {\n const handleMessage = async (event: MessageEvent) => {\n // Only listen to events from the preview iframe\n if (iframeRef.current) {\n const previewOrigin = new URL(iframeRef.current?.src).origin;\n if (event.origin !== previewOrigin) {\n return;\n }\n }\n\n if (event.data?.type === PUBLIC_EVENTS.PREVIEW_READY) {\n try {\n const script = await getPreviewScript(previewHighlightColors);\n\n const sendMessage = getSendMessage(iframeRef);\n sendMessage(PUBLIC_EVENTS.STRAPI_SCRIPT, { script });\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'content-manager.preview.error.script-failed',\n defaultMessage:\n 'Could not load the live preview script. Visual editing may not be available.',\n }),\n });\n }\n }\n };\n\n window.addEventListener('message', handleMessage);\n\n return () => {\n window.removeEventListener('message', handleMessage);\n };\n }, [documentId, toggleNotification, theme, formatMessage]);\n\n if (!collectionType) {\n throw new Error('Could not find collectionType in url params');\n }\n\n if (!model) {\n throw new Error('Could not find model in url params');\n }\n\n // Only collection types must have a documentId\n if (collectionType === COLLECTION_TYPES && !documentId) {\n throw new Error('Could not find documentId in url params');\n }\n\n const previewUrlResponse = useGetPreviewUrlQuery({\n params: {\n contentType: model,\n },\n query: {\n documentId,\n locale: params.locale,\n status: params.status as GetPreviewUrl.Request['query']['status'],\n },\n });\n const documentResponse = useDocument({\n model,\n collectionType,\n documentId,\n params,\n });\n const documentLayoutResponse = useDocumentLayout(model);\n\n const isLoading =\n previewUrlResponse.isLoading || documentLayoutResponse.isLoading || documentResponse.isLoading;\n if (isLoading && (!documentResponse.document?.documentId || previewUrlResponse.isLoading)) {\n return <Page.Loading />;\n }\n\n const initialValues = documentResponse.getInitialFormValues();\n\n if (\n previewUrlResponse.error ||\n documentLayoutResponse.error ||\n !documentResponse.document ||\n !documentResponse.meta ||\n !documentResponse.schema ||\n !initialValues\n ) {\n return <Page.Error />;\n }\n\n if (!previewUrlResponse.data?.data?.url) {\n return <Page.NoData />;\n }\n\n const documentTitle = documentResponse.getTitle(documentLayoutResponse.edit.settings.mainField);\n\n const validateSync = (values: Record<string, unknown>, options: Record<string, string>) => {\n const { data: cleanedValues, removedAttributes } = handleInvisibleAttributes(values, {\n schema: documentResponse.schema,\n initialValues,\n components: documentResponse.components,\n });\n\n const yupSchema = createYupSchema(\n documentResponse.schema?.attributes,\n documentResponse.components,\n {\n status: documentResponse.document?.status,\n removedAttributes,\n ...options,\n }\n );\n\n return yupSchema.validateSync(cleanedValues, { abortEarly: false });\n };\n\n const previewUrl = previewUrlResponse.data.data.url;\n\n const onPreview = () => {\n iframeRef?.current?.contentWindow?.postMessage(\n { type: 'strapiUpdate' },\n // The iframe origin is safe to use since it must be provided through the allowedOrigins config\n new URL(iframeRef.current.src).origin\n );\n };\n\n const hasAdvancedPreview = window.strapi.features.isEnabled('cms-advanced-preview');\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n {\n id: 'content-manager.preview.page-title',\n defaultMessage: '{contentType} preview',\n },\n {\n contentType: documentTitle,\n }\n )}\n </Page.Title>\n <PreviewProvider\n url={previewUrl}\n document={documentResponse.document}\n title={documentTitle}\n meta={documentResponse.meta}\n schema={documentResponse.schema}\n components={documentResponse.components}\n layout={documentLayoutResponse.edit}\n onPreview={onPreview}\n iframeRef={iframeRef}\n popoverField={popoverField}\n setPopoverField={setPopoverField}\n >\n <FormContext\n method=\"PUT\"\n disabled={\n query.status === 'published' &&\n documentResponse &&\n documentResponse.document.status !== 'draft'\n }\n initialValues={documentResponse.getInitialFormValues()}\n initialErrors={location?.state?.forceValidation ? validateSync(initialValues, {}) : {}}\n height=\"100%\"\n validate={(values: Record<string, unknown>, options: Record<string, string>) => {\n const { data: cleanedValues, removedAttributes } = handleInvisibleAttributes(values, {\n schema: documentResponse.schema,\n initialValues,\n components: documentResponse.components,\n });\n\n const yupSchema = createYupSchema(\n documentResponse.schema?.attributes,\n documentResponse.components,\n {\n status: documentResponse.document?.status,\n removedAttributes,\n ...options,\n }\n );\n\n return yupSchema.validate(cleanedValues, { abortEarly: false });\n }}\n >\n <Flex direction=\"column\" height=\"100%\" alignItems=\"stretch\">\n <Blocker />\n <PreviewHeader />\n <InputPopover documentResponse={documentResponse} />\n <Flex flex={1} overflow=\"auto\" alignItems=\"stretch\">\n {hasAdvancedPreview && (\n <Box\n overflow=\"auto\"\n width={isSideEditorOpen ? '50%' : 0}\n borderWidth=\"0 1px 0 0\"\n borderColor=\"neutral150\"\n paddingTop={6}\n paddingBottom={6}\n // Remove horizontal padding when the editor is closed or it won't fully disappear\n paddingLeft={isSideEditorOpen ? 6 : 0}\n paddingRight={isSideEditorOpen ? 6 : 0}\n transition=\"all 0.2s ease-in-out\"\n >\n <FormLayout\n layout={documentLayoutResponse.edit.layout}\n document={documentResponse}\n hasBackground={false}\n />\n </Box>\n )}\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n flex={1}\n height=\"100%\"\n overflow=\"hidden\"\n >\n <Flex\n direction=\"row\"\n background=\"neutral0\"\n padding={2}\n borderWidth=\"0 0 1px 0\"\n borderColor=\"neutral150\"\n >\n {hasAdvancedPreview && (\n <IconButton\n variant=\"ghost\"\n label={formatMessage(\n isSideEditorOpen\n ? {\n id: 'content-manager.preview.content.close-editor',\n defaultMessage: 'Close editor',\n }\n : {\n id: 'content-manager.preview.content.open-editor',\n defaultMessage: 'Open editor',\n }\n )}\n onClick={() => setIsSideEditorOpen((prev) => !prev)}\n >\n <AnimatedArrow $isSideEditorOpen={isSideEditorOpen} />\n </IconButton>\n )}\n <Flex justifyContent=\"center\" flex={1}>\n <SingleSelect\n value={deviceName}\n onChange={(name) => setDeviceName(name.toString())}\n aria-label={formatMessage({\n id: 'content-manager.preview.device.select',\n defaultMessage: 'Select device type',\n })}\n >\n {DEVICES.map((deviceOption) => (\n <SingleSelectOption key={deviceOption.name} value={deviceOption.name}>\n {formatMessage(deviceOption.label)}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </Flex>\n </Flex>\n <Flex direction=\"column\" justifyContent=\"center\" background=\"neutral0\" flex={1}>\n <Box\n data-testid=\"preview-iframe\"\n ref={iframeRef}\n src={previewUrl}\n /**\n * For some reason, changing an iframe's src tag causes the browser to add a new item in the\n * history stack. This is an issue for us as it means clicking the back button will not let us\n * go back to the edit view. To fix it, we need to trick the browser into thinking this is a\n * different iframe when the preview URL changes. So we set a key prop to force React\n * to mount a different node when the src changes.\n */\n key={previewUrl}\n title={formatMessage({\n id: 'content-manager.preview.panel.title',\n defaultMessage: 'Preview',\n })}\n width={device.width}\n height={device.height}\n borderWidth={0}\n tag=\"iframe\"\n />\n </Flex>\n </Flex>\n </Flex>\n </Flex>\n </FormContext>\n </PreviewProvider>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedPreviewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedPreviewPageImpl = () => {\n const { slug: model } = useParams<{\n slug: string;\n }>();\n const {\n permissions = [],\n isLoading,\n error,\n } = useRBAC([\n { action: 'plugin::content-manager.explorer.read', subject: model },\n { action: 'plugin::content-manager.explorer.update', subject: model },\n { action: 'plugin::content-manager.explorer.publish', subject: model },\n ]);\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error || !model) {\n return (\n <Box\n height=\"100dvh\"\n width=\"100dvw\"\n position=\"fixed\"\n top={0}\n left={0}\n zIndex={5}\n background=\"neutral0\"\n >\n <Page.Error />\n </Box>\n );\n }\n\n return (\n <Box\n height=\"100dvh\"\n width=\"100dvw\"\n position=\"fixed\"\n top={0}\n left={0}\n zIndex={5}\n background=\"neutral0\"\n >\n <Page.Protect\n permissions={permissions.filter((permission) =>\n permission.action.includes('explorer.read')\n )}\n >\n <DocumentRBAC permissions={permissions}>\n <PreviewPage />\n </DocumentRBAC>\n </Page.Protect>\n </Box>\n );\n};\n\nconst ProtectedPreviewPage = () => {\n return (\n <Portal>\n <FocusTrap>\n <ProtectedPreviewPageImpl />\n </FocusTrap>\n </Portal>\n );\n};\n\nexport { ProtectedPreviewPage, usePreviewContext };\nexport type { PreviewContextValue };\n"],"names":["DEVICES","name","label","id","defaultMessage","width","height","PreviewProvider","usePreviewContext","createContext","getPreviewScript","previewScript","previewHighlightColors","resp","fetch","window","strapi","backendURL","ok","Error","text","JSON","stringify","colors","events","INTERNAL_EVENTS","parentOrigin","location","origin","AnimatedArrow","styled","ArrowLineLeft","props","$isSideEditorOpen","PreviewPage","useLocation","formatMessage","useIntl","theme","useTheme","iframeRef","React","useRef","isSideEditorOpen","setIsSideEditorOpen","useState","popoverField","setPopoverField","toggleNotification","useNotification","slug","model","documentId","collectionType","useParams","query","useQueryParams","params","useMemo","buildValidParams","deviceName","setDeviceName","device","find","d","highlightHoverColor","primary500","highlightActiveColor","primary600","useEffect","handleMessage","event","current","previewOrigin","URL","src","data","type","PUBLIC_EVENTS","PREVIEW_READY","script","sendMessage","getSendMessage","STRAPI_SCRIPT","message","addEventListener","removeEventListener","COLLECTION_TYPES","previewUrlResponse","useGetPreviewUrlQuery","contentType","locale","status","documentResponse","useDocument","documentLayoutResponse","useDocumentLayout","isLoading","document","_jsx","Page","Loading","initialValues","getInitialFormValues","error","meta","schema","url","NoData","documentTitle","getTitle","edit","settings","mainField","validateSync","values","options","cleanedValues","removedAttributes","handleInvisibleAttributes","components","yupSchema","createYupSchema","attributes","abortEarly","previewUrl","onPreview","contentWindow","postMessage","hasAdvancedPreview","features","isEnabled","_jsxs","_Fragment","Title","title","layout","FormContext","method","disabled","initialErrors","state","forceValidation","validate","Flex","direction","alignItems","Blocker","PreviewHeader","InputPopover","flex","overflow","Box","borderWidth","borderColor","paddingTop","paddingBottom","paddingLeft","paddingRight","transition","FormLayout","hasBackground","background","padding","IconButton","variant","onClick","prev","justifyContent","SingleSelect","value","onChange","toString","aria-label","map","deviceOption","SingleSelectOption","data-testid","ref","tag","ProtectedPreviewPageImpl","permissions","useRBAC","action","subject","position","top","left","zIndex","Protect","filter","permission","includes","DocumentRBAC","ProtectedPreviewPage","Portal","FocusTrap"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Preview.js","sources":["../../../../admin/src/preview/pages/Preview.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Page,\n useQueryParams,\n useRBAC,\n createContext,\n Form as FormContext,\n type FieldContentSourceMap,\n useNotification,\n} from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n FocusTrap,\n IconButton,\n Portal,\n SingleSelect,\n SingleSelectOption,\n} from '@strapi/design-system';\nimport { ArrowLineLeft } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useParams } from 'react-router-dom';\nimport { styled, useTheme } from 'styled-components';\n\nimport { GetPreviewUrl } from '../../../../shared/contracts/preview';\nimport { COLLECTION_TYPES } from '../../constants/collections';\nimport { DocumentRBAC } from '../../features/DocumentRBAC';\nimport { type UseDocument, useDocument } from '../../hooks/useDocument';\nimport { type EditLayout, useDocumentLayout } from '../../hooks/useDocumentLayout';\nimport { Blocker } from '../../pages/EditView/components/Blocker';\nimport { FormLayout } from '../../pages/EditView/components/FormLayout';\nimport { handleInvisibleAttributes } from '../../pages/EditView/utils/data';\nimport { buildValidParams } from '../../utils/api';\nimport { createYupSchema } from '../../utils/validation';\nimport { InputPopover } from '../components/InputPopover';\nimport { PreviewHeader } from '../components/PreviewHeader';\nimport { useGetPreviewUrlQuery } from '../services/preview';\nimport { INTERNAL_EVENTS, PUBLIC_EVENTS } from '../utils/constants';\nimport { getSendMessage } from '../utils/getSendMessage';\n\nimport type { Schema, UID } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * Constants\n * -----------------------------------------------------------------------------------------------*/\n\nconst DEVICES = [\n {\n name: 'desktop',\n label: {\n id: 'content-manager.preview.device.desktop',\n defaultMessage: 'Desktop',\n },\n width: '100%',\n height: '100%',\n },\n {\n name: 'mobile',\n label: {\n id: 'content-manager.preview.device.mobile',\n defaultMessage: 'Mobile',\n },\n width: '375px',\n height: '667px',\n },\n];\n\n/* -------------------------------------------------------------------------------------------------\n * PreviewProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PopoverField extends FieldContentSourceMap {\n position: DOMRect;\n attribute: Schema.Attribute.AnyAttribute;\n}\n\ninterface PreviewContextValue {\n url: string;\n title: string;\n document: NonNullable<ReturnType<UseDocument>['document']>;\n meta: NonNullable<ReturnType<UseDocument>['meta']>;\n schema: NonNullable<ReturnType<UseDocument>['schema']>;\n components: NonNullable<ReturnType<UseDocument>['components']>;\n layout: EditLayout;\n onPreview: () => void;\n iframeRef: React.RefObject<HTMLIFrameElement>;\n popoverField: PopoverField | null;\n setPopoverField: (value: PopoverField | null) => void;\n}\n\ntype PreviewHighlightColors = {\n highlightHoverColor: string;\n highlightActiveColor: string;\n};\n\nconst [PreviewProvider, usePreviewContext] = createContext<PreviewContextValue>('PreviewPage');\n\nconst getPreviewScript = (() => {\n let previewScript = '';\n return async (previewHighlightColors: PreviewHighlightColors) => {\n if (!previewScript) {\n const resp = await fetch(`${window.strapi.backendURL}/content-manager/preview/script`);\n\n if (!resp.ok) {\n throw new Error('Could not retrieve preview script from server.');\n }\n\n previewScript = await resp.text();\n\n if (!previewScript) {\n throw new Error('Could not retrieve preview script from server.');\n }\n }\n\n return `(${previewScript})(${JSON.stringify({\n colors: previewHighlightColors,\n events: INTERNAL_EVENTS,\n parentOrigin: window.location.origin,\n })})`;\n };\n})();\n\n/* -------------------------------------------------------------------------------------------------\n * PreviewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst AnimatedArrow = styled(ArrowLineLeft)<{ $isSideEditorOpen: boolean }>`\n will-change: transform;\n rotate: ${(props) => (props.$isSideEditorOpen ? '0deg' : '180deg')};\n transition: rotate 0.2s ease-in-out;\n`;\n\nconst PreviewPage = () => {\n const location = useLocation();\n const { formatMessage } = useIntl();\n const theme = useTheme();\n\n const iframeRef = React.useRef<HTMLIFrameElement>(null);\n const [isSideEditorOpen, setIsSideEditorOpen] = React.useState(true);\n const [popoverField, setPopoverField] = React.useState<PopoverField | null>(null);\n const { toggleNotification } = useNotification();\n\n // Read all the necessary data from the URL to find the right preview URL\n const {\n slug: model,\n id: documentId,\n collectionType,\n } = useParams<{\n slug: UID.ContentType;\n id: string;\n collectionType: string;\n }>();\n const [{ query }] = useQueryParams<{\n plugins?: { i18n?: { locale?: string } };\n status?: string;\n }>();\n\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n const [deviceName, setDeviceName] = React.useState<(typeof DEVICES)[number]['name']>(\n DEVICES[0].name\n );\n const device = DEVICES.find((d) => d.name === deviceName) ?? DEVICES[0];\n\n const previewHighlightColors: PreviewHighlightColors = {\n highlightHoverColor: theme.colors.primary500,\n highlightActiveColor: theme.colors.primary600,\n };\n\n // Listen for ready message from iframe before injecting script\n React.useEffect(() => {\n const handleMessage = async (event: MessageEvent) => {\n // Only listen to events from the preview iframe\n if (iframeRef.current) {\n const previewOrigin = new URL(iframeRef.current?.src).origin;\n if (event.origin !== previewOrigin) {\n return;\n }\n }\n\n if (event.data?.type === PUBLIC_EVENTS.PREVIEW_READY) {\n try {\n const script = await getPreviewScript(previewHighlightColors);\n\n const sendMessage = getSendMessage(iframeRef);\n sendMessage(PUBLIC_EVENTS.STRAPI_SCRIPT, { script });\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'content-manager.preview.error.script-failed',\n defaultMessage:\n 'Could not load the live preview script. Visual editing may not be available.',\n }),\n });\n }\n }\n };\n\n window.addEventListener('message', handleMessage);\n\n return () => {\n window.removeEventListener('message', handleMessage);\n };\n // Preserve the existing dependency behavior: previewHighlightColors is derived from theme.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [documentId, toggleNotification, theme, formatMessage]);\n\n if (!collectionType) {\n throw new Error('Could not find collectionType in url params');\n }\n\n if (!model) {\n throw new Error('Could not find model in url params');\n }\n\n // Only collection types must have a documentId\n if (collectionType === COLLECTION_TYPES && !documentId) {\n throw new Error('Could not find documentId in url params');\n }\n\n const previewUrlResponse = useGetPreviewUrlQuery({\n params: {\n contentType: model,\n },\n query: {\n documentId,\n locale: params.locale as GetPreviewUrl.Request['query']['locale'],\n status: params.status as GetPreviewUrl.Request['query']['status'],\n },\n });\n const documentResponse = useDocument({\n model,\n collectionType,\n documentId,\n params,\n });\n const documentLayoutResponse = useDocumentLayout(model);\n\n const isLoading =\n previewUrlResponse.isLoading || documentLayoutResponse.isLoading || documentResponse.isLoading;\n if (isLoading && (!documentResponse.document?.documentId || previewUrlResponse.isLoading)) {\n return <Page.Loading />;\n }\n\n const initialValues = documentResponse.getInitialFormValues();\n\n if (\n previewUrlResponse.error ||\n documentLayoutResponse.error ||\n !documentResponse.document ||\n !documentResponse.meta ||\n !documentResponse.schema ||\n !initialValues\n ) {\n return <Page.Error />;\n }\n\n if (!previewUrlResponse.data?.data?.url) {\n return <Page.NoData />;\n }\n\n const documentTitle = documentResponse.getTitle(documentLayoutResponse.edit.settings.mainField);\n\n const validateSync = (values: Record<string, unknown>, options: Record<string, string>) => {\n const { data: cleanedValues, removedAttributes } = handleInvisibleAttributes(values, {\n schema: documentResponse.schema,\n initialValues,\n components: documentResponse.components,\n });\n\n const yupSchema = createYupSchema(\n documentResponse.schema?.attributes,\n documentResponse.components,\n {\n status: documentResponse.document?.status,\n removedAttributes,\n ...options,\n }\n );\n\n return yupSchema.validateSync(cleanedValues, { abortEarly: false });\n };\n\n const previewUrl = previewUrlResponse.data.data.url;\n\n const onPreview = () => {\n iframeRef?.current?.contentWindow?.postMessage(\n { type: 'strapiUpdate' },\n // The iframe origin is safe to use since it must be provided through the allowedOrigins config\n new URL(iframeRef.current.src).origin\n );\n };\n\n const hasAdvancedPreview = window.strapi.features.isEnabled('cms-advanced-preview');\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n {\n id: 'content-manager.preview.page-title',\n defaultMessage: '{contentType} preview',\n },\n {\n contentType: documentTitle,\n }\n )}\n </Page.Title>\n <PreviewProvider\n url={previewUrl}\n document={documentResponse.document}\n title={documentTitle}\n meta={documentResponse.meta}\n schema={documentResponse.schema}\n components={documentResponse.components}\n layout={documentLayoutResponse.edit}\n onPreview={onPreview}\n iframeRef={iframeRef}\n popoverField={popoverField}\n setPopoverField={setPopoverField}\n >\n <FormContext\n method=\"PUT\"\n disabled={\n query.status === 'published' &&\n documentResponse &&\n documentResponse.document.status !== 'draft'\n }\n initialValues={documentResponse.getInitialFormValues()}\n initialErrors={location?.state?.forceValidation ? validateSync(initialValues, {}) : {}}\n height=\"100%\"\n validate={(values: Record<string, unknown>, options: Record<string, string>) => {\n const { data: cleanedValues, removedAttributes } = handleInvisibleAttributes(values, {\n schema: documentResponse.schema,\n initialValues,\n components: documentResponse.components,\n });\n\n const yupSchema = createYupSchema(\n documentResponse.schema?.attributes,\n documentResponse.components,\n {\n status: documentResponse.document?.status,\n removedAttributes,\n ...options,\n }\n );\n\n return yupSchema.validate(cleanedValues, { abortEarly: false });\n }}\n >\n <Flex direction=\"column\" height=\"100%\" alignItems=\"stretch\">\n <Blocker />\n <PreviewHeader />\n <InputPopover documentResponse={documentResponse} />\n <Flex flex={1} overflow=\"auto\" alignItems=\"stretch\">\n {hasAdvancedPreview && (\n <Box\n overflow=\"auto\"\n width={isSideEditorOpen ? '50%' : 0}\n borderWidth=\"0 1px 0 0\"\n borderColor=\"neutral150\"\n paddingTop={6}\n paddingBottom={6}\n // Remove horizontal padding when the editor is closed or it won't fully disappear\n paddingLeft={isSideEditorOpen ? 6 : 0}\n paddingRight={isSideEditorOpen ? 6 : 0}\n transition=\"all 0.2s ease-in-out\"\n >\n <FormLayout\n layout={documentLayoutResponse.edit.layout}\n document={documentResponse}\n hasBackground={false}\n />\n </Box>\n )}\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n flex={1}\n height=\"100%\"\n overflow=\"hidden\"\n >\n <Flex\n direction=\"row\"\n background=\"neutral0\"\n padding={2}\n borderWidth=\"0 0 1px 0\"\n borderColor=\"neutral150\"\n >\n {hasAdvancedPreview && (\n <IconButton\n variant=\"ghost\"\n label={formatMessage(\n isSideEditorOpen\n ? {\n id: 'content-manager.preview.content.close-editor',\n defaultMessage: 'Close editor',\n }\n : {\n id: 'content-manager.preview.content.open-editor',\n defaultMessage: 'Open editor',\n }\n )}\n onClick={() => setIsSideEditorOpen((prev) => !prev)}\n >\n <AnimatedArrow $isSideEditorOpen={isSideEditorOpen} />\n </IconButton>\n )}\n <Flex justifyContent=\"center\" flex={1}>\n <SingleSelect\n value={deviceName}\n onChange={(name) => setDeviceName(name.toString())}\n aria-label={formatMessage({\n id: 'content-manager.preview.device.select',\n defaultMessage: 'Select device type',\n })}\n >\n {DEVICES.map((deviceOption) => (\n <SingleSelectOption key={deviceOption.name} value={deviceOption.name}>\n {formatMessage(deviceOption.label)}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </Flex>\n </Flex>\n <Flex direction=\"column\" justifyContent=\"center\" background=\"neutral0\" flex={1}>\n <Box\n data-testid=\"preview-iframe\"\n ref={iframeRef}\n src={previewUrl}\n /**\n * For some reason, changing an iframe's src tag causes the browser to add a new item in the\n * history stack. This is an issue for us as it means clicking the back button will not let us\n * go back to the edit view. To fix it, we need to trick the browser into thinking this is a\n * different iframe when the preview URL changes. So we set a key prop to force React\n * to mount a different node when the src changes.\n */\n key={previewUrl}\n title={formatMessage({\n id: 'content-manager.preview.panel.title',\n defaultMessage: 'Preview',\n })}\n width={device.width}\n height={device.height}\n borderWidth={0}\n tag=\"iframe\"\n />\n </Flex>\n </Flex>\n </Flex>\n </Flex>\n </FormContext>\n </PreviewProvider>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedPreviewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedPreviewPageImpl = () => {\n const { slug: model } = useParams<{\n slug: string;\n }>();\n const {\n permissions = [],\n isLoading,\n error,\n } = useRBAC([\n { action: 'plugin::content-manager.explorer.read', subject: model },\n { action: 'plugin::content-manager.explorer.update', subject: model },\n { action: 'plugin::content-manager.explorer.publish', subject: model },\n ]);\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error || !model) {\n return (\n <Box\n height=\"100dvh\"\n width=\"100dvw\"\n position=\"fixed\"\n top={0}\n left={0}\n zIndex={5}\n background=\"neutral0\"\n >\n <Page.Error />\n </Box>\n );\n }\n\n return (\n <Box\n height=\"100dvh\"\n width=\"100dvw\"\n position=\"fixed\"\n top={0}\n left={0}\n zIndex={5}\n background=\"neutral0\"\n >\n <Page.Protect\n permissions={permissions.filter((permission) =>\n permission.action.includes('explorer.read')\n )}\n >\n <DocumentRBAC permissions={permissions}>\n <PreviewPage />\n </DocumentRBAC>\n </Page.Protect>\n </Box>\n );\n};\n\nconst ProtectedPreviewPage = () => {\n return (\n <Portal>\n <FocusTrap>\n <ProtectedPreviewPageImpl />\n </FocusTrap>\n </Portal>\n );\n};\n\nexport { ProtectedPreviewPage, usePreviewContext };\nexport type { PreviewContextValue };\n"],"names":["DEVICES","name","label","id","defaultMessage","width","height","PreviewProvider","usePreviewContext","createContext","getPreviewScript","previewScript","previewHighlightColors","resp","fetch","window","strapi","backendURL","ok","Error","text","JSON","stringify","colors","events","INTERNAL_EVENTS","parentOrigin","location","origin","AnimatedArrow","styled","ArrowLineLeft","props","$isSideEditorOpen","PreviewPage","useLocation","formatMessage","useIntl","theme","useTheme","iframeRef","React","useRef","isSideEditorOpen","setIsSideEditorOpen","useState","popoverField","setPopoverField","toggleNotification","useNotification","slug","model","documentId","collectionType","useParams","query","useQueryParams","params","useMemo","buildValidParams","deviceName","setDeviceName","device","find","d","highlightHoverColor","primary500","highlightActiveColor","primary600","useEffect","handleMessage","event","current","previewOrigin","URL","src","data","type","PUBLIC_EVENTS","PREVIEW_READY","script","sendMessage","getSendMessage","STRAPI_SCRIPT","message","addEventListener","removeEventListener","COLLECTION_TYPES","previewUrlResponse","useGetPreviewUrlQuery","contentType","locale","status","documentResponse","useDocument","documentLayoutResponse","useDocumentLayout","isLoading","document","_jsx","Page","Loading","initialValues","getInitialFormValues","error","meta","schema","url","NoData","documentTitle","getTitle","edit","settings","mainField","validateSync","values","options","cleanedValues","removedAttributes","handleInvisibleAttributes","components","yupSchema","createYupSchema","attributes","abortEarly","previewUrl","onPreview","contentWindow","postMessage","hasAdvancedPreview","features","isEnabled","_jsxs","_Fragment","Title","title","layout","FormContext","method","disabled","initialErrors","state","forceValidation","validate","Flex","direction","alignItems","Blocker","PreviewHeader","InputPopover","flex","overflow","Box","borderWidth","borderColor","paddingTop","paddingBottom","paddingLeft","paddingRight","transition","FormLayout","hasBackground","background","padding","IconButton","variant","onClick","prev","justifyContent","SingleSelect","value","onChange","toString","aria-label","map","deviceOption","SingleSelectOption","data-testid","ref","tag","ProtectedPreviewPageImpl","permissions","useRBAC","action","subject","position","top","left","zIndex","Protect","filter","permission","includes","DocumentRBAC","ProtectedPreviewPage","Portal","FocusTrap"],"mappings":"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"}
|
|
@@ -123,6 +123,8 @@ const PreviewPage = ()=>{
|
|
|
123
123
|
return ()=>{
|
|
124
124
|
window.removeEventListener('message', handleMessage);
|
|
125
125
|
};
|
|
126
|
+
// Preserve the existing dependency behavior: previewHighlightColors is derived from theme.
|
|
127
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
126
128
|
}, [
|
|
127
129
|
documentId,
|
|
128
130
|
toggleNotification,
|