@strapi/content-manager 0.0.0-experimental.fed75ee8e64c57dbed0b670b25ef026b69baab10 → 0.0.0-next.008421e40e4f0fb98aab7504cea5a2b8ef7099d5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_chunks/CardDragPreview-C0QyJgRA.js.map +1 -1
- package/dist/_chunks/CardDragPreview-DOxamsuj.mjs.map +1 -1
- package/dist/_chunks/{ComponentConfigurationPage-BVM7LScS.mjs → ComponentConfigurationPage-9_4yUE9L.mjs} +4 -4
- package/dist/_chunks/{ComponentConfigurationPage-BVM7LScS.mjs.map → ComponentConfigurationPage-9_4yUE9L.mjs.map} +1 -1
- package/dist/_chunks/{ComponentConfigurationPage-DNRPa10q.js → ComponentConfigurationPage-DBSh-kET.js} +5 -6
- package/dist/_chunks/{ComponentConfigurationPage-DNRPa10q.js.map → ComponentConfigurationPage-DBSh-kET.js.map} +1 -1
- package/dist/_chunks/{ComponentIcon-BXdiCGQp.js → ComponentIcon-CRbtQEUV.js} +2 -3
- package/dist/_chunks/{ComponentIcon-BXdiCGQp.js.map → ComponentIcon-CRbtQEUV.js.map} +1 -1
- package/dist/_chunks/ComponentIcon-u4bIXTFY.mjs.map +1 -1
- package/dist/_chunks/{EditConfigurationPage-BrG0mEfF.js → EditConfigurationPage-Bl_U2JgH.js} +5 -6
- package/dist/_chunks/{EditConfigurationPage-BrG0mEfF.js.map → EditConfigurationPage-Bl_U2JgH.js.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-BWq-9Zhk.mjs → EditConfigurationPage-COe6hjPC.mjs} +4 -4
- package/dist/_chunks/{EditConfigurationPage-BWq-9Zhk.mjs.map → EditConfigurationPage-COe6hjPC.mjs.map} +1 -1
- package/dist/_chunks/{EditViewPage-BbY0bNNE.js → EditViewPage-D4yFJET6.js} +23 -57
- package/dist/_chunks/EditViewPage-D4yFJET6.js.map +1 -0
- package/dist/_chunks/{EditViewPage-Dx0QnTxn.mjs → EditViewPage-DrmVmYN0.mjs} +21 -54
- package/dist/_chunks/EditViewPage-DrmVmYN0.mjs.map +1 -0
- package/dist/_chunks/FieldTypeIcon-CMlNO8PE.mjs.map +1 -1
- package/dist/_chunks/FieldTypeIcon-Dnwq_IRF.js.map +1 -1
- package/dist/_chunks/{Form-B7nYNIUm.js → Form-C4rSaGsz.js} +5 -6
- package/dist/_chunks/{Form-B7nYNIUm.js.map → Form-C4rSaGsz.js.map} +1 -1
- package/dist/_chunks/{Form-BQwxPqu3.mjs → Form-DamaxNpG.mjs} +3 -3
- package/dist/_chunks/{Form-BQwxPqu3.mjs.map → Form-DamaxNpG.mjs.map} +1 -1
- package/dist/_chunks/{History-Bmu6tx6s.mjs → History-D1PreDSY.mjs} +51 -97
- package/dist/_chunks/History-D1PreDSY.mjs.map +1 -0
- package/dist/_chunks/{History-3JN4BIS1.js → History-DTm8UCCQ.js} +62 -109
- package/dist/_chunks/History-DTm8UCCQ.js.map +1 -0
- package/dist/_chunks/{Field-CglKum3X.js → Input-B7sapvBG.js} +1258 -1236
- package/dist/_chunks/Input-B7sapvBG.js.map +1 -0
- package/dist/_chunks/{Field-DVZSGAon.mjs → Input-CZ1YvjHR.mjs} +1333 -1311
- package/dist/_chunks/Input-CZ1YvjHR.mjs.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-DwijcJ17.mjs → ListConfigurationPage-Bbi32isk.mjs} +7 -6
- package/dist/_chunks/ListConfigurationPage-Bbi32isk.mjs.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-BcC28SV0.js → ListConfigurationPage-ysFMjKI3.js} +7 -7
- package/dist/_chunks/ListConfigurationPage-ysFMjKI3.js.map +1 -0
- package/dist/_chunks/{ListViewPage-DzhuS3CW.mjs → ListViewPage-Bud_jBDQ.mjs} +67 -41
- package/dist/_chunks/ListViewPage-Bud_jBDQ.mjs.map +1 -0
- package/dist/_chunks/{ListViewPage-ZPNQ6jWC.js → ListViewPage-DTuuxU3n.js} +73 -48
- package/dist/_chunks/ListViewPage-DTuuxU3n.js.map +1 -0
- package/dist/_chunks/{NoContentTypePage-DzwJNXvn.js → NoContentTypePage-CL7VVeYs.js} +2 -2
- package/dist/_chunks/{NoContentTypePage-DzwJNXvn.js.map → NoContentTypePage-CL7VVeYs.js.map} +1 -1
- package/dist/_chunks/{NoContentTypePage-BKMgOyd3.mjs → NoContentTypePage-DVhkugsf.mjs} +2 -2
- package/dist/_chunks/{NoContentTypePage-BKMgOyd3.mjs.map → NoContentTypePage-DVhkugsf.mjs.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-DBbGJqL9.mjs → NoPermissionsPage-CMdM-dCo.mjs} +2 -2
- package/dist/_chunks/{NoPermissionsPage-DBbGJqL9.mjs.map → NoPermissionsPage-CMdM-dCo.mjs.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-GaweP-NG.js → NoPermissionsPage-v7I599vC.js} +2 -2
- package/dist/_chunks/{NoPermissionsPage-GaweP-NG.js.map → NoPermissionsPage-v7I599vC.js.map} +1 -1
- package/dist/_chunks/Preview-BNuU0SuQ.mjs +287 -0
- package/dist/_chunks/Preview-BNuU0SuQ.mjs.map +1 -0
- package/dist/_chunks/Preview-Cxq-uI6D.js +305 -0
- package/dist/_chunks/Preview-Cxq-uI6D.js.map +1 -0
- package/dist/_chunks/{Relations-B7VtRA3g.mjs → Relations-C2Ahkrdg.mjs} +47 -23
- package/dist/_chunks/Relations-C2Ahkrdg.mjs.map +1 -0
- package/dist/_chunks/{Relations-BHXq_cKF.js → Relations-CWS79QQn.js} +47 -24
- package/dist/_chunks/Relations-CWS79QQn.js.map +1 -0
- package/dist/_chunks/{en-Bm0D0IWz.js → en-BR48D_RH.js} +23 -4
- package/dist/_chunks/{en-Bm0D0IWz.js.map → en-BR48D_RH.js.map} +1 -1
- package/dist/_chunks/{en-DKV44jRb.mjs → en-D65uIF6Y.mjs} +23 -4
- package/dist/_chunks/{en-DKV44jRb.mjs.map → en-D65uIF6Y.mjs.map} +1 -1
- package/dist/_chunks/{es-EUonQTon.js → es-9K52xZIr.js} +2 -2
- package/dist/_chunks/{ja-CcFe8diO.js.map → es-9K52xZIr.js.map} +1 -1
- package/dist/_chunks/{es-CeXiYflN.mjs → es-D34tqjMw.mjs} +2 -2
- package/dist/_chunks/{es-CeXiYflN.mjs.map → es-D34tqjMw.mjs.map} +1 -1
- package/dist/_chunks/{fr-B7kGGg3E.js → fr-C43IbhA_.js} +16 -3
- package/dist/_chunks/{fr-B7kGGg3E.js.map → fr-C43IbhA_.js.map} +1 -1
- package/dist/_chunks/{fr-CD9VFbPM.mjs → fr-DBseuRuB.mjs} +16 -3
- package/dist/_chunks/{fr-CD9VFbPM.mjs.map → fr-DBseuRuB.mjs.map} +1 -1
- package/dist/_chunks/hooks-BAaaKPS_.js.map +1 -1
- package/dist/_chunks/{index-DcA8_tJw.js → index-DQsvBb_N.js} +629 -268
- package/dist/_chunks/index-DQsvBb_N.js.map +1 -0
- package/dist/_chunks/{index-TaRzG09p.mjs → index-ZKrsjv-2.mjs} +645 -284
- package/dist/_chunks/index-ZKrsjv-2.mjs.map +1 -0
- package/dist/_chunks/{ja-CcFe8diO.js → ja-7sfIbjxE.js} +2 -2
- package/dist/_chunks/{es-EUonQTon.js.map → ja-7sfIbjxE.js.map} +1 -1
- package/dist/_chunks/{ja-CtsUxOvk.mjs → ja-BHqhDq4V.mjs} +2 -2
- package/dist/_chunks/{ja-CtsUxOvk.mjs.map → ja-BHqhDq4V.mjs.map} +1 -1
- package/dist/_chunks/{layout-CrgXpOxT.js → layout-Cl0NhlQB.js} +5 -6
- package/dist/_chunks/{layout-CrgXpOxT.js.map → layout-Cl0NhlQB.js.map} +1 -1
- package/dist/_chunks/{layout-aX-RJhd5.mjs → layout-fQk1rMk9.mjs} +4 -4
- package/dist/_chunks/{layout-aX-RJhd5.mjs.map → layout-fQk1rMk9.mjs.map} +1 -1
- package/dist/_chunks/{objects-gigeqt7s.js → objects-BcXOv6_9.js} +2 -4
- package/dist/_chunks/{objects-gigeqt7s.js.map → objects-BcXOv6_9.js.map} +1 -1
- package/dist/_chunks/{objects-mKMAmfec.mjs → objects-D6yBsdmx.mjs} +2 -4
- package/dist/_chunks/{objects-mKMAmfec.mjs.map → objects-D6yBsdmx.mjs.map} +1 -1
- package/dist/_chunks/{relations-Z6RA1sBS.js → relations-BRfBxVbX.js} +6 -7
- package/dist/_chunks/relations-BRfBxVbX.js.map +1 -0
- package/dist/_chunks/{relations-D3Hlx6QX.mjs → relations-BakOFl_1.mjs} +6 -7
- package/dist/_chunks/relations-BakOFl_1.mjs.map +1 -0
- package/dist/_chunks/{useDragAndDrop-J0TUUbR6.js → useDragAndDrop-BMtgCYzL.js} +5 -9
- package/dist/_chunks/{useDragAndDrop-J0TUUbR6.js.map → useDragAndDrop-BMtgCYzL.js.map} +1 -1
- package/dist/_chunks/{useDragAndDrop-DdHgKsqq.mjs → useDragAndDrop-DJ6jqvZN.mjs} +4 -7
- package/dist/_chunks/{useDragAndDrop-DdHgKsqq.mjs.map → useDragAndDrop-DJ6jqvZN.mjs.map} +1 -1
- package/dist/_chunks/{useDebounce-DmuSJIF3.mjs → usePrev-CZGy2Vjf.mjs} +11 -11
- package/dist/_chunks/usePrev-CZGy2Vjf.mjs.map +1 -0
- package/dist/_chunks/{useDebounce-CtcjDB3L.js → usePrev-D5J_2fEu.js} +8 -8
- package/dist/_chunks/usePrev-D5J_2fEu.js.map +1 -0
- package/dist/admin/index.js +2 -1
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +6 -5
- package/dist/admin/src/content-manager.d.ts +3 -2
- package/dist/admin/src/exports.d.ts +1 -0
- package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
- package/dist/admin/src/hooks/useDocument.d.ts +19 -2
- package/dist/admin/src/pages/EditView/EditViewPage.d.ts +9 -1
- package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/DocumentStatus.d.ts +3 -3
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.d.ts +7 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/utils/prismLanguages.d.ts +49 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/constants.d.ts +1 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.d.ts +4 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.d.ts +4 -1
- package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +27 -0
- package/dist/admin/src/pages/EditView/utils/data.d.ts +1 -0
- package/dist/admin/src/preview/components/PreviewContent.d.ts +2 -0
- package/dist/admin/src/preview/components/PreviewHeader.d.ts +2 -0
- package/dist/admin/src/preview/components/PreviewSidePanel.d.ts +3 -0
- package/dist/admin/src/preview/index.d.ts +4 -0
- package/dist/admin/src/preview/pages/Preview.d.ts +11 -0
- package/dist/admin/src/preview/routes.d.ts +3 -0
- package/dist/admin/src/preview/services/preview.d.ts +3 -0
- package/dist/admin/src/router.d.ts +1 -1
- package/dist/admin/src/services/api.d.ts +1 -1
- package/dist/admin/src/services/components.d.ts +2 -2
- package/dist/admin/src/services/contentTypes.d.ts +3 -3
- package/dist/admin/src/services/documents.d.ts +16 -19
- package/dist/admin/src/services/init.d.ts +1 -1
- package/dist/admin/src/services/relations.d.ts +2 -2
- package/dist/admin/src/services/uid.d.ts +3 -3
- package/dist/server/index.js +560 -317
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +561 -317
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/controllers/relations.d.ts.map +1 -1
- package/dist/server/src/controllers/utils/metadata.d.ts +16 -1
- package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
- package/dist/server/src/history/controllers/history-version.d.ts +1 -1
- package/dist/server/src/history/controllers/history-version.d.ts.map +1 -1
- package/dist/server/src/history/services/history.d.ts +3 -3
- package/dist/server/src/history/services/history.d.ts.map +1 -1
- package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
- package/dist/server/src/history/services/utils.d.ts +6 -11
- package/dist/server/src/history/services/utils.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +7 -6
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/preview/controllers/index.d.ts +2 -0
- package/dist/server/src/preview/controllers/index.d.ts.map +1 -0
- package/dist/server/src/preview/controllers/preview.d.ts +13 -0
- package/dist/server/src/preview/controllers/preview.d.ts.map +1 -0
- package/dist/server/src/preview/controllers/validation/preview.d.ts +6 -0
- package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -0
- package/dist/server/src/preview/index.d.ts +4 -0
- package/dist/server/src/preview/index.d.ts.map +1 -0
- package/dist/server/src/preview/routes/index.d.ts +8 -0
- package/dist/server/src/preview/routes/index.d.ts.map +1 -0
- package/dist/server/src/preview/routes/preview.d.ts +4 -0
- package/dist/server/src/preview/routes/preview.d.ts.map +1 -0
- package/dist/server/src/preview/services/index.d.ts +16 -0
- package/dist/server/src/preview/services/index.d.ts.map +1 -0
- package/dist/server/src/preview/services/preview-config.d.ts +32 -0
- package/dist/server/src/preview/services/preview-config.d.ts.map +1 -0
- package/dist/server/src/preview/services/preview.d.ts +12 -0
- package/dist/server/src/preview/services/preview.d.ts.map +1 -0
- package/dist/server/src/preview/utils.d.ts +19 -0
- package/dist/server/src/preview/utils.d.ts.map +1 -0
- package/dist/server/src/register.d.ts.map +1 -1
- package/dist/server/src/routes/index.d.ts.map +1 -1
- package/dist/server/src/services/document-manager.d.ts.map +1 -1
- package/dist/server/src/services/document-metadata.d.ts +12 -10
- package/dist/server/src/services/document-metadata.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +7 -6
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/utils/populate.d.ts +2 -2
- package/dist/server/src/services/utils/populate.d.ts.map +1 -1
- package/dist/server/src/utils/index.d.ts +2 -0
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/shared/contracts/index.d.ts +1 -0
- package/dist/shared/contracts/index.d.ts.map +1 -1
- package/dist/shared/contracts/preview.d.ts +27 -0
- package/dist/shared/contracts/preview.d.ts.map +1 -0
- package/dist/shared/index.js +4 -0
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/index.mjs +4 -0
- package/dist/shared/index.mjs.map +1 -1
- package/package.json +13 -12
- package/dist/_chunks/EditViewPage-BbY0bNNE.js.map +0 -1
- package/dist/_chunks/EditViewPage-Dx0QnTxn.mjs.map +0 -1
- package/dist/_chunks/Field-CglKum3X.js.map +0 -1
- package/dist/_chunks/Field-DVZSGAon.mjs.map +0 -1
- package/dist/_chunks/History-3JN4BIS1.js.map +0 -1
- package/dist/_chunks/History-Bmu6tx6s.mjs.map +0 -1
- package/dist/_chunks/ListConfigurationPage-BcC28SV0.js.map +0 -1
- package/dist/_chunks/ListConfigurationPage-DwijcJ17.mjs.map +0 -1
- package/dist/_chunks/ListViewPage-DzhuS3CW.mjs.map +0 -1
- package/dist/_chunks/ListViewPage-ZPNQ6jWC.js.map +0 -1
- package/dist/_chunks/Relations-B7VtRA3g.mjs.map +0 -1
- package/dist/_chunks/Relations-BHXq_cKF.js.map +0 -1
- package/dist/_chunks/index-DcA8_tJw.js.map +0 -1
- package/dist/_chunks/index-TaRzG09p.mjs.map +0 -1
- package/dist/_chunks/relations-D3Hlx6QX.mjs.map +0 -1
- package/dist/_chunks/relations-Z6RA1sBS.js.map +0 -1
- package/dist/_chunks/useDebounce-CtcjDB3L.js.map +0 -1
- package/dist/_chunks/useDebounce-DmuSJIF3.mjs.map +0 -1
@@ -4,18 +4,19 @@ const jsxRuntime = require("react/jsx-runtime");
|
|
4
4
|
const strapiAdmin = require("@strapi/admin/strapi-admin");
|
5
5
|
const React = require("react");
|
6
6
|
const designSystem = require("@strapi/design-system");
|
7
|
+
const mapValues = require("lodash/fp/mapValues");
|
7
8
|
const reactIntl = require("react-intl");
|
8
9
|
const reactRouterDom = require("react-router-dom");
|
10
|
+
const styledComponents = require("styled-components");
|
9
11
|
const yup = require("yup");
|
12
|
+
const fractionalIndexing = require("fractional-indexing");
|
10
13
|
const pipe = require("lodash/fp/pipe");
|
11
|
-
const dateFns = require("date-fns");
|
12
|
-
const styledComponents = require("styled-components");
|
13
14
|
const qs = require("qs");
|
15
|
+
const dateFns = require("date-fns");
|
14
16
|
const toolkit = require("@reduxjs/toolkit");
|
15
17
|
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
16
18
|
function _interopNamespace(e) {
|
17
|
-
if (e && e.__esModule)
|
18
|
-
return e;
|
19
|
+
if (e && e.__esModule) return e;
|
19
20
|
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
20
21
|
if (e) {
|
21
22
|
for (const k in e) {
|
@@ -32,15 +33,23 @@ function _interopNamespace(e) {
|
|
32
33
|
return Object.freeze(n);
|
33
34
|
}
|
34
35
|
const React__namespace = /* @__PURE__ */ _interopNamespace(React);
|
36
|
+
const mapValues__default = /* @__PURE__ */ _interopDefault(mapValues);
|
35
37
|
const yup__namespace = /* @__PURE__ */ _interopNamespace(yup);
|
36
38
|
const pipe__default = /* @__PURE__ */ _interopDefault(pipe);
|
37
|
-
const __variableDynamicImportRuntimeHelper = (glob, path) => {
|
39
|
+
const __variableDynamicImportRuntimeHelper = (glob, path, segs) => {
|
38
40
|
const v = glob[path];
|
39
41
|
if (v) {
|
40
42
|
return typeof v === "function" ? v() : Promise.resolve(v);
|
41
43
|
}
|
42
44
|
return new Promise((_, reject) => {
|
43
|
-
(typeof queueMicrotask === "function" ? queueMicrotask : setTimeout)(
|
45
|
+
(typeof queueMicrotask === "function" ? queueMicrotask : setTimeout)(
|
46
|
+
reject.bind(
|
47
|
+
null,
|
48
|
+
new Error(
|
49
|
+
"Unknown variable dynamic import: " + path + (path.split("/").length !== segs ? ". Note that variables only represent file names one level deep." : "")
|
50
|
+
)
|
51
|
+
)
|
52
|
+
);
|
44
53
|
});
|
45
54
|
};
|
46
55
|
const PLUGIN_ID = "content-manager";
|
@@ -179,6 +188,113 @@ const extractAndDedupeFields = (permissions = []) => permissions.flatMap((permis
|
|
179
188
|
(field, index2, arr) => arr.indexOf(field) === index2 && typeof field === "string"
|
180
189
|
);
|
181
190
|
const removeNumericalStrings = (arr) => arr.filter((item) => isNaN(Number(item)));
|
191
|
+
const BLOCK_LIST_ATTRIBUTE_KEYS = ["__component", "__temp_key__"];
|
192
|
+
const traverseData = (predicate, transform) => (schema, components = {}) => (data = {}) => {
|
193
|
+
const traverse = (datum, attributes) => {
|
194
|
+
return Object.entries(datum).reduce((acc, [key, value]) => {
|
195
|
+
const attribute = attributes[key];
|
196
|
+
if (BLOCK_LIST_ATTRIBUTE_KEYS.includes(key) || value === null || value === void 0) {
|
197
|
+
acc[key] = value;
|
198
|
+
return acc;
|
199
|
+
}
|
200
|
+
if (attribute.type === "component") {
|
201
|
+
if (attribute.repeatable) {
|
202
|
+
const componentValue = predicate(attribute, value) ? transform(value, attribute) : value;
|
203
|
+
acc[key] = componentValue.map(
|
204
|
+
(componentData) => traverse(componentData, components[attribute.component]?.attributes ?? {})
|
205
|
+
);
|
206
|
+
} else {
|
207
|
+
const componentValue = predicate(attribute, value) ? transform(value, attribute) : value;
|
208
|
+
acc[key] = traverse(componentValue, components[attribute.component]?.attributes ?? {});
|
209
|
+
}
|
210
|
+
} else if (attribute.type === "dynamiczone") {
|
211
|
+
const dynamicZoneValue = predicate(attribute, value) ? transform(value, attribute) : value;
|
212
|
+
acc[key] = dynamicZoneValue.map(
|
213
|
+
(componentData) => traverse(componentData, components[componentData.__component]?.attributes ?? {})
|
214
|
+
);
|
215
|
+
} else if (predicate(attribute, value)) {
|
216
|
+
acc[key] = transform(value, attribute);
|
217
|
+
} else {
|
218
|
+
acc[key] = value;
|
219
|
+
}
|
220
|
+
return acc;
|
221
|
+
}, {});
|
222
|
+
};
|
223
|
+
return traverse(data, schema.attributes);
|
224
|
+
};
|
225
|
+
const removeProhibitedFields = (prohibitedFields) => traverseData(
|
226
|
+
(attribute) => prohibitedFields.includes(attribute.type),
|
227
|
+
() => ""
|
228
|
+
);
|
229
|
+
const prepareRelations = traverseData(
|
230
|
+
(attribute) => attribute.type === "relation",
|
231
|
+
() => ({
|
232
|
+
connect: [],
|
233
|
+
disconnect: []
|
234
|
+
})
|
235
|
+
);
|
236
|
+
const prepareTempKeys = traverseData(
|
237
|
+
(attribute) => attribute.type === "component" && attribute.repeatable || attribute.type === "dynamiczone",
|
238
|
+
(data) => {
|
239
|
+
if (Array.isArray(data) && data.length > 0) {
|
240
|
+
const keys = fractionalIndexing.generateNKeysBetween(void 0, void 0, data.length);
|
241
|
+
return data.map((datum, index2) => ({
|
242
|
+
...datum,
|
243
|
+
__temp_key__: keys[index2]
|
244
|
+
}));
|
245
|
+
}
|
246
|
+
return data;
|
247
|
+
}
|
248
|
+
);
|
249
|
+
const removeFieldsThatDontExistOnSchema = (schema) => (data) => {
|
250
|
+
const schemaKeys = Object.keys(schema.attributes);
|
251
|
+
const dataKeys = Object.keys(data);
|
252
|
+
const keysToRemove = dataKeys.filter((key) => !schemaKeys.includes(key));
|
253
|
+
const revisedData = [...keysToRemove, ...DOCUMENT_META_FIELDS].reduce((acc, key) => {
|
254
|
+
delete acc[key];
|
255
|
+
return acc;
|
256
|
+
}, structuredClone(data));
|
257
|
+
return revisedData;
|
258
|
+
};
|
259
|
+
const removeNullValues = (data) => {
|
260
|
+
return Object.entries(data).reduce((acc, [key, value]) => {
|
261
|
+
if (value === null) {
|
262
|
+
return acc;
|
263
|
+
}
|
264
|
+
acc[key] = value;
|
265
|
+
return acc;
|
266
|
+
}, {});
|
267
|
+
};
|
268
|
+
const transformDocument = (schema, components = {}) => (document) => {
|
269
|
+
const transformations = pipe__default.default(
|
270
|
+
removeFieldsThatDontExistOnSchema(schema),
|
271
|
+
removeProhibitedFields(["password"])(schema, components),
|
272
|
+
removeNullValues,
|
273
|
+
prepareRelations(schema, components),
|
274
|
+
prepareTempKeys(schema, components)
|
275
|
+
);
|
276
|
+
return transformations(document);
|
277
|
+
};
|
278
|
+
const createDefaultForm = (contentType, components = {}) => {
|
279
|
+
const traverseSchema = (attributes) => {
|
280
|
+
return Object.entries(attributes).reduce((acc, [key, attribute]) => {
|
281
|
+
if ("default" in attribute) {
|
282
|
+
acc[key] = attribute.default;
|
283
|
+
} else if (attribute.type === "component" && attribute.required) {
|
284
|
+
const defaultComponentForm = traverseSchema(components[attribute.component].attributes);
|
285
|
+
if (attribute.repeatable) {
|
286
|
+
acc[key] = attribute.min ? [...Array(attribute.min).fill(defaultComponentForm)] : [];
|
287
|
+
} else {
|
288
|
+
acc[key] = defaultComponentForm;
|
289
|
+
}
|
290
|
+
} else if (attribute.type === "dynamiczone" && attribute.required) {
|
291
|
+
acc[key] = [];
|
292
|
+
}
|
293
|
+
return acc;
|
294
|
+
}, {});
|
295
|
+
};
|
296
|
+
return traverseSchema(contentType.attributes);
|
297
|
+
};
|
182
298
|
const contentManagerApi = strapiAdmin.adminApi.enhanceEndpoints({
|
183
299
|
addTagTypes: [
|
184
300
|
"ComponentConfiguration",
|
@@ -188,7 +304,8 @@ const contentManagerApi = strapiAdmin.adminApi.enhanceEndpoints({
|
|
188
304
|
"InitialData",
|
189
305
|
"HistoryVersion",
|
190
306
|
"Relations",
|
191
|
-
"UidAvailability"
|
307
|
+
"UidAvailability",
|
308
|
+
"RecentDocumentList"
|
192
309
|
]
|
193
310
|
});
|
194
311
|
const documentApi = contentManagerApi.injectEndpoints({
|
@@ -206,7 +323,7 @@ const documentApi = contentManagerApi.injectEndpoints({
|
|
206
323
|
if (error) {
|
207
324
|
return [];
|
208
325
|
}
|
209
|
-
return [{ type: "Document", id: `${model}_LIST` }];
|
326
|
+
return [{ type: "Document", id: `${model}_LIST` }, "RecentDocumentList"];
|
210
327
|
}
|
211
328
|
}),
|
212
329
|
cloneDocument: builder.mutation({
|
@@ -220,7 +337,8 @@ const documentApi = contentManagerApi.injectEndpoints({
|
|
220
337
|
}),
|
221
338
|
invalidatesTags: (_result, _error, { model }) => [
|
222
339
|
{ type: "Document", id: `${model}_LIST` },
|
223
|
-
{ type: "UidAvailability", id: model }
|
340
|
+
{ type: "UidAvailability", id: model },
|
341
|
+
"RecentDocumentList"
|
224
342
|
]
|
225
343
|
}),
|
226
344
|
/**
|
@@ -239,8 +357,21 @@ const documentApi = contentManagerApi.injectEndpoints({
|
|
239
357
|
invalidatesTags: (result, _error, { model }) => [
|
240
358
|
{ type: "Document", id: `${model}_LIST` },
|
241
359
|
"Relations",
|
242
|
-
{ type: "UidAvailability", id: model }
|
243
|
-
|
360
|
+
{ type: "UidAvailability", id: model },
|
361
|
+
"RecentDocumentList"
|
362
|
+
],
|
363
|
+
transformResponse: (response, meta, arg) => {
|
364
|
+
if (!("data" in response) && arg.model === "plugin::users-permissions.user") {
|
365
|
+
return {
|
366
|
+
data: response,
|
367
|
+
meta: {
|
368
|
+
availableStatus: [],
|
369
|
+
availableLocales: []
|
370
|
+
}
|
371
|
+
};
|
372
|
+
}
|
373
|
+
return response;
|
374
|
+
}
|
244
375
|
}),
|
245
376
|
deleteDocument: builder.mutation({
|
246
377
|
query: ({ collectionType, model, documentId, params }) => ({
|
@@ -251,7 +382,8 @@ const documentApi = contentManagerApi.injectEndpoints({
|
|
251
382
|
}
|
252
383
|
}),
|
253
384
|
invalidatesTags: (_result, _error, { collectionType, model }) => [
|
254
|
-
{ type: "Document", id: collectionType !== SINGLE_TYPES ? `${model}_LIST` : model }
|
385
|
+
{ type: "Document", id: collectionType !== SINGLE_TYPES ? `${model}_LIST` : model },
|
386
|
+
"RecentDocumentList"
|
255
387
|
]
|
256
388
|
}),
|
257
389
|
deleteManyDocuments: builder.mutation({
|
@@ -263,7 +395,10 @@ const documentApi = contentManagerApi.injectEndpoints({
|
|
263
395
|
params
|
264
396
|
}
|
265
397
|
}),
|
266
|
-
invalidatesTags: (_res, _error, { model }) => [
|
398
|
+
invalidatesTags: (_res, _error, { model }) => [
|
399
|
+
{ type: "Document", id: `${model}_LIST` },
|
400
|
+
"RecentDocumentList"
|
401
|
+
]
|
267
402
|
}),
|
268
403
|
discardDocument: builder.mutation({
|
269
404
|
query: ({ collectionType, model, documentId, params }) => ({
|
@@ -281,7 +416,8 @@ const documentApi = contentManagerApi.injectEndpoints({
|
|
281
416
|
},
|
282
417
|
{ type: "Document", id: `${model}_LIST` },
|
283
418
|
"Relations",
|
284
|
-
{ type: "UidAvailability", id: model }
|
419
|
+
{ type: "UidAvailability", id: model },
|
420
|
+
"RecentDocumentList"
|
285
421
|
];
|
286
422
|
}
|
287
423
|
}),
|
@@ -294,7 +430,7 @@ const documentApi = contentManagerApi.injectEndpoints({
|
|
294
430
|
url: `/content-manager/collection-types/${model}`,
|
295
431
|
method: "GET",
|
296
432
|
config: {
|
297
|
-
params
|
433
|
+
params: qs.stringify(params, { encode: true })
|
298
434
|
}
|
299
435
|
}),
|
300
436
|
providesTags: (result, _error, arg) => {
|
@@ -376,7 +512,8 @@ const documentApi = contentManagerApi.injectEndpoints({
|
|
376
512
|
id: collectionType !== SINGLE_TYPES ? `${model}_${documentId}` : model
|
377
513
|
},
|
378
514
|
{ type: "Document", id: `${model}_LIST` },
|
379
|
-
"Relations"
|
515
|
+
"Relations",
|
516
|
+
"RecentDocumentList"
|
380
517
|
];
|
381
518
|
}
|
382
519
|
}),
|
@@ -407,7 +544,9 @@ const documentApi = contentManagerApi.injectEndpoints({
|
|
407
544
|
id: collectionType !== SINGLE_TYPES ? `${model}_${documentId}` : model
|
408
545
|
},
|
409
546
|
"Relations",
|
410
|
-
{ type: "UidAvailability", id: model }
|
547
|
+
{ type: "UidAvailability", id: model },
|
548
|
+
"RecentDocumentList",
|
549
|
+
"RecentDocumentList"
|
411
550
|
];
|
412
551
|
},
|
413
552
|
async onQueryStarted({ data, ...patch }, { dispatch, queryFulfilled }) {
|
@@ -437,7 +576,8 @@ const documentApi = contentManagerApi.injectEndpoints({
|
|
437
576
|
{
|
438
577
|
type: "Document",
|
439
578
|
id: collectionType !== SINGLE_TYPES ? `${model}_${documentId}` : model
|
440
|
-
}
|
579
|
+
},
|
580
|
+
"RecentDocumentList"
|
441
581
|
];
|
442
582
|
}
|
443
583
|
}),
|
@@ -450,7 +590,10 @@ const documentApi = contentManagerApi.injectEndpoints({
|
|
450
590
|
params
|
451
591
|
}
|
452
592
|
}),
|
453
|
-
invalidatesTags: (_res, _error, { model, documentIds }) =>
|
593
|
+
invalidatesTags: (_res, _error, { model, documentIds }) => [
|
594
|
+
...documentIds.map((id) => ({ type: "Document", id: `${model}_${id}` })),
|
595
|
+
"RecentDocumentList"
|
596
|
+
]
|
454
597
|
})
|
455
598
|
})
|
456
599
|
});
|
@@ -473,8 +616,7 @@ const {
|
|
473
616
|
useUnpublishManyDocumentsMutation
|
474
617
|
} = documentApi;
|
475
618
|
const buildValidParams = (query) => {
|
476
|
-
if (!query)
|
477
|
-
return query;
|
619
|
+
if (!query) return query;
|
478
620
|
const { plugins: _, ...validQueryParams } = {
|
479
621
|
...query,
|
480
622
|
...Object.values(query?.plugins ?? {}).reduce(
|
@@ -482,9 +624,6 @@ const buildValidParams = (query) => {
|
|
482
624
|
{}
|
483
625
|
)
|
484
626
|
};
|
485
|
-
if ("_q" in validQueryParams) {
|
486
|
-
validQueryParams._q = encodeURIComponent(validQueryParams._q);
|
487
|
-
}
|
488
627
|
return validQueryParams;
|
489
628
|
};
|
490
629
|
const isBaseQueryError = (error) => {
|
@@ -989,9 +1128,10 @@ const formatEditLayout = (data, {
|
|
989
1128
|
currentPanelIndex += 2;
|
990
1129
|
} else {
|
991
1130
|
if (!panels[currentPanelIndex]) {
|
992
|
-
panels.push([]);
|
1131
|
+
panels.push([row]);
|
1132
|
+
} else {
|
1133
|
+
panels[currentPanelIndex].push(row);
|
993
1134
|
}
|
994
|
-
panels[currentPanelIndex].push(row);
|
995
1135
|
}
|
996
1136
|
return panels;
|
997
1137
|
}, []);
|
@@ -1124,6 +1264,7 @@ const convertListLayoutToFieldLayouts = (columns, attributes = {}, metadatas, co
|
|
1124
1264
|
const useDocument = (args, opts) => {
|
1125
1265
|
const { toggleNotification } = strapiAdmin.useNotification();
|
1126
1266
|
const { _unstableFormatAPIError: formatAPIError } = strapiAdmin.useAPIErrorHandler();
|
1267
|
+
const { formatMessage } = reactIntl.useIntl();
|
1127
1268
|
const {
|
1128
1269
|
currentData: data,
|
1129
1270
|
isLoading: isLoadingDocument,
|
@@ -1133,12 +1274,27 @@ const useDocument = (args, opts) => {
|
|
1133
1274
|
...opts,
|
1134
1275
|
skip: !args.documentId && args.collectionType !== SINGLE_TYPES || opts?.skip
|
1135
1276
|
});
|
1277
|
+
const document = data?.data;
|
1278
|
+
const meta = data?.meta;
|
1136
1279
|
const {
|
1137
1280
|
components,
|
1138
1281
|
schema,
|
1139
1282
|
schemas,
|
1140
1283
|
isLoading: isLoadingSchema
|
1141
1284
|
} = useContentTypeSchema(args.model);
|
1285
|
+
const isSingleType = schema?.kind === "singleType";
|
1286
|
+
const getTitle = (mainField) => {
|
1287
|
+
if (mainField !== "id" && document?.[mainField]) {
|
1288
|
+
return document[mainField];
|
1289
|
+
}
|
1290
|
+
if (isSingleType && schema?.info.displayName) {
|
1291
|
+
return schema.info.displayName;
|
1292
|
+
}
|
1293
|
+
return formatMessage({
|
1294
|
+
id: "content-manager.containers.untitled",
|
1295
|
+
defaultMessage: "Untitled"
|
1296
|
+
});
|
1297
|
+
};
|
1142
1298
|
React__namespace.useEffect(() => {
|
1143
1299
|
if (error) {
|
1144
1300
|
toggleNotification({
|
@@ -1154,14 +1310,14 @@ const useDocument = (args, opts) => {
|
|
1154
1310
|
return createYupSchema(schema.attributes, components);
|
1155
1311
|
}, [schema, components]);
|
1156
1312
|
const validate = React__namespace.useCallback(
|
1157
|
-
(
|
1313
|
+
(document2) => {
|
1158
1314
|
if (!validationSchema) {
|
1159
1315
|
throw new Error(
|
1160
1316
|
"There is no validation schema generated, this is likely due to the schema not being loaded yet."
|
1161
1317
|
);
|
1162
1318
|
}
|
1163
1319
|
try {
|
1164
|
-
validationSchema.validateSync(
|
1320
|
+
validationSchema.validateSync(document2, { abortEarly: false, strict: true });
|
1165
1321
|
return null;
|
1166
1322
|
} catch (error2) {
|
1167
1323
|
if (error2 instanceof yup.ValidationError) {
|
@@ -1172,17 +1328,29 @@ const useDocument = (args, opts) => {
|
|
1172
1328
|
},
|
1173
1329
|
[validationSchema]
|
1174
1330
|
);
|
1331
|
+
const getInitialFormValues = React__namespace.useCallback(
|
1332
|
+
(isCreatingDocument = false) => {
|
1333
|
+
if (!document && !isCreatingDocument && !isSingleType || !schema) {
|
1334
|
+
return void 0;
|
1335
|
+
}
|
1336
|
+
const form = document?.id ? document : createDefaultForm(schema, components);
|
1337
|
+
return transformDocument(schema, components)(form);
|
1338
|
+
},
|
1339
|
+
[document, isSingleType, schema, components]
|
1340
|
+
);
|
1175
1341
|
const isLoading = isLoadingDocument || isFetchingDocument || isLoadingSchema;
|
1176
1342
|
const hasError = !!error;
|
1177
1343
|
return {
|
1178
1344
|
components,
|
1179
|
-
document
|
1180
|
-
meta
|
1345
|
+
document,
|
1346
|
+
meta,
|
1181
1347
|
isLoading,
|
1182
1348
|
hasError,
|
1183
1349
|
schema,
|
1184
1350
|
schemas,
|
1185
|
-
validate
|
1351
|
+
validate,
|
1352
|
+
getTitle,
|
1353
|
+
getInitialFormValues
|
1186
1354
|
};
|
1187
1355
|
};
|
1188
1356
|
const useDoc = () => {
|
@@ -1249,9 +1417,6 @@ const useContentManagerContext = () => {
|
|
1249
1417
|
};
|
1250
1418
|
};
|
1251
1419
|
const prefixPluginTranslations = (trad, pluginId) => {
|
1252
|
-
if (!pluginId) {
|
1253
|
-
throw new TypeError("pluginId can't be empty");
|
1254
|
-
}
|
1255
1420
|
return Object.keys(trad).reduce((acc, current) => {
|
1256
1421
|
acc[`${pluginId}.${current}`] = trad[current];
|
1257
1422
|
return acc;
|
@@ -1685,10 +1850,10 @@ const useDocumentActions = () => {
|
|
1685
1850
|
update
|
1686
1851
|
};
|
1687
1852
|
};
|
1688
|
-
const ProtectedHistoryPage =
|
1689
|
-
() => Promise.resolve().then(() => require("./History-
|
1853
|
+
const ProtectedHistoryPage = React__namespace.lazy(
|
1854
|
+
() => Promise.resolve().then(() => require("./History-DTm8UCCQ.js")).then((mod) => ({ default: mod.ProtectedHistoryPage }))
|
1690
1855
|
);
|
1691
|
-
const routes$
|
1856
|
+
const routes$2 = [
|
1692
1857
|
{
|
1693
1858
|
path: ":collectionType/:slug/:id/history",
|
1694
1859
|
Component: ProtectedHistoryPage
|
@@ -1698,32 +1863,45 @@ const routes$1 = [
|
|
1698
1863
|
Component: ProtectedHistoryPage
|
1699
1864
|
}
|
1700
1865
|
];
|
1866
|
+
const ProtectedPreviewPage = React__namespace.lazy(
|
1867
|
+
() => Promise.resolve().then(() => require("./Preview-Cxq-uI6D.js")).then((mod) => ({ default: mod.ProtectedPreviewPage }))
|
1868
|
+
);
|
1869
|
+
const routes$1 = [
|
1870
|
+
{
|
1871
|
+
path: ":collectionType/:slug/:id/preview",
|
1872
|
+
Component: ProtectedPreviewPage
|
1873
|
+
},
|
1874
|
+
{
|
1875
|
+
path: ":collectionType/:slug/preview",
|
1876
|
+
Component: ProtectedPreviewPage
|
1877
|
+
}
|
1878
|
+
];
|
1701
1879
|
const ProtectedEditViewPage = React.lazy(
|
1702
|
-
() => Promise.resolve().then(() => require("./EditViewPage-
|
1880
|
+
() => Promise.resolve().then(() => require("./EditViewPage-D4yFJET6.js")).then((mod) => ({ default: mod.ProtectedEditViewPage }))
|
1703
1881
|
);
|
1704
1882
|
const ProtectedListViewPage = React.lazy(
|
1705
|
-
() => Promise.resolve().then(() => require("./ListViewPage-
|
1883
|
+
() => Promise.resolve().then(() => require("./ListViewPage-DTuuxU3n.js")).then((mod) => ({ default: mod.ProtectedListViewPage }))
|
1706
1884
|
);
|
1707
1885
|
const ProtectedListConfiguration = React.lazy(
|
1708
|
-
() => Promise.resolve().then(() => require("./ListConfigurationPage-
|
1886
|
+
() => Promise.resolve().then(() => require("./ListConfigurationPage-ysFMjKI3.js")).then((mod) => ({
|
1709
1887
|
default: mod.ProtectedListConfiguration
|
1710
1888
|
}))
|
1711
1889
|
);
|
1712
1890
|
const ProtectedEditConfigurationPage = React.lazy(
|
1713
|
-
() => Promise.resolve().then(() => require("./EditConfigurationPage-
|
1891
|
+
() => Promise.resolve().then(() => require("./EditConfigurationPage-Bl_U2JgH.js")).then((mod) => ({
|
1714
1892
|
default: mod.ProtectedEditConfigurationPage
|
1715
1893
|
}))
|
1716
1894
|
);
|
1717
1895
|
const ProtectedComponentConfigurationPage = React.lazy(
|
1718
|
-
() => Promise.resolve().then(() => require("./ComponentConfigurationPage-
|
1896
|
+
() => Promise.resolve().then(() => require("./ComponentConfigurationPage-DBSh-kET.js")).then((mod) => ({
|
1719
1897
|
default: mod.ProtectedComponentConfigurationPage
|
1720
1898
|
}))
|
1721
1899
|
);
|
1722
1900
|
const NoPermissions = React.lazy(
|
1723
|
-
() => Promise.resolve().then(() => require("./NoPermissionsPage-
|
1901
|
+
() => Promise.resolve().then(() => require("./NoPermissionsPage-v7I599vC.js")).then((mod) => ({ default: mod.NoPermissions }))
|
1724
1902
|
);
|
1725
1903
|
const NoContentType = React.lazy(
|
1726
|
-
() => Promise.resolve().then(() => require("./NoContentTypePage-
|
1904
|
+
() => Promise.resolve().then(() => require("./NoContentTypePage-CL7VVeYs.js")).then((mod) => ({ default: mod.NoContentType }))
|
1727
1905
|
);
|
1728
1906
|
const CollectionTypePages = () => {
|
1729
1907
|
const { collectionType } = reactRouterDom.useParams();
|
@@ -1735,7 +1913,7 @@ const CollectionTypePages = () => {
|
|
1735
1913
|
const CLONE_RELATIVE_PATH = ":collectionType/:slug/clone/:origin";
|
1736
1914
|
const CLONE_PATH = `/content-manager/${CLONE_RELATIVE_PATH}`;
|
1737
1915
|
const LIST_RELATIVE_PATH = ":collectionType/:slug";
|
1738
|
-
const LIST_PATH = `/content-manager
|
1916
|
+
const LIST_PATH = `/content-manager/collection-types/:slug`;
|
1739
1917
|
const routes = [
|
1740
1918
|
{
|
1741
1919
|
path: LIST_RELATIVE_PATH,
|
@@ -1769,6 +1947,7 @@ const routes = [
|
|
1769
1947
|
path: "no-content-types",
|
1770
1948
|
Component: NoContentType
|
1771
1949
|
},
|
1950
|
+
...routes$2,
|
1772
1951
|
...routes$1
|
1773
1952
|
];
|
1774
1953
|
const DocumentActions = ({ actions: actions2 }) => {
|
@@ -1867,6 +2046,11 @@ const DocumentActionButton = (action) => {
|
|
1867
2046
|
) : null
|
1868
2047
|
] });
|
1869
2048
|
};
|
2049
|
+
const MenuItem = styledComponents.styled(designSystem.Menu.Item)`
|
2050
|
+
&:hover {
|
2051
|
+
background: ${({ theme, isVariantDanger, isDisabled }) => isVariantDanger && !isDisabled ? theme.colors.danger100 : "neutral"};
|
2052
|
+
}
|
2053
|
+
`;
|
1870
2054
|
const DocumentActionsMenu = ({
|
1871
2055
|
actions: actions2,
|
1872
2056
|
children,
|
@@ -1925,48 +2109,32 @@ const DocumentActionsMenu = ({
|
|
1925
2109
|
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Menu.Content, { maxHeight: void 0, popoverPlacement: "bottom-end", children: [
|
1926
2110
|
actions2.map((action) => {
|
1927
2111
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
1928
|
-
|
2112
|
+
MenuItem,
|
1929
2113
|
{
|
1930
2114
|
disabled: action.disabled,
|
1931
2115
|
onSelect: handleClick(action),
|
1932
2116
|
display: "block",
|
1933
|
-
|
1934
|
-
|
1935
|
-
|
1936
|
-
|
1937
|
-
|
1938
|
-
|
1939
|
-
|
1940
|
-
|
1941
|
-
|
1942
|
-
|
1943
|
-
|
1944
|
-
|
1945
|
-
|
1946
|
-
|
1947
|
-
|
1948
|
-
|
1949
|
-
|
1950
|
-
|
1951
|
-
|
1952
|
-
|
1953
|
-
|
1954
|
-
designSystem.Flex,
|
1955
|
-
{
|
1956
|
-
alignItems: "center",
|
1957
|
-
background: "alternative100",
|
1958
|
-
borderStyle: "solid",
|
1959
|
-
borderColor: "alternative200",
|
1960
|
-
borderWidth: "1px",
|
1961
|
-
height: 5,
|
1962
|
-
paddingLeft: 2,
|
1963
|
-
paddingRight: 2,
|
1964
|
-
hasRadius: true,
|
1965
|
-
color: "alternative600",
|
1966
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", fontWeight: "bold", lineHeight: 1, children: formatMessage({ id: "global.new", defaultMessage: "New" }) })
|
1967
|
-
}
|
1968
|
-
)
|
1969
|
-
] })
|
2117
|
+
isVariantDanger: action.variant === "danger",
|
2118
|
+
isDisabled: action.disabled,
|
2119
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { justifyContent: "space-between", gap: 4, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
2120
|
+
designSystem.Flex,
|
2121
|
+
{
|
2122
|
+
color: !action.disabled ? convertActionVariantToColor(action.variant) : "inherit",
|
2123
|
+
gap: 2,
|
2124
|
+
tag: "span",
|
2125
|
+
children: [
|
2126
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
2127
|
+
designSystem.Flex,
|
2128
|
+
{
|
2129
|
+
tag: "span",
|
2130
|
+
color: !action.disabled ? convertActionVariantToIconColor(action.variant) : "inherit",
|
2131
|
+
children: action.icon
|
2132
|
+
}
|
2133
|
+
),
|
2134
|
+
action.label
|
2135
|
+
]
|
2136
|
+
}
|
2137
|
+
) })
|
1970
2138
|
},
|
1971
2139
|
action.id
|
1972
2140
|
);
|
@@ -2077,6 +2245,18 @@ const DocumentActionModal = ({
|
|
2077
2245
|
typeof Footer === "function" ? /* @__PURE__ */ jsxRuntime.jsx(Footer, { onClose: handleClose }) : Footer
|
2078
2246
|
] }) });
|
2079
2247
|
};
|
2248
|
+
const transformData = (data) => {
|
2249
|
+
if (Array.isArray(data)) {
|
2250
|
+
return data.map(transformData);
|
2251
|
+
}
|
2252
|
+
if (typeof data === "object" && data !== null) {
|
2253
|
+
if ("apiData" in data) {
|
2254
|
+
return data.apiData;
|
2255
|
+
}
|
2256
|
+
return mapValues__default.default(transformData)(data);
|
2257
|
+
}
|
2258
|
+
return data;
|
2259
|
+
};
|
2080
2260
|
const PublishAction$1 = ({
|
2081
2261
|
activeTab,
|
2082
2262
|
documentId,
|
@@ -2091,6 +2271,7 @@ const PublishAction$1 = ({
|
|
2091
2271
|
const { _unstableFormatValidationErrors: formatValidationErrors } = strapiAdmin.useAPIErrorHandler();
|
2092
2272
|
const isListView = reactRouterDom.useMatch(LIST_PATH) !== null;
|
2093
2273
|
const isCloning = reactRouterDom.useMatch(CLONE_PATH) !== null;
|
2274
|
+
const { id } = reactRouterDom.useParams();
|
2094
2275
|
const { formatMessage } = reactIntl.useIntl();
|
2095
2276
|
const canPublish = useDocumentRBAC("PublishAction", ({ canPublish: canPublish2 }) => canPublish2);
|
2096
2277
|
const { publish } = useDocumentActions();
|
@@ -2190,13 +2371,15 @@ const PublishAction$1 = ({
|
|
2190
2371
|
documentId,
|
2191
2372
|
params
|
2192
2373
|
},
|
2193
|
-
|
2374
|
+
transformData(formValues)
|
2194
2375
|
);
|
2195
2376
|
if ("data" in res && collectionType !== SINGLE_TYPES) {
|
2196
|
-
|
2197
|
-
|
2198
|
-
|
2199
|
-
|
2377
|
+
if (id === "create") {
|
2378
|
+
navigate({
|
2379
|
+
pathname: `../${collectionType}/${model}/${res.data.documentId}`,
|
2380
|
+
search: rawQuery
|
2381
|
+
});
|
2382
|
+
}
|
2200
2383
|
} else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
|
2201
2384
|
setErrors(formatValidationErrors(res.error));
|
2202
2385
|
}
|
@@ -2249,36 +2432,7 @@ const PublishAction$1 = ({
|
|
2249
2432
|
};
|
2250
2433
|
};
|
2251
2434
|
PublishAction$1.type = "publish";
|
2252
|
-
|
2253
|
-
return Object.keys(document).reduce((acc, key) => {
|
2254
|
-
if (document[key] !== void 0) {
|
2255
|
-
acc[key] = document[key];
|
2256
|
-
}
|
2257
|
-
if (typeof document[key] === "object" && document[key] !== null) {
|
2258
|
-
if ("connect" in document[key] && document[key].connect !== null) {
|
2259
|
-
acc[key] = {
|
2260
|
-
...acc[key],
|
2261
|
-
connect: document[key].connect.map((item) => {
|
2262
|
-
return {
|
2263
|
-
documentId: item.documentId
|
2264
|
-
};
|
2265
|
-
})
|
2266
|
-
};
|
2267
|
-
}
|
2268
|
-
if ("disconnect" in document[key] && document[key].disconnect !== null) {
|
2269
|
-
acc[key] = {
|
2270
|
-
...acc[key],
|
2271
|
-
disconnect: document[key].disconnect.map((item) => {
|
2272
|
-
return {
|
2273
|
-
documentId: item.documentId
|
2274
|
-
};
|
2275
|
-
})
|
2276
|
-
};
|
2277
|
-
}
|
2278
|
-
}
|
2279
|
-
return acc;
|
2280
|
-
}, {});
|
2281
|
-
};
|
2435
|
+
PublishAction$1.position = "panel";
|
2282
2436
|
const UpdateAction = ({
|
2283
2437
|
activeTab,
|
2284
2438
|
documentId,
|
@@ -2301,96 +2455,134 @@ const UpdateAction = ({
|
|
2301
2455
|
const validate = strapiAdmin.useForm("UpdateAction", (state) => state.validate);
|
2302
2456
|
const setErrors = strapiAdmin.useForm("UpdateAction", (state) => state.setErrors);
|
2303
2457
|
const resetForm = strapiAdmin.useForm("PublishAction", ({ resetForm: resetForm2 }) => resetForm2);
|
2304
|
-
|
2305
|
-
|
2306
|
-
|
2307
|
-
|
2308
|
-
|
2309
|
-
|
2310
|
-
|
2311
|
-
|
2312
|
-
|
2313
|
-
|
2314
|
-
|
2315
|
-
|
2316
|
-
|
2317
|
-
|
2318
|
-
|
2319
|
-
|
2320
|
-
status: "draft"
|
2458
|
+
const handleUpdate = React__namespace.useCallback(async () => {
|
2459
|
+
setSubmitting(true);
|
2460
|
+
try {
|
2461
|
+
if (!modified) {
|
2462
|
+
return;
|
2463
|
+
}
|
2464
|
+
const { errors } = await validate(true, {
|
2465
|
+
status: "draft"
|
2466
|
+
});
|
2467
|
+
if (errors) {
|
2468
|
+
toggleNotification({
|
2469
|
+
type: "danger",
|
2470
|
+
message: formatMessage({
|
2471
|
+
id: "content-manager.validation.error",
|
2472
|
+
defaultMessage: "There are validation errors in your document. Please fix them before saving."
|
2473
|
+
})
|
2321
2474
|
});
|
2322
|
-
|
2323
|
-
|
2324
|
-
|
2325
|
-
|
2326
|
-
|
2327
|
-
|
2328
|
-
|
2329
|
-
|
2330
|
-
|
2331
|
-
|
2332
|
-
|
2333
|
-
|
2334
|
-
|
2335
|
-
model,
|
2336
|
-
documentId: cloneMatch.params.origin,
|
2337
|
-
params
|
2338
|
-
},
|
2339
|
-
formDocumentToData(document)
|
2340
|
-
);
|
2341
|
-
if ("data" in res) {
|
2342
|
-
navigate(
|
2343
|
-
{
|
2344
|
-
pathname: `../${res.data.documentId}`,
|
2345
|
-
search: rawQuery
|
2346
|
-
},
|
2347
|
-
{ relative: "path" }
|
2348
|
-
);
|
2349
|
-
} else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
|
2350
|
-
setErrors(formatValidationErrors(res.error));
|
2351
|
-
}
|
2352
|
-
} else if (documentId || collectionType === SINGLE_TYPES) {
|
2353
|
-
const res = await update(
|
2475
|
+
return;
|
2476
|
+
}
|
2477
|
+
if (isCloning) {
|
2478
|
+
const res = await clone(
|
2479
|
+
{
|
2480
|
+
model,
|
2481
|
+
documentId: cloneMatch.params.origin,
|
2482
|
+
params
|
2483
|
+
},
|
2484
|
+
transformData(document)
|
2485
|
+
);
|
2486
|
+
if ("data" in res) {
|
2487
|
+
navigate(
|
2354
2488
|
{
|
2355
|
-
|
2356
|
-
|
2357
|
-
documentId,
|
2358
|
-
params
|
2489
|
+
pathname: `../${res.data.documentId}`,
|
2490
|
+
search: rawQuery
|
2359
2491
|
},
|
2360
|
-
|
2492
|
+
{ relative: "path" }
|
2361
2493
|
);
|
2362
|
-
|
2363
|
-
|
2364
|
-
|
2365
|
-
|
2366
|
-
|
2494
|
+
} else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
|
2495
|
+
setErrors(formatValidationErrors(res.error));
|
2496
|
+
}
|
2497
|
+
} else if (documentId || collectionType === SINGLE_TYPES) {
|
2498
|
+
const res = await update(
|
2499
|
+
{
|
2500
|
+
collectionType,
|
2501
|
+
model,
|
2502
|
+
documentId,
|
2503
|
+
params
|
2504
|
+
},
|
2505
|
+
transformData(document)
|
2506
|
+
);
|
2507
|
+
if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
|
2508
|
+
setErrors(formatValidationErrors(res.error));
|
2367
2509
|
} else {
|
2368
|
-
|
2510
|
+
resetForm();
|
2511
|
+
}
|
2512
|
+
} else {
|
2513
|
+
const res = await create(
|
2514
|
+
{
|
2515
|
+
model,
|
2516
|
+
params
|
2517
|
+
},
|
2518
|
+
transformData(document)
|
2519
|
+
);
|
2520
|
+
if ("data" in res && collectionType !== SINGLE_TYPES) {
|
2521
|
+
navigate(
|
2369
2522
|
{
|
2370
|
-
|
2371
|
-
|
2523
|
+
pathname: `../${res.data.documentId}`,
|
2524
|
+
search: rawQuery
|
2372
2525
|
},
|
2373
|
-
|
2526
|
+
{ replace: true, relative: "path" }
|
2374
2527
|
);
|
2375
|
-
|
2376
|
-
|
2377
|
-
{
|
2378
|
-
pathname: `../${res.data.documentId}`,
|
2379
|
-
search: rawQuery
|
2380
|
-
},
|
2381
|
-
{ replace: true, relative: "path" }
|
2382
|
-
);
|
2383
|
-
} else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
|
2384
|
-
setErrors(formatValidationErrors(res.error));
|
2385
|
-
}
|
2528
|
+
} else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
|
2529
|
+
setErrors(formatValidationErrors(res.error));
|
2386
2530
|
}
|
2387
|
-
} finally {
|
2388
|
-
setSubmitting(false);
|
2389
2531
|
}
|
2532
|
+
} finally {
|
2533
|
+
setSubmitting(false);
|
2390
2534
|
}
|
2535
|
+
}, [
|
2536
|
+
clone,
|
2537
|
+
cloneMatch?.params.origin,
|
2538
|
+
collectionType,
|
2539
|
+
create,
|
2540
|
+
document,
|
2541
|
+
documentId,
|
2542
|
+
formatMessage,
|
2543
|
+
formatValidationErrors,
|
2544
|
+
isCloning,
|
2545
|
+
model,
|
2546
|
+
modified,
|
2547
|
+
navigate,
|
2548
|
+
params,
|
2549
|
+
rawQuery,
|
2550
|
+
resetForm,
|
2551
|
+
setErrors,
|
2552
|
+
setSubmitting,
|
2553
|
+
toggleNotification,
|
2554
|
+
update,
|
2555
|
+
validate
|
2556
|
+
]);
|
2557
|
+
React__namespace.useEffect(() => {
|
2558
|
+
const handleKeyDown = (e) => {
|
2559
|
+
if (e.key === "Enter" && (e.metaKey || e.ctrlKey)) {
|
2560
|
+
e.preventDefault();
|
2561
|
+
handleUpdate();
|
2562
|
+
}
|
2563
|
+
};
|
2564
|
+
window.addEventListener("keydown", handleKeyDown);
|
2565
|
+
return () => {
|
2566
|
+
window.removeEventListener("keydown", handleKeyDown);
|
2567
|
+
};
|
2568
|
+
}, [handleUpdate]);
|
2569
|
+
return {
|
2570
|
+
/**
|
2571
|
+
* Disabled when:
|
2572
|
+
* - the form is submitting
|
2573
|
+
* - the document is not modified & we're not cloning (you can save a clone entity straight away)
|
2574
|
+
* - the active tab is the published tab
|
2575
|
+
*/
|
2576
|
+
disabled: isSubmitting || !modified && !isCloning || activeTab === "published",
|
2577
|
+
label: formatMessage({
|
2578
|
+
id: "global.save",
|
2579
|
+
defaultMessage: "Save"
|
2580
|
+
}),
|
2581
|
+
onClick: handleUpdate
|
2391
2582
|
};
|
2392
2583
|
};
|
2393
2584
|
UpdateAction.type = "update";
|
2585
|
+
UpdateAction.position = "panel";
|
2394
2586
|
const UNPUBLISH_DRAFT_OPTIONS = {
|
2395
2587
|
KEEP: "keep",
|
2396
2588
|
DISCARD: "discard"
|
@@ -2513,6 +2705,7 @@ const UnpublishAction$1 = ({
|
|
2513
2705
|
};
|
2514
2706
|
};
|
2515
2707
|
UnpublishAction$1.type = "unpublish";
|
2708
|
+
UnpublishAction$1.position = "panel";
|
2516
2709
|
const DiscardAction = ({
|
2517
2710
|
activeTab,
|
2518
2711
|
documentId,
|
@@ -2563,6 +2756,7 @@ const DiscardAction = ({
|
|
2563
2756
|
};
|
2564
2757
|
};
|
2565
2758
|
DiscardAction.type = "discard";
|
2759
|
+
DiscardAction.position = "panel";
|
2566
2760
|
const DEFAULT_ACTIONS = [PublishAction$1, UpdateAction, UnpublishAction$1, DiscardAction];
|
2567
2761
|
const intervals = ["years", "months", "days", "hours", "minutes", "seconds"];
|
2568
2762
|
const RelativeTime = React__namespace.forwardRef(
|
@@ -2575,7 +2769,7 @@ const RelativeTime = React__namespace.forwardRef(
|
|
2575
2769
|
});
|
2576
2770
|
const unit = intervals.find((intervalUnit) => {
|
2577
2771
|
return interval[intervalUnit] > 0 && Object.keys(interval).includes(intervalUnit);
|
2578
|
-
});
|
2772
|
+
}) ?? "seconds";
|
2579
2773
|
const relativeTime = dateFns.isPast(timestamp) ? -interval[unit] : interval[unit];
|
2580
2774
|
const customInterval = customIntervals.find(
|
2581
2775
|
(custom) => interval[custom.unit] < custom.threshold
|
@@ -2609,19 +2803,29 @@ const getDisplayName = ({
|
|
2609
2803
|
return email ?? "";
|
2610
2804
|
};
|
2611
2805
|
const capitalise = (str) => str.charAt(0).toUpperCase() + str.slice(1);
|
2612
|
-
const DocumentStatus = ({ status = "draft", ...restProps }) => {
|
2806
|
+
const DocumentStatus = ({ status = "draft", size = "S", ...restProps }) => {
|
2613
2807
|
const statusVariant = status === "draft" ? "secondary" : status === "published" ? "success" : "alternative";
|
2614
|
-
|
2808
|
+
const { formatMessage } = reactIntl.useIntl();
|
2809
|
+
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Status, { ...restProps, size, variant: statusVariant, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { tag: "span", variant: "omega", fontWeight: "bold", children: formatMessage({
|
2810
|
+
id: `content-manager.containers.List.${status}`,
|
2811
|
+
defaultMessage: capitalise(status)
|
2812
|
+
}) }) });
|
2615
2813
|
};
|
2616
2814
|
const Header = ({ isCreating, status, title: documentTitle = "Untitled" }) => {
|
2617
2815
|
const { formatMessage } = reactIntl.useIntl();
|
2618
2816
|
const isCloning = reactRouterDom.useMatch(CLONE_PATH) !== null;
|
2817
|
+
const params = reactRouterDom.useParams();
|
2619
2818
|
const title = isCreating ? formatMessage({
|
2620
2819
|
id: "content-manager.containers.edit.title.new",
|
2621
2820
|
defaultMessage: "Create an entry"
|
2622
2821
|
}) : documentTitle;
|
2623
2822
|
return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", alignItems: "flex-start", paddingTop: 6, paddingBottom: 4, gap: 2, children: [
|
2624
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
2823
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
2824
|
+
strapiAdmin.BackButton,
|
2825
|
+
{
|
2826
|
+
fallback: params.collectionType === SINGLE_TYPES ? void 0 : `../${COLLECTION_TYPES}/${params.slug}`
|
2827
|
+
}
|
2828
|
+
),
|
2625
2829
|
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { width: "100%", justifyContent: "space-between", gap: "80px", alignItems: "flex-start", children: [
|
2626
2830
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "alpha", tag: "h1", children: title }),
|
2627
2831
|
/* @__PURE__ */ jsxRuntime.jsx(HeaderToolbar, {})
|
@@ -2672,7 +2876,7 @@ const HeaderToolbar = () => {
|
|
2672
2876
|
meta: isCloning ? void 0 : meta,
|
2673
2877
|
collectionType
|
2674
2878
|
},
|
2675
|
-
descriptions: plugins["content-manager"].apis.getDocumentActions(),
|
2879
|
+
descriptions: plugins["content-manager"].apis.getDocumentActions("header"),
|
2676
2880
|
children: (actions2) => {
|
2677
2881
|
const headerActions = actions2.filter((action) => {
|
2678
2882
|
const positions = Array.isArray(action.position) ? action.position : [action.position];
|
@@ -2880,6 +3084,7 @@ const ConfigureTheViewAction = ({ collectionType, model }) => {
|
|
2880
3084
|
};
|
2881
3085
|
};
|
2882
3086
|
ConfigureTheViewAction.type = "configure-the-view";
|
3087
|
+
ConfigureTheViewAction.position = "header";
|
2883
3088
|
const EditTheModelAction = ({ model }) => {
|
2884
3089
|
const navigate = reactRouterDom.useNavigate();
|
2885
3090
|
const { formatMessage } = reactIntl.useIntl();
|
@@ -2896,6 +3101,7 @@ const EditTheModelAction = ({ model }) => {
|
|
2896
3101
|
};
|
2897
3102
|
};
|
2898
3103
|
EditTheModelAction.type = "edit-the-model";
|
3104
|
+
EditTheModelAction.position = "header";
|
2899
3105
|
const DeleteAction$1 = ({ documentId, model, collectionType, document }) => {
|
2900
3106
|
const navigate = reactRouterDom.useNavigate();
|
2901
3107
|
const { formatMessage } = reactIntl.useIntl();
|
@@ -2969,6 +3175,7 @@ const DeleteAction$1 = ({ documentId, model, collectionType, document }) => {
|
|
2969
3175
|
};
|
2970
3176
|
};
|
2971
3177
|
DeleteAction$1.type = "delete";
|
3178
|
+
DeleteAction$1.position = ["header", "table-row"];
|
2972
3179
|
const DEFAULT_HEADER_ACTIONS = [EditTheModelAction, ConfigureTheViewAction, DeleteAction$1];
|
2973
3180
|
const Panels = () => {
|
2974
3181
|
const isCloning = reactRouterDom.useMatch(CLONE_PATH) !== null;
|
@@ -3031,7 +3238,7 @@ const ActionsPanelContent = () => {
|
|
3031
3238
|
strapiAdmin.DescriptionComponentRenderer,
|
3032
3239
|
{
|
3033
3240
|
props,
|
3034
|
-
descriptions: plugins["content-manager"].apis.getDocumentActions(),
|
3241
|
+
descriptions: plugins["content-manager"].apis.getDocumentActions("panel"),
|
3035
3242
|
children: (actions2) => /* @__PURE__ */ jsxRuntime.jsx(DocumentActions, { actions: actions2 })
|
3036
3243
|
}
|
3037
3244
|
),
|
@@ -3058,7 +3265,7 @@ const Panel = React__namespace.forwardRef(({ children, title }, ref) => {
|
|
3058
3265
|
justifyContent: "stretch",
|
3059
3266
|
alignItems: "flex-start",
|
3060
3267
|
children: [
|
3061
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { tag: "h2", variant: "sigma", textTransform: "uppercase", children: title }),
|
3268
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { tag: "h2", variant: "sigma", textTransform: "uppercase", textColor: "neutral600", children: title }),
|
3062
3269
|
children
|
3063
3270
|
]
|
3064
3271
|
}
|
@@ -3089,7 +3296,7 @@ const ConfirmBulkActionDialog = ({
|
|
3089
3296
|
] })
|
3090
3297
|
] }) });
|
3091
3298
|
};
|
3092
|
-
const BoldChunk
|
3299
|
+
const BoldChunk = (chunks) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { fontWeight: "bold", children: chunks });
|
3093
3300
|
const ConfirmDialogPublishAll = ({
|
3094
3301
|
isOpen,
|
3095
3302
|
onToggleDialog,
|
@@ -3138,7 +3345,7 @@ const ConfirmDialogPublishAll = ({
|
|
3138
3345
|
defaultMessage: "<b>{count} {count, plural, one { relation } other { relations } } out of {entities} { entities, plural, one { entry } other { entries } } {count, plural, one { is } other { are } }</b> not published yet and might lead to unexpected behavior. "
|
3139
3346
|
},
|
3140
3347
|
{
|
3141
|
-
b: BoldChunk
|
3348
|
+
b: BoldChunk,
|
3142
3349
|
count: countDraftRelations,
|
3143
3350
|
entities: selectedEntries.length
|
3144
3351
|
}
|
@@ -3177,6 +3384,16 @@ const ConfirmDialogPublishAll = ({
|
|
3177
3384
|
const TypographyMaxWidth = styledComponents.styled(designSystem.Typography)`
|
3178
3385
|
max-width: 300px;
|
3179
3386
|
`;
|
3387
|
+
const TableComponent = styledComponents.styled(designSystem.RawTable)`
|
3388
|
+
width: 100%;
|
3389
|
+
table-layout: fixed;
|
3390
|
+
td:first-child {
|
3391
|
+
border-right: 1px solid ${({ theme }) => theme.colors.neutral150};
|
3392
|
+
}
|
3393
|
+
td:first-of-type {
|
3394
|
+
padding: ${({ theme }) => theme.spaces[4]};
|
3395
|
+
}
|
3396
|
+
`;
|
3180
3397
|
const formatErrorMessages = (errors, parentKey, formatMessage) => {
|
3181
3398
|
const messages = [];
|
3182
3399
|
Object.entries(errors).forEach(([key, value]) => {
|
@@ -3281,7 +3498,7 @@ const SelectedEntriesTableContent = ({
|
|
3281
3498
|
)
|
3282
3499
|
] }),
|
3283
3500
|
/* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Loading, {}),
|
3284
|
-
/* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Body, { children: rowsToDisplay.map((row
|
3501
|
+
/* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Body, { children: rowsToDisplay.map((row) => /* @__PURE__ */ jsxRuntime.jsxs(strapiAdmin.Table.Row, { children: [
|
3285
3502
|
/* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.CheckboxCell, { id: row.id }),
|
3286
3503
|
/* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: row.id }) }),
|
3287
3504
|
shouldDisplayMainField && /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: row[mainField] }) }),
|
@@ -3308,18 +3525,10 @@ const SelectedEntriesTableContent = ({
|
|
3308
3525
|
search: row.locale && `?plugins[i18n][locale]=${row.locale}`
|
3309
3526
|
},
|
3310
3527
|
state: { from: pathname },
|
3311
|
-
label: formatMessage(
|
3312
|
-
|
3313
|
-
|
3314
|
-
|
3315
|
-
{
|
3316
|
-
id: "content-manager.components.ListViewHelperPluginTable.row-line",
|
3317
|
-
defaultMessage: "item line {number}"
|
3318
|
-
},
|
3319
|
-
{ number: index2 + 1 }
|
3320
|
-
)
|
3321
|
-
}
|
3322
|
-
),
|
3528
|
+
label: formatMessage({
|
3529
|
+
id: "content-manager.bulk-publish.edit",
|
3530
|
+
defaultMessage: "Edit"
|
3531
|
+
}),
|
3323
3532
|
target: "_blank",
|
3324
3533
|
marginLeft: "auto",
|
3325
3534
|
variant: "ghost",
|
@@ -3329,7 +3538,73 @@ const SelectedEntriesTableContent = ({
|
|
3329
3538
|
] }, row.id)) })
|
3330
3539
|
] });
|
3331
3540
|
};
|
3332
|
-
const
|
3541
|
+
const PublicationStatusSummary = ({ count, icon, message }) => {
|
3542
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { justifyContent: "space-between", flex: 1, gap: 3, children: [
|
3543
|
+
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
|
3544
|
+
icon,
|
3545
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: message })
|
3546
|
+
] }),
|
3547
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { fontWeight: "bold", children: count })
|
3548
|
+
] });
|
3549
|
+
};
|
3550
|
+
const PublicationStatusGrid = ({
|
3551
|
+
entriesReadyToPublishCount,
|
3552
|
+
entriesPublishedCount,
|
3553
|
+
entriesModifiedCount,
|
3554
|
+
entriesWithErrorsCount
|
3555
|
+
}) => {
|
3556
|
+
const { formatMessage } = reactIntl.useIntl();
|
3557
|
+
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { hasRadius: true, borderColor: "neutral150", children: /* @__PURE__ */ jsxRuntime.jsx(TableComponent, { colCount: 2, rowCount: 2, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tbody, { children: [
|
3558
|
+
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tr, { children: [
|
3559
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
3560
|
+
PublicationStatusSummary,
|
3561
|
+
{
|
3562
|
+
count: entriesReadyToPublishCount,
|
3563
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(Icons.CheckCircle, { fill: "success600" }),
|
3564
|
+
message: formatMessage({
|
3565
|
+
id: "app.utils.ready-to-publish",
|
3566
|
+
defaultMessage: "Ready to publish"
|
3567
|
+
})
|
3568
|
+
}
|
3569
|
+
) }),
|
3570
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
3571
|
+
PublicationStatusSummary,
|
3572
|
+
{
|
3573
|
+
count: entriesPublishedCount,
|
3574
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(Icons.CheckCircle, { fill: "success600" }),
|
3575
|
+
message: formatMessage({
|
3576
|
+
id: "app.utils.already-published",
|
3577
|
+
defaultMessage: "Already published"
|
3578
|
+
})
|
3579
|
+
}
|
3580
|
+
) })
|
3581
|
+
] }),
|
3582
|
+
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tr, { children: [
|
3583
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
3584
|
+
PublicationStatusSummary,
|
3585
|
+
{
|
3586
|
+
count: entriesModifiedCount,
|
3587
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(Icons.ArrowsCounterClockwise, { fill: "alternative600" }),
|
3588
|
+
message: formatMessage({
|
3589
|
+
id: "content-manager.bulk-publish.modified",
|
3590
|
+
defaultMessage: "Ready to publish changes"
|
3591
|
+
})
|
3592
|
+
}
|
3593
|
+
) }),
|
3594
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
3595
|
+
PublicationStatusSummary,
|
3596
|
+
{
|
3597
|
+
count: entriesWithErrorsCount,
|
3598
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(Icons.CrossCircle, { fill: "danger600" }),
|
3599
|
+
message: formatMessage({
|
3600
|
+
id: "content-manager.bulk-publish.waiting-for-action",
|
3601
|
+
defaultMessage: "Waiting for action"
|
3602
|
+
})
|
3603
|
+
}
|
3604
|
+
) })
|
3605
|
+
] })
|
3606
|
+
] }) }) });
|
3607
|
+
};
|
3333
3608
|
const SelectedEntriesModalContent = ({
|
3334
3609
|
listViewSelectedEntries,
|
3335
3610
|
toggleModal,
|
@@ -3388,7 +3663,6 @@ const SelectedEntriesModalContent = ({
|
|
3388
3663
|
validationErrors: {}
|
3389
3664
|
};
|
3390
3665
|
}, [components, data, schema]);
|
3391
|
-
const [publishedCount, setPublishedCount] = React__namespace.useState(0);
|
3392
3666
|
const [isDialogOpen, setIsDialogOpen] = React__namespace.useState(false);
|
3393
3667
|
const { publishMany: bulkPublishAction } = useDocumentActions();
|
3394
3668
|
const [, { isLoading: isSubmittingForm }] = usePublishManyDocumentsMutation();
|
@@ -3400,53 +3674,36 @@ const SelectedEntriesModalContent = ({
|
|
3400
3674
|
const selectedEntriesWithErrorsCount = selectedEntries.filter(
|
3401
3675
|
({ documentId }) => validationErrors[documentId]
|
3402
3676
|
).length;
|
3403
|
-
const
|
3677
|
+
const selectedEntriesPublishedCount = selectedEntries.filter(
|
3404
3678
|
({ status }) => status === "published"
|
3405
3679
|
).length;
|
3406
|
-
const
|
3680
|
+
const selectedEntriesModifiedCount = selectedEntries.filter(
|
3681
|
+
({ status, documentId }) => status === "modified" && !validationErrors[documentId]
|
3682
|
+
).length;
|
3683
|
+
const selectedEntriesWithNoErrorsCount = selectedEntries.length - selectedEntriesWithErrorsCount - selectedEntriesPublishedCount;
|
3407
3684
|
const toggleDialog = () => setIsDialogOpen((prev) => !prev);
|
3408
3685
|
const handleConfirmBulkPublish = async () => {
|
3409
3686
|
toggleDialog();
|
3410
3687
|
const res = await bulkPublishAction({ model, documentIds: entriesToPublish, params });
|
3411
3688
|
if (!("error" in res)) {
|
3412
|
-
setPublishedCount(res.count);
|
3413
3689
|
const unpublishedEntries = rows.filter((row) => {
|
3414
3690
|
return !entriesToPublish.includes(row.documentId);
|
3415
3691
|
});
|
3416
3692
|
setListViewSelectedDocuments(unpublishedEntries);
|
3417
3693
|
}
|
3418
3694
|
};
|
3419
|
-
const getFormattedCountMessage = () => {
|
3420
|
-
if (publishedCount) {
|
3421
|
-
return formatMessage(
|
3422
|
-
{
|
3423
|
-
id: getTranslation("containers.list.selectedEntriesModal.publishedCount"),
|
3424
|
-
defaultMessage: "<b>{publishedCount}</b> {publishedCount, plural, =0 {entries} one {entry} other {entries}} published. <b>{withErrorsCount}</b> {withErrorsCount, plural, =0 {entries} one {entry} other {entries}} waiting for action."
|
3425
|
-
},
|
3426
|
-
{
|
3427
|
-
publishedCount,
|
3428
|
-
withErrorsCount: selectedEntriesWithErrorsCount,
|
3429
|
-
b: BoldChunk
|
3430
|
-
}
|
3431
|
-
);
|
3432
|
-
}
|
3433
|
-
return formatMessage(
|
3434
|
-
{
|
3435
|
-
id: getTranslation("containers.list.selectedEntriesModal.selectedCount"),
|
3436
|
-
defaultMessage: "<b>{alreadyPublishedCount}</b> {alreadyPublishedCount, plural, =0 {entries} one {entry} other {entries}} already published. <b>{readyToPublishCount}</b> {readyToPublishCount, plural, =0 {entries} one {entry} other {entries}} ready to publish. <b>{withErrorsCount}</b> {withErrorsCount, plural, =0 {entries} one {entry} other {entries}} waiting for action."
|
3437
|
-
},
|
3438
|
-
{
|
3439
|
-
readyToPublishCount: selectedEntriesWithNoErrorsCount,
|
3440
|
-
withErrorsCount: selectedEntriesWithErrorsCount,
|
3441
|
-
alreadyPublishedCount: selectedEntriesPublished,
|
3442
|
-
b: BoldChunk
|
3443
|
-
}
|
3444
|
-
);
|
3445
|
-
};
|
3446
3695
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
3447
3696
|
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Modal.Body, { children: [
|
3448
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
3449
|
-
|
3697
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
3698
|
+
PublicationStatusGrid,
|
3699
|
+
{
|
3700
|
+
entriesReadyToPublishCount: selectedEntriesWithNoErrorsCount - selectedEntriesModifiedCount,
|
3701
|
+
entriesPublishedCount: selectedEntriesPublishedCount,
|
3702
|
+
entriesModifiedCount: selectedEntriesModifiedCount,
|
3703
|
+
entriesWithErrorsCount: selectedEntriesWithErrorsCount
|
3704
|
+
}
|
3705
|
+
),
|
3706
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { marginTop: 7, children: /* @__PURE__ */ jsxRuntime.jsx(
|
3450
3707
|
SelectedEntriesTableContent,
|
3451
3708
|
{
|
3452
3709
|
isPublishing: isSubmittingForm,
|
@@ -3467,7 +3724,7 @@ const SelectedEntriesModalContent = ({
|
|
3467
3724
|
designSystem.Button,
|
3468
3725
|
{
|
3469
3726
|
onClick: toggleDialog,
|
3470
|
-
disabled: selectedEntries.length === 0 || selectedEntries.length === selectedEntriesWithErrorsCount ||
|
3727
|
+
disabled: selectedEntries.length === 0 || selectedEntries.length === selectedEntriesWithErrorsCount || selectedEntriesPublishedCount === selectedEntries.length || isLoading,
|
3471
3728
|
loading: isSubmittingForm,
|
3472
3729
|
children: formatMessage({ id: "app.utils.publish", defaultMessage: "Publish" })
|
3473
3730
|
}
|
@@ -3493,8 +3750,7 @@ const PublishAction = ({ documents, model }) => {
|
|
3493
3750
|
const refetchList = () => {
|
3494
3751
|
contentManagerApi.util.invalidateTags([{ type: "Document", id: `${model}_LIST` }]);
|
3495
3752
|
};
|
3496
|
-
if (!showPublishButton)
|
3497
|
-
return null;
|
3753
|
+
if (!showPublishButton) return null;
|
3498
3754
|
return {
|
3499
3755
|
actionType: "publish",
|
3500
3756
|
variant: "tertiary",
|
@@ -3562,8 +3818,7 @@ const DeleteAction = ({ documents, model }) => {
|
|
3562
3818
|
selectRow([]);
|
3563
3819
|
}
|
3564
3820
|
};
|
3565
|
-
if (!hasDeletePermission)
|
3566
|
-
return null;
|
3821
|
+
if (!hasDeletePermission) return null;
|
3567
3822
|
return {
|
3568
3823
|
variant: "danger-light",
|
3569
3824
|
label: formatMessage({ id: "global.delete", defaultMessage: "Delete" }),
|
@@ -3612,8 +3867,7 @@ const UnpublishAction = ({ documents, model }) => {
|
|
3612
3867
|
}
|
3613
3868
|
};
|
3614
3869
|
const showUnpublishButton = hasDraftAndPublishEnabled && hasPublishPermission && documents.some((entry) => entry.status === "published" || entry.status === "modified");
|
3615
|
-
if (!showUnpublishButton)
|
3616
|
-
return null;
|
3870
|
+
if (!showUnpublishButton) return null;
|
3617
3871
|
return {
|
3618
3872
|
variant: "tertiary",
|
3619
3873
|
label: formatMessage({ id: "app.utils.unpublish", defaultMessage: "Unpublish" }),
|
@@ -3718,7 +3972,7 @@ const TableActions = ({ document }) => {
|
|
3718
3972
|
strapiAdmin.DescriptionComponentRenderer,
|
3719
3973
|
{
|
3720
3974
|
props,
|
3721
|
-
descriptions: plugins["content-manager"].apis.getDocumentActions().filter((action) => action.name !== "PublishAction"),
|
3975
|
+
descriptions: plugins["content-manager"].apis.getDocumentActions("table-row").filter((action) => action.name !== "PublishAction"),
|
3722
3976
|
children: (actions2) => {
|
3723
3977
|
const tableRowActions = actions2.filter((action) => {
|
3724
3978
|
const positions = Array.isArray(action.position) ? action.position : [action.position];
|
@@ -3777,6 +4031,7 @@ const EditAction = ({ documentId }) => {
|
|
3777
4031
|
};
|
3778
4032
|
};
|
3779
4033
|
EditAction.type = "edit";
|
4034
|
+
EditAction.position = "table-row";
|
3780
4035
|
const StyledPencil = styledComponents.styled(Icons.Pencil)`
|
3781
4036
|
path {
|
3782
4037
|
fill: currentColor;
|
@@ -3853,6 +4108,7 @@ const CloneAction = ({ model, documentId }) => {
|
|
3853
4108
|
};
|
3854
4109
|
};
|
3855
4110
|
CloneAction.type = "clone";
|
4111
|
+
CloneAction.position = "table-row";
|
3856
4112
|
const StyledDuplicate = styledComponents.styled(Icons.Duplicate)`
|
3857
4113
|
path {
|
3858
4114
|
fill: currentColor;
|
@@ -3939,7 +4195,14 @@ class ContentManagerPlugin {
|
|
3939
4195
|
addDocumentHeaderAction: this.addDocumentHeaderAction.bind(this),
|
3940
4196
|
addEditViewSidePanel: this.addEditViewSidePanel.bind(this),
|
3941
4197
|
getBulkActions: () => this.bulkActions,
|
3942
|
-
getDocumentActions: () =>
|
4198
|
+
getDocumentActions: (position) => {
|
4199
|
+
if (position) {
|
4200
|
+
return this.documentActions.filter(
|
4201
|
+
(action) => action.position == void 0 || [action.position].flat().includes(position)
|
4202
|
+
);
|
4203
|
+
}
|
4204
|
+
return this.documentActions;
|
4205
|
+
},
|
3943
4206
|
getEditViewSidePanels: () => this.editViewSidePanels,
|
3944
4207
|
getHeaderActions: () => this.headerActions
|
3945
4208
|
}
|
@@ -3949,10 +4212,8 @@ class ContentManagerPlugin {
|
|
3949
4212
|
const getPrintableType = (value) => {
|
3950
4213
|
const nativeType = typeof value;
|
3951
4214
|
if (nativeType === "object") {
|
3952
|
-
if (value === null)
|
3953
|
-
|
3954
|
-
if (Array.isArray(value))
|
3955
|
-
return "array";
|
4215
|
+
if (value === null) return "null";
|
4216
|
+
if (Array.isArray(value)) return "array";
|
3956
4217
|
if (value instanceof Object && value.constructor.name !== "Object") {
|
3957
4218
|
return value.constructor.name;
|
3958
4219
|
}
|
@@ -3963,17 +4224,27 @@ const HistoryAction = ({ model, document }) => {
|
|
3963
4224
|
const { formatMessage } = reactIntl.useIntl();
|
3964
4225
|
const [{ query }] = strapiAdmin.useQueryParams();
|
3965
4226
|
const navigate = reactRouterDom.useNavigate();
|
4227
|
+
const { trackUsage } = strapiAdmin.useTracking();
|
4228
|
+
const { pathname } = reactRouterDom.useLocation();
|
3966
4229
|
const pluginsQueryParams = qs.stringify({ plugins: query.plugins }, { encode: false });
|
3967
4230
|
if (!window.strapi.features.isEnabled("cms-content-history")) {
|
3968
4231
|
return null;
|
3969
4232
|
}
|
4233
|
+
const handleOnClick = () => {
|
4234
|
+
const destination = { pathname: "history", search: pluginsQueryParams };
|
4235
|
+
trackUsage("willNavigate", {
|
4236
|
+
from: pathname,
|
4237
|
+
to: `${pathname}/${destination.pathname}`
|
4238
|
+
});
|
4239
|
+
navigate(destination);
|
4240
|
+
};
|
3970
4241
|
return {
|
3971
4242
|
icon: /* @__PURE__ */ jsxRuntime.jsx(Icons.ClockCounterClockwise, {}),
|
3972
4243
|
label: formatMessage({
|
3973
4244
|
id: "content-manager.history.document-action",
|
3974
4245
|
defaultMessage: "Content History"
|
3975
4246
|
}),
|
3976
|
-
onClick:
|
4247
|
+
onClick: handleOnClick,
|
3977
4248
|
disabled: (
|
3978
4249
|
/**
|
3979
4250
|
* The user is creating a new document.
|
@@ -3995,6 +4266,7 @@ const HistoryAction = ({ model, document }) => {
|
|
3995
4266
|
};
|
3996
4267
|
};
|
3997
4268
|
HistoryAction.type = "history";
|
4269
|
+
HistoryAction.position = "header";
|
3998
4270
|
const historyAdmin = {
|
3999
4271
|
bootstrap(app) {
|
4000
4272
|
const { addDocumentAction } = app.getPlugin("content-manager").apis;
|
@@ -4041,6 +4313,88 @@ const { setInitialData } = actions;
|
|
4041
4313
|
const reducer = toolkit.combineReducers({
|
4042
4314
|
app: reducer$1
|
4043
4315
|
});
|
4316
|
+
const previewApi = contentManagerApi.injectEndpoints({
|
4317
|
+
endpoints: (builder) => ({
|
4318
|
+
getPreviewUrl: builder.query({
|
4319
|
+
query({ query, params }) {
|
4320
|
+
return {
|
4321
|
+
url: `/content-manager/preview/url/${params.contentType}`,
|
4322
|
+
method: "GET",
|
4323
|
+
config: {
|
4324
|
+
params: query
|
4325
|
+
}
|
4326
|
+
};
|
4327
|
+
}
|
4328
|
+
})
|
4329
|
+
})
|
4330
|
+
});
|
4331
|
+
const { useGetPreviewUrlQuery } = previewApi;
|
4332
|
+
const ConditionalTooltip = ({ isShown, label, children }) => {
|
4333
|
+
if (isShown) {
|
4334
|
+
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tooltip, { label, children });
|
4335
|
+
}
|
4336
|
+
return children;
|
4337
|
+
};
|
4338
|
+
const PreviewSidePanel = ({ model, documentId, document }) => {
|
4339
|
+
const { formatMessage } = reactIntl.useIntl();
|
4340
|
+
const { trackUsage } = strapiAdmin.useTracking();
|
4341
|
+
const { pathname } = reactRouterDom.useLocation();
|
4342
|
+
const [{ query }] = strapiAdmin.useQueryParams();
|
4343
|
+
const isModified = strapiAdmin.useForm("PreviewSidePanel", (state) => state.modified);
|
4344
|
+
const { data, error } = useGetPreviewUrlQuery({
|
4345
|
+
params: {
|
4346
|
+
contentType: model
|
4347
|
+
},
|
4348
|
+
query: {
|
4349
|
+
documentId,
|
4350
|
+
locale: document?.locale,
|
4351
|
+
status: document?.status
|
4352
|
+
}
|
4353
|
+
});
|
4354
|
+
if (!data?.data?.url || error) {
|
4355
|
+
return null;
|
4356
|
+
}
|
4357
|
+
const trackNavigation = () => {
|
4358
|
+
const destinationPathname = pathname.replace(/\/$/, "") + "/preview";
|
4359
|
+
trackUsage("willNavigate", { from: pathname, to: destinationPathname });
|
4360
|
+
};
|
4361
|
+
return {
|
4362
|
+
title: formatMessage({ id: "content-manager.preview.panel.title", defaultMessage: "Preview" }),
|
4363
|
+
content: /* @__PURE__ */ jsxRuntime.jsx(
|
4364
|
+
ConditionalTooltip,
|
4365
|
+
{
|
4366
|
+
label: formatMessage({
|
4367
|
+
id: "content-manager.preview.panel.button-disabled-tooltip",
|
4368
|
+
defaultMessage: "Please save to open the preview"
|
4369
|
+
}),
|
4370
|
+
isShown: isModified,
|
4371
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { cursor: "not-allowed", width: "100%", children: /* @__PURE__ */ jsxRuntime.jsx(
|
4372
|
+
designSystem.Button,
|
4373
|
+
{
|
4374
|
+
variant: "tertiary",
|
4375
|
+
tag: reactRouterDom.Link,
|
4376
|
+
to: { pathname: "preview", search: qs.stringify(query, { encode: false }) },
|
4377
|
+
onClick: trackNavigation,
|
4378
|
+
width: "100%",
|
4379
|
+
disabled: isModified,
|
4380
|
+
pointerEvents: isModified ? "none" : void 0,
|
4381
|
+
tabIndex: isModified ? -1 : void 0,
|
4382
|
+
children: formatMessage({
|
4383
|
+
id: "content-manager.preview.panel.button",
|
4384
|
+
defaultMessage: "Open preview"
|
4385
|
+
})
|
4386
|
+
}
|
4387
|
+
) })
|
4388
|
+
}
|
4389
|
+
)
|
4390
|
+
};
|
4391
|
+
};
|
4392
|
+
const previewAdmin = {
|
4393
|
+
bootstrap(app) {
|
4394
|
+
const contentManagerPluginApis = app.getPlugin("content-manager").apis;
|
4395
|
+
contentManagerPluginApis.addEditViewSidePanel([PreviewSidePanel]);
|
4396
|
+
}
|
4397
|
+
};
|
4044
4398
|
const index = {
|
4045
4399
|
register(app) {
|
4046
4400
|
const cm = new ContentManagerPlugin();
|
@@ -4060,7 +4414,7 @@ const index = {
|
|
4060
4414
|
app.router.addRoute({
|
4061
4415
|
path: "content-manager/*",
|
4062
4416
|
lazy: async () => {
|
4063
|
-
const { Layout } = await Promise.resolve().then(() => require("./layout-
|
4417
|
+
const { Layout } = await Promise.resolve().then(() => require("./layout-Cl0NhlQB.js"));
|
4064
4418
|
return {
|
4065
4419
|
Component: Layout
|
4066
4420
|
};
|
@@ -4073,11 +4427,14 @@ const index = {
|
|
4073
4427
|
if (typeof historyAdmin.bootstrap === "function") {
|
4074
4428
|
historyAdmin.bootstrap(app);
|
4075
4429
|
}
|
4430
|
+
if (typeof previewAdmin.bootstrap === "function") {
|
4431
|
+
previewAdmin.bootstrap(app);
|
4432
|
+
}
|
4076
4433
|
},
|
4077
4434
|
async registerTrads({ locales }) {
|
4078
4435
|
const importedTrads = await Promise.all(
|
4079
4436
|
locales.map((locale) => {
|
4080
|
-
return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/ar.json": () => Promise.resolve().then(() => require("./ar-BUUWXIYu.js")), "./translations/ca.json": () => Promise.resolve().then(() => require("./ca-Cmk45QO6.js")), "./translations/cs.json": () => Promise.resolve().then(() => require("./cs-CkJy6B2v.js")), "./translations/de.json": () => Promise.resolve().then(() => require("./de-CCEmbAah.js")), "./translations/en.json": () => Promise.resolve().then(() => require("./en-
|
4437
|
+
return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/ar.json": () => Promise.resolve().then(() => require("./ar-BUUWXIYu.js")), "./translations/ca.json": () => Promise.resolve().then(() => require("./ca-Cmk45QO6.js")), "./translations/cs.json": () => Promise.resolve().then(() => require("./cs-CkJy6B2v.js")), "./translations/de.json": () => Promise.resolve().then(() => require("./de-CCEmbAah.js")), "./translations/en.json": () => Promise.resolve().then(() => require("./en-BR48D_RH.js")), "./translations/es.json": () => Promise.resolve().then(() => require("./es-9K52xZIr.js")), "./translations/eu.json": () => Promise.resolve().then(() => require("./eu-VDH-3ovk.js")), "./translations/fr.json": () => Promise.resolve().then(() => require("./fr-C43IbhA_.js")), "./translations/gu.json": () => Promise.resolve().then(() => require("./gu-BRmF601H.js")), "./translations/hi.json": () => Promise.resolve().then(() => require("./hi-CCJBptSq.js")), "./translations/hu.json": () => Promise.resolve().then(() => require("./hu-sNV_yLYy.js")), "./translations/id.json": () => Promise.resolve().then(() => require("./id-B5Ser98A.js")), "./translations/it.json": () => Promise.resolve().then(() => require("./it-DkBIs7vD.js")), "./translations/ja.json": () => Promise.resolve().then(() => require("./ja-7sfIbjxE.js")), "./translations/ko.json": () => Promise.resolve().then(() => require("./ko-woFZPmLk.js")), "./translations/ml.json": () => Promise.resolve().then(() => require("./ml-C2W8N8k1.js")), "./translations/ms.json": () => Promise.resolve().then(() => require("./ms-BuFotyP_.js")), "./translations/nl.json": () => Promise.resolve().then(() => require("./nl-bbEOHChV.js")), "./translations/pl.json": () => Promise.resolve().then(() => require("./pl-uzwG-hk7.js")), "./translations/pt-BR.json": () => Promise.resolve().then(() => require("./pt-BR-BiOz37D9.js")), "./translations/pt.json": () => Promise.resolve().then(() => require("./pt-CeXQuq50.js")), "./translations/ru.json": () => Promise.resolve().then(() => require("./ru-BT3ybNny.js")), "./translations/sa.json": () => Promise.resolve().then(() => require("./sa-CcvkYInH.js")), "./translations/sk.json": () => Promise.resolve().then(() => require("./sk-CvY09Xjv.js")), "./translations/sv.json": () => Promise.resolve().then(() => require("./sv-MYDuzgvT.js")), "./translations/th.json": () => Promise.resolve().then(() => require("./th-D9_GfAjc.js")), "./translations/tr.json": () => Promise.resolve().then(() => require("./tr-D9UH-O_R.js")), "./translations/uk.json": () => Promise.resolve().then(() => require("./uk-C8EiqJY7.js")), "./translations/vi.json": () => Promise.resolve().then(() => require("./vi-CJlYDheJ.js")), "./translations/zh-Hans.json": () => Promise.resolve().then(() => require("./zh-Hans-9kOncHGw.js")), "./translations/zh.json": () => Promise.resolve().then(() => require("./zh-CQQfszqR.js")) }), `./translations/${locale}.json`, 3).then(({ default: data }) => {
|
4081
4438
|
return {
|
4082
4439
|
data: prefixPluginTranslations(data, PLUGIN_ID),
|
4083
4440
|
locale
|
@@ -4099,7 +4456,6 @@ exports.CLONE_PATH = CLONE_PATH;
|
|
4099
4456
|
exports.COLLECTION_TYPES = COLLECTION_TYPES;
|
4100
4457
|
exports.CREATOR_FIELDS = CREATOR_FIELDS;
|
4101
4458
|
exports.DEFAULT_SETTINGS = DEFAULT_SETTINGS;
|
4102
|
-
exports.DOCUMENT_META_FIELDS = DOCUMENT_META_FIELDS;
|
4103
4459
|
exports.DocumentRBAC = DocumentRBAC;
|
4104
4460
|
exports.DocumentStatus = DocumentStatus;
|
4105
4461
|
exports.HOOKS = HOOKS;
|
@@ -4116,13 +4472,17 @@ exports.checkIfAttributeIsDisplayable = checkIfAttributeIsDisplayable;
|
|
4116
4472
|
exports.contentManagerApi = contentManagerApi;
|
4117
4473
|
exports.convertEditLayoutToFieldLayouts = convertEditLayoutToFieldLayouts;
|
4118
4474
|
exports.convertListLayoutToFieldLayouts = convertListLayoutToFieldLayouts;
|
4475
|
+
exports.createDefaultForm = createDefaultForm;
|
4119
4476
|
exports.createYupSchema = createYupSchema;
|
4120
4477
|
exports.extractContentTypeComponents = extractContentTypeComponents;
|
4121
4478
|
exports.getDisplayName = getDisplayName;
|
4122
4479
|
exports.getMainField = getMainField;
|
4123
4480
|
exports.getTranslation = getTranslation;
|
4124
4481
|
exports.index = index;
|
4482
|
+
exports.prepareTempKeys = prepareTempKeys;
|
4483
|
+
exports.removeFieldsThatDontExistOnSchema = removeFieldsThatDontExistOnSchema;
|
4125
4484
|
exports.setInitialData = setInitialData;
|
4485
|
+
exports.transformDocument = transformDocument;
|
4126
4486
|
exports.useContentManagerContext = useContentManagerContext;
|
4127
4487
|
exports.useContentTypeSchema = useContentTypeSchema;
|
4128
4488
|
exports.useDoc = useDoc;
|
@@ -4135,5 +4495,6 @@ exports.useGetAllContentTypeSettingsQuery = useGetAllContentTypeSettingsQuery;
|
|
4135
4495
|
exports.useGetAllDocumentsQuery = useGetAllDocumentsQuery;
|
4136
4496
|
exports.useGetContentTypeConfigurationQuery = useGetContentTypeConfigurationQuery;
|
4137
4497
|
exports.useGetInitialDataQuery = useGetInitialDataQuery;
|
4498
|
+
exports.useGetPreviewUrlQuery = useGetPreviewUrlQuery;
|
4138
4499
|
exports.useUpdateContentTypeConfigurationMutation = useUpdateContentTypeConfigurationMutation;
|
4139
|
-
//# sourceMappingURL=index-
|
4500
|
+
//# sourceMappingURL=index-DQsvBb_N.js.map
|