@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.mjs
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
import strapiUtils, { validateYupSchema, errors, async, contentTypes as contentTypes$1, yup as yup$1, validateYupSchemaSync, policy, traverse, setCreatorFields, isOperatorOfType, relations as relations$1,
|
2
|
-
import { pick, omit, difference, castArray, intersection, pipe, propOr, isEqual, isEmpty, set, isNil as isNil$1, has, prop, assoc, mapValues, flow, uniq, uniqBy, concat, getOr, propEq, merge, groupBy } from "lodash/fp";
|
1
|
+
import strapiUtils, { validateYupSchema, errors, async, contentTypes as contentTypes$1, yup as yup$1, validateYupSchemaSync, policy, traverse, setCreatorFields, isOperatorOfType, relations as relations$1, pagination } from "@strapi/utils";
|
2
|
+
import { pick, omit, difference, castArray, mergeWith, intersection, pipe, propOr, isEqual, isEmpty, set, isNil as isNil$1, has, prop, assoc, mapValues, flow, uniq, uniqBy, concat, getOr, propEq, merge, groupBy } from "lodash/fp";
|
3
3
|
import "@strapi/types";
|
4
4
|
import * as yup from "yup";
|
5
5
|
import { scheduleJob } from "node-schedule";
|
@@ -141,8 +141,7 @@ const createServiceUtils = ({ strapi: strapi2 }) => {
|
|
141
141
|
};
|
142
142
|
const getRelationRestoreValue = async (versionRelationData, attribute) => {
|
143
143
|
if (Array.isArray(versionRelationData)) {
|
144
|
-
if (versionRelationData.length === 0)
|
145
|
-
return versionRelationData;
|
144
|
+
if (versionRelationData.length === 0) return versionRelationData;
|
146
145
|
const existingAndMissingRelations = await Promise.all(
|
147
146
|
versionRelationData.map((relation) => {
|
148
147
|
return strapi2.documents(attribute.target).findOne({
|
@@ -177,8 +176,7 @@ const createServiceUtils = ({ strapi: strapi2 }) => {
|
|
177
176
|
const getDefaultLocale = async () => localesService ? localesService.getDefaultLocale() : null;
|
178
177
|
const isLocalizedContentType = (model) => i18nContentTypeService ? i18nContentTypeService.isLocalizedContentType(model) : false;
|
179
178
|
const getLocaleDictionary = async () => {
|
180
|
-
if (!localesService)
|
181
|
-
return {};
|
179
|
+
if (!localesService) return {};
|
182
180
|
const locales = await localesService.find() || [];
|
183
181
|
return locales.reduce(
|
184
182
|
(acc, locale) => {
|
@@ -714,14 +712,6 @@ const getFeature$1 = () => {
|
|
714
712
|
};
|
715
713
|
};
|
716
714
|
const history = getFeature$1();
|
717
|
-
const register = async ({ strapi: strapi2 }) => {
|
718
|
-
await history.register?.({ strapi: strapi2 });
|
719
|
-
};
|
720
|
-
const ALLOWED_WEBHOOK_EVENTS = {
|
721
|
-
ENTRY_PUBLISH: "entry.publish",
|
722
|
-
ENTRY_UNPUBLISH: "entry.unpublish"
|
723
|
-
};
|
724
|
-
const FEATURE_ID = "preview";
|
725
715
|
const info = { pluginName: "content-manager", type: "admin" };
|
726
716
|
const previewRouter = {
|
727
717
|
type: "admin",
|
@@ -767,6 +757,10 @@ const validatePreviewUrl = async (strapi2, uid2, params) => {
|
|
767
757
|
}
|
768
758
|
newParams.documentId = doc?.documentId;
|
769
759
|
}
|
760
|
+
if (!newParams.status) {
|
761
|
+
const isDPEnabled = model?.options?.draftAndPublish;
|
762
|
+
newParams.status = isDPEnabled ? "draft" : "published";
|
763
|
+
}
|
770
764
|
return newParams;
|
771
765
|
};
|
772
766
|
const createPreviewController = () => {
|
@@ -812,8 +806,48 @@ const createPreviewService = ({ strapi: strapi2 }) => {
|
|
812
806
|
}
|
813
807
|
};
|
814
808
|
};
|
809
|
+
const extendMiddlewareConfiguration = (middleware = { name: "", config: {} }) => {
|
810
|
+
const middlewares = strapi.config.get("middlewares");
|
811
|
+
const configuredMiddlewares = middlewares.map((currentMiddleware) => {
|
812
|
+
if (currentMiddleware === middleware.name) {
|
813
|
+
return middleware;
|
814
|
+
}
|
815
|
+
if (currentMiddleware.name === middleware.name) {
|
816
|
+
return mergeWith(
|
817
|
+
(objValue, srcValue) => {
|
818
|
+
if (Array.isArray(objValue)) {
|
819
|
+
return objValue.concat(srcValue);
|
820
|
+
}
|
821
|
+
return void 0;
|
822
|
+
},
|
823
|
+
currentMiddleware,
|
824
|
+
middleware
|
825
|
+
);
|
826
|
+
}
|
827
|
+
return currentMiddleware;
|
828
|
+
});
|
829
|
+
strapi.config.set("middlewares", configuredMiddlewares);
|
830
|
+
};
|
815
831
|
const createPreviewConfigService = ({ strapi: strapi2 }) => {
|
816
832
|
return {
|
833
|
+
register() {
|
834
|
+
if (!this.isEnabled()) {
|
835
|
+
return;
|
836
|
+
}
|
837
|
+
const config = strapi2.config.get("admin.preview");
|
838
|
+
if (config.config?.allowedOrigins) {
|
839
|
+
extendMiddlewareConfiguration({
|
840
|
+
name: "strapi::security",
|
841
|
+
config: {
|
842
|
+
contentSecurityPolicy: {
|
843
|
+
directives: {
|
844
|
+
"frame-src": config.config.allowedOrigins
|
845
|
+
}
|
846
|
+
}
|
847
|
+
}
|
848
|
+
});
|
849
|
+
}
|
850
|
+
},
|
817
851
|
isEnabled() {
|
818
852
|
const config = strapi2.config.get("admin.preview");
|
819
853
|
if (!config) {
|
@@ -855,14 +889,13 @@ const services$1 = {
|
|
855
889
|
"preview-config": createPreviewConfigService
|
856
890
|
};
|
857
891
|
const getFeature = () => {
|
858
|
-
if (!strapi.features.future.isEnabled(FEATURE_ID)) {
|
859
|
-
return {};
|
860
|
-
}
|
861
892
|
return {
|
862
|
-
|
863
|
-
console.log("Bootstrapping preview server");
|
893
|
+
register() {
|
864
894
|
const config = getService(strapi, "preview-config");
|
865
895
|
config.validate();
|
896
|
+
config.register();
|
897
|
+
},
|
898
|
+
bootstrap() {
|
866
899
|
},
|
867
900
|
routes: routes$1,
|
868
901
|
controllers: controllers$1,
|
@@ -870,6 +903,14 @@ const getFeature = () => {
|
|
870
903
|
};
|
871
904
|
};
|
872
905
|
const preview = getFeature();
|
906
|
+
const register = async ({ strapi: strapi2 }) => {
|
907
|
+
await history.register?.({ strapi: strapi2 });
|
908
|
+
await preview.register?.({ strapi: strapi2 });
|
909
|
+
};
|
910
|
+
const ALLOWED_WEBHOOK_EVENTS = {
|
911
|
+
ENTRY_PUBLISH: "entry.publish",
|
912
|
+
ENTRY_UNPUBLISH: "entry.unpublish"
|
913
|
+
};
|
873
914
|
const bootstrap = async () => {
|
874
915
|
Object.entries(ALLOWED_WEBHOOK_EVENTS).forEach(([key, value]) => {
|
875
916
|
strapi.get("webhookStore").addAllowedEvent(key, value);
|
@@ -1433,8 +1474,7 @@ const isSortable = (schema, name) => {
|
|
1433
1474
|
if (!_.has(schema.attributes, name)) {
|
1434
1475
|
return false;
|
1435
1476
|
}
|
1436
|
-
if (schema.modelType === "component" && name === "id")
|
1437
|
-
return false;
|
1477
|
+
if (schema.modelType === "component" && name === "id") return false;
|
1438
1478
|
const attribute = schema.attributes[name];
|
1439
1479
|
if (NON_SORTABLES.includes(attribute.type)) {
|
1440
1480
|
return false;
|
@@ -1579,8 +1619,7 @@ const createDefaultSettings = async (schema) => {
|
|
1579
1619
|
};
|
1580
1620
|
};
|
1581
1621
|
const syncSettings = async (configuration, schema) => {
|
1582
|
-
if (isEmpty(configuration.settings))
|
1583
|
-
return createDefaultSettings(schema);
|
1622
|
+
if (isEmpty(configuration.settings)) return createDefaultSettings(schema);
|
1584
1623
|
const defaultField = getDefaultMainField(schema);
|
1585
1624
|
const { mainField = defaultField, defaultSortBy = defaultField } = configuration.settings || {};
|
1586
1625
|
return {
|
@@ -1756,8 +1795,7 @@ const excludeNotCreatableFields = (uid2, permissionChecker2) => (body, path = []
|
|
1756
1795
|
}
|
1757
1796
|
switch (attribute.type) {
|
1758
1797
|
case "relation": {
|
1759
|
-
if (canCreate(attributePath))
|
1760
|
-
return body2;
|
1798
|
+
if (canCreate(attributePath)) return body2;
|
1761
1799
|
return set(attributePath, { set: [] }, body2);
|
1762
1800
|
}
|
1763
1801
|
case "component": {
|
@@ -1767,8 +1805,7 @@ const excludeNotCreatableFields = (uid2, permissionChecker2) => (body, path = []
|
|
1767
1805
|
]);
|
1768
1806
|
}
|
1769
1807
|
default: {
|
1770
|
-
if (canCreate(attributePath))
|
1771
|
-
return body2;
|
1808
|
+
if (canCreate(attributePath)) return body2;
|
1772
1809
|
return set(attributePath, null, body2);
|
1773
1810
|
}
|
1774
1811
|
}
|
@@ -2561,8 +2598,7 @@ const validateStatus = (sourceUid, status) => {
|
|
2561
2598
|
const sourceModel = strapi.getModel(sourceUid);
|
2562
2599
|
const isDP = contentTypes$1.hasDraftAndPublish;
|
2563
2600
|
const isSourceDP = isDP(sourceModel);
|
2564
|
-
if (!isSourceDP)
|
2565
|
-
return { status: void 0 };
|
2601
|
+
if (!isSourceDP) return { status: void 0 };
|
2566
2602
|
switch (status) {
|
2567
2603
|
case "published":
|
2568
2604
|
return { status: "published" };
|
@@ -3207,18 +3243,15 @@ async function syncMetadatas(configuration, schema) {
|
|
3207
3243
|
_.set(updatedMeta, ["list", "searchable"], false);
|
3208
3244
|
_.set(acc, [key], updatedMeta);
|
3209
3245
|
}
|
3210
|
-
if (!_.has(edit, "mainField"))
|
3211
|
-
return acc;
|
3246
|
+
if (!_.has(edit, "mainField")) return acc;
|
3212
3247
|
if (!isRelation$1(attr)) {
|
3213
3248
|
_.set(updatedMeta, "edit", _.omit(edit, ["mainField"]));
|
3214
3249
|
_.set(acc, [key], updatedMeta);
|
3215
3250
|
return acc;
|
3216
3251
|
}
|
3217
|
-
if (edit.mainField === "id")
|
3218
|
-
return acc;
|
3252
|
+
if (edit.mainField === "id") return acc;
|
3219
3253
|
const targetSchema = getTargetSchema(attr.targetModel);
|
3220
|
-
if (!targetSchema)
|
3221
|
-
return acc;
|
3254
|
+
if (!targetSchema) return acc;
|
3222
3255
|
if (!isSortable(targetSchema, edit.mainField) && !isListable(targetSchema, edit.mainField)) {
|
3223
3256
|
_.set(updatedMeta, ["edit", "mainField"], getDefaultMainField(targetSchema));
|
3224
3257
|
_.set(acc, [key], updatedMeta);
|
@@ -3263,8 +3296,7 @@ function createDefaultEditLayout(schema) {
|
|
3263
3296
|
return appendToEditLayout([], keys2, schema);
|
3264
3297
|
}
|
3265
3298
|
function syncLayouts(configuration, schema) {
|
3266
|
-
if (_.isEmpty(configuration.layouts))
|
3267
|
-
return createDefaultLayouts(schema);
|
3299
|
+
if (_.isEmpty(configuration.layouts)) return createDefaultLayouts(schema);
|
3268
3300
|
const { list = [], editRelations = [], edit = [] } = configuration.layouts || {};
|
3269
3301
|
let cleanList = list.filter((attr) => isListable(schema, attr));
|
3270
3302
|
const cleanEditRelations = editRelations.filter(
|
@@ -3275,8 +3307,7 @@ function syncLayouts(configuration, schema) {
|
|
3275
3307
|
for (const row of edit) {
|
3276
3308
|
const newRow = [];
|
3277
3309
|
for (const el of row) {
|
3278
|
-
if (!hasEditableAttribute(schema, el.name))
|
3279
|
-
continue;
|
3310
|
+
if (!hasEditableAttribute(schema, el.name)) continue;
|
3280
3311
|
const { hasFieldSize } = getService$2("field-sizes");
|
3281
3312
|
const fieldType = hasFieldSize(schema.attributes[el.name].customField) ? schema.attributes[el.name].customField : schema.attributes[el.name].type;
|
3282
3313
|
if (!isAllowedFieldSize(fieldType, el.size)) {
|
@@ -3307,8 +3338,7 @@ function syncLayouts(configuration, schema) {
|
|
3307
3338
|
};
|
3308
3339
|
}
|
3309
3340
|
const appendToEditLayout = (layout = [], keysToAppend, schema) => {
|
3310
|
-
if (keysToAppend.length === 0)
|
3311
|
-
return layout;
|
3341
|
+
if (keysToAppend.length === 0) return layout;
|
3312
3342
|
let currentRowIndex = Math.max(layout.length - 1, 0);
|
3313
3343
|
if (!layout[currentRowIndex]) {
|
3314
3344
|
layout[currentRowIndex] = [];
|
@@ -3874,6 +3904,12 @@ function getPopulateForRelation(attribute, model, attributeName, { countMany, co
|
|
3874
3904
|
if (initialPopulate) {
|
3875
3905
|
return initialPopulate;
|
3876
3906
|
}
|
3907
|
+
if (attributeName === "localizations") {
|
3908
|
+
const validationPopulate = getPopulateForValidation(model.uid);
|
3909
|
+
return {
|
3910
|
+
populate: validationPopulate.populate
|
3911
|
+
};
|
3912
|
+
}
|
3877
3913
|
if (!isVisibleAttribute$1(model, attributeName)) {
|
3878
3914
|
return true;
|
3879
3915
|
}
|
@@ -3933,6 +3969,9 @@ const getDeepPopulate = (uid2, {
|
|
3933
3969
|
return {};
|
3934
3970
|
}
|
3935
3971
|
const model = strapi.getModel(uid2);
|
3972
|
+
if (!model) {
|
3973
|
+
return {};
|
3974
|
+
}
|
3936
3975
|
return Object.keys(model.attributes).reduce(
|
3937
3976
|
(populateAcc, attributeName) => merge(
|
3938
3977
|
populateAcc,
|
@@ -3952,40 +3991,46 @@ const getDeepPopulate = (uid2, {
|
|
3952
3991
|
{}
|
3953
3992
|
);
|
3954
3993
|
};
|
3955
|
-
const
|
3956
|
-
|
3957
|
-
|
3958
|
-
countOne = false,
|
3959
|
-
maxLevel = Infinity
|
3960
|
-
} = {}, level = 1) => {
|
3961
|
-
if (level > maxLevel) {
|
3994
|
+
const getPopulateForValidation = (uid2) => {
|
3995
|
+
const model = strapi.getModel(uid2);
|
3996
|
+
if (!model) {
|
3962
3997
|
return {};
|
3963
3998
|
}
|
3964
|
-
const model = strapi.getModel(uid2);
|
3965
3999
|
return Object.entries(model.attributes).reduce((populateAcc, [attributeName, attribute]) => {
|
3966
|
-
if (
|
4000
|
+
if (isScalarAttribute(attribute)) {
|
4001
|
+
if (getDoesAttributeRequireValidation(attribute)) {
|
4002
|
+
populateAcc.fields = populateAcc.fields || [];
|
4003
|
+
populateAcc.fields.push(attributeName);
|
4004
|
+
}
|
3967
4005
|
return populateAcc;
|
3968
4006
|
}
|
3969
|
-
if (
|
3970
|
-
|
3971
|
-
|
3972
|
-
|
4007
|
+
if (isComponent(attribute)) {
|
4008
|
+
const component = attribute.component;
|
4009
|
+
const componentResult = getPopulateForValidation(component);
|
4010
|
+
if (Object.keys(componentResult).length > 0) {
|
4011
|
+
populateAcc.populate = populateAcc.populate || {};
|
4012
|
+
populateAcc.populate[attributeName] = componentResult;
|
4013
|
+
}
|
4014
|
+
return populateAcc;
|
3973
4015
|
}
|
3974
|
-
|
3975
|
-
|
3976
|
-
|
3977
|
-
|
3978
|
-
|
3979
|
-
|
3980
|
-
|
3981
|
-
|
3982
|
-
|
3983
|
-
countOne,
|
3984
|
-
maxLevel
|
4016
|
+
if (isDynamicZone(attribute)) {
|
4017
|
+
const components2 = attribute.components;
|
4018
|
+
const componentsResult = (components2 || []).reduce(
|
4019
|
+
(acc, componentUID) => {
|
4020
|
+
const componentResult = getPopulateForValidation(componentUID);
|
4021
|
+
if (Object.keys(componentResult).length > 0) {
|
4022
|
+
acc[componentUID] = componentResult;
|
4023
|
+
}
|
4024
|
+
return acc;
|
3985
4025
|
},
|
3986
|
-
|
3987
|
-
)
|
3988
|
-
|
4026
|
+
{}
|
4027
|
+
);
|
4028
|
+
if (Object.keys(componentsResult).length > 0) {
|
4029
|
+
populateAcc.populate = populateAcc.populate || {};
|
4030
|
+
populateAcc.populate[attributeName] = { on: componentsResult };
|
4031
|
+
}
|
4032
|
+
}
|
4033
|
+
return populateAcc;
|
3989
4034
|
}, {});
|
3990
4035
|
};
|
3991
4036
|
const getDeepPopulateDraftCount = (uid2) => {
|
@@ -4227,7 +4272,6 @@ const AVAILABLE_LOCALES_FIELDS = [
|
|
4227
4272
|
"locale",
|
4228
4273
|
"updatedAt",
|
4229
4274
|
"createdAt",
|
4230
|
-
"status",
|
4231
4275
|
"publishedAt",
|
4232
4276
|
"documentId"
|
4233
4277
|
];
|
@@ -4248,36 +4292,20 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4248
4292
|
/**
|
4249
4293
|
* Returns available locales of a document for the current status
|
4250
4294
|
*/
|
4251
|
-
async getAvailableLocales(uid2, version, allVersions
|
4295
|
+
async getAvailableLocales(uid2, version, allVersions) {
|
4252
4296
|
const versionsByLocale = groupBy("locale", allVersions);
|
4253
4297
|
if (version.locale) {
|
4254
4298
|
delete versionsByLocale[version.locale];
|
4255
4299
|
}
|
4256
4300
|
const model = strapi2.getModel(uid2);
|
4257
|
-
const keysToKeep = [...AVAILABLE_LOCALES_FIELDS, ...validatableFields];
|
4258
|
-
const traversalFunction = async (localeVersion) => traverseEntity(
|
4259
|
-
({ key }, { remove }) => {
|
4260
|
-
if (keysToKeep.includes(key)) {
|
4261
|
-
return;
|
4262
|
-
}
|
4263
|
-
remove(key);
|
4264
|
-
},
|
4265
|
-
{ schema: model, getModel: strapi2.getModel.bind(strapi2) },
|
4266
|
-
// @ts-expect-error fix types DocumentVersion incompatible with Data
|
4267
|
-
localeVersion
|
4268
|
-
);
|
4269
4301
|
const mappingResult = await async.map(
|
4270
4302
|
Object.values(versionsByLocale),
|
4271
4303
|
async (localeVersions) => {
|
4272
|
-
const mappedLocaleVersions = await async.map(
|
4273
|
-
localeVersions,
|
4274
|
-
traversalFunction
|
4275
|
-
);
|
4276
4304
|
if (!contentTypes$1.hasDraftAndPublish(model)) {
|
4277
|
-
return
|
4305
|
+
return localeVersions[0];
|
4278
4306
|
}
|
4279
|
-
const draftVersion =
|
4280
|
-
const otherVersions =
|
4307
|
+
const draftVersion = localeVersions.find((v) => v.publishedAt === null);
|
4308
|
+
const otherVersions = localeVersions.filter((v) => v.id !== draftVersion?.id);
|
4281
4309
|
if (!draftVersion) {
|
4282
4310
|
return;
|
4283
4311
|
}
|
@@ -4299,8 +4327,7 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4299
4327
|
const matchStatus = status === "published" ? v.publishedAt !== null : v.publishedAt === null;
|
4300
4328
|
return matchLocale && matchStatus;
|
4301
4329
|
});
|
4302
|
-
if (!availableStatus)
|
4303
|
-
return availableStatus;
|
4330
|
+
if (!availableStatus) return availableStatus;
|
4304
4331
|
return pick(AVAILABLE_STATUS_FIELDS, availableStatus);
|
4305
4332
|
},
|
4306
4333
|
/**
|
@@ -4310,18 +4337,17 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4310
4337
|
* @returns
|
4311
4338
|
*/
|
4312
4339
|
async getManyAvailableStatus(uid2, documents) {
|
4313
|
-
if (!documents.length)
|
4314
|
-
return [];
|
4340
|
+
if (!documents.length) return [];
|
4315
4341
|
const status = documents[0].publishedAt !== null ? "published" : "draft";
|
4316
|
-
const
|
4317
|
-
|
4318
|
-
|
4319
|
-
|
4320
|
-
|
4342
|
+
const locales = documents.map((d) => d.locale).filter(Boolean);
|
4343
|
+
return strapi2.query(uid2).findMany({
|
4344
|
+
where: {
|
4345
|
+
documentId: { $in: documents.map((d) => d.documentId).filter(Boolean) },
|
4346
|
+
// NOTE: find the "opposite" status
|
4347
|
+
publishedAt: { $null: status === "published" },
|
4348
|
+
locale: { $in: locales }
|
4321
4349
|
},
|
4322
|
-
|
4323
|
-
locale,
|
4324
|
-
fields: ["documentId", "locale", "updatedAt", "createdAt", "publishedAt"]
|
4350
|
+
select: ["id", "documentId", "locale", "updatedAt", "createdAt", "publishedAt"]
|
4325
4351
|
});
|
4326
4352
|
},
|
4327
4353
|
getStatus(version, otherDocumentStatuses) {
|
@@ -4338,10 +4364,8 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4338
4364
|
} else if (otherVersion) {
|
4339
4365
|
draftVersion = otherVersion;
|
4340
4366
|
}
|
4341
|
-
if (!draftVersion)
|
4342
|
-
|
4343
|
-
if (!publishedVersion)
|
4344
|
-
return CONTENT_MANAGER_STATUS.DRAFT;
|
4367
|
+
if (!draftVersion) return CONTENT_MANAGER_STATUS.PUBLISHED;
|
4368
|
+
if (!publishedVersion) return CONTENT_MANAGER_STATUS.DRAFT;
|
4345
4369
|
const isDraftModified = getIsVersionLatestModification(draftVersion, publishedVersion);
|
4346
4370
|
return isDraftModified ? CONTENT_MANAGER_STATUS.MODIFIED : CONTENT_MANAGER_STATUS.PUBLISHED;
|
4347
4371
|
},
|
@@ -4349,11 +4373,9 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4349
4373
|
// We could refactor this so the locales are only loaded when they're
|
4350
4374
|
// needed. e.g. in the bulk locale action modal.
|
4351
4375
|
async getMetadata(uid2, version, { availableLocales = true, availableStatus = true } = {}) {
|
4352
|
-
const populate =
|
4353
|
-
const
|
4354
|
-
where: { documentId: version.documentId },
|
4376
|
+
const { populate = {}, fields = [] } = getPopulateForValidation(uid2);
|
4377
|
+
const params = {
|
4355
4378
|
populate: {
|
4356
|
-
// Populate only fields that require validation for bulk locale actions
|
4357
4379
|
...populate,
|
4358
4380
|
// NOTE: creator fields are selected in this way to avoid exposing sensitive data
|
4359
4381
|
createdBy: {
|
@@ -4362,9 +4384,15 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4362
4384
|
updatedBy: {
|
4363
4385
|
select: ["id", "firstname", "lastname", "email"]
|
4364
4386
|
}
|
4387
|
+
},
|
4388
|
+
fields: uniq([...AVAILABLE_LOCALES_FIELDS, ...fields]),
|
4389
|
+
filters: {
|
4390
|
+
documentId: version.documentId
|
4365
4391
|
}
|
4366
|
-
}
|
4367
|
-
const
|
4392
|
+
};
|
4393
|
+
const dbParams = strapi2.get("query-params").transform(uid2, params);
|
4394
|
+
const versions = await strapi2.db.query(uid2).findMany(dbParams);
|
4395
|
+
const availableLocalesResult = availableLocales ? await this.getAvailableLocales(uid2, version, versions) : [];
|
4368
4396
|
const availableStatusResult = availableStatus ? this.getAvailableStatus(version, versions) : null;
|
4369
4397
|
return {
|
4370
4398
|
availableLocales: availableLocalesResult,
|
@@ -4391,6 +4419,16 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4391
4419
|
opts.availableStatus = false;
|
4392
4420
|
}
|
4393
4421
|
const meta = await this.getMetadata(uid2, document, opts);
|
4422
|
+
if (document.localizations) {
|
4423
|
+
const otherStatus = await this.getManyAvailableStatus(uid2, document.localizations);
|
4424
|
+
document.localizations = document.localizations.map((d) => {
|
4425
|
+
const status = otherStatus.find((s) => s.documentId === d.documentId);
|
4426
|
+
return {
|
4427
|
+
...d,
|
4428
|
+
status: this.getStatus(d, status ? [status] : [])
|
4429
|
+
};
|
4430
|
+
});
|
4431
|
+
}
|
4394
4432
|
return {
|
4395
4433
|
data: {
|
4396
4434
|
...document,
|