@strapi/i18n 0.0.0-experimental.edc24aaa3bb5a90fa5fd4fee208167dd4e2e38d4 → 0.0.0-experimental.ee7402bacc4656d268ab76aa9c334a7b7a951201
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/{SettingsPage-CsGvujny.mjs → SettingsPage-B6QDUmu9.mjs} +8 -8
- package/dist/_chunks/SettingsPage-B6QDUmu9.mjs.map +1 -0
- package/dist/_chunks/{SettingsPage-DA9haizZ.js → SettingsPage-BsHtr3lV.js} +9 -10
- package/dist/_chunks/SettingsPage-BsHtr3lV.js.map +1 -0
- package/dist/_chunks/{en-BsOU9o5z.js → en-BKBz3tro.js} +10 -3
- package/dist/_chunks/en-BKBz3tro.js.map +1 -0
- package/dist/_chunks/{en-CM6Pjfyv.mjs → en-DlXfy6Gy.mjs} +10 -3
- package/dist/_chunks/en-DlXfy6Gy.mjs.map +1 -0
- package/dist/_chunks/{index-DIzVXZoE.js → index-3XgwXL6T.js} +419 -180
- package/dist/_chunks/index-3XgwXL6T.js.map +1 -0
- package/dist/_chunks/{index-CCZJF_EJ.mjs → index-iEQ79W05.mjs} +425 -185
- package/dist/_chunks/index-iEQ79W05.mjs.map +1 -0
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/admin/src/components/BulkLocaleActionModal.d.ts +2 -1
- package/dist/admin/src/components/CMHeaderActions.d.ts +29 -3
- package/dist/admin/src/components/CreateLocale.d.ts +6 -6
- package/dist/admin/src/components/LocaleListCell.d.ts +4 -4
- package/dist/admin/src/utils/clean.d.ts +4 -0
- package/dist/server/index.js +418 -478
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +419 -478
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/src/bootstrap.d.ts +1 -4
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +21 -13
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/register.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +20 -10
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/permissions/actions.d.ts +14 -2
- package/dist/server/src/services/permissions/actions.d.ts.map +1 -1
- package/dist/server/src/services/permissions.d.ts +14 -2
- package/dist/server/src/services/permissions.d.ts.map +1 -1
- package/dist/server/src/services/sanitize/index.d.ts +11 -0
- package/dist/server/src/services/sanitize/index.d.ts.map +1 -0
- package/dist/server/src/utils/index.d.ts +2 -2
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/package.json +13 -13
- package/dist/_chunks/SettingsPage-CsGvujny.mjs.map +0 -1
- package/dist/_chunks/SettingsPage-DA9haizZ.js.map +0 -1
- package/dist/_chunks/en-BsOU9o5z.js.map +0 -1
- package/dist/_chunks/en-CM6Pjfyv.mjs.map +0 -1
- package/dist/_chunks/index-CCZJF_EJ.mjs.map +0 -1
- package/dist/_chunks/index-DIzVXZoE.js.map +0 -1
- package/dist/server/src/migrations/content-type/disable/index.d.ts +0 -3
- package/dist/server/src/migrations/content-type/disable/index.d.ts.map +0 -1
- package/dist/server/src/migrations/content-type/enable/index.d.ts +0 -3
- package/dist/server/src/migrations/content-type/enable/index.d.ts.map +0 -1
- package/dist/server/src/services/entity-service-decorator.d.ts +0 -29
- package/dist/server/src/services/entity-service-decorator.d.ts.map +0 -1
- package/strapi-server.js +0 -3
@@ -15,8 +15,7 @@ const qs = require("qs");
|
|
15
15
|
const omit = require("lodash/omit");
|
16
16
|
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
17
17
|
function _interopNamespace(e) {
|
18
|
-
if (e && e.__esModule)
|
19
|
-
return e;
|
18
|
+
if (e && e.__esModule) return e;
|
20
19
|
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
21
20
|
if (e) {
|
22
21
|
for (const k in e) {
|
@@ -37,13 +36,20 @@ const yup__namespace = /* @__PURE__ */ _interopNamespace(yup);
|
|
37
36
|
const React__namespace = /* @__PURE__ */ _interopNamespace(React);
|
38
37
|
const qs__namespace = /* @__PURE__ */ _interopNamespace(qs);
|
39
38
|
const omit__default = /* @__PURE__ */ _interopDefault(omit);
|
40
|
-
const __variableDynamicImportRuntimeHelper = (glob, path) => {
|
39
|
+
const __variableDynamicImportRuntimeHelper = (glob, path, segs) => {
|
41
40
|
const v = glob[path];
|
42
41
|
if (v) {
|
43
42
|
return typeof v === "function" ? v() : Promise.resolve(v);
|
44
43
|
}
|
45
44
|
return new Promise((_, reject) => {
|
46
|
-
(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
|
+
);
|
47
53
|
});
|
48
54
|
};
|
49
55
|
const pluginId = "i18n";
|
@@ -241,10 +247,94 @@ const relationsApi = i18nApi.injectEndpoints({
|
|
241
247
|
})
|
242
248
|
});
|
243
249
|
const { useGetManyDraftRelationCountQuery } = relationsApi;
|
250
|
+
const cleanData = (data, schema, components) => {
|
251
|
+
const cleanedData = removeFields(data, [
|
252
|
+
"createdAt",
|
253
|
+
"createdBy",
|
254
|
+
"updatedAt",
|
255
|
+
"updatedBy",
|
256
|
+
"id",
|
257
|
+
"documentId",
|
258
|
+
"publishedAt",
|
259
|
+
"strapi_stage",
|
260
|
+
"strapi_assignee",
|
261
|
+
"locale",
|
262
|
+
"status"
|
263
|
+
]);
|
264
|
+
const cleanedDataWithoutPasswordAndRelation = recursiveRemoveFieldTypes(
|
265
|
+
cleanedData,
|
266
|
+
schema,
|
267
|
+
components,
|
268
|
+
["relation", "password"]
|
269
|
+
);
|
270
|
+
return cleanedDataWithoutPasswordAndRelation;
|
271
|
+
};
|
272
|
+
const removeFields = (data, fields) => {
|
273
|
+
return Object.keys(data).reduce((acc, current) => {
|
274
|
+
if (fields.includes(current)) {
|
275
|
+
return acc;
|
276
|
+
}
|
277
|
+
acc[current] = data[current];
|
278
|
+
return acc;
|
279
|
+
}, {});
|
280
|
+
};
|
281
|
+
const recursiveRemoveFieldTypes = (data, schema, components, fields) => {
|
282
|
+
return Object.keys(data).reduce((acc, current) => {
|
283
|
+
const attribute = schema.attributes[current] ?? { type: void 0 };
|
284
|
+
if (fields.includes(attribute.type)) {
|
285
|
+
return acc;
|
286
|
+
}
|
287
|
+
if (attribute.type === "dynamiczone") {
|
288
|
+
acc[current] = data[current].map((componentValue, index2) => {
|
289
|
+
const { id: _, ...rest } = recursiveRemoveFieldTypes(
|
290
|
+
componentValue,
|
291
|
+
components[componentValue.__component],
|
292
|
+
components,
|
293
|
+
fields
|
294
|
+
);
|
295
|
+
return {
|
296
|
+
...rest,
|
297
|
+
__temp_key__: index2 + 1
|
298
|
+
};
|
299
|
+
});
|
300
|
+
} else if (attribute.type === "component") {
|
301
|
+
const { repeatable, component } = attribute;
|
302
|
+
if (repeatable) {
|
303
|
+
acc[current] = (data[current] ?? []).map((compoData, index2) => {
|
304
|
+
const { id: _, ...rest } = recursiveRemoveFieldTypes(
|
305
|
+
compoData,
|
306
|
+
components[component],
|
307
|
+
components,
|
308
|
+
fields
|
309
|
+
);
|
310
|
+
return {
|
311
|
+
...rest,
|
312
|
+
__temp_key__: index2 + 1
|
313
|
+
};
|
314
|
+
});
|
315
|
+
} else {
|
316
|
+
const { id: _, ...rest } = recursiveRemoveFieldTypes(
|
317
|
+
data[current] ?? {},
|
318
|
+
components[component],
|
319
|
+
components,
|
320
|
+
fields
|
321
|
+
);
|
322
|
+
acc[current] = rest;
|
323
|
+
}
|
324
|
+
} else {
|
325
|
+
acc[current] = data[current];
|
326
|
+
}
|
327
|
+
return acc;
|
328
|
+
}, {});
|
329
|
+
};
|
244
330
|
const isErrorMessageDescriptor = (object) => {
|
245
331
|
return typeof object === "object" && object !== null && "id" in object && "defaultMessage" in object;
|
246
332
|
};
|
247
|
-
const EntryValidationText = ({
|
333
|
+
const EntryValidationText = ({
|
334
|
+
status = "draft",
|
335
|
+
validationErrors,
|
336
|
+
action
|
337
|
+
}) => {
|
248
338
|
const { formatMessage } = reactIntl.useIntl();
|
249
339
|
const getErrorStr = (key, value) => {
|
250
340
|
if (typeof value === "string") {
|
@@ -278,30 +368,63 @@ const EntryValidationText = ({ status = "draft", validationErrors }) => {
|
|
278
368
|
) })
|
279
369
|
] });
|
280
370
|
}
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
371
|
+
const getStatusMessage = () => {
|
372
|
+
if (action === "bulk-publish") {
|
373
|
+
if (status === "published") {
|
374
|
+
return {
|
375
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(icons.CheckCircle, { fill: "success600" }),
|
376
|
+
text: formatMessage({
|
377
|
+
id: "content-manager.bulk-publish.already-published",
|
378
|
+
defaultMessage: "Already Published"
|
379
|
+
}),
|
380
|
+
textColor: "success600",
|
381
|
+
fontWeight: "bold"
|
382
|
+
};
|
383
|
+
} else if (status === "modified") {
|
384
|
+
return {
|
385
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(icons.ArrowsCounterClockwise, { fill: "alternative600" }),
|
386
|
+
text: formatMessage({
|
387
|
+
id: "app.utils.ready-to-publish-changes",
|
388
|
+
defaultMessage: "Ready to publish changes"
|
389
|
+
})
|
390
|
+
};
|
391
|
+
} else {
|
392
|
+
return {
|
393
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(icons.CheckCircle, { fill: "success600" }),
|
394
|
+
text: formatMessage({
|
395
|
+
id: "app.utils.ready-to-publish",
|
396
|
+
defaultMessage: "Ready to publish"
|
397
|
+
})
|
398
|
+
};
|
399
|
+
}
|
400
|
+
} else {
|
401
|
+
if (status === "draft") {
|
402
|
+
return {
|
403
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(icons.CheckCircle, { fill: "success600" }),
|
404
|
+
text: formatMessage({
|
405
|
+
id: "content-manager.bulk-unpublish.already-unpublished",
|
406
|
+
defaultMessage: "Already Unpublished"
|
407
|
+
}),
|
408
|
+
textColor: "success600",
|
409
|
+
fontWeight: "bold"
|
410
|
+
};
|
411
|
+
} else {
|
412
|
+
return {
|
413
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(icons.CheckCircle, { fill: "success600" }),
|
414
|
+
text: formatMessage({
|
415
|
+
id: "app.utils.ready-to-unpublish-changes",
|
416
|
+
defaultMessage: "Ready to unpublish"
|
417
|
+
}),
|
418
|
+
textColor: "success600",
|
419
|
+
fontWeight: "bold"
|
420
|
+
};
|
421
|
+
}
|
422
|
+
}
|
423
|
+
};
|
424
|
+
const { icon, text, textColor = "success600", fontWeight = "normal" } = getStatusMessage();
|
299
425
|
return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
|
300
|
-
|
301
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children:
|
302
|
-
id: "app.utils.ready-to-publish",
|
303
|
-
defaultMessage: "Ready to publish"
|
304
|
-
}) })
|
426
|
+
icon,
|
427
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor, fontWeight, children: text })
|
305
428
|
] });
|
306
429
|
};
|
307
430
|
const BoldChunk = (chunks) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { fontWeight: "bold", children: chunks });
|
@@ -309,7 +432,8 @@ const BulkLocaleActionModal = ({
|
|
309
432
|
headers,
|
310
433
|
rows,
|
311
434
|
localesMetadata,
|
312
|
-
validationErrors = {}
|
435
|
+
validationErrors = {},
|
436
|
+
action
|
313
437
|
}) => {
|
314
438
|
const { formatMessage } = reactIntl.useIntl();
|
315
439
|
const selectedRows = strapiAdmin.useTable(
|
@@ -322,22 +446,24 @@ const BulkLocaleActionModal = ({
|
|
322
446
|
return acc;
|
323
447
|
}, {});
|
324
448
|
const localesWithErrors = Object.keys(validationErrors);
|
325
|
-
const
|
449
|
+
const publishedCount = selectedRows.filter(
|
326
450
|
({ locale }) => currentStatusByLocale[locale] === "published"
|
327
451
|
).length;
|
328
|
-
const
|
452
|
+
const draftCount = selectedRows.filter(
|
329
453
|
({ locale }) => (currentStatusByLocale[locale] === "draft" || currentStatusByLocale[locale] === "modified") && !localesWithErrors.includes(locale)
|
330
454
|
).length;
|
331
455
|
const withErrorsCount = localesWithErrors.length;
|
456
|
+
const messageId = action === "bulk-publish" ? "content-manager.containers.list.selectedEntriesModal.selectedCount.publish" : "content-manager.containers.list.selectedEntriesModal.selectedCount.unpublish";
|
457
|
+
const defaultMessage = action === "bulk-publish" ? "<b>{publishedCount}</b> {publishedCount, plural, =0 {entries} one {entry} other {entries}} already published. <b>{draftCount}</b> {draftCount, plural, =0 {entries} one {entry} other {entries}} ready to publish. <b>{withErrorsCount}</b> {withErrorsCount, plural, =0 {entries} one {entry} other {entries}} waiting for action." : "<b>{draftCount}</b> {draftCount, plural, =0 {entries} one {entry} other {entries}} already unpublished. <b>{publishedCount}</b> {publishedCount, plural, =0 {entries} one {entry} other {entries}} ready to unpublish.";
|
332
458
|
return formatMessage(
|
333
459
|
{
|
334
|
-
id:
|
335
|
-
defaultMessage
|
460
|
+
id: messageId,
|
461
|
+
defaultMessage
|
336
462
|
},
|
337
463
|
{
|
338
464
|
withErrorsCount,
|
339
|
-
|
340
|
-
|
465
|
+
draftCount,
|
466
|
+
publishedCount,
|
341
467
|
b: BoldChunk
|
342
468
|
}
|
343
469
|
);
|
@@ -363,13 +489,12 @@ const BulkLocaleActionModal = ({
|
|
363
489
|
paddingRight: "6px",
|
364
490
|
paddingTop: "2px",
|
365
491
|
paddingBottom: "2px",
|
366
|
-
showBullet: false,
|
367
492
|
size: "S",
|
368
493
|
variant: statusVariant,
|
369
494
|
children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { tag: "span", variant: "pi", fontWeight: "bold", children: capitalize(status) })
|
370
495
|
}
|
371
496
|
) }) }),
|
372
|
-
/* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsx(EntryValidationText, { validationErrors: error, status }) }),
|
497
|
+
/* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsx(EntryValidationText, { validationErrors: error, status, action }) }),
|
373
498
|
/* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
374
499
|
designSystem.IconButton,
|
375
500
|
{
|
@@ -386,7 +511,7 @@ const BulkLocaleActionModal = ({
|
|
386
511
|
name: locale
|
387
512
|
}
|
388
513
|
),
|
389
|
-
|
514
|
+
variant: "ghost",
|
390
515
|
children: /* @__PURE__ */ jsxRuntime.jsx(icons.Pencil, {})
|
391
516
|
}
|
392
517
|
) })
|
@@ -395,6 +520,47 @@ const BulkLocaleActionModal = ({
|
|
395
520
|
] }) })
|
396
521
|
] });
|
397
522
|
};
|
523
|
+
const statusVariants = {
|
524
|
+
draft: "secondary",
|
525
|
+
published: "success",
|
526
|
+
modified: "alternative"
|
527
|
+
};
|
528
|
+
const LocaleOption = ({
|
529
|
+
isDraftAndPublishEnabled,
|
530
|
+
locale,
|
531
|
+
status,
|
532
|
+
entryExists
|
533
|
+
}) => {
|
534
|
+
const { formatMessage } = reactIntl.useIntl();
|
535
|
+
if (!entryExists) {
|
536
|
+
return formatMessage(
|
537
|
+
{
|
538
|
+
id: getTranslation("CMEditViewLocalePicker.locale.create"),
|
539
|
+
defaultMessage: "Create <bold>{locale}</bold> locale"
|
540
|
+
},
|
541
|
+
{
|
542
|
+
bold: (locale2) => /* @__PURE__ */ jsxRuntime.jsx("b", { children: locale2 }),
|
543
|
+
locale: locale.name
|
544
|
+
}
|
545
|
+
);
|
546
|
+
}
|
547
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { width: "100%", gap: 1, justifyContent: "space-between", children: [
|
548
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: locale.name }),
|
549
|
+
isDraftAndPublishEnabled ? /* @__PURE__ */ jsxRuntime.jsx(
|
550
|
+
designSystem.Status,
|
551
|
+
{
|
552
|
+
display: "flex",
|
553
|
+
paddingLeft: "6px",
|
554
|
+
paddingRight: "6px",
|
555
|
+
paddingTop: "2px",
|
556
|
+
paddingBottom: "2px",
|
557
|
+
size: "S",
|
558
|
+
variant: statusVariants[status],
|
559
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { tag: "span", variant: "pi", fontWeight: "bold", children: capitalize(status) })
|
560
|
+
}
|
561
|
+
) : null
|
562
|
+
] });
|
563
|
+
};
|
398
564
|
const LocalePickerAction = ({
|
399
565
|
document,
|
400
566
|
meta,
|
@@ -406,7 +572,13 @@ const LocalePickerAction = ({
|
|
406
572
|
const [{ query: query2 }, setQuery] = strapiAdmin.useQueryParams();
|
407
573
|
const { hasI18n, canCreate, canRead } = useI18n();
|
408
574
|
const { data: locales = [] } = useGetLocalesQuery();
|
409
|
-
const
|
575
|
+
const currentDesiredLocale = query2.plugins?.i18n?.locale;
|
576
|
+
const { schema } = strapiAdmin$1.unstable_useDocument({
|
577
|
+
model,
|
578
|
+
collectionType,
|
579
|
+
documentId,
|
580
|
+
params: { locale: currentDesiredLocale }
|
581
|
+
});
|
410
582
|
const handleSelect = React__namespace.useCallback(
|
411
583
|
(value) => {
|
412
584
|
setQuery({
|
@@ -424,53 +596,50 @@ const LocalePickerAction = ({
|
|
424
596
|
if (!Array.isArray(locales) || !hasI18n) {
|
425
597
|
return;
|
426
598
|
}
|
427
|
-
const currentDesiredLocale = query2.plugins?.i18n?.locale;
|
428
599
|
const doesLocaleExist = locales.find((loc) => loc.code === currentDesiredLocale);
|
429
600
|
const defaultLocale = locales.find((locale) => locale.isDefault);
|
430
601
|
if (!doesLocaleExist && defaultLocale?.code) {
|
431
602
|
handleSelect(defaultLocale.code);
|
432
603
|
}
|
433
|
-
}, [handleSelect, hasI18n, locales,
|
604
|
+
}, [handleSelect, hasI18n, locales, currentDesiredLocale]);
|
605
|
+
const currentLocale = Array.isArray(locales) ? locales.find((locale) => locale.code === currentDesiredLocale) : void 0;
|
606
|
+
const allCurrentLocales = [
|
607
|
+
{ status: getDocumentStatus(document, meta), locale: currentLocale?.code },
|
608
|
+
...document?.localizations ?? []
|
609
|
+
];
|
434
610
|
if (!hasI18n || !Array.isArray(locales) || locales.length === 0) {
|
435
611
|
return null;
|
436
612
|
}
|
437
|
-
const
|
438
|
-
|
439
|
-
|
440
|
-
...meta?.availableLocales ?? []
|
441
|
-
];
|
613
|
+
const displayedLocales = locales.filter((locale) => {
|
614
|
+
return canRead.includes(locale.code);
|
615
|
+
});
|
442
616
|
return {
|
443
617
|
label: formatMessage({
|
444
618
|
id: getTranslation("Settings.locales.modal.locales.label"),
|
445
619
|
defaultMessage: "Locales"
|
446
620
|
}),
|
447
|
-
options:
|
621
|
+
options: displayedLocales.map((locale) => {
|
622
|
+
const entryWithLocaleExists = allCurrentLocales.some((doc) => doc.locale === locale.code);
|
448
623
|
const currentLocaleDoc = allCurrentLocales.find(
|
449
624
|
(doc) => "locale" in doc ? doc.locale === locale.code : false
|
450
625
|
);
|
451
|
-
const
|
452
|
-
const permissionsToCheck = currentLocaleDoc ? canCreate : canRead;
|
453
|
-
const statusVariant = status === "draft" ? "primary" : status === "published" ? "success" : "alternative";
|
626
|
+
const permissionsToCheck = currentLocaleDoc ? canRead : canCreate;
|
454
627
|
return {
|
455
628
|
disabled: !permissionsToCheck.includes(locale.code),
|
456
629
|
value: locale.code,
|
457
|
-
label:
|
458
|
-
|
459
|
-
designSystem.Status,
|
630
|
+
label: /* @__PURE__ */ jsxRuntime.jsx(
|
631
|
+
LocaleOption,
|
460
632
|
{
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
paddingBottom: "2px",
|
466
|
-
showBullet: false,
|
467
|
-
size: "S",
|
468
|
-
variant: statusVariant,
|
469
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { tag: "span", variant: "pi", fontWeight: "bold", children: capitalize(status) })
|
633
|
+
isDraftAndPublishEnabled: !!schema?.options?.draftAndPublish,
|
634
|
+
locale,
|
635
|
+
status: currentLocaleDoc?.status,
|
636
|
+
entryExists: entryWithLocaleExists
|
470
637
|
}
|
471
|
-
)
|
638
|
+
),
|
639
|
+
startIcon: !entryWithLocaleExists ? /* @__PURE__ */ jsxRuntime.jsx(icons.Plus, {}) : null
|
472
640
|
};
|
473
641
|
}),
|
642
|
+
customizeContent: () => currentLocale?.name,
|
474
643
|
onSelect: handleSelect,
|
475
644
|
value: currentLocale
|
476
645
|
};
|
@@ -486,6 +655,99 @@ const getDocumentStatus = (document, meta) => {
|
|
486
655
|
}
|
487
656
|
return docStatus;
|
488
657
|
};
|
658
|
+
const FillFromAnotherLocaleAction = ({
|
659
|
+
documentId,
|
660
|
+
meta,
|
661
|
+
model,
|
662
|
+
collectionType
|
663
|
+
}) => {
|
664
|
+
const { formatMessage } = reactIntl.useIntl();
|
665
|
+
const [{ query: query2 }] = strapiAdmin.useQueryParams();
|
666
|
+
const { hasI18n } = useI18n();
|
667
|
+
const currentDesiredLocale = query2.plugins?.i18n?.locale;
|
668
|
+
const [localeSelected, setLocaleSelected] = React__namespace.useState(null);
|
669
|
+
const setValues = strapiAdmin.useForm("FillFromAnotherLocale", (state) => state.setValues);
|
670
|
+
const { getDocument } = strapiAdmin$1.unstable_useDocumentActions();
|
671
|
+
const { schema, components } = strapiAdmin$1.unstable_useDocument({
|
672
|
+
model,
|
673
|
+
documentId,
|
674
|
+
collectionType,
|
675
|
+
params: { locale: currentDesiredLocale }
|
676
|
+
});
|
677
|
+
const { data: locales = [] } = useGetLocalesQuery();
|
678
|
+
const availableLocales = Array.isArray(locales) ? locales.filter((locale) => meta?.availableLocales.some((l) => l.locale === locale.code)) : [];
|
679
|
+
const fillFromLocale = (onClose) => async () => {
|
680
|
+
const response = await getDocument({
|
681
|
+
collectionType,
|
682
|
+
model,
|
683
|
+
documentId,
|
684
|
+
params: { locale: localeSelected }
|
685
|
+
});
|
686
|
+
if (!response || !schema) {
|
687
|
+
return;
|
688
|
+
}
|
689
|
+
const { data } = response;
|
690
|
+
const cleanedData = cleanData(data, schema, components);
|
691
|
+
setValues(cleanedData);
|
692
|
+
onClose();
|
693
|
+
};
|
694
|
+
if (!hasI18n) {
|
695
|
+
return null;
|
696
|
+
}
|
697
|
+
return {
|
698
|
+
type: "icon",
|
699
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(icons.Download, {}),
|
700
|
+
disabled: availableLocales.length === 0,
|
701
|
+
label: formatMessage({
|
702
|
+
id: getTranslation("CMEditViewCopyLocale.copy-text"),
|
703
|
+
defaultMessage: "Fill in from another locale"
|
704
|
+
}),
|
705
|
+
dialog: {
|
706
|
+
type: "dialog",
|
707
|
+
title: formatMessage({
|
708
|
+
id: getTranslation("CMEditViewCopyLocale.dialog.title"),
|
709
|
+
defaultMessage: "Confirmation"
|
710
|
+
}),
|
711
|
+
content: ({ onClose }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
712
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Dialog.Body, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", gap: 3, children: [
|
713
|
+
/* @__PURE__ */ jsxRuntime.jsx(icons.WarningCircle, { width: "24px", height: "24px", fill: "danger600" }),
|
714
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textAlign: "center", children: formatMessage({
|
715
|
+
id: getTranslation("CMEditViewCopyLocale.dialog.body"),
|
716
|
+
defaultMessage: "Your current content will be erased and filled by the content of the selected locale:"
|
717
|
+
}) }),
|
718
|
+
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Field.Root, { width: "100%", children: [
|
719
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: formatMessage({
|
720
|
+
id: getTranslation("CMEditViewCopyLocale.dialog.field.label"),
|
721
|
+
defaultMessage: "Locale"
|
722
|
+
}) }),
|
723
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
724
|
+
designSystem.SingleSelect,
|
725
|
+
{
|
726
|
+
value: localeSelected,
|
727
|
+
placeholder: formatMessage({
|
728
|
+
id: getTranslation("CMEditViewCopyLocale.dialog.field.placeholder"),
|
729
|
+
defaultMessage: "Select one locale..."
|
730
|
+
}),
|
731
|
+
onChange: (value) => setLocaleSelected(value),
|
732
|
+
children: availableLocales.map((locale) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: locale.code, children: locale.name }, locale.code))
|
733
|
+
}
|
734
|
+
)
|
735
|
+
] })
|
736
|
+
] }) }),
|
737
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Dialog.Footer, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, width: "100%", children: [
|
738
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { flex: "auto", variant: "tertiary", onClick: onClose, children: formatMessage({
|
739
|
+
id: getTranslation("CMEditViewCopyLocale.cancel-text"),
|
740
|
+
defaultMessage: "No, cancel"
|
741
|
+
}) }),
|
742
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { flex: "auto", variant: "success", onClick: fillFromLocale(onClose), children: formatMessage({
|
743
|
+
id: getTranslation("CMEditViewCopyLocale.submit-text"),
|
744
|
+
defaultMessage: "Yes, fill in"
|
745
|
+
}) })
|
746
|
+
] }) })
|
747
|
+
] })
|
748
|
+
}
|
749
|
+
};
|
750
|
+
};
|
489
751
|
const DeleteLocaleAction = ({
|
490
752
|
document,
|
491
753
|
documentId,
|
@@ -497,16 +759,23 @@ const DeleteLocaleAction = ({
|
|
497
759
|
const { toggleNotification } = strapiAdmin.useNotification();
|
498
760
|
const { delete: deleteAction } = strapiAdmin$1.unstable_useDocumentActions();
|
499
761
|
const { hasI18n, canDelete } = useI18n();
|
762
|
+
const [{ query: query2 }] = strapiAdmin.useQueryParams();
|
763
|
+
const { data: locales = [] } = useGetLocalesQuery();
|
764
|
+
const currentDesiredLocale = query2.plugins?.i18n?.locale;
|
765
|
+
const locale = !("error" in locales) && locales.find((loc) => loc.code === currentDesiredLocale);
|
500
766
|
if (!hasI18n) {
|
501
767
|
return null;
|
502
768
|
}
|
503
769
|
return {
|
504
770
|
disabled: document?.locale && !canDelete.includes(document.locale) || !document || !document.id,
|
505
771
|
position: ["header", "table-row"],
|
506
|
-
label: formatMessage(
|
507
|
-
|
508
|
-
|
509
|
-
|
772
|
+
label: formatMessage(
|
773
|
+
{
|
774
|
+
id: getTranslation("actions.delete.label"),
|
775
|
+
defaultMessage: "Delete entry ({locale})"
|
776
|
+
},
|
777
|
+
{ locale: locale && locale.name }
|
778
|
+
),
|
510
779
|
icon: /* @__PURE__ */ jsxRuntime.jsx(StyledTrash, {}),
|
511
780
|
variant: "danger",
|
512
781
|
dialog: {
|
@@ -523,7 +792,12 @@ const DeleteLocaleAction = ({
|
|
523
792
|
}) })
|
524
793
|
] }),
|
525
794
|
onConfirm: async () => {
|
526
|
-
|
795
|
+
const unableToDelete = (
|
796
|
+
// We are unable to delete a collection type without a document ID
|
797
|
+
// & unable to delete generally if there is no document locale
|
798
|
+
collectionType !== "single-types" && !documentId || !document?.locale
|
799
|
+
);
|
800
|
+
if (unableToDelete) {
|
527
801
|
console.error(
|
528
802
|
"You're trying to delete a document without an id or locale, this is likely a bug with Strapi. Please open an issue."
|
529
803
|
);
|
@@ -549,39 +823,36 @@ const DeleteLocaleAction = ({
|
|
549
823
|
}
|
550
824
|
};
|
551
825
|
};
|
552
|
-
const
|
553
|
-
document
|
826
|
+
const BulkLocaleAction = ({
|
827
|
+
document,
|
554
828
|
documentId,
|
555
829
|
model,
|
556
|
-
collectionType
|
830
|
+
collectionType,
|
831
|
+
action
|
557
832
|
}) => {
|
558
|
-
const
|
833
|
+
const locale = document?.locale ?? null;
|
559
834
|
const [{ query: query$1 }] = strapiAdmin.useQueryParams();
|
560
835
|
const params = React__namespace.useMemo(() => strapiAdmin$1.buildValidParams(query$1), [query$1]);
|
561
|
-
const
|
836
|
+
const isOnPublishedTab = query$1.status === "published";
|
562
837
|
const { formatMessage } = reactIntl.useIntl();
|
563
838
|
const { hasI18n, canPublish } = useI18n();
|
564
839
|
const { toggleNotification } = strapiAdmin.useNotification();
|
565
840
|
const { _unstableFormatAPIError: formatAPIError } = strapiAdmin.useAPIErrorHandler();
|
566
841
|
const [selectedRows, setSelectedRows] = React__namespace.useState([]);
|
567
842
|
const [isDraftRelationConfirmationOpen, setIsDraftRelationConfirmationOpen] = React__namespace.useState(false);
|
568
|
-
const { publishMany: publishManyAction } = strapiAdmin$1.unstable_useDocumentActions();
|
569
|
-
const {
|
570
|
-
document,
|
571
|
-
meta: documentMeta,
|
572
|
-
schema,
|
573
|
-
validate
|
574
|
-
} = strapiAdmin$1.unstable_useDocument(
|
843
|
+
const { publishMany: publishManyAction, unpublishMany: unpublishManyAction } = strapiAdmin$1.unstable_useDocumentActions();
|
844
|
+
const { schema, validate } = strapiAdmin$1.unstable_useDocument(
|
575
845
|
{
|
576
846
|
model,
|
577
847
|
collectionType,
|
578
848
|
documentId,
|
579
849
|
params: {
|
580
|
-
locale
|
850
|
+
locale
|
581
851
|
}
|
582
852
|
},
|
583
853
|
{
|
584
|
-
|
854
|
+
// No need to fetch the document, the data is already available in the `document` prop
|
855
|
+
skip: true
|
585
856
|
}
|
586
857
|
);
|
587
858
|
const { data: localesMetadata = [] } = useGetLocalesQuery(hasI18n ? void 0 : query.skipToken);
|
@@ -609,18 +880,19 @@ const BulkLocalePublishAction = ({
|
|
609
880
|
}
|
610
881
|
];
|
611
882
|
const [rows, validationErrors] = React__namespace.useMemo(() => {
|
612
|
-
if (!document
|
883
|
+
if (!document) {
|
613
884
|
return [[], {}];
|
614
885
|
}
|
615
|
-
const
|
616
|
-
|
617
|
-
|
886
|
+
const localizations = document.localizations ?? [];
|
887
|
+
const locales = localizations.map((doc) => {
|
888
|
+
const { locale: locale2, status } = doc;
|
889
|
+
return { locale: locale2, status };
|
618
890
|
});
|
619
|
-
|
891
|
+
locales.unshift({
|
620
892
|
locale: document.locale,
|
621
893
|
status: document.status
|
622
894
|
});
|
623
|
-
const allDocuments = [document, ...
|
895
|
+
const allDocuments = [document, ...localizations];
|
624
896
|
const errors = allDocuments.reduce((errs, document2) => {
|
625
897
|
if (!document2) {
|
626
898
|
return errs;
|
@@ -631,14 +903,21 @@ const BulkLocalePublishAction = ({
|
|
631
903
|
}
|
632
904
|
return errs;
|
633
905
|
}, {});
|
634
|
-
return [
|
635
|
-
}, [document,
|
636
|
-
const
|
637
|
-
|
906
|
+
return [locales, errors];
|
907
|
+
}, [document, validate]);
|
908
|
+
const isBulkPublish = action === "bulk-publish";
|
909
|
+
const localesForAction = selectedRows.reduce((acc, selectedRow) => {
|
910
|
+
const isValidLocale = (
|
911
|
+
// Validation errors are irrelevant if we are trying to unpublish
|
912
|
+
!isBulkPublish || !Object.keys(validationErrors).includes(selectedRow.locale)
|
913
|
+
);
|
914
|
+
const shouldAddLocale = isBulkPublish ? selectedRow.status !== "published" && isValidLocale : selectedRow.status !== "draft" && isValidLocale;
|
915
|
+
if (shouldAddLocale) {
|
638
916
|
acc.push(selectedRow.locale);
|
639
917
|
}
|
640
918
|
return acc;
|
641
919
|
}, []);
|
920
|
+
const enableDraftRelationsCount = false;
|
642
921
|
const {
|
643
922
|
data: draftRelationsCount = 0,
|
644
923
|
isLoading: isDraftRelationsLoading,
|
@@ -647,10 +926,10 @@ const BulkLocalePublishAction = ({
|
|
647
926
|
{
|
648
927
|
model,
|
649
928
|
documentIds: [documentId],
|
650
|
-
locale:
|
929
|
+
locale: localesForAction
|
651
930
|
},
|
652
931
|
{
|
653
|
-
skip: !
|
932
|
+
skip: !enableDraftRelationsCount
|
654
933
|
}
|
655
934
|
);
|
656
935
|
React__namespace.useEffect(() => {
|
@@ -676,7 +955,18 @@ const BulkLocalePublishAction = ({
|
|
676
955
|
documentIds: [documentId],
|
677
956
|
params: {
|
678
957
|
...params,
|
679
|
-
locale:
|
958
|
+
locale: localesForAction
|
959
|
+
}
|
960
|
+
});
|
961
|
+
setSelectedRows([]);
|
962
|
+
};
|
963
|
+
const unpublish = async () => {
|
964
|
+
await unpublishManyAction({
|
965
|
+
model,
|
966
|
+
documentIds: [documentId],
|
967
|
+
params: {
|
968
|
+
...params,
|
969
|
+
locale: localesForAction
|
680
970
|
}
|
681
971
|
});
|
682
972
|
setSelectedRows([]);
|
@@ -684,14 +974,12 @@ const BulkLocalePublishAction = ({
|
|
684
974
|
const handleAction = async () => {
|
685
975
|
if (draftRelationsCount > 0) {
|
686
976
|
setIsDraftRelationConfirmationOpen(true);
|
687
|
-
} else {
|
977
|
+
} else if (isBulkPublish) {
|
688
978
|
await publish();
|
979
|
+
} else {
|
980
|
+
await unpublish();
|
689
981
|
}
|
690
982
|
};
|
691
|
-
const isUnpublish = document?.status === "published";
|
692
|
-
if (isUnpublish) {
|
693
|
-
console.warn(["I18N"], "Bulk locale unpublish modal not implemented");
|
694
|
-
}
|
695
983
|
if (isDraftRelationConfirmationOpen) {
|
696
984
|
return {
|
697
985
|
label: formatMessage({
|
@@ -726,21 +1014,21 @@ const BulkLocalePublishAction = ({
|
|
726
1014
|
}
|
727
1015
|
};
|
728
1016
|
}
|
729
|
-
const hasPermission = selectedRows.map(({ locale }) =>
|
1017
|
+
const hasPermission = selectedRows.map(({ locale: locale2 }) => locale2).every((locale2) => canPublish.includes(locale2));
|
730
1018
|
return {
|
731
1019
|
label: formatMessage({
|
732
|
-
id: getTranslation("
|
733
|
-
defaultMessage: "Publish Multiple Locales
|
1020
|
+
id: getTranslation(`CMEditViewBulkLocale.${isBulkPublish ? "publish" : "unpublish"}-title`),
|
1021
|
+
defaultMessage: `${isBulkPublish ? "Publish" : "Unpublish"} Multiple Locales`
|
734
1022
|
}),
|
735
|
-
|
736
|
-
|
1023
|
+
variant: isBulkPublish ? "secondary" : "danger",
|
1024
|
+
icon: isBulkPublish ? /* @__PURE__ */ jsxRuntime.jsx(icons.ListPlus, {}) : /* @__PURE__ */ jsxRuntime.jsx(icons.Cross, {}),
|
1025
|
+
disabled: isOnPublishedTab || canPublish.length === 0,
|
737
1026
|
position: ["panel"],
|
738
|
-
variant: "secondary",
|
739
1027
|
dialog: {
|
740
1028
|
type: "modal",
|
741
1029
|
title: formatMessage({
|
742
|
-
id: getTranslation("
|
743
|
-
defaultMessage: "Publish Multiple Locales
|
1030
|
+
id: getTranslation(`CMEditViewBulkLocale.${isBulkPublish ? "publish" : "unpublish"}-title`),
|
1031
|
+
defaultMessage: `${isBulkPublish ? "Publish" : "Unpublish"} Multiple Locales`
|
744
1032
|
}),
|
745
1033
|
content: () => {
|
746
1034
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
@@ -759,7 +1047,8 @@ const BulkLocalePublishAction = ({
|
|
759
1047
|
validationErrors,
|
760
1048
|
headers,
|
761
1049
|
rows,
|
762
|
-
localesMetadata
|
1050
|
+
localesMetadata,
|
1051
|
+
action: action ?? "bulk-publish"
|
763
1052
|
}
|
764
1053
|
)
|
765
1054
|
}
|
@@ -769,18 +1058,24 @@ const BulkLocalePublishAction = ({
|
|
769
1058
|
designSystem.Button,
|
770
1059
|
{
|
771
1060
|
loading: isDraftRelationsLoading,
|
772
|
-
disabled: !hasPermission ||
|
1061
|
+
disabled: !hasPermission || localesForAction.length === 0,
|
773
1062
|
variant: "default",
|
774
1063
|
onClick: handleAction,
|
775
1064
|
children: formatMessage({
|
776
|
-
id: "app.utils.publish",
|
777
|
-
defaultMessage: "Publish"
|
1065
|
+
id: isBulkPublish ? "app.utils.publish" : "app.utils.unpublish",
|
1066
|
+
defaultMessage: isBulkPublish ? "Publish" : "Unpublish"
|
778
1067
|
})
|
779
1068
|
}
|
780
1069
|
) })
|
781
1070
|
}
|
782
1071
|
};
|
783
1072
|
};
|
1073
|
+
const BulkLocalePublishAction = (props) => {
|
1074
|
+
return BulkLocaleAction({ action: "bulk-publish", ...props });
|
1075
|
+
};
|
1076
|
+
const BulkLocaleUnpublishAction = (props) => {
|
1077
|
+
return BulkLocaleAction({ action: "bulk-unpublish", ...props });
|
1078
|
+
};
|
784
1079
|
const StyledTrash = styledComponents.styled(icons.Trash)`
|
785
1080
|
path {
|
786
1081
|
fill: currentColor;
|
@@ -962,29 +1257,16 @@ const Span = styledComponents.styled(designSystem.Flex)`
|
|
962
1257
|
}
|
963
1258
|
}
|
964
1259
|
`;
|
965
|
-
const LocaleListCell = ({
|
966
|
-
documentId,
|
967
|
-
locale: currentLocale,
|
968
|
-
collectionType,
|
969
|
-
model
|
970
|
-
}) => {
|
971
|
-
const { meta, isLoading } = strapiAdmin$1.unstable_useDocument({
|
972
|
-
documentId,
|
973
|
-
collectionType,
|
974
|
-
model,
|
975
|
-
params: {
|
976
|
-
locale: currentLocale
|
977
|
-
}
|
978
|
-
});
|
1260
|
+
const LocaleListCell = ({ locale: currentLocale, localizations }) => {
|
979
1261
|
const { locale: language } = reactIntl.useIntl();
|
980
1262
|
const { data: locales = [] } = useGetLocalesQuery();
|
981
1263
|
const formatter = designSystem.useCollator(language, {
|
982
1264
|
sensitivity: "base"
|
983
1265
|
});
|
984
|
-
if (!Array.isArray(locales) ||
|
1266
|
+
if (!Array.isArray(locales) || !localizations) {
|
985
1267
|
return null;
|
986
1268
|
}
|
987
|
-
const availableLocales =
|
1269
|
+
const availableLocales = localizations.map((loc) => loc.locale);
|
988
1270
|
const localesForDocument = locales.reduce((acc, locale) => {
|
989
1271
|
const createdLocale = [currentLocale, ...availableLocales].find((loc) => {
|
990
1272
|
return loc === locale.code;
|
@@ -1000,54 +1282,13 @@ const LocaleListCell = ({
|
|
1000
1282
|
return locale.name;
|
1001
1283
|
}).toSorted((a, b) => formatter.compare(a, b));
|
1002
1284
|
return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Popover.Root, { children: [
|
1003
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Popover.Trigger, { children: /* @__PURE__ */ jsxRuntime.jsx(Button, { type: "button", onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsxRuntime.jsxs(
|
1004
|
-
|
1005
|
-
{
|
1006
|
-
|
1007
|
-
alignItems: "center",
|
1008
|
-
justifyContent: "center",
|
1009
|
-
height: "3.2rem",
|
1010
|
-
width: "3.2rem",
|
1011
|
-
children: [
|
1012
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "neutral800", ellipsis: true, children: localesForDocument.join(", ") }),
|
1013
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { children: /* @__PURE__ */ jsxRuntime.jsx(icons.CaretDown, {}) })
|
1014
|
-
]
|
1015
|
-
}
|
1016
|
-
) }) }),
|
1285
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Popover.Trigger, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { variant: "ghost", type: "button", onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { minWidth: "100%", alignItems: "center", justifyContent: "center", fontWeight: "regular", children: [
|
1286
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "neutral800", ellipsis: true, marginRight: 2, children: localesForDocument.join(", ") }),
|
1287
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { children: /* @__PURE__ */ jsxRuntime.jsx(icons.CaretDown, { width: "1.2rem", height: "1.2rem" }) })
|
1288
|
+
] }) }) }),
|
1017
1289
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Popover.Content, { sideOffset: 16, children: /* @__PURE__ */ jsxRuntime.jsx("ul", { children: localesForDocument.map((name) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { padding: 3, tag: "li", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: name }) }, name)) }) })
|
1018
1290
|
] });
|
1019
1291
|
};
|
1020
|
-
const Button = styledComponents.styled.button`
|
1021
|
-
width: 100%;
|
1022
|
-
|
1023
|
-
svg {
|
1024
|
-
> g,
|
1025
|
-
path {
|
1026
|
-
fill: ${({ theme }) => theme.colors.neutral500};
|
1027
|
-
}
|
1028
|
-
}
|
1029
|
-
&:hover {
|
1030
|
-
svg {
|
1031
|
-
> g,
|
1032
|
-
path {
|
1033
|
-
fill: ${({ theme }) => theme.colors.neutral600};
|
1034
|
-
}
|
1035
|
-
}
|
1036
|
-
}
|
1037
|
-
&:active {
|
1038
|
-
svg {
|
1039
|
-
> g,
|
1040
|
-
path {
|
1041
|
-
fill: ${({ theme }) => theme.colors.neutral400};
|
1042
|
-
}
|
1043
|
-
}
|
1044
|
-
}
|
1045
|
-
`;
|
1046
|
-
const ActionWrapper = styledComponents.styled(designSystem.Flex)`
|
1047
|
-
svg {
|
1048
|
-
height: 0.4rem;
|
1049
|
-
}
|
1050
|
-
`;
|
1051
1292
|
const addColumnToTableHook = ({ displayedHeaders, layout }) => {
|
1052
1293
|
const { options } = layout;
|
1053
1294
|
const isFieldLocalized = doesPluginOptionsHaveI18nLocalized(options) ? options.i18n.localized : false;
|
@@ -1173,9 +1414,6 @@ const localeMiddleware = (ctx) => (next) => (permissions) => {
|
|
1173
1414
|
return next(revisedPermissions);
|
1174
1415
|
};
|
1175
1416
|
const prefixPluginTranslations = (trad, pluginId2) => {
|
1176
|
-
if (!pluginId2) {
|
1177
|
-
throw new TypeError("pluginId can't be empty");
|
1178
|
-
}
|
1179
1417
|
return Object.keys(trad).reduce((acc, current) => {
|
1180
1418
|
acc[`${pluginId2}.${current}`] = trad[current];
|
1181
1419
|
return acc;
|
@@ -1245,11 +1483,11 @@ const index = {
|
|
1245
1483
|
},
|
1246
1484
|
id: "internationalization",
|
1247
1485
|
to: "internationalization",
|
1248
|
-
Component: () => Promise.resolve().then(() => require("./SettingsPage-
|
1486
|
+
Component: () => Promise.resolve().then(() => require("./SettingsPage-BsHtr3lV.js")).then((mod) => ({ default: mod.ProtectedSettingsPage })),
|
1249
1487
|
permissions: PERMISSIONS.accessMain
|
1250
1488
|
});
|
1251
1489
|
const contentManager = app.getPlugin("content-manager");
|
1252
|
-
contentManager.apis.addDocumentHeaderAction([LocalePickerAction]);
|
1490
|
+
contentManager.apis.addDocumentHeaderAction([LocalePickerAction, FillFromAnotherLocaleAction]);
|
1253
1491
|
contentManager.apis.addDocumentAction((actions) => {
|
1254
1492
|
const indexOfDeleteAction = actions.findIndex((action) => action.type === "delete");
|
1255
1493
|
actions.splice(indexOfDeleteAction, 0, DeleteLocaleAction);
|
@@ -1257,6 +1495,7 @@ const index = {
|
|
1257
1495
|
});
|
1258
1496
|
contentManager.apis.addDocumentAction((actions) => {
|
1259
1497
|
actions.splice(2, 0, BulkLocalePublishAction);
|
1498
|
+
actions.splice(5, 0, BulkLocaleUnpublishAction);
|
1260
1499
|
return actions;
|
1261
1500
|
});
|
1262
1501
|
contentManager.injectComponent("listView", "actions", {
|
@@ -1362,7 +1601,7 @@ const index = {
|
|
1362
1601
|
async registerTrads({ locales }) {
|
1363
1602
|
const importedTrads = await Promise.all(
|
1364
1603
|
locales.map((locale) => {
|
1365
|
-
return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/de.json": () => Promise.resolve().then(() => require("./de-DtWiGdHl.js")), "./translations/dk.json": () => Promise.resolve().then(() => require("./dk-D8C-casx.js")), "./translations/en.json": () => Promise.resolve().then(() => require("./en-
|
1604
|
+
return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/de.json": () => Promise.resolve().then(() => require("./de-DtWiGdHl.js")), "./translations/dk.json": () => Promise.resolve().then(() => require("./dk-D8C-casx.js")), "./translations/en.json": () => Promise.resolve().then(() => require("./en-BKBz3tro.js")), "./translations/es.json": () => Promise.resolve().then(() => require("./es-DS-XFGSw.js")), "./translations/fr.json": () => Promise.resolve().then(() => require("./fr-BTjekDpq.js")), "./translations/ko.json": () => Promise.resolve().then(() => require("./ko-DmcGUBQ3.js")), "./translations/pl.json": () => Promise.resolve().then(() => require("./pl-Cn5RYonZ.js")), "./translations/ru.json": () => Promise.resolve().then(() => require("./ru-BMBgVL3s.js")), "./translations/tr.json": () => Promise.resolve().then(() => require("./tr-CarUU76c.js")), "./translations/zh-Hans.json": () => Promise.resolve().then(() => require("./zh-Hans-DSHIXAa3.js")), "./translations/zh.json": () => Promise.resolve().then(() => require("./zh-CukOviB0.js")) }), `./translations/${locale}.json`, 3).then(({ default: data }) => {
|
1366
1605
|
return {
|
1367
1606
|
data: prefixPluginTranslations(data, pluginId),
|
1368
1607
|
locale
|
@@ -1386,4 +1625,4 @@ exports.useDeleteLocaleMutation = useDeleteLocaleMutation;
|
|
1386
1625
|
exports.useGetDefaultLocalesQuery = useGetDefaultLocalesQuery;
|
1387
1626
|
exports.useGetLocalesQuery = useGetLocalesQuery;
|
1388
1627
|
exports.useUpdateLocaleMutation = useUpdateLocaleMutation;
|
1389
|
-
//# sourceMappingURL=index-
|
1628
|
+
//# sourceMappingURL=index-3XgwXL6T.js.map
|