@strapi/i18n 0.0.0-experimental.d1602f22dc638a4c3c5084965fd6126fff5e9d4f → 0.0.0-experimental.d325780feab1caf1b9e4423588eb1cc73b74c376

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.
Files changed (126) hide show
  1. package/dist/_chunks/SettingsPage-B-KzAqT3.mjs +554 -0
  2. package/dist/_chunks/SettingsPage-B-KzAqT3.mjs.map +1 -0
  3. package/dist/_chunks/SettingsPage-hyOi94O9.js +573 -0
  4. package/dist/_chunks/SettingsPage-hyOi94O9.js.map +1 -0
  5. package/dist/_chunks/de-BOhNX_-5.js +65 -0
  6. package/dist/_chunks/de-BOhNX_-5.js.map +1 -0
  7. package/dist/_chunks/de-D80IRBP9.mjs +65 -0
  8. package/dist/_chunks/de-D80IRBP9.mjs.map +1 -0
  9. package/dist/_chunks/dk-CJ6Zzz78.mjs +65 -0
  10. package/dist/_chunks/dk-CJ6Zzz78.mjs.map +1 -0
  11. package/dist/_chunks/dk-cjXm0p3m.js +65 -0
  12. package/dist/_chunks/dk-cjXm0p3m.js.map +1 -0
  13. package/dist/_chunks/en-BTyF7WVW.mjs +80 -0
  14. package/dist/_chunks/en-BTyF7WVW.mjs.map +1 -0
  15. package/dist/_chunks/en-UlC0jh2t.js +80 -0
  16. package/dist/_chunks/en-UlC0jh2t.js.map +1 -0
  17. package/dist/_chunks/es-V8WnPN7w.mjs +65 -0
  18. package/dist/_chunks/es-V8WnPN7w.mjs.map +1 -0
  19. package/dist/_chunks/es-hr9b_HLp.js +65 -0
  20. package/dist/_chunks/es-hr9b_HLp.js.map +1 -0
  21. package/dist/_chunks/fr-BFmBbE0H.js +65 -0
  22. package/dist/_chunks/fr-BFmBbE0H.js.map +1 -0
  23. package/dist/_chunks/fr-F94noFiV.mjs +65 -0
  24. package/dist/_chunks/fr-F94noFiV.mjs.map +1 -0
  25. package/dist/_chunks/index-BcYj5jo9.mjs +1589 -0
  26. package/dist/_chunks/index-BcYj5jo9.mjs.map +1 -0
  27. package/dist/_chunks/index-C8NzsAKp.js +1610 -0
  28. package/dist/_chunks/index-C8NzsAKp.js.map +1 -0
  29. package/dist/_chunks/ko-C40pNQ9b.js +64 -0
  30. package/dist/_chunks/ko-C40pNQ9b.js.map +1 -0
  31. package/dist/_chunks/ko-CF-P3Car.mjs +64 -0
  32. package/dist/_chunks/ko-CF-P3Car.mjs.map +1 -0
  33. package/dist/_chunks/pl-Dxr9RUmD.mjs +65 -0
  34. package/dist/_chunks/pl-Dxr9RUmD.mjs.map +1 -0
  35. package/dist/_chunks/pl-JtWBy-JQ.js +65 -0
  36. package/dist/_chunks/pl-JtWBy-JQ.js.map +1 -0
  37. package/dist/_chunks/ru-B-4sVwXN.mjs +67 -0
  38. package/dist/_chunks/ru-B-4sVwXN.mjs.map +1 -0
  39. package/dist/_chunks/ru-COSWt3Nu.js +67 -0
  40. package/dist/_chunks/ru-COSWt3Nu.js.map +1 -0
  41. package/dist/_chunks/tr-BVj1O5ch.js +65 -0
  42. package/dist/_chunks/tr-BVj1O5ch.js.map +1 -0
  43. package/dist/_chunks/tr-Ccu6Yj11.mjs +65 -0
  44. package/dist/_chunks/tr-Ccu6Yj11.mjs.map +1 -0
  45. package/dist/_chunks/zh-BIz395Ms.mjs +65 -0
  46. package/dist/_chunks/zh-BIz395Ms.mjs.map +1 -0
  47. package/dist/_chunks/zh-Hans-Bfo6_TCM.mjs +56 -0
  48. package/dist/_chunks/zh-Hans-Bfo6_TCM.mjs.map +1 -0
  49. package/dist/_chunks/zh-Hans-DIEm_EMC.js +56 -0
  50. package/dist/_chunks/zh-Hans-DIEm_EMC.js.map +1 -0
  51. package/dist/_chunks/zh-wkBPBkhc.js +65 -0
  52. package/dist/_chunks/zh-wkBPBkhc.js.map +1 -0
  53. package/dist/admin/index.js +4 -20
  54. package/dist/admin/index.js.map +1 -1
  55. package/dist/admin/index.mjs +6 -15
  56. package/dist/admin/index.mjs.map +1 -1
  57. package/dist/admin/src/components/CMHeaderActions.d.ts +1 -1
  58. package/dist/admin/src/contentReleasesHooks/releaseDetailsView.d.ts +1 -1
  59. package/dist/server/index.js +3364 -3624
  60. package/dist/server/index.js.map +1 -1
  61. package/dist/server/index.mjs +3379 -3637
  62. package/dist/server/index.mjs.map +1 -1
  63. package/dist/server/src/services/localizations.d.ts +1 -1
  64. package/dist/server/src/services/localizations.d.ts.map +1 -1
  65. package/dist/shared/contracts/content-manager.d.ts +1 -1
  66. package/dist/shared/contracts/shared.d.ts +1 -1
  67. package/package.json +9 -12
  68. package/dist/admin/chunks/SettingsPage-B6ikxVOg.js +0 -820
  69. package/dist/admin/chunks/SettingsPage-B6ikxVOg.js.map +0 -1
  70. package/dist/admin/chunks/SettingsPage-Kg4GAThm.js +0 -797
  71. package/dist/admin/chunks/SettingsPage-Kg4GAThm.js.map +0 -1
  72. package/dist/admin/chunks/de-Cm8mYdaO.js +0 -64
  73. package/dist/admin/chunks/de-Cm8mYdaO.js.map +0 -1
  74. package/dist/admin/chunks/de-nEMWvIiY.js +0 -66
  75. package/dist/admin/chunks/de-nEMWvIiY.js.map +0 -1
  76. package/dist/admin/chunks/dk-BeUFOegB.js +0 -64
  77. package/dist/admin/chunks/dk-BeUFOegB.js.map +0 -1
  78. package/dist/admin/chunks/dk-CYATLPVe.js +0 -66
  79. package/dist/admin/chunks/dk-CYATLPVe.js.map +0 -1
  80. package/dist/admin/chunks/en-CG5cUCbD.js +0 -81
  81. package/dist/admin/chunks/en-CG5cUCbD.js.map +0 -1
  82. package/dist/admin/chunks/en-eWSaCeOb.js +0 -79
  83. package/dist/admin/chunks/en-eWSaCeOb.js.map +0 -1
  84. package/dist/admin/chunks/es-CWsogTGm.js +0 -66
  85. package/dist/admin/chunks/es-CWsogTGm.js.map +0 -1
  86. package/dist/admin/chunks/es-DqF_IdAc.js +0 -64
  87. package/dist/admin/chunks/es-DqF_IdAc.js.map +0 -1
  88. package/dist/admin/chunks/fr-CC7UFcYd.js +0 -66
  89. package/dist/admin/chunks/fr-CC7UFcYd.js.map +0 -1
  90. package/dist/admin/chunks/fr-CyARbZ3c.js +0 -64
  91. package/dist/admin/chunks/fr-CyARbZ3c.js.map +0 -1
  92. package/dist/admin/chunks/index-Dch-2xao.js +0 -2035
  93. package/dist/admin/chunks/index-Dch-2xao.js.map +0 -1
  94. package/dist/admin/chunks/index-DyvbIjH9.js +0 -2006
  95. package/dist/admin/chunks/index-DyvbIjH9.js.map +0 -1
  96. package/dist/admin/chunks/ko-Ax4NSedM.js +0 -63
  97. package/dist/admin/chunks/ko-Ax4NSedM.js.map +0 -1
  98. package/dist/admin/chunks/ko-XwGmfhoq.js +0 -65
  99. package/dist/admin/chunks/ko-XwGmfhoq.js.map +0 -1
  100. package/dist/admin/chunks/pl-B-aqvMqL.js +0 -64
  101. package/dist/admin/chunks/pl-B-aqvMqL.js.map +0 -1
  102. package/dist/admin/chunks/pl-B_vzY_ZB.js +0 -66
  103. package/dist/admin/chunks/pl-B_vzY_ZB.js.map +0 -1
  104. package/dist/admin/chunks/ru-VkPjQ-Sk.js +0 -66
  105. package/dist/admin/chunks/ru-VkPjQ-Sk.js.map +0 -1
  106. package/dist/admin/chunks/ru-WzHcJV1f.js +0 -68
  107. package/dist/admin/chunks/ru-WzHcJV1f.js.map +0 -1
  108. package/dist/admin/chunks/tr-CcWp6u3w.js +0 -66
  109. package/dist/admin/chunks/tr-CcWp6u3w.js.map +0 -1
  110. package/dist/admin/chunks/tr-DcTR88c9.js +0 -64
  111. package/dist/admin/chunks/tr-DcTR88c9.js.map +0 -1
  112. package/dist/admin/chunks/zh-C9So4SGq.js +0 -66
  113. package/dist/admin/chunks/zh-C9So4SGq.js.map +0 -1
  114. package/dist/admin/chunks/zh-Hans-DnU2bhri.js +0 -57
  115. package/dist/admin/chunks/zh-Hans-DnU2bhri.js.map +0 -1
  116. package/dist/admin/chunks/zh-Hans-L3wsRegj.js +0 -55
  117. package/dist/admin/chunks/zh-Hans-L3wsRegj.js.map +0 -1
  118. package/dist/admin/chunks/zh-RZyMiPIs.js +0 -64
  119. package/dist/admin/chunks/zh-RZyMiPIs.js.map +0 -1
  120. package/dist/admin/src/components/tests/CreateLocale.test.d.ts +0 -1
  121. package/dist/admin/src/components/tests/DeleteLocale.test.d.ts +0 -1
  122. package/dist/admin/src/components/tests/EditLocale.test.d.ts +0 -1
  123. package/dist/admin/src/components/tests/LocaleListCell.test.d.ts +0 -1
  124. package/dist/admin/src/pages/tests/SettingsPage.test.d.ts +0 -1
  125. package/dist/admin/tests/server.d.ts +0 -1
  126. package/dist/admin/tests/utils.d.ts +0 -6
