@strapi/i18n 0.0.0-experimental.5b211b38912691ee2eab22d47b5095ea2fcfec76 → 0.0.0-experimental.5d4d8671a4141a722aa70f22022a255988f07137
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/LICENSE +18 -3
- package/dist/_chunks/{SettingsPage-B5sTcP82.mjs → SettingsPage-BHvunuIF.mjs} +8 -8
- package/dist/_chunks/SettingsPage-BHvunuIF.mjs.map +1 -0
- package/dist/_chunks/{SettingsPage-DT1sxWa2.js → SettingsPage-Bcj7380u.js} +8 -8
- package/dist/_chunks/SettingsPage-Bcj7380u.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-jMrzaEb9.js → index-BKZbxhpm.js} +416 -170
- package/dist/_chunks/index-BKZbxhpm.js.map +1 -0
- package/dist/_chunks/{index-DsNqyQKx.mjs → index-DUdrr5PR.mjs} +412 -166
- package/dist/_chunks/index-DUdrr5PR.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/utils/clean.d.ts +4 -0
- package/dist/admin/src/utils/schemas.d.ts +1 -0
- package/dist/server/index.js +413 -480
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +415 -482
- 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 +10 -10
- package/dist/_chunks/SettingsPage-B5sTcP82.mjs.map +0 -1
- package/dist/_chunks/SettingsPage-DT1sxWa2.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-DsNqyQKx.mjs.map +0 -1
- package/dist/_chunks/index-jMrzaEb9.js.map +0 -1
- package/dist/admin/src/components/Initializer.d.ts +0 -5
- 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
@@ -7,6 +7,7 @@ const designSystem = require("@strapi/design-system");
|
|
7
7
|
const icons = require("@strapi/icons");
|
8
8
|
const reactIntl = require("react-intl");
|
9
9
|
const styledComponents = require("styled-components");
|
10
|
+
const query = require("@reduxjs/toolkit/query");
|
10
11
|
const strapiAdmin = require("@strapi/admin/strapi-admin");
|
11
12
|
const strapiAdmin$1 = require("@strapi/content-manager/strapi-admin");
|
12
13
|
const reactRouterDom = require("react-router-dom");
|
@@ -160,7 +161,7 @@ const useI18n = () => {
|
|
160
161
|
model: params.slug
|
161
162
|
},
|
162
163
|
{
|
163
|
-
skip:
|
164
|
+
skip: true
|
164
165
|
}
|
165
166
|
);
|
166
167
|
if (doesPluginOptionsHaveI18nLocalized(schema?.pluginOptions)) {
|
@@ -240,10 +241,94 @@ const relationsApi = i18nApi.injectEndpoints({
|
|
240
241
|
})
|
241
242
|
});
|
242
243
|
const { useGetManyDraftRelationCountQuery } = relationsApi;
|
244
|
+
const cleanData = (data, schema, components) => {
|
245
|
+
const cleanedData = removeFields(data, [
|
246
|
+
"createdAt",
|
247
|
+
"createdBy",
|
248
|
+
"updatedAt",
|
249
|
+
"updatedBy",
|
250
|
+
"id",
|
251
|
+
"documentId",
|
252
|
+
"publishedAt",
|
253
|
+
"strapi_stage",
|
254
|
+
"strapi_assignee",
|
255
|
+
"locale",
|
256
|
+
"status"
|
257
|
+
]);
|
258
|
+
const cleanedDataWithoutPasswordAndRelation = recursiveRemoveFieldTypes(
|
259
|
+
cleanedData,
|
260
|
+
schema,
|
261
|
+
components,
|
262
|
+
["relation", "password"]
|
263
|
+
);
|
264
|
+
return cleanedDataWithoutPasswordAndRelation;
|
265
|
+
};
|
266
|
+
const removeFields = (data, fields) => {
|
267
|
+
return Object.keys(data).reduce((acc, current) => {
|
268
|
+
if (fields.includes(current)) {
|
269
|
+
return acc;
|
270
|
+
}
|
271
|
+
acc[current] = data[current];
|
272
|
+
return acc;
|
273
|
+
}, {});
|
274
|
+
};
|
275
|
+
const recursiveRemoveFieldTypes = (data, schema, components, fields) => {
|
276
|
+
return Object.keys(data).reduce((acc, current) => {
|
277
|
+
const attribute = schema.attributes[current] ?? { type: void 0 };
|
278
|
+
if (fields.includes(attribute.type)) {
|
279
|
+
return acc;
|
280
|
+
}
|
281
|
+
if (attribute.type === "dynamiczone") {
|
282
|
+
acc[current] = data[current].map((componentValue, index2) => {
|
283
|
+
const { id: _, ...rest } = recursiveRemoveFieldTypes(
|
284
|
+
componentValue,
|
285
|
+
components[componentValue.__component],
|
286
|
+
components,
|
287
|
+
fields
|
288
|
+
);
|
289
|
+
return {
|
290
|
+
...rest,
|
291
|
+
__temp_key__: index2 + 1
|
292
|
+
};
|
293
|
+
});
|
294
|
+
} else if (attribute.type === "component") {
|
295
|
+
const { repeatable, component } = attribute;
|
296
|
+
if (repeatable) {
|
297
|
+
acc[current] = (data[current] ?? []).map((compoData, index2) => {
|
298
|
+
const { id: _, ...rest } = recursiveRemoveFieldTypes(
|
299
|
+
compoData,
|
300
|
+
components[component],
|
301
|
+
components,
|
302
|
+
fields
|
303
|
+
);
|
304
|
+
return {
|
305
|
+
...rest,
|
306
|
+
__temp_key__: index2 + 1
|
307
|
+
};
|
308
|
+
});
|
309
|
+
} else {
|
310
|
+
const { id: _, ...rest } = recursiveRemoveFieldTypes(
|
311
|
+
data[current] ?? {},
|
312
|
+
components[component],
|
313
|
+
components,
|
314
|
+
fields
|
315
|
+
);
|
316
|
+
acc[current] = rest;
|
317
|
+
}
|
318
|
+
} else {
|
319
|
+
acc[current] = data[current];
|
320
|
+
}
|
321
|
+
return acc;
|
322
|
+
}, {});
|
323
|
+
};
|
243
324
|
const isErrorMessageDescriptor = (object) => {
|
244
325
|
return typeof object === "object" && object !== null && "id" in object && "defaultMessage" in object;
|
245
326
|
};
|
246
|
-
const EntryValidationText = ({
|
327
|
+
const EntryValidationText = ({
|
328
|
+
status = "draft",
|
329
|
+
validationErrors,
|
330
|
+
action
|
331
|
+
}) => {
|
247
332
|
const { formatMessage } = reactIntl.useIntl();
|
248
333
|
const getErrorStr = (key, value) => {
|
249
334
|
if (typeof value === "string") {
|
@@ -277,30 +362,63 @@ const EntryValidationText = ({ status = "draft", validationErrors }) => {
|
|
277
362
|
) })
|
278
363
|
] });
|
279
364
|
}
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
365
|
+
const getStatusMessage = () => {
|
366
|
+
if (action === "bulk-publish") {
|
367
|
+
if (status === "published") {
|
368
|
+
return {
|
369
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(icons.CheckCircle, { fill: "success600" }),
|
370
|
+
text: formatMessage({
|
371
|
+
id: "content-manager.bulk-publish.already-published",
|
372
|
+
defaultMessage: "Already Published"
|
373
|
+
}),
|
374
|
+
textColor: "success600",
|
375
|
+
fontWeight: "bold"
|
376
|
+
};
|
377
|
+
} else if (status === "modified") {
|
378
|
+
return {
|
379
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(icons.ArrowsCounterClockwise, { fill: "alternative600" }),
|
380
|
+
text: formatMessage({
|
381
|
+
id: "app.utils.ready-to-publish-changes",
|
382
|
+
defaultMessage: "Ready to publish changes"
|
383
|
+
})
|
384
|
+
};
|
385
|
+
} else {
|
386
|
+
return {
|
387
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(icons.CheckCircle, { fill: "success600" }),
|
388
|
+
text: formatMessage({
|
389
|
+
id: "app.utils.ready-to-publish",
|
390
|
+
defaultMessage: "Ready to publish"
|
391
|
+
})
|
392
|
+
};
|
393
|
+
}
|
394
|
+
} else {
|
395
|
+
if (status === "draft") {
|
396
|
+
return {
|
397
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(icons.CheckCircle, { fill: "success600" }),
|
398
|
+
text: formatMessage({
|
399
|
+
id: "content-manager.bulk-unpublish.already-unpublished",
|
400
|
+
defaultMessage: "Already Unpublished"
|
401
|
+
}),
|
402
|
+
textColor: "success600",
|
403
|
+
fontWeight: "bold"
|
404
|
+
};
|
405
|
+
} else {
|
406
|
+
return {
|
407
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(icons.CheckCircle, { fill: "success600" }),
|
408
|
+
text: formatMessage({
|
409
|
+
id: "app.utils.ready-to-unpublish-changes",
|
410
|
+
defaultMessage: "Ready to unpublish"
|
411
|
+
}),
|
412
|
+
textColor: "success600",
|
413
|
+
fontWeight: "bold"
|
414
|
+
};
|
415
|
+
}
|
416
|
+
}
|
417
|
+
};
|
418
|
+
const { icon, text, textColor = "success600", fontWeight = "normal" } = getStatusMessage();
|
298
419
|
return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
|
299
|
-
|
300
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children:
|
301
|
-
id: "app.utils.ready-to-publish",
|
302
|
-
defaultMessage: "Ready to publish"
|
303
|
-
}) })
|
420
|
+
icon,
|
421
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor, fontWeight, children: text })
|
304
422
|
] });
|
305
423
|
};
|
306
424
|
const BoldChunk = (chunks) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { fontWeight: "bold", children: chunks });
|
@@ -308,7 +426,8 @@ const BulkLocaleActionModal = ({
|
|
308
426
|
headers,
|
309
427
|
rows,
|
310
428
|
localesMetadata,
|
311
|
-
validationErrors = {}
|
429
|
+
validationErrors = {},
|
430
|
+
action
|
312
431
|
}) => {
|
313
432
|
const { formatMessage } = reactIntl.useIntl();
|
314
433
|
const selectedRows = strapiAdmin.useTable(
|
@@ -321,27 +440,29 @@ const BulkLocaleActionModal = ({
|
|
321
440
|
return acc;
|
322
441
|
}, {});
|
323
442
|
const localesWithErrors = Object.keys(validationErrors);
|
324
|
-
const
|
443
|
+
const publishedCount = selectedRows.filter(
|
325
444
|
({ locale }) => currentStatusByLocale[locale] === "published"
|
326
445
|
).length;
|
327
|
-
const
|
446
|
+
const draftCount = selectedRows.filter(
|
328
447
|
({ locale }) => (currentStatusByLocale[locale] === "draft" || currentStatusByLocale[locale] === "modified") && !localesWithErrors.includes(locale)
|
329
448
|
).length;
|
330
449
|
const withErrorsCount = localesWithErrors.length;
|
450
|
+
const messageId = action === "bulk-publish" ? "content-manager.containers.list.selectedEntriesModal.selectedCount.publish" : "content-manager.containers.list.selectedEntriesModal.selectedCount.unpublish";
|
451
|
+
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.";
|
331
452
|
return formatMessage(
|
332
453
|
{
|
333
|
-
id:
|
334
|
-
defaultMessage
|
454
|
+
id: messageId,
|
455
|
+
defaultMessage
|
335
456
|
},
|
336
457
|
{
|
337
458
|
withErrorsCount,
|
338
|
-
|
339
|
-
|
459
|
+
draftCount,
|
460
|
+
publishedCount,
|
340
461
|
b: BoldChunk
|
341
462
|
}
|
342
463
|
);
|
343
464
|
};
|
344
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
465
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Modal.Body, { children: [
|
345
466
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: getFormattedCountMessage() }),
|
346
467
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { marginTop: 5, children: /* @__PURE__ */ jsxRuntime.jsxs(strapiAdmin.Table.Content, { children: [
|
347
468
|
/* @__PURE__ */ jsxRuntime.jsxs(strapiAdmin.Table.Head, { children: [
|
@@ -368,7 +489,7 @@ const BulkLocaleActionModal = ({
|
|
368
489
|
children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { tag: "span", variant: "pi", fontWeight: "bold", children: capitalize(status) })
|
369
490
|
}
|
370
491
|
) }) }),
|
371
|
-
/* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsx(EntryValidationText, { validationErrors: error, status }) }),
|
492
|
+
/* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsx(EntryValidationText, { validationErrors: error, status, action }) }),
|
372
493
|
/* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
373
494
|
designSystem.IconButton,
|
374
495
|
{
|
@@ -385,7 +506,7 @@ const BulkLocaleActionModal = ({
|
|
385
506
|
name: locale
|
386
507
|
}
|
387
508
|
),
|
388
|
-
|
509
|
+
variant: "ghost",
|
389
510
|
children: /* @__PURE__ */ jsxRuntime.jsx(icons.Pencil, {})
|
390
511
|
}
|
391
512
|
) })
|
@@ -394,6 +515,48 @@ const BulkLocaleActionModal = ({
|
|
394
515
|
] }) })
|
395
516
|
] });
|
396
517
|
};
|
518
|
+
const statusVariants = {
|
519
|
+
draft: "secondary",
|
520
|
+
published: "success",
|
521
|
+
modified: "alternative"
|
522
|
+
};
|
523
|
+
const LocaleOption = ({
|
524
|
+
isDraftAndPublishEnabled,
|
525
|
+
locale,
|
526
|
+
status,
|
527
|
+
entryExists
|
528
|
+
}) => {
|
529
|
+
const { formatMessage } = reactIntl.useIntl();
|
530
|
+
if (!entryExists) {
|
531
|
+
return formatMessage(
|
532
|
+
{
|
533
|
+
id: getTranslation("CMEditViewLocalePicker.locale.create"),
|
534
|
+
defaultMessage: "Create <bold>{locale}</bold> locale"
|
535
|
+
},
|
536
|
+
{
|
537
|
+
bold: (locale2) => /* @__PURE__ */ jsxRuntime.jsx("b", { children: locale2 }),
|
538
|
+
locale: locale.name
|
539
|
+
}
|
540
|
+
);
|
541
|
+
}
|
542
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { width: "100%", gap: 1, justifyContent: "space-between", children: [
|
543
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: locale.name }),
|
544
|
+
isDraftAndPublishEnabled ? /* @__PURE__ */ jsxRuntime.jsx(
|
545
|
+
designSystem.Status,
|
546
|
+
{
|
547
|
+
display: "flex",
|
548
|
+
paddingLeft: "6px",
|
549
|
+
paddingRight: "6px",
|
550
|
+
paddingTop: "2px",
|
551
|
+
paddingBottom: "2px",
|
552
|
+
showBullet: false,
|
553
|
+
size: "S",
|
554
|
+
variant: statusVariants[status],
|
555
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { tag: "span", variant: "pi", fontWeight: "bold", children: capitalize(status) })
|
556
|
+
}
|
557
|
+
) : null
|
558
|
+
] });
|
559
|
+
};
|
397
560
|
const LocalePickerAction = ({
|
398
561
|
document,
|
399
562
|
meta,
|
@@ -402,74 +565,74 @@ const LocalePickerAction = ({
|
|
402
565
|
documentId
|
403
566
|
}) => {
|
404
567
|
const { formatMessage } = reactIntl.useIntl();
|
405
|
-
const [{ query }, setQuery] = strapiAdmin.useQueryParams();
|
568
|
+
const [{ query: query2 }, setQuery] = strapiAdmin.useQueryParams();
|
406
569
|
const { hasI18n, canCreate, canRead } = useI18n();
|
407
570
|
const { data: locales = [] } = useGetLocalesQuery();
|
408
|
-
const
|
571
|
+
const currentDesiredLocale = query2.plugins?.i18n?.locale;
|
572
|
+
const { schema } = strapiAdmin$1.unstable_useDocument({
|
573
|
+
model,
|
574
|
+
collectionType,
|
575
|
+
documentId,
|
576
|
+
params: { locale: currentDesiredLocale }
|
577
|
+
});
|
409
578
|
const handleSelect = React__namespace.useCallback(
|
410
579
|
(value) => {
|
411
580
|
setQuery({
|
412
581
|
plugins: {
|
413
|
-
...
|
582
|
+
...query2.plugins,
|
414
583
|
i18n: {
|
415
584
|
locale: value
|
416
585
|
}
|
417
586
|
}
|
418
587
|
});
|
419
588
|
},
|
420
|
-
[
|
589
|
+
[query2.plugins, setQuery]
|
421
590
|
);
|
422
591
|
React__namespace.useEffect(() => {
|
423
592
|
if (!Array.isArray(locales) || !hasI18n) {
|
424
593
|
return;
|
425
594
|
}
|
426
|
-
const currentDesiredLocale = query.plugins?.i18n?.locale;
|
427
595
|
const doesLocaleExist = locales.find((loc) => loc.code === currentDesiredLocale);
|
428
596
|
const defaultLocale = locales.find((locale) => locale.isDefault);
|
429
597
|
if (!doesLocaleExist && defaultLocale?.code) {
|
430
598
|
handleSelect(defaultLocale.code);
|
431
599
|
}
|
432
|
-
}, [handleSelect, hasI18n, locales,
|
433
|
-
|
434
|
-
return null;
|
435
|
-
}
|
436
|
-
const currentLocale = query.plugins?.i18n?.locale || locales.find((loc) => loc.isDefault)?.code;
|
600
|
+
}, [handleSelect, hasI18n, locales, currentDesiredLocale]);
|
601
|
+
const currentLocale = Array.isArray(locales) ? locales.find((locale) => locale.code === currentDesiredLocale) : void 0;
|
437
602
|
const allCurrentLocales = [
|
438
|
-
{ status: getDocumentStatus(document, meta), locale: currentLocale },
|
603
|
+
{ status: getDocumentStatus(document, meta), locale: currentLocale?.code },
|
439
604
|
...meta?.availableLocales ?? []
|
440
605
|
];
|
606
|
+
if (!hasI18n || !Array.isArray(locales) || locales.length === 0) {
|
607
|
+
return null;
|
608
|
+
}
|
441
609
|
return {
|
442
610
|
label: formatMessage({
|
443
611
|
id: getTranslation("Settings.locales.modal.locales.label"),
|
444
612
|
defaultMessage: "Locales"
|
445
613
|
}),
|
446
614
|
options: locales.map((locale) => {
|
615
|
+
const entryWithLocaleExists = allCurrentLocales.some((doc) => doc.locale === locale.code);
|
447
616
|
const currentLocaleDoc = allCurrentLocales.find(
|
448
617
|
(doc) => "locale" in doc ? doc.locale === locale.code : false
|
449
618
|
);
|
450
|
-
const
|
451
|
-
const permissionsToCheck = currentLocaleDoc ? canCreate : canRead;
|
452
|
-
const statusVariant = status === "draft" ? "primary" : status === "published" ? "success" : "alternative";
|
619
|
+
const permissionsToCheck = currentLocaleDoc ? canRead : canCreate;
|
453
620
|
return {
|
454
621
|
disabled: !permissionsToCheck.includes(locale.code),
|
455
622
|
value: locale.code,
|
456
|
-
label:
|
457
|
-
|
458
|
-
designSystem.Status,
|
623
|
+
label: /* @__PURE__ */ jsxRuntime.jsx(
|
624
|
+
LocaleOption,
|
459
625
|
{
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
paddingBottom: "2px",
|
465
|
-
showBullet: false,
|
466
|
-
size: "S",
|
467
|
-
variant: statusVariant,
|
468
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { tag: "span", variant: "pi", fontWeight: "bold", children: capitalize(status) })
|
626
|
+
isDraftAndPublishEnabled: !!schema?.options?.draftAndPublish,
|
627
|
+
locale,
|
628
|
+
status: currentLocaleDoc?.status,
|
629
|
+
entryExists: entryWithLocaleExists
|
469
630
|
}
|
470
|
-
)
|
631
|
+
),
|
632
|
+
startIcon: !entryWithLocaleExists ? /* @__PURE__ */ jsxRuntime.jsx(icons.Plus, {}) : null
|
471
633
|
};
|
472
634
|
}),
|
635
|
+
customizeContent: () => currentLocale?.name,
|
473
636
|
onSelect: handleSelect,
|
474
637
|
value: currentLocale
|
475
638
|
};
|
@@ -485,6 +648,99 @@ const getDocumentStatus = (document, meta) => {
|
|
485
648
|
}
|
486
649
|
return docStatus;
|
487
650
|
};
|
651
|
+
const FillFromAnotherLocaleAction = ({
|
652
|
+
documentId,
|
653
|
+
meta,
|
654
|
+
model,
|
655
|
+
collectionType
|
656
|
+
}) => {
|
657
|
+
const { formatMessage } = reactIntl.useIntl();
|
658
|
+
const [{ query: query2 }] = strapiAdmin.useQueryParams();
|
659
|
+
const { hasI18n } = useI18n();
|
660
|
+
const currentDesiredLocale = query2.plugins?.i18n?.locale;
|
661
|
+
const [localeSelected, setLocaleSelected] = React__namespace.useState(null);
|
662
|
+
const setValues = strapiAdmin.useForm("FillFromAnotherLocale", (state) => state.setValues);
|
663
|
+
const { getDocument } = strapiAdmin$1.unstable_useDocumentActions();
|
664
|
+
const { schema, components } = strapiAdmin$1.unstable_useDocument({
|
665
|
+
model,
|
666
|
+
documentId,
|
667
|
+
collectionType,
|
668
|
+
params: { locale: currentDesiredLocale }
|
669
|
+
});
|
670
|
+
const { data: locales = [] } = useGetLocalesQuery();
|
671
|
+
const availableLocales = Array.isArray(locales) ? locales.filter((locale) => meta?.availableLocales.some((l) => l.locale === locale.code)) : [];
|
672
|
+
const fillFromLocale = (onClose) => async () => {
|
673
|
+
const response = await getDocument({
|
674
|
+
collectionType,
|
675
|
+
model,
|
676
|
+
documentId,
|
677
|
+
params: { locale: localeSelected }
|
678
|
+
});
|
679
|
+
if (!response || !schema) {
|
680
|
+
return;
|
681
|
+
}
|
682
|
+
const { data } = response;
|
683
|
+
const cleanedData = cleanData(data, schema, components);
|
684
|
+
setValues(cleanedData);
|
685
|
+
onClose();
|
686
|
+
};
|
687
|
+
if (!hasI18n) {
|
688
|
+
return null;
|
689
|
+
}
|
690
|
+
return {
|
691
|
+
type: "icon",
|
692
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(icons.Download, {}),
|
693
|
+
disabled: availableLocales.length === 0,
|
694
|
+
label: formatMessage({
|
695
|
+
id: getTranslation("CMEditViewCopyLocale.copy-text"),
|
696
|
+
defaultMessage: "Fill in from another locale"
|
697
|
+
}),
|
698
|
+
dialog: {
|
699
|
+
type: "dialog",
|
700
|
+
title: formatMessage({
|
701
|
+
id: getTranslation("CMEditViewCopyLocale.dialog.title"),
|
702
|
+
defaultMessage: "Confirmation"
|
703
|
+
}),
|
704
|
+
content: ({ onClose }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
705
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Dialog.Body, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", gap: 3, children: [
|
706
|
+
/* @__PURE__ */ jsxRuntime.jsx(icons.WarningCircle, { width: "24px", height: "24px", fill: "danger600" }),
|
707
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textAlign: "center", children: formatMessage({
|
708
|
+
id: getTranslation("CMEditViewCopyLocale.dialog.body"),
|
709
|
+
defaultMessage: "Your current content will be erased and filled by the content of the selected locale:"
|
710
|
+
}) }),
|
711
|
+
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Field.Root, { width: "100%", children: [
|
712
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: formatMessage({
|
713
|
+
id: getTranslation("CMEditViewCopyLocale.dialog.field.label"),
|
714
|
+
defaultMessage: "Locale"
|
715
|
+
}) }),
|
716
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
717
|
+
designSystem.SingleSelect,
|
718
|
+
{
|
719
|
+
value: localeSelected,
|
720
|
+
placeholder: formatMessage({
|
721
|
+
id: getTranslation("CMEditViewCopyLocale.dialog.field.placeholder"),
|
722
|
+
defaultMessage: "Select one locale..."
|
723
|
+
}),
|
724
|
+
onChange: (value) => setLocaleSelected(value),
|
725
|
+
children: availableLocales.map((locale) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: locale.code, children: locale.name }, locale.code))
|
726
|
+
}
|
727
|
+
)
|
728
|
+
] })
|
729
|
+
] }) }),
|
730
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Dialog.Footer, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, width: "100%", children: [
|
731
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { flex: "auto", variant: "tertiary", onClick: onClose, children: formatMessage({
|
732
|
+
id: getTranslation("CMEditViewCopyLocale.cancel-text"),
|
733
|
+
defaultMessage: "No, cancel"
|
734
|
+
}) }),
|
735
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { flex: "auto", variant: "success", onClick: fillFromLocale(onClose), children: formatMessage({
|
736
|
+
id: getTranslation("CMEditViewCopyLocale.submit-text"),
|
737
|
+
defaultMessage: "Yes, fill in"
|
738
|
+
}) })
|
739
|
+
] }) })
|
740
|
+
] })
|
741
|
+
}
|
742
|
+
};
|
743
|
+
};
|
488
744
|
const DeleteLocaleAction = ({
|
489
745
|
document,
|
490
746
|
documentId,
|
@@ -496,16 +752,23 @@ const DeleteLocaleAction = ({
|
|
496
752
|
const { toggleNotification } = strapiAdmin.useNotification();
|
497
753
|
const { delete: deleteAction } = strapiAdmin$1.unstable_useDocumentActions();
|
498
754
|
const { hasI18n, canDelete } = useI18n();
|
755
|
+
const [{ query: query2 }] = strapiAdmin.useQueryParams();
|
756
|
+
const { data: locales = [] } = useGetLocalesQuery();
|
757
|
+
const currentDesiredLocale = query2.plugins?.i18n?.locale;
|
758
|
+
const locale = !("error" in locales) && locales.find((loc) => loc.code === currentDesiredLocale);
|
499
759
|
if (!hasI18n) {
|
500
760
|
return null;
|
501
761
|
}
|
502
762
|
return {
|
503
763
|
disabled: document?.locale && !canDelete.includes(document.locale) || !document || !document.id,
|
504
764
|
position: ["header", "table-row"],
|
505
|
-
label: formatMessage(
|
506
|
-
|
507
|
-
|
508
|
-
|
765
|
+
label: formatMessage(
|
766
|
+
{
|
767
|
+
id: getTranslation("actions.delete.label"),
|
768
|
+
defaultMessage: "Delete entry ({locale})"
|
769
|
+
},
|
770
|
+
{ locale: locale && locale.name }
|
771
|
+
),
|
509
772
|
icon: /* @__PURE__ */ jsxRuntime.jsx(StyledTrash, {}),
|
510
773
|
variant: "danger",
|
511
774
|
dialog: {
|
@@ -522,7 +785,12 @@ const DeleteLocaleAction = ({
|
|
522
785
|
}) })
|
523
786
|
] }),
|
524
787
|
onConfirm: async () => {
|
525
|
-
|
788
|
+
const unableToDelete = (
|
789
|
+
// We are unable to delete a collection type without a document ID
|
790
|
+
// & unable to delete generally if there is no document locale
|
791
|
+
collectionType !== "single-types" && !documentId || !document?.locale
|
792
|
+
);
|
793
|
+
if (unableToDelete) {
|
526
794
|
console.error(
|
527
795
|
"You're trying to delete a document without an id or locale, this is likely a bug with Strapi. Please open an issue."
|
528
796
|
);
|
@@ -548,37 +816,43 @@ const DeleteLocaleAction = ({
|
|
548
816
|
}
|
549
817
|
};
|
550
818
|
};
|
551
|
-
const
|
819
|
+
const BulkLocaleAction = ({
|
552
820
|
document: baseDocument,
|
553
821
|
documentId,
|
554
822
|
model,
|
555
|
-
collectionType
|
823
|
+
collectionType,
|
824
|
+
action
|
556
825
|
}) => {
|
557
826
|
const baseLocale = baseDocument?.locale ?? null;
|
558
|
-
const [{ query }] = strapiAdmin.useQueryParams();
|
559
|
-
const params = React__namespace.useMemo(() => strapiAdmin$1.buildValidParams(query), [query]);
|
560
|
-
const
|
827
|
+
const [{ query: query$1 }] = strapiAdmin.useQueryParams();
|
828
|
+
const params = React__namespace.useMemo(() => strapiAdmin$1.buildValidParams(query$1), [query$1]);
|
829
|
+
const isOnPublishedTab = query$1.status === "published";
|
561
830
|
const { formatMessage } = reactIntl.useIntl();
|
562
831
|
const { hasI18n, canPublish } = useI18n();
|
563
832
|
const { toggleNotification } = strapiAdmin.useNotification();
|
564
833
|
const { _unstableFormatAPIError: formatAPIError } = strapiAdmin.useAPIErrorHandler();
|
565
834
|
const [selectedRows, setSelectedRows] = React__namespace.useState([]);
|
566
835
|
const [isDraftRelationConfirmationOpen, setIsDraftRelationConfirmationOpen] = React__namespace.useState(false);
|
567
|
-
const { publishMany: publishManyAction } = strapiAdmin$1.unstable_useDocumentActions();
|
836
|
+
const { publishMany: publishManyAction, unpublishMany: unpublishManyAction } = strapiAdmin$1.unstable_useDocumentActions();
|
568
837
|
const {
|
569
838
|
document,
|
570
839
|
meta: documentMeta,
|
571
840
|
schema,
|
572
841
|
validate
|
573
|
-
} = strapiAdmin$1.unstable_useDocument(
|
574
|
-
|
575
|
-
|
576
|
-
|
577
|
-
|
578
|
-
|
842
|
+
} = strapiAdmin$1.unstable_useDocument(
|
843
|
+
{
|
844
|
+
model,
|
845
|
+
collectionType,
|
846
|
+
documentId,
|
847
|
+
params: {
|
848
|
+
locale: baseLocale
|
849
|
+
}
|
850
|
+
},
|
851
|
+
{
|
852
|
+
skip: !hasI18n || !baseLocale
|
579
853
|
}
|
580
|
-
|
581
|
-
const { data: localesMetadata = [] } = useGetLocalesQuery();
|
854
|
+
);
|
855
|
+
const { data: localesMetadata = [] } = useGetLocalesQuery(hasI18n ? void 0 : query.skipToken);
|
582
856
|
const headers = [
|
583
857
|
{
|
584
858
|
label: formatMessage({
|
@@ -627,12 +901,19 @@ const BulkLocalePublishAction = ({
|
|
627
901
|
}, {});
|
628
902
|
return [rowsFromMeta, errors];
|
629
903
|
}, [document, documentMeta?.availableLocales, validate]);
|
630
|
-
const
|
631
|
-
|
904
|
+
const isBulkPublish = action === "bulk-publish";
|
905
|
+
const localesForAction = selectedRows.reduce((acc, selectedRow) => {
|
906
|
+
const isValidLocale = (
|
907
|
+
// Validation errors are irrelevant if we are trying to unpublish
|
908
|
+
!isBulkPublish || !Object.keys(validationErrors).includes(selectedRow.locale)
|
909
|
+
);
|
910
|
+
const shouldAddLocale = isBulkPublish ? selectedRow.status !== "published" && isValidLocale : selectedRow.status !== "draft" && isValidLocale;
|
911
|
+
if (shouldAddLocale) {
|
632
912
|
acc.push(selectedRow.locale);
|
633
913
|
}
|
634
914
|
return acc;
|
635
915
|
}, []);
|
916
|
+
const enableDraftRelationsCount = false;
|
636
917
|
const {
|
637
918
|
data: draftRelationsCount = 0,
|
638
919
|
isLoading: isDraftRelationsLoading,
|
@@ -641,10 +922,10 @@ const BulkLocalePublishAction = ({
|
|
641
922
|
{
|
642
923
|
model,
|
643
924
|
documentIds: [documentId],
|
644
|
-
locale:
|
925
|
+
locale: localesForAction
|
645
926
|
},
|
646
927
|
{
|
647
|
-
skip: !
|
928
|
+
skip: !enableDraftRelationsCount
|
648
929
|
}
|
649
930
|
);
|
650
931
|
React__namespace.useEffect(() => {
|
@@ -670,7 +951,18 @@ const BulkLocalePublishAction = ({
|
|
670
951
|
documentIds: [documentId],
|
671
952
|
params: {
|
672
953
|
...params,
|
673
|
-
locale:
|
954
|
+
locale: localesForAction
|
955
|
+
}
|
956
|
+
});
|
957
|
+
setSelectedRows([]);
|
958
|
+
};
|
959
|
+
const unpublish = async () => {
|
960
|
+
await unpublishManyAction({
|
961
|
+
model,
|
962
|
+
documentIds: [documentId],
|
963
|
+
params: {
|
964
|
+
...params,
|
965
|
+
locale: localesForAction
|
674
966
|
}
|
675
967
|
});
|
676
968
|
setSelectedRows([]);
|
@@ -678,14 +970,12 @@ const BulkLocalePublishAction = ({
|
|
678
970
|
const handleAction = async () => {
|
679
971
|
if (draftRelationsCount > 0) {
|
680
972
|
setIsDraftRelationConfirmationOpen(true);
|
681
|
-
} else {
|
973
|
+
} else if (isBulkPublish) {
|
682
974
|
await publish();
|
975
|
+
} else {
|
976
|
+
await unpublish();
|
683
977
|
}
|
684
978
|
};
|
685
|
-
const isUnpublish = document?.status === "published";
|
686
|
-
if (isUnpublish) {
|
687
|
-
console.warn(["I18N"], "Bulk locale unpublish modal not implemented");
|
688
|
-
}
|
689
979
|
if (isDraftRelationConfirmationOpen) {
|
690
980
|
return {
|
691
981
|
label: formatMessage({
|
@@ -720,20 +1010,21 @@ const BulkLocalePublishAction = ({
|
|
720
1010
|
}
|
721
1011
|
};
|
722
1012
|
}
|
1013
|
+
const hasPermission = selectedRows.map(({ locale }) => locale).every((locale) => canPublish.includes(locale));
|
723
1014
|
return {
|
724
1015
|
label: formatMessage({
|
725
|
-
id: getTranslation("
|
726
|
-
defaultMessage: "Publish Multiple Locales
|
1016
|
+
id: getTranslation(`CMEditViewBulkLocale.${isBulkPublish ? "publish" : "unpublish"}-title`),
|
1017
|
+
defaultMessage: `${isBulkPublish ? "Publish" : "Unpublish"} Multiple Locales`
|
727
1018
|
}),
|
728
|
-
|
729
|
-
|
1019
|
+
variant: isBulkPublish ? "secondary" : "danger",
|
1020
|
+
icon: isBulkPublish ? /* @__PURE__ */ jsxRuntime.jsx(icons.ListPlus, {}) : /* @__PURE__ */ jsxRuntime.jsx(icons.Cross, {}),
|
1021
|
+
disabled: isOnPublishedTab || canPublish.length === 0,
|
730
1022
|
position: ["panel"],
|
731
|
-
variant: "secondary",
|
732
1023
|
dialog: {
|
733
1024
|
type: "modal",
|
734
1025
|
title: formatMessage({
|
735
|
-
id: getTranslation("
|
736
|
-
defaultMessage: "Publish Multiple Locales
|
1026
|
+
id: getTranslation(`CMEditViewBulkLocale.${isBulkPublish ? "publish" : "unpublish"}-title`),
|
1027
|
+
defaultMessage: `${isBulkPublish ? "Publish" : "Unpublish"} Multiple Locales`
|
737
1028
|
}),
|
738
1029
|
content: () => {
|
739
1030
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
@@ -752,28 +1043,35 @@ const BulkLocalePublishAction = ({
|
|
752
1043
|
validationErrors,
|
753
1044
|
headers,
|
754
1045
|
rows,
|
755
|
-
localesMetadata
|
1046
|
+
localesMetadata,
|
1047
|
+
action: action ?? "bulk-publish"
|
756
1048
|
}
|
757
1049
|
)
|
758
1050
|
}
|
759
1051
|
);
|
760
1052
|
},
|
761
|
-
footer: () => /* @__PURE__ */ jsxRuntime.jsx(designSystem.
|
1053
|
+
footer: () => /* @__PURE__ */ jsxRuntime.jsx(designSystem.Modal.Footer, { justifyContent: "flex-end", children: /* @__PURE__ */ jsxRuntime.jsx(
|
762
1054
|
designSystem.Button,
|
763
1055
|
{
|
764
1056
|
loading: isDraftRelationsLoading,
|
765
|
-
disabled:
|
1057
|
+
disabled: !hasPermission || localesForAction.length === 0,
|
766
1058
|
variant: "default",
|
767
1059
|
onClick: handleAction,
|
768
1060
|
children: formatMessage({
|
769
|
-
id: "app.utils.publish",
|
770
|
-
defaultMessage: "Publish"
|
1061
|
+
id: isBulkPublish ? "app.utils.publish" : "app.utils.unpublish",
|
1062
|
+
defaultMessage: isBulkPublish ? "Publish" : "Unpublish"
|
771
1063
|
})
|
772
1064
|
}
|
773
1065
|
) })
|
774
1066
|
}
|
775
1067
|
};
|
776
1068
|
};
|
1069
|
+
const BulkLocalePublishAction = (props) => {
|
1070
|
+
return BulkLocaleAction({ action: "bulk-publish", ...props });
|
1071
|
+
};
|
1072
|
+
const BulkLocaleUnpublishAction = (props) => {
|
1073
|
+
return BulkLocaleAction({ action: "bulk-unpublish", ...props });
|
1074
|
+
};
|
777
1075
|
const StyledTrash = styledComponents.styled(icons.Trash)`
|
778
1076
|
path {
|
779
1077
|
fill: currentColor;
|
@@ -830,16 +1128,9 @@ const UnpublishModalAdditionalInfo = () => {
|
|
830
1128
|
}
|
831
1129
|
) });
|
832
1130
|
};
|
833
|
-
const Initializer = ({ setPlugin }) => {
|
834
|
-
const setPluginRef = React__namespace.useRef(setPlugin);
|
835
|
-
React__namespace.useEffect(() => {
|
836
|
-
setPluginRef.current(pluginId);
|
837
|
-
}, []);
|
838
|
-
return null;
|
839
|
-
};
|
840
1131
|
const LocalePicker = () => {
|
841
1132
|
const { formatMessage } = reactIntl.useIntl();
|
842
|
-
const [{ query }, setQuery] = strapiAdmin.useQueryParams();
|
1133
|
+
const [{ query: query2 }, setQuery] = strapiAdmin.useQueryParams();
|
843
1134
|
const { hasI18n, canRead, canCreate } = useI18n();
|
844
1135
|
const { data: locales = [] } = useGetLocalesQuery(void 0, {
|
845
1136
|
skip: !hasI18n
|
@@ -849,25 +1140,25 @@ const LocalePicker = () => {
|
|
849
1140
|
setQuery(
|
850
1141
|
{
|
851
1142
|
page: 1,
|
852
|
-
plugins: { ...
|
1143
|
+
plugins: { ...query2.plugins, i18n: { locale: code } }
|
853
1144
|
},
|
854
1145
|
"push",
|
855
1146
|
replace
|
856
1147
|
);
|
857
1148
|
},
|
858
|
-
[
|
1149
|
+
[query2.plugins, setQuery]
|
859
1150
|
);
|
860
1151
|
React__namespace.useEffect(() => {
|
861
1152
|
if (!Array.isArray(locales) || !hasI18n) {
|
862
1153
|
return;
|
863
1154
|
}
|
864
|
-
const currentDesiredLocale =
|
1155
|
+
const currentDesiredLocale = query2.plugins?.i18n?.locale;
|
865
1156
|
const doesLocaleExist = locales.find((loc) => loc.code === currentDesiredLocale);
|
866
1157
|
const defaultLocale = locales.find((locale) => locale.isDefault);
|
867
1158
|
if (!doesLocaleExist && defaultLocale?.code) {
|
868
1159
|
handleChange(defaultLocale.code, true);
|
869
1160
|
}
|
870
|
-
}, [hasI18n, handleChange, locales,
|
1161
|
+
}, [hasI18n, handleChange, locales, query2.plugins?.i18n?.locale]);
|
871
1162
|
if (!hasI18n || !Array.isArray(locales) || locales.length === 0) {
|
872
1163
|
return null;
|
873
1164
|
}
|
@@ -882,7 +1173,7 @@ const LocalePicker = () => {
|
|
882
1173
|
id: getTranslation("actions.select-locale"),
|
883
1174
|
defaultMessage: "Select locale"
|
884
1175
|
}),
|
885
|
-
value:
|
1176
|
+
value: query2.plugins?.i18n?.locale || locales.find((locale) => locale.isDefault)?.code,
|
886
1177
|
onChange: handleChange,
|
887
1178
|
children: displayedLocales.map((locale) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: locale.code, children: locale.name }, locale.id))
|
888
1179
|
}
|
@@ -1000,54 +1291,13 @@ const LocaleListCell = ({
|
|
1000
1291
|
return locale.name;
|
1001
1292
|
}).toSorted((a, b) => formatter.compare(a, b));
|
1002
1293
|
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
|
-
) }) }),
|
1294
|
+
/* @__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: [
|
1295
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "neutral800", ellipsis: true, marginRight: 2, children: localesForDocument.join(", ") }),
|
1296
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { children: /* @__PURE__ */ jsxRuntime.jsx(icons.CaretDown, { width: "1.2rem", height: "1.2rem" }) })
|
1297
|
+
] }) }) }),
|
1017
1298
|
/* @__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
1299
|
] });
|
1019
1300
|
};
|
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
1301
|
const addColumnToTableHook = ({ displayedHeaders, layout }) => {
|
1052
1302
|
const { options } = layout;
|
1053
1303
|
const isFieldLocalized = doesPluginOptionsHaveI18nLocalized(options) ? options.i18n.localized : false;
|
@@ -1173,9 +1423,6 @@ const localeMiddleware = (ctx) => (next) => (permissions) => {
|
|
1173
1423
|
return next(revisedPermissions);
|
1174
1424
|
};
|
1175
1425
|
const prefixPluginTranslations = (trad, pluginId2) => {
|
1176
|
-
if (!pluginId2) {
|
1177
|
-
throw new TypeError("pluginId can't be empty");
|
1178
|
-
}
|
1179
1426
|
return Object.keys(trad).reduce((acc, current) => {
|
1180
1427
|
acc[`${pluginId2}.${current}`] = trad[current];
|
1181
1428
|
return acc;
|
@@ -1228,8 +1475,6 @@ const index = {
|
|
1228
1475
|
app.addRBACMiddleware([localeMiddleware]);
|
1229
1476
|
app.registerPlugin({
|
1230
1477
|
id: pluginId,
|
1231
|
-
initializer: Initializer,
|
1232
|
-
isReady: false,
|
1233
1478
|
name: pluginId
|
1234
1479
|
});
|
1235
1480
|
},
|
@@ -1247,11 +1492,11 @@ const index = {
|
|
1247
1492
|
},
|
1248
1493
|
id: "internationalization",
|
1249
1494
|
to: "internationalization",
|
1250
|
-
Component: () => Promise.resolve().then(() => require("./SettingsPage-
|
1495
|
+
Component: () => Promise.resolve().then(() => require("./SettingsPage-Bcj7380u.js")).then((mod) => ({ default: mod.ProtectedSettingsPage })),
|
1251
1496
|
permissions: PERMISSIONS.accessMain
|
1252
1497
|
});
|
1253
1498
|
const contentManager = app.getPlugin("content-manager");
|
1254
|
-
contentManager.apis.addDocumentHeaderAction([LocalePickerAction]);
|
1499
|
+
contentManager.apis.addDocumentHeaderAction([LocalePickerAction, FillFromAnotherLocaleAction]);
|
1255
1500
|
contentManager.apis.addDocumentAction((actions) => {
|
1256
1501
|
const indexOfDeleteAction = actions.findIndex((action) => action.type === "delete");
|
1257
1502
|
actions.splice(indexOfDeleteAction, 0, DeleteLocaleAction);
|
@@ -1259,6 +1504,7 @@ const index = {
|
|
1259
1504
|
});
|
1260
1505
|
contentManager.apis.addDocumentAction((actions) => {
|
1261
1506
|
actions.splice(2, 0, BulkLocalePublishAction);
|
1507
|
+
actions.splice(5, 0, BulkLocaleUnpublishAction);
|
1262
1508
|
return actions;
|
1263
1509
|
});
|
1264
1510
|
contentManager.injectComponent("listView", "actions", {
|
@@ -1364,7 +1610,7 @@ const index = {
|
|
1364
1610
|
async registerTrads({ locales }) {
|
1365
1611
|
const importedTrads = await Promise.all(
|
1366
1612
|
locales.map((locale) => {
|
1367
|
-
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-
|
1613
|
+
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`).then(({ default: data }) => {
|
1368
1614
|
return {
|
1369
1615
|
data: prefixPluginTranslations(data, pluginId),
|
1370
1616
|
locale
|
@@ -1388,4 +1634,4 @@ exports.useDeleteLocaleMutation = useDeleteLocaleMutation;
|
|
1388
1634
|
exports.useGetDefaultLocalesQuery = useGetDefaultLocalesQuery;
|
1389
1635
|
exports.useGetLocalesQuery = useGetLocalesQuery;
|
1390
1636
|
exports.useUpdateLocaleMutation = useUpdateLocaleMutation;
|
1391
|
-
//# sourceMappingURL=index-
|
1637
|
+
//# sourceMappingURL=index-BKZbxhpm.js.map
|