@strapi/content-manager 0.0.0-experimental.afa3b513b8f95459043f33fb94f4bac03af1474f → 0.0.0-experimental.b1d7921ddb1b36c84b58a3946e1dc9dbda91b2dc
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/{ComponentConfigurationPage-G4EIirP8.js → ComponentConfigurationPage-CQDCxI8x.js} +3 -3
- package/dist/_chunks/{ComponentConfigurationPage-G4EIirP8.js.map → ComponentConfigurationPage-CQDCxI8x.js.map} +1 -1
- package/dist/_chunks/{ComponentConfigurationPage-CnL10QYC.mjs → ComponentConfigurationPage-jmWwucg_.mjs} +3 -3
- package/dist/_chunks/{ComponentConfigurationPage-CnL10QYC.mjs.map → ComponentConfigurationPage-jmWwucg_.mjs.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-B2AA1kVF.js → EditConfigurationPage-Ce4bIm4n.js} +3 -3
- package/dist/_chunks/{EditConfigurationPage-B2AA1kVF.js.map → EditConfigurationPage-Ce4bIm4n.js.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-I2kKh9dx.mjs → EditConfigurationPage-W07CEdm2.mjs} +3 -3
- package/dist/_chunks/{EditConfigurationPage-I2kKh9dx.mjs.map → EditConfigurationPage-W07CEdm2.mjs.map} +1 -1
- package/dist/_chunks/{EditViewPage-CHgoNwlc.js → EditViewPage-CqHMM0P0.js} +15 -5
- package/dist/_chunks/EditViewPage-CqHMM0P0.js.map +1 -0
- package/dist/_chunks/{EditViewPage-zFjJK0s8.mjs → EditViewPage-al5OO1NR.mjs} +15 -5
- package/dist/_chunks/EditViewPage-al5OO1NR.mjs.map +1 -0
- package/dist/_chunks/{Field-9DePZh-0.js → Field-DSOUlTCm.js} +69 -25
- package/dist/_chunks/Field-DSOUlTCm.js.map +1 -0
- package/dist/_chunks/{Field-DPAzUS1M.mjs → Field-EeG6NQ7x.mjs} +69 -25
- package/dist/_chunks/Field-EeG6NQ7x.mjs.map +1 -0
- package/dist/_chunks/{Form-CEkENbkF.mjs → Form-BAo9ANb_.mjs} +3 -3
- package/dist/_chunks/Form-BAo9ANb_.mjs.map +1 -0
- package/dist/_chunks/{Form-DPm-KZ1A.js → Form-DAEfHKzm.js} +3 -3
- package/dist/_chunks/Form-DAEfHKzm.js.map +1 -0
- package/dist/_chunks/{History-utls71em.mjs → History-BpLIu67W.mjs} +24 -11
- package/dist/_chunks/History-BpLIu67W.mjs.map +1 -0
- package/dist/_chunks/{History-DXSbTWez.js → History-CTFvy6XH.js} +23 -10
- package/dist/_chunks/History-CTFvy6XH.js.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-D5C7ACZ_.js → ListConfigurationPage-CDzlMBz_.js} +2 -2
- package/dist/_chunks/{ListConfigurationPage-D5C7ACZ_.js.map → ListConfigurationPage-CDzlMBz_.js.map} +1 -1
- package/dist/_chunks/{ListConfigurationPage-CuMXWWqb.mjs → ListConfigurationPage-DOqj5f8Y.mjs} +2 -2
- package/dist/_chunks/{ListConfigurationPage-CuMXWWqb.mjs.map → ListConfigurationPage-DOqj5f8Y.mjs.map} +1 -1
- package/dist/_chunks/{ListViewPage-CdKd-PS_.mjs → ListViewPage-BbXYNI0v.mjs} +4 -4
- package/dist/_chunks/{ListViewPage-CdKd-PS_.mjs.map → ListViewPage-BbXYNI0v.mjs.map} +1 -1
- package/dist/_chunks/{ListViewPage-DfuwH1tt.js → ListViewPage-D0fpPYKp.js} +4 -4
- package/dist/_chunks/{ListViewPage-DfuwH1tt.js.map → ListViewPage-D0fpPYKp.js.map} +1 -1
- package/dist/_chunks/{NoContentTypePage-BIxlkWWi.js → NoContentTypePage-DTzkSAV5.js} +2 -2
- package/dist/_chunks/{NoContentTypePage-BIxlkWWi.js.map → NoContentTypePage-DTzkSAV5.js.map} +1 -1
- package/dist/_chunks/{NoContentTypePage-DkToTT7u.mjs → NoContentTypePage-w2Q0VVOT.mjs} +2 -2
- package/dist/_chunks/{NoContentTypePage-DkToTT7u.mjs.map → NoContentTypePage-w2Q0VVOT.mjs.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-Bu4GWYb-.js → NoPermissionsPage-BoI2rU68.js} +2 -2
- package/dist/_chunks/{NoPermissionsPage-Bu4GWYb-.js.map → NoPermissionsPage-BoI2rU68.js.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-DlWi4BAH.mjs → NoPermissionsPage-Km0Vk5Wp.mjs} +2 -2
- package/dist/_chunks/{NoPermissionsPage-DlWi4BAH.mjs.map → NoPermissionsPage-Km0Vk5Wp.mjs.map} +1 -1
- package/dist/_chunks/{Relations-QP5yn9_z.mjs → Relations-C_bpmSuQ.mjs} +50 -28
- package/dist/_chunks/Relations-C_bpmSuQ.mjs.map +1 -0
- package/dist/_chunks/{Relations-CFjTESWQ.js → Relations-D6Nz5ksc.js} +50 -28
- package/dist/_chunks/Relations-D6Nz5ksc.js.map +1 -0
- package/dist/_chunks/{en-BVzUkPxZ.js → en-Bm0D0IWz.js} +8 -8
- package/dist/_chunks/{en-BVzUkPxZ.js.map → en-Bm0D0IWz.js.map} +1 -1
- package/dist/_chunks/{en-CPTj6CjC.mjs → en-DKV44jRb.mjs} +8 -8
- package/dist/_chunks/{en-CPTj6CjC.mjs.map → en-DKV44jRb.mjs.map} +1 -1
- package/dist/_chunks/{index-DXiHxy70.js → index-BsMu2oVP.js} +947 -868
- package/dist/_chunks/index-BsMu2oVP.js.map +1 -0
- package/dist/_chunks/{index-BHfS6_D5.mjs → index-DcQ6xogO.mjs} +948 -870
- package/dist/_chunks/index-DcQ6xogO.mjs.map +1 -0
- package/dist/_chunks/{layout-bE-WUnQ0.js → layout-B4aCAdTt.js} +3 -3
- package/dist/_chunks/{layout-bE-WUnQ0.js.map → layout-B4aCAdTt.js.map} +1 -1
- package/dist/_chunks/{layout-DX_52HSH.mjs → layout-BavJ6v4B.mjs} +3 -3
- package/dist/_chunks/{layout-DX_52HSH.mjs.map → layout-BavJ6v4B.mjs.map} +1 -1
- package/dist/_chunks/{relations-SCVAL_aJ.mjs → relations-DMG453Od.mjs} +2 -2
- package/dist/_chunks/{relations-SCVAL_aJ.mjs.map → relations-DMG453Od.mjs.map} +1 -1
- package/dist/_chunks/{relations-D706vblp.js → relations-Lrm9nz_m.js} +2 -2
- package/dist/_chunks/{relations-D706vblp.js.map → relations-Lrm9nz_m.js.map} +1 -1
- package/dist/admin/index.js +2 -1
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +3 -2
- package/dist/admin/src/exports.d.ts +1 -1
- package/dist/admin/src/hooks/useDocument.d.ts +32 -1
- package/dist/admin/src/pages/EditView/components/Header.d.ts +1 -0
- package/dist/server/index.js +67 -28
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +67 -28
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
- package/dist/server/src/controllers/relations.d.ts.map +1 -1
- package/dist/server/src/controllers/utils/metadata.d.ts +15 -1
- package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
- package/dist/server/src/history/services/history.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +4 -4
- package/dist/server/src/services/document-metadata.d.ts +8 -8
- package/dist/server/src/services/document-metadata.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +4 -4
- 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/utils/index.d.ts +2 -0
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/package.json +9 -9
- package/dist/_chunks/EditViewPage-CHgoNwlc.js.map +0 -1
- package/dist/_chunks/EditViewPage-zFjJK0s8.mjs.map +0 -1
- package/dist/_chunks/Field-9DePZh-0.js.map +0 -1
- package/dist/_chunks/Field-DPAzUS1M.mjs.map +0 -1
- package/dist/_chunks/Form-CEkENbkF.mjs.map +0 -1
- package/dist/_chunks/Form-DPm-KZ1A.js.map +0 -1
- package/dist/_chunks/History-DXSbTWez.js.map +0 -1
- package/dist/_chunks/History-utls71em.mjs.map +0 -1
- package/dist/_chunks/Relations-CFjTESWQ.js.map +0 -1
- package/dist/_chunks/Relations-QP5yn9_z.mjs.map +0 -1
- package/dist/_chunks/index-BHfS6_D5.mjs.map +0 -1
- package/dist/_chunks/index-DXiHxy70.js.map +0 -1
@@ -31,7 +31,9 @@ type UseDocument = (args: UseDocumentArgs, opts?: UseDocumentOpts) => {
|
|
31
31
|
* This is the schema of the content type, it is not the same as the layout.
|
32
32
|
*/
|
33
33
|
schema?: Schema;
|
34
|
+
schemas?: Schema[];
|
34
35
|
validate: (document: Document) => null | FormErrors;
|
36
|
+
hasError?: boolean;
|
35
37
|
};
|
36
38
|
/**
|
37
39
|
* @alpha
|
@@ -78,10 +80,39 @@ declare const useDoc: () => {
|
|
78
80
|
* This is the schema of the content type, it is not the same as the layout.
|
79
81
|
*/
|
80
82
|
schema?: ContentType | undefined;
|
83
|
+
schemas?: ContentType[] | undefined;
|
81
84
|
validate: (document: Document) => null | FormErrors;
|
85
|
+
hasError?: boolean | undefined;
|
82
86
|
collectionType: string;
|
83
87
|
model: string;
|
84
88
|
id: string | undefined;
|
85
89
|
};
|
86
|
-
|
90
|
+
/**
|
91
|
+
* @public
|
92
|
+
* @experimental
|
93
|
+
* Content manager context hooks for plugin development.
|
94
|
+
* Make sure to use this hook inside the content manager.
|
95
|
+
*/
|
96
|
+
declare const useContentManagerContext: () => {
|
97
|
+
error: import("@reduxjs/toolkit").SerializedError | import("../utils/api").BaseQueryError | undefined;
|
98
|
+
isLoading: boolean;
|
99
|
+
model: string;
|
100
|
+
collectionType: string;
|
101
|
+
id: string | undefined;
|
102
|
+
slug: string;
|
103
|
+
isCreatingEntry: boolean;
|
104
|
+
isSingleType: boolean;
|
105
|
+
hasDraftAndPublish: boolean;
|
106
|
+
components: ComponentsDictionary;
|
107
|
+
contentType: ContentType | undefined;
|
108
|
+
contentTypes: ContentType[] | undefined;
|
109
|
+
form: import("@strapi/admin/strapi-admin").FormContextValue<import("@strapi/admin/strapi-admin").FormValues>;
|
110
|
+
layout: {
|
111
|
+
error?: import("@reduxjs/toolkit").SerializedError | import("../utils/api").BaseQueryError | undefined;
|
112
|
+
isLoading: boolean;
|
113
|
+
edit: import("./useDocumentLayout").EditLayout;
|
114
|
+
list: import("./useDocumentLayout").ListLayout;
|
115
|
+
};
|
116
|
+
};
|
117
|
+
export { useDocument, useDoc, useContentManagerContext };
|
87
118
|
export type { UseDocument, UseDocumentArgs, Document, Schema, ComponentsDictionary };
|
@@ -28,6 +28,7 @@ interface HeaderActionDescription {
|
|
28
28
|
}>;
|
29
29
|
onSelect?: (value: string) => void;
|
30
30
|
value?: string;
|
31
|
+
customizeContent?: (value: string) => React.ReactNode;
|
31
32
|
}
|
32
33
|
declare const DEFAULT_HEADER_ACTIONS: DocumentActionComponent[];
|
33
34
|
export { Header, DEFAULT_HEADER_ACTIONS };
|
package/dist/server/index.js
CHANGED
@@ -393,7 +393,12 @@ const createHistoryService = ({ strapi: strapi2 }) => {
|
|
393
393
|
if (userToPopulate == null) {
|
394
394
|
return null;
|
395
395
|
}
|
396
|
-
return strapi2.query("admin::user").findOne({
|
396
|
+
return strapi2.query("admin::user").findOne({
|
397
|
+
where: {
|
398
|
+
...userToPopulate.id ? { id: userToPopulate.id } : {},
|
399
|
+
...userToPopulate.documentId ? { documentId: userToPopulate.documentId } : {}
|
400
|
+
}
|
401
|
+
});
|
397
402
|
})
|
398
403
|
);
|
399
404
|
return {
|
@@ -1715,7 +1720,7 @@ const updateDocument = async (ctx, opts) => {
|
|
1715
1720
|
throw new strapiUtils.errors.ForbiddenError();
|
1716
1721
|
}
|
1717
1722
|
const pickPermittedFields = documentVersion ? permissionChecker2.sanitizeUpdateInput(documentVersion) : permissionChecker2.sanitizeCreateInput;
|
1718
|
-
const setCreator = strapiUtils.setCreatorFields({ user, isEdition: true });
|
1723
|
+
const setCreator = documentVersion ? strapiUtils.setCreatorFields({ user, isEdition: true }) : strapiUtils.setCreatorFields({ user });
|
1719
1724
|
const sanitizeFn = strapiUtils.async.pipe(pickPermittedFields, setCreator);
|
1720
1725
|
const sanitizedBody = await sanitizeFn(body);
|
1721
1726
|
return documentManager2.update(documentVersion?.documentId || id, model, {
|
@@ -1924,11 +1929,17 @@ const collectionTypes = {
|
|
1924
1929
|
}
|
1925
1930
|
const isUpdate = !isCreate;
|
1926
1931
|
if (isUpdate) {
|
1927
|
-
|
1928
|
-
if (!
|
1932
|
+
const documentExists = documentManager2.exists(model, id);
|
1933
|
+
if (!documentExists) {
|
1929
1934
|
throw new strapiUtils.errors.NotFoundError("Document not found");
|
1930
1935
|
}
|
1931
|
-
|
1936
|
+
document = await documentManager2.findOne(id, model, { populate, locale });
|
1937
|
+
if (!document) {
|
1938
|
+
if (permissionChecker2.cannot.create({ locale }) || permissionChecker2.cannot.publish({ locale })) {
|
1939
|
+
throw new strapiUtils.errors.ForbiddenError();
|
1940
|
+
}
|
1941
|
+
document = await updateDocument(ctx);
|
1942
|
+
} else if (permissionChecker2.can.update(document)) {
|
1932
1943
|
await updateDocument(ctx);
|
1933
1944
|
}
|
1934
1945
|
}
|
@@ -2353,15 +2364,27 @@ const sanitizeMainField = (model, mainField, userAbility) => {
|
|
2353
2364
|
}
|
2354
2365
|
return mainField;
|
2355
2366
|
};
|
2356
|
-
const addStatusToRelations = async (
|
2357
|
-
if (!strapiUtils.contentTypes.hasDraftAndPublish(strapi.
|
2367
|
+
const addStatusToRelations = async (targetUid, relations2) => {
|
2368
|
+
if (!strapiUtils.contentTypes.hasDraftAndPublish(strapi.getModel(targetUid))) {
|
2358
2369
|
return relations2;
|
2359
2370
|
}
|
2360
2371
|
const documentMetadata2 = getService$1("document-metadata");
|
2361
|
-
|
2372
|
+
if (!relations2.length) {
|
2373
|
+
return relations2;
|
2374
|
+
}
|
2375
|
+
const firstRelation = relations2[0];
|
2376
|
+
const filters = {
|
2377
|
+
documentId: { $in: relations2.map((r) => r.documentId) },
|
2378
|
+
// NOTE: find the "opposite" status
|
2379
|
+
publishedAt: firstRelation.publishedAt !== null ? { $null: true } : { $notNull: true }
|
2380
|
+
};
|
2381
|
+
const availableStatus = await strapi.query(targetUid).findMany({
|
2382
|
+
select: ["id", "documentId", "locale", "updatedAt", "createdAt", "publishedAt"],
|
2383
|
+
filters
|
2384
|
+
});
|
2362
2385
|
return relations2.map((relation) => {
|
2363
|
-
const availableStatuses =
|
2364
|
-
(availableDocument) => availableDocument.documentId === relation.documentId
|
2386
|
+
const availableStatuses = availableStatus.filter(
|
2387
|
+
(availableDocument) => availableDocument.documentId === relation.documentId && (relation.locale ? availableDocument.locale === relation.locale : true)
|
2365
2388
|
);
|
2366
2389
|
return {
|
2367
2390
|
...relation,
|
@@ -2382,11 +2405,8 @@ const validateLocale = (sourceUid, targetUid, locale) => {
|
|
2382
2405
|
const isLocalized = strapi.plugin("i18n").service("content-types").isLocalizedContentType;
|
2383
2406
|
const isSourceLocalized = isLocalized(sourceModel);
|
2384
2407
|
const isTargetLocalized = isLocalized(targetModel);
|
2385
|
-
let validatedLocale = locale;
|
2386
|
-
if (!targetModel || !isTargetLocalized)
|
2387
|
-
validatedLocale = void 0;
|
2388
2408
|
return {
|
2389
|
-
locale
|
2409
|
+
locale,
|
2390
2410
|
isSourceLocalized,
|
2391
2411
|
isTargetLocalized
|
2392
2412
|
};
|
@@ -2489,7 +2509,7 @@ const relations = {
|
|
2489
2509
|
attribute,
|
2490
2510
|
fieldsToSelect,
|
2491
2511
|
mainField,
|
2492
|
-
source: { schema: sourceSchema },
|
2512
|
+
source: { schema: sourceSchema, isLocalized: isSourceLocalized },
|
2493
2513
|
target: { schema: targetSchema, isLocalized: isTargetLocalized },
|
2494
2514
|
sourceSchema,
|
2495
2515
|
targetSchema,
|
@@ -2511,7 +2531,8 @@ const relations = {
|
|
2511
2531
|
fieldsToSelect,
|
2512
2532
|
mainField,
|
2513
2533
|
source: {
|
2514
|
-
schema: { uid: sourceUid, modelType: sourceModelType }
|
2534
|
+
schema: { uid: sourceUid, modelType: sourceModelType },
|
2535
|
+
isLocalized: isSourceLocalized
|
2515
2536
|
},
|
2516
2537
|
target: {
|
2517
2538
|
schema: { uid: targetUid },
|
@@ -2553,9 +2574,12 @@ const relations = {
|
|
2553
2574
|
if (!fp.isEmpty(publishedAt)) {
|
2554
2575
|
where[`${alias}.published_at`] = publishedAt;
|
2555
2576
|
}
|
2556
|
-
if (
|
2577
|
+
if (isTargetLocalized && locale) {
|
2557
2578
|
where[`${alias}.locale`] = locale;
|
2558
2579
|
}
|
2580
|
+
if (isSourceLocalized && locale) {
|
2581
|
+
where.locale = locale;
|
2582
|
+
}
|
2559
2583
|
if ((idsToInclude?.length ?? 0) !== 0) {
|
2560
2584
|
where[`${alias}.id`].$notIn = idsToInclude;
|
2561
2585
|
}
|
@@ -2573,7 +2597,8 @@ const relations = {
|
|
2573
2597
|
id: { $notIn: fp.uniq(idsToOmit) }
|
2574
2598
|
});
|
2575
2599
|
}
|
2576
|
-
const
|
2600
|
+
const dbQuery = strapi.get("query-params").transform(targetUid, queryParams);
|
2601
|
+
const res = await strapi.db.query(targetUid).findPage(dbQuery);
|
2577
2602
|
ctx.body = {
|
2578
2603
|
...res,
|
2579
2604
|
results: await addStatusToRelations(targetUid, res.results)
|
@@ -2588,21 +2613,33 @@ const relations = {
|
|
2588
2613
|
attribute,
|
2589
2614
|
targetField,
|
2590
2615
|
fieldsToSelect,
|
2591
|
-
|
2592
|
-
|
2593
|
-
}
|
2594
|
-
target: {
|
2595
|
-
schema: { uid: targetUid }
|
2596
|
-
}
|
2616
|
+
status,
|
2617
|
+
source: { schema: sourceSchema },
|
2618
|
+
target: { schema: targetSchema }
|
2597
2619
|
} = await this.extractAndValidateRequestInfo(ctx, id);
|
2620
|
+
const { uid: sourceUid } = sourceSchema;
|
2621
|
+
const { uid: targetUid } = targetSchema;
|
2598
2622
|
const permissionQuery = await getService$1("permission-checker").create({ userAbility, model: targetUid }).sanitizedQuery.read({ fields: fieldsToSelect });
|
2599
2623
|
const dbQuery = strapi.db.query(sourceUid);
|
2600
2624
|
const loadRelations = strapiUtils.relations.isAnyToMany(attribute) ? (...args) => dbQuery.loadPages(...args) : (...args) => dbQuery.load(...args).then((res2) => ({ results: res2 ? [res2] : [] }));
|
2625
|
+
const filters = {};
|
2626
|
+
if (sourceSchema?.options?.draftAndPublish) {
|
2627
|
+
if (targetSchema?.options?.draftAndPublish) {
|
2628
|
+
if (status === "published") {
|
2629
|
+
filters.publishedAt = { $notNull: true };
|
2630
|
+
} else {
|
2631
|
+
filters.publishedAt = { $null: true };
|
2632
|
+
}
|
2633
|
+
}
|
2634
|
+
} else if (targetSchema?.options?.draftAndPublish) {
|
2635
|
+
filters.publishedAt = { $null: true };
|
2636
|
+
}
|
2601
2637
|
const res = await loadRelations({ id: entryId }, targetField, {
|
2602
|
-
select: ["id", "documentId", "locale", "publishedAt"],
|
2638
|
+
select: ["id", "documentId", "locale", "publishedAt", "updatedAt"],
|
2603
2639
|
ordering: "desc",
|
2604
2640
|
page: ctx.request.query.page,
|
2605
|
-
pageSize: ctx.request.query.pageSize
|
2641
|
+
pageSize: ctx.request.query.pageSize,
|
2642
|
+
filters
|
2606
2643
|
});
|
2607
2644
|
const loadedIds = res.results.map((item) => item.id);
|
2608
2645
|
addFiltersClause(permissionQuery, { id: { $in: loadedIds } });
|
@@ -2695,7 +2732,7 @@ const singleTypes = {
|
|
2695
2732
|
permissionChecker2,
|
2696
2733
|
model,
|
2697
2734
|
// @ts-expect-error - fix types
|
2698
|
-
{
|
2735
|
+
{ documentId: document.documentId, locale, publishedAt: null },
|
2699
2736
|
{ availableLocales: true, availableStatus: false }
|
2700
2737
|
);
|
2701
2738
|
ctx.body = { data: {}, meta };
|
@@ -4066,7 +4103,9 @@ const documentMetadata = ({ strapi: strapi2 }) => ({
|
|
4066
4103
|
*/
|
4067
4104
|
async getAvailableLocales(uid2, version, allVersions, validatableFields = []) {
|
4068
4105
|
const versionsByLocale = fp.groupBy("locale", allVersions);
|
4069
|
-
|
4106
|
+
if (version.locale) {
|
4107
|
+
delete versionsByLocale[version.locale];
|
4108
|
+
}
|
4070
4109
|
const model = strapi2.getModel(uid2);
|
4071
4110
|
const keysToKeep = [...AVAILABLE_LOCALES_FIELDS, ...validatableFields];
|
4072
4111
|
const traversalFunction = async (localeVersion) => strapiUtils.traverseEntity(
|