@strapi/content-manager 0.0.0-next.b0db56479de441dfe8feb37a43c7f6f6fecf75c1 → 0.0.0-next.b6435ada233136a0d0b14fba67961ff8f16cdac2
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-Cjr64OS0.js → ComponentConfigurationPage-BlzvDpbX.js} +4 -5
- package/dist/_chunks/{ComponentConfigurationPage-Cjr64OS0.js.map → ComponentConfigurationPage-BlzvDpbX.js.map} +1 -1
- package/dist/_chunks/{ComponentConfigurationPage-DKuCF_uX.mjs → ComponentConfigurationPage-DaPOlQaD.mjs} +3 -3
- package/dist/_chunks/{ComponentConfigurationPage-DKuCF_uX.mjs.map → ComponentConfigurationPage-DaPOlQaD.mjs.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-CyqSP6ru.mjs → EditConfigurationPage-BZPXItXo.mjs} +3 -3
- package/dist/_chunks/{EditConfigurationPage-CyqSP6ru.mjs.map → EditConfigurationPage-BZPXItXo.mjs.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-BeikGxvq.js → EditConfigurationPage-uy-v43AR.js} +4 -5
- package/dist/_chunks/{EditConfigurationPage-BeikGxvq.js.map → EditConfigurationPage-uy-v43AR.js.map} +1 -1
- package/dist/_chunks/{EditViewPage-pyqEgLgP.js → EditViewPage-DT6A4ayX.js} +4 -5
- package/dist/_chunks/{EditViewPage-pyqEgLgP.js.map → EditViewPage-DT6A4ayX.js.map} +1 -1
- package/dist/_chunks/{EditViewPage-PrPHZN_9.mjs → EditViewPage-oOLeTySr.mjs} +3 -3
- package/dist/_chunks/{EditViewPage-PrPHZN_9.mjs.map → EditViewPage-oOLeTySr.mjs.map} +1 -1
- package/dist/_chunks/{Field-DuAYQka5.mjs → Field-D7dv2aUX.mjs} +146 -114
- package/dist/_chunks/Field-D7dv2aUX.mjs.map +1 -0
- package/dist/_chunks/{Field-fKtb7rWK.js → Field-kYFVIGiP.js} +148 -116
- package/dist/_chunks/Field-kYFVIGiP.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-Dxh71ckp.mjs → Form-BxR6sc29.mjs} +3 -3
- package/dist/_chunks/{Form-Dxh71ckp.mjs.map → Form-BxR6sc29.mjs.map} +1 -1
- package/dist/_chunks/{Form-BPXw-S-J.js → Form-CCijSg3V.js} +5 -6
- package/dist/_chunks/{Form-BPXw-S-J.js.map → Form-CCijSg3V.js.map} +1 -1
- package/dist/_chunks/{History-BGGn9JGY.js → History-BMndx49M.js} +8 -7
- package/dist/_chunks/History-BMndx49M.js.map +1 -0
- package/dist/_chunks/{History-CGblSVMc.mjs → History-D8F7aYQU.mjs} +8 -6
- package/dist/_chunks/History-D8F7aYQU.mjs.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-D3Avyi4t.js → ListConfigurationPage-DouY1EWM.js} +6 -6
- package/dist/_chunks/ListConfigurationPage-DouY1EWM.js.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-TIM0JveM.mjs → ListConfigurationPage-DqAdSPwC.mjs} +6 -5
- package/dist/_chunks/ListConfigurationPage-DqAdSPwC.mjs.map +1 -0
- package/dist/_chunks/{ListViewPage-DtAHWFMV.js → ListViewPage-BPVmh9pq.js} +51 -51
- package/dist/_chunks/ListViewPage-BPVmh9pq.js.map +1 -0
- package/dist/_chunks/{ListViewPage-C975eW-t.mjs → ListViewPage-C73F0jPh.mjs} +50 -49
- package/dist/_chunks/ListViewPage-C73F0jPh.mjs.map +1 -0
- package/dist/_chunks/{NoContentTypePage-SgNTVGjF.mjs → NoContentTypePage-B5w7iJOF.mjs} +2 -2
- package/dist/_chunks/{NoContentTypePage-SgNTVGjF.mjs.map → NoContentTypePage-B5w7iJOF.mjs.map} +1 -1
- package/dist/_chunks/{NoContentTypePage-BFjWZX0i.js → NoContentTypePage-BwcL--4H.js} +2 -2
- package/dist/_chunks/{NoContentTypePage-BFjWZX0i.js.map → NoContentTypePage-BwcL--4H.js.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-j7oulOpl.js → NoPermissionsPage-BMFKVcwJ.js} +2 -2
- package/dist/_chunks/{NoPermissionsPage-j7oulOpl.js.map → NoPermissionsPage-BMFKVcwJ.js.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-D4XYRoPf.mjs → NoPermissionsPage-UnEgMGK4.mjs} +2 -2
- package/dist/_chunks/{NoPermissionsPage-D4XYRoPf.mjs.map → NoPermissionsPage-UnEgMGK4.mjs.map} +1 -1
- package/dist/_chunks/{Preview-Bx1WfmKJ.js → Preview-B7PR3Ok_.js} +76 -20
- package/dist/_chunks/Preview-B7PR3Ok_.js.map +1 -0
- package/dist/_chunks/{Preview-Cy6fuAnd.mjs → Preview-DECOhK0D.mjs} +77 -20
- package/dist/_chunks/Preview-DECOhK0D.mjs.map +1 -0
- package/dist/_chunks/{Relations-DUrYWw0N.mjs → Relations-DinMQJ4B.mjs} +6 -8
- package/dist/_chunks/{Relations-DUrYWw0N.mjs.map → Relations-DinMQJ4B.mjs.map} +1 -1
- package/dist/_chunks/{Relations-CXQqwRXC.js → Relations-lndx3aQk.js} +7 -10
- package/dist/_chunks/{Relations-CXQqwRXC.js.map → Relations-lndx3aQk.js.map} +1 -1
- package/dist/_chunks/{en-DAgtrRoa.js → en-BK8Xyl5I.js} +4 -2
- package/dist/_chunks/{en-DAgtrRoa.js.map → en-BK8Xyl5I.js.map} +1 -1
- package/dist/_chunks/{en-69jRDM9j.mjs → en-Dtk_ot79.mjs} +4 -2
- package/dist/_chunks/{en-69jRDM9j.mjs.map → en-Dtk_ot79.mjs.map} +1 -1
- package/dist/_chunks/hooks-BAaaKPS_.js.map +1 -1
- package/dist/_chunks/{index-Ta--2bRa.mjs → index-C2SagWVW.mjs} +234 -138
- package/dist/_chunks/index-C2SagWVW.mjs.map +1 -0
- package/dist/_chunks/{index-_j7lH3CO.js → index-Cnw4gqee.js} +234 -139
- package/dist/_chunks/index-Cnw4gqee.js.map +1 -0
- package/dist/_chunks/{layout-C8H4oKDo.mjs → layout-DY_D9MGA.mjs} +4 -4
- package/dist/_chunks/{layout-C8H4oKDo.mjs.map → layout-DY_D9MGA.mjs.map} +1 -1
- package/dist/_chunks/{layout-BDwU2I_y.js → layout-ivwIVPnV.js} +5 -6
- package/dist/_chunks/{layout-BDwU2I_y.js.map → layout-ivwIVPnV.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-CPfMNzM6.js → relations-B7C7O_Pv.js} +2 -2
- package/dist/_chunks/{relations-CPfMNzM6.js.map → relations-B7C7O_Pv.js.map} +1 -1
- package/dist/_chunks/{relations-Ch70q86O.mjs → relations-Boc5Y9kX.mjs} +2 -2
- package/dist/_chunks/{relations-Ch70q86O.mjs.map → relations-Boc5Y9kX.mjs.map} +1 -1
- package/dist/_chunks/useDebounce-CtcjDB3L.js.map +1 -1
- package/dist/_chunks/useDebounce-DmuSJIF3.mjs.map +1 -1
- 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/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/admin/src/content-manager.d.ts +3 -2
- package/dist/admin/src/pages/EditView/components/DocumentActions.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/services/documents.d.ts +0 -3
- package/dist/server/index.js +148 -111
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +149 -111
- 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/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 +12 -10
- package/dist/_chunks/Field-DuAYQka5.mjs.map +0 -1
- package/dist/_chunks/Field-fKtb7rWK.js.map +0 -1
- package/dist/_chunks/History-BGGn9JGY.js.map +0 -1
- package/dist/_chunks/History-CGblSVMc.mjs.map +0 -1
- package/dist/_chunks/ListConfigurationPage-D3Avyi4t.js.map +0 -1
- package/dist/_chunks/ListConfigurationPage-TIM0JveM.mjs.map +0 -1
- package/dist/_chunks/ListViewPage-C975eW-t.mjs.map +0 -1
- package/dist/_chunks/ListViewPage-DtAHWFMV.js.map +0 -1
- package/dist/_chunks/Preview-Bx1WfmKJ.js.map +0 -1
- package/dist/_chunks/Preview-Cy6fuAnd.mjs.map +0 -1
- package/dist/_chunks/index-Ta--2bRa.mjs.map +0 -1
- package/dist/_chunks/index-_j7lH3CO.js.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
package/dist/server/index.js
CHANGED
@@ -10,8 +10,7 @@ const qs = require("qs");
|
|
10
10
|
const slugify = require("@sindresorhus/slugify");
|
11
11
|
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
12
12
|
function _interopNamespace(e) {
|
13
|
-
if (e && e.__esModule)
|
14
|
-
return e;
|
13
|
+
if (e && e.__esModule) return e;
|
15
14
|
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
16
15
|
if (e) {
|
17
16
|
for (const k in e) {
|
@@ -167,8 +166,7 @@ const createServiceUtils = ({ strapi: strapi2 }) => {
|
|
167
166
|
};
|
168
167
|
const getRelationRestoreValue = async (versionRelationData, attribute) => {
|
169
168
|
if (Array.isArray(versionRelationData)) {
|
170
|
-
if (versionRelationData.length === 0)
|
171
|
-
return versionRelationData;
|
169
|
+
if (versionRelationData.length === 0) return versionRelationData;
|
172
170
|
const existingAndMissingRelations = await Promise.all(
|
173
171
|
versionRelationData.map((relation) => {
|
174
172
|
return strapi2.documents(attribute.target).findOne({
|
@@ -203,8 +201,7 @@ const createServiceUtils = ({ strapi: strapi2 }) => {
|
|
203
201
|
const getDefaultLocale = async () => localesService ? localesService.getDefaultLocale() : null;
|
204
202
|
const isLocalizedContentType = (model) => i18nContentTypeService ? i18nContentTypeService.isLocalizedContentType(model) : false;
|
205
203
|
const getLocaleDictionary = async () => {
|
206
|
-
if (!localesService)
|
207
|
-
return {};
|
204
|
+
if (!localesService) return {};
|
208
205
|
const locales = await localesService.find() || [];
|
209
206
|
return locales.reduce(
|
210
207
|
(acc, locale) => {
|
@@ -740,14 +737,6 @@ const getFeature$1 = () => {
|
|
740
737
|
};
|
741
738
|
};
|
742
739
|
const history = getFeature$1();
|
743
|
-
const register = async ({ strapi: strapi2 }) => {
|
744
|
-
await history.register?.({ strapi: strapi2 });
|
745
|
-
};
|
746
|
-
const ALLOWED_WEBHOOK_EVENTS = {
|
747
|
-
ENTRY_PUBLISH: "entry.publish",
|
748
|
-
ENTRY_UNPUBLISH: "entry.unpublish"
|
749
|
-
};
|
750
|
-
const FEATURE_ID = "preview";
|
751
740
|
const info = { pluginName: "content-manager", type: "admin" };
|
752
741
|
const previewRouter = {
|
753
742
|
type: "admin",
|
@@ -793,6 +782,10 @@ const validatePreviewUrl = async (strapi2, uid2, params) => {
|
|
793
782
|
}
|
794
783
|
newParams.documentId = doc?.documentId;
|
795
784
|
}
|
785
|
+
if (!newParams.status) {
|
786
|
+
const isDPEnabled = model?.options?.draftAndPublish;
|
787
|
+
newParams.status = isDPEnabled ? "draft" : "published";
|
788
|
+
}
|
796
789
|
return newParams;
|
797
790
|
};
|
798
791
|
const createPreviewController = () => {
|
@@ -838,8 +831,48 @@ const createPreviewService = ({ strapi: strapi2 }) => {
|
|
838
831
|
}
|
839
832
|
};
|
840
833
|
};
|
834
|
+
const extendMiddlewareConfiguration = (middleware = { name: "", config: {} }) => {
|
835
|
+
const middlewares = strapi.config.get("middlewares");
|
836
|
+
const configuredMiddlewares = middlewares.map((currentMiddleware) => {
|
837
|
+
if (currentMiddleware === middleware.name) {
|
838
|
+
return middleware;
|
839
|
+
}
|
840
|
+
if (currentMiddleware.name === middleware.name) {
|
841
|
+
return fp.mergeWith(
|
842
|
+
(objValue, srcValue) => {
|
843
|
+
if (Array.isArray(objValue)) {
|
844
|
+
return objValue.concat(srcValue);
|
845
|
+
}
|
846
|
+
return void 0;
|
847
|
+
},
|
848
|
+
currentMiddleware,
|
849
|
+
middleware
|
850
|
+
);
|
851
|
+
}
|
852
|
+
return currentMiddleware;
|
853
|
+
});
|
854
|
+
strapi.config.set("middlewares", configuredMiddlewares);
|
855
|
+
};
|
841
856
|
const createPreviewConfigService = ({ strapi: strapi2 }) => {
|
842
857
|
return {
|
858
|
+
register() {
|
859
|
+
if (!this.isEnabled()) {
|
860
|
+
return;
|
861
|
+
}
|
862
|
+
const config = strapi2.config.get("admin.preview");
|
863
|
+
if (config.config?.allowedOrigins) {
|
864
|
+
extendMiddlewareConfiguration({
|
865
|
+
name: "strapi::security",
|
866
|
+
config: {
|
867
|
+
contentSecurityPolicy: {
|
868
|
+
directives: {
|
869
|
+
"frame-src": config.config.allowedOrigins
|
870
|
+
}
|
871
|
+
}
|
872
|
+
}
|
873
|
+
});
|
874
|
+
}
|
875
|
+
},
|
843
876
|
isEnabled() {
|
844
877
|
const config = strapi2.config.get("admin.preview");
|
845
878
|
if (!config) {
|
@@ -881,14 +914,13 @@ const services$1 = {
|
|
881
914
|
"preview-config": createPreviewConfigService
|
882
915
|
};
|
883
916
|
const getFeature = () => {
|
884
|
-
if (!strapi.features.future.isEnabled(FEATURE_ID)) {
|
885
|
-
return {};
|
886
|
-
}
|
887
917
|
return {
|
888
|
-
|
889
|
-
console.log("Bootstrapping preview server");
|
918
|
+
register() {
|
890
919
|
const config = getService(strapi, "preview-config");
|
891
920
|
config.validate();
|
921
|
+
config.register();
|
922
|
+
},
|
923
|
+
bootstrap() {
|
892
924
|
},
|
893
925
|
routes: routes$1,
|
894
926
|
controllers: controllers$1,
|
@@ -896,6 +928,14 @@ const getFeature = () => {
|
|
896
928
|
};
|
897
929
|
};
|
898
930
|
const preview = getFeature();
|
931
|
+
const register = async ({ strapi: strapi2 }) => {
|
932
|
+
await history.register?.({ strapi: strapi2 });
|
933
|
+
await preview.register?.({ strapi: strapi2 });
|
934
|
+
};
|
935
|
+
const ALLOWED_WEBHOOK_EVENTS = {
|
936
|
+
ENTRY_PUBLISH: "entry.publish",
|
937
|
+
ENTRY_UNPUBLISH: "entry.unpublish"
|
938
|
+
};
|
899
939
|
const bootstrap = async () => {
|
900
940
|
Object.entries(ALLOWED_WEBHOOK_EVENTS).forEach(([key, value]) => {
|
901
941
|
strapi.get("webhookStore").addAllowedEvent(key, value);
|
@@ -1459,8 +1499,7 @@ const isSortable = (schema, name) => {
|
|
1459
1499
|
if (!___default.default.has(schema.attributes, name)) {
|
1460
1500
|
return false;
|
1461
1501
|
}
|
1462
|
-
if (schema.modelType === "component" && name === "id")
|
1463
|
-
return false;
|
1502
|
+
if (schema.modelType === "component" && name === "id") return false;
|
1464
1503
|
const attribute = schema.attributes[name];
|
1465
1504
|
if (NON_SORTABLES.includes(attribute.type)) {
|
1466
1505
|
return false;
|
@@ -1605,8 +1644,7 @@ const createDefaultSettings = async (schema) => {
|
|
1605
1644
|
};
|
1606
1645
|
};
|
1607
1646
|
const syncSettings = async (configuration, schema) => {
|
1608
|
-
if (fp.isEmpty(configuration.settings))
|
1609
|
-
return createDefaultSettings(schema);
|
1647
|
+
if (fp.isEmpty(configuration.settings)) return createDefaultSettings(schema);
|
1610
1648
|
const defaultField = getDefaultMainField(schema);
|
1611
1649
|
const { mainField = defaultField, defaultSortBy = defaultField } = configuration.settings || {};
|
1612
1650
|
return {
|
@@ -1782,8 +1820,7 @@ const excludeNotCreatableFields = (uid2, permissionChecker2) => (body, path = []
|
|
1782
1820
|
}
|
1783
1821
|
switch (attribute.type) {
|
1784
1822
|
case "relation": {
|
1785
|
-
if (canCreate(attributePath))
|
1786
|
-
return body2;
|
1823
|
+
if (canCreate(attributePath)) return body2;
|
1787
1824
|
return fp.set(attributePath, { set: [] }, body2);
|
1788
1825
|
}
|
1789
1826
|
case "component": {
|
@@ -1793,8 +1830,7 @@ const excludeNotCreatableFields = (uid2, permissionChecker2) => (body, path = []
|
|
1793
1830
|
]);
|
1794
1831
|
}
|
1795
1832
|
default: {
|
1796
|
-
if (canCreate(attributePath))
|
1797
|
-
return body2;
|
1833
|
+
if (canCreate(attributePath)) return body2;
|
1798
1834
|
return fp.set(attributePath, null, body2);
|
1799
1835
|
}
|
1800
1836
|
}
|
@@ -2587,8 +2623,7 @@ const validateStatus = (sourceUid, status) => {
|
|
2587
2623
|
const sourceModel = strapi.getModel(sourceUid);
|
2588
2624
|
const isDP = strapiUtils.contentTypes.hasDraftAndPublish;
|
2589
2625
|
const isSourceDP = isDP(sourceModel);
|
2590
|
-
if (!isSourceDP)
|
2591
|
-
return { status: void 0 };
|
2626
|
+
if (!isSourceDP) return { status: void 0 };
|
2592
2627
|
switch (status) {
|
2593
2628
|
case "published":
|
2594
2629
|
return { status: "published" };
|
@@ -3233,18 +3268,15 @@ async function syncMetadatas(configuration, schema) {
|
|
3233
3268
|
___default.default.set(updatedMeta, ["list", "searchable"], false);
|
3234
3269
|
___default.default.set(acc, [key], updatedMeta);
|
3235
3270
|
}
|
3236
|
-
if (!___default.default.has(edit, "mainField"))
|
3237
|
-
return acc;
|
3271
|
+
if (!___default.default.has(edit, "mainField")) return acc;
|
3238
3272
|
if (!isRelation$1(attr)) {
|
3239
3273
|
___default.default.set(updatedMeta, "edit", ___default.default.omit(edit, ["mainField"]));
|
3240
3274
|
___default.default.set(acc, [key], updatedMeta);
|
3241
3275
|
return acc;
|
3242
3276
|
}
|
3243
|
-
if (edit.mainField === "id")
|
3244
|
-
return acc;
|
3277
|
+
if (edit.mainField === "id") return acc;
|
3245
3278
|
const targetSchema = getTargetSchema(attr.targetModel);
|
3246
|
-
if (!targetSchema)
|
3247
|
-
return acc;
|
3279
|
+
if (!targetSchema) return acc;
|
3248
3280
|
if (!isSortable(targetSchema, edit.mainField) && !isListable(targetSchema, edit.mainField)) {
|
3249
3281
|
___default.default.set(updatedMeta, ["edit", "mainField"], getDefaultMainField(targetSchema));
|
3250
3282
|
___default.default.set(acc, [key], updatedMeta);
|
@@ -3289,8 +3321,7 @@ function createDefaultEditLayout(schema) {
|
|
3289
3321
|
return appendToEditLayout([], keys2, schema);
|
3290
3322
|
}
|
3291
3323
|
function syncLayouts(configuration, schema) {
|
3292
|
-
if (___default.default.isEmpty(configuration.layouts))
|
3293
|
-
return createDefaultLayouts(schema);
|
3324
|
+
if (___default.default.isEmpty(configuration.layouts)) return createDefaultLayouts(schema);
|
3294
3325
|
const { list = [], editRelations = [], edit = [] } = configuration.layouts || {};
|
3295
3326
|
let cleanList = list.filter((attr) => isListable(schema, attr));
|
3296
3327
|
const cleanEditRelations = editRelations.filter(
|
@@ -3301,8 +3332,7 @@ function syncLayouts(configuration, schema) {
|
|
3301
3332
|
for (const row of edit) {
|
3302
3333
|
const newRow = [];
|
3303
3334
|
for (const el of row) {
|
3304
|
-
if (!hasEditableAttribute(schema, el.name))
|
3305
|
-
continue;
|
3335
|
+
if (!hasEditableAttribute(schema, el.name)) continue;
|
3306
3336
|
const { hasFieldSize } = getService$2("field-sizes");
|
3307
3337
|
const fieldType = hasFieldSize(schema.attributes[el.name].customField) ? schema.attributes[el.name].customField : schema.attributes[el.name].type;
|
3308
3338
|
if (!isAllowedFieldSize(fieldType, el.size)) {
|
@@ -3333,8 +3363,7 @@ function syncLayouts(configuration, schema) {
|
|
3333
3363
|
};
|
3334
3364
|
}
|
3335
3365
|
const appendToEditLayout = (layout = [], keysToAppend, schema) => {
|
3336
|
-
if (keysToAppend.length === 0)
|
3337
|
-
return layout;
|
3366
|
+
if (keysToAppend.length === 0) return layout;
|
3338
3367
|
let currentRowIndex = Math.max(layout.length - 1, 0);
|
3339
3368
|
if (!layout[currentRowIndex]) {
|
3340
3369
|
layout[currentRowIndex] = [];
|
@@ -3900,6 +3929,12 @@ function getPopulateForRelation(attribute, model, attributeName, { countMany, co
|
|
3900
3929
|
if (initialPopulate) {
|
3901
3930
|
return initialPopulate;
|
3902
3931
|
}
|
3932
|
+
if (attributeName === "localizations") {
|
3933
|
+
const validationPopulate = getPopulateForValidation(model.uid);
|
3934
|
+
return {
|
3935
|
+
populate: validationPopulate.populate
|
3936
|
+
};
|
3937
|
+
}
|
3903
3938
|
if (!isVisibleAttribute$1(model, attributeName)) {
|
3904
3939
|
return true;
|
3905
3940
|
}
|
@@ -3959,6 +3994,9 @@ const getDeepPopulate = (uid2, {
|
|
3959
3994
|
return {};
|
3960
3995
|
}
|
3961
3996
|
const model = strapi.getModel(uid2);
|
3997
|
+
if (!model) {
|
3998
|
+
return {};
|
3999
|
+
}
|
3962
4000
|
return Object.keys(model.attributes).reduce(
|
3963
4001
|
(populateAcc, attributeName) => fp.merge(
|
3964
4002
|
populateAcc,
|
@@ -3978,40 +4016,46 @@ const getDeepPopulate = (uid2, {
|
|
3978
4016
|
{}
|
3979
4017
|
);
|
3980
4018
|
};
|
3981
|
-
const
|
3982
|
-
|
3983
|
-
|
3984
|
-
countOne = false,
|
3985
|
-
maxLevel = Infinity
|
3986
|
-
} = {}, level = 1) => {
|
3987
|
-
if (level > maxLevel) {
|
4019
|
+
const getPopulateForValidation = (uid2) => {
|
4020
|
+
const model = strapi.getModel(uid2);
|
4021
|
+
if (!model) {
|
3988
4022
|
return {};
|
3989
4023
|
}
|
3990
|
-
const model = strapi.getModel(uid2);
|
3991
4024
|
return Object.entries(model.attributes).reduce((populateAcc, [attributeName, attribute]) => {
|
3992
|
-
if (
|
4025
|
+
if (isScalarAttribute(attribute)) {
|
4026
|
+
if (getDoesAttributeRequireValidation(attribute)) {
|
4027
|
+
populateAcc.fields = populateAcc.fields || [];
|
4028
|
+
populateAcc.fields.push(attributeName);
|
4029
|
+
}
|
3993
4030
|
return populateAcc;
|
3994
4031
|
}
|
3995
|
-
if (
|
3996
|
-
|
3997
|
-
|
3998
|
-
|
4032
|
+
if (isComponent(attribute)) {
|
4033
|
+
const component = attribute.component;
|
4034
|
+
const componentResult = getPopulateForValidation(component);
|
4035
|
+
if (Object.keys(componentResult).length > 0) {
|
4036
|
+
populateAcc.populate = populateAcc.populate || {};
|
4037
|
+
populateAcc.populate[attributeName] = componentResult;
|
4038
|
+
}
|
4039
|
+
return populateAcc;
|
3999
4040
|
}
|
4000
|
-
|
4001
|
-
|
4002
|
-
|
4003
|
-
|
4004
|
-
|
4005
|
-
|
4006
|
-
|
4007
|
-
|
4008
|
-
|
4009
|
-
countOne,
|
4010
|
-
maxLevel
|
4041
|
+
if (isDynamicZone(attribute)) {
|
4042
|
+
const components2 = attribute.components;
|
4043
|
+
const componentsResult = (components2 || []).reduce(
|
4044
|
+
(acc, componentUID) => {
|
4045
|
+
const componentResult = getPopulateForValidation(componentUID);
|
4046
|
+
if (Object.keys(componentResult).length > 0) {
|
4047
|
+
acc[componentUID] = componentResult;
|
4048
|
+
}
|
4049
|
+
return acc;
|
4011
4050
|
},
|
4012
|
-
|
4013
|
-
)
|
4014
|
-
|
4051
|
+
{}
|
4052
|
+
);
|
4053
|
+
if (Object.keys(componentsResult).length > 0) {
|
4054
|
+
populateAcc.populate = populateAcc.populate || {};
|
4055
|
+
populateAcc.populate[attributeName] = { on: componentsResult };
|
4056
|
+
}
|
4057
|
+
}
|
4058
|
+
return populateAcc;
|
4015
4059
|
}, {});
|
4016
4060
|
};
|
4017
4061
|
const getDeepPopulateDraftCount = (uid2) => {
|
@@ -4253,7 +4297,6 @@ const AVAILABLE_LOCALES_FIELDS = [
|
|
4253
4297
|
"locale",
|
4254
4298
|
"updatedAt",
|
4255
4299
|
"createdAt",
|
4256
|
-
"status",
|
4257
4300
|
"publishedAt",
|
4258
4301
|
"documentId"
|
4259
4302
|
];
|
@@ -4274,36 +4317,20 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4274
4317
|
/**
|
4275
4318
|
* Returns available locales of a document for the current status
|
4276
4319
|
*/
|
4277
|
-
async getAvailableLocales(uid2, version, allVersions
|
4320
|
+
async getAvailableLocales(uid2, version, allVersions) {
|
4278
4321
|
const versionsByLocale = fp.groupBy("locale", allVersions);
|
4279
4322
|
if (version.locale) {
|
4280
4323
|
delete versionsByLocale[version.locale];
|
4281
4324
|
}
|
4282
4325
|
const model = strapi2.getModel(uid2);
|
4283
|
-
const keysToKeep = [...AVAILABLE_LOCALES_FIELDS, ...validatableFields];
|
4284
|
-
const traversalFunction = async (localeVersion) => strapiUtils.traverseEntity(
|
4285
|
-
({ key }, { remove }) => {
|
4286
|
-
if (keysToKeep.includes(key)) {
|
4287
|
-
return;
|
4288
|
-
}
|
4289
|
-
remove(key);
|
4290
|
-
},
|
4291
|
-
{ schema: model, getModel: strapi2.getModel.bind(strapi2) },
|
4292
|
-
// @ts-expect-error fix types DocumentVersion incompatible with Data
|
4293
|
-
localeVersion
|
4294
|
-
);
|
4295
4326
|
const mappingResult = await strapiUtils.async.map(
|
4296
4327
|
Object.values(versionsByLocale),
|
4297
4328
|
async (localeVersions) => {
|
4298
|
-
const mappedLocaleVersions = await strapiUtils.async.map(
|
4299
|
-
localeVersions,
|
4300
|
-
traversalFunction
|
4301
|
-
);
|
4302
4329
|
if (!strapiUtils.contentTypes.hasDraftAndPublish(model)) {
|
4303
|
-
return
|
4330
|
+
return localeVersions[0];
|
4304
4331
|
}
|
4305
|
-
const draftVersion =
|
4306
|
-
const otherVersions =
|
4332
|
+
const draftVersion = localeVersions.find((v) => v.publishedAt === null);
|
4333
|
+
const otherVersions = localeVersions.filter((v) => v.id !== draftVersion?.id);
|
4307
4334
|
if (!draftVersion) {
|
4308
4335
|
return;
|
4309
4336
|
}
|
@@ -4325,8 +4352,7 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4325
4352
|
const matchStatus = status === "published" ? v.publishedAt !== null : v.publishedAt === null;
|
4326
4353
|
return matchLocale && matchStatus;
|
4327
4354
|
});
|
4328
|
-
if (!availableStatus)
|
4329
|
-
return availableStatus;
|
4355
|
+
if (!availableStatus) return availableStatus;
|
4330
4356
|
return fp.pick(AVAILABLE_STATUS_FIELDS, availableStatus);
|
4331
4357
|
},
|
4332
4358
|
/**
|
@@ -4336,18 +4362,17 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4336
4362
|
* @returns
|
4337
4363
|
*/
|
4338
4364
|
async getManyAvailableStatus(uid2, documents) {
|
4339
|
-
if (!documents.length)
|
4340
|
-
return [];
|
4365
|
+
if (!documents.length) return [];
|
4341
4366
|
const status = documents[0].publishedAt !== null ? "published" : "draft";
|
4342
|
-
const
|
4343
|
-
|
4344
|
-
|
4345
|
-
|
4346
|
-
|
4367
|
+
const locales = documents.map((d) => d.locale).filter(Boolean);
|
4368
|
+
return strapi2.query(uid2).findMany({
|
4369
|
+
where: {
|
4370
|
+
documentId: { $in: documents.map((d) => d.documentId).filter(Boolean) },
|
4371
|
+
// NOTE: find the "opposite" status
|
4372
|
+
publishedAt: { $null: status === "published" },
|
4373
|
+
locale: { $in: locales }
|
4347
4374
|
},
|
4348
|
-
|
4349
|
-
locale,
|
4350
|
-
fields: ["documentId", "locale", "updatedAt", "createdAt", "publishedAt"]
|
4375
|
+
select: ["id", "documentId", "locale", "updatedAt", "createdAt", "publishedAt"]
|
4351
4376
|
});
|
4352
4377
|
},
|
4353
4378
|
getStatus(version, otherDocumentStatuses) {
|
@@ -4364,10 +4389,8 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4364
4389
|
} else if (otherVersion) {
|
4365
4390
|
draftVersion = otherVersion;
|
4366
4391
|
}
|
4367
|
-
if (!draftVersion)
|
4368
|
-
|
4369
|
-
if (!publishedVersion)
|
4370
|
-
return CONTENT_MANAGER_STATUS.DRAFT;
|
4392
|
+
if (!draftVersion) return CONTENT_MANAGER_STATUS.PUBLISHED;
|
4393
|
+
if (!publishedVersion) return CONTENT_MANAGER_STATUS.DRAFT;
|
4371
4394
|
const isDraftModified = getIsVersionLatestModification(draftVersion, publishedVersion);
|
4372
4395
|
return isDraftModified ? CONTENT_MANAGER_STATUS.MODIFIED : CONTENT_MANAGER_STATUS.PUBLISHED;
|
4373
4396
|
},
|
@@ -4375,11 +4398,9 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4375
4398
|
// We could refactor this so the locales are only loaded when they're
|
4376
4399
|
// needed. e.g. in the bulk locale action modal.
|
4377
4400
|
async getMetadata(uid2, version, { availableLocales = true, availableStatus = true } = {}) {
|
4378
|
-
const populate =
|
4379
|
-
const
|
4380
|
-
where: { documentId: version.documentId },
|
4401
|
+
const { populate = {}, fields = [] } = getPopulateForValidation(uid2);
|
4402
|
+
const params = {
|
4381
4403
|
populate: {
|
4382
|
-
// Populate only fields that require validation for bulk locale actions
|
4383
4404
|
...populate,
|
4384
4405
|
// NOTE: creator fields are selected in this way to avoid exposing sensitive data
|
4385
4406
|
createdBy: {
|
@@ -4388,9 +4409,15 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4388
4409
|
updatedBy: {
|
4389
4410
|
select: ["id", "firstname", "lastname", "email"]
|
4390
4411
|
}
|
4412
|
+
},
|
4413
|
+
fields: fp.uniq([...AVAILABLE_LOCALES_FIELDS, ...fields]),
|
4414
|
+
filters: {
|
4415
|
+
documentId: version.documentId
|
4391
4416
|
}
|
4392
|
-
}
|
4393
|
-
const
|
4417
|
+
};
|
4418
|
+
const dbParams = strapi2.get("query-params").transform(uid2, params);
|
4419
|
+
const versions = await strapi2.db.query(uid2).findMany(dbParams);
|
4420
|
+
const availableLocalesResult = availableLocales ? await this.getAvailableLocales(uid2, version, versions) : [];
|
4394
4421
|
const availableStatusResult = availableStatus ? this.getAvailableStatus(version, versions) : null;
|
4395
4422
|
return {
|
4396
4423
|
availableLocales: availableLocalesResult,
|
@@ -4417,6 +4444,16 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4417
4444
|
opts.availableStatus = false;
|
4418
4445
|
}
|
4419
4446
|
const meta = await this.getMetadata(uid2, document, opts);
|
4447
|
+
if (document.localizations) {
|
4448
|
+
const otherStatus = await this.getManyAvailableStatus(uid2, document.localizations);
|
4449
|
+
document.localizations = document.localizations.map((d) => {
|
4450
|
+
const status = otherStatus.find((s) => s.documentId === d.documentId);
|
4451
|
+
return {
|
4452
|
+
...d,
|
4453
|
+
status: this.getStatus(d, status ? [status] : [])
|
4454
|
+
};
|
4455
|
+
});
|
4456
|
+
}
|
4420
4457
|
return {
|
4421
4458
|
data: {
|
4422
4459
|
...document,
|