@strapi/i18n 0.0.0 → 5.0.0-beta.10

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