@@ -0,0 +1,573 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const React = require("react");
5
+ const strapiAdmin = require("@strapi/admin/strapi-admin");
6
+ const designSystem = require("@strapi/design-system");
7
+ const symbols = require("@strapi/icons/symbols");
8
+ const reactIntl = require("react-intl");
9
+ const icons = require("@strapi/icons");
10
+ const yup = require("yup");
11
+ const index = require("./index-C8NzsAKp.js");
12
+ function _interopNamespace(e) {
13
+ if (e && e.__esModule) return e;
14
+ const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
15
+ if (e) {
16
+ for (const k in e) {
17
+ if (k !== "default") {
18
+ const d = Object.getOwnPropertyDescriptor(e, k);
19
+ Object.defineProperty(n, k, d.get ? d : {
20
+ enumerable: true,
21
+ get: () => e[k]
22
+ });
23
+ }
24
+ }
25
+ }
26
+ n.default = e;
27
+ return Object.freeze(n);
28
+ }
29
+ const React__namespace = /* @__PURE__ */ _interopNamespace(React);
30
+ const yup__namespace = /* @__PURE__ */ _interopNamespace(yup);
31
+ const isBaseQueryError = (error) => {
32
+ return error.name !== void 0;
33
+ };
34
+ const CreateLocale = ({ disabled, variant = "default" }) => {
35
+ const { formatMessage } = reactIntl.useIntl();
36
+ const [visible, setVisible] = React__namespace.useState(false);
37
+ return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Modal.Root, { open: visible, onOpenChange: setVisible, children: [
38
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Modal.Trigger, { children: /* @__PURE__ */ jsxRuntime.jsx(
39
+ designSystem.Button,
40
+ {
41
+ variant,
42
+ disabled,
43
+ startIcon: /* @__PURE__ */ jsxRuntime.jsx(icons.Plus, {}),
44
+ onClick: () => setVisible(true),
45
+ size: "S",
46
+ children: formatMessage({
47
+ id: index.getTranslation("Settings.list.actions.add"),
48
+ defaultMessage: "Add new locale"
49
+ })
50
+ }
51
+ ) }),
52
+ /* @__PURE__ */ jsxRuntime.jsx(CreateModal, { onClose: () => setVisible(false) })
53
+ ] });
54
+ };
55
+ const LOCALE_SCHEMA = yup__namespace.object().shape({
56
+ code: yup__namespace.string().nullable().required({
57
+ id: "Settings.locales.modal.create.code.error",
58
+ defaultMessage: "Please select a locale"
59
+ }),
60
+ name: yup__namespace.string().nullable().max(50, {
61
+ id: "Settings.locales.modal.create.name.error.min",
62
+ defaultMessage: "The locale display name can only be less than 50 characters."
63
+ }).required({
64
+ id: "Settings.locales.modal.create.name.error.required",
65
+ defaultMessage: "Please give the locale a display name"
66
+ }),
67
+ isDefault: yup__namespace.boolean()
68
+ });
69
+ const initialFormValues = {
70
+ code: "",
71
+ name: "",
72
+ isDefault: false
73
+ };
74
+ const CreateModal = ({ onClose }) => {
75
+ const titleId = designSystem.useId();
76
+ const { toggleNotification } = strapiAdmin.useNotification();
77
+ const {
78
+ _unstableFormatAPIError: formatAPIError,
79
+ _unstableFormatValidationErrors: formatValidationErrors
80
+ } = strapiAdmin.useAPIErrorHandler();
81
+ const [createLocale] = index.useCreateLocaleMutation();
82
+ const { formatMessage } = reactIntl.useIntl();
83
+ const refetchPermissions = strapiAdmin.useAuth("CreateModal", (state) => state.refetchPermissions);
84
+ const handleSubmit = async (values, helpers) => {
85
+ try {
86
+ const res = await createLocale(values);
87
+ if ("error" in res) {
88
+ if (isBaseQueryError(res.error) && res.error.name === "ValidationError") {
89
+ helpers.setErrors(formatValidationErrors(res.error));
90
+ } else {
91
+ toggleNotification({ type: "danger", message: formatAPIError(res.error) });
92
+ }
93
+ return;
94
+ }
95
+ toggleNotification({
96
+ type: "success",
97
+ message: formatMessage({
98
+ id: index.getTranslation("Settings.locales.modal.create.success"),
99
+ defaultMessage: "Created locale"
100
+ })
101
+ });
102
+ refetchPermissions();
103
+ onClose();
104
+ } catch (err) {
105
+ toggleNotification({
106
+ type: "danger",
107
+ message: formatMessage({
108
+ id: "notification.error",
109
+ defaultMessage: "An error occurred, please try again"
110
+ })
111
+ });
112
+ }
113
+ };
114
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Modal.Content, { children: /* @__PURE__ */ jsxRuntime.jsxs(
115
+ strapiAdmin.Form,
116
+ {
117
+ method: "POST",
118
+ initialValues: initialFormValues,
119
+ validationSchema: LOCALE_SCHEMA,
120
+ onSubmit: handleSubmit,
121
+ children: [
122
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Modal.Header, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Modal.Title, { children: formatMessage({
123
+ id: index.getTranslation("Settings.list.actions.add"),
124
+ defaultMessage: "Add new locale"
125
+ }) }) }),
126
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Modal.Body, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tabs.Root, { variant: "simple", defaultValue: "basic", children: [
127
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { justifyContent: "space-between", children: [
128
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { tag: "h2", variant: "beta", id: titleId, children: formatMessage({
129
+ id: index.getTranslation("Settings.locales.modal.title"),
130
+ defaultMessage: "Configuration"
131
+ }) }),
132
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tabs.List, { "aria-labelledby": titleId, children: [
133
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tabs.Trigger, { value: "basic", children: formatMessage({
134
+ id: index.getTranslation("Settings.locales.modal.base"),
135
+ defaultMessage: "Basic settings"
136
+ }) }),
137
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tabs.Trigger, { value: "advanced", children: formatMessage({
138
+ id: index.getTranslation("Settings.locales.modal.advanced"),
139
+ defaultMessage: "Advanced settings"
140
+ }) })
141
+ ] })
142
+ ] }),
143
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Divider, {}),
144
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { paddingTop: 7, paddingBottom: 7, children: [
145
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tabs.Content, { value: "basic", children: /* @__PURE__ */ jsxRuntime.jsx(BaseForm, {}) }),
146
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tabs.Content, { value: "advanced", children: /* @__PURE__ */ jsxRuntime.jsx(AdvancedForm, {}) })
147
+ ] })
148
+ ] }) }),
149
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Modal.Footer, { children: [
150
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Modal.Close, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { variant: "tertiary", children: formatMessage({ id: "app.components.Button.cancel", defaultMessage: "Cancel" }) }) }),
151
+ /* @__PURE__ */ jsxRuntime.jsx(SubmitButton, {})
152
+ ] })
153
+ ]
154
+ }
155
+ ) });
156
+ };
157
+ const SubmitButton = () => {
158
+ const { formatMessage } = reactIntl.useIntl();
159
+ const isSubmitting = strapiAdmin.useForm("SubmitButton", (state) => state.isSubmitting);
160
+ const modified = strapiAdmin.useForm("SubmitButton", (state) => state.modified);
161
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { type: "submit", startIcon: /* @__PURE__ */ jsxRuntime.jsx(icons.Check, {}), disabled: isSubmitting || !modified, children: formatMessage({ id: "global.save", defaultMessage: "Save" }) });
162
+ };
163
+ const BaseForm = ({ mode = "create" }) => {
164
+ const { formatMessage } = reactIntl.useIntl();
165
+ const { toggleNotification } = strapiAdmin.useNotification();
166
+ const { _unstableFormatAPIError: formatAPIError } = strapiAdmin.useAPIErrorHandler();
167
+ const { data: defaultLocales, error } = index.useGetDefaultLocalesQuery();
168
+ React__namespace.useEffect(() => {
169
+ if (error) {
170
+ toggleNotification({
171
+ type: "danger",
172
+ message: formatAPIError(error)
173
+ });
174
+ }
175
+ }, [error, formatAPIError, toggleNotification]);
176
+ if (!Array.isArray(defaultLocales)) {
177
+ return null;
178
+ }
179
+ const options = defaultLocales.map((locale) => ({
180
+ label: locale.name,
181
+ value: locale.code
182
+ }));
183
+ const translatedForm = [
184
+ {
185
+ disabled: mode !== "create",
186
+ label: {
187
+ id: index.getTranslation("Settings.locales.modal.create.code.label"),
188
+ defaultMessage: "Locales"
189
+ },
190
+ name: "code",
191
+ options,
192
+ placeholder: {
193
+ id: "components.placeholder.select",
194
+ defaultMessage: "Select"
195
+ },
196
+ required: true,
197
+ size: 6,
198
+ type: "enumeration"
199
+ },
200
+ {
201
+ hint: {
202
+ id: index.getTranslation("Settings.locales.modal.create.name.label.description"),
203
+ defaultMessage: "Locale will be displayed under that name in the administration panel"
204
+ },
205
+ label: {
206
+ id: index.getTranslation("Settings.locales.modal.create.name.label"),
207
+ defaultMessage: "Locale display name"
208
+ },
209
+ name: "name",
210
+ required: true,
211
+ size: 6,
212
+ type: "string"
213
+ }
214
+ ].map((field) => ({
215
+ ...field,
216
+ hint: field.hint ? formatMessage(field.hint) : void 0,
217
+ label: formatMessage(field.label),
218
+ placeholder: field.placeholder ? formatMessage(field.placeholder) : void 0
219
+ }));
220
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Root, { gap: 4, children: translatedForm.map(({ size, ...field }) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { col: size, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxRuntime.jsx(FormRenderer, { ...field }) }, field.name)) });
221
+ };
222
+ const AdvancedForm = ({ isDefaultLocale }) => {
223
+ const { formatMessage } = reactIntl.useIntl();
224
+ const form = [
225
+ {
226
+ disabled: isDefaultLocale,
227
+ hint: {
228
+ id: index.getTranslation("Settings.locales.modal.advanced.setAsDefault.hint"),
229
+ defaultMessage: "One default locale is required, change it by selecting another one"
230
+ },
231
+ label: {
232
+ id: index.getTranslation("Settings.locales.modal.advanced.setAsDefault"),
233
+ defaultMessage: "Set as default locale"
234
+ },
235
+ name: "isDefault",
236
+ size: 6,
237
+ type: "boolean"
238
+ }
239
+ ].map((field) => ({
240
+ ...field,
241
+ hint: field.hint ? formatMessage(field.hint) : void 0,
242
+ label: formatMessage(field.label)
243
+ }));
244
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Root, { gap: 4, children: form.map(({ size, ...field }) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { col: size, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxRuntime.jsx(FormRenderer, { ...field }) }, field.name)) });
245
+ };
246
+ const FormRenderer = (field) => {
247
+ switch (field.type) {
248
+ case "enumeration":
249
+ return /* @__PURE__ */ jsxRuntime.jsx(EnumerationInput, { ...field });
250
+ default:
251
+ return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.InputRenderer, { ...field });
252
+ }
253
+ };
254
+ const EnumerationInput = ({
255
+ disabled,
256
+ hint,
257
+ label,
258
+ name,
259
+ options,
260
+ placeholder,
261
+ required
262
+ }) => {
263
+ const { value, error, onChange } = strapiAdmin.useField(name);
264
+ const { data: defaultLocales = [] } = index.useGetDefaultLocalesQuery();
265
+ const handleChange = (value2) => {
266
+ if (Array.isArray(defaultLocales)) {
267
+ const locale = defaultLocales.find((locale2) => locale2.code === value2);
268
+ onChange(name, value2);
269
+ onChange("name", locale.name);
270
+ } else {
271
+ onChange(name, value2);
272
+ }
273
+ };
274
+ return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Field.Root, { error, hint, name, required, children: [
275
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: label }),
276
+ /* @__PURE__ */ jsxRuntime.jsx(
277
+ designSystem.SingleSelect,
278
+ {
279
+ disabled,
280
+ onChange: handleChange,
281
+ placeholder,
282
+ value,
283
+ children: options.map((option) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: option.value, children: option.label }, option.value))
284
+ }
285
+ ),
286
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Error, {}),
287
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Hint, {})
288
+ ] });
289
+ };
290
+ const DeleteLocale = ({ id, name }) => {
291
+ const { formatMessage } = reactIntl.useIntl();
292
+ const { toggleNotification } = strapiAdmin.useNotification();
293
+ const { _unstableFormatAPIError: formatAPIError } = strapiAdmin.useAPIErrorHandler();
294
+ const [visible, setVisible] = React__namespace.useState(false);
295
+ const [deleteLocale] = index.useDeleteLocaleMutation();
296
+ const handleConfirm = async () => {
297
+ try {
298
+ const res = await deleteLocale(id);
299
+ if ("error" in res) {
300
+ toggleNotification({ type: "danger", message: formatAPIError(res.error) });
301
+ return;
302
+ }
303
+ toggleNotification({
304
+ type: "success",
305
+ message: formatMessage({
306
+ id: index.getTranslation("Settings.locales.modal.delete.success"),
307
+ defaultMessage: "Deleted locale"
308
+ })
309
+ });
310
+ setVisible(false);
311
+ } catch (err) {
312
+ toggleNotification({
313
+ type: "danger",
314
+ message: formatMessage({
315
+ id: "notification.error",
316
+ defaultMessage: "An error occurred, please try again"
317
+ })
318
+ });
319
+ }
320
+ };
321
+ return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Dialog.Root, { open: visible, onOpenChange: setVisible, children: [
322
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Dialog.Trigger, { children: /* @__PURE__ */ jsxRuntime.jsx(
323
+ designSystem.IconButton,
324
+ {
325
+ onClick: () => setVisible(true),
326
+ label: formatMessage(
327
+ {
328
+ id: index.getTranslation("Settings.list.actions.delete"),
329
+ defaultMessage: "Delete {name} locale"
330
+ },
331
+ {
332
+ name
333
+ }
334
+ ),
335
+ variant: "ghost",
336
+ children: /* @__PURE__ */ jsxRuntime.jsx(icons.Trash, {})
337
+ }
338
+ ) }),
339
+ /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.ConfirmDialog, { onConfirm: handleConfirm })
340
+ ] });
341
+ };
342
+ const EditLocale = (props) => {
343
+ const { formatMessage } = reactIntl.useIntl();
344
+ const [visible, setVisible] = React__namespace.useState(false);
345
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
346
+ /* @__PURE__ */ jsxRuntime.jsx(
347
+ designSystem.IconButton,
348
+ {
349
+ onClick: () => setVisible(true),
350
+ label: formatMessage(
351
+ {
352
+ id: index.getTranslation("Settings.list.actions.edit"),
353
+ defaultMessage: "Edit {name} locale"
354
+ },
355
+ {
356
+ name: props.name
357
+ }
358
+ ),
359
+ variant: "ghost",
360
+ children: /* @__PURE__ */ jsxRuntime.jsx(icons.Pencil, {})
361
+ }
362
+ ),
363
+ /* @__PURE__ */ jsxRuntime.jsx(EditModal, { ...props, open: visible, onOpenChange: setVisible })
364
+ ] });
365
+ };
366
+ const EditModal = ({ id, code, isDefault, name, open, onOpenChange }) => {
367
+ const { toggleNotification } = strapiAdmin.useNotification();
368
+ const {
369
+ _unstableFormatAPIError: formatAPIError,
370
+ _unstableFormatValidationErrors: formatValidationErrors
371
+ } = strapiAdmin.useAPIErrorHandler();
372
+ const refetchPermissions = strapiAdmin.useAuth("EditModal", (state) => state.refetchPermissions);
373
+ const { formatMessage } = reactIntl.useIntl();
374
+ const titleId = designSystem.useId();
375
+ const [updateLocale] = index.useUpdateLocaleMutation();
376
+ const handleSubmit = async ({ code: _code, ...data }, helpers) => {
377
+ try {
378
+ const res = await updateLocale({
379
+ id,
380
+ ...data
381
+ });
382
+ if ("error" in res) {
383
+ if (isBaseQueryError(res.error) && res.error.name === "ValidationError") {
384
+ helpers.setErrors(formatValidationErrors(res.error));
385
+ } else {
386
+ toggleNotification({ type: "danger", message: formatAPIError(res.error) });
387
+ }
388
+ return;
389
+ }
390
+ toggleNotification({
391
+ type: "success",
392
+ message: formatMessage({
393
+ id: index.getTranslation("Settings.locales.modal.edit.success"),
394
+ defaultMessage: "Updated locale"
395
+ })
396
+ });
397
+ refetchPermissions();
398
+ onOpenChange(false);
399
+ } catch (err) {
400
+ toggleNotification({
401
+ type: "danger",
402
+ message: formatMessage({
403
+ id: "notification.error",
404
+ defaultMessage: "An error occurred, please try again"
405
+ })
406
+ });
407
+ }
408
+ };
409
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Modal.Root, { open, onOpenChange, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Modal.Content, { children: /* @__PURE__ */ jsxRuntime.jsxs(
410
+ strapiAdmin.Form,
411
+ {
412
+ method: "PUT",
413
+ onSubmit: handleSubmit,
414
+ initialValues: {
415
+ code,
416
+ name,
417
+ isDefault
418
+ },
419
+ validationSchema: LOCALE_SCHEMA,
420
+ children: [
421
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Modal.Header, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Modal.Title, { children: formatMessage(
422
+ {
423
+ id: index.getTranslation("Settings.list.actions.edit"),
424
+ defaultMessage: "Edit a locale"
425
+ },
426
+ {
427
+ name
428
+ }
429
+ ) }) }),
430
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Modal.Body, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tabs.Root, { variant: "simple", defaultValue: "basic", children: [
431
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { justifyContent: "space-between", children: [
432
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { tag: "h2", variant: "beta", id: titleId, children: formatMessage({
433
+ id: index.getTranslation("Settings.locales.modal.title"),
434
+ defaultMessage: "Configuration"
435
+ }) }),
436
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tabs.List, { "aria-labelledby": titleId, children: [
437
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tabs.Trigger, { value: "basic", children: formatMessage({
438
+ id: index.getTranslation("Settings.locales.modal.base"),
439
+ defaultMessage: "Basic settings"
440
+ }) }),
441
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tabs.Trigger, { value: "advanced", children: formatMessage({
442
+ id: index.getTranslation("Settings.locales.modal.advanced"),
443
+ defaultMessage: "Advanced settings"
444
+ }) })
445
+ ] })
446
+ ] }),
447
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Divider, {}),
448
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { paddingTop: 7, paddingBottom: 7, children: [
449
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tabs.Content, { value: "basic", children: /* @__PURE__ */ jsxRuntime.jsx(BaseForm, { mode: "edit" }) }),
450
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tabs.Content, { value: "advanced", children: /* @__PURE__ */ jsxRuntime.jsx(AdvancedForm, { isDefaultLocale: isDefault }) })
451
+ ] })
452
+ ] }) }),
453
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Modal.Footer, { children: [
454
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Modal.Close, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { variant: "tertiary", children: formatMessage({ id: "app.components.Button.cancel", defaultMessage: "Cancel" }) }) }),
455
+ /* @__PURE__ */ jsxRuntime.jsx(SubmitButton, {})
456
+ ] })
457
+ ]
458
+ }
459
+ ) }) });
460
+ };
461
+ const LocaleTable = ({ locales = [], canDelete, canUpdate }) => {
462
+ const [editLocaleId, setEditLocaleId] = React__namespace.useState();
463
+ const { formatMessage } = reactIntl.useIntl();
464
+ const handleClick = (localeId) => () => {
465
+ if (canUpdate) {
466
+ setEditLocaleId(localeId);
467
+ }
468
+ };
469
+ return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Table, { colCount: 4, rowCount: locales.length + 1, children: [
470
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Thead, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tr, { children: [
471
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Th, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", textColor: "neutral600", children: formatMessage({
472
+ id: index.getTranslation("Settings.locales.row.id"),
473
+ defaultMessage: "ID"
474
+ }) }) }),
475
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Th, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", textColor: "neutral600", children: formatMessage({
476
+ id: index.getTranslation("Settings.locales.row.displayName"),
477
+ defaultMessage: "Display name"
478
+ }) }) }),
479
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Th, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", textColor: "neutral600", children: formatMessage({
480
+ id: index.getTranslation("Settings.locales.row.default-locale"),
481
+ defaultMessage: "Default locale"
482
+ }) }) }),
483
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Th, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.VisuallyHidden, { children: "Actions" }) })
484
+ ] }) }),
485
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tbody, { children: locales.map((locale) => /* @__PURE__ */ jsxRuntime.jsxs(React__namespace.Fragment, { children: [
486
+ /* @__PURE__ */ jsxRuntime.jsxs(
487
+ designSystem.Tr,
488
+ {
489
+ onClick: handleClick(locale.id),
490
+ style: { cursor: canUpdate ? "pointer" : "default" },
491
+ children: [
492
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "neutral800", children: locale.id }) }),
493
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "neutral800", children: locale.name }) }),
494
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "neutral800", children: locale.isDefault ? formatMessage({
495
+ id: index.getTranslation("Settings.locales.default"),
496
+ defaultMessage: "Default"
497
+ }) : null }) }),
498
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 1, justifyContent: "flex-end", onClick: (e) => e.stopPropagation(), children: [
499
+ canUpdate && /* @__PURE__ */ jsxRuntime.jsx(EditLocale, { ...locale }),
500
+ canDelete && !locale.isDefault && /* @__PURE__ */ jsxRuntime.jsx(DeleteLocale, { ...locale })
501
+ ] }) })
502
+ ]
503
+ }
504
+ ),
505
+ /* @__PURE__ */ jsxRuntime.jsx(
506
+ EditModal,
507
+ {
508
+ ...locale,
509
+ onOpenChange: () => setEditLocaleId(void 0),
510
+ open: editLocaleId === locale.id
511
+ }
512
+ )
513
+ ] }, locale.id)) })
514
+ ] });
515
+ };
516
+ const SettingsPage = () => {
517
+ const { formatMessage } = reactIntl.useIntl();
518
+ const { toggleNotification } = strapiAdmin.useNotification();
519
+ const { _unstableFormatAPIError: formatAPIError } = strapiAdmin.useAPIErrorHandler();
520
+ const { data: locales, isLoading: isLoadingLocales, error } = index.useGetLocalesQuery();
521
+ const {
522
+ isLoading: isLoadingRBAC,
523
+ allowedActions: { canUpdate, canCreate, canDelete }
524
+ } = strapiAdmin.useRBAC(index.PERMISSIONS);
525
+ React__namespace.useEffect(() => {
526
+ if (error) {
527
+ toggleNotification({
528
+ type: "danger",
529
+ message: formatAPIError(error)
530
+ });
531
+ }
532
+ }, [error, formatAPIError, toggleNotification]);
533
+ const isLoading = isLoadingLocales || isLoadingRBAC;
534
+ if (isLoading) {
535
+ return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Loading, {});
536
+ }
537
+ if (error || !Array.isArray(locales)) {
538
+ return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Error, {});
539
+ }
540
+ return /* @__PURE__ */ jsxRuntime.jsxs(strapiAdmin.Page.Main, { tabIndex: -1, children: [
541
+ /* @__PURE__ */ jsxRuntime.jsx(
542
+ strapiAdmin.Layouts.Header,
543
+ {
544
+ primaryAction: /* @__PURE__ */ jsxRuntime.jsx(CreateLocale, { disabled: !canCreate }),
545
+ title: formatMessage({
546
+ id: index.getTranslation("plugin.name"),
547
+ defaultMessage: "Internationalization"
548
+ }),
549
+ subtitle: formatMessage({
550
+ id: index.getTranslation("Settings.list.description"),
551
+ defaultMessage: "Configure the settings"
552
+ })
553
+ }
554
+ ),
555
+ /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Layouts.Content, { children: locales.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(LocaleTable, { locales, canDelete, canUpdate }) : /* @__PURE__ */ jsxRuntime.jsx(
556
+ designSystem.EmptyStateLayout,
557
+ {
558
+ icon: /* @__PURE__ */ jsxRuntime.jsx(symbols.EmptyDocuments, { width: void 0, height: void 0 }),
559
+ content: formatMessage({
560
+ id: index.getTranslation("Settings.list.empty.title"),
561
+ defaultMessage: "There are no locales"
562
+ }),
563
+ action: /* @__PURE__ */ jsxRuntime.jsx(CreateLocale, { disabled: !canCreate, variant: "secondary" })
564
+ }
565
+ ) })
566
+ ] });
567
+ };
568
+ const ProtectedSettingsPage = () => {
569
+ return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Protect, { permissions: index.PERMISSIONS.read, children: /* @__PURE__ */ jsxRuntime.jsx(SettingsPage, {}) });
570
+ };
571
+ exports.ProtectedSettingsPage = ProtectedSettingsPage;
572
+ exports.SettingsPage = SettingsPage;
573
+ //# sourceMappingURL=SettingsPage-hyOi94O9.js.map