@strapi/content-manager 0.0.0-experimental.f49f46a1c17445a39e8af3f63124bcccf73842e6 → 0.0.0-experimental.f6f58027a6338ed795382f2d1c8882158b242361
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-D3ZWDAHG.mjs → ComponentConfigurationPage-D4H-v0et.mjs} +3 -3
- package/dist/_chunks/{ComponentConfigurationPage-D3ZWDAHG.mjs.map → ComponentConfigurationPage-D4H-v0et.mjs.map} +1 -1
- package/dist/_chunks/{ComponentConfigurationPage-ClKl_TA2.js → ComponentConfigurationPage-DdkVGfXC.js} +4 -5
- package/dist/_chunks/{ComponentConfigurationPage-ClKl_TA2.js.map → ComponentConfigurationPage-DdkVGfXC.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-BYCBSJxP.mjs → EditConfigurationPage-D1nvB7Br.mjs} +3 -3
- package/dist/_chunks/{EditConfigurationPage-BYCBSJxP.mjs.map → EditConfigurationPage-D1nvB7Br.mjs.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-OWez0Kxp.js → EditConfigurationPage-LYEvR4fW.js} +4 -5
- package/dist/_chunks/{EditConfigurationPage-OWez0Kxp.js.map → EditConfigurationPage-LYEvR4fW.js.map} +1 -1
- package/dist/_chunks/{EditViewPage-5pdbvsO_.mjs → EditViewPage-Bcnff6Vd.mjs} +11 -74
- package/dist/_chunks/EditViewPage-Bcnff6Vd.mjs.map +1 -0
- package/dist/_chunks/{EditViewPage-BEs5iGDi.js → EditViewPage-DqelJ9UK.js} +14 -78
- package/dist/_chunks/EditViewPage-DqelJ9UK.js.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-CoRxWJOz.js → Form-CnHfBeiB.js} +5 -6
- package/dist/_chunks/{Form-CoRxWJOz.js.map → Form-CnHfBeiB.js.map} +1 -1
- package/dist/_chunks/{Form-CGwM_-5c.mjs → Form-CzPCJi3B.mjs} +3 -3
- package/dist/_chunks/{Form-CGwM_-5c.mjs.map → Form-CzPCJi3B.mjs.map} +1 -1
- package/dist/_chunks/{History-DEvr3Q_V.mjs → History-CcmSn3Mj.mjs} +33 -9
- package/dist/_chunks/History-CcmSn3Mj.mjs.map +1 -0
- package/dist/_chunks/{History-BcUTQrfG.js → History-zArjENzj.js} +45 -22
- package/dist/_chunks/History-zArjENzj.js.map +1 -0
- package/dist/_chunks/{Field-DNHm4wHx.js → Input-CDHKQd7o.js} +1321 -1317
- package/dist/_chunks/Input-CDHKQd7o.js.map +1 -0
- package/dist/_chunks/{Field-DcKuFHYK.mjs → Input-aV8SSoTa.mjs} +1235 -1231
- package/dist/_chunks/Input-aV8SSoTa.mjs.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-BM4zZZcM.mjs → ListConfigurationPage-BPvzENJJ.mjs} +3 -3
- package/dist/_chunks/{ListConfigurationPage-BM4zZZcM.mjs.map → ListConfigurationPage-BPvzENJJ.mjs.map} +1 -1
- package/dist/_chunks/{ListConfigurationPage-BE_Ho7tV.js → ListConfigurationPage-ByZAO_9H.js} +4 -5
- package/dist/_chunks/{ListConfigurationPage-BE_Ho7tV.js.map → ListConfigurationPage-ByZAO_9H.js.map} +1 -1
- package/dist/_chunks/{ListViewPage-BkT8Eao0.js → ListViewPage-BVKBeQAA.js} +61 -58
- package/dist/_chunks/ListViewPage-BVKBeQAA.js.map +1 -0
- package/dist/_chunks/{ListViewPage-BK2mkrql.mjs → ListViewPage-HljQVnFH.mjs} +55 -51
- package/dist/_chunks/ListViewPage-HljQVnFH.mjs.map +1 -0
- package/dist/_chunks/{NoContentTypePage-C8mtyc4H.js → NoContentTypePage-BV5zfDxr.js} +2 -2
- package/dist/_chunks/{NoContentTypePage-C8mtyc4H.js.map → NoContentTypePage-BV5zfDxr.js.map} +1 -1
- package/dist/_chunks/{NoContentTypePage-BvcAutu9.mjs → NoContentTypePage-BfHaSM-K.mjs} +2 -2
- package/dist/_chunks/{NoContentTypePage-BvcAutu9.mjs.map → NoContentTypePage-BfHaSM-K.mjs.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-BmbRz7PR.mjs → NoPermissionsPage-D6ze2nQL.mjs} +2 -2
- package/dist/_chunks/{NoPermissionsPage-BmbRz7PR.mjs.map → NoPermissionsPage-D6ze2nQL.mjs.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-B5Y9Y78B.js → NoPermissionsPage-vdNpc6jb.js} +2 -2
- package/dist/_chunks/{NoPermissionsPage-B5Y9Y78B.js.map → NoPermissionsPage-vdNpc6jb.js.map} +1 -1
- package/dist/_chunks/{Preview-BF8ZDYqS.js → Preview-DEHdENT1.js} +35 -16
- package/dist/_chunks/Preview-DEHdENT1.js.map +1 -0
- package/dist/_chunks/{Preview-DcexhKJE.mjs → Preview-vfWOtPG5.mjs} +36 -16
- package/dist/_chunks/Preview-vfWOtPG5.mjs.map +1 -0
- package/dist/_chunks/{Relations-BjIzc4EK.mjs → Relations-B7_hbF0w.mjs} +9 -10
- package/dist/_chunks/Relations-B7_hbF0w.mjs.map +1 -0
- package/dist/_chunks/{Relations-BKnoK1R0.js → Relations-DcoOBejP.js} +10 -12
- package/dist/_chunks/Relations-DcoOBejP.js.map +1 -0
- package/dist/_chunks/{en-DTWPCdTS.js → en-BR48D_RH.js} +11 -3
- package/dist/_chunks/{en-DTWPCdTS.js.map → en-BR48D_RH.js.map} +1 -1
- package/dist/_chunks/{en-CfIXaZf9.mjs → en-D65uIF6Y.mjs} +11 -3
- package/dist/_chunks/{en-CfIXaZf9.mjs.map → en-D65uIF6Y.mjs.map} +1 -1
- package/dist/_chunks/{fr-B2Kyv8Z9.js → fr-C43IbhA_.js} +4 -1
- package/dist/_chunks/{fr-B2Kyv8Z9.js.map → fr-C43IbhA_.js.map} +1 -1
- package/dist/_chunks/{fr--pg5jUbt.mjs → fr-DBseuRuB.mjs} +4 -1
- package/dist/_chunks/{fr--pg5jUbt.mjs.map → fr-DBseuRuB.mjs.map} +1 -1
- package/dist/_chunks/hooks-BAaaKPS_.js.map +1 -1
- package/dist/_chunks/{index-DOzAG2cq.js → index-CxLSGwnk.js} +482 -188
- package/dist/_chunks/index-CxLSGwnk.js.map +1 -0
- package/dist/_chunks/{index-BW-rXkjn.mjs → index-EH8ZtHd5.mjs} +500 -205
- package/dist/_chunks/index-EH8ZtHd5.mjs.map +1 -0
- package/dist/_chunks/{layout-DFVbgjp2.mjs → layout-CxDMdJ13.mjs} +4 -4
- package/dist/_chunks/{layout-DFVbgjp2.mjs.map → layout-CxDMdJ13.mjs.map} +1 -1
- package/dist/_chunks/{layout-RC3W2obV.js → layout-DSeUTfMv.js} +5 -6
- package/dist/_chunks/{layout-RC3W2obV.js.map → layout-DSeUTfMv.js.map} +1 -1
- package/dist/_chunks/objects-BcXOv6_9.js.map +1 -1
- package/dist/_chunks/objects-D6yBsdmx.mjs.map +1 -1
- package/dist/_chunks/{relations-Dogh8HWI.mjs → relations-B8_Uu38Q.mjs} +17 -3
- package/dist/_chunks/relations-B8_Uu38Q.mjs.map +1 -0
- package/dist/_chunks/{relations-zam7-5H7.js → relations-S5nNKdN3.js} +16 -2
- package/dist/_chunks/relations-S5nNKdN3.js.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-CtcjDB3L.js → usePrev-B9w_-eYc.js} +1 -14
- package/dist/_chunks/usePrev-B9w_-eYc.js.map +1 -0
- package/dist/_chunks/usePrev-DH6iah0A.mjs +16 -0
- package/dist/_chunks/usePrev-DH6iah0A.mjs.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/components/DocumentActions.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/DocumentStatus.d.ts +1 -1
- 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/pages/Preview.d.ts +1 -1
- package/dist/admin/src/preview/services/preview.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 +230 -187
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +231 -187
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/src/controllers/utils/metadata.d.ts +1 -0
- 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/utils.d.ts +6 -10
- package/dist/server/src/history/services/utils.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +3 -2
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -1
- package/dist/server/src/preview/index.d.ts.map +1 -1
- package/dist/server/src/preview/services/index.d.ts +1 -0
- package/dist/server/src/preview/services/index.d.ts.map +1 -1
- package/dist/server/src/preview/services/preview-config.d.ts +2 -0
- package/dist/server/src/preview/services/preview-config.d.ts.map +1 -1
- package/dist/server/src/preview/utils.d.ts +1 -0
- package/dist/server/src/preview/utils.d.ts.map +1 -1
- package/dist/server/src/register.d.ts.map +1 -1
- package/dist/server/src/services/document-metadata.d.ts +4 -2
- package/dist/server/src/services/document-metadata.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +3 -2
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/utils/configuration/index.d.ts +2 -2
- package/dist/server/src/services/utils/configuration/layouts.d.ts +2 -2
- package/dist/server/src/services/utils/populate.d.ts +2 -2
- package/dist/server/src/services/utils/populate.d.ts.map +1 -1
- package/package.json +11 -10
- package/dist/_chunks/EditViewPage-5pdbvsO_.mjs.map +0 -1
- package/dist/_chunks/EditViewPage-BEs5iGDi.js.map +0 -1
- package/dist/_chunks/Field-DNHm4wHx.js.map +0 -1
- package/dist/_chunks/Field-DcKuFHYK.mjs.map +0 -1
- package/dist/_chunks/History-BcUTQrfG.js.map +0 -1
- package/dist/_chunks/History-DEvr3Q_V.mjs.map +0 -1
- package/dist/_chunks/ListViewPage-BK2mkrql.mjs.map +0 -1
- package/dist/_chunks/ListViewPage-BkT8Eao0.js.map +0 -1
- package/dist/_chunks/Preview-BF8ZDYqS.js.map +0 -1
- package/dist/_chunks/Preview-DcexhKJE.mjs.map +0 -1
- package/dist/_chunks/Relations-BKnoK1R0.js.map +0 -1
- package/dist/_chunks/Relations-BjIzc4EK.mjs.map +0 -1
- package/dist/_chunks/index-BW-rXkjn.mjs.map +0 -1
- package/dist/_chunks/index-DOzAG2cq.js.map +0 -1
- package/dist/_chunks/relations-Dogh8HWI.mjs.map +0 -1
- package/dist/_chunks/relations-zam7-5H7.js.map +0 -1
- package/dist/_chunks/useDebounce-CtcjDB3L.js.map +0 -1
- package/dist/_chunks/useDebounce-DmuSJIF3.mjs +0 -29
- package/dist/_chunks/useDebounce-DmuSJIF3.mjs.map +0 -1
- package/dist/admin/src/preview/constants.d.ts +0 -1
- package/dist/server/src/preview/constants.d.ts +0 -2
- package/dist/server/src/preview/constants.d.ts.map +0 -1
@@ -9,14 +9,14 @@ const reactIntl = require("react-intl");
|
|
9
9
|
const reactRouterDom = require("react-router-dom");
|
10
10
|
const styledComponents = require("styled-components");
|
11
11
|
const yup = require("yup");
|
12
|
+
const fractionalIndexing = require("fractional-indexing");
|
12
13
|
const pipe = require("lodash/fp/pipe");
|
13
|
-
const dateFns = require("date-fns");
|
14
14
|
const qs = require("qs");
|
15
|
+
const dateFns = require("date-fns");
|
15
16
|
const toolkit = require("@reduxjs/toolkit");
|
16
17
|
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
17
18
|
function _interopNamespace(e) {
|
18
|
-
if (e && e.__esModule)
|
19
|
-
return e;
|
19
|
+
if (e && e.__esModule) return e;
|
20
20
|
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
21
21
|
if (e) {
|
22
22
|
for (const k in e) {
|
@@ -36,13 +36,20 @@ const React__namespace = /* @__PURE__ */ _interopNamespace(React);
|
|
36
36
|
const mapValues__default = /* @__PURE__ */ _interopDefault(mapValues);
|
37
37
|
const yup__namespace = /* @__PURE__ */ _interopNamespace(yup);
|
38
38
|
const pipe__default = /* @__PURE__ */ _interopDefault(pipe);
|
39
|
-
const __variableDynamicImportRuntimeHelper = (glob, path) => {
|
39
|
+
const __variableDynamicImportRuntimeHelper = (glob, path, segs) => {
|
40
40
|
const v = glob[path];
|
41
41
|
if (v) {
|
42
42
|
return typeof v === "function" ? v() : Promise.resolve(v);
|
43
43
|
}
|
44
44
|
return new Promise((_, reject) => {
|
45
|
-
(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
|
+
);
|
46
53
|
});
|
47
54
|
};
|
48
55
|
const PLUGIN_ID = "content-manager";
|
@@ -181,6 +188,113 @@ const extractAndDedupeFields = (permissions = []) => permissions.flatMap((permis
|
|
181
188
|
(field, index2, arr) => arr.indexOf(field) === index2 && typeof field === "string"
|
182
189
|
);
|
183
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
|
+
};
|
184
298
|
const contentManagerApi = strapiAdmin.adminApi.enhanceEndpoints({
|
185
299
|
addTagTypes: [
|
186
300
|
"ComponentConfiguration",
|
@@ -190,7 +304,8 @@ const contentManagerApi = strapiAdmin.adminApi.enhanceEndpoints({
|
|
190
304
|
"InitialData",
|
191
305
|
"HistoryVersion",
|
192
306
|
"Relations",
|
193
|
-
"UidAvailability"
|
307
|
+
"UidAvailability",
|
308
|
+
"RecentDocumentList"
|
194
309
|
]
|
195
310
|
});
|
196
311
|
const documentApi = contentManagerApi.injectEndpoints({
|
@@ -208,7 +323,7 @@ const documentApi = contentManagerApi.injectEndpoints({
|
|
208
323
|
if (error) {
|
209
324
|
return [];
|
210
325
|
}
|
211
|
-
return [{ type: "Document", id: `${model}_LIST` }];
|
326
|
+
return [{ type: "Document", id: `${model}_LIST` }, "RecentDocumentList"];
|
212
327
|
}
|
213
328
|
}),
|
214
329
|
cloneDocument: builder.mutation({
|
@@ -222,7 +337,8 @@ const documentApi = contentManagerApi.injectEndpoints({
|
|
222
337
|
}),
|
223
338
|
invalidatesTags: (_result, _error, { model }) => [
|
224
339
|
{ type: "Document", id: `${model}_LIST` },
|
225
|
-
{ type: "UidAvailability", id: model }
|
340
|
+
{ type: "UidAvailability", id: model },
|
341
|
+
"RecentDocumentList"
|
226
342
|
]
|
227
343
|
}),
|
228
344
|
/**
|
@@ -241,8 +357,21 @@ const documentApi = contentManagerApi.injectEndpoints({
|
|
241
357
|
invalidatesTags: (result, _error, { model }) => [
|
242
358
|
{ type: "Document", id: `${model}_LIST` },
|
243
359
|
"Relations",
|
244
|
-
{ type: "UidAvailability", id: model }
|
245
|
-
|
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
|
+
}
|
246
375
|
}),
|
247
376
|
deleteDocument: builder.mutation({
|
248
377
|
query: ({ collectionType, model, documentId, params }) => ({
|
@@ -253,7 +382,8 @@ const documentApi = contentManagerApi.injectEndpoints({
|
|
253
382
|
}
|
254
383
|
}),
|
255
384
|
invalidatesTags: (_result, _error, { collectionType, model }) => [
|
256
|
-
{ type: "Document", id: collectionType !== SINGLE_TYPES ? `${model}_LIST` : model }
|
385
|
+
{ type: "Document", id: collectionType !== SINGLE_TYPES ? `${model}_LIST` : model },
|
386
|
+
"RecentDocumentList"
|
257
387
|
]
|
258
388
|
}),
|
259
389
|
deleteManyDocuments: builder.mutation({
|
@@ -265,7 +395,10 @@ const documentApi = contentManagerApi.injectEndpoints({
|
|
265
395
|
params
|
266
396
|
}
|
267
397
|
}),
|
268
|
-
invalidatesTags: (_res, _error, { model }) => [
|
398
|
+
invalidatesTags: (_res, _error, { model }) => [
|
399
|
+
{ type: "Document", id: `${model}_LIST` },
|
400
|
+
"RecentDocumentList"
|
401
|
+
]
|
269
402
|
}),
|
270
403
|
discardDocument: builder.mutation({
|
271
404
|
query: ({ collectionType, model, documentId, params }) => ({
|
@@ -283,7 +416,8 @@ const documentApi = contentManagerApi.injectEndpoints({
|
|
283
416
|
},
|
284
417
|
{ type: "Document", id: `${model}_LIST` },
|
285
418
|
"Relations",
|
286
|
-
{ type: "UidAvailability", id: model }
|
419
|
+
{ type: "UidAvailability", id: model },
|
420
|
+
"RecentDocumentList"
|
287
421
|
];
|
288
422
|
}
|
289
423
|
}),
|
@@ -296,7 +430,7 @@ const documentApi = contentManagerApi.injectEndpoints({
|
|
296
430
|
url: `/content-manager/collection-types/${model}`,
|
297
431
|
method: "GET",
|
298
432
|
config: {
|
299
|
-
params
|
433
|
+
params: qs.stringify(params, { encode: true })
|
300
434
|
}
|
301
435
|
}),
|
302
436
|
providesTags: (result, _error, arg) => {
|
@@ -378,7 +512,8 @@ const documentApi = contentManagerApi.injectEndpoints({
|
|
378
512
|
id: collectionType !== SINGLE_TYPES ? `${model}_${documentId}` : model
|
379
513
|
},
|
380
514
|
{ type: "Document", id: `${model}_LIST` },
|
381
|
-
"Relations"
|
515
|
+
"Relations",
|
516
|
+
"RecentDocumentList"
|
382
517
|
];
|
383
518
|
}
|
384
519
|
}),
|
@@ -409,7 +544,9 @@ const documentApi = contentManagerApi.injectEndpoints({
|
|
409
544
|
id: collectionType !== SINGLE_TYPES ? `${model}_${documentId}` : model
|
410
545
|
},
|
411
546
|
"Relations",
|
412
|
-
{ type: "UidAvailability", id: model }
|
547
|
+
{ type: "UidAvailability", id: model },
|
548
|
+
"RecentDocumentList",
|
549
|
+
"RecentDocumentList"
|
413
550
|
];
|
414
551
|
},
|
415
552
|
async onQueryStarted({ data, ...patch }, { dispatch, queryFulfilled }) {
|
@@ -439,7 +576,8 @@ const documentApi = contentManagerApi.injectEndpoints({
|
|
439
576
|
{
|
440
577
|
type: "Document",
|
441
578
|
id: collectionType !== SINGLE_TYPES ? `${model}_${documentId}` : model
|
442
|
-
}
|
579
|
+
},
|
580
|
+
"RecentDocumentList"
|
443
581
|
];
|
444
582
|
}
|
445
583
|
}),
|
@@ -452,7 +590,10 @@ const documentApi = contentManagerApi.injectEndpoints({
|
|
452
590
|
params
|
453
591
|
}
|
454
592
|
}),
|
455
|
-
invalidatesTags: (_res, _error, { model, documentIds }) =>
|
593
|
+
invalidatesTags: (_res, _error, { model, documentIds }) => [
|
594
|
+
...documentIds.map((id) => ({ type: "Document", id: `${model}_${id}` })),
|
595
|
+
"RecentDocumentList"
|
596
|
+
]
|
456
597
|
})
|
457
598
|
})
|
458
599
|
});
|
@@ -475,8 +616,7 @@ const {
|
|
475
616
|
useUnpublishManyDocumentsMutation
|
476
617
|
} = documentApi;
|
477
618
|
const buildValidParams = (query) => {
|
478
|
-
if (!query)
|
479
|
-
return query;
|
619
|
+
if (!query) return query;
|
480
620
|
const { plugins: _, ...validQueryParams } = {
|
481
621
|
...query,
|
482
622
|
...Object.values(query?.plugins ?? {}).reduce(
|
@@ -484,9 +624,6 @@ const buildValidParams = (query) => {
|
|
484
624
|
{}
|
485
625
|
)
|
486
626
|
};
|
487
|
-
if ("_q" in validQueryParams) {
|
488
|
-
validQueryParams._q = encodeURIComponent(validQueryParams._q);
|
489
|
-
}
|
490
627
|
return validQueryParams;
|
491
628
|
};
|
492
629
|
const isBaseQueryError = (error) => {
|
@@ -1127,6 +1264,7 @@ const convertListLayoutToFieldLayouts = (columns, attributes = {}, metadatas, co
|
|
1127
1264
|
const useDocument = (args, opts) => {
|
1128
1265
|
const { toggleNotification } = strapiAdmin.useNotification();
|
1129
1266
|
const { _unstableFormatAPIError: formatAPIError } = strapiAdmin.useAPIErrorHandler();
|
1267
|
+
const { formatMessage } = reactIntl.useIntl();
|
1130
1268
|
const {
|
1131
1269
|
currentData: data,
|
1132
1270
|
isLoading: isLoadingDocument,
|
@@ -1136,12 +1274,27 @@ const useDocument = (args, opts) => {
|
|
1136
1274
|
...opts,
|
1137
1275
|
skip: !args.documentId && args.collectionType !== SINGLE_TYPES || opts?.skip
|
1138
1276
|
});
|
1277
|
+
const document = data?.data;
|
1278
|
+
const meta = data?.meta;
|
1139
1279
|
const {
|
1140
1280
|
components,
|
1141
1281
|
schema,
|
1142
1282
|
schemas,
|
1143
1283
|
isLoading: isLoadingSchema
|
1144
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
|
+
};
|
1145
1298
|
React__namespace.useEffect(() => {
|
1146
1299
|
if (error) {
|
1147
1300
|
toggleNotification({
|
@@ -1157,14 +1310,14 @@ const useDocument = (args, opts) => {
|
|
1157
1310
|
return createYupSchema(schema.attributes, components);
|
1158
1311
|
}, [schema, components]);
|
1159
1312
|
const validate = React__namespace.useCallback(
|
1160
|
-
(
|
1313
|
+
(document2) => {
|
1161
1314
|
if (!validationSchema) {
|
1162
1315
|
throw new Error(
|
1163
1316
|
"There is no validation schema generated, this is likely due to the schema not being loaded yet."
|
1164
1317
|
);
|
1165
1318
|
}
|
1166
1319
|
try {
|
1167
|
-
validationSchema.validateSync(
|
1320
|
+
validationSchema.validateSync(document2, { abortEarly: false, strict: true });
|
1168
1321
|
return null;
|
1169
1322
|
} catch (error2) {
|
1170
1323
|
if (error2 instanceof yup.ValidationError) {
|
@@ -1175,17 +1328,29 @@ const useDocument = (args, opts) => {
|
|
1175
1328
|
},
|
1176
1329
|
[validationSchema]
|
1177
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
|
+
);
|
1178
1341
|
const isLoading = isLoadingDocument || isFetchingDocument || isLoadingSchema;
|
1179
1342
|
const hasError = !!error;
|
1180
1343
|
return {
|
1181
1344
|
components,
|
1182
|
-
document
|
1183
|
-
meta
|
1345
|
+
document,
|
1346
|
+
meta,
|
1184
1347
|
isLoading,
|
1185
1348
|
hasError,
|
1186
1349
|
schema,
|
1187
1350
|
schemas,
|
1188
|
-
validate
|
1351
|
+
validate,
|
1352
|
+
getTitle,
|
1353
|
+
getInitialFormValues
|
1189
1354
|
};
|
1190
1355
|
};
|
1191
1356
|
const useDoc = () => {
|
@@ -1686,7 +1851,7 @@ const useDocumentActions = () => {
|
|
1686
1851
|
};
|
1687
1852
|
};
|
1688
1853
|
const ProtectedHistoryPage = React__namespace.lazy(
|
1689
|
-
() => Promise.resolve().then(() => require("./History-
|
1854
|
+
() => Promise.resolve().then(() => require("./History-zArjENzj.js")).then((mod) => ({ default: mod.ProtectedHistoryPage }))
|
1690
1855
|
);
|
1691
1856
|
const routes$2 = [
|
1692
1857
|
{
|
@@ -1699,7 +1864,7 @@ const routes$2 = [
|
|
1699
1864
|
}
|
1700
1865
|
];
|
1701
1866
|
const ProtectedPreviewPage = React__namespace.lazy(
|
1702
|
-
() => Promise.resolve().then(() => require("./Preview-
|
1867
|
+
() => Promise.resolve().then(() => require("./Preview-DEHdENT1.js")).then((mod) => ({ default: mod.ProtectedPreviewPage }))
|
1703
1868
|
);
|
1704
1869
|
const routes$1 = [
|
1705
1870
|
{
|
@@ -1712,31 +1877,31 @@ const routes$1 = [
|
|
1712
1877
|
}
|
1713
1878
|
];
|
1714
1879
|
const ProtectedEditViewPage = React.lazy(
|
1715
|
-
() => Promise.resolve().then(() => require("./EditViewPage-
|
1880
|
+
() => Promise.resolve().then(() => require("./EditViewPage-DqelJ9UK.js")).then((mod) => ({ default: mod.ProtectedEditViewPage }))
|
1716
1881
|
);
|
1717
1882
|
const ProtectedListViewPage = React.lazy(
|
1718
|
-
() => Promise.resolve().then(() => require("./ListViewPage-
|
1883
|
+
() => Promise.resolve().then(() => require("./ListViewPage-BVKBeQAA.js")).then((mod) => ({ default: mod.ProtectedListViewPage }))
|
1719
1884
|
);
|
1720
1885
|
const ProtectedListConfiguration = React.lazy(
|
1721
|
-
() => Promise.resolve().then(() => require("./ListConfigurationPage-
|
1886
|
+
() => Promise.resolve().then(() => require("./ListConfigurationPage-ByZAO_9H.js")).then((mod) => ({
|
1722
1887
|
default: mod.ProtectedListConfiguration
|
1723
1888
|
}))
|
1724
1889
|
);
|
1725
1890
|
const ProtectedEditConfigurationPage = React.lazy(
|
1726
|
-
() => Promise.resolve().then(() => require("./EditConfigurationPage-
|
1891
|
+
() => Promise.resolve().then(() => require("./EditConfigurationPage-LYEvR4fW.js")).then((mod) => ({
|
1727
1892
|
default: mod.ProtectedEditConfigurationPage
|
1728
1893
|
}))
|
1729
1894
|
);
|
1730
1895
|
const ProtectedComponentConfigurationPage = React.lazy(
|
1731
|
-
() => Promise.resolve().then(() => require("./ComponentConfigurationPage-
|
1896
|
+
() => Promise.resolve().then(() => require("./ComponentConfigurationPage-DdkVGfXC.js")).then((mod) => ({
|
1732
1897
|
default: mod.ProtectedComponentConfigurationPage
|
1733
1898
|
}))
|
1734
1899
|
);
|
1735
1900
|
const NoPermissions = React.lazy(
|
1736
|
-
() => Promise.resolve().then(() => require("./NoPermissionsPage-
|
1901
|
+
() => Promise.resolve().then(() => require("./NoPermissionsPage-vdNpc6jb.js")).then((mod) => ({ default: mod.NoPermissions }))
|
1737
1902
|
);
|
1738
1903
|
const NoContentType = React.lazy(
|
1739
|
-
() => Promise.resolve().then(() => require("./NoContentTypePage-
|
1904
|
+
() => Promise.resolve().then(() => require("./NoContentTypePage-BV5zfDxr.js")).then((mod) => ({ default: mod.NoContentType }))
|
1740
1905
|
);
|
1741
1906
|
const CollectionTypePages = () => {
|
1742
1907
|
const { collectionType } = reactRouterDom.useParams();
|
@@ -2106,6 +2271,7 @@ const PublishAction$1 = ({
|
|
2106
2271
|
const { _unstableFormatValidationErrors: formatValidationErrors } = strapiAdmin.useAPIErrorHandler();
|
2107
2272
|
const isListView = reactRouterDom.useMatch(LIST_PATH) !== null;
|
2108
2273
|
const isCloning = reactRouterDom.useMatch(CLONE_PATH) !== null;
|
2274
|
+
const { id } = reactRouterDom.useParams();
|
2109
2275
|
const { formatMessage } = reactIntl.useIntl();
|
2110
2276
|
const canPublish = useDocumentRBAC("PublishAction", ({ canPublish: canPublish2 }) => canPublish2);
|
2111
2277
|
const { publish } = useDocumentActions();
|
@@ -2208,10 +2374,12 @@ const PublishAction$1 = ({
|
|
2208
2374
|
transformData(formValues)
|
2209
2375
|
);
|
2210
2376
|
if ("data" in res && collectionType !== SINGLE_TYPES) {
|
2211
|
-
|
2212
|
-
|
2213
|
-
|
2214
|
-
|
2377
|
+
if (id === "create") {
|
2378
|
+
navigate({
|
2379
|
+
pathname: `../${collectionType}/${model}/${res.data.documentId}`,
|
2380
|
+
search: rawQuery
|
2381
|
+
});
|
2382
|
+
}
|
2215
2383
|
} else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
|
2216
2384
|
setErrors(formatValidationErrors(res.error));
|
2217
2385
|
}
|
@@ -2264,6 +2432,7 @@ const PublishAction$1 = ({
|
|
2264
2432
|
};
|
2265
2433
|
};
|
2266
2434
|
PublishAction$1.type = "publish";
|
2435
|
+
PublishAction$1.position = "panel";
|
2267
2436
|
const UpdateAction = ({
|
2268
2437
|
activeTab,
|
2269
2438
|
documentId,
|
@@ -2286,6 +2455,117 @@ const UpdateAction = ({
|
|
2286
2455
|
const validate = strapiAdmin.useForm("UpdateAction", (state) => state.validate);
|
2287
2456
|
const setErrors = strapiAdmin.useForm("UpdateAction", (state) => state.setErrors);
|
2288
2457
|
const resetForm = strapiAdmin.useForm("PublishAction", ({ resetForm: resetForm2 }) => resetForm2);
|
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
|
+
})
|
2474
|
+
});
|
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(
|
2488
|
+
{
|
2489
|
+
pathname: `../${res.data.documentId}`,
|
2490
|
+
search: rawQuery
|
2491
|
+
},
|
2492
|
+
{ relative: "path" }
|
2493
|
+
);
|
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));
|
2509
|
+
} else {
|
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(
|
2522
|
+
{
|
2523
|
+
pathname: `../${res.data.documentId}`,
|
2524
|
+
search: rawQuery
|
2525
|
+
},
|
2526
|
+
{ replace: true, relative: "path" }
|
2527
|
+
);
|
2528
|
+
} else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
|
2529
|
+
setErrors(formatValidationErrors(res.error));
|
2530
|
+
}
|
2531
|
+
}
|
2532
|
+
} finally {
|
2533
|
+
setSubmitting(false);
|
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]);
|
2289
2569
|
return {
|
2290
2570
|
/**
|
2291
2571
|
* Disabled when:
|
@@ -2298,84 +2578,11 @@ const UpdateAction = ({
|
|
2298
2578
|
id: "global.save",
|
2299
2579
|
defaultMessage: "Save"
|
2300
2580
|
}),
|
2301
|
-
onClick:
|
2302
|
-
setSubmitting(true);
|
2303
|
-
try {
|
2304
|
-
const { errors } = await validate(true, {
|
2305
|
-
status: "draft"
|
2306
|
-
});
|
2307
|
-
if (errors) {
|
2308
|
-
toggleNotification({
|
2309
|
-
type: "danger",
|
2310
|
-
message: formatMessage({
|
2311
|
-
id: "content-manager.validation.error",
|
2312
|
-
defaultMessage: "There are validation errors in your document. Please fix them before saving."
|
2313
|
-
})
|
2314
|
-
});
|
2315
|
-
return;
|
2316
|
-
}
|
2317
|
-
if (isCloning) {
|
2318
|
-
const res = await clone(
|
2319
|
-
{
|
2320
|
-
model,
|
2321
|
-
documentId: cloneMatch.params.origin,
|
2322
|
-
params
|
2323
|
-
},
|
2324
|
-
transformData(document)
|
2325
|
-
);
|
2326
|
-
if ("data" in res) {
|
2327
|
-
navigate(
|
2328
|
-
{
|
2329
|
-
pathname: `../${res.data.documentId}`,
|
2330
|
-
search: rawQuery
|
2331
|
-
},
|
2332
|
-
{ relative: "path" }
|
2333
|
-
);
|
2334
|
-
} else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
|
2335
|
-
setErrors(formatValidationErrors(res.error));
|
2336
|
-
}
|
2337
|
-
} else if (documentId || collectionType === SINGLE_TYPES) {
|
2338
|
-
const res = await update(
|
2339
|
-
{
|
2340
|
-
collectionType,
|
2341
|
-
model,
|
2342
|
-
documentId,
|
2343
|
-
params
|
2344
|
-
},
|
2345
|
-
transformData(document)
|
2346
|
-
);
|
2347
|
-
if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
|
2348
|
-
setErrors(formatValidationErrors(res.error));
|
2349
|
-
} else {
|
2350
|
-
resetForm();
|
2351
|
-
}
|
2352
|
-
} else {
|
2353
|
-
const res = await create(
|
2354
|
-
{
|
2355
|
-
model,
|
2356
|
-
params
|
2357
|
-
},
|
2358
|
-
transformData(document)
|
2359
|
-
);
|
2360
|
-
if ("data" in res && collectionType !== SINGLE_TYPES) {
|
2361
|
-
navigate(
|
2362
|
-
{
|
2363
|
-
pathname: `../${res.data.documentId}`,
|
2364
|
-
search: rawQuery
|
2365
|
-
},
|
2366
|
-
{ replace: true, relative: "path" }
|
2367
|
-
);
|
2368
|
-
} else if ("error" in res && isBaseQueryError(res.error) && res.error.name === "ValidationError") {
|
2369
|
-
setErrors(formatValidationErrors(res.error));
|
2370
|
-
}
|
2371
|
-
}
|
2372
|
-
} finally {
|
2373
|
-
setSubmitting(false);
|
2374
|
-
}
|
2375
|
-
}
|
2581
|
+
onClick: handleUpdate
|
2376
2582
|
};
|
2377
2583
|
};
|
2378
2584
|
UpdateAction.type = "update";
|
2585
|
+
UpdateAction.position = "panel";
|
2379
2586
|
const UNPUBLISH_DRAFT_OPTIONS = {
|
2380
2587
|
KEEP: "keep",
|
2381
2588
|
DISCARD: "discard"
|
@@ -2498,6 +2705,7 @@ const UnpublishAction$1 = ({
|
|
2498
2705
|
};
|
2499
2706
|
};
|
2500
2707
|
UnpublishAction$1.type = "unpublish";
|
2708
|
+
UnpublishAction$1.position = "panel";
|
2501
2709
|
const DiscardAction = ({
|
2502
2710
|
activeTab,
|
2503
2711
|
documentId,
|
@@ -2548,6 +2756,7 @@ const DiscardAction = ({
|
|
2548
2756
|
};
|
2549
2757
|
};
|
2550
2758
|
DiscardAction.type = "discard";
|
2759
|
+
DiscardAction.position = "panel";
|
2551
2760
|
const DEFAULT_ACTIONS = [PublishAction$1, UpdateAction, UnpublishAction$1, DiscardAction];
|
2552
2761
|
const intervals = ["years", "months", "days", "hours", "minutes", "seconds"];
|
2553
2762
|
const RelativeTime = React__namespace.forwardRef(
|
@@ -2667,7 +2876,7 @@ const HeaderToolbar = () => {
|
|
2667
2876
|
meta: isCloning ? void 0 : meta,
|
2668
2877
|
collectionType
|
2669
2878
|
},
|
2670
|
-
descriptions: plugins["content-manager"].apis.getDocumentActions(),
|
2879
|
+
descriptions: plugins["content-manager"].apis.getDocumentActions("header"),
|
2671
2880
|
children: (actions2) => {
|
2672
2881
|
const headerActions = actions2.filter((action) => {
|
2673
2882
|
const positions = Array.isArray(action.position) ? action.position : [action.position];
|
@@ -2875,6 +3084,7 @@ const ConfigureTheViewAction = ({ collectionType, model }) => {
|
|
2875
3084
|
};
|
2876
3085
|
};
|
2877
3086
|
ConfigureTheViewAction.type = "configure-the-view";
|
3087
|
+
ConfigureTheViewAction.position = "header";
|
2878
3088
|
const EditTheModelAction = ({ model }) => {
|
2879
3089
|
const navigate = reactRouterDom.useNavigate();
|
2880
3090
|
const { formatMessage } = reactIntl.useIntl();
|
@@ -2891,6 +3101,7 @@ const EditTheModelAction = ({ model }) => {
|
|
2891
3101
|
};
|
2892
3102
|
};
|
2893
3103
|
EditTheModelAction.type = "edit-the-model";
|
3104
|
+
EditTheModelAction.position = "header";
|
2894
3105
|
const DeleteAction$1 = ({ documentId, model, collectionType, document }) => {
|
2895
3106
|
const navigate = reactRouterDom.useNavigate();
|
2896
3107
|
const { formatMessage } = reactIntl.useIntl();
|
@@ -2964,6 +3175,7 @@ const DeleteAction$1 = ({ documentId, model, collectionType, document }) => {
|
|
2964
3175
|
};
|
2965
3176
|
};
|
2966
3177
|
DeleteAction$1.type = "delete";
|
3178
|
+
DeleteAction$1.position = ["header", "table-row"];
|
2967
3179
|
const DEFAULT_HEADER_ACTIONS = [EditTheModelAction, ConfigureTheViewAction, DeleteAction$1];
|
2968
3180
|
const Panels = () => {
|
2969
3181
|
const isCloning = reactRouterDom.useMatch(CLONE_PATH) !== null;
|
@@ -3026,7 +3238,7 @@ const ActionsPanelContent = () => {
|
|
3026
3238
|
strapiAdmin.DescriptionComponentRenderer,
|
3027
3239
|
{
|
3028
3240
|
props,
|
3029
|
-
descriptions: plugins["content-manager"].apis.getDocumentActions(),
|
3241
|
+
descriptions: plugins["content-manager"].apis.getDocumentActions("panel"),
|
3030
3242
|
children: (actions2) => /* @__PURE__ */ jsxRuntime.jsx(DocumentActions, { actions: actions2 })
|
3031
3243
|
}
|
3032
3244
|
),
|
@@ -3084,7 +3296,7 @@ const ConfirmBulkActionDialog = ({
|
|
3084
3296
|
] })
|
3085
3297
|
] }) });
|
3086
3298
|
};
|
3087
|
-
const BoldChunk
|
3299
|
+
const BoldChunk = (chunks) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { fontWeight: "bold", children: chunks });
|
3088
3300
|
const ConfirmDialogPublishAll = ({
|
3089
3301
|
isOpen,
|
3090
3302
|
onToggleDialog,
|
@@ -3133,7 +3345,7 @@ const ConfirmDialogPublishAll = ({
|
|
3133
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. "
|
3134
3346
|
},
|
3135
3347
|
{
|
3136
|
-
b: BoldChunk
|
3348
|
+
b: BoldChunk,
|
3137
3349
|
count: countDraftRelations,
|
3138
3350
|
entities: selectedEntries.length
|
3139
3351
|
}
|
@@ -3172,6 +3384,16 @@ const ConfirmDialogPublishAll = ({
|
|
3172
3384
|
const TypographyMaxWidth = styledComponents.styled(designSystem.Typography)`
|
3173
3385
|
max-width: 300px;
|
3174
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
|
+
`;
|
3175
3397
|
const formatErrorMessages = (errors, parentKey, formatMessage) => {
|
3176
3398
|
const messages = [];
|
3177
3399
|
Object.entries(errors).forEach(([key, value]) => {
|
@@ -3276,7 +3498,7 @@ const SelectedEntriesTableContent = ({
|
|
3276
3498
|
)
|
3277
3499
|
] }),
|
3278
3500
|
/* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Loading, {}),
|
3279
|
-
/* @__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: [
|
3280
3502
|
/* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.CheckboxCell, { id: row.id }),
|
3281
3503
|
/* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: row.id }) }),
|
3282
3504
|
shouldDisplayMainField && /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: row[mainField] }) }),
|
@@ -3316,7 +3538,73 @@ const SelectedEntriesTableContent = ({
|
|
3316
3538
|
] }, row.id)) })
|
3317
3539
|
] });
|
3318
3540
|
};
|
3319
|
-
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
|
+
};
|
3320
3608
|
const SelectedEntriesModalContent = ({
|
3321
3609
|
listViewSelectedEntries,
|
3322
3610
|
toggleModal,
|
@@ -3375,7 +3663,6 @@ const SelectedEntriesModalContent = ({
|
|
3375
3663
|
validationErrors: {}
|
3376
3664
|
};
|
3377
3665
|
}, [components, data, schema]);
|
3378
|
-
const [publishedCount, setPublishedCount] = React__namespace.useState(0);
|
3379
3666
|
const [isDialogOpen, setIsDialogOpen] = React__namespace.useState(false);
|
3380
3667
|
const { publishMany: bulkPublishAction } = useDocumentActions();
|
3381
3668
|
const [, { isLoading: isSubmittingForm }] = usePublishManyDocumentsMutation();
|
@@ -3387,53 +3674,36 @@ const SelectedEntriesModalContent = ({
|
|
3387
3674
|
const selectedEntriesWithErrorsCount = selectedEntries.filter(
|
3388
3675
|
({ documentId }) => validationErrors[documentId]
|
3389
3676
|
).length;
|
3390
|
-
const
|
3677
|
+
const selectedEntriesPublishedCount = selectedEntries.filter(
|
3391
3678
|
({ status }) => status === "published"
|
3392
3679
|
).length;
|
3393
|
-
const
|
3680
|
+
const selectedEntriesModifiedCount = selectedEntries.filter(
|
3681
|
+
({ status, documentId }) => status === "modified" && !validationErrors[documentId]
|
3682
|
+
).length;
|
3683
|
+
const selectedEntriesWithNoErrorsCount = selectedEntries.length - selectedEntriesWithErrorsCount - selectedEntriesPublishedCount;
|
3394
3684
|
const toggleDialog = () => setIsDialogOpen((prev) => !prev);
|
3395
3685
|
const handleConfirmBulkPublish = async () => {
|
3396
3686
|
toggleDialog();
|
3397
3687
|
const res = await bulkPublishAction({ model, documentIds: entriesToPublish, params });
|
3398
3688
|
if (!("error" in res)) {
|
3399
|
-
setPublishedCount(res.count);
|
3400
3689
|
const unpublishedEntries = rows.filter((row) => {
|
3401
3690
|
return !entriesToPublish.includes(row.documentId);
|
3402
3691
|
});
|
3403
3692
|
setListViewSelectedDocuments(unpublishedEntries);
|
3404
3693
|
}
|
3405
3694
|
};
|
3406
|
-
const getFormattedCountMessage = () => {
|
3407
|
-
if (publishedCount) {
|
3408
|
-
return formatMessage(
|
3409
|
-
{
|
3410
|
-
id: getTranslation("containers.list.selectedEntriesModal.publishedCount"),
|
3411
|
-
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."
|
3412
|
-
},
|
3413
|
-
{
|
3414
|
-
publishedCount,
|
3415
|
-
withErrorsCount: selectedEntriesWithErrorsCount,
|
3416
|
-
b: BoldChunk
|
3417
|
-
}
|
3418
|
-
);
|
3419
|
-
}
|
3420
|
-
return formatMessage(
|
3421
|
-
{
|
3422
|
-
id: getTranslation("containers.list.selectedEntriesModal.selectedCount"),
|
3423
|
-
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."
|
3424
|
-
},
|
3425
|
-
{
|
3426
|
-
readyToPublishCount: selectedEntriesWithNoErrorsCount,
|
3427
|
-
withErrorsCount: selectedEntriesWithErrorsCount,
|
3428
|
-
alreadyPublishedCount: selectedEntriesPublished,
|
3429
|
-
b: BoldChunk
|
3430
|
-
}
|
3431
|
-
);
|
3432
|
-
};
|
3433
3695
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
3434
3696
|
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Modal.Body, { children: [
|
3435
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
3436
|
-
|
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(
|
3437
3707
|
SelectedEntriesTableContent,
|
3438
3708
|
{
|
3439
3709
|
isPublishing: isSubmittingForm,
|
@@ -3454,7 +3724,7 @@ const SelectedEntriesModalContent = ({
|
|
3454
3724
|
designSystem.Button,
|
3455
3725
|
{
|
3456
3726
|
onClick: toggleDialog,
|
3457
|
-
disabled: selectedEntries.length === 0 || selectedEntries.length === selectedEntriesWithErrorsCount ||
|
3727
|
+
disabled: selectedEntries.length === 0 || selectedEntries.length === selectedEntriesWithErrorsCount || selectedEntriesPublishedCount === selectedEntries.length || isLoading,
|
3458
3728
|
loading: isSubmittingForm,
|
3459
3729
|
children: formatMessage({ id: "app.utils.publish", defaultMessage: "Publish" })
|
3460
3730
|
}
|
@@ -3480,8 +3750,7 @@ const PublishAction = ({ documents, model }) => {
|
|
3480
3750
|
const refetchList = () => {
|
3481
3751
|
contentManagerApi.util.invalidateTags([{ type: "Document", id: `${model}_LIST` }]);
|
3482
3752
|
};
|
3483
|
-
if (!showPublishButton)
|
3484
|
-
return null;
|
3753
|
+
if (!showPublishButton) return null;
|
3485
3754
|
return {
|
3486
3755
|
actionType: "publish",
|
3487
3756
|
variant: "tertiary",
|
@@ -3549,8 +3818,7 @@ const DeleteAction = ({ documents, model }) => {
|
|
3549
3818
|
selectRow([]);
|
3550
3819
|
}
|
3551
3820
|
};
|
3552
|
-
if (!hasDeletePermission)
|
3553
|
-
return null;
|
3821
|
+
if (!hasDeletePermission) return null;
|
3554
3822
|
return {
|
3555
3823
|
variant: "danger-light",
|
3556
3824
|
label: formatMessage({ id: "global.delete", defaultMessage: "Delete" }),
|
@@ -3599,8 +3867,7 @@ const UnpublishAction = ({ documents, model }) => {
|
|
3599
3867
|
}
|
3600
3868
|
};
|
3601
3869
|
const showUnpublishButton = hasDraftAndPublishEnabled && hasPublishPermission && documents.some((entry) => entry.status === "published" || entry.status === "modified");
|
3602
|
-
if (!showUnpublishButton)
|
3603
|
-
return null;
|
3870
|
+
if (!showUnpublishButton) return null;
|
3604
3871
|
return {
|
3605
3872
|
variant: "tertiary",
|
3606
3873
|
label: formatMessage({ id: "app.utils.unpublish", defaultMessage: "Unpublish" }),
|
@@ -3705,7 +3972,7 @@ const TableActions = ({ document }) => {
|
|
3705
3972
|
strapiAdmin.DescriptionComponentRenderer,
|
3706
3973
|
{
|
3707
3974
|
props,
|
3708
|
-
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"),
|
3709
3976
|
children: (actions2) => {
|
3710
3977
|
const tableRowActions = actions2.filter((action) => {
|
3711
3978
|
const positions = Array.isArray(action.position) ? action.position : [action.position];
|
@@ -3764,6 +4031,7 @@ const EditAction = ({ documentId }) => {
|
|
3764
4031
|
};
|
3765
4032
|
};
|
3766
4033
|
EditAction.type = "edit";
|
4034
|
+
EditAction.position = "table-row";
|
3767
4035
|
const StyledPencil = styledComponents.styled(Icons.Pencil)`
|
3768
4036
|
path {
|
3769
4037
|
fill: currentColor;
|
@@ -3840,6 +4108,7 @@ const CloneAction = ({ model, documentId }) => {
|
|
3840
4108
|
};
|
3841
4109
|
};
|
3842
4110
|
CloneAction.type = "clone";
|
4111
|
+
CloneAction.position = "table-row";
|
3843
4112
|
const StyledDuplicate = styledComponents.styled(Icons.Duplicate)`
|
3844
4113
|
path {
|
3845
4114
|
fill: currentColor;
|
@@ -3926,7 +4195,14 @@ class ContentManagerPlugin {
|
|
3926
4195
|
addDocumentHeaderAction: this.addDocumentHeaderAction.bind(this),
|
3927
4196
|
addEditViewSidePanel: this.addEditViewSidePanel.bind(this),
|
3928
4197
|
getBulkActions: () => this.bulkActions,
|
3929
|
-
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
|
+
},
|
3930
4206
|
getEditViewSidePanels: () => this.editViewSidePanels,
|
3931
4207
|
getHeaderActions: () => this.headerActions
|
3932
4208
|
}
|
@@ -3936,10 +4212,8 @@ class ContentManagerPlugin {
|
|
3936
4212
|
const getPrintableType = (value) => {
|
3937
4213
|
const nativeType = typeof value;
|
3938
4214
|
if (nativeType === "object") {
|
3939
|
-
if (value === null)
|
3940
|
-
|
3941
|
-
if (Array.isArray(value))
|
3942
|
-
return "array";
|
4215
|
+
if (value === null) return "null";
|
4216
|
+
if (Array.isArray(value)) return "array";
|
3943
4217
|
if (value instanceof Object && value.constructor.name !== "Object") {
|
3944
4218
|
return value.constructor.name;
|
3945
4219
|
}
|
@@ -3992,6 +4266,7 @@ const HistoryAction = ({ model, document }) => {
|
|
3992
4266
|
};
|
3993
4267
|
};
|
3994
4268
|
HistoryAction.type = "history";
|
4269
|
+
HistoryAction.position = "header";
|
3995
4270
|
const historyAdmin = {
|
3996
4271
|
bootstrap(app) {
|
3997
4272
|
const { addDocumentAction } = app.getPlugin("content-manager").apis;
|
@@ -4054,11 +4329,18 @@ const previewApi = contentManagerApi.injectEndpoints({
|
|
4054
4329
|
})
|
4055
4330
|
});
|
4056
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
|
+
};
|
4057
4338
|
const PreviewSidePanel = ({ model, documentId, document }) => {
|
4058
4339
|
const { formatMessage } = reactIntl.useIntl();
|
4059
4340
|
const { trackUsage } = strapiAdmin.useTracking();
|
4060
4341
|
const { pathname } = reactRouterDom.useLocation();
|
4061
4342
|
const [{ query }] = strapiAdmin.useQueryParams();
|
4343
|
+
const isModified = strapiAdmin.useForm("PreviewSidePanel", (state) => state.modified);
|
4062
4344
|
const { data, error } = useGetPreviewUrlQuery({
|
4063
4345
|
params: {
|
4064
4346
|
contentType: model
|
@@ -4078,28 +4360,37 @@ const PreviewSidePanel = ({ model, documentId, document }) => {
|
|
4078
4360
|
};
|
4079
4361
|
return {
|
4080
4362
|
title: formatMessage({ id: "content-manager.preview.panel.title", defaultMessage: "Preview" }),
|
4081
|
-
content: /* @__PURE__ */ jsxRuntime.jsx(
|
4082
|
-
|
4363
|
+
content: /* @__PURE__ */ jsxRuntime.jsx(
|
4364
|
+
ConditionalTooltip,
|
4083
4365
|
{
|
4084
|
-
|
4085
|
-
|
4086
|
-
|
4087
|
-
|
4088
|
-
|
4089
|
-
children:
|
4090
|
-
|
4091
|
-
|
4092
|
-
|
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
|
+
) })
|
4093
4388
|
}
|
4094
|
-
)
|
4389
|
+
)
|
4095
4390
|
};
|
4096
4391
|
};
|
4097
|
-
const FEATURE_ID = "preview";
|
4098
4392
|
const previewAdmin = {
|
4099
4393
|
bootstrap(app) {
|
4100
|
-
if (!window.strapi.future.isEnabled(FEATURE_ID)) {
|
4101
|
-
return;
|
4102
|
-
}
|
4103
4394
|
const contentManagerPluginApis = app.getPlugin("content-manager").apis;
|
4104
4395
|
contentManagerPluginApis.addEditViewSidePanel([PreviewSidePanel]);
|
4105
4396
|
}
|
@@ -4123,7 +4414,7 @@ const index = {
|
|
4123
4414
|
app.router.addRoute({
|
4124
4415
|
path: "content-manager/*",
|
4125
4416
|
lazy: async () => {
|
4126
|
-
const { Layout } = await Promise.resolve().then(() => require("./layout-
|
4417
|
+
const { Layout } = await Promise.resolve().then(() => require("./layout-DSeUTfMv.js"));
|
4127
4418
|
return {
|
4128
4419
|
Component: Layout
|
4129
4420
|
};
|
@@ -4143,7 +4434,7 @@ const index = {
|
|
4143
4434
|
async registerTrads({ locales }) {
|
4144
4435
|
const importedTrads = await Promise.all(
|
4145
4436
|
locales.map((locale) => {
|
4146
|
-
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 }) => {
|
4147
4438
|
return {
|
4148
4439
|
data: prefixPluginTranslations(data, PLUGIN_ID),
|
4149
4440
|
locale
|
@@ -4165,7 +4456,6 @@ exports.CLONE_PATH = CLONE_PATH;
|
|
4165
4456
|
exports.COLLECTION_TYPES = COLLECTION_TYPES;
|
4166
4457
|
exports.CREATOR_FIELDS = CREATOR_FIELDS;
|
4167
4458
|
exports.DEFAULT_SETTINGS = DEFAULT_SETTINGS;
|
4168
|
-
exports.DOCUMENT_META_FIELDS = DOCUMENT_META_FIELDS;
|
4169
4459
|
exports.DocumentRBAC = DocumentRBAC;
|
4170
4460
|
exports.DocumentStatus = DocumentStatus;
|
4171
4461
|
exports.HOOKS = HOOKS;
|
@@ -4182,13 +4472,17 @@ exports.checkIfAttributeIsDisplayable = checkIfAttributeIsDisplayable;
|
|
4182
4472
|
exports.contentManagerApi = contentManagerApi;
|
4183
4473
|
exports.convertEditLayoutToFieldLayouts = convertEditLayoutToFieldLayouts;
|
4184
4474
|
exports.convertListLayoutToFieldLayouts = convertListLayoutToFieldLayouts;
|
4475
|
+
exports.createDefaultForm = createDefaultForm;
|
4185
4476
|
exports.createYupSchema = createYupSchema;
|
4186
4477
|
exports.extractContentTypeComponents = extractContentTypeComponents;
|
4187
4478
|
exports.getDisplayName = getDisplayName;
|
4188
4479
|
exports.getMainField = getMainField;
|
4189
4480
|
exports.getTranslation = getTranslation;
|
4190
4481
|
exports.index = index;
|
4482
|
+
exports.prepareTempKeys = prepareTempKeys;
|
4483
|
+
exports.removeFieldsThatDontExistOnSchema = removeFieldsThatDontExistOnSchema;
|
4191
4484
|
exports.setInitialData = setInitialData;
|
4485
|
+
exports.transformDocument = transformDocument;
|
4192
4486
|
exports.useContentManagerContext = useContentManagerContext;
|
4193
4487
|
exports.useContentTypeSchema = useContentTypeSchema;
|
4194
4488
|
exports.useDoc = useDoc;
|
@@ -4203,4 +4497,4 @@ exports.useGetContentTypeConfigurationQuery = useGetContentTypeConfigurationQuer
|
|
4203
4497
|
exports.useGetInitialDataQuery = useGetInitialDataQuery;
|
4204
4498
|
exports.useGetPreviewUrlQuery = useGetPreviewUrlQuery;
|
4205
4499
|
exports.useUpdateContentTypeConfigurationMutation = useUpdateContentTypeConfigurationMutation;
|
4206
|
-
//# sourceMappingURL=index-
|
4500
|
+
//# sourceMappingURL=index-CxLSGwnk.js.map
|