@strapi/i18n 5.9.0 → 5.10.1

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/admin/chunks/SettingsPage-B6ikxVOg.js +820 -0
  2. package/dist/admin/chunks/SettingsPage-B6ikxVOg.js.map +1 -0
  3. package/dist/admin/chunks/SettingsPage-DydtYvMJ.mjs +797 -0
  4. package/dist/admin/chunks/SettingsPage-DydtYvMJ.mjs.map +1 -0
  5. package/dist/admin/chunks/de-Cm8mYdaO.mjs +64 -0
  6. package/dist/admin/chunks/de-Cm8mYdaO.mjs.map +1 -0
  7. package/dist/admin/chunks/de-nEMWvIiY.js +66 -0
  8. package/dist/admin/chunks/de-nEMWvIiY.js.map +1 -0
  9. package/dist/admin/chunks/dk-BeUFOegB.mjs +64 -0
  10. package/dist/admin/chunks/dk-BeUFOegB.mjs.map +1 -0
  11. package/dist/admin/chunks/dk-CYATLPVe.js +66 -0
  12. package/dist/admin/chunks/dk-CYATLPVe.js.map +1 -0
  13. package/dist/admin/chunks/en-CG5cUCbD.js +81 -0
  14. package/dist/admin/chunks/en-CG5cUCbD.js.map +1 -0
  15. package/dist/admin/chunks/en-eWSaCeOb.mjs +79 -0
  16. package/dist/admin/chunks/en-eWSaCeOb.mjs.map +1 -0
  17. package/dist/admin/chunks/es-CWsogTGm.js +66 -0
  18. package/dist/admin/chunks/es-CWsogTGm.js.map +1 -0
  19. package/dist/admin/chunks/es-DqF_IdAc.mjs +64 -0
  20. package/dist/admin/chunks/es-DqF_IdAc.mjs.map +1 -0
  21. package/dist/admin/chunks/fr-CC7UFcYd.js +66 -0
  22. package/dist/admin/chunks/fr-CC7UFcYd.js.map +1 -0
  23. package/dist/admin/chunks/fr-CyARbZ3c.mjs +64 -0
  24. package/dist/admin/chunks/fr-CyARbZ3c.mjs.map +1 -0
  25. package/dist/admin/chunks/index-Dch-2xao.js +2035 -0
  26. package/dist/admin/chunks/index-Dch-2xao.js.map +1 -0
  27. package/dist/admin/chunks/index-k3BHSNs0.mjs +2006 -0
  28. package/dist/admin/chunks/index-k3BHSNs0.mjs.map +1 -0
  29. package/dist/admin/chunks/ko-Ax4NSedM.mjs +63 -0
  30. package/dist/admin/chunks/ko-Ax4NSedM.mjs.map +1 -0
  31. package/dist/admin/chunks/ko-XwGmfhoq.js +65 -0
  32. package/dist/admin/chunks/ko-XwGmfhoq.js.map +1 -0
  33. package/dist/admin/chunks/pl-B-aqvMqL.mjs +64 -0
  34. package/dist/admin/chunks/pl-B-aqvMqL.mjs.map +1 -0
  35. package/dist/admin/chunks/pl-B_vzY_ZB.js +66 -0
  36. package/dist/admin/chunks/pl-B_vzY_ZB.js.map +1 -0
  37. package/dist/admin/chunks/ru-VkPjQ-Sk.mjs +66 -0
  38. package/dist/admin/chunks/ru-VkPjQ-Sk.mjs.map +1 -0
  39. package/dist/admin/chunks/ru-WzHcJV1f.js +68 -0
  40. package/dist/admin/chunks/ru-WzHcJV1f.js.map +1 -0
  41. package/dist/admin/chunks/tr-CcWp6u3w.js +66 -0
  42. package/dist/admin/chunks/tr-CcWp6u3w.js.map +1 -0
  43. package/dist/admin/chunks/tr-DcTR88c9.mjs +64 -0
  44. package/dist/admin/chunks/tr-DcTR88c9.mjs.map +1 -0
  45. package/dist/admin/chunks/zh-C9So4SGq.js +66 -0
  46. package/dist/admin/chunks/zh-C9So4SGq.js.map +1 -0
  47. package/dist/admin/chunks/zh-Hans-DnU2bhri.js +57 -0
  48. package/dist/admin/chunks/zh-Hans-DnU2bhri.js.map +1 -0
  49. package/dist/admin/chunks/zh-Hans-L3wsRegj.mjs +55 -0
  50. package/dist/admin/chunks/zh-Hans-L3wsRegj.mjs.map +1 -0
  51. package/dist/admin/chunks/zh-RZyMiPIs.mjs +64 -0
  52. package/dist/admin/chunks/zh-RZyMiPIs.mjs.map +1 -0
  53. package/dist/admin/index.js +20 -4
  54. package/dist/admin/index.js.map +1 -1
  55. package/dist/admin/index.mjs +15 -6
  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/components/tests/CreateLocale.test.d.ts +1 -0
  59. package/dist/admin/src/components/tests/DeleteLocale.test.d.ts +1 -0
  60. package/dist/admin/src/components/tests/EditLocale.test.d.ts +1 -0
  61. package/dist/admin/src/components/tests/LocaleListCell.test.d.ts +1 -0
  62. package/dist/admin/src/contentReleasesHooks/releaseDetailsView.d.ts +1 -1
  63. package/dist/admin/src/pages/tests/SettingsPage.test.d.ts +1 -0
  64. package/dist/admin/tests/server.d.ts +1 -0
  65. package/dist/admin/tests/utils.d.ts +6 -0
  66. package/dist/server/index.js +3650 -3390
  67. package/dist/server/index.js.map +1 -1
  68. package/dist/server/index.mjs +3632 -3374
  69. package/dist/server/index.mjs.map +1 -1
  70. package/dist/server/src/services/localizations.d.ts +1 -1
  71. package/dist/server/src/services/localizations.d.ts.map +1 -1
  72. package/dist/shared/contracts/content-manager.d.ts +1 -1
  73. package/dist/shared/contracts/shared.d.ts +1 -1
  74. package/package.json +14 -11
  75. package/dist/_chunks/SettingsPage-B-KzAqT3.mjs +0 -554
  76. package/dist/_chunks/SettingsPage-B-KzAqT3.mjs.map +0 -1
  77. package/dist/_chunks/SettingsPage-hyOi94O9.js +0 -573
  78. package/dist/_chunks/SettingsPage-hyOi94O9.js.map +0 -1
  79. package/dist/_chunks/de-BOhNX_-5.js +0 -65
  80. package/dist/_chunks/de-BOhNX_-5.js.map +0 -1
  81. package/dist/_chunks/de-D80IRBP9.mjs +0 -65
  82. package/dist/_chunks/de-D80IRBP9.mjs.map +0 -1
  83. package/dist/_chunks/dk-CJ6Zzz78.mjs +0 -65
  84. package/dist/_chunks/dk-CJ6Zzz78.mjs.map +0 -1
  85. package/dist/_chunks/dk-cjXm0p3m.js +0 -65
  86. package/dist/_chunks/dk-cjXm0p3m.js.map +0 -1
  87. package/dist/_chunks/en-BTyF7WVW.mjs +0 -80
  88. package/dist/_chunks/en-BTyF7WVW.mjs.map +0 -1
  89. package/dist/_chunks/en-UlC0jh2t.js +0 -80
  90. package/dist/_chunks/en-UlC0jh2t.js.map +0 -1
  91. package/dist/_chunks/es-V8WnPN7w.mjs +0 -65
  92. package/dist/_chunks/es-V8WnPN7w.mjs.map +0 -1
  93. package/dist/_chunks/es-hr9b_HLp.js +0 -65
  94. package/dist/_chunks/es-hr9b_HLp.js.map +0 -1
  95. package/dist/_chunks/fr-BFmBbE0H.js +0 -65
  96. package/dist/_chunks/fr-BFmBbE0H.js.map +0 -1
  97. package/dist/_chunks/fr-F94noFiV.mjs +0 -65
  98. package/dist/_chunks/fr-F94noFiV.mjs.map +0 -1
  99. package/dist/_chunks/index-BcYj5jo9.mjs +0 -1589
  100. package/dist/_chunks/index-BcYj5jo9.mjs.map +0 -1
  101. package/dist/_chunks/index-C8NzsAKp.js +0 -1610
  102. package/dist/_chunks/index-C8NzsAKp.js.map +0 -1
  103. package/dist/_chunks/ko-C40pNQ9b.js +0 -64
  104. package/dist/_chunks/ko-C40pNQ9b.js.map +0 -1
  105. package/dist/_chunks/ko-CF-P3Car.mjs +0 -64
  106. package/dist/_chunks/ko-CF-P3Car.mjs.map +0 -1
  107. package/dist/_chunks/pl-Dxr9RUmD.mjs +0 -65
  108. package/dist/_chunks/pl-Dxr9RUmD.mjs.map +0 -1
  109. package/dist/_chunks/pl-JtWBy-JQ.js +0 -65
  110. package/dist/_chunks/pl-JtWBy-JQ.js.map +0 -1
  111. package/dist/_chunks/ru-B-4sVwXN.mjs +0 -67
  112. package/dist/_chunks/ru-B-4sVwXN.mjs.map +0 -1
  113. package/dist/_chunks/ru-COSWt3Nu.js +0 -67
  114. package/dist/_chunks/ru-COSWt3Nu.js.map +0 -1
  115. package/dist/_chunks/tr-BVj1O5ch.js +0 -65
  116. package/dist/_chunks/tr-BVj1O5ch.js.map +0 -1
  117. package/dist/_chunks/tr-Ccu6Yj11.mjs +0 -65
  118. package/dist/_chunks/tr-Ccu6Yj11.mjs.map +0 -1
  119. package/dist/_chunks/zh-BIz395Ms.mjs +0 -65
  120. package/dist/_chunks/zh-BIz395Ms.mjs.map +0 -1
  121. package/dist/_chunks/zh-Hans-Bfo6_TCM.mjs +0 -56
  122. package/dist/_chunks/zh-Hans-Bfo6_TCM.mjs.map +0 -1
  123. package/dist/_chunks/zh-Hans-DIEm_EMC.js +0 -56
  124. package/dist/_chunks/zh-Hans-DIEm_EMC.js.map +0 -1
  125. package/dist/_chunks/zh-wkBPBkhc.js +0 -65
  126. package/dist/_chunks/zh-wkBPBkhc.js.map +0 -1
