@strapi/content-manager 5.33.4 → 5.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/components/ActionsDrawer.js +204 -0
- package/dist/admin/components/ActionsDrawer.js.map +1 -0
- package/dist/admin/components/ActionsDrawer.mjs +183 -0
- package/dist/admin/components/ActionsDrawer.mjs.map +1 -0
- package/dist/admin/components/LeftMenu.js +13 -8
- package/dist/admin/components/LeftMenu.js.map +1 -1
- package/dist/admin/components/LeftMenu.mjs +13 -8
- package/dist/admin/components/LeftMenu.mjs.map +1 -1
- package/dist/admin/history/components/VersionContent.js +22 -9
- package/dist/admin/history/components/VersionContent.js.map +1 -1
- package/dist/admin/history/components/VersionContent.mjs +23 -10
- package/dist/admin/history/components/VersionContent.mjs.map +1 -1
- package/dist/admin/history/components/VersionHeader.js +1 -0
- package/dist/admin/history/components/VersionHeader.js.map +1 -1
- package/dist/admin/history/components/VersionHeader.mjs +1 -0
- package/dist/admin/history/components/VersionHeader.mjs.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.js +92 -63
- package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.mjs +95 -66
- package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.js +64 -48
- package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.mjs +67 -51
- package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/EditorToolbarObserver.js +63 -31
- package/dist/admin/pages/EditView/components/EditorToolbarObserver.js.map +1 -1
- package/dist/admin/pages/EditView/components/EditorToolbarObserver.mjs +64 -32
- package/dist/admin/pages/EditView/components/EditorToolbarObserver.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.js +30 -6
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.mjs +30 -6
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js +20 -5
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs +20 -5
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +22 -12
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +22 -12
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +6 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +7 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +151 -10
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +152 -11
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.js +52 -5
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.mjs +53 -6
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +6 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs +6 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js +21 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.mjs +24 -4
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js +21 -9
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.mjs +21 -9
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.js +4 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.mjs +4 -0
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js +30 -13
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs +32 -16
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/Header.js +91 -44
- package/dist/admin/pages/EditView/components/Header.js.map +1 -1
- package/dist/admin/pages/EditView/components/Header.mjs +92 -45
- package/dist/admin/pages/EditView/components/Header.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/Panels.js +67 -15
- package/dist/admin/pages/EditView/components/Panels.js.map +1 -1
- package/dist/admin/pages/EditView/components/Panels.mjs +67 -18
- package/dist/admin/pages/EditView/components/Panels.mjs.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.js +8 -6
- package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.mjs +8 -6
- package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
- package/dist/admin/preview/index.js +9 -3
- package/dist/admin/preview/index.js.map +1 -1
- package/dist/admin/preview/index.mjs +9 -3
- package/dist/admin/preview/index.mjs.map +1 -1
- package/dist/admin/src/components/ActionsDrawer.d.ts +19 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.d.ts +7 -2
- package/dist/admin/src/pages/EditView/components/Panels.d.ts +14 -2
- package/dist/admin/translations/de.json.js +165 -32
- package/dist/admin/translations/de.json.js.map +1 -1
- package/dist/admin/translations/de.json.mjs +165 -32
- package/dist/admin/translations/de.json.mjs.map +1 -1
- package/dist/admin/translations/en.json.js +5 -1
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +5 -1
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/translations/es.json.js +3 -1
- package/dist/admin/translations/es.json.js.map +1 -1
- package/dist/admin/translations/es.json.mjs +3 -1
- package/dist/admin/translations/es.json.mjs.map +1 -1
- package/dist/admin/translations/fr.json.js +3 -1
- package/dist/admin/translations/fr.json.js.map +1 -1
- package/dist/admin/translations/fr.json.mjs +3 -1
- package/dist/admin/translations/fr.json.mjs.map +1 -1
- package/dist/admin/translations/zh-Hans.json.js +0 -44
- package/dist/admin/translations/zh-Hans.json.js.map +1 -1
- package/dist/admin/translations/zh-Hans.json.mjs +0 -44
- package/dist/admin/translations/zh-Hans.json.mjs.map +1 -1
- package/dist/server/controllers/collection-types.js +16 -13
- package/dist/server/controllers/collection-types.js.map +1 -1
- package/dist/server/controllers/collection-types.mjs +16 -13
- package/dist/server/controllers/collection-types.mjs.map +1 -1
- package/dist/server/controllers/relations.js +5 -2
- package/dist/server/controllers/relations.js.map +1 -1
- package/dist/server/controllers/relations.mjs +5 -2
- package/dist/server/controllers/relations.mjs.map +1 -1
- package/dist/server/controllers/utils/document-status.js +28 -0
- package/dist/server/controllers/utils/document-status.js.map +1 -0
- package/dist/server/controllers/utils/document-status.mjs +26 -0
- package/dist/server/controllers/utils/document-status.mjs.map +1 -0
- package/dist/server/services/components.js +68 -20
- package/dist/server/services/components.js.map +1 -1
- package/dist/server/services/components.mjs +69 -21
- package/dist/server/services/components.mjs.map +1 -1
- package/dist/server/services/permission-checker.js +23 -0
- package/dist/server/services/permission-checker.js.map +1 -1
- package/dist/server/services/permission-checker.mjs +23 -0
- package/dist/server/services/permission-checker.mjs.map +1 -1
- package/dist/server/services/utils/store.js +51 -4
- package/dist/server/services/utils/store.js.map +1 -1
- package/dist/server/services/utils/store.mjs +51 -4
- package/dist/server/services/utils/store.mjs.map +1 -1
- package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
- package/dist/server/src/controllers/relations.d.ts.map +1 -1
- package/dist/server/src/controllers/utils/document-status.d.ts +10 -0
- package/dist/server/src/controllers/utils/document-status.d.ts.map +1 -0
- package/dist/server/src/index.d.ts +1 -0
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/services/components.d.ts +6 -0
- package/dist/server/src/services/components.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/dist/server/src/services/permission-checker.d.ts +1 -0
- package/dist/server/src/services/permission-checker.d.ts.map +1 -1
- package/dist/server/src/services/utils/store.d.ts +5 -1
- package/dist/server/src/services/utils/store.d.ts.map +1 -1
- package/package.json +5 -5
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
1
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import { useQueryParams, useStrapiApp, DescriptionComponentRenderer } from '@strapi/admin/strapi-admin';
|
|
3
|
+
import { createContext, useQueryParams, useStrapiApp, DescriptionComponentRenderer, useIsDesktop } from '@strapi/admin/strapi-admin';
|
|
4
4
|
import { Flex, Typography } from '@strapi/design-system';
|
|
5
5
|
import { useIntl } from 'react-intl';
|
|
6
6
|
import { useMatch } from 'react-router-dom';
|
|
@@ -9,15 +9,39 @@ import { useDoc } from '../../../hooks/useDocument.mjs';
|
|
|
9
9
|
import { CLONE_PATH } from '../../../router.mjs';
|
|
10
10
|
import { DocumentActions } from './DocumentActions.mjs';
|
|
11
11
|
|
|
12
|
+
const PanelsItems = ({ panels, setVisiblePanels, visiblePanelsLength })=>{
|
|
13
|
+
React.useEffect(()=>{
|
|
14
|
+
if (setVisiblePanels && visiblePanelsLength !== panels.length) {
|
|
15
|
+
setVisiblePanels(panels);
|
|
16
|
+
}
|
|
17
|
+
}, [
|
|
18
|
+
panels,
|
|
19
|
+
panels.length,
|
|
20
|
+
setVisiblePanels,
|
|
21
|
+
visiblePanelsLength
|
|
22
|
+
]);
|
|
23
|
+
return /*#__PURE__*/ jsx(Fragment, {
|
|
24
|
+
children: panels.map(({ content, id, ...description })=>/*#__PURE__*/ jsx(Panel, {
|
|
25
|
+
...description,
|
|
26
|
+
children: content
|
|
27
|
+
}, id))
|
|
28
|
+
});
|
|
29
|
+
};
|
|
12
30
|
/* -------------------------------------------------------------------------------------------------
|
|
13
31
|
* Panels
|
|
14
|
-
* -----------------------------------------------------------------------------------------------*/ const Panels = ()=>{
|
|
32
|
+
* -----------------------------------------------------------------------------------------------*/ const Panels = ({ withActions = true })=>{
|
|
15
33
|
const isCloning = useMatch(CLONE_PATH) !== null;
|
|
16
34
|
const [{ query: { status } }] = useQueryParams({
|
|
17
35
|
status: 'draft'
|
|
18
36
|
});
|
|
19
37
|
const { model, id, document, meta, collectionType } = useDoc();
|
|
20
38
|
const plugins = useStrapiApp('Panels', (state)=>state.plugins);
|
|
39
|
+
// Optional context consumer
|
|
40
|
+
const setVisiblePanels = usePanelsContext('Panels', (s)=>s.setVisiblePanels, false);
|
|
41
|
+
const visiblePanels = usePanelsContext('Panels', (s)=>s.visiblePanels, false);
|
|
42
|
+
const allPanels = plugins['content-manager'].apis.getEditViewSidePanels();
|
|
43
|
+
const filteredPanels = allPanels.filter((panel)=>panel.type !== 'actions');
|
|
44
|
+
const panelsToDisplay = withActions ? allPanels : filteredPanels;
|
|
21
45
|
const props = {
|
|
22
46
|
activeTab: status,
|
|
23
47
|
model,
|
|
@@ -32,11 +56,12 @@ import { DocumentActions } from './DocumentActions.mjs';
|
|
|
32
56
|
gap: 2,
|
|
33
57
|
children: /*#__PURE__*/ jsx(DescriptionComponentRenderer, {
|
|
34
58
|
props: props,
|
|
35
|
-
descriptions:
|
|
36
|
-
children: (panels)
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
59
|
+
descriptions: panelsToDisplay,
|
|
60
|
+
children: (panels)=>/*#__PURE__*/ jsx(PanelsItems, {
|
|
61
|
+
panels: panels,
|
|
62
|
+
setVisiblePanels: setVisiblePanels,
|
|
63
|
+
visiblePanelsLength: visiblePanels?.length
|
|
64
|
+
})
|
|
40
65
|
})
|
|
41
66
|
});
|
|
42
67
|
};
|
|
@@ -86,19 +111,32 @@ const ActionsPanelContent = ()=>{
|
|
|
86
111
|
});
|
|
87
112
|
};
|
|
88
113
|
const Panel = /*#__PURE__*/ React.forwardRef(({ children, title }, ref)=>{
|
|
114
|
+
const isDesktop = useIsDesktop();
|
|
89
115
|
return /*#__PURE__*/ jsxs(Flex, {
|
|
90
116
|
ref: ref,
|
|
91
117
|
tag: "aside",
|
|
92
118
|
"aria-labelledby": "additional-information",
|
|
93
|
-
background:
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
119
|
+
background: {
|
|
120
|
+
initial: 'transparent',
|
|
121
|
+
large: 'neutral0'
|
|
122
|
+
},
|
|
123
|
+
borderColor: {
|
|
124
|
+
initial: 'transparent',
|
|
125
|
+
large: 'neutral150'
|
|
126
|
+
},
|
|
127
|
+
hasRadius: isDesktop,
|
|
128
|
+
padding: {
|
|
129
|
+
initial: 0,
|
|
130
|
+
large: 4
|
|
131
|
+
},
|
|
132
|
+
shadow: {
|
|
133
|
+
initial: 'none',
|
|
134
|
+
large: 'tableShadow'
|
|
135
|
+
},
|
|
136
|
+
gap: {
|
|
137
|
+
initial: 4,
|
|
138
|
+
large: 3
|
|
139
|
+
},
|
|
102
140
|
direction: "column",
|
|
103
141
|
justifyContent: "stretch",
|
|
104
142
|
alignItems: "flex-start",
|
|
@@ -114,6 +152,17 @@ const Panel = /*#__PURE__*/ React.forwardRef(({ children, title }, ref)=>{
|
|
|
114
152
|
]
|
|
115
153
|
});
|
|
116
154
|
});
|
|
155
|
+
/* -------------------------------------------------------------------------------------------------
|
|
156
|
+
* PanelsContext
|
|
157
|
+
* -----------------------------------------------------------------------------------------------*/ const [PanelsProviderImpl, usePanelsContext] = createContext('PanelsContext');
|
|
158
|
+
const PanelsProvider = ({ children })=>{
|
|
159
|
+
const [visiblePanels, setVisiblePanels] = React.useState([]);
|
|
160
|
+
return /*#__PURE__*/ jsx(PanelsProviderImpl, {
|
|
161
|
+
visiblePanels: visiblePanels,
|
|
162
|
+
setVisiblePanels: setVisiblePanels,
|
|
163
|
+
children: children
|
|
164
|
+
});
|
|
165
|
+
};
|
|
117
166
|
|
|
118
|
-
export { ActionsPanel, Panels };
|
|
167
|
+
export { ActionsPanel, ActionsPanelContent, Panels, PanelsProvider, usePanelsContext };
|
|
119
168
|
//# sourceMappingURL=Panels.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Panels.mjs","sources":["../../../../../admin/src/pages/EditView/components/Panels.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useQueryParams,\n useStrapiApp,\n DescriptionComponentRenderer,\n} from '@strapi/admin/strapi-admin';\nimport { Flex, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { useMatch } from 'react-router-dom';\n\nimport { InjectionZone } from '../../../components/InjectionZone';\nimport { useDoc } from '../../../hooks/useDocument';\nimport { CLONE_PATH } from '../../../router';\n\nimport { DocumentActions } from './DocumentActions';\n\nimport type {\n ContentManagerPlugin,\n DocumentActionProps,\n PanelComponent,\n PanelComponentProps,\n} from '../../../content-manager';\n\ninterface PanelDescription {\n title: string;\n content: React.ReactNode;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Panels\n * -----------------------------------------------------------------------------------------------*/\n\nconst Panels = () => {\n const isCloning = useMatch(CLONE_PATH) !== null;\n const [\n {\n query: { status },\n },\n ] = useQueryParams<{ status: 'draft' | 'published' }>({\n status: 'draft',\n });\n const { model, id, document, meta, collectionType } = useDoc();\n const plugins = useStrapiApp('Panels', (state) => state.plugins);\n\n const props = {\n activeTab: status,\n model,\n documentId: id,\n document: isCloning ? undefined : document,\n meta: isCloning ? undefined : meta,\n collectionType,\n } satisfies PanelComponentProps;\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <DescriptionComponentRenderer\n props={props}\n descriptions={(\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getEditViewSidePanels()}\n >\n {(panels) =>\n panels.map(({ content, id, ...description }) => (\n <Panel key={id} {...description}>\n {content}\n </Panel>\n ))\n }\n </DescriptionComponentRenderer>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Default Action Panels (CE)\n * -----------------------------------------------------------------------------------------------*/\n\nconst ActionsPanel: PanelComponent = () => {\n const { formatMessage } = useIntl();\n\n return {\n title: formatMessage({\n id: 'content-manager.containers.edit.panels.default.title',\n defaultMessage: 'Entry',\n }),\n content: <ActionsPanelContent />,\n };\n};\n\nActionsPanel.type = 'actions';\n\nconst ActionsPanelContent = () => {\n const isCloning = useMatch(CLONE_PATH) !== null;\n const [\n {\n query: { status = 'draft' },\n },\n ] = useQueryParams<{ status: 'draft' | 'published' }>();\n const { model, id, document, meta, collectionType } = useDoc();\n const plugins = useStrapiApp('ActionsPanel', (state) => state.plugins);\n\n const props = {\n activeTab: status,\n model,\n documentId: id,\n document: isCloning ? undefined : document,\n meta: isCloning ? undefined : meta,\n collectionType,\n } satisfies DocumentActionProps;\n\n return (\n <Flex direction=\"column\" gap={2} width=\"100%\">\n <DescriptionComponentRenderer\n props={props}\n descriptions={(\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getDocumentActions('panel')}\n >\n {(actions) => <DocumentActions actions={actions} />}\n </DescriptionComponentRenderer>\n <InjectionZone area=\"editView.right-links\" slug={model} />\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Panel\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PanelProps extends Pick<PanelDescription, 'title'> {\n children: React.ReactNode;\n}\n\nconst Panel = React.forwardRef<any, PanelProps>(({ children, title }, ref) => {\n return (\n <Flex\n ref={ref}\n tag=\"aside\"\n aria-labelledby=\"additional-information\"\n background=\"neutral0\"\n borderColor=\"neutral150\"\n hasRadius\n paddingBottom={4}\n paddingLeft={4}\n paddingRight={4}\n paddingTop={4}\n shadow=\"tableShadow\"\n gap={3}\n direction=\"column\"\n justifyContent=\"stretch\"\n alignItems=\"flex-start\"\n >\n <Typography tag=\"h2\" variant=\"sigma\" textTransform=\"uppercase\" textColor=\"neutral600\">\n {title}\n </Typography>\n {children}\n </Flex>\n );\n});\n\nexport { Panels, ActionsPanel };\nexport type { PanelDescription };\n"],"names":["Panels","isCloning","useMatch","CLONE_PATH","query","status","useQueryParams","model","id","document","meta","collectionType","useDoc","plugins","useStrapiApp","state","props","activeTab","documentId","undefined","_jsx","Flex","direction","alignItems","gap","DescriptionComponentRenderer","descriptions","apis","getEditViewSidePanels","panels","map","content","description","Panel","ActionsPanel","formatMessage","useIntl","title","defaultMessage","ActionsPanelContent","type","_jsxs","width","getDocumentActions","actions","DocumentActions","InjectionZone","area","slug","React","forwardRef","children","ref","tag","aria-labelledby","background","borderColor","hasRadius","paddingBottom","paddingLeft","paddingRight","paddingTop","shadow","justifyContent","Typography","variant","textTransform","textColor"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Panels.mjs","sources":["../../../../../admin/src/pages/EditView/components/Panels.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useQueryParams,\n useStrapiApp,\n DescriptionComponentRenderer,\n useIsDesktop,\n createContext,\n} from '@strapi/admin/strapi-admin';\nimport { Flex, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { useMatch } from 'react-router-dom';\n\nimport { InjectionZone } from '../../../components/InjectionZone';\nimport { useDoc } from '../../../hooks/useDocument';\nimport { CLONE_PATH } from '../../../router';\n\nimport { DocumentActions } from './DocumentActions';\n\nimport type {\n ContentManagerPlugin,\n DocumentActionProps,\n PanelComponent,\n PanelComponentProps,\n} from '../../../content-manager';\n\ninterface PanelDescription {\n title: string;\n content: React.ReactNode;\n}\ninterface PanelsItemsProps {\n panels: (PanelDescription & { id: string })[];\n setVisiblePanels:\n | React.Dispatch<React.SetStateAction<(PanelDescription & { id: string })[]>>\n | null\n | undefined;\n visiblePanelsLength: number | undefined;\n}\n\nconst PanelsItems = ({ panels, setVisiblePanels, visiblePanelsLength }: PanelsItemsProps) => {\n React.useEffect(() => {\n if (setVisiblePanels && visiblePanelsLength !== panels.length) {\n setVisiblePanels(panels);\n }\n }, [panels, panels.length, setVisiblePanels, visiblePanelsLength]);\n\n return (\n <>\n {panels.map(({ content, id, ...description }) => (\n <Panel key={id} {...description}>\n {content}\n </Panel>\n ))}\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Panels\n * -----------------------------------------------------------------------------------------------*/\n\nconst Panels = ({ withActions = true }: { withActions?: boolean }) => {\n const isCloning = useMatch(CLONE_PATH) !== null;\n const [\n {\n query: { status },\n },\n ] = useQueryParams<{ status: 'draft' | 'published' }>({\n status: 'draft',\n });\n const { model, id, document, meta, collectionType } = useDoc();\n const plugins = useStrapiApp('Panels', (state) => state.plugins);\n // Optional context consumer\n const setVisiblePanels = usePanelsContext('Panels', (s) => s.setVisiblePanels, false);\n const visiblePanels = usePanelsContext('Panels', (s) => s.visiblePanels, false);\n\n const allPanels = (\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getEditViewSidePanels();\n const filteredPanels = allPanels.filter((panel) => (panel as PanelComponent).type !== 'actions');\n const panelsToDisplay = withActions ? allPanels : filteredPanels;\n\n const props = {\n activeTab: status,\n model,\n documentId: id,\n document: isCloning ? undefined : document,\n meta: isCloning ? undefined : meta,\n collectionType,\n } satisfies PanelComponentProps;\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <DescriptionComponentRenderer props={props} descriptions={panelsToDisplay}>\n {(panels) => (\n <PanelsItems\n panels={panels}\n setVisiblePanels={setVisiblePanels}\n visiblePanelsLength={visiblePanels?.length}\n />\n )}\n </DescriptionComponentRenderer>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Default Action Panels (CE)\n * -----------------------------------------------------------------------------------------------*/\n\nconst ActionsPanel: PanelComponent = () => {\n const { formatMessage } = useIntl();\n\n return {\n title: formatMessage({\n id: 'content-manager.containers.edit.panels.default.title',\n defaultMessage: 'Entry',\n }),\n content: <ActionsPanelContent />,\n };\n};\n\nActionsPanel.type = 'actions';\n\nconst ActionsPanelContent = () => {\n const isCloning = useMatch(CLONE_PATH) !== null;\n const [\n {\n query: { status = 'draft' },\n },\n ] = useQueryParams<{ status: 'draft' | 'published' }>();\n const { model, id, document, meta, collectionType } = useDoc();\n const plugins = useStrapiApp('ActionsPanel', (state) => state.plugins);\n\n const props = {\n activeTab: status,\n model,\n documentId: id,\n document: isCloning ? undefined : document,\n meta: isCloning ? undefined : meta,\n collectionType,\n } satisfies DocumentActionProps;\n\n return (\n <Flex direction=\"column\" gap={2} width=\"100%\">\n <DescriptionComponentRenderer\n props={props}\n descriptions={(\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getDocumentActions('panel')}\n >\n {(actions) => <DocumentActions actions={actions} />}\n </DescriptionComponentRenderer>\n <InjectionZone area=\"editView.right-links\" slug={model} />\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Panel\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PanelProps extends Pick<PanelDescription, 'title'> {\n children: React.ReactNode;\n}\n\nconst Panel = React.forwardRef<any, PanelProps>(({ children, title }, ref) => {\n const isDesktop = useIsDesktop();\n\n return (\n <Flex\n ref={ref}\n tag=\"aside\"\n aria-labelledby=\"additional-information\"\n background={{ initial: 'transparent', large: 'neutral0' }}\n borderColor={{ initial: 'transparent', large: 'neutral150' }}\n hasRadius={isDesktop}\n padding={{ initial: 0, large: 4 }}\n shadow={{ initial: 'none', large: 'tableShadow' }}\n gap={{ initial: 4, large: 3 }}\n direction=\"column\"\n justifyContent=\"stretch\"\n alignItems=\"flex-start\"\n >\n <Typography tag=\"h2\" variant=\"sigma\" textTransform=\"uppercase\" textColor=\"neutral600\">\n {title}\n </Typography>\n {children}\n </Flex>\n );\n});\n\n/* -------------------------------------------------------------------------------------------------\n * PanelsContext\n * -----------------------------------------------------------------------------------------------*/\n\nconst [PanelsProviderImpl, usePanelsContext] = createContext<{\n visiblePanels: (PanelDescription & { id: string })[];\n setVisiblePanels: React.Dispatch<React.SetStateAction<(PanelDescription & { id: string })[]>>;\n}>('PanelsContext');\n\nconst PanelsProvider = ({ children }: React.PropsWithChildren) => {\n const [visiblePanels, setVisiblePanels] = React.useState<(PanelDescription & { id: string })[]>(\n []\n );\n\n return (\n <PanelsProviderImpl visiblePanels={visiblePanels} setVisiblePanels={setVisiblePanels}>\n {children}\n </PanelsProviderImpl>\n );\n};\n\nexport { Panels, ActionsPanel, ActionsPanelContent, PanelsProvider, usePanelsContext };\nexport type { PanelDescription };\n"],"names":["PanelsItems","panels","setVisiblePanels","visiblePanelsLength","React","useEffect","length","_jsx","_Fragment","map","content","id","description","Panel","Panels","withActions","isCloning","useMatch","CLONE_PATH","query","status","useQueryParams","model","document","meta","collectionType","useDoc","plugins","useStrapiApp","state","usePanelsContext","s","visiblePanels","allPanels","apis","getEditViewSidePanels","filteredPanels","filter","panel","type","panelsToDisplay","props","activeTab","documentId","undefined","Flex","direction","alignItems","gap","DescriptionComponentRenderer","descriptions","ActionsPanel","formatMessage","useIntl","title","defaultMessage","ActionsPanelContent","_jsxs","width","getDocumentActions","actions","DocumentActions","InjectionZone","area","slug","forwardRef","children","ref","isDesktop","useIsDesktop","tag","aria-labelledby","background","initial","large","borderColor","hasRadius","padding","shadow","justifyContent","Typography","variant","textTransform","textColor","PanelsProviderImpl","createContext","PanelsProvider","useState"],"mappings":"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"}
|
|
@@ -86,7 +86,7 @@ const ListViewPage = ()=>{
|
|
|
86
86
|
const params = React__namespace.useMemo(()=>api.buildValidParams(query), [
|
|
87
87
|
query
|
|
88
88
|
]);
|
|
89
|
-
const { data, error, isFetching } = documents.useGetAllDocumentsQuery({
|
|
89
|
+
const { data, error, isLoading, isFetching } = documents.useGetAllDocumentsQuery({
|
|
90
90
|
model,
|
|
91
91
|
params
|
|
92
92
|
});
|
|
@@ -172,7 +172,7 @@ const ListViewPage = ()=>{
|
|
|
172
172
|
schema?.options?.draftAndPublish,
|
|
173
173
|
model
|
|
174
174
|
]);
|
|
175
|
-
if (
|
|
175
|
+
if (isLoading) {
|
|
176
176
|
return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.Loading, {});
|
|
177
177
|
}
|
|
178
178
|
if (error) {
|
|
@@ -258,9 +258,11 @@ const ListViewPage = ()=>{
|
|
|
258
258
|
shadow: "filterShadow",
|
|
259
259
|
hasRadius: true,
|
|
260
260
|
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.EmptyStateLayout, {
|
|
261
|
-
action: canCreate
|
|
262
|
-
|
|
263
|
-
|
|
261
|
+
action: canCreate && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
262
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(CreateButton, {
|
|
263
|
+
variant: "secondary"
|
|
264
|
+
})
|
|
265
|
+
}),
|
|
264
266
|
content: formatMessage({
|
|
265
267
|
id: 'app.components.EmptyStateLayout.content-document',
|
|
266
268
|
defaultMessage: 'No content found'
|
|
@@ -491,7 +493,7 @@ const CreateButton = ({ variant })=>{
|
|
|
491
493
|
})
|
|
492
494
|
},
|
|
493
495
|
minWidth: "max-content",
|
|
494
|
-
|
|
496
|
+
fullWidth: true,
|
|
495
497
|
children: formatMessage({
|
|
496
498
|
id: translations.getTranslation('HeaderLayout.button.label-add-entry'),
|
|
497
499
|
defaultMessage: 'Create new entry'
|
|
@@ -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 tours,\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 <>\n <tours.contentManager.Introduction>\n {/* Invisible Anchor */}\n <Box />\n </tours.contentManager.Introduction>\n <Page.Main>\n <Page.Title>{`${contentTypeTitle}`}</Page.Title>\n <LayoutsHeaderCustom\n primaryAction={\n canCreate ? (\n <tours.contentManager.CreateNewEntry>\n <CreateButton />\n </tours.contentManager.CreateNewEntry>\n ) : null\n }\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 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 ? <Filters schema={schema} /> : null}\n </>\n }\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: 'app.components.EmptyStateLayout.content-document',\n defaultMessage: 'No content found',\n })}\n hasRadius\n icon={<EmptyDocuments width=\"16rem\" />}\n />\n </Box>\n </Layouts.Content>\n </Page.Main>\n </>\n );\n }\n\n return (\n <>\n <tours.contentManager.Introduction>\n {/* Invisible Anchor */}\n <Box />\n </tours.contentManager.Introduction>\n <Page.Main>\n <Page.Title>{`${contentTypeTitle}`}</Page.Title>\n <LayoutsHeaderCustom\n primaryAction={\n canCreate ? (\n <tours.contentManager.CreateNewEntry>\n <CreateButton />\n </tours.contentManager.CreateNewEntry>\n ) : null\n }\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};\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","_Fragment","tours","contentManager","Introduction","Box","Main","Title","primaryAction","CreateNewEntry","CreateButton","subtitle","number","total","title","navigationAction","BackButton","Action","endActions","InjectionZone","area","ViewSettingsMenu","setHeaders","resetHeaders","startActions","SearchInput","target","placeholder","trackedEvent","filterable","Filters","Content","background","shadow","hasRadius","EmptyStateLayout","action","variant","content","icon","EmptyDocuments","width","disabled","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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"}
|
|
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 tours,\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, isLoading, 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 (isLoading) {\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 <>\n <tours.contentManager.Introduction>\n {/* Invisible Anchor */}\n <Box />\n </tours.contentManager.Introduction>\n <Page.Main>\n <Page.Title>{`${contentTypeTitle}`}</Page.Title>\n <LayoutsHeaderCustom\n primaryAction={\n canCreate ? (\n <tours.contentManager.CreateNewEntry>\n <CreateButton />\n </tours.contentManager.CreateNewEntry>\n ) : null\n }\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 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 ? <Filters schema={schema} /> : null}\n </>\n }\n />\n <Layouts.Content>\n <Box background=\"neutral0\" shadow=\"filterShadow\" hasRadius>\n <EmptyStateLayout\n action={\n canCreate && (\n <Box>\n <CreateButton variant=\"secondary\" />\n </Box>\n )\n }\n content={formatMessage({\n id: 'app.components.EmptyStateLayout.content-document',\n defaultMessage: 'No content found',\n })}\n hasRadius\n icon={<EmptyDocuments width=\"16rem\" />}\n />\n </Box>\n </Layouts.Content>\n </Page.Main>\n </>\n );\n }\n\n return (\n <>\n <tours.contentManager.Introduction>\n {/* Invisible Anchor */}\n <Box />\n </tours.contentManager.Introduction>\n <Page.Main>\n <Page.Title>{`${contentTypeTitle}`}</Page.Title>\n <LayoutsHeaderCustom\n primaryAction={\n canCreate ? (\n <tours.contentManager.CreateNewEntry>\n <CreateButton />\n </tours.contentManager.CreateNewEntry>\n ) : null\n }\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};\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 fullWidth\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","isLoading","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","_Fragment","tours","contentManager","Introduction","Box","Main","Title","primaryAction","CreateNewEntry","CreateButton","subtitle","number","total","title","navigationAction","BackButton","Action","endActions","InjectionZone","area","ViewSettingsMenu","setHeaders","resetHeaders","startActions","SearchInput","target","placeholder","trackedEvent","filterable","Filters","Content","background","shadow","hasRadius","EmptyStateLayout","action","variant","content","icon","EmptyDocuments","width","disabled","Flex","gap","direction","alignItems","Table","Root","rows","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","fullWidth","ProtectedListViewPage","slug","useParams","permissions","useRBAC","PERMISSIONS","subject","Protect","DocumentRBAC"],"mappings":"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"}
|
|
@@ -65,7 +65,7 @@ const ListViewPage = ()=>{
|
|
|
65
65
|
const params = React.useMemo(()=>buildValidParams(query), [
|
|
66
66
|
query
|
|
67
67
|
]);
|
|
68
|
-
const { data, error, isFetching } = useGetAllDocumentsQuery({
|
|
68
|
+
const { data, error, isLoading, isFetching } = useGetAllDocumentsQuery({
|
|
69
69
|
model,
|
|
70
70
|
params
|
|
71
71
|
});
|
|
@@ -151,7 +151,7 @@ const ListViewPage = ()=>{
|
|
|
151
151
|
schema?.options?.draftAndPublish,
|
|
152
152
|
model
|
|
153
153
|
]);
|
|
154
|
-
if (
|
|
154
|
+
if (isLoading) {
|
|
155
155
|
return /*#__PURE__*/ jsx(Page.Loading, {});
|
|
156
156
|
}
|
|
157
157
|
if (error) {
|
|
@@ -237,9 +237,11 @@ const ListViewPage = ()=>{
|
|
|
237
237
|
shadow: "filterShadow",
|
|
238
238
|
hasRadius: true,
|
|
239
239
|
children: /*#__PURE__*/ jsx(EmptyStateLayout, {
|
|
240
|
-
action: canCreate
|
|
241
|
-
|
|
242
|
-
|
|
240
|
+
action: canCreate && /*#__PURE__*/ jsx(Box, {
|
|
241
|
+
children: /*#__PURE__*/ jsx(CreateButton, {
|
|
242
|
+
variant: "secondary"
|
|
243
|
+
})
|
|
244
|
+
}),
|
|
243
245
|
content: formatMessage({
|
|
244
246
|
id: 'app.components.EmptyStateLayout.content-document',
|
|
245
247
|
defaultMessage: 'No content found'
|
|
@@ -470,7 +472,7 @@ const CreateButton = ({ variant })=>{
|
|
|
470
472
|
})
|
|
471
473
|
},
|
|
472
474
|
minWidth: "max-content",
|
|
473
|
-
|
|
475
|
+
fullWidth: true,
|
|
474
476
|
children: formatMessage({
|
|
475
477
|
id: getTranslation('HeaderLayout.button.label-add-entry'),
|
|
476
478
|
defaultMessage: 'Create new entry'
|