@strapi/content-manager 0.0.0-experimental.6b93a97ac754785f7894c17263d3b4fd5272454a → 0.0.0-experimental.6cc8ff695218d5a391739344d308dfb3683215c1
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/DragPreviews/RelationDragPreview.js +1 -1
- package/dist/admin/components/DragPreviews/RelationDragPreview.js.map +1 -1
- package/dist/admin/components/DragPreviews/RelationDragPreview.mjs +1 -1
- package/dist/admin/components/DragPreviews/RelationDragPreview.mjs.map +1 -1
- package/dist/admin/components/LeftMenu.js +34 -30
- package/dist/admin/components/LeftMenu.js.map +1 -1
- package/dist/admin/components/LeftMenu.mjs +36 -32
- package/dist/admin/components/LeftMenu.mjs.map +1 -1
- package/dist/admin/content-manager.js.map +1 -1
- package/dist/admin/content-manager.mjs.map +1 -1
- package/dist/admin/features/DocumentContext.js +71 -0
- package/dist/admin/features/DocumentContext.js.map +1 -0
- package/dist/admin/features/DocumentContext.mjs +49 -0
- package/dist/admin/features/DocumentContext.mjs.map +1 -0
- package/dist/admin/features/DocumentRBAC.js +7 -6
- package/dist/admin/features/DocumentRBAC.js.map +1 -1
- package/dist/admin/features/DocumentRBAC.mjs +7 -6
- package/dist/admin/features/DocumentRBAC.mjs.map +1 -1
- package/dist/admin/history/components/VersionInputRenderer.js.map +1 -1
- package/dist/admin/history/components/VersionInputRenderer.mjs.map +1 -1
- package/dist/admin/history/pages/History.js +9 -1
- package/dist/admin/history/pages/History.js.map +1 -1
- package/dist/admin/history/pages/History.mjs +9 -1
- package/dist/admin/history/pages/History.mjs.map +1 -1
- package/dist/admin/hooks/useDocumentActions.js +12 -3
- package/dist/admin/hooks/useDocumentActions.js.map +1 -1
- package/dist/admin/hooks/useDocumentActions.mjs +12 -3
- package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.js +95 -84
- package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.mjs +95 -84
- package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.js +26 -11
- package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.mjs +26 -11
- package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentStatus.js +1 -2
- package/dist/admin/pages/EditView/components/DocumentStatus.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentStatus.mjs +1 -2
- package/dist/admin/pages/EditView/components/DocumentStatus.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +4 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +4 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +5 -3
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +5 -3
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +17 -8
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +17 -8
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +16 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +17 -2
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +460 -0
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +438 -0
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/{Relations.js → Relations/Relations.js} +65 -42
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/{Relations.mjs → Relations/Relations.mjs} +66 -43
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormLayout.js +20 -13
- package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.mjs +20 -13
- package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.js +35 -8
- package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.mjs +18 -10
- package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.js +41 -0
- package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.mjs +42 -1
- package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Relations.js +0 -1
- package/dist/admin/pages/ListView/components/TableCells/Relations.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Relations.mjs +0 -1
- package/dist/admin/pages/ListView/components/TableCells/Relations.mjs.map +1 -1
- package/dist/admin/preview/components/PreviewHeader.js +5 -77
- package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
- package/dist/admin/preview/components/PreviewHeader.mjs +7 -78
- package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
- package/dist/admin/preview/pages/Preview.js +47 -39
- package/dist/admin/preview/pages/Preview.js.map +1 -1
- package/dist/admin/preview/pages/Preview.mjs +48 -40
- package/dist/admin/preview/pages/Preview.mjs.map +1 -1
- package/dist/admin/services/documents.js +16 -0
- package/dist/admin/services/documents.js.map +1 -1
- package/dist/admin/services/documents.mjs +16 -0
- package/dist/admin/services/documents.mjs.map +1 -1
- package/dist/admin/src/content-manager.d.ts +2 -0
- package/dist/admin/src/features/DocumentContext.d.ts +53 -0
- package/dist/admin/src/features/DocumentRBAC.d.ts +3 -2
- package/dist/admin/src/hooks/useDocumentActions.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +8 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/{Relations.d.ts → Relations/Relations.d.ts} +8 -2
- package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +8 -3
- package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +7 -4
- package/dist/admin/src/preview/components/PreviewHeader.d.ts +1 -2
- package/dist/admin/src/preview/pages/Preview.d.ts +0 -2
- package/dist/admin/translations/en.json.js +3 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +3 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/translations/zh-Hans.json.js +2 -1
- package/dist/admin/translations/zh-Hans.json.js.map +1 -1
- package/dist/admin/translations/zh-Hans.json.mjs +2 -1
- package/dist/admin/translations/zh-Hans.json.mjs.map +1 -1
- package/dist/server/src/index.d.ts +1 -0
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/services/data-mapper.d.ts +1 -0
- package/dist/server/src/services/data-mapper.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +1 -0
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/package.json +8 -8
- package/dist/admin/pages/EditView/components/FormInputs/Relations.js.map +0 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations.mjs.map +0 -1
- package/dist/admin/preview/components/PreviewContent.js +0 -25
- package/dist/admin/preview/components/PreviewContent.js.map +0 -1
- package/dist/admin/preview/components/PreviewContent.mjs +0 -23
- package/dist/admin/preview/components/PreviewContent.mjs.map +0 -1
- package/dist/admin/src/preview/components/PreviewContent.d.ts +0 -2
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"FormLayout.mjs","sources":["../../../../../admin/src/pages/EditView/components/FormLayout.tsx"],"sourcesContent":["import { Box, Flex, Grid } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport {
|
1
|
+
{"version":3,"file":"FormLayout.mjs","sources":["../../../../../admin/src/pages/EditView/components/FormLayout.tsx"],"sourcesContent":["import { Box, Flex, Grid } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { EditLayout } from '../../../hooks/useDocumentLayout';\n\nimport { InputRenderer } from './InputRenderer';\n\nimport type { UseDocument } from '../../../hooks/useDocument';\n\nexport const RESPONSIVE_CONTAINER_BREAKPOINTS = {\n sm: '27.5rem', // 440px\n};\n\nexport const ResponsiveGridRoot = styled(Grid.Root)`\n container-type: inline-size;\n`;\n\nexport const ResponsiveGridItem =\n /**\n * TODO:\n * JSDOM cannot handle container queries.\n * This is a temporary workaround so that tests do not fail in the CI when jestdom throws an error\n * for failing to parse the stylesheet.\n */\n process.env.NODE_ENV !== 'test'\n ? styled(Grid.Item)<{ col: number }>`\n grid-column: span 12;\n @container (min-width: ${RESPONSIVE_CONTAINER_BREAKPOINTS.sm}) {\n ${({ col }) => col && `grid-column: span ${col};`}\n }\n `\n : styled(Grid.Item)<{ col: number }>`\n grid-column: span 12;\n `;\n\ninterface FormLayoutProps extends Pick<EditLayout, 'layout'> {\n hasBackground?: boolean;\n model?: string;\n document: ReturnType<UseDocument>;\n}\n\nconst FormLayout = ({ layout, document, hasBackground = true }: FormLayoutProps) => {\n const { formatMessage } = useIntl();\n const model = document.schema?.modelName;\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {layout.map((panel, index) => {\n if (panel.some((row) => row.some((field) => field.type === 'dynamiczone'))) {\n const [row] = panel;\n const [field] = row;\n\n const fieldWithTranslatedLabel = {\n ...field,\n label: formatMessage({\n id: `content-manager.content-types.${model}.${field.name}`,\n defaultMessage: field.label,\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 <InputRenderer {...fieldWithTranslatedLabel} document={document} />\n </Grid.Item>\n </Grid.Root>\n );\n }\n\n return (\n <Box\n key={index}\n {...(hasBackground && {\n padding: 6,\n borderColor: 'neutral150',\n background: 'neutral0',\n hasRadius: true,\n shadow: 'tableShadow',\n })}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {panel.map((row, gridRowIndex) => (\n <ResponsiveGridRoot key={gridRowIndex} gap={4}>\n {row.map(({ size, ...field }) => {\n const fieldWithTranslatedLabel = {\n ...field,\n label: formatMessage({\n id: `content-manager.content-types.${model}.${field.name}`,\n defaultMessage: field.label,\n }),\n };\n return (\n <ResponsiveGridItem\n col={size}\n key={field.name}\n s={12}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <InputRenderer {...fieldWithTranslatedLabel} document={document} />\n </ResponsiveGridItem>\n );\n })}\n </ResponsiveGridRoot>\n ))}\n </Flex>\n </Box>\n );\n })}\n </Flex>\n );\n};\n\nexport { FormLayout, FormLayoutProps };\n"],"names":["RESPONSIVE_CONTAINER_BREAKPOINTS","sm","ResponsiveGridRoot","styled","Grid","Root","ResponsiveGridItem","process","env","NODE_ENV","Item","col","FormLayout","layout","document","hasBackground","formatMessage","useIntl","model","schema","modelName","_jsx","Flex","direction","alignItems","gap","map","panel","index","some","row","field","type","fieldWithTranslatedLabel","label","id","name","defaultMessage","s","xs","InputRenderer","Box","padding","borderColor","background","hasRadius","shadow","gridRowIndex","size"],"mappings":"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"}
|
@@ -5,6 +5,7 @@ var React = require('react');
|
|
5
5
|
var strapiAdmin = require('@strapi/admin/strapi-admin');
|
6
6
|
var reactIntl = require('react-intl');
|
7
7
|
var collections = require('../../../constants/collections.js');
|
8
|
+
var DocumentContext = require('../../../features/DocumentContext.js');
|
8
9
|
var DocumentRBAC = require('../../../features/DocumentRBAC.js');
|
9
10
|
var useDocument = require('../../../hooks/useDocument.js');
|
10
11
|
var useDocumentLayout = require('../../../hooks/useDocumentLayout.js');
|
@@ -13,10 +14,29 @@ var BlocksInput = require('./FormInputs/BlocksInput/BlocksInput.js');
|
|
13
14
|
var Input = require('./FormInputs/Component/Input.js');
|
14
15
|
var Field = require('./FormInputs/DynamicZone/Field.js');
|
15
16
|
var NotAllowed = require('./FormInputs/NotAllowed.js');
|
16
|
-
var Relations = require('./FormInputs/Relations.js');
|
17
|
+
var Relations = require('./FormInputs/Relations/Relations.js');
|
17
18
|
var UID = require('./FormInputs/UID.js');
|
18
19
|
var Field$1 = require('./FormInputs/Wysiwyg/Field.js');
|
19
20
|
|
21
|
+
function _interopNamespaceDefault(e) {
|
22
|
+
var n = Object.create(null);
|
23
|
+
if (e) {
|
24
|
+
Object.keys(e).forEach(function (k) {
|
25
|
+
if (k !== 'default') {
|
26
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
27
|
+
Object.defineProperty(n, k, d.get ? d : {
|
28
|
+
enumerable: true,
|
29
|
+
get: function () { return e[k]; }
|
30
|
+
});
|
31
|
+
}
|
32
|
+
});
|
33
|
+
}
|
34
|
+
n.default = e;
|
35
|
+
return Object.freeze(n);
|
36
|
+
}
|
37
|
+
|
38
|
+
var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
39
|
+
|
20
40
|
/**
|
21
41
|
* @internal
|
22
42
|
*
|
@@ -24,17 +44,25 @@ var Field$1 = require('./FormInputs/Wysiwyg/Field.js');
|
|
24
44
|
* specifically to be used in the EditView of the content-manager this understands
|
25
45
|
* the complete EditFieldLayout and will handle RBAC conditions and rendering CM specific
|
26
46
|
* components such as Blocks / Relations.
|
27
|
-
*/ const InputRenderer = ({ visible, hint: providedHint, ...props })=>{
|
28
|
-
const {
|
29
|
-
const
|
47
|
+
*/ const InputRenderer = ({ visible, hint: providedHint, document, ...props })=>{
|
48
|
+
const { model: rootModel } = useDocument.useDoc();
|
49
|
+
const rootDocumentMeta = DocumentContext.useDocumentContext('DynamicComponent', (state)=>state.rootDocumentMeta);
|
50
|
+
const { edit: { components: rootComponents } } = useDocumentLayout.useDocumentLayout(rootDocumentMeta.model);
|
51
|
+
const { edit: { components: relatedComponents } } = useDocumentLayout.useDocumentLayout(document.schema?.uid ?? rootModel);
|
52
|
+
const components = {
|
53
|
+
...rootComponents,
|
54
|
+
...relatedComponents
|
55
|
+
};
|
56
|
+
const collectionType = document.schema?.kind === 'collectionType' ? 'collection-types' : 'single-types';
|
30
57
|
const isInDynamicZone = Field.useDynamicZone('isInDynamicZone', (state)=>state.isInDynamicZone);
|
58
|
+
const isFormDisabled = strapiAdmin.useForm('InputRenderer', (state)=>state.disabled);
|
31
59
|
const canCreateFields = DocumentRBAC.useDocumentRBAC('InputRenderer', (rbac)=>rbac.canCreateFields);
|
32
60
|
const canReadFields = DocumentRBAC.useDocumentRBAC('InputRenderer', (rbac)=>rbac.canReadFields);
|
33
61
|
const canUpdateFields = DocumentRBAC.useDocumentRBAC('InputRenderer', (rbac)=>rbac.canUpdateFields);
|
34
62
|
const canUserAction = DocumentRBAC.useDocumentRBAC('InputRenderer', (rbac)=>rbac.canUserAction);
|
35
|
-
let idToCheck =
|
63
|
+
let idToCheck = document.document?.documentId;
|
36
64
|
if (collectionType === collections.SINGLE_TYPES) {
|
37
|
-
idToCheck = document?.documentId;
|
65
|
+
idToCheck = document?.document?.documentId;
|
38
66
|
}
|
39
67
|
const editableFields = idToCheck ? canUpdateFields : canCreateFields;
|
40
68
|
const readableFields = idToCheck ? canReadFields : canCreateFields;
|
@@ -48,7 +76,6 @@ var Field$1 = require('./FormInputs/Wysiwyg/Field.js');
|
|
48
76
|
props.attribute.customField
|
49
77
|
] : undefined);
|
50
78
|
const hint = useFieldHint(providedHint, props.attribute);
|
51
|
-
const { edit: { components } } = useDocumentLayout.useDocLayout();
|
52
79
|
// We pass field in case of Custom Fields to keep backward compatibility
|
53
80
|
const field = strapiAdmin.useField(props.name);
|
54
81
|
if (!visible) {
|
@@ -222,7 +249,7 @@ const getMinMax = (attribute)=>{
|
|
222
249
|
};
|
223
250
|
}
|
224
251
|
};
|
225
|
-
const MemoizedInputRenderer = /*#__PURE__*/
|
252
|
+
const MemoizedInputRenderer = /*#__PURE__*/ React__namespace.memo(InputRenderer);
|
226
253
|
|
227
254
|
exports.InputRenderer = MemoizedInputRenderer;
|
228
255
|
exports.useFieldHint = useFieldHint;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"InputRenderer.js","sources":["../../../../../admin/src/pages/EditView/components/InputRenderer.tsx"],"sourcesContent":["import { ReactNode, memo } from 'react';\n\nimport {\n useStrapiApp,\n useForm,\n InputRenderer as FormInputRenderer,\n useField,\n} from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\n\nimport { SINGLE_TYPES } from '../../../constants/collections';\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { useDoc } from '../../../hooks/useDocument';\nimport { useDocLayout } from '../../../hooks/useDocumentLayout';\nimport { useLazyComponents } from '../../../hooks/useLazyComponents';\n\nimport { BlocksInput } from './FormInputs/BlocksInput/BlocksInput';\nimport { ComponentInput } from './FormInputs/Component/Input';\nimport { DynamicZone, useDynamicZone } from './FormInputs/DynamicZone/Field';\nimport { NotAllowedInput } from './FormInputs/NotAllowed';\nimport { RelationsInput } from './FormInputs/Relations';\nimport { UIDInput } from './FormInputs/UID';\nimport { Wysiwyg } from './FormInputs/Wysiwyg/Field';\n\nimport type { EditFieldLayout } from '../../../hooks/useDocumentLayout';\nimport type { Schema } from '@strapi/types';\nimport type { DistributiveOmit } from 'react-redux';\n\ntype InputRendererProps = DistributiveOmit<EditFieldLayout, 'size'>;\n/**\n * @internal\n *\n * @description An abstraction around the regular form input renderer designed\n * specifically to be used in the EditView of the content-manager this understands\n * the complete EditFieldLayout and will handle RBAC conditions and rendering CM specific\n * components such as Blocks / Relations.\n */\nconst InputRenderer = ({ visible, hint: providedHint, ...props }: InputRendererProps) => {\n const { id, document, collectionType } = useDoc();\n const isFormDisabled = useForm('InputRenderer', (state) => state.disabled);\n\n const isInDynamicZone = useDynamicZone('isInDynamicZone', (state) => state.isInDynamicZone);\n\n const canCreateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canCreateFields);\n const canReadFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canReadFields);\n const canUpdateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUpdateFields);\n const canUserAction = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUserAction);\n\n let idToCheck = id;\n if (collectionType === SINGLE_TYPES) {\n idToCheck = document?.documentId;\n }\n\n const editableFields = idToCheck ? canUpdateFields : canCreateFields;\n const readableFields = idToCheck ? canReadFields : canCreateFields;\n\n /**\n * Component fields are always readable and editable,\n * however the fields within them may not be.\n */\n const canUserReadField = canUserAction(props.name, readableFields, props.type);\n const canUserEditField = canUserAction(props.name, editableFields, props.type);\n\n const fields = useStrapiApp('InputRenderer', (app) => app.fields);\n const { lazyComponentStore } = useLazyComponents(\n attributeHasCustomFieldProperty(props.attribute) ? [props.attribute.customField] : undefined\n );\n\n const hint = useFieldHint(providedHint, props.attribute);\n const {\n edit: { components },\n } = useDocLayout();\n\n // We pass field in case of Custom Fields to keep backward compatibility\n const field = useField(props.name);\n\n if (!visible) {\n return null;\n }\n\n /**\n * If the user can't read the field then we don't want to ever render it.\n */\n if (!canUserReadField && !isInDynamicZone) {\n return <NotAllowedInput hint={hint} {...props} />;\n }\n\n const fieldIsDisabled =\n (!canUserEditField && !isInDynamicZone) || props.disabled || isFormDisabled;\n\n /**\n * Because a custom field has a unique prop but the type could be confused with either\n * the useField hook or the type of the field we need to handle it separately and first.\n */\n if (attributeHasCustomFieldProperty(props.attribute)) {\n const CustomInput = lazyComponentStore[props.attribute.customField];\n\n if (CustomInput) {\n // @ts-expect-error – TODO: fix this type error in the useLazyComponents hook.\n return <CustomInput {...props} {...field} hint={hint} disabled={fieldIsDisabled} />;\n }\n\n return (\n <FormInputRenderer\n {...props}\n hint={hint}\n // @ts-expect-error – this workaround lets us display that the custom field is missing.\n type={props.attribute.customField}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n /**\n * This is where we handle ONLY the fields from the `useLibrary` hook.\n */\n const addedInputTypes = Object.keys(fields);\n if (!attributeHasCustomFieldProperty(props.attribute) && addedInputTypes.includes(props.type)) {\n const CustomInput = fields[props.type];\n // @ts-expect-error – TODO: fix this type error in the useLibrary hook.\n return <CustomInput {...props} hint={hint} disabled={fieldIsDisabled} />;\n }\n\n /**\n * These include the content-manager specific fields, failing that we fall back\n * to the more generic form input renderer.\n */\n switch (props.type) {\n case 'blocks':\n return <BlocksInput {...props} hint={hint} type={props.type} disabled={fieldIsDisabled} />;\n case 'component':\n return (\n <ComponentInput\n {...props}\n hint={hint}\n layout={components[props.attribute.component].layout}\n disabled={fieldIsDisabled}\n >\n {(inputProps) => <InputRenderer {...inputProps} />}\n </ComponentInput>\n );\n case 'dynamiczone':\n return <DynamicZone {...props} hint={hint} disabled={fieldIsDisabled} />;\n case 'relation':\n return <RelationsInput {...props} hint={hint} disabled={fieldIsDisabled} />;\n case 'richtext':\n return <Wysiwyg {...props} hint={hint} type={props.type} disabled={fieldIsDisabled} />;\n case 'uid':\n return <UIDInput {...props} hint={hint} type={props.type} disabled={fieldIsDisabled} />;\n /**\n * Enumerations are a special case because they require options.\n */\n case 'enumeration':\n return (\n <FormInputRenderer\n {...props}\n hint={hint}\n options={props.attribute.enum.map((value) => ({ value }))}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n default:\n // These props are not needed for the generic form input renderer.\n const { unique: _unique, mainField: _mainField, ...restProps } = props;\n return (\n <FormInputRenderer\n {...restProps}\n hint={hint}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n }\n};\n\nconst attributeHasCustomFieldProperty = (\n attribute: Schema.Attribute.AnyAttribute\n): attribute is Schema.Attribute.AnyAttribute & Schema.Attribute.CustomField<string> =>\n 'customField' in attribute && typeof attribute.customField === 'string';\n\nconst useFieldHint = (hint: ReactNode = undefined, attribute: Schema.Attribute.AnyAttribute) => {\n const { formatMessage } = useIntl();\n\n const { maximum, minimum } = getMinMax(attribute);\n\n if (!maximum && !minimum) {\n return hint;\n }\n\n const units = !['biginteger', 'integer', 'number', 'dynamiczone', 'component'].includes(\n attribute.type\n )\n ? formatMessage(\n {\n id: 'content-manager.form.Input.hint.character.unit',\n defaultMessage: '{maxValue, plural, one { character} other { characters}}',\n },\n {\n maxValue: Math.max(minimum || 0, maximum || 0),\n }\n )\n : null;\n\n const hasMinAndMax = typeof minimum === 'number' && typeof maximum === 'number';\n\n return formatMessage(\n {\n id: 'content-manager.form.Input.hint.text',\n defaultMessage:\n '{min, select, undefined {} other {min. {min}}}{divider}{max, select, undefined {} other {max. {max}}}{unit}{br}{description}',\n },\n {\n min: minimum,\n max: maximum,\n description: hint,\n unit: units,\n divider: hasMinAndMax\n ? formatMessage({\n id: 'content-manager.form.Input.hint.minMaxDivider',\n defaultMessage: ' / ',\n })\n : null,\n br: <br />,\n }\n );\n};\n\nconst getMinMax = (attribute: Schema.Attribute.AnyAttribute) => {\n if ('min' in attribute || 'max' in attribute) {\n return {\n maximum: !Number.isNaN(Number(attribute.max)) ? Number(attribute.max) : undefined,\n minimum: !Number.isNaN(Number(attribute.min)) ? Number(attribute.min) : undefined,\n };\n } else if ('maxLength' in attribute || 'minLength' in attribute) {\n return { maximum: attribute.maxLength, minimum: attribute.minLength };\n } else {\n return { maximum: undefined, minimum: undefined };\n }\n};\n\nconst MemoizedInputRenderer = memo(InputRenderer);\n\nexport type { InputRendererProps };\nexport { MemoizedInputRenderer as InputRenderer, useFieldHint };\n"],"names":["InputRenderer","visible","hint","providedHint","props","id","document","collectionType","useDoc","isFormDisabled","useForm","state","disabled","isInDynamicZone","useDynamicZone","canCreateFields","useDocumentRBAC","rbac","canReadFields","canUpdateFields","canUserAction","idToCheck","SINGLE_TYPES","documentId","editableFields","readableFields","canUserReadField","name","type","canUserEditField","fields","useStrapiApp","app","lazyComponentStore","useLazyComponents","attributeHasCustomFieldProperty","attribute","customField","undefined","useFieldHint","edit","components","useDocLayout","field","useField","_jsx","NotAllowedInput","fieldIsDisabled","CustomInput","FormInputRenderer","addedInputTypes","Object","keys","includes","BlocksInput","ComponentInput","layout","component","inputProps","DynamicZone","RelationsInput","Wysiwyg","UIDInput","options","enum","map","value","unique","_unique","mainField","_mainField","restProps","formatMessage","useIntl","maximum","minimum","getMinMax","units","defaultMessage","maxValue","Math","max","hasMinAndMax","min","description","unit","divider","br","Number","isNaN","maxLength","minLength","MemoizedInputRenderer","memo"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"InputRenderer.js","sources":["../../../../../admin/src/pages/EditView/components/InputRenderer.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useStrapiApp,\n useForm,\n InputRenderer as FormInputRenderer,\n useField,\n} from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\n\nimport { SINGLE_TYPES } from '../../../constants/collections';\nimport { useDocumentContext } from '../../../features/DocumentContext';\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { useDoc, UseDocument } from '../../../hooks/useDocument';\nimport { useDocumentLayout } from '../../../hooks/useDocumentLayout';\nimport { useLazyComponents } from '../../../hooks/useLazyComponents';\n\nimport { BlocksInput } from './FormInputs/BlocksInput/BlocksInput';\nimport { ComponentInput } from './FormInputs/Component/Input';\nimport { DynamicZone, useDynamicZone } from './FormInputs/DynamicZone/Field';\nimport { NotAllowedInput } from './FormInputs/NotAllowed';\nimport { RelationsInput } from './FormInputs/Relations/Relations';\nimport { UIDInput } from './FormInputs/UID';\nimport { Wysiwyg } from './FormInputs/Wysiwyg/Field';\n\nimport type { EditFieldLayout } from '../../../hooks/useDocumentLayout';\nimport type { Schema } from '@strapi/types';\nimport type { DistributiveOmit } from 'react-redux';\n\ntype InputRendererProps = DistributiveOmit<EditFieldLayout, 'size'> & {\n document: ReturnType<UseDocument>;\n};\n\n/**\n * @internal\n *\n * @description An abstraction around the regular form input renderer designed\n * specifically to be used in the EditView of the content-manager this understands\n * the complete EditFieldLayout and will handle RBAC conditions and rendering CM specific\n * components such as Blocks / Relations.\n */\nconst InputRenderer = ({ visible, hint: providedHint, document, ...props }: InputRendererProps) => {\n const { model: rootModel } = useDoc();\n const rootDocumentMeta = useDocumentContext(\n 'DynamicComponent',\n (state) => state.rootDocumentMeta\n );\n const {\n edit: { components: rootComponents },\n } = useDocumentLayout(rootDocumentMeta.model);\n const {\n edit: { components: relatedComponents },\n } = useDocumentLayout(document.schema?.uid ?? rootModel);\n const components = { ...rootComponents, ...relatedComponents };\n\n const collectionType =\n document.schema?.kind === 'collectionType' ? 'collection-types' : 'single-types';\n\n const isInDynamicZone = useDynamicZone('isInDynamicZone', (state) => state.isInDynamicZone);\n\n const isFormDisabled = useForm('InputRenderer', (state) => state.disabled);\n const canCreateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canCreateFields);\n const canReadFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canReadFields);\n const canUpdateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUpdateFields);\n const canUserAction = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUserAction);\n\n let idToCheck = document.document?.documentId;\n if (collectionType === SINGLE_TYPES) {\n idToCheck = document?.document?.documentId;\n }\n\n const editableFields = idToCheck ? canUpdateFields : canCreateFields;\n const readableFields = idToCheck ? canReadFields : canCreateFields;\n\n /**\n * Component fields are always readable and editable,\n * however the fields within them may not be.\n */\n const canUserReadField = canUserAction(props.name, readableFields, props.type);\n const canUserEditField = canUserAction(props.name, editableFields, props.type);\n\n const fields = useStrapiApp('InputRenderer', (app) => app.fields);\n const { lazyComponentStore } = useLazyComponents(\n attributeHasCustomFieldProperty(props.attribute) ? [props.attribute.customField] : undefined\n );\n\n const hint = useFieldHint(providedHint, props.attribute);\n\n // We pass field in case of Custom Fields to keep backward compatibility\n const field = useField(props.name);\n\n if (!visible) {\n return null;\n }\n\n /**\n * If the user can't read the field then we don't want to ever render it.\n */\n if (!canUserReadField && !isInDynamicZone) {\n return <NotAllowedInput hint={hint} {...props} />;\n }\n\n const fieldIsDisabled =\n (!canUserEditField && !isInDynamicZone) || props.disabled || isFormDisabled;\n\n /**\n * Because a custom field has a unique prop but the type could be confused with either\n * the useField hook or the type of the field we need to handle it separately and first.\n */\n if (attributeHasCustomFieldProperty(props.attribute)) {\n const CustomInput = lazyComponentStore[props.attribute.customField];\n\n if (CustomInput) {\n // @ts-expect-error – TODO: fix this type error in the useLazyComponents hook.\n return <CustomInput {...props} {...field} hint={hint} disabled={fieldIsDisabled} />;\n }\n\n return (\n <FormInputRenderer\n {...props}\n hint={hint}\n // @ts-expect-error – this workaround lets us display that the custom field is missing.\n type={props.attribute.customField}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n /**\n * This is where we handle ONLY the fields from the `useLibrary` hook.\n */\n const addedInputTypes = Object.keys(fields);\n if (!attributeHasCustomFieldProperty(props.attribute) && addedInputTypes.includes(props.type)) {\n const CustomInput = fields[props.type];\n // @ts-expect-error – TODO: fix this type error in the useLibrary hook.\n return <CustomInput {...props} hint={hint} disabled={fieldIsDisabled} />;\n }\n\n /**\n * These include the content-manager specific fields, failing that we fall back\n * to the more generic form input renderer.\n */\n switch (props.type) {\n case 'blocks':\n return <BlocksInput {...props} hint={hint} type={props.type} disabled={fieldIsDisabled} />;\n case 'component':\n return (\n <ComponentInput\n {...props}\n hint={hint}\n layout={components[props.attribute.component].layout}\n disabled={fieldIsDisabled}\n >\n {(inputProps) => <InputRenderer {...inputProps} />}\n </ComponentInput>\n );\n case 'dynamiczone':\n return <DynamicZone {...props} hint={hint} disabled={fieldIsDisabled} />;\n case 'relation':\n return <RelationsInput {...props} hint={hint} disabled={fieldIsDisabled} />;\n case 'richtext':\n return <Wysiwyg {...props} hint={hint} type={props.type} disabled={fieldIsDisabled} />;\n case 'uid':\n return <UIDInput {...props} hint={hint} type={props.type} disabled={fieldIsDisabled} />;\n /**\n * Enumerations are a special case because they require options.\n */\n case 'enumeration':\n return (\n <FormInputRenderer\n {...props}\n hint={hint}\n options={props.attribute.enum.map((value) => ({ value }))}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n default:\n // These props are not needed for the generic form input renderer.\n const { unique: _unique, mainField: _mainField, ...restProps } = props;\n return (\n <FormInputRenderer\n {...restProps}\n hint={hint}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n }\n};\n\nconst attributeHasCustomFieldProperty = (\n attribute: Schema.Attribute.AnyAttribute\n): attribute is Schema.Attribute.AnyAttribute & Schema.Attribute.CustomField<string> =>\n 'customField' in attribute && typeof attribute.customField === 'string';\n\nconst useFieldHint = (\n hint: React.ReactNode = undefined,\n attribute: Schema.Attribute.AnyAttribute\n) => {\n const { formatMessage } = useIntl();\n\n const { maximum, minimum } = getMinMax(attribute);\n\n if (!maximum && !minimum) {\n return hint;\n }\n\n const units = !['biginteger', 'integer', 'number', 'dynamiczone', 'component'].includes(\n attribute.type\n )\n ? formatMessage(\n {\n id: 'content-manager.form.Input.hint.character.unit',\n defaultMessage: '{maxValue, plural, one { character} other { characters}}',\n },\n {\n maxValue: Math.max(minimum || 0, maximum || 0),\n }\n )\n : null;\n\n const hasMinAndMax = typeof minimum === 'number' && typeof maximum === 'number';\n\n return formatMessage(\n {\n id: 'content-manager.form.Input.hint.text',\n defaultMessage:\n '{min, select, undefined {} other {min. {min}}}{divider}{max, select, undefined {} other {max. {max}}}{unit}{br}{description}',\n },\n {\n min: minimum,\n max: maximum,\n description: hint,\n unit: units,\n divider: hasMinAndMax\n ? formatMessage({\n id: 'content-manager.form.Input.hint.minMaxDivider',\n defaultMessage: ' / ',\n })\n : null,\n br: <br />,\n }\n );\n};\n\nconst getMinMax = (attribute: Schema.Attribute.AnyAttribute) => {\n if ('min' in attribute || 'max' in attribute) {\n return {\n maximum: !Number.isNaN(Number(attribute.max)) ? Number(attribute.max) : undefined,\n minimum: !Number.isNaN(Number(attribute.min)) ? Number(attribute.min) : undefined,\n };\n } else if ('maxLength' in attribute || 'minLength' in attribute) {\n return { maximum: attribute.maxLength, minimum: attribute.minLength };\n } else {\n return { maximum: undefined, minimum: undefined };\n }\n};\n\nconst MemoizedInputRenderer = React.memo(InputRenderer);\n\nexport type { InputRendererProps };\nexport { MemoizedInputRenderer as InputRenderer, useFieldHint };\n"],"names":["InputRenderer","visible","hint","providedHint","document","props","model","rootModel","useDoc","rootDocumentMeta","useDocumentContext","state","edit","components","rootComponents","useDocumentLayout","relatedComponents","schema","uid","collectionType","kind","isInDynamicZone","useDynamicZone","isFormDisabled","useForm","disabled","canCreateFields","useDocumentRBAC","rbac","canReadFields","canUpdateFields","canUserAction","idToCheck","documentId","SINGLE_TYPES","editableFields","readableFields","canUserReadField","name","type","canUserEditField","fields","useStrapiApp","app","lazyComponentStore","useLazyComponents","attributeHasCustomFieldProperty","attribute","customField","undefined","useFieldHint","field","useField","_jsx","NotAllowedInput","fieldIsDisabled","CustomInput","FormInputRenderer","addedInputTypes","Object","keys","includes","BlocksInput","ComponentInput","layout","component","inputProps","DynamicZone","RelationsInput","Wysiwyg","UIDInput","options","enum","map","value","unique","_unique","mainField","_mainField","restProps","formatMessage","useIntl","maximum","minimum","getMinMax","units","id","defaultMessage","maxValue","Math","max","hasMinAndMax","min","description","unit","divider","br","Number","isNaN","maxLength","minLength","MemoizedInputRenderer","React","memo"],"mappings":"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"}
|
@@ -1,17 +1,18 @@
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
2
|
-
import
|
2
|
+
import * as React from 'react';
|
3
3
|
import { useForm, useStrapiApp, useField, InputRenderer as InputRenderer$1 } from '@strapi/admin/strapi-admin';
|
4
4
|
import { useIntl } from 'react-intl';
|
5
5
|
import { SINGLE_TYPES } from '../../../constants/collections.mjs';
|
6
|
+
import { useDocumentContext } from '../../../features/DocumentContext.mjs';
|
6
7
|
import { useDocumentRBAC } from '../../../features/DocumentRBAC.mjs';
|
7
8
|
import { useDoc } from '../../../hooks/useDocument.mjs';
|
8
|
-
import {
|
9
|
+
import { useDocumentLayout } from '../../../hooks/useDocumentLayout.mjs';
|
9
10
|
import { useLazyComponents } from '../../../hooks/useLazyComponents.mjs';
|
10
11
|
import { BlocksInput as MemoizedBlocksInput } from './FormInputs/BlocksInput/BlocksInput.mjs';
|
11
12
|
import { ComponentInput as MemoizedComponentInput } from './FormInputs/Component/Input.mjs';
|
12
13
|
import { useDynamicZone, DynamicZone } from './FormInputs/DynamicZone/Field.mjs';
|
13
14
|
import { NotAllowedInput } from './FormInputs/NotAllowed.mjs';
|
14
|
-
import { RelationsInput as MemoizedRelationsField } from './FormInputs/Relations.mjs';
|
15
|
+
import { RelationsInput as MemoizedRelationsField } from './FormInputs/Relations/Relations.mjs';
|
15
16
|
import { UIDInput as MemoizedUIDInput } from './FormInputs/UID.mjs';
|
16
17
|
import { Wysiwyg as MemoizedWysiwyg } from './FormInputs/Wysiwyg/Field.mjs';
|
17
18
|
|
@@ -22,17 +23,25 @@ import { Wysiwyg as MemoizedWysiwyg } from './FormInputs/Wysiwyg/Field.mjs';
|
|
22
23
|
* specifically to be used in the EditView of the content-manager this understands
|
23
24
|
* the complete EditFieldLayout and will handle RBAC conditions and rendering CM specific
|
24
25
|
* components such as Blocks / Relations.
|
25
|
-
*/ const InputRenderer = ({ visible, hint: providedHint, ...props })=>{
|
26
|
-
const {
|
27
|
-
const
|
26
|
+
*/ const InputRenderer = ({ visible, hint: providedHint, document, ...props })=>{
|
27
|
+
const { model: rootModel } = useDoc();
|
28
|
+
const rootDocumentMeta = useDocumentContext('DynamicComponent', (state)=>state.rootDocumentMeta);
|
29
|
+
const { edit: { components: rootComponents } } = useDocumentLayout(rootDocumentMeta.model);
|
30
|
+
const { edit: { components: relatedComponents } } = useDocumentLayout(document.schema?.uid ?? rootModel);
|
31
|
+
const components = {
|
32
|
+
...rootComponents,
|
33
|
+
...relatedComponents
|
34
|
+
};
|
35
|
+
const collectionType = document.schema?.kind === 'collectionType' ? 'collection-types' : 'single-types';
|
28
36
|
const isInDynamicZone = useDynamicZone('isInDynamicZone', (state)=>state.isInDynamicZone);
|
37
|
+
const isFormDisabled = useForm('InputRenderer', (state)=>state.disabled);
|
29
38
|
const canCreateFields = useDocumentRBAC('InputRenderer', (rbac)=>rbac.canCreateFields);
|
30
39
|
const canReadFields = useDocumentRBAC('InputRenderer', (rbac)=>rbac.canReadFields);
|
31
40
|
const canUpdateFields = useDocumentRBAC('InputRenderer', (rbac)=>rbac.canUpdateFields);
|
32
41
|
const canUserAction = useDocumentRBAC('InputRenderer', (rbac)=>rbac.canUserAction);
|
33
|
-
let idToCheck =
|
42
|
+
let idToCheck = document.document?.documentId;
|
34
43
|
if (collectionType === SINGLE_TYPES) {
|
35
|
-
idToCheck = document?.documentId;
|
44
|
+
idToCheck = document?.document?.documentId;
|
36
45
|
}
|
37
46
|
const editableFields = idToCheck ? canUpdateFields : canCreateFields;
|
38
47
|
const readableFields = idToCheck ? canReadFields : canCreateFields;
|
@@ -46,7 +55,6 @@ import { Wysiwyg as MemoizedWysiwyg } from './FormInputs/Wysiwyg/Field.mjs';
|
|
46
55
|
props.attribute.customField
|
47
56
|
] : undefined);
|
48
57
|
const hint = useFieldHint(providedHint, props.attribute);
|
49
|
-
const { edit: { components } } = useDocLayout();
|
50
58
|
// We pass field in case of Custom Fields to keep backward compatibility
|
51
59
|
const field = useField(props.name);
|
52
60
|
if (!visible) {
|
@@ -220,7 +228,7 @@ const getMinMax = (attribute)=>{
|
|
220
228
|
};
|
221
229
|
}
|
222
230
|
};
|
223
|
-
const MemoizedInputRenderer = /*#__PURE__*/ memo(InputRenderer);
|
231
|
+
const MemoizedInputRenderer = /*#__PURE__*/ React.memo(InputRenderer);
|
224
232
|
|
225
233
|
export { MemoizedInputRenderer as InputRenderer, useFieldHint };
|
226
234
|
//# sourceMappingURL=InputRenderer.mjs.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"InputRenderer.mjs","sources":["../../../../../admin/src/pages/EditView/components/InputRenderer.tsx"],"sourcesContent":["import { ReactNode, memo } from 'react';\n\nimport {\n useStrapiApp,\n useForm,\n InputRenderer as FormInputRenderer,\n useField,\n} from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\n\nimport { SINGLE_TYPES } from '../../../constants/collections';\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { useDoc } from '../../../hooks/useDocument';\nimport { useDocLayout } from '../../../hooks/useDocumentLayout';\nimport { useLazyComponents } from '../../../hooks/useLazyComponents';\n\nimport { BlocksInput } from './FormInputs/BlocksInput/BlocksInput';\nimport { ComponentInput } from './FormInputs/Component/Input';\nimport { DynamicZone, useDynamicZone } from './FormInputs/DynamicZone/Field';\nimport { NotAllowedInput } from './FormInputs/NotAllowed';\nimport { RelationsInput } from './FormInputs/Relations';\nimport { UIDInput } from './FormInputs/UID';\nimport { Wysiwyg } from './FormInputs/Wysiwyg/Field';\n\nimport type { EditFieldLayout } from '../../../hooks/useDocumentLayout';\nimport type { Schema } from '@strapi/types';\nimport type { DistributiveOmit } from 'react-redux';\n\ntype InputRendererProps = DistributiveOmit<EditFieldLayout, 'size'>;\n/**\n * @internal\n *\n * @description An abstraction around the regular form input renderer designed\n * specifically to be used in the EditView of the content-manager this understands\n * the complete EditFieldLayout and will handle RBAC conditions and rendering CM specific\n * components such as Blocks / Relations.\n */\nconst InputRenderer = ({ visible, hint: providedHint, ...props }: InputRendererProps) => {\n const { id, document, collectionType } = useDoc();\n const isFormDisabled = useForm('InputRenderer', (state) => state.disabled);\n\n const isInDynamicZone = useDynamicZone('isInDynamicZone', (state) => state.isInDynamicZone);\n\n const canCreateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canCreateFields);\n const canReadFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canReadFields);\n const canUpdateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUpdateFields);\n const canUserAction = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUserAction);\n\n let idToCheck = id;\n if (collectionType === SINGLE_TYPES) {\n idToCheck = document?.documentId;\n }\n\n const editableFields = idToCheck ? canUpdateFields : canCreateFields;\n const readableFields = idToCheck ? canReadFields : canCreateFields;\n\n /**\n * Component fields are always readable and editable,\n * however the fields within them may not be.\n */\n const canUserReadField = canUserAction(props.name, readableFields, props.type);\n const canUserEditField = canUserAction(props.name, editableFields, props.type);\n\n const fields = useStrapiApp('InputRenderer', (app) => app.fields);\n const { lazyComponentStore } = useLazyComponents(\n attributeHasCustomFieldProperty(props.attribute) ? [props.attribute.customField] : undefined\n );\n\n const hint = useFieldHint(providedHint, props.attribute);\n const {\n edit: { components },\n } = useDocLayout();\n\n // We pass field in case of Custom Fields to keep backward compatibility\n const field = useField(props.name);\n\n if (!visible) {\n return null;\n }\n\n /**\n * If the user can't read the field then we don't want to ever render it.\n */\n if (!canUserReadField && !isInDynamicZone) {\n return <NotAllowedInput hint={hint} {...props} />;\n }\n\n const fieldIsDisabled =\n (!canUserEditField && !isInDynamicZone) || props.disabled || isFormDisabled;\n\n /**\n * Because a custom field has a unique prop but the type could be confused with either\n * the useField hook or the type of the field we need to handle it separately and first.\n */\n if (attributeHasCustomFieldProperty(props.attribute)) {\n const CustomInput = lazyComponentStore[props.attribute.customField];\n\n if (CustomInput) {\n // @ts-expect-error – TODO: fix this type error in the useLazyComponents hook.\n return <CustomInput {...props} {...field} hint={hint} disabled={fieldIsDisabled} />;\n }\n\n return (\n <FormInputRenderer\n {...props}\n hint={hint}\n // @ts-expect-error – this workaround lets us display that the custom field is missing.\n type={props.attribute.customField}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n /**\n * This is where we handle ONLY the fields from the `useLibrary` hook.\n */\n const addedInputTypes = Object.keys(fields);\n if (!attributeHasCustomFieldProperty(props.attribute) && addedInputTypes.includes(props.type)) {\n const CustomInput = fields[props.type];\n // @ts-expect-error – TODO: fix this type error in the useLibrary hook.\n return <CustomInput {...props} hint={hint} disabled={fieldIsDisabled} />;\n }\n\n /**\n * These include the content-manager specific fields, failing that we fall back\n * to the more generic form input renderer.\n */\n switch (props.type) {\n case 'blocks':\n return <BlocksInput {...props} hint={hint} type={props.type} disabled={fieldIsDisabled} />;\n case 'component':\n return (\n <ComponentInput\n {...props}\n hint={hint}\n layout={components[props.attribute.component].layout}\n disabled={fieldIsDisabled}\n >\n {(inputProps) => <InputRenderer {...inputProps} />}\n </ComponentInput>\n );\n case 'dynamiczone':\n return <DynamicZone {...props} hint={hint} disabled={fieldIsDisabled} />;\n case 'relation':\n return <RelationsInput {...props} hint={hint} disabled={fieldIsDisabled} />;\n case 'richtext':\n return <Wysiwyg {...props} hint={hint} type={props.type} disabled={fieldIsDisabled} />;\n case 'uid':\n return <UIDInput {...props} hint={hint} type={props.type} disabled={fieldIsDisabled} />;\n /**\n * Enumerations are a special case because they require options.\n */\n case 'enumeration':\n return (\n <FormInputRenderer\n {...props}\n hint={hint}\n options={props.attribute.enum.map((value) => ({ value }))}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n default:\n // These props are not needed for the generic form input renderer.\n const { unique: _unique, mainField: _mainField, ...restProps } = props;\n return (\n <FormInputRenderer\n {...restProps}\n hint={hint}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n }\n};\n\nconst attributeHasCustomFieldProperty = (\n attribute: Schema.Attribute.AnyAttribute\n): attribute is Schema.Attribute.AnyAttribute & Schema.Attribute.CustomField<string> =>\n 'customField' in attribute && typeof attribute.customField === 'string';\n\nconst useFieldHint = (hint: ReactNode = undefined, attribute: Schema.Attribute.AnyAttribute) => {\n const { formatMessage } = useIntl();\n\n const { maximum, minimum } = getMinMax(attribute);\n\n if (!maximum && !minimum) {\n return hint;\n }\n\n const units = !['biginteger', 'integer', 'number', 'dynamiczone', 'component'].includes(\n attribute.type\n )\n ? formatMessage(\n {\n id: 'content-manager.form.Input.hint.character.unit',\n defaultMessage: '{maxValue, plural, one { character} other { characters}}',\n },\n {\n maxValue: Math.max(minimum || 0, maximum || 0),\n }\n )\n : null;\n\n const hasMinAndMax = typeof minimum === 'number' && typeof maximum === 'number';\n\n return formatMessage(\n {\n id: 'content-manager.form.Input.hint.text',\n defaultMessage:\n '{min, select, undefined {} other {min. {min}}}{divider}{max, select, undefined {} other {max. {max}}}{unit}{br}{description}',\n },\n {\n min: minimum,\n max: maximum,\n description: hint,\n unit: units,\n divider: hasMinAndMax\n ? formatMessage({\n id: 'content-manager.form.Input.hint.minMaxDivider',\n defaultMessage: ' / ',\n })\n : null,\n br: <br />,\n }\n );\n};\n\nconst getMinMax = (attribute: Schema.Attribute.AnyAttribute) => {\n if ('min' in attribute || 'max' in attribute) {\n return {\n maximum: !Number.isNaN(Number(attribute.max)) ? Number(attribute.max) : undefined,\n minimum: !Number.isNaN(Number(attribute.min)) ? Number(attribute.min) : undefined,\n };\n } else if ('maxLength' in attribute || 'minLength' in attribute) {\n return { maximum: attribute.maxLength, minimum: attribute.minLength };\n } else {\n return { maximum: undefined, minimum: undefined };\n }\n};\n\nconst MemoizedInputRenderer = memo(InputRenderer);\n\nexport type { InputRendererProps };\nexport { MemoizedInputRenderer as InputRenderer, useFieldHint };\n"],"names":["InputRenderer","visible","hint","providedHint","props","id","document","collectionType","useDoc","isFormDisabled","useForm","state","disabled","isInDynamicZone","useDynamicZone","canCreateFields","useDocumentRBAC","rbac","canReadFields","canUpdateFields","canUserAction","idToCheck","SINGLE_TYPES","documentId","editableFields","readableFields","canUserReadField","name","type","canUserEditField","fields","useStrapiApp","app","lazyComponentStore","useLazyComponents","attributeHasCustomFieldProperty","attribute","customField","undefined","useFieldHint","edit","components","useDocLayout","field","useField","_jsx","NotAllowedInput","fieldIsDisabled","CustomInput","FormInputRenderer","addedInputTypes","Object","keys","includes","BlocksInput","ComponentInput","layout","component","inputProps","DynamicZone","RelationsInput","Wysiwyg","UIDInput","options","enum","map","value","unique","_unique","mainField","_mainField","restProps","formatMessage","useIntl","maximum","minimum","getMinMax","units","defaultMessage","maxValue","Math","max","hasMinAndMax","min","description","unit","divider","br","Number","isNaN","maxLength","minLength","MemoizedInputRenderer","memo"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"InputRenderer.mjs","sources":["../../../../../admin/src/pages/EditView/components/InputRenderer.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useStrapiApp,\n useForm,\n InputRenderer as FormInputRenderer,\n useField,\n} from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\n\nimport { SINGLE_TYPES } from '../../../constants/collections';\nimport { useDocumentContext } from '../../../features/DocumentContext';\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { useDoc, UseDocument } from '../../../hooks/useDocument';\nimport { useDocumentLayout } from '../../../hooks/useDocumentLayout';\nimport { useLazyComponents } from '../../../hooks/useLazyComponents';\n\nimport { BlocksInput } from './FormInputs/BlocksInput/BlocksInput';\nimport { ComponentInput } from './FormInputs/Component/Input';\nimport { DynamicZone, useDynamicZone } from './FormInputs/DynamicZone/Field';\nimport { NotAllowedInput } from './FormInputs/NotAllowed';\nimport { RelationsInput } from './FormInputs/Relations/Relations';\nimport { UIDInput } from './FormInputs/UID';\nimport { Wysiwyg } from './FormInputs/Wysiwyg/Field';\n\nimport type { EditFieldLayout } from '../../../hooks/useDocumentLayout';\nimport type { Schema } from '@strapi/types';\nimport type { DistributiveOmit } from 'react-redux';\n\ntype InputRendererProps = DistributiveOmit<EditFieldLayout, 'size'> & {\n document: ReturnType<UseDocument>;\n};\n\n/**\n * @internal\n *\n * @description An abstraction around the regular form input renderer designed\n * specifically to be used in the EditView of the content-manager this understands\n * the complete EditFieldLayout and will handle RBAC conditions and rendering CM specific\n * components such as Blocks / Relations.\n */\nconst InputRenderer = ({ visible, hint: providedHint, document, ...props }: InputRendererProps) => {\n const { model: rootModel } = useDoc();\n const rootDocumentMeta = useDocumentContext(\n 'DynamicComponent',\n (state) => state.rootDocumentMeta\n );\n const {\n edit: { components: rootComponents },\n } = useDocumentLayout(rootDocumentMeta.model);\n const {\n edit: { components: relatedComponents },\n } = useDocumentLayout(document.schema?.uid ?? rootModel);\n const components = { ...rootComponents, ...relatedComponents };\n\n const collectionType =\n document.schema?.kind === 'collectionType' ? 'collection-types' : 'single-types';\n\n const isInDynamicZone = useDynamicZone('isInDynamicZone', (state) => state.isInDynamicZone);\n\n const isFormDisabled = useForm('InputRenderer', (state) => state.disabled);\n const canCreateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canCreateFields);\n const canReadFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canReadFields);\n const canUpdateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUpdateFields);\n const canUserAction = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUserAction);\n\n let idToCheck = document.document?.documentId;\n if (collectionType === SINGLE_TYPES) {\n idToCheck = document?.document?.documentId;\n }\n\n const editableFields = idToCheck ? canUpdateFields : canCreateFields;\n const readableFields = idToCheck ? canReadFields : canCreateFields;\n\n /**\n * Component fields are always readable and editable,\n * however the fields within them may not be.\n */\n const canUserReadField = canUserAction(props.name, readableFields, props.type);\n const canUserEditField = canUserAction(props.name, editableFields, props.type);\n\n const fields = useStrapiApp('InputRenderer', (app) => app.fields);\n const { lazyComponentStore } = useLazyComponents(\n attributeHasCustomFieldProperty(props.attribute) ? [props.attribute.customField] : undefined\n );\n\n const hint = useFieldHint(providedHint, props.attribute);\n\n // We pass field in case of Custom Fields to keep backward compatibility\n const field = useField(props.name);\n\n if (!visible) {\n return null;\n }\n\n /**\n * If the user can't read the field then we don't want to ever render it.\n */\n if (!canUserReadField && !isInDynamicZone) {\n return <NotAllowedInput hint={hint} {...props} />;\n }\n\n const fieldIsDisabled =\n (!canUserEditField && !isInDynamicZone) || props.disabled || isFormDisabled;\n\n /**\n * Because a custom field has a unique prop but the type could be confused with either\n * the useField hook or the type of the field we need to handle it separately and first.\n */\n if (attributeHasCustomFieldProperty(props.attribute)) {\n const CustomInput = lazyComponentStore[props.attribute.customField];\n\n if (CustomInput) {\n // @ts-expect-error – TODO: fix this type error in the useLazyComponents hook.\n return <CustomInput {...props} {...field} hint={hint} disabled={fieldIsDisabled} />;\n }\n\n return (\n <FormInputRenderer\n {...props}\n hint={hint}\n // @ts-expect-error – this workaround lets us display that the custom field is missing.\n type={props.attribute.customField}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n /**\n * This is where we handle ONLY the fields from the `useLibrary` hook.\n */\n const addedInputTypes = Object.keys(fields);\n if (!attributeHasCustomFieldProperty(props.attribute) && addedInputTypes.includes(props.type)) {\n const CustomInput = fields[props.type];\n // @ts-expect-error – TODO: fix this type error in the useLibrary hook.\n return <CustomInput {...props} hint={hint} disabled={fieldIsDisabled} />;\n }\n\n /**\n * These include the content-manager specific fields, failing that we fall back\n * to the more generic form input renderer.\n */\n switch (props.type) {\n case 'blocks':\n return <BlocksInput {...props} hint={hint} type={props.type} disabled={fieldIsDisabled} />;\n case 'component':\n return (\n <ComponentInput\n {...props}\n hint={hint}\n layout={components[props.attribute.component].layout}\n disabled={fieldIsDisabled}\n >\n {(inputProps) => <InputRenderer {...inputProps} />}\n </ComponentInput>\n );\n case 'dynamiczone':\n return <DynamicZone {...props} hint={hint} disabled={fieldIsDisabled} />;\n case 'relation':\n return <RelationsInput {...props} hint={hint} disabled={fieldIsDisabled} />;\n case 'richtext':\n return <Wysiwyg {...props} hint={hint} type={props.type} disabled={fieldIsDisabled} />;\n case 'uid':\n return <UIDInput {...props} hint={hint} type={props.type} disabled={fieldIsDisabled} />;\n /**\n * Enumerations are a special case because they require options.\n */\n case 'enumeration':\n return (\n <FormInputRenderer\n {...props}\n hint={hint}\n options={props.attribute.enum.map((value) => ({ value }))}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n default:\n // These props are not needed for the generic form input renderer.\n const { unique: _unique, mainField: _mainField, ...restProps } = props;\n return (\n <FormInputRenderer\n {...restProps}\n hint={hint}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n }\n};\n\nconst attributeHasCustomFieldProperty = (\n attribute: Schema.Attribute.AnyAttribute\n): attribute is Schema.Attribute.AnyAttribute & Schema.Attribute.CustomField<string> =>\n 'customField' in attribute && typeof attribute.customField === 'string';\n\nconst useFieldHint = (\n hint: React.ReactNode = undefined,\n attribute: Schema.Attribute.AnyAttribute\n) => {\n const { formatMessage } = useIntl();\n\n const { maximum, minimum } = getMinMax(attribute);\n\n if (!maximum && !minimum) {\n return hint;\n }\n\n const units = !['biginteger', 'integer', 'number', 'dynamiczone', 'component'].includes(\n attribute.type\n )\n ? formatMessage(\n {\n id: 'content-manager.form.Input.hint.character.unit',\n defaultMessage: '{maxValue, plural, one { character} other { characters}}',\n },\n {\n maxValue: Math.max(minimum || 0, maximum || 0),\n }\n )\n : null;\n\n const hasMinAndMax = typeof minimum === 'number' && typeof maximum === 'number';\n\n return formatMessage(\n {\n id: 'content-manager.form.Input.hint.text',\n defaultMessage:\n '{min, select, undefined {} other {min. {min}}}{divider}{max, select, undefined {} other {max. {max}}}{unit}{br}{description}',\n },\n {\n min: minimum,\n max: maximum,\n description: hint,\n unit: units,\n divider: hasMinAndMax\n ? formatMessage({\n id: 'content-manager.form.Input.hint.minMaxDivider',\n defaultMessage: ' / ',\n })\n : null,\n br: <br />,\n }\n );\n};\n\nconst getMinMax = (attribute: Schema.Attribute.AnyAttribute) => {\n if ('min' in attribute || 'max' in attribute) {\n return {\n maximum: !Number.isNaN(Number(attribute.max)) ? Number(attribute.max) : undefined,\n minimum: !Number.isNaN(Number(attribute.min)) ? Number(attribute.min) : undefined,\n };\n } else if ('maxLength' in attribute || 'minLength' in attribute) {\n return { maximum: attribute.maxLength, minimum: attribute.minLength };\n } else {\n return { maximum: undefined, minimum: undefined };\n }\n};\n\nconst MemoizedInputRenderer = React.memo(InputRenderer);\n\nexport type { InputRendererProps };\nexport { MemoizedInputRenderer as InputRenderer, useFieldHint };\n"],"names":["InputRenderer","visible","hint","providedHint","document","props","model","rootModel","useDoc","rootDocumentMeta","useDocumentContext","state","edit","components","rootComponents","useDocumentLayout","relatedComponents","schema","uid","collectionType","kind","isInDynamicZone","useDynamicZone","isFormDisabled","useForm","disabled","canCreateFields","useDocumentRBAC","rbac","canReadFields","canUpdateFields","canUserAction","idToCheck","documentId","SINGLE_TYPES","editableFields","readableFields","canUserReadField","name","type","canUserEditField","fields","useStrapiApp","app","lazyComponentStore","useLazyComponents","attributeHasCustomFieldProperty","attribute","customField","undefined","useFieldHint","field","useField","_jsx","NotAllowedInput","fieldIsDisabled","CustomInput","FormInputRenderer","addedInputTypes","Object","keys","includes","BlocksInput","ComponentInput","layout","component","inputProps","DynamicZone","RelationsInput","Wysiwyg","UIDInput","options","enum","map","value","unique","_unique","mainField","_mainField","restProps","formatMessage","useIntl","maximum","minimum","getMinMax","units","id","defaultMessage","maxValue","Math","max","hasMinAndMax","min","description","unit","divider","br","Number","isNaN","maxLength","minLength","MemoizedInputRenderer","React","memo"],"mappings":"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"}
|
@@ -5,6 +5,7 @@ var React = require('react');
|
|
5
5
|
var strapiAdmin = require('@strapi/admin/strapi-admin');
|
6
6
|
var designSystem = require('@strapi/design-system');
|
7
7
|
var Icons = require('@strapi/icons');
|
8
|
+
var Symbols = require('@strapi/icons/symbols');
|
8
9
|
var isEqual = require('lodash/isEqual');
|
9
10
|
var qs = require('qs');
|
10
11
|
var reactIntl = require('react-intl');
|
@@ -193,6 +194,46 @@ const ListViewPage = ()=>{
|
|
193
194
|
})
|
194
195
|
});
|
195
196
|
};
|
197
|
+
if (!isFetching && results.length === 0) {
|
198
|
+
return /*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.Page.Main, {
|
199
|
+
children: [
|
200
|
+
/*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.Title, {
|
201
|
+
children: `${contentTypeTitle}`
|
202
|
+
}),
|
203
|
+
/*#__PURE__*/ jsxRuntime.jsx(LayoutsHeaderCustom, {
|
204
|
+
primaryAction: canCreate ? /*#__PURE__*/ jsxRuntime.jsx(CreateButton, {}) : null,
|
205
|
+
subtitle: formatMessage({
|
206
|
+
id: translations.getTranslation('pages.ListView.header-subtitle'),
|
207
|
+
defaultMessage: '{number, plural, =0 {# entries} one {# entry} other {# entries}} found'
|
208
|
+
}, {
|
209
|
+
number: pagination?.total
|
210
|
+
}),
|
211
|
+
title: contentTypeTitle,
|
212
|
+
navigationAction: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.BackButton, {})
|
213
|
+
}),
|
214
|
+
/*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Layouts.Content, {
|
215
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
216
|
+
background: "neutral0",
|
217
|
+
shadow: "filterShadow",
|
218
|
+
hasRadius: true,
|
219
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.EmptyStateLayout, {
|
220
|
+
action: canCreate ? /*#__PURE__*/ jsxRuntime.jsx(CreateButton, {
|
221
|
+
variant: "secondary"
|
222
|
+
}) : null,
|
223
|
+
content: formatMessage({
|
224
|
+
id: translations.getTranslation('pages.ListView.empty-state.content'),
|
225
|
+
defaultMessage: 'No entries found'
|
226
|
+
}),
|
227
|
+
hasRadius: true,
|
228
|
+
icon: /*#__PURE__*/ jsxRuntime.jsx(Symbols.EmptyDocuments, {
|
229
|
+
width: "16rem"
|
230
|
+
})
|
231
|
+
})
|
232
|
+
})
|
233
|
+
})
|
234
|
+
]
|
235
|
+
});
|
236
|
+
}
|
196
237
|
return /*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.Page.Main, {
|
197
238
|
children: [
|
198
239
|
/*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.Title, {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ListViewPage.js","sources":["../../../../admin/src/pages/ListView/ListViewPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Page,\n Pagination,\n SearchInput,\n Table,\n BackButton,\n useNotification,\n useStrapiApp,\n useTracking,\n useAPIErrorHandler,\n useQueryParams,\n useRBAC,\n Layouts,\n useTable,\n} from '@strapi/admin/strapi-admin';\nimport { Button, Flex, Typography, ButtonProps } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport isEqual from 'lodash/isEqual';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useNavigate, Link as ReactRouterLink, useParams } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { InjectionZone } from '../../components/InjectionZone';\nimport { HOOKS } from '../../constants/hooks';\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { DocumentRBAC, useDocumentRBAC } from '../../features/DocumentRBAC';\nimport { useDoc } from '../../hooks/useDocument';\nimport {\n ListFieldLayout,\n convertListLayoutToFieldLayouts,\n useDocumentLayout,\n} from '../../hooks/useDocumentLayout';\nimport { usePrev } from '../../hooks/usePrev';\nimport { useGetAllDocumentsQuery } from '../../services/documents';\nimport { buildValidParams } from '../../utils/api';\nimport { getTranslation } from '../../utils/translations';\nimport { getDisplayName } from '../../utils/users';\nimport { DocumentStatus } from '../EditView/components/DocumentStatus';\n\nimport { BulkActionsRenderer } from './components/BulkActions/Actions';\nimport { Filters } from './components/Filters';\nimport { TableActions } from './components/TableActions';\nimport { CellContent } from './components/TableCells/CellContent';\nimport { ViewSettingsMenu } from './components/ViewSettingsMenu';\n\nimport type { Modules } from '@strapi/types';\n\nconst { INJECT_COLUMN_IN_TABLE } = HOOKS;\n\n/* -------------------------------------------------------------------------------------------------\n * ListViewPage\n * -----------------------------------------------------------------------------------------------*/\nconst LayoutsHeaderCustom = styled(Layouts.Header)`\n overflow-wrap: anywhere;\n`;\n\nconst ListViewPage = () => {\n const { trackUsage } = useTracking();\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler(getTranslation);\n\n const { collectionType, model, schema } = useDoc();\n const { list } = useDocumentLayout(model);\n\n const [displayedHeaders, setDisplayedHeaders] = React.useState<ListFieldLayout[]>([]);\n\n const listLayout = usePrev(list.layout);\n React.useEffect(() => {\n /**\n * ONLY update the displayedHeaders if the document\n * layout has actually changed in value.\n */\n if (!isEqual(listLayout, list.layout)) {\n setDisplayedHeaders(list.layout);\n }\n }, [list.layout, listLayout]);\n\n const handleSetHeaders = (headers: string[]) => {\n setDisplayedHeaders(\n convertListLayoutToFieldLayouts(headers, schema!.attributes, list.metadatas)\n );\n };\n\n const [{ query }] = useQueryParams<{\n plugins?: Record<string, unknown>;\n page?: string;\n pageSize?: string;\n sort?: string;\n }>({\n page: '1',\n pageSize: list.settings.pageSize.toString(),\n sort: list.settings.defaultSortBy\n ? `${list.settings.defaultSortBy}:${list.settings.defaultSortOrder}`\n : '',\n });\n\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n const { data, error, isFetching } = useGetAllDocumentsQuery({\n model,\n params,\n });\n\n /**\n * If the API returns an error, display a notification\n */\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n const { results = [], pagination } = data ?? {};\n\n React.useEffect(() => {\n if (pagination && pagination.pageCount > 0 && pagination.page > pagination.pageCount) {\n navigate(\n {\n search: stringify({\n ...query,\n page: pagination.pageCount,\n }),\n },\n { replace: true }\n );\n }\n }, [pagination, formatMessage, query, navigate]);\n\n const { canCreate } = useDocumentRBAC('ListViewPage', ({ canCreate }) => ({\n canCreate,\n }));\n\n const runHookWaterfall = useStrapiApp('ListViewPage', ({ runHookWaterfall }) => runHookWaterfall);\n /**\n * Run the waterfall and then inject our additional table headers.\n */\n const tableHeaders = React.useMemo(() => {\n const headers = runHookWaterfall(INJECT_COLUMN_IN_TABLE, {\n displayedHeaders,\n layout: list,\n });\n\n const formattedHeaders = headers.displayedHeaders.map<ListFieldLayout>((header) => {\n /**\n * When the header label is a string, it is an attribute on the current content-type:\n * Use the attribute name value to compute the translation.\n * Otherwise, it should be a translation object coming from a plugin that injects into the table (ie i18n, content-releases, review-workflows):\n * Use the translation object as is.\n */\n const translation =\n typeof header.label === 'string'\n ? {\n id: `content-manager.content-types.${model}.${header.name}`,\n defaultMessage: header.label,\n }\n : header.label;\n\n return {\n ...header,\n label: formatMessage(translation),\n name: `${header.name}${header.mainField?.name ? `.${header.mainField.name}` : ''}`,\n };\n });\n\n if (schema?.options?.draftAndPublish) {\n formattedHeaders.push({\n attribute: {\n type: 'custom',\n },\n name: 'status',\n label: formatMessage({\n id: getTranslation(`containers.list.table-headers.status`),\n defaultMessage: 'status',\n }),\n searchable: false,\n sortable: false,\n } satisfies ListFieldLayout);\n }\n\n return formattedHeaders;\n }, [\n displayedHeaders,\n formatMessage,\n list,\n runHookWaterfall,\n schema?.options?.draftAndPublish,\n model,\n ]);\n\n if (isFetching) {\n return <Page.Loading />;\n }\n\n if (error) {\n return <Page.Error />;\n }\n\n const contentTypeTitle = schema?.info.displayName\n ? formatMessage({ id: schema.info.displayName, defaultMessage: schema.info.displayName })\n : formatMessage({\n id: 'content-manager.containers.untitled',\n defaultMessage: 'Untitled',\n });\n\n const handleRowClick = (id: Modules.Documents.ID) => () => {\n trackUsage('willEditEntryFromList');\n navigate({\n pathname: id.toString(),\n search: stringify({ plugins: query.plugins }),\n });\n };\n\n return (\n <Page.Main>\n <Page.Title>{`${contentTypeTitle}`}</Page.Title>\n <LayoutsHeaderCustom\n primaryAction={canCreate ? <CreateButton /> : null}\n subtitle={formatMessage(\n {\n id: getTranslation('pages.ListView.header-subtitle'),\n defaultMessage:\n '{number, plural, =0 {# entries} one {# entry} other {# entries}} found',\n },\n { number: pagination?.total }\n )}\n title={contentTypeTitle}\n navigationAction={<BackButton />}\n />\n <Layouts.Action\n endActions={\n <>\n <InjectionZone area=\"listView.actions\" />\n <ViewSettingsMenu\n setHeaders={handleSetHeaders}\n resetHeaders={() => setDisplayedHeaders(list.layout)}\n headers={displayedHeaders.map((header) => header.name)}\n />\n </>\n }\n startActions={\n <>\n {list.settings.searchable && (\n <SearchInput\n disabled={results.length === 0}\n label={formatMessage(\n { id: 'app.component.search.label', defaultMessage: 'Search for {target}' },\n { target: contentTypeTitle }\n )}\n placeholder={formatMessage({\n id: 'global.search',\n defaultMessage: 'Search',\n })}\n trackedEvent=\"didSearch\"\n />\n )}\n {list.settings.filterable && schema ? (\n <Filters disabled={results.length === 0} schema={schema} />\n ) : null}\n </>\n }\n />\n <Layouts.Content>\n <Flex gap={4} direction=\"column\" alignItems=\"stretch\">\n <Table.Root rows={results} headers={tableHeaders} isLoading={isFetching}>\n <TableActionsBar />\n <Table.Content>\n <Table.Head>\n <Table.HeaderCheckboxCell />\n {tableHeaders.map((header: ListFieldLayout) => (\n <Table.HeaderCell key={header.name} {...header} />\n ))}\n </Table.Head>\n <Table.Loading />\n <Table.Empty action={canCreate ? <CreateButton variant=\"secondary\" /> : null} />\n <Table.Body>\n {results.map((row) => {\n return (\n <Table.Row\n cursor=\"pointer\"\n key={row.id}\n onClick={handleRowClick(row.documentId)}\n >\n <Table.CheckboxCell id={row.id} />\n {tableHeaders.map(({ cellFormatter, ...header }) => {\n if (header.name === 'status') {\n const { status } = row;\n\n return (\n <Table.Cell key={header.name}>\n <DocumentStatus status={status} maxWidth={'min-content'} />\n </Table.Cell>\n );\n }\n if (['createdBy', 'updatedBy'].includes(header.name.split('.')[0])) {\n // Display the users full name\n // Some entries doesn't have a user assigned as creator/updater (ex: entries created through content API)\n // In this case, we display a dash\n return (\n <Table.Cell key={header.name}>\n <Typography textColor=\"neutral800\">\n {row[header.name.split('.')[0]]\n ? getDisplayName(row[header.name.split('.')[0]])\n : '-'}\n </Typography>\n </Table.Cell>\n );\n }\n if (typeof cellFormatter === 'function') {\n return (\n <Table.Cell key={header.name}>\n {/* @ts-expect-error – TODO: fix this TS error */}\n {cellFormatter(row, header, { collectionType, model })}\n </Table.Cell>\n );\n }\n return (\n <Table.Cell key={header.name}>\n <CellContent\n content={row[header.name.split('.')[0]]}\n rowId={row.documentId}\n {...header}\n />\n </Table.Cell>\n );\n })}\n {/* we stop propagation here to allow the menu to trigger it's events without triggering the row redirect */}\n <ActionsCell onClick={(e) => e.stopPropagation()}>\n <TableActions document={row} />\n </ActionsCell>\n </Table.Row>\n );\n })}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n <Pagination.Root\n {...pagination}\n onPageSizeChange={() => trackUsage('willChangeNumberOfEntriesPerPage')}\n >\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Flex>\n </Layouts.Content>\n </Page.Main>\n );\n};\n\nconst ActionsCell = styled(Table.Cell)`\n display: flex;\n justify-content: flex-end;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * TableActionsBar\n * -----------------------------------------------------------------------------------------------*/\n\nconst TableActionsBar = () => {\n const selectRow = useTable('TableActionsBar', (state) => state.selectRow);\n const [{ query }] = useQueryParams<{ plugins: { i18n: { locale: string } } }>();\n const locale = query?.plugins?.i18n?.locale;\n const prevLocale = usePrev(locale);\n\n // TODO: find a better way to reset the selected rows when the locale changes across all the app\n React.useEffect(() => {\n if (prevLocale !== locale) {\n selectRow([]);\n }\n }, [selectRow, prevLocale, locale]);\n\n return (\n <Table.ActionBar>\n <BulkActionsRenderer />\n </Table.ActionBar>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CreateButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface CreateButtonProps extends Pick<ButtonProps, 'variant'> {}\n\nconst CreateButton = ({ variant }: CreateButtonProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const [{ query }] = useQueryParams<{ plugins: object }>();\n\n return (\n <Button\n variant={variant}\n tag={ReactRouterLink}\n onClick={() => {\n trackUsage('willCreateEntry', { status: 'draft' });\n }}\n startIcon={<Plus />}\n style={{ textDecoration: 'none' }}\n to={{\n pathname: 'create',\n search: stringify({ plugins: query.plugins }),\n }}\n minWidth=\"max-content\"\n marginLeft={2}\n >\n {formatMessage({\n id: getTranslation('HeaderLayout.button.label-add-entry'),\n defaultMessage: 'Create new entry',\n })}\n </Button>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedListViewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedListViewPage = () => {\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 <ListViewPage />\n </DocumentRBAC>\n )}\n </Page.Protect>\n );\n};\n\nexport { ListViewPage, ProtectedListViewPage };\n"],"names":["INJECT_COLUMN_IN_TABLE","HOOKS","LayoutsHeaderCustom","styled","Layouts","Header","ListViewPage","trackUsage","useTracking","navigate","useNavigate","formatMessage","useIntl","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","getTranslation","collectionType","model","schema","useDoc","list","useDocumentLayout","displayedHeaders","setDisplayedHeaders","React","useState","listLayout","usePrev","layout","useEffect","isEqual","handleSetHeaders","headers","convertListLayoutToFieldLayouts","attributes","metadatas","query","useQueryParams","page","pageSize","settings","toString","sort","defaultSortBy","defaultSortOrder","params","useMemo","buildValidParams","data","error","isFetching","useGetAllDocumentsQuery","type","message","results","pagination","pageCount","search","stringify","replace","canCreate","useDocumentRBAC","runHookWaterfall","useStrapiApp","tableHeaders","formattedHeaders","map","header","translation","label","id","name","defaultMessage","mainField","options","draftAndPublish","push","attribute","searchable","sortable","_jsx","Page","Loading","Error","contentTypeTitle","info","displayName","handleRowClick","pathname","plugins","_jsxs","Main","Title","primaryAction","CreateButton","subtitle","number","total","title","navigationAction","BackButton","Action","endActions","_Fragment","InjectionZone","area","ViewSettingsMenu","setHeaders","resetHeaders","startActions","SearchInput","disabled","length","target","placeholder","trackedEvent","filterable","Filters","Content","Flex","gap","direction","alignItems","Table","Root","rows","isLoading","TableActionsBar","Head","HeaderCheckboxCell","HeaderCell","Empty","action","variant","Body","row","Row","cursor","onClick","documentId","CheckboxCell","cellFormatter","status","Cell","DocumentStatus","maxWidth","includes","split","Typography","textColor","getDisplayName","CellContent","content","rowId","ActionsCell","e","stopPropagation","TableActions","document","Pagination","onPageSizeChange","PageSize","Links","selectRow","useTable","state","locale","i18n","prevLocale","ActionBar","BulkActionsRenderer","Button","tag","ReactRouterLink","startIcon","Plus","style","textDecoration","to","minWidth","marginLeft","ProtectedListViewPage","slug","useParams","permissions","useRBAC","PERMISSIONS","subject","Protect","DocumentRBAC"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"ListViewPage.js","sources":["../../../../admin/src/pages/ListView/ListViewPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Page,\n Pagination,\n SearchInput,\n Table,\n BackButton,\n useNotification,\n useStrapiApp,\n useTracking,\n useAPIErrorHandler,\n useQueryParams,\n useRBAC,\n Layouts,\n useTable,\n} from '@strapi/admin/strapi-admin';\nimport {\n Button,\n Flex,\n Typography,\n ButtonProps,\n Box,\n EmptyStateLayout,\n} from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport isEqual from 'lodash/isEqual';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useNavigate, Link as ReactRouterLink, useParams } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { InjectionZone } from '../../components/InjectionZone';\nimport { HOOKS } from '../../constants/hooks';\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { DocumentRBAC, useDocumentRBAC } from '../../features/DocumentRBAC';\nimport { useDoc } from '../../hooks/useDocument';\nimport {\n ListFieldLayout,\n convertListLayoutToFieldLayouts,\n useDocumentLayout,\n} from '../../hooks/useDocumentLayout';\nimport { usePrev } from '../../hooks/usePrev';\nimport { useGetAllDocumentsQuery } from '../../services/documents';\nimport { buildValidParams } from '../../utils/api';\nimport { getTranslation } from '../../utils/translations';\nimport { getDisplayName } from '../../utils/users';\nimport { DocumentStatus } from '../EditView/components/DocumentStatus';\n\nimport { BulkActionsRenderer } from './components/BulkActions/Actions';\nimport { Filters } from './components/Filters';\nimport { TableActions } from './components/TableActions';\nimport { CellContent } from './components/TableCells/CellContent';\nimport { ViewSettingsMenu } from './components/ViewSettingsMenu';\n\nimport type { Modules } from '@strapi/types';\n\nconst { INJECT_COLUMN_IN_TABLE } = HOOKS;\n\n/* -------------------------------------------------------------------------------------------------\n * ListViewPage\n * -----------------------------------------------------------------------------------------------*/\nconst LayoutsHeaderCustom = styled(Layouts.Header)`\n overflow-wrap: anywhere;\n`;\n\nconst ListViewPage = () => {\n const { trackUsage } = useTracking();\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler(getTranslation);\n\n const { collectionType, model, schema } = useDoc();\n const { list } = useDocumentLayout(model);\n\n const [displayedHeaders, setDisplayedHeaders] = React.useState<ListFieldLayout[]>([]);\n\n const listLayout = usePrev(list.layout);\n React.useEffect(() => {\n /**\n * ONLY update the displayedHeaders if the document\n * layout has actually changed in value.\n */\n if (!isEqual(listLayout, list.layout)) {\n setDisplayedHeaders(list.layout);\n }\n }, [list.layout, listLayout]);\n\n const handleSetHeaders = (headers: string[]) => {\n setDisplayedHeaders(\n convertListLayoutToFieldLayouts(headers, schema!.attributes, list.metadatas)\n );\n };\n\n const [{ query }] = useQueryParams<{\n plugins?: Record<string, unknown>;\n page?: string;\n pageSize?: string;\n sort?: string;\n }>({\n page: '1',\n pageSize: list.settings.pageSize.toString(),\n sort: list.settings.defaultSortBy\n ? `${list.settings.defaultSortBy}:${list.settings.defaultSortOrder}`\n : '',\n });\n\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n const { data, error, isFetching } = useGetAllDocumentsQuery({\n model,\n params,\n });\n\n /**\n * If the API returns an error, display a notification\n */\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n const { results = [], pagination } = data ?? {};\n\n React.useEffect(() => {\n if (pagination && pagination.pageCount > 0 && pagination.page > pagination.pageCount) {\n navigate(\n {\n search: stringify({\n ...query,\n page: pagination.pageCount,\n }),\n },\n { replace: true }\n );\n }\n }, [pagination, formatMessage, query, navigate]);\n\n const { canCreate } = useDocumentRBAC('ListViewPage', ({ canCreate }) => ({\n canCreate,\n }));\n\n const runHookWaterfall = useStrapiApp('ListViewPage', ({ runHookWaterfall }) => runHookWaterfall);\n /**\n * Run the waterfall and then inject our additional table headers.\n */\n const tableHeaders = React.useMemo(() => {\n const headers = runHookWaterfall(INJECT_COLUMN_IN_TABLE, {\n displayedHeaders,\n layout: list,\n });\n\n const formattedHeaders = headers.displayedHeaders.map<ListFieldLayout>((header) => {\n /**\n * When the header label is a string, it is an attribute on the current content-type:\n * Use the attribute name value to compute the translation.\n * Otherwise, it should be a translation object coming from a plugin that injects into the table (ie i18n, content-releases, review-workflows):\n * Use the translation object as is.\n */\n const translation =\n typeof header.label === 'string'\n ? {\n id: `content-manager.content-types.${model}.${header.name}`,\n defaultMessage: header.label,\n }\n : header.label;\n\n return {\n ...header,\n label: formatMessage(translation),\n name: `${header.name}${header.mainField?.name ? `.${header.mainField.name}` : ''}`,\n };\n });\n\n if (schema?.options?.draftAndPublish) {\n formattedHeaders.push({\n attribute: {\n type: 'custom',\n },\n name: 'status',\n label: formatMessage({\n id: getTranslation(`containers.list.table-headers.status`),\n defaultMessage: 'status',\n }),\n searchable: false,\n sortable: false,\n } satisfies ListFieldLayout);\n }\n\n return formattedHeaders;\n }, [\n displayedHeaders,\n formatMessage,\n list,\n runHookWaterfall,\n schema?.options?.draftAndPublish,\n model,\n ]);\n\n if (isFetching) {\n return <Page.Loading />;\n }\n\n if (error) {\n return <Page.Error />;\n }\n\n const contentTypeTitle = schema?.info.displayName\n ? formatMessage({ id: schema.info.displayName, defaultMessage: schema.info.displayName })\n : formatMessage({\n id: 'content-manager.containers.untitled',\n defaultMessage: 'Untitled',\n });\n\n const handleRowClick = (id: Modules.Documents.ID) => () => {\n trackUsage('willEditEntryFromList');\n navigate({\n pathname: id.toString(),\n search: stringify({ plugins: query.plugins }),\n });\n };\n\n if (!isFetching && results.length === 0) {\n return (\n <Page.Main>\n <Page.Title>{`${contentTypeTitle}`}</Page.Title>\n <LayoutsHeaderCustom\n primaryAction={canCreate ? <CreateButton /> : null}\n subtitle={formatMessage(\n {\n id: getTranslation('pages.ListView.header-subtitle'),\n defaultMessage:\n '{number, plural, =0 {# entries} one {# entry} other {# entries}} found',\n },\n { number: pagination?.total }\n )}\n title={contentTypeTitle}\n navigationAction={<BackButton />}\n />\n <Layouts.Content>\n <Box background=\"neutral0\" shadow=\"filterShadow\" hasRadius>\n <EmptyStateLayout\n action={canCreate ? <CreateButton variant=\"secondary\" /> : null}\n content={formatMessage({\n id: getTranslation('pages.ListView.empty-state.content'),\n defaultMessage: 'No entries found',\n })}\n hasRadius\n icon={<EmptyDocuments width=\"16rem\" />}\n />\n </Box>\n </Layouts.Content>\n </Page.Main>\n );\n }\n\n return (\n <Page.Main>\n <Page.Title>{`${contentTypeTitle}`}</Page.Title>\n <LayoutsHeaderCustom\n primaryAction={canCreate ? <CreateButton /> : null}\n subtitle={formatMessage(\n {\n id: getTranslation('pages.ListView.header-subtitle'),\n defaultMessage:\n '{number, plural, =0 {# entries} one {# entry} other {# entries}} found',\n },\n { number: pagination?.total }\n )}\n title={contentTypeTitle}\n navigationAction={<BackButton />}\n />\n <Layouts.Action\n endActions={\n <>\n <InjectionZone area=\"listView.actions\" />\n <ViewSettingsMenu\n setHeaders={handleSetHeaders}\n resetHeaders={() => setDisplayedHeaders(list.layout)}\n headers={displayedHeaders.map((header) => header.name)}\n />\n </>\n }\n startActions={\n <>\n {list.settings.searchable && (\n <SearchInput\n disabled={results.length === 0}\n label={formatMessage(\n { id: 'app.component.search.label', defaultMessage: 'Search for {target}' },\n { target: contentTypeTitle }\n )}\n placeholder={formatMessage({\n id: 'global.search',\n defaultMessage: 'Search',\n })}\n trackedEvent=\"didSearch\"\n />\n )}\n {list.settings.filterable && schema ? (\n <Filters disabled={results.length === 0} schema={schema} />\n ) : null}\n </>\n }\n />\n <Layouts.Content>\n <Flex gap={4} direction=\"column\" alignItems=\"stretch\">\n <Table.Root rows={results} headers={tableHeaders} isLoading={isFetching}>\n <TableActionsBar />\n <Table.Content>\n <Table.Head>\n <Table.HeaderCheckboxCell />\n {tableHeaders.map((header: ListFieldLayout) => (\n <Table.HeaderCell key={header.name} {...header} />\n ))}\n </Table.Head>\n <Table.Loading />\n <Table.Empty action={canCreate ? <CreateButton variant=\"secondary\" /> : null} />\n <Table.Body>\n {results.map((row) => {\n return (\n <Table.Row\n cursor=\"pointer\"\n key={row.id}\n onClick={handleRowClick(row.documentId)}\n >\n <Table.CheckboxCell id={row.id} />\n {tableHeaders.map(({ cellFormatter, ...header }) => {\n if (header.name === 'status') {\n const { status } = row;\n\n return (\n <Table.Cell key={header.name}>\n <DocumentStatus status={status} maxWidth={'min-content'} />\n </Table.Cell>\n );\n }\n if (['createdBy', 'updatedBy'].includes(header.name.split('.')[0])) {\n // Display the users full name\n // Some entries doesn't have a user assigned as creator/updater (ex: entries created through content API)\n // In this case, we display a dash\n return (\n <Table.Cell key={header.name}>\n <Typography textColor=\"neutral800\">\n {row[header.name.split('.')[0]]\n ? getDisplayName(row[header.name.split('.')[0]])\n : '-'}\n </Typography>\n </Table.Cell>\n );\n }\n if (typeof cellFormatter === 'function') {\n return (\n <Table.Cell key={header.name}>\n {/* @ts-expect-error – TODO: fix this TS error */}\n {cellFormatter(row, header, { collectionType, model })}\n </Table.Cell>\n );\n }\n return (\n <Table.Cell key={header.name}>\n <CellContent\n content={row[header.name.split('.')[0]]}\n rowId={row.documentId}\n {...header}\n />\n </Table.Cell>\n );\n })}\n {/* we stop propagation here to allow the menu to trigger it's events without triggering the row redirect */}\n <ActionsCell onClick={(e) => e.stopPropagation()}>\n <TableActions document={row} />\n </ActionsCell>\n </Table.Row>\n );\n })}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n <Pagination.Root\n {...pagination}\n onPageSizeChange={() => trackUsage('willChangeNumberOfEntriesPerPage')}\n >\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Flex>\n </Layouts.Content>\n </Page.Main>\n );\n};\n\nconst ActionsCell = styled(Table.Cell)`\n display: flex;\n justify-content: flex-end;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * TableActionsBar\n * -----------------------------------------------------------------------------------------------*/\n\nconst TableActionsBar = () => {\n const selectRow = useTable('TableActionsBar', (state) => state.selectRow);\n const [{ query }] = useQueryParams<{ plugins: { i18n: { locale: string } } }>();\n const locale = query?.plugins?.i18n?.locale;\n const prevLocale = usePrev(locale);\n\n // TODO: find a better way to reset the selected rows when the locale changes across all the app\n React.useEffect(() => {\n if (prevLocale !== locale) {\n selectRow([]);\n }\n }, [selectRow, prevLocale, locale]);\n\n return (\n <Table.ActionBar>\n <BulkActionsRenderer />\n </Table.ActionBar>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CreateButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface CreateButtonProps extends Pick<ButtonProps, 'variant'> {}\n\nconst CreateButton = ({ variant }: CreateButtonProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const [{ query }] = useQueryParams<{ plugins: object }>();\n\n return (\n <Button\n variant={variant}\n tag={ReactRouterLink}\n onClick={() => {\n trackUsage('willCreateEntry', { status: 'draft' });\n }}\n startIcon={<Plus />}\n style={{ textDecoration: 'none' }}\n to={{\n pathname: 'create',\n search: stringify({ plugins: query.plugins }),\n }}\n minWidth=\"max-content\"\n marginLeft={2}\n >\n {formatMessage({\n id: getTranslation('HeaderLayout.button.label-add-entry'),\n defaultMessage: 'Create new entry',\n })}\n </Button>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedListViewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedListViewPage = () => {\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 <ListViewPage />\n </DocumentRBAC>\n )}\n </Page.Protect>\n );\n};\n\nexport { ListViewPage, ProtectedListViewPage };\n"],"names":["INJECT_COLUMN_IN_TABLE","HOOKS","LayoutsHeaderCustom","styled","Layouts","Header","ListViewPage","trackUsage","useTracking","navigate","useNavigate","formatMessage","useIntl","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","getTranslation","collectionType","model","schema","useDoc","list","useDocumentLayout","displayedHeaders","setDisplayedHeaders","React","useState","listLayout","usePrev","layout","useEffect","isEqual","handleSetHeaders","headers","convertListLayoutToFieldLayouts","attributes","metadatas","query","useQueryParams","page","pageSize","settings","toString","sort","defaultSortBy","defaultSortOrder","params","useMemo","buildValidParams","data","error","isFetching","useGetAllDocumentsQuery","type","message","results","pagination","pageCount","search","stringify","replace","canCreate","useDocumentRBAC","runHookWaterfall","useStrapiApp","tableHeaders","formattedHeaders","map","header","translation","label","id","name","defaultMessage","mainField","options","draftAndPublish","push","attribute","searchable","sortable","_jsx","Page","Loading","Error","contentTypeTitle","info","displayName","handleRowClick","pathname","plugins","length","_jsxs","Main","Title","primaryAction","CreateButton","subtitle","number","total","title","navigationAction","BackButton","Content","Box","background","shadow","hasRadius","EmptyStateLayout","action","variant","content","icon","EmptyDocuments","width","Action","endActions","_Fragment","InjectionZone","area","ViewSettingsMenu","setHeaders","resetHeaders","startActions","SearchInput","disabled","target","placeholder","trackedEvent","filterable","Filters","Flex","gap","direction","alignItems","Table","Root","rows","isLoading","TableActionsBar","Head","HeaderCheckboxCell","HeaderCell","Empty","Body","row","Row","cursor","onClick","documentId","CheckboxCell","cellFormatter","status","Cell","DocumentStatus","maxWidth","includes","split","Typography","textColor","getDisplayName","CellContent","rowId","ActionsCell","e","stopPropagation","TableActions","document","Pagination","onPageSizeChange","PageSize","Links","selectRow","useTable","state","locale","i18n","prevLocale","ActionBar","BulkActionsRenderer","Button","tag","ReactRouterLink","startIcon","Plus","style","textDecoration","to","minWidth","marginLeft","ProtectedListViewPage","slug","useParams","permissions","useRBAC","PERMISSIONS","subject","Protect","DocumentRBAC"],"mappings":"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"}
|