@@ -0,0 +1,820 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var React = require('react');
5
+ var strapiAdmin = require('@strapi/admin/strapi-admin');
6
+ var designSystem = require('@strapi/design-system');
7
+ var symbols = require('@strapi/icons/symbols');
8
+ var reactIntl = require('react-intl');
9
+ var icons = require('@strapi/icons');
10
+ var yup = require('yup');
11
+ var index = require('./index-Dch-2xao.js');
12
+ require('lodash/get');
13
+ require('styled-components');
14
+ require('@reduxjs/toolkit/query');
15
+ require('@strapi/content-manager/strapi-admin');
16
+ require('react-router-dom');
17
+ require('qs');
18
+ require('lodash/omit');
19
+
20
+ function _interopNamespaceDefault(e) {
21
+ var n = Object.create(null);
22
+ if (e) {
23
+ Object.keys(e).forEach(function (k) {
24
+ if (k !== 'default') {
25
+ var d = Object.getOwnPropertyDescriptor(e, k);
26
+ Object.defineProperty(n, k, d.get ? d : {
27
+ enumerable: true,
28
+ get: function () { return e[k]; }
29
+ });
30
+ }
31
+ });
32
+ }
33
+ n.default = e;
34
+ return Object.freeze(n);
35
+ }
36
+
37
+ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
38
+ var yup__namespace = /*#__PURE__*/_interopNamespaceDefault(yup);
39
+
40
+ const isBaseQueryError = (error)=>{
41
+ return error.name !== undefined;
42
+ };
43
+
44
+ const CreateLocale = ({ disabled, variant = 'default' })=>{
45
+ const { formatMessage } = reactIntl.useIntl();
46
+ const [visible, setVisible] = React__namespace.useState(false);
47
+ return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Modal.Root, {
48
+ open: visible,
49
+ onOpenChange: setVisible,
50
+ children: [
51
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Trigger, {
52
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
53
+ variant: variant,
54
+ disabled: disabled,
55
+ startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Plus, {}),
56
+ onClick: ()=>setVisible(true),
57
+ size: "S",
58
+ children: formatMessage({
59
+ id: index.getTranslation('Settings.list.actions.add'),
60
+ defaultMessage: 'Add new locale'
61
+ })
62
+ })
63
+ }),
64
+ /*#__PURE__*/ jsxRuntime.jsx(CreateModal, {
65
+ onClose: ()=>setVisible(false)
66
+ })
67
+ ]
68
+ });
69
+ };
70
+ /* -------------------------------------------------------------------------------------------------
71
+ * CreateModal
72
+ * -----------------------------------------------------------------------------------------------*/ const LOCALE_SCHEMA = yup__namespace.object().shape({
73
+ code: yup__namespace.string().nullable().required({
74
+ id: 'Settings.locales.modal.create.code.error',
75
+ defaultMessage: 'Please select a locale'
76
+ }),
77
+ name: yup__namespace.string().nullable().max(50, {
78
+ id: 'Settings.locales.modal.create.name.error.min',
79
+ defaultMessage: 'The locale display name can only be less than 50 characters.'
80
+ }).required({
81
+ id: 'Settings.locales.modal.create.name.error.required',
82
+ defaultMessage: 'Please give the locale a display name'
83
+ }),
84
+ isDefault: yup__namespace.boolean()
85
+ });
86
+ const initialFormValues = {
87
+ code: '',
88
+ name: '',
89
+ isDefault: false
90
+ };
91
+ const CreateModal = ({ onClose })=>{
92
+ const titleId = designSystem.useId();
93
+ const { toggleNotification } = strapiAdmin.useNotification();
94
+ const { _unstableFormatAPIError: formatAPIError, _unstableFormatValidationErrors: formatValidationErrors } = strapiAdmin.useAPIErrorHandler();
95
+ const [createLocale] = index.useCreateLocaleMutation();
96
+ const { formatMessage } = reactIntl.useIntl();
97
+ const refetchPermissions = strapiAdmin.useAuth('CreateModal', (state)=>state.refetchPermissions);
98
+ const handleSubmit = async (values, helpers)=>{
99
+ try {
100
+ const res = await createLocale(values);
101
+ if ('error' in res) {
102
+ if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
103
+ helpers.setErrors(formatValidationErrors(res.error));
104
+ } else {
105
+ toggleNotification({
106
+ type: 'danger',
107
+ message: formatAPIError(res.error)
108
+ });
109
+ }
110
+ return;
111
+ }
112
+ toggleNotification({
113
+ type: 'success',
114
+ message: formatMessage({
115
+ id: index.getTranslation('Settings.locales.modal.create.success'),
116
+ defaultMessage: 'Created locale'
117
+ })
118
+ });
119
+ refetchPermissions();
120
+ onClose();
121
+ } catch (err) {
122
+ toggleNotification({
123
+ type: 'danger',
124
+ message: formatMessage({
125
+ id: 'notification.error',
126
+ defaultMessage: 'An error occurred, please try again'
127
+ })
128
+ });
129
+ }
130
+ };
131
+ return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Content, {
132
+ children: /*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.Form, {
133
+ method: "POST",
134
+ initialValues: initialFormValues,
135
+ validationSchema: LOCALE_SCHEMA,
136
+ onSubmit: handleSubmit,
137
+ children: [
138
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Header, {
139
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Title, {
140
+ children: formatMessage({
141
+ id: index.getTranslation('Settings.list.actions.add'),
142
+ defaultMessage: 'Add new locale'
143
+ })
144
+ })
145
+ }),
146
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Body, {
147
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Tabs.Root, {
148
+ variant: "simple",
149
+ defaultValue: "basic",
150
+ children: [
151
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
152
+ justifyContent: "space-between",
153
+ children: [
154
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
155
+ tag: "h2",
156
+ variant: "beta",
157
+ id: titleId,
158
+ children: formatMessage({
159
+ id: index.getTranslation('Settings.locales.modal.title'),
160
+ defaultMessage: 'Configuration'
161
+ })
162
+ }),
163
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Tabs.List, {
164
+ "aria-labelledby": titleId,
165
+ children: [
166
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tabs.Trigger, {
167
+ value: "basic",
168
+ children: formatMessage({
169
+ id: index.getTranslation('Settings.locales.modal.base'),
170
+ defaultMessage: 'Basic settings'
171
+ })
172
+ }),
173
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tabs.Trigger, {
174
+ value: "advanced",
175
+ children: formatMessage({
176
+ id: index.getTranslation('Settings.locales.modal.advanced'),
177
+ defaultMessage: 'Advanced settings'
178
+ })
179
+ })
180
+ ]
181
+ })
182
+ ]
183
+ }),
184
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Divider, {}),
185
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Box, {
186
+ paddingTop: 7,
187
+ paddingBottom: 7,
188
+ children: [
189
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tabs.Content, {
190
+ value: "basic",
191
+ children: /*#__PURE__*/ jsxRuntime.jsx(BaseForm, {})
192
+ }),
193
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tabs.Content, {
194
+ value: "advanced",
195
+ children: /*#__PURE__*/ jsxRuntime.jsx(AdvancedForm, {})
196
+ })
197
+ ]
198
+ })
199
+ ]
200
+ })
201
+ }),
202
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Modal.Footer, {
203
+ children: [
204
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Close, {
205
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
206
+ variant: "tertiary",
207
+ children: formatMessage({
208
+ id: 'app.components.Button.cancel',
209
+ defaultMessage: 'Cancel'
210
+ })
211
+ })
212
+ }),
213
+ /*#__PURE__*/ jsxRuntime.jsx(SubmitButton, {})
214
+ ]
215
+ })
216
+ ]
217
+ })
218
+ });
219
+ };
220
+ /* -------------------------------------------------------------------------------------------------
221
+ * SubmitButton
222
+ * -----------------------------------------------------------------------------------------------*/ const SubmitButton = ()=>{
223
+ const { formatMessage } = reactIntl.useIntl();
224
+ const isSubmitting = strapiAdmin.useForm('SubmitButton', (state)=>state.isSubmitting);
225
+ const modified = strapiAdmin.useForm('SubmitButton', (state)=>state.modified);
226
+ return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
227
+ type: "submit",
228
+ startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Check, {}),
229
+ disabled: isSubmitting || !modified,
230
+ children: formatMessage({
231
+ id: 'global.save',
232
+ defaultMessage: 'Save'
233
+ })
234
+ });
235
+ };
236
+ const BaseForm = ({ mode = 'create' })=>{
237
+ const { formatMessage } = reactIntl.useIntl();
238
+ const { toggleNotification } = strapiAdmin.useNotification();
239
+ const { _unstableFormatAPIError: formatAPIError } = strapiAdmin.useAPIErrorHandler();
240
+ const { data: defaultLocales, error } = index.useGetDefaultLocalesQuery();
241
+ React__namespace.useEffect(()=>{
242
+ if (error) {
243
+ toggleNotification({
244
+ type: 'danger',
245
+ message: formatAPIError(error)
246
+ });
247
+ }
248
+ }, [
249
+ error,
250
+ formatAPIError,
251
+ toggleNotification
252
+ ]);
253
+ if (!Array.isArray(defaultLocales)) {
254
+ return null;
255
+ }
256
+ const options = defaultLocales.map((locale)=>({
257
+ label: locale.name,
258
+ value: locale.code
259
+ }));
260
+ const translatedForm = [
261
+ {
262
+ disabled: mode !== 'create',
263
+ label: {
264
+ id: index.getTranslation('Settings.locales.modal.create.code.label'),
265
+ defaultMessage: 'Locales'
266
+ },
267
+ name: 'code',
268
+ options,
269
+ placeholder: {
270
+ id: 'components.placeholder.select',
271
+ defaultMessage: 'Select'
272
+ },
273
+ required: true,
274
+ size: 6,
275
+ type: 'enumeration'
276
+ },
277
+ {
278
+ hint: {
279
+ id: index.getTranslation('Settings.locales.modal.create.name.label.description'),
280
+ defaultMessage: 'Locale will be displayed under that name in the administration panel'
281
+ },
282
+ label: {
283
+ id: index.getTranslation('Settings.locales.modal.create.name.label'),
284
+ defaultMessage: 'Locale display name'
285
+ },
286
+ name: 'name',
287
+ required: true,
288
+ size: 6,
289
+ type: 'string'
290
+ }
291
+ ].map((field)=>({
292
+ ...field,
293
+ hint: field.hint ? formatMessage(field.hint) : undefined,
294
+ label: formatMessage(field.label),
295
+ placeholder: field.placeholder ? formatMessage(field.placeholder) : undefined
296
+ }));
297
+ return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Root, {
298
+ gap: 4,
299
+ children: translatedForm.map(({ size, ...field })=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
300
+ col: size,
301
+ direction: "column",
302
+ alignItems: "stretch",
303
+ children: /*#__PURE__*/ jsxRuntime.jsx(FormRenderer, {
304
+ ...field
305
+ })
306
+ }, field.name))
307
+ });
308
+ };
309
+ const AdvancedForm = ({ isDefaultLocale })=>{
310
+ const { formatMessage } = reactIntl.useIntl();
311
+ const form = [
312
+ {
313
+ disabled: isDefaultLocale,
314
+ hint: {
315
+ id: index.getTranslation('Settings.locales.modal.advanced.setAsDefault.hint'),
316
+ defaultMessage: 'One default locale is required, change it by selecting another one'
317
+ },
318
+ label: {
319
+ id: index.getTranslation('Settings.locales.modal.advanced.setAsDefault'),
320
+ defaultMessage: 'Set as default locale'
321
+ },
322
+ name: 'isDefault',
323
+ size: 6,
324
+ type: 'boolean'
325
+ }
326
+ ].map((field)=>({
327
+ ...field,
328
+ hint: field.hint ? formatMessage(field.hint) : undefined,
329
+ label: formatMessage(field.label)
330
+ }));
331
+ return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Root, {
332
+ gap: 4,
333
+ children: form.map(({ size, ...field })=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
334
+ col: size,
335
+ direction: "column",
336
+ alignItems: "stretch",
337
+ children: /*#__PURE__*/ jsxRuntime.jsx(FormRenderer, {
338
+ ...field
339
+ })
340
+ }, field.name))
341
+ });
342
+ };
343
+ /* -------------------------------------------------------------------------------------------------
344
+ * FormRenderer
345
+ * -----------------------------------------------------------------------------------------------*/ const FormRenderer = (field)=>{
346
+ switch(field.type){
347
+ /**
348
+ * This will override the default input renderer
349
+ * choice for `enumeration`.
350
+ */ case 'enumeration':
351
+ return /*#__PURE__*/ jsxRuntime.jsx(EnumerationInput, {
352
+ ...field
353
+ });
354
+ default:
355
+ return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.InputRenderer, {
356
+ ...field
357
+ });
358
+ }
359
+ };
360
+ const EnumerationInput = ({ disabled, hint, label, name, options, placeholder, required })=>{
361
+ const { value, error, onChange } = strapiAdmin.useField(name);
362
+ const { data: defaultLocales = [] } = index.useGetDefaultLocalesQuery();
363
+ const handleChange = (value)=>{
364
+ if (Array.isArray(defaultLocales)) {
365
+ // We know it exists because the options are created from the list of default locales
366
+ const locale = defaultLocales.find((locale)=>locale.code === value);
367
+ onChange(name, value);
368
+ // This lets us automatically fill the name field with the locale name
369
+ onChange('name', locale.name);
370
+ } else {
371
+ onChange(name, value);
372
+ }
373
+ };
374
+ return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Field.Root, {
375
+ error: error,
376
+ hint: hint,
377
+ name: name,
378
+ required: required,
379
+ children: [
380
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Label, {
381
+ children: label
382
+ }),
383
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelect, {
384
+ disabled: disabled,
385
+ // @ts-expect-error – This will dissapear when the DS removes support for numbers to be returned by SingleSelect.
386
+ onChange: handleChange,
387
+ placeholder: placeholder,
388
+ value: value,
389
+ children: options.map((option)=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelectOption, {
390
+ value: option.value,
391
+ children: option.label
392
+ }, option.value))
393
+ }),
394
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Error, {}),
395
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Hint, {})
396
+ ]
397
+ });
398
+ };
399
+
400
+ const DeleteLocale = ({ id, name })=>{
401
+ const { formatMessage } = reactIntl.useIntl();
402
+ const { toggleNotification } = strapiAdmin.useNotification();
403
+ const { _unstableFormatAPIError: formatAPIError } = strapiAdmin.useAPIErrorHandler();
404
+ const [visible, setVisible] = React__namespace.useState(false);
405
+ const [deleteLocale] = index.useDeleteLocaleMutation();
406
+ const handleConfirm = async ()=>{
407
+ try {
408
+ const res = await deleteLocale(id);
409
+ if ('error' in res) {
410
+ toggleNotification({
411
+ type: 'danger',
412
+ message: formatAPIError(res.error)
413
+ });
414
+ return;
415
+ }
416
+ toggleNotification({
417
+ type: 'success',
418
+ message: formatMessage({
419
+ id: index.getTranslation('Settings.locales.modal.delete.success'),
420
+ defaultMessage: 'Deleted locale'
421
+ })
422
+ });
423
+ setVisible(false);
424
+ } catch (err) {
425
+ toggleNotification({
426
+ type: 'danger',
427
+ message: formatMessage({
428
+ id: 'notification.error',
429
+ defaultMessage: 'An error occurred, please try again'
430
+ })
431
+ });
432
+ }
433
+ };
434
+ return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Dialog.Root, {
435
+ open: visible,
436
+ onOpenChange: setVisible,
437
+ children: [
438
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Dialog.Trigger, {
439
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
440
+ onClick: ()=>setVisible(true),
441
+ label: formatMessage({
442
+ id: index.getTranslation('Settings.list.actions.delete'),
443
+ defaultMessage: 'Delete {name} locale'
444
+ }, {
445
+ name
446
+ }),
447
+ variant: "ghost",
448
+ children: /*#__PURE__*/ jsxRuntime.jsx(icons.Trash, {})
449
+ })
450
+ }),
451
+ /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.ConfirmDialog, {
452
+ onConfirm: handleConfirm
453
+ })
454
+ ]
455
+ });
456
+ };
457
+
458
+ const EditLocale = (props)=>{
459
+ const { formatMessage } = reactIntl.useIntl();
460
+ const [visible, setVisible] = React__namespace.useState(false);
461
+ return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
462
+ children: [
463
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
464
+ onClick: ()=>setVisible(true),
465
+ label: formatMessage({
466
+ id: index.getTranslation('Settings.list.actions.edit'),
467
+ defaultMessage: 'Edit {name} locale'
468
+ }, {
469
+ name: props.name
470
+ }),
471
+ variant: "ghost",
472
+ children: /*#__PURE__*/ jsxRuntime.jsx(icons.Pencil, {})
473
+ }),
474
+ /*#__PURE__*/ jsxRuntime.jsx(EditModal, {
475
+ ...props,
476
+ open: visible,
477
+ onOpenChange: setVisible
478
+ })
479
+ ]
480
+ });
481
+ };
482
+ /**
483
+ * @internal
484
+ * @description Exported to be used when someone clicks on a table row.
485
+ */ const EditModal = ({ id, code, isDefault, name, open, onOpenChange })=>{
486
+ const { toggleNotification } = strapiAdmin.useNotification();
487
+ const { _unstableFormatAPIError: formatAPIError, _unstableFormatValidationErrors: formatValidationErrors } = strapiAdmin.useAPIErrorHandler();
488
+ const refetchPermissions = strapiAdmin.useAuth('EditModal', (state)=>state.refetchPermissions);
489
+ const { formatMessage } = reactIntl.useIntl();
490
+ const titleId = designSystem.useId();
491
+ const [updateLocale] = index.useUpdateLocaleMutation();
492
+ const handleSubmit = async ({ code: _code, ...data }, helpers)=>{
493
+ try {
494
+ /**
495
+ * We don't need to send the code, because the
496
+ * code can never be changed.
497
+ */ const res = await updateLocale({
498
+ id,
499
+ ...data
500
+ });
501
+ if ('error' in res) {
502
+ if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
503
+ helpers.setErrors(formatValidationErrors(res.error));
504
+ } else {
505
+ toggleNotification({
506
+ type: 'danger',
507
+ message: formatAPIError(res.error)
508
+ });
509
+ }
510
+ return;
511
+ }
512
+ toggleNotification({
513
+ type: 'success',
514
+ message: formatMessage({
515
+ id: index.getTranslation('Settings.locales.modal.edit.success'),
516
+ defaultMessage: 'Updated locale'
517
+ })
518
+ });
519
+ refetchPermissions();
520
+ onOpenChange(false);
521
+ } catch (err) {
522
+ toggleNotification({
523
+ type: 'danger',
524
+ message: formatMessage({
525
+ id: 'notification.error',
526
+ defaultMessage: 'An error occurred, please try again'
527
+ })
528
+ });
529
+ }
530
+ };
531
+ return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Root, {
532
+ open: open,
533
+ onOpenChange: onOpenChange,
534
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Content, {
535
+ children: /*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.Form, {
536
+ method: "PUT",
537
+ onSubmit: handleSubmit,
538
+ initialValues: {
539
+ code,
540
+ name,
541
+ isDefault
542
+ },
543
+ validationSchema: LOCALE_SCHEMA,
544
+ children: [
545
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Header, {
546
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Title, {
547
+ children: formatMessage({
548
+ id: index.getTranslation('Settings.list.actions.edit'),
549
+ defaultMessage: 'Edit a locale'
550
+ }, {
551
+ name
552
+ })
553
+ })
554
+ }),
555
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Body, {
556
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Tabs.Root, {
557
+ variant: "simple",
558
+ defaultValue: "basic",
559
+ children: [
560
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
561
+ justifyContent: "space-between",
562
+ children: [
563
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
564
+ tag: "h2",
565
+ variant: "beta",
566
+ id: titleId,
567
+ children: formatMessage({
568
+ id: index.getTranslation('Settings.locales.modal.title'),
569
+ defaultMessage: 'Configuration'
570
+ })
571
+ }),
572
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Tabs.List, {
573
+ "aria-labelledby": titleId,
574
+ children: [
575
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tabs.Trigger, {
576
+ value: "basic",
577
+ children: formatMessage({
578
+ id: index.getTranslation('Settings.locales.modal.base'),
579
+ defaultMessage: 'Basic settings'
580
+ })
581
+ }),
582
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tabs.Trigger, {
583
+ value: "advanced",
584
+ children: formatMessage({
585
+ id: index.getTranslation('Settings.locales.modal.advanced'),
586
+ defaultMessage: 'Advanced settings'
587
+ })
588
+ })
589
+ ]
590
+ })
591
+ ]
592
+ }),
593
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Divider, {}),
594
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Box, {
595
+ paddingTop: 7,
596
+ paddingBottom: 7,
597
+ children: [
598
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tabs.Content, {
599
+ value: "basic",
600
+ children: /*#__PURE__*/ jsxRuntime.jsx(BaseForm, {
601
+ mode: "edit"
602
+ })
603
+ }),
604
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tabs.Content, {
605
+ value: "advanced",
606
+ children: /*#__PURE__*/ jsxRuntime.jsx(AdvancedForm, {
607
+ isDefaultLocale: isDefault
608
+ })
609
+ })
610
+ ]
611
+ })
612
+ ]
613
+ })
614
+ }),
615
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Modal.Footer, {
616
+ children: [
617
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Close, {
618
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
619
+ variant: "tertiary",
620
+ children: formatMessage({
621
+ id: 'app.components.Button.cancel',
622
+ defaultMessage: 'Cancel'
623
+ })
624
+ })
625
+ }),
626
+ /*#__PURE__*/ jsxRuntime.jsx(SubmitButton, {})
627
+ ]
628
+ })
629
+ ]
630
+ })
631
+ })
632
+ });
633
+ };
634
+
635
+ const LocaleTable = ({ locales = [], canDelete, canUpdate })=>{
636
+ const [editLocaleId, setEditLocaleId] = React__namespace.useState();
637
+ const { formatMessage } = reactIntl.useIntl();
638
+ const handleClick = (localeId)=>()=>{
639
+ if (canUpdate) {
640
+ setEditLocaleId(localeId);
641
+ }
642
+ };
643
+ return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Table, {
644
+ colCount: 4,
645
+ rowCount: locales.length + 1,
646
+ children: [
647
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Thead, {
648
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Tr, {
649
+ children: [
650
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Th, {
651
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
652
+ variant: "sigma",
653
+ textColor: "neutral600",
654
+ children: formatMessage({
655
+ id: index.getTranslation('Settings.locales.row.id'),
656
+ defaultMessage: 'ID'
657
+ })
658
+ })
659
+ }),
660
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Th, {
661
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
662
+ variant: "sigma",
663
+ textColor: "neutral600",
664
+ children: formatMessage({
665
+ id: index.getTranslation('Settings.locales.row.displayName'),
666
+ defaultMessage: 'Display name'
667
+ })
668
+ })
669
+ }),
670
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Th, {
671
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
672
+ variant: "sigma",
673
+ textColor: "neutral600",
674
+ children: formatMessage({
675
+ id: index.getTranslation('Settings.locales.row.default-locale'),
676
+ defaultMessage: 'Default locale'
677
+ })
678
+ })
679
+ }),
680
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Th, {
681
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.VisuallyHidden, {
682
+ children: "Actions"
683
+ })
684
+ })
685
+ ]
686
+ })
687
+ }),
688
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tbody, {
689
+ children: locales.map((locale)=>/*#__PURE__*/ jsxRuntime.jsxs(React__namespace.Fragment, {
690
+ children: [
691
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Tr, {
692
+ onClick: handleClick(locale.id),
693
+ style: {
694
+ cursor: canUpdate ? 'pointer' : 'default'
695
+ },
696
+ children: [
697
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Td, {
698
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
699
+ textColor: "neutral800",
700
+ children: locale.id
701
+ })
702
+ }),
703
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Td, {
704
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
705
+ textColor: "neutral800",
706
+ children: locale.name
707
+ })
708
+ }),
709
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Td, {
710
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
711
+ textColor: "neutral800",
712
+ children: locale.isDefault ? formatMessage({
713
+ id: index.getTranslation('Settings.locales.default'),
714
+ defaultMessage: 'Default'
715
+ }) : null
716
+ })
717
+ }),
718
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Td, {
719
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
720
+ gap: 1,
721
+ justifyContent: "flex-end",
722
+ onClick: (e)=>e.stopPropagation(),
723
+ children: [
724
+ canUpdate && /*#__PURE__*/ jsxRuntime.jsx(EditLocale, {
725
+ ...locale
726
+ }),
727
+ canDelete && !locale.isDefault && /*#__PURE__*/ jsxRuntime.jsx(DeleteLocale, {
728
+ ...locale
729
+ })
730
+ ]
731
+ })
732
+ })
733
+ ]
734
+ }),
735
+ /*#__PURE__*/ jsxRuntime.jsx(EditModal, {
736
+ ...locale,
737
+ onOpenChange: ()=>setEditLocaleId(undefined),
738
+ open: editLocaleId === locale.id
739
+ })
740
+ ]
741
+ }, locale.id))
742
+ })
743
+ ]
744
+ });
745
+ };
746
+
747
+ const SettingsPage = ()=>{
748
+ const { formatMessage } = reactIntl.useIntl();
749
+ const { toggleNotification } = strapiAdmin.useNotification();
750
+ const { _unstableFormatAPIError: formatAPIError } = strapiAdmin.useAPIErrorHandler();
751
+ const { data: locales, isLoading: isLoadingLocales, error } = index.useGetLocalesQuery();
752
+ const { isLoading: isLoadingRBAC, allowedActions: { canUpdate, canCreate, canDelete } } = strapiAdmin.useRBAC(index.PERMISSIONS);
753
+ React__namespace.useEffect(()=>{
754
+ if (error) {
755
+ toggleNotification({
756
+ type: 'danger',
757
+ message: formatAPIError(error)
758
+ });
759
+ }
760
+ }, [
761
+ error,
762
+ formatAPIError,
763
+ toggleNotification
764
+ ]);
765
+ const isLoading = isLoadingLocales || isLoadingRBAC;
766
+ if (isLoading) {
767
+ return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.Loading, {});
768
+ }
769
+ if (error || !Array.isArray(locales)) {
770
+ return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.Error, {});
771
+ }
772
+ return /*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.Page.Main, {
773
+ tabIndex: -1,
774
+ children: [
775
+ /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Layouts.Header, {
776
+ primaryAction: /*#__PURE__*/ jsxRuntime.jsx(CreateLocale, {
777
+ disabled: !canCreate
778
+ }),
779
+ title: formatMessage({
780
+ id: index.getTranslation('plugin.name'),
781
+ defaultMessage: 'Internationalization'
782
+ }),
783
+ subtitle: formatMessage({
784
+ id: index.getTranslation('Settings.list.description'),
785
+ defaultMessage: 'Configure the settings'
786
+ })
787
+ }),
788
+ /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Layouts.Content, {
789
+ children: locales.length > 0 ? /*#__PURE__*/ jsxRuntime.jsx(LocaleTable, {
790
+ locales: locales,
791
+ canDelete: canDelete,
792
+ canUpdate: canUpdate
793
+ }) : /*#__PURE__*/ jsxRuntime.jsx(designSystem.EmptyStateLayout, {
794
+ icon: /*#__PURE__*/ jsxRuntime.jsx(symbols.EmptyDocuments, {
795
+ width: undefined,
796
+ height: undefined
797
+ }),
798
+ content: formatMessage({
799
+ id: index.getTranslation('Settings.list.empty.title'),
800
+ defaultMessage: 'There are no locales'
801
+ }),
802
+ action: /*#__PURE__*/ jsxRuntime.jsx(CreateLocale, {
803
+ disabled: !canCreate,
804
+ variant: "secondary"
805
+ })
806
+ })
807
+ })
808
+ ]
809
+ });
810
+ };
811
+ const ProtectedSettingsPage = ()=>{
812
+ return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.Protect, {
813
+ permissions: index.PERMISSIONS.read,
814
+ children: /*#__PURE__*/ jsxRuntime.jsx(SettingsPage, {})
815
+ });
816
+ };
817
+
818
+ exports.ProtectedSettingsPage = ProtectedSettingsPage;
819
+ exports.SettingsPage = SettingsPage;
820
+ //# sourceMappingURL=SettingsPage-B6ikxVOg.js.map