@strapi/i18n 0.0.0-experimental.59ce88771272039a9d868fba2f7b503edf715c6a → 0.0.0-experimental.5a4d501fa348721471ac552dcecac1b0c8146ae7

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 (395) hide show
  1. package/LICENSE +18 -3
  2. package/dist/admin/components/BulkLocaleActionModal.js +262 -0
  3. package/dist/admin/components/BulkLocaleActionModal.js.map +1 -0
  4. package/dist/admin/components/BulkLocaleActionModal.mjs +260 -0
  5. package/dist/admin/components/BulkLocaleActionModal.mjs.map +1 -0
  6. package/dist/admin/components/CMHeaderActions.js +721 -0
  7. package/dist/admin/components/CMHeaderActions.js.map +1 -0
  8. package/dist/admin/components/CMHeaderActions.mjs +696 -0
  9. package/dist/admin/components/CMHeaderActions.mjs.map +1 -0
  10. package/dist/admin/components/CMListViewModalsAdditionalInformation.js +69 -0
  11. package/dist/admin/components/CMListViewModalsAdditionalInformation.js.map +1 -0
  12. package/dist/admin/components/CMListViewModalsAdditionalInformation.mjs +65 -0
  13. package/dist/admin/components/CMListViewModalsAdditionalInformation.mjs.map +1 -0
  14. package/dist/admin/components/CheckboxConfirmation.js +155 -0
  15. package/dist/admin/components/CheckboxConfirmation.js.map +1 -0
  16. package/dist/admin/components/CheckboxConfirmation.mjs +134 -0
  17. package/dist/admin/components/CheckboxConfirmation.mjs.map +1 -0
  18. package/dist/admin/components/CreateLocale.js +395 -0
  19. package/dist/admin/components/CreateLocale.js.map +1 -0
  20. package/dist/admin/components/CreateLocale.mjs +369 -0
  21. package/dist/admin/components/CreateLocale.mjs.map +1 -0
  22. package/dist/admin/components/DeleteLocale.js +90 -0
  23. package/dist/admin/components/DeleteLocale.js.map +1 -0
  24. package/dist/admin/components/DeleteLocale.mjs +69 -0
  25. package/dist/admin/components/DeleteLocale.mjs.map +1 -0
  26. package/dist/admin/components/EditLocale.js +212 -0
  27. package/dist/admin/components/EditLocale.js.map +1 -0
  28. package/dist/admin/components/EditLocale.mjs +190 -0
  29. package/dist/admin/components/EditLocale.mjs.map +1 -0
  30. package/dist/admin/components/LocaleListCell.js +82 -0
  31. package/dist/admin/components/LocaleListCell.js.map +1 -0
  32. package/dist/admin/components/LocaleListCell.mjs +80 -0
  33. package/dist/admin/components/LocaleListCell.mjs.map +1 -0
  34. package/dist/admin/components/LocalePicker.js +98 -0
  35. package/dist/admin/components/LocalePicker.js.map +1 -0
  36. package/dist/admin/components/LocalePicker.mjs +77 -0
  37. package/dist/admin/components/LocalePicker.mjs.map +1 -0
  38. package/dist/admin/components/LocaleTable.js +143 -0
  39. package/dist/admin/components/LocaleTable.js.map +1 -0
  40. package/dist/admin/components/LocaleTable.mjs +122 -0
  41. package/dist/admin/components/LocaleTable.mjs.map +1 -0
  42. package/dist/admin/constants.js +37 -0
  43. package/dist/admin/constants.js.map +1 -0
  44. package/dist/admin/constants.mjs +35 -0
  45. package/dist/admin/constants.mjs.map +1 -0
  46. package/dist/admin/contentManagerHooks/editView.js +106 -0
  47. package/dist/admin/contentManagerHooks/editView.js.map +1 -0
  48. package/dist/admin/contentManagerHooks/editView.mjs +85 -0
  49. package/dist/admin/contentManagerHooks/editView.mjs.map +1 -0
  50. package/dist/admin/contentManagerHooks/listView.js +43 -0
  51. package/dist/admin/contentManagerHooks/listView.js.map +1 -0
  52. package/dist/admin/contentManagerHooks/listView.mjs +41 -0
  53. package/dist/admin/contentManagerHooks/listView.mjs.map +1 -0
  54. package/dist/admin/contentReleasesHooks/releaseDetailsView.js +20 -0
  55. package/dist/admin/contentReleasesHooks/releaseDetailsView.js.map +1 -0
  56. package/dist/admin/contentReleasesHooks/releaseDetailsView.mjs +18 -0
  57. package/dist/admin/contentReleasesHooks/releaseDetailsView.mjs.map +1 -0
  58. package/dist/admin/hooks/useI18n.js +78 -0
  59. package/dist/admin/hooks/useI18n.js.map +1 -0
  60. package/dist/admin/hooks/useI18n.mjs +57 -0
  61. package/dist/admin/hooks/useI18n.mjs.map +1 -0
  62. package/dist/admin/index.js +226 -5
  63. package/dist/admin/index.js.map +1 -1
  64. package/dist/admin/index.mjs +202 -5
  65. package/dist/admin/index.mjs.map +1 -1
  66. package/dist/admin/middlewares/extendCTBAttributeInitialData.js +61 -0
  67. package/dist/admin/middlewares/extendCTBAttributeInitialData.js.map +1 -0
  68. package/dist/admin/middlewares/extendCTBAttributeInitialData.mjs +59 -0
  69. package/dist/admin/middlewares/extendCTBAttributeInitialData.mjs.map +1 -0
  70. package/dist/admin/middlewares/extendCTBInitialData.js +40 -0
  71. package/dist/admin/middlewares/extendCTBInitialData.js.map +1 -0
  72. package/dist/admin/middlewares/extendCTBInitialData.mjs +38 -0
  73. package/dist/admin/middlewares/extendCTBInitialData.mjs.map +1 -0
  74. package/dist/admin/middlewares/rbac-middleware.js +49 -0
  75. package/dist/admin/middlewares/rbac-middleware.js.map +1 -0
  76. package/dist/admin/middlewares/rbac-middleware.mjs +28 -0
  77. package/dist/admin/middlewares/rbac-middleware.mjs.map +1 -0
  78. package/dist/admin/pages/SettingsPage.js +107 -0
  79. package/dist/admin/pages/SettingsPage.js.map +1 -0
  80. package/dist/admin/pages/SettingsPage.mjs +85 -0
  81. package/dist/admin/pages/SettingsPage.mjs.map +1 -0
  82. package/dist/admin/pluginId.js +6 -0
  83. package/dist/admin/pluginId.js.map +1 -0
  84. package/dist/admin/pluginId.mjs +4 -0
  85. package/dist/admin/pluginId.mjs.map +1 -0
  86. package/dist/admin/services/api.js +12 -0
  87. package/dist/admin/services/api.js.map +1 -0
  88. package/dist/admin/services/api.mjs +10 -0
  89. package/dist/admin/services/api.mjs.map +1 -0
  90. package/dist/admin/services/locales.js +70 -0
  91. package/dist/admin/services/locales.js.map +1 -0
  92. package/dist/admin/services/locales.mjs +64 -0
  93. package/dist/admin/services/locales.mjs.map +1 -0
  94. package/dist/admin/services/relations.js +23 -0
  95. package/dist/admin/services/relations.js.map +1 -0
  96. package/dist/admin/services/relations.mjs +21 -0
  97. package/dist/admin/services/relations.mjs.map +1 -0
  98. package/dist/admin/src/components/BulkLocaleActionModal.d.ts +2 -1
  99. package/dist/admin/src/components/CMHeaderActions.d.ts +30 -4
  100. package/dist/admin/src/components/CreateLocale.d.ts +6 -6
  101. package/dist/admin/src/components/LocaleListCell.d.ts +4 -4
  102. package/dist/admin/src/components/tests/CreateLocale.test.d.ts +1 -0
  103. package/dist/admin/src/components/tests/DeleteLocale.test.d.ts +1 -0
  104. package/dist/admin/src/components/tests/EditLocale.test.d.ts +1 -0
  105. package/dist/admin/src/components/tests/LocaleListCell.test.d.ts +1 -0
  106. package/dist/admin/src/contentReleasesHooks/releaseDetailsView.d.ts +10 -6
  107. package/dist/admin/src/pages/tests/SettingsPage.test.d.ts +1 -0
  108. package/dist/admin/src/utils/clean.d.ts +4 -0
  109. package/dist/admin/src/utils/schemas.d.ts +1 -0
  110. package/dist/admin/tests/server.d.ts +1 -0
  111. package/dist/admin/tests/utils.d.ts +6 -0
  112. package/dist/admin/translations/de.json.js +66 -0
  113. package/dist/admin/translations/de.json.js.map +1 -0
  114. package/dist/admin/translations/de.json.mjs +64 -0
  115. package/dist/admin/translations/de.json.mjs.map +1 -0
  116. package/dist/admin/translations/dk.json.js +66 -0
  117. package/dist/admin/translations/dk.json.js.map +1 -0
  118. package/dist/admin/translations/dk.json.mjs +64 -0
  119. package/dist/admin/translations/dk.json.mjs.map +1 -0
  120. package/dist/admin/translations/en.json.js +81 -0
  121. package/dist/admin/translations/en.json.js.map +1 -0
  122. package/dist/admin/translations/en.json.mjs +79 -0
  123. package/dist/admin/translations/en.json.mjs.map +1 -0
  124. package/dist/admin/translations/es.json.js +66 -0
  125. package/dist/admin/translations/es.json.js.map +1 -0
  126. package/dist/admin/translations/es.json.mjs +64 -0
  127. package/dist/admin/translations/es.json.mjs.map +1 -0
  128. package/dist/admin/translations/fr.json.js +66 -0
  129. package/dist/admin/translations/fr.json.js.map +1 -0
  130. package/dist/admin/translations/fr.json.mjs +64 -0
  131. package/dist/admin/translations/fr.json.mjs.map +1 -0
  132. package/dist/admin/translations/ko.json.js +65 -0
  133. package/dist/admin/translations/ko.json.js.map +1 -0
  134. package/dist/admin/translations/ko.json.mjs +63 -0
  135. package/dist/admin/translations/ko.json.mjs.map +1 -0
  136. package/dist/admin/translations/pl.json.js +66 -0
  137. package/dist/admin/translations/pl.json.js.map +1 -0
  138. package/dist/admin/translations/pl.json.mjs +64 -0
  139. package/dist/admin/translations/pl.json.mjs.map +1 -0
  140. package/dist/admin/translations/ru.json.js +68 -0
  141. package/dist/admin/translations/ru.json.js.map +1 -0
  142. package/dist/admin/translations/ru.json.mjs +66 -0
  143. package/dist/admin/translations/ru.json.mjs.map +1 -0
  144. package/dist/admin/translations/tr.json.js +66 -0
  145. package/dist/admin/translations/tr.json.js.map +1 -0
  146. package/dist/admin/translations/tr.json.mjs +64 -0
  147. package/dist/admin/translations/tr.json.mjs.map +1 -0
  148. package/dist/admin/translations/uk.json.js +82 -0
  149. package/dist/admin/translations/uk.json.js.map +1 -0
  150. package/dist/admin/translations/uk.json.mjs +80 -0
  151. package/dist/admin/translations/uk.json.mjs.map +1 -0
  152. package/dist/admin/translations/zh-Hans.json.js +57 -0
  153. package/dist/admin/translations/zh-Hans.json.js.map +1 -0
  154. package/dist/admin/translations/zh-Hans.json.mjs +55 -0
  155. package/dist/admin/translations/zh-Hans.json.mjs.map +1 -0
  156. package/dist/admin/translations/zh.json.js +66 -0
  157. package/dist/admin/translations/zh.json.js.map +1 -0
  158. package/dist/admin/translations/zh.json.mjs +64 -0
  159. package/dist/admin/translations/zh.json.mjs.map +1 -0
  160. package/dist/admin/utils/baseQuery.js +8 -0
  161. package/dist/admin/utils/baseQuery.js.map +1 -0
  162. package/dist/admin/utils/baseQuery.mjs +6 -0
  163. package/dist/admin/utils/baseQuery.mjs.map +1 -0
  164. package/dist/admin/utils/clean.js +70 -0
  165. package/dist/admin/utils/clean.js.map +1 -0
  166. package/dist/admin/utils/clean.mjs +68 -0
  167. package/dist/admin/utils/clean.mjs.map +1 -0
  168. package/dist/admin/utils/fields.js +29 -0
  169. package/dist/admin/utils/fields.js.map +1 -0
  170. package/dist/admin/utils/fields.mjs +26 -0
  171. package/dist/admin/utils/fields.mjs.map +1 -0
  172. package/dist/admin/utils/getTranslation.js +8 -0
  173. package/dist/admin/utils/getTranslation.js.map +1 -0
  174. package/dist/admin/utils/getTranslation.mjs +6 -0
  175. package/dist/admin/utils/getTranslation.mjs.map +1 -0
  176. package/dist/admin/utils/prefixPluginTranslations.js +11 -0
  177. package/dist/admin/utils/prefixPluginTranslations.js.map +1 -0
  178. package/dist/admin/utils/prefixPluginTranslations.mjs +9 -0
  179. package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -0
  180. package/dist/admin/utils/schemas.js +68 -0
  181. package/dist/admin/utils/schemas.js.map +1 -0
  182. package/dist/admin/utils/schemas.mjs +66 -0
  183. package/dist/admin/utils/schemas.mjs.map +1 -0
  184. package/dist/admin/utils/strings.js +6 -0
  185. package/dist/admin/utils/strings.js.map +1 -0
  186. package/dist/admin/utils/strings.mjs +4 -0
  187. package/dist/admin/utils/strings.mjs.map +1 -0
  188. package/dist/server/bootstrap.js +79 -0
  189. package/dist/server/bootstrap.js.map +1 -0
  190. package/dist/server/bootstrap.mjs +77 -0
  191. package/dist/server/bootstrap.mjs.map +1 -0
  192. package/dist/server/constants/index.js +29 -0
  193. package/dist/server/constants/index.js.map +1 -0
  194. package/dist/server/constants/index.mjs +25 -0
  195. package/dist/server/constants/index.mjs.map +1 -0
  196. package/dist/server/constants/iso-locales.json.js +2423 -0
  197. package/dist/server/constants/iso-locales.json.js.map +1 -0
  198. package/dist/server/constants/iso-locales.json.mjs +2421 -0
  199. package/dist/server/constants/iso-locales.json.mjs.map +1 -0
  200. package/dist/server/content-types/index.js +10 -0
  201. package/dist/server/content-types/index.js.map +1 -0
  202. package/dist/server/content-types/index.mjs +8 -0
  203. package/dist/server/content-types/index.mjs.map +1 -0
  204. package/dist/server/content-types/locale/index.js +10 -0
  205. package/dist/server/content-types/locale/index.js.map +1 -0
  206. package/dist/server/content-types/locale/index.mjs +8 -0
  207. package/dist/server/content-types/locale/index.mjs.map +1 -0
  208. package/dist/server/content-types/locale/schema.json.js +46 -0
  209. package/dist/server/content-types/locale/schema.json.js.map +1 -0
  210. package/dist/server/content-types/locale/schema.json.mjs +38 -0
  211. package/dist/server/content-types/locale/schema.json.mjs.map +1 -0
  212. package/dist/server/controllers/content-types.js +76 -0
  213. package/dist/server/controllers/content-types.js.map +1 -0
  214. package/dist/server/controllers/content-types.mjs +74 -0
  215. package/dist/server/controllers/content-types.mjs.map +1 -0
  216. package/dist/server/controllers/index.js +14 -0
  217. package/dist/server/controllers/index.js.map +1 -0
  218. package/dist/server/controllers/index.mjs +12 -0
  219. package/dist/server/controllers/index.mjs.map +1 -0
  220. package/dist/server/controllers/iso-locales.js +13 -0
  221. package/dist/server/controllers/iso-locales.js.map +1 -0
  222. package/dist/server/controllers/iso-locales.mjs +11 -0
  223. package/dist/server/controllers/iso-locales.mjs.map +1 -0
  224. package/dist/server/controllers/locales.js +108 -0
  225. package/dist/server/controllers/locales.js.map +1 -0
  226. package/dist/server/controllers/locales.mjs +87 -0
  227. package/dist/server/controllers/locales.mjs.map +1 -0
  228. package/dist/server/controllers/validate-locale-creation.js +47 -0
  229. package/dist/server/controllers/validate-locale-creation.js.map +1 -0
  230. package/dist/server/controllers/validate-locale-creation.mjs +45 -0
  231. package/dist/server/controllers/validate-locale-creation.mjs.map +1 -0
  232. package/dist/server/domain/locale.js +11 -0
  233. package/dist/server/domain/locale.js.map +1 -0
  234. package/dist/server/domain/locale.mjs +9 -0
  235. package/dist/server/domain/locale.mjs.map +1 -0
  236. package/dist/server/graphql.js +115 -0
  237. package/dist/server/graphql.js.map +1 -0
  238. package/dist/server/graphql.mjs +113 -0
  239. package/dist/server/graphql.mjs.map +1 -0
  240. package/dist/server/index.js +18 -3520
  241. package/dist/server/index.js.map +1 -1
  242. package/dist/server/index.mjs +17 -3502
  243. package/dist/server/index.mjs.map +1 -1
  244. package/dist/server/register.js +79 -0
  245. package/dist/server/register.js.map +1 -0
  246. package/dist/server/register.mjs +77 -0
  247. package/dist/server/register.mjs.map +1 -0
  248. package/dist/server/routes/admin.js +102 -0
  249. package/dist/server/routes/admin.js.map +1 -0
  250. package/dist/server/routes/admin.mjs +100 -0
  251. package/dist/server/routes/admin.mjs.map +1 -0
  252. package/dist/server/routes/content-api.js +15 -0
  253. package/dist/server/routes/content-api.js.map +1 -0
  254. package/dist/server/routes/content-api.mjs +13 -0
  255. package/dist/server/routes/content-api.mjs.map +1 -0
  256. package/dist/server/routes/index.js +12 -0
  257. package/dist/server/routes/index.js.map +1 -0
  258. package/dist/server/routes/index.mjs +10 -0
  259. package/dist/server/routes/index.mjs.map +1 -0
  260. package/dist/server/services/content-types.js +157 -0
  261. package/dist/server/services/content-types.js.map +1 -0
  262. package/dist/server/services/content-types.mjs +155 -0
  263. package/dist/server/services/content-types.mjs.map +1 -0
  264. package/dist/server/services/index.js +22 -0
  265. package/dist/server/services/index.js.map +1 -0
  266. package/dist/server/services/index.mjs +20 -0
  267. package/dist/server/services/index.mjs.map +1 -0
  268. package/dist/server/services/iso-locales.js +12 -0
  269. package/dist/server/services/iso-locales.js.map +1 -0
  270. package/dist/server/services/iso-locales.mjs +10 -0
  271. package/dist/server/services/iso-locales.mjs.map +1 -0
  272. package/dist/server/services/locales.js +114 -0
  273. package/dist/server/services/locales.js.map +1 -0
  274. package/dist/server/services/locales.mjs +112 -0
  275. package/dist/server/services/locales.mjs.map +1 -0
  276. package/dist/server/services/localizations.js +68 -0
  277. package/dist/server/services/localizations.js.map +1 -0
  278. package/dist/server/services/localizations.mjs +66 -0
  279. package/dist/server/services/localizations.mjs.map +1 -0
  280. package/dist/server/services/metrics.js +30 -0
  281. package/dist/server/services/metrics.js.map +1 -0
  282. package/dist/server/services/metrics.mjs +28 -0
  283. package/dist/server/services/metrics.mjs.map +1 -0
  284. package/dist/server/services/permissions/actions.js +136 -0
  285. package/dist/server/services/permissions/actions.js.map +1 -0
  286. package/dist/server/services/permissions/actions.mjs +134 -0
  287. package/dist/server/services/permissions/actions.mjs.map +1 -0
  288. package/dist/server/services/permissions/engine.js +52 -0
  289. package/dist/server/services/permissions/engine.js.map +1 -0
  290. package/dist/server/services/permissions/engine.mjs +50 -0
  291. package/dist/server/services/permissions/engine.mjs.map +1 -0
  292. package/dist/server/services/permissions/sections-builder.js +45 -0
  293. package/dist/server/services/permissions/sections-builder.js.map +1 -0
  294. package/dist/server/services/permissions/sections-builder.mjs +43 -0
  295. package/dist/server/services/permissions/sections-builder.mjs.map +1 -0
  296. package/dist/server/services/permissions.js +14 -0
  297. package/dist/server/services/permissions.js.map +1 -0
  298. package/dist/server/services/permissions.mjs +12 -0
  299. package/dist/server/services/permissions.mjs.map +1 -0
  300. package/dist/server/services/sanitize/index.js +34 -0
  301. package/dist/server/services/sanitize/index.js.map +1 -0
  302. package/dist/server/services/sanitize/index.mjs +32 -0
  303. package/dist/server/services/sanitize/index.mjs.map +1 -0
  304. package/dist/server/src/bootstrap.d.ts +1 -4
  305. package/dist/server/src/bootstrap.d.ts.map +1 -1
  306. package/dist/server/src/index.d.ts +21 -13
  307. package/dist/server/src/index.d.ts.map +1 -1
  308. package/dist/server/src/register.d.ts.map +1 -1
  309. package/dist/server/src/services/index.d.ts +20 -10
  310. package/dist/server/src/services/index.d.ts.map +1 -1
  311. package/dist/server/src/services/localizations.d.ts +1 -1
  312. package/dist/server/src/services/localizations.d.ts.map +1 -1
  313. package/dist/server/src/services/permissions/actions.d.ts +14 -2
  314. package/dist/server/src/services/permissions/actions.d.ts.map +1 -1
  315. package/dist/server/src/services/permissions.d.ts +14 -2
  316. package/dist/server/src/services/permissions.d.ts.map +1 -1
  317. package/dist/server/src/services/sanitize/index.d.ts +11 -0
  318. package/dist/server/src/services/sanitize/index.d.ts.map +1 -0
  319. package/dist/server/src/utils/index.d.ts +2 -2
  320. package/dist/server/src/utils/index.d.ts.map +1 -1
  321. package/dist/server/utils/index.js +16 -0
  322. package/dist/server/utils/index.js.map +1 -0
  323. package/dist/server/utils/index.mjs +13 -0
  324. package/dist/server/utils/index.mjs.map +1 -0
  325. package/dist/server/validation/content-types.js +18 -0
  326. package/dist/server/validation/content-types.js.map +1 -0
  327. package/dist/server/validation/content-types.mjs +16 -0
  328. package/dist/server/validation/content-types.mjs.map +1 -0
  329. package/dist/server/validation/locales.js +23 -0
  330. package/dist/server/validation/locales.js.map +1 -0
  331. package/dist/server/validation/locales.mjs +20 -0
  332. package/dist/server/validation/locales.mjs.map +1 -0
  333. package/dist/shared/contracts/content-manager.d.ts +1 -1
  334. package/dist/shared/contracts/shared.d.ts +1 -1
  335. package/package.json +18 -16
  336. package/dist/_chunks/SettingsPage-C3DZSs4c.js +0 -569
  337. package/dist/_chunks/SettingsPage-C3DZSs4c.js.map +0 -1
  338. package/dist/_chunks/SettingsPage-D3GMs9sy.mjs +0 -549
  339. package/dist/_chunks/SettingsPage-D3GMs9sy.mjs.map +0 -1
  340. package/dist/_chunks/de-9eCAqqrB.mjs +0 -66
  341. package/dist/_chunks/de-9eCAqqrB.mjs.map +0 -1
  342. package/dist/_chunks/de-DtWiGdHl.js +0 -66
  343. package/dist/_chunks/de-DtWiGdHl.js.map +0 -1
  344. package/dist/_chunks/dk-2qBjxt-P.mjs +0 -66
  345. package/dist/_chunks/dk-2qBjxt-P.mjs.map +0 -1
  346. package/dist/_chunks/dk-D8C-casx.js +0 -66
  347. package/dist/_chunks/dk-D8C-casx.js.map +0 -1
  348. package/dist/_chunks/en-BsOU9o5z.js +0 -74
  349. package/dist/_chunks/en-BsOU9o5z.js.map +0 -1
  350. package/dist/_chunks/en-CM6Pjfyv.mjs +0 -74
  351. package/dist/_chunks/en-CM6Pjfyv.mjs.map +0 -1
  352. package/dist/_chunks/es-DS-XFGSw.js +0 -66
  353. package/dist/_chunks/es-DS-XFGSw.js.map +0 -1
  354. package/dist/_chunks/es-DlmMVaBG.mjs +0 -66
  355. package/dist/_chunks/es-DlmMVaBG.mjs.map +0 -1
  356. package/dist/_chunks/fr-3S6ke71d.mjs +0 -66
  357. package/dist/_chunks/fr-3S6ke71d.mjs.map +0 -1
  358. package/dist/_chunks/fr-BTjekDpq.js +0 -66
  359. package/dist/_chunks/fr-BTjekDpq.js.map +0 -1
  360. package/dist/_chunks/index-COk7qNR1.mjs +0 -1376
  361. package/dist/_chunks/index-COk7qNR1.mjs.map +0 -1
  362. package/dist/_chunks/index-DHYq_CPK.js +0 -1398
  363. package/dist/_chunks/index-DHYq_CPK.js.map +0 -1
  364. package/dist/_chunks/ko-DmcGUBQ3.js +0 -65
  365. package/dist/_chunks/ko-DmcGUBQ3.js.map +0 -1
  366. package/dist/_chunks/ko-qTjQ8IMw.mjs +0 -65
  367. package/dist/_chunks/ko-qTjQ8IMw.mjs.map +0 -1
  368. package/dist/_chunks/pl-B67TSHqT.mjs +0 -66
  369. package/dist/_chunks/pl-B67TSHqT.mjs.map +0 -1
  370. package/dist/_chunks/pl-Cn5RYonZ.js +0 -66
  371. package/dist/_chunks/pl-Cn5RYonZ.js.map +0 -1
  372. package/dist/_chunks/ru-BMBgVL3s.js +0 -68
  373. package/dist/_chunks/ru-BMBgVL3s.js.map +0 -1
  374. package/dist/_chunks/ru-hagMa57T.mjs +0 -68
  375. package/dist/_chunks/ru-hagMa57T.mjs.map +0 -1
  376. package/dist/_chunks/tr-CarUU76c.js +0 -66
  377. package/dist/_chunks/tr-CarUU76c.js.map +0 -1
  378. package/dist/_chunks/tr-Dw_jmkG-.mjs +0 -66
  379. package/dist/_chunks/tr-Dw_jmkG-.mjs.map +0 -1
  380. package/dist/_chunks/zh-57YM4amO.mjs +0 -66
  381. package/dist/_chunks/zh-57YM4amO.mjs.map +0 -1
  382. package/dist/_chunks/zh-CukOviB0.js +0 -66
  383. package/dist/_chunks/zh-CukOviB0.js.map +0 -1
  384. package/dist/_chunks/zh-Hans-DSHIXAa3.js +0 -57
  385. package/dist/_chunks/zh-Hans-DSHIXAa3.js.map +0 -1
  386. package/dist/_chunks/zh-Hans-Dyc-aR-h.mjs +0 -57
  387. package/dist/_chunks/zh-Hans-Dyc-aR-h.mjs.map +0 -1
  388. package/dist/admin/src/components/Initializer.d.ts +0 -5
  389. package/dist/server/src/migrations/content-type/disable/index.d.ts +0 -3
  390. package/dist/server/src/migrations/content-type/disable/index.d.ts.map +0 -1
  391. package/dist/server/src/migrations/content-type/enable/index.d.ts +0 -3
  392. package/dist/server/src/migrations/content-type/enable/index.d.ts.map +0 -1
  393. package/dist/server/src/services/entity-service-decorator.d.ts +0 -29
  394. package/dist/server/src/services/entity-service-decorator.d.ts.map +0 -1
  395. package/strapi-server.js +0 -3
@@ -1,1376 +0,0 @@
1
- import get from "lodash/get";
2
- import * as yup from "yup";
3
- import { jsxs, jsx } from "react/jsx-runtime";
4
- import * as React from "react";
5
- import { Typography, Dialog, Field, Checkbox, Flex, Button as Button$1, Box, Status, IconButton, Tooltip, SingleSelect, SingleSelectOption, VisuallyHidden, useCollator, Popover } from "@strapi/design-system";
6
- import { WarningCircle, Pencil, CrossCircle, CheckCircle, ArrowsCounterClockwise, Trash, ListPlus, Earth, EarthStriked, CaretDown } from "@strapi/icons";
7
- import { useIntl } from "react-intl";
8
- import { styled } from "styled-components";
9
- import { useAuth, adminApi, useTable, Table, useQueryParams, useNotification, useAPIErrorHandler } from "@strapi/admin/strapi-admin";
10
- import { unstable_useDocument, unstable_useDocumentActions, buildValidParams } from "@strapi/content-manager/strapi-admin";
11
- import { useParams, Link, useNavigate, matchPath } from "react-router-dom";
12
- import * as qs from "qs";
13
- import { stringify } from "qs";
14
- import omit from "lodash/omit";
15
- const __variableDynamicImportRuntimeHelper = (glob, path) => {
16
- const v = glob[path];
17
- if (v) {
18
- return typeof v === "function" ? v() : Promise.resolve(v);
19
- }
20
- return new Promise((_, reject) => {
21
- (typeof queueMicrotask === "function" ? queueMicrotask : setTimeout)(reject.bind(null, new Error("Unknown variable dynamic import: " + path)));
22
- });
23
- };
24
- const pluginId = "i18n";
25
- const getTranslation = (id) => `${pluginId}.${id}`;
26
- const TextAlignTypography = styled(Typography)`
27
- text-align: center;
28
- `;
29
- const CheckboxConfirmation = ({
30
- description,
31
- isCreating = false,
32
- intlLabel,
33
- name,
34
- onChange,
35
- value
36
- }) => {
37
- const { formatMessage } = useIntl();
38
- const [isOpen, setIsOpen] = React.useState(false);
39
- const handleChange = (value2) => {
40
- if (isCreating || value2) {
41
- return onChange({ target: { name, value: value2, type: "checkbox" } });
42
- }
43
- if (!value2) {
44
- return setIsOpen(true);
45
- }
46
- return null;
47
- };
48
- const handleConfirm = () => {
49
- onChange({ target: { name, value: false, type: "checkbox" } });
50
- };
51
- const label = intlLabel.id ? formatMessage(
52
- { id: intlLabel.id, defaultMessage: intlLabel.defaultMessage },
53
- { ...intlLabel.values }
54
- ) : name;
55
- const hint = description ? formatMessage(
56
- { id: description.id, defaultMessage: description.defaultMessage },
57
- { ...description.values }
58
- ) : "";
59
- return /* @__PURE__ */ jsxs(Dialog.Root, { open: isOpen, onOpenChange: setIsOpen, children: [
60
- /* @__PURE__ */ jsxs(Field.Root, { hint, name, children: [
61
- /* @__PURE__ */ jsx(Checkbox, { onCheckedChange: handleChange, checked: value, children: label }),
62
- /* @__PURE__ */ jsx(Field.Hint, {})
63
- ] }),
64
- /* @__PURE__ */ jsxs(Dialog.Content, { children: [
65
- /* @__PURE__ */ jsx(Dialog.Header, { children: formatMessage({
66
- id: getTranslation("CheckboxConfirmation.Modal.title"),
67
- defaultMessage: "Disable localization"
68
- }) }),
69
- /* @__PURE__ */ jsx(Dialog.Body, { icon: /* @__PURE__ */ jsx(WarningCircle, {}), children: /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "stretch", gap: 2, children: [
70
- /* @__PURE__ */ jsx(Flex, { justifyContent: "center", children: /* @__PURE__ */ jsx(TextAlignTypography, { children: formatMessage({
71
- id: getTranslation("CheckboxConfirmation.Modal.content"),
72
- defaultMessage: "Disabling localization will engender the deletion of all your content but the one associated to your default locale (if existing)."
73
- }) }) }),
74
- /* @__PURE__ */ jsx(Flex, { justifyContent: "center", children: /* @__PURE__ */ jsx(Typography, { fontWeight: "semiBold", children: formatMessage({
75
- id: getTranslation("CheckboxConfirmation.Modal.body"),
76
- defaultMessage: "Do you want to disable it?"
77
- }) }) })
78
- ] }) }),
79
- /* @__PURE__ */ jsxs(Dialog.Footer, { children: [
80
- /* @__PURE__ */ jsx(Dialog.Cancel, { children: /* @__PURE__ */ jsx(Button$1, { variant: "tertiary", children: formatMessage({
81
- id: "components.popUpWarning.button.cancel",
82
- defaultMessage: "No, cancel"
83
- }) }) }),
84
- /* @__PURE__ */ jsx(Dialog.Action, { children: /* @__PURE__ */ jsx(Button$1, { variant: "danger-light", onClick: handleConfirm, children: formatMessage({
85
- id: getTranslation("CheckboxConfirmation.Modal.button-confirm"),
86
- defaultMessage: "Yes, disable"
87
- }) }) })
88
- ] })
89
- ] })
90
- ] });
91
- };
92
- const LOCALIZED_FIELDS = [
93
- "biginteger",
94
- "boolean",
95
- "component",
96
- "date",
97
- "datetime",
98
- "decimal",
99
- "dynamiczone",
100
- "email",
101
- "enumeration",
102
- "float",
103
- "integer",
104
- "json",
105
- "media",
106
- "number",
107
- "password",
108
- "richtext",
109
- "blocks",
110
- "string",
111
- "text",
112
- "time"
113
- ];
114
- const doesPluginOptionsHaveI18nLocalized = (opts) => typeof opts === "object" && opts !== null && "i18n" in opts && typeof opts.i18n === "object" && opts.i18n !== null && "localized" in opts.i18n && typeof opts.i18n.localized === "boolean";
115
- const capitalize = (str) => str.charAt(0).toUpperCase() + str.slice(1);
116
- const useI18n = () => {
117
- const params = useParams();
118
- const userPermissions = useAuth("useI18n", (state) => state.permissions);
119
- const actions = React.useMemo(() => {
120
- const permissions = userPermissions.filter((permission) => permission.subject === params.slug);
121
- return permissions.reduce(
122
- (acc, permission) => {
123
- const [actionShorthand] = permission.action.split(".").slice(-1);
124
- return {
125
- ...acc,
126
- [`can${capitalize(actionShorthand)}`]: permission.properties?.locales ?? []
127
- };
128
- },
129
- { canCreate: [], canRead: [], canUpdate: [], canDelete: [], canPublish: [] }
130
- );
131
- }, [params.slug, userPermissions]);
132
- const { schema } = unstable_useDocument(
133
- {
134
- // We can non-null assert these because below we skip the query if they are not present
135
- collectionType: params.collectionType,
136
- model: params.slug
137
- },
138
- {
139
- skip: !params.slug || !params.collectionType
140
- }
141
- );
142
- if (doesPluginOptionsHaveI18nLocalized(schema?.pluginOptions)) {
143
- return {
144
- hasI18n: schema.pluginOptions.i18n.localized,
145
- ...actions
146
- };
147
- }
148
- return {
149
- hasI18n: false,
150
- ...actions
151
- };
152
- };
153
- const i18nApi = adminApi.enhanceEndpoints({
154
- addTagTypes: ["Locale"]
155
- });
156
- const localesApi = i18nApi.injectEndpoints({
157
- endpoints: (builder) => ({
158
- createLocale: builder.mutation({
159
- query: (data) => ({
160
- url: "/i18n/locales",
161
- method: "POST",
162
- data
163
- }),
164
- invalidatesTags: [{ type: "Locale", id: "LIST" }]
165
- }),
166
- deleteLocale: builder.mutation({
167
- query: (id) => ({
168
- url: `/i18n/locales/${id}`,
169
- method: "DELETE"
170
- }),
171
- invalidatesTags: (result, error, id) => [{ type: "Locale", id }]
172
- }),
173
- getLocales: builder.query({
174
- query: () => "/i18n/locales",
175
- providesTags: (res) => [
176
- { type: "Locale", id: "LIST" },
177
- ...Array.isArray(res) ? res.map((locale) => ({
178
- type: "Locale",
179
- id: locale.id
180
- })) : []
181
- ]
182
- }),
183
- getDefaultLocales: builder.query({
184
- query: () => "/i18n/iso-locales"
185
- }),
186
- updateLocale: builder.mutation({
187
- query: ({ id, ...data }) => ({
188
- url: `/i18n/locales/${id}`,
189
- method: "PUT",
190
- data
191
- }),
192
- invalidatesTags: (result, error, { id }) => [{ type: "Locale", id }]
193
- })
194
- })
195
- });
196
- const {
197
- useCreateLocaleMutation,
198
- useDeleteLocaleMutation,
199
- useGetLocalesQuery,
200
- useGetDefaultLocalesQuery,
201
- useUpdateLocaleMutation
202
- } = localesApi;
203
- const relationsApi = i18nApi.injectEndpoints({
204
- overrideExisting: true,
205
- endpoints: (builder) => ({
206
- getManyDraftRelationCount: builder.query({
207
- query: ({ model, ...params }) => ({
208
- url: `/content-manager/collection-types/${model}/actions/countManyEntriesDraftRelations`,
209
- method: "GET",
210
- config: {
211
- params
212
- }
213
- }),
214
- transformResponse: (response) => response.data
215
- })
216
- })
217
- });
218
- const { useGetManyDraftRelationCountQuery } = relationsApi;
219
- const isErrorMessageDescriptor = (object) => {
220
- return typeof object === "object" && object !== null && "id" in object && "defaultMessage" in object;
221
- };
222
- const EntryValidationText = ({ status = "draft", validationErrors }) => {
223
- const { formatMessage } = useIntl();
224
- const getErrorStr = (key, value) => {
225
- if (typeof value === "string") {
226
- return `${key}: ${value}`;
227
- } else if (isErrorMessageDescriptor(value)) {
228
- return `${key}: ${formatMessage(value)}`;
229
- } else if (Array.isArray(value)) {
230
- return value.map((v) => getErrorStr(key, v)).join(" ");
231
- } else if (typeof value === "object" && !Array.isArray(value)) {
232
- return Object.entries(value).map(([k, v]) => getErrorStr(k, v)).join(" ");
233
- } else {
234
- return "";
235
- }
236
- };
237
- if (validationErrors) {
238
- const validationErrorsMessages = Object.entries(validationErrors).map(([key, value]) => {
239
- return getErrorStr(key, value);
240
- }).join(" ");
241
- return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
242
- /* @__PURE__ */ jsx(CrossCircle, { fill: "danger600" }),
243
- /* @__PURE__ */ jsx(Tooltip, { label: validationErrorsMessages, children: /* @__PURE__ */ jsx(
244
- Typography,
245
- {
246
- maxWidth: "30rem",
247
- textColor: "danger600",
248
- variant: "omega",
249
- fontWeight: "semiBold",
250
- ellipsis: true,
251
- children: validationErrorsMessages
252
- }
253
- ) })
254
- ] });
255
- }
256
- if (status === "published") {
257
- return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
258
- /* @__PURE__ */ jsx(CheckCircle, { fill: "success600" }),
259
- /* @__PURE__ */ jsx(Typography, { textColor: "success600", fontWeight: "bold", children: formatMessage({
260
- id: "content-manager.bulk-publish.already-published",
261
- defaultMessage: "Already Published"
262
- }) })
263
- ] });
264
- }
265
- if (status === "modified") {
266
- return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
267
- /* @__PURE__ */ jsx(ArrowsCounterClockwise, { fill: "alternative600" }),
268
- /* @__PURE__ */ jsx(Typography, { children: formatMessage({
269
- id: "app.utils.ready-to-publish-changes",
270
- defaultMessage: "Ready to publish changes"
271
- }) })
272
- ] });
273
- }
274
- return /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
275
- /* @__PURE__ */ jsx(CheckCircle, { fill: "success600" }),
276
- /* @__PURE__ */ jsx(Typography, { children: formatMessage({
277
- id: "app.utils.ready-to-publish",
278
- defaultMessage: "Ready to publish"
279
- }) })
280
- ] });
281
- };
282
- const BoldChunk = (chunks) => /* @__PURE__ */ jsx(Typography, { fontWeight: "bold", children: chunks });
283
- const BulkLocaleActionModal = ({
284
- headers,
285
- rows,
286
- localesMetadata,
287
- validationErrors = {}
288
- }) => {
289
- const { formatMessage } = useIntl();
290
- const selectedRows = useTable(
291
- "BulkLocaleActionModal",
292
- (state) => state.selectedRows
293
- );
294
- const getFormattedCountMessage = () => {
295
- const currentStatusByLocale = rows.reduce((acc, { locale, status }) => {
296
- acc[locale] = status;
297
- return acc;
298
- }, {});
299
- const localesWithErrors = Object.keys(validationErrors);
300
- const alreadyPublishedCount = selectedRows.filter(
301
- ({ locale }) => currentStatusByLocale[locale] === "published"
302
- ).length;
303
- const readyToPublishCount = selectedRows.filter(
304
- ({ locale }) => (currentStatusByLocale[locale] === "draft" || currentStatusByLocale[locale] === "modified") && !localesWithErrors.includes(locale)
305
- ).length;
306
- const withErrorsCount = localesWithErrors.length;
307
- return formatMessage(
308
- {
309
- id: "content-manager.containers.list.selectedEntriesModal.selectedCount",
310
- defaultMessage: "<b>{alreadyPublishedCount}</b> {alreadyPublishedCount, plural, =0 {entries} one {entry} other {entries}} already published. <b>{readyToPublishCount}</b> {readyToPublishCount, plural, =0 {entries} one {entry} other {entries}} ready to publish. <b>{withErrorsCount}</b> {withErrorsCount, plural, =0 {entries} one {entry} other {entries}} waiting for action."
311
- },
312
- {
313
- withErrorsCount,
314
- readyToPublishCount,
315
- alreadyPublishedCount,
316
- b: BoldChunk
317
- }
318
- );
319
- };
320
- return /* @__PURE__ */ jsxs(React.Fragment, { children: [
321
- /* @__PURE__ */ jsx(Typography, { children: getFormattedCountMessage() }),
322
- /* @__PURE__ */ jsx(Box, { marginTop: 5, children: /* @__PURE__ */ jsxs(Table.Content, { children: [
323
- /* @__PURE__ */ jsxs(Table.Head, { children: [
324
- /* @__PURE__ */ jsx(Table.HeaderCheckboxCell, {}),
325
- headers.map((head) => /* @__PURE__ */ jsx(Table.HeaderCell, { ...head }, head.name))
326
- ] }),
327
- /* @__PURE__ */ jsx(Table.Body, { children: rows.map(({ locale, status }, index2) => {
328
- const error = validationErrors?.[locale] ?? null;
329
- const statusVariant = status === "draft" ? "primary" : status === "published" ? "success" : "alternative";
330
- return /* @__PURE__ */ jsxs(Table.Row, { children: [
331
- /* @__PURE__ */ jsx(Table.CheckboxCell, { id: locale, "aria-label": `Select ${locale}` }),
332
- /* @__PURE__ */ jsx(Table.Cell, { children: /* @__PURE__ */ jsx(Typography, { variant: "sigma", textColor: "neutral600", children: Array.isArray(localesMetadata) ? localesMetadata.find((localeEntry) => localeEntry.code === locale)?.name : locale }) }),
333
- /* @__PURE__ */ jsx(Table.Cell, { children: /* @__PURE__ */ jsx(Box, { display: "flex", children: /* @__PURE__ */ jsx(
334
- Status,
335
- {
336
- display: "flex",
337
- paddingLeft: "6px",
338
- paddingRight: "6px",
339
- paddingTop: "2px",
340
- paddingBottom: "2px",
341
- showBullet: false,
342
- size: "S",
343
- variant: statusVariant,
344
- children: /* @__PURE__ */ jsx(Typography, { tag: "span", variant: "pi", fontWeight: "bold", children: capitalize(status) })
345
- }
346
- ) }) }),
347
- /* @__PURE__ */ jsx(Table.Cell, { children: /* @__PURE__ */ jsx(EntryValidationText, { validationErrors: error, status }) }),
348
- /* @__PURE__ */ jsx(Table.Cell, { children: /* @__PURE__ */ jsx(
349
- IconButton,
350
- {
351
- tag: Link,
352
- to: {
353
- search: stringify({ plugins: { i18n: { locale } } })
354
- },
355
- label: formatMessage(
356
- {
357
- id: getTranslation("Settings.list.actions.edit"),
358
- defaultMessage: "Edit {name} locale"
359
- },
360
- {
361
- name: locale
362
- }
363
- ),
364
- borderWidth: 0,
365
- children: /* @__PURE__ */ jsx(Pencil, {})
366
- }
367
- ) })
368
- ] }, index2);
369
- }) })
370
- ] }) })
371
- ] });
372
- };
373
- const LocalePickerAction = ({
374
- document,
375
- meta,
376
- model,
377
- collectionType,
378
- documentId
379
- }) => {
380
- const { formatMessage } = useIntl();
381
- const [{ query }, setQuery] = useQueryParams();
382
- const { hasI18n, canCreate, canRead } = useI18n();
383
- const { data: locales = [] } = useGetLocalesQuery();
384
- const { schema } = unstable_useDocument({ model, collectionType, documentId });
385
- const handleSelect = React.useCallback(
386
- (value) => {
387
- setQuery({
388
- plugins: {
389
- ...query.plugins,
390
- i18n: {
391
- locale: value
392
- }
393
- }
394
- });
395
- },
396
- [query.plugins, setQuery]
397
- );
398
- React.useEffect(() => {
399
- if (!Array.isArray(locales) || !hasI18n) {
400
- return;
401
- }
402
- const currentDesiredLocale = query.plugins?.i18n?.locale;
403
- const doesLocaleExist = locales.find((loc) => loc.code === currentDesiredLocale);
404
- const defaultLocale = locales.find((locale) => locale.isDefault);
405
- if (!doesLocaleExist && defaultLocale?.code) {
406
- handleSelect(defaultLocale.code);
407
- }
408
- }, [handleSelect, hasI18n, locales, query.plugins?.i18n?.locale]);
409
- if (!hasI18n || !Array.isArray(locales) || locales.length === 0) {
410
- return null;
411
- }
412
- const currentLocale = query.plugins?.i18n?.locale || locales.find((loc) => loc.isDefault)?.code;
413
- const allCurrentLocales = [
414
- { status: getDocumentStatus(document, meta), locale: currentLocale },
415
- ...meta?.availableLocales ?? []
416
- ];
417
- return {
418
- label: formatMessage({
419
- id: getTranslation("Settings.locales.modal.locales.label"),
420
- defaultMessage: "Locales"
421
- }),
422
- options: locales.map((locale) => {
423
- const currentLocaleDoc = allCurrentLocales.find(
424
- (doc) => "locale" in doc ? doc.locale === locale.code : false
425
- );
426
- const status = currentLocaleDoc?.status ?? "draft";
427
- const permissionsToCheck = currentLocaleDoc ? canCreate : canRead;
428
- const statusVariant = status === "draft" ? "primary" : status === "published" ? "success" : "alternative";
429
- return {
430
- disabled: !permissionsToCheck.includes(locale.code),
431
- value: locale.code,
432
- label: locale.name,
433
- startIcon: schema?.options?.draftAndPublish ? /* @__PURE__ */ jsx(
434
- Status,
435
- {
436
- display: "flex",
437
- paddingLeft: "6px",
438
- paddingRight: "6px",
439
- paddingTop: "2px",
440
- paddingBottom: "2px",
441
- showBullet: false,
442
- size: "S",
443
- variant: statusVariant,
444
- children: /* @__PURE__ */ jsx(Typography, { tag: "span", variant: "pi", fontWeight: "bold", children: capitalize(status) })
445
- }
446
- ) : null
447
- };
448
- }),
449
- onSelect: handleSelect,
450
- value: currentLocale
451
- };
452
- };
453
- const getDocumentStatus = (document, meta) => {
454
- const docStatus = document?.status;
455
- const statuses = meta?.availableStatus ?? [];
456
- if (!docStatus) {
457
- return "draft";
458
- }
459
- if (docStatus === "draft" && statuses.find((doc) => doc.publishedAt !== null)) {
460
- return "published";
461
- }
462
- return docStatus;
463
- };
464
- const DeleteLocaleAction = ({
465
- document,
466
- documentId,
467
- model,
468
- collectionType
469
- }) => {
470
- const { formatMessage } = useIntl();
471
- const navigate = useNavigate();
472
- const { toggleNotification } = useNotification();
473
- const { delete: deleteAction } = unstable_useDocumentActions();
474
- const { hasI18n, canDelete } = useI18n();
475
- if (!hasI18n) {
476
- return null;
477
- }
478
- return {
479
- disabled: document?.locale && !canDelete.includes(document.locale) || !document || !document.id,
480
- position: ["header", "table-row"],
481
- label: formatMessage({
482
- id: getTranslation("actions.delete.label"),
483
- defaultMessage: "Delete locale"
484
- }),
485
- icon: /* @__PURE__ */ jsx(StyledTrash, {}),
486
- variant: "danger",
487
- dialog: {
488
- type: "dialog",
489
- title: formatMessage({
490
- id: getTranslation("actions.delete.dialog.title"),
491
- defaultMessage: "Confirmation"
492
- }),
493
- content: /* @__PURE__ */ jsxs(Flex, { direction: "column", gap: 2, children: [
494
- /* @__PURE__ */ jsx(WarningCircle, { width: "24px", height: "24px", fill: "danger600" }),
495
- /* @__PURE__ */ jsx(Typography, { tag: "p", variant: "omega", textAlign: "center", children: formatMessage({
496
- id: getTranslation("actions.delete.dialog.body"),
497
- defaultMessage: "Are you sure?"
498
- }) })
499
- ] }),
500
- onConfirm: async () => {
501
- if (!documentId || !document?.locale) {
502
- console.error(
503
- "You're trying to delete a document without an id or locale, this is likely a bug with Strapi. Please open an issue."
504
- );
505
- toggleNotification({
506
- message: formatMessage({
507
- id: getTranslation("actions.delete.error"),
508
- defaultMessage: "An error occurred while trying to delete the document locale."
509
- }),
510
- type: "danger"
511
- });
512
- return;
513
- }
514
- const res = await deleteAction({
515
- documentId,
516
- model,
517
- collectionType,
518
- params: { locale: document.locale }
519
- });
520
- if (!("error" in res)) {
521
- navigate({ pathname: `../${collectionType}/${model}` }, { replace: true });
522
- }
523
- }
524
- }
525
- };
526
- };
527
- const BulkLocalePublishAction = ({
528
- document: baseDocument,
529
- documentId,
530
- model,
531
- collectionType
532
- }) => {
533
- const baseLocale = baseDocument?.locale ?? null;
534
- const [{ query }] = useQueryParams();
535
- const params = React.useMemo(() => buildValidParams(query), [query]);
536
- const isPublishedTab = query.status === "published";
537
- const { formatMessage } = useIntl();
538
- const { hasI18n, canPublish } = useI18n();
539
- const { toggleNotification } = useNotification();
540
- const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
541
- const [selectedRows, setSelectedRows] = React.useState([]);
542
- const [isDraftRelationConfirmationOpen, setIsDraftRelationConfirmationOpen] = React.useState(false);
543
- const { publishMany: publishManyAction } = unstable_useDocumentActions();
544
- const {
545
- document,
546
- meta: documentMeta,
547
- schema,
548
- validate
549
- } = unstable_useDocument({
550
- model,
551
- collectionType,
552
- documentId,
553
- params: {
554
- locale: baseLocale
555
- }
556
- });
557
- const { data: localesMetadata = [] } = useGetLocalesQuery();
558
- const headers = [
559
- {
560
- label: formatMessage({
561
- id: "global.name",
562
- defaultMessage: "Name"
563
- }),
564
- name: "name"
565
- },
566
- {
567
- label: formatMessage({
568
- id: getTranslation("CMEditViewBulkLocale.status"),
569
- defaultMessage: "Status"
570
- }),
571
- name: "status"
572
- },
573
- {
574
- label: formatMessage({
575
- id: getTranslation("CMEditViewBulkLocale.publication-status"),
576
- defaultMessage: "Publication Status"
577
- }),
578
- name: "publication-status"
579
- }
580
- ];
581
- const [rows, validationErrors] = React.useMemo(() => {
582
- if (!document || !documentMeta?.availableLocales) {
583
- return [[], {}];
584
- }
585
- const rowsFromMeta = documentMeta?.availableLocales.map((doc) => {
586
- const { locale, status } = doc;
587
- return { locale, status };
588
- });
589
- rowsFromMeta.unshift({
590
- locale: document.locale,
591
- status: document.status
592
- });
593
- const allDocuments = [document, ...documentMeta?.availableLocales ?? []];
594
- const errors = allDocuments.reduce((errs, document2) => {
595
- if (!document2) {
596
- return errs;
597
- }
598
- const validation = validate(document2);
599
- if (validation !== null) {
600
- errs[document2.locale] = validation;
601
- }
602
- return errs;
603
- }, {});
604
- return [rowsFromMeta, errors];
605
- }, [document, documentMeta?.availableLocales, validate]);
606
- const localesToPublish = selectedRows.reduce((acc, selectedRow) => {
607
- if (selectedRow.status !== "published" && !Object.keys(validationErrors).includes(selectedRow.locale)) {
608
- acc.push(selectedRow.locale);
609
- }
610
- return acc;
611
- }, []);
612
- const {
613
- data: draftRelationsCount = 0,
614
- isLoading: isDraftRelationsLoading,
615
- error: isDraftRelationsError
616
- } = useGetManyDraftRelationCountQuery(
617
- {
618
- model,
619
- documentIds: [documentId],
620
- locale: localesToPublish
621
- },
622
- {
623
- skip: !documentId || localesToPublish.length === 0
624
- }
625
- );
626
- React.useEffect(() => {
627
- if (isDraftRelationsError) {
628
- toggleNotification({
629
- type: "danger",
630
- message: formatAPIError(isDraftRelationsError)
631
- });
632
- }
633
- }, [isDraftRelationsError, toggleNotification, formatAPIError]);
634
- if (!schema?.options?.draftAndPublish) {
635
- return null;
636
- }
637
- if (!hasI18n) {
638
- return null;
639
- }
640
- if (!documentId) {
641
- return null;
642
- }
643
- const publish = async () => {
644
- await publishManyAction({
645
- model,
646
- documentIds: [documentId],
647
- params: {
648
- ...params,
649
- locale: localesToPublish
650
- }
651
- });
652
- setSelectedRows([]);
653
- };
654
- const handleAction = async () => {
655
- if (draftRelationsCount > 0) {
656
- setIsDraftRelationConfirmationOpen(true);
657
- } else {
658
- await publish();
659
- }
660
- };
661
- const isUnpublish = document?.status === "published";
662
- if (isUnpublish) {
663
- console.warn(["I18N"], "Bulk locale unpublish modal not implemented");
664
- }
665
- if (isDraftRelationConfirmationOpen) {
666
- return {
667
- label: formatMessage({
668
- id: "app.components.ConfirmDialog.title",
669
- defaultMessage: "Confirmation"
670
- }),
671
- variant: "danger",
672
- dialog: {
673
- onCancel: () => {
674
- setIsDraftRelationConfirmationOpen(false);
675
- },
676
- onConfirm: async () => {
677
- await publish();
678
- setIsDraftRelationConfirmationOpen(false);
679
- },
680
- type: "dialog",
681
- title: formatMessage({
682
- id: getTranslation("actions.publish.dialog.title"),
683
- defaultMessage: "Confirmation"
684
- }),
685
- content: /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "center", gap: 2, children: [
686
- /* @__PURE__ */ jsx(WarningCircle, { width: "2.4rem", height: "2.4rem", fill: "danger600" }),
687
- /* @__PURE__ */ jsx(Typography, { textAlign: "center", children: formatMessage({
688
- id: getTranslation("CMEditViewBulkLocale.draft-relation-warning"),
689
- defaultMessage: "Some locales are related to draft entries. Publishing them could leave broken links in your app."
690
- }) }),
691
- /* @__PURE__ */ jsx(Typography, { textAlign: "center", children: formatMessage({
692
- id: getTranslation("CMEditViewBulkLocale.continue-confirmation"),
693
- defaultMessage: "Are you sure you want to continue?"
694
- }) })
695
- ] })
696
- }
697
- };
698
- }
699
- return {
700
- label: formatMessage({
701
- id: getTranslation("CMEditViewBulkLocale.publish-title"),
702
- defaultMessage: "Publish Multiple Locales"
703
- }),
704
- icon: /* @__PURE__ */ jsx(ListPlus, {}),
705
- disabled: isPublishedTab || !canPublish,
706
- position: ["panel"],
707
- variant: "secondary",
708
- dialog: {
709
- type: "modal",
710
- title: formatMessage({
711
- id: getTranslation("CMEditViewBulkLocale.publish-title"),
712
- defaultMessage: "Publish Multiple Locales"
713
- }),
714
- content: () => {
715
- return /* @__PURE__ */ jsx(
716
- Table.Root,
717
- {
718
- headers,
719
- rows: rows.map((row) => ({
720
- ...row,
721
- id: row.locale
722
- })),
723
- selectedRows,
724
- onSelectedRowsChange: (tableSelectedRows) => setSelectedRows(tableSelectedRows),
725
- children: /* @__PURE__ */ jsx(
726
- BulkLocaleActionModal,
727
- {
728
- validationErrors,
729
- headers,
730
- rows,
731
- localesMetadata
732
- }
733
- )
734
- }
735
- );
736
- },
737
- footer: () => /* @__PURE__ */ jsx(Flex, { justifyContent: "flex-end", children: /* @__PURE__ */ jsx(
738
- Button$1,
739
- {
740
- loading: isDraftRelationsLoading,
741
- disabled: localesToPublish.length === 0,
742
- variant: "default",
743
- onClick: handleAction,
744
- children: formatMessage({
745
- id: "app.utils.publish",
746
- defaultMessage: "Publish"
747
- })
748
- }
749
- ) })
750
- }
751
- };
752
- };
753
- const StyledTrash = styled(Trash)`
754
- path {
755
- fill: currentColor;
756
- }
757
- `;
758
- const Emphasis = (chunks) => {
759
- return /* @__PURE__ */ jsx(Typography, { fontWeight: "semiBold", textColor: "danger500", children: chunks });
760
- };
761
- const DeleteModalAdditionalInfo = () => {
762
- const { hasI18n } = useI18n();
763
- const { formatMessage } = useIntl();
764
- if (!hasI18n) {
765
- return null;
766
- }
767
- return /* @__PURE__ */ jsx(Typography, { textColor: "danger500", children: formatMessage(
768
- {
769
- id: getTranslation("Settings.list.actions.deleteAdditionalInfos"),
770
- defaultMessage: "This will delete the active locale versions <em>(from Internationalization)</em>"
771
- },
772
- {
773
- em: Emphasis
774
- }
775
- ) });
776
- };
777
- const PublishModalAdditionalInfo = () => {
778
- const { hasI18n } = useI18n();
779
- const { formatMessage } = useIntl();
780
- if (!hasI18n) {
781
- return null;
782
- }
783
- return /* @__PURE__ */ jsx(Typography, { textColor: "danger500", children: formatMessage(
784
- {
785
- id: getTranslation("Settings.list.actions.publishAdditionalInfos"),
786
- defaultMessage: "This will publish the active locale versions <em>(from Internationalization)</em>"
787
- },
788
- {
789
- em: Emphasis
790
- }
791
- ) });
792
- };
793
- const UnpublishModalAdditionalInfo = () => {
794
- const { hasI18n } = useI18n();
795
- const { formatMessage } = useIntl();
796
- if (!hasI18n) {
797
- return null;
798
- }
799
- return /* @__PURE__ */ jsx(Typography, { textColor: "danger500", children: formatMessage(
800
- {
801
- id: getTranslation("Settings.list.actions.unpublishAdditionalInfos"),
802
- defaultMessage: "This will unpublish the active locale versions <em>(from Internationalization)</em>"
803
- },
804
- {
805
- em: Emphasis
806
- }
807
- ) });
808
- };
809
- const Initializer = ({ setPlugin }) => {
810
- const setPluginRef = React.useRef(setPlugin);
811
- React.useEffect(() => {
812
- setPluginRef.current(pluginId);
813
- }, []);
814
- return null;
815
- };
816
- const LocalePicker = () => {
817
- const { formatMessage } = useIntl();
818
- const [{ query }, setQuery] = useQueryParams();
819
- const { hasI18n, canRead, canCreate } = useI18n();
820
- const { data: locales = [] } = useGetLocalesQuery(void 0, {
821
- skip: !hasI18n
822
- });
823
- const handleChange = React.useCallback(
824
- (code, replace = false) => {
825
- setQuery(
826
- {
827
- page: 1,
828
- plugins: { ...query.plugins, i18n: { locale: code } }
829
- },
830
- "push",
831
- replace
832
- );
833
- },
834
- [query.plugins, setQuery]
835
- );
836
- React.useEffect(() => {
837
- if (!Array.isArray(locales) || !hasI18n) {
838
- return;
839
- }
840
- const currentDesiredLocale = query.plugins?.i18n?.locale;
841
- const doesLocaleExist = locales.find((loc) => loc.code === currentDesiredLocale);
842
- const defaultLocale = locales.find((locale) => locale.isDefault);
843
- if (!doesLocaleExist && defaultLocale?.code) {
844
- handleChange(defaultLocale.code, true);
845
- }
846
- }, [hasI18n, handleChange, locales, query.plugins?.i18n?.locale]);
847
- if (!hasI18n || !Array.isArray(locales) || locales.length === 0) {
848
- return null;
849
- }
850
- const displayedLocales = locales.filter((locale) => {
851
- return canCreate.includes(locale.code) || canRead.includes(locale.code);
852
- });
853
- return /* @__PURE__ */ jsx(
854
- SingleSelect,
855
- {
856
- size: "S",
857
- "aria-label": formatMessage({
858
- id: getTranslation("actions.select-locale"),
859
- defaultMessage: "Select locale"
860
- }),
861
- value: query.plugins?.i18n?.locale || locales.find((locale) => locale.isDefault)?.code,
862
- onChange: handleChange,
863
- children: displayedLocales.map((locale) => /* @__PURE__ */ jsx(SingleSelectOption, { value: locale.code, children: locale.name }, locale.id))
864
- }
865
- );
866
- };
867
- const PERMISSIONS = {
868
- accessMain: [{ action: "plugin::i18n.locale.read", subject: null }],
869
- create: [{ action: "plugin::i18n.locale.create", subject: null }],
870
- delete: [{ action: "plugin::i18n.locale.delete", subject: null }],
871
- update: [{ action: "plugin::i18n.locale.update", subject: null }],
872
- read: [{ action: "plugin::i18n.locale.read", subject: null }]
873
- };
874
- const mutateEditViewHook = ({ layout }) => {
875
- if (!("i18n" in layout.options) || typeof layout.options.i18n === "object" && layout.options.i18n !== null && "localized" in layout.options.i18n && !layout.options.i18n.localized) {
876
- return { layout };
877
- }
878
- const components = Object.entries(layout.components).reduce(
879
- (acc, [key, componentLayout]) => {
880
- return {
881
- ...acc,
882
- [key]: {
883
- ...componentLayout,
884
- layout: componentLayout.layout.map((row) => row.map(addLabelActionToField))
885
- }
886
- };
887
- },
888
- {}
889
- );
890
- return {
891
- layout: {
892
- ...layout,
893
- components,
894
- layout: layout.layout.map((panel) => panel.map((row) => row.map(addLabelActionToField)))
895
- }
896
- };
897
- };
898
- const addLabelActionToField = (field) => {
899
- const isFieldLocalized = doesFieldHaveI18nPluginOpt(field.attribute.pluginOptions) ? field.attribute.pluginOptions.i18n.localized : true;
900
- const labelActionProps = {
901
- title: {
902
- id: isFieldLocalized ? getTranslation("Field.localized") : getTranslation("Field.not-localized"),
903
- defaultMessage: isFieldLocalized ? "This value is unique for the selected locale" : "This value is the same across all locales"
904
- },
905
- icon: isFieldLocalized ? /* @__PURE__ */ jsx(Earth, {}) : /* @__PURE__ */ jsx(EarthStriked, {})
906
- };
907
- return {
908
- ...field,
909
- labelAction: /* @__PURE__ */ jsx(LabelAction, { ...labelActionProps })
910
- };
911
- };
912
- const doesFieldHaveI18nPluginOpt = (pluginOpts) => {
913
- if (!pluginOpts) {
914
- return false;
915
- }
916
- return "i18n" in pluginOpts && typeof pluginOpts.i18n === "object" && pluginOpts.i18n !== null && "localized" in pluginOpts.i18n;
917
- };
918
- const LabelAction = ({ title, icon }) => {
919
- const { formatMessage } = useIntl();
920
- return /* @__PURE__ */ jsxs(Span, { tag: "span", children: [
921
- /* @__PURE__ */ jsx(VisuallyHidden, { tag: "span", children: formatMessage(title) }),
922
- React.cloneElement(icon, {
923
- "aria-hidden": true,
924
- focusable: false
925
- // See: https://allyjs.io/tutorials/focusing-in-svg.html#making-svg-elements-focusable
926
- })
927
- ] });
928
- };
929
- const Span = styled(Flex)`
930
- svg {
931
- width: 12px;
932
- height: 12px;
933
-
934
- fill: ${({ theme }) => theme.colors.neutral500};
935
-
936
- path {
937
- fill: ${({ theme }) => theme.colors.neutral500};
938
- }
939
- }
940
- `;
941
- const LocaleListCell = ({
942
- documentId,
943
- locale: currentLocale,
944
- collectionType,
945
- model
946
- }) => {
947
- const { meta, isLoading } = unstable_useDocument({
948
- documentId,
949
- collectionType,
950
- model,
951
- params: {
952
- locale: currentLocale
953
- }
954
- });
955
- const { locale: language } = useIntl();
956
- const { data: locales = [] } = useGetLocalesQuery();
957
- const formatter = useCollator(language, {
958
- sensitivity: "base"
959
- });
960
- if (!Array.isArray(locales) || isLoading) {
961
- return null;
962
- }
963
- const availableLocales = meta?.availableLocales.map((doc) => doc.locale) ?? [];
964
- const localesForDocument = locales.reduce((acc, locale) => {
965
- const createdLocale = [currentLocale, ...availableLocales].find((loc) => {
966
- return loc === locale.code;
967
- });
968
- if (createdLocale) {
969
- acc.push(locale);
970
- }
971
- return acc;
972
- }, []).map((locale) => {
973
- if (locale.isDefault) {
974
- return `${locale.name} (default)`;
975
- }
976
- return locale.name;
977
- }).toSorted((a, b) => formatter.compare(a, b));
978
- return /* @__PURE__ */ jsxs(Popover.Root, { children: [
979
- /* @__PURE__ */ jsx(Popover.Trigger, { children: /* @__PURE__ */ jsx(Button, { type: "button", onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsxs(
980
- ActionWrapper,
981
- {
982
- minWidth: "100%",
983
- alignItems: "center",
984
- justifyContent: "center",
985
- height: "3.2rem",
986
- width: "3.2rem",
987
- children: [
988
- /* @__PURE__ */ jsx(Typography, { textColor: "neutral800", ellipsis: true, children: localesForDocument.join(", ") }),
989
- /* @__PURE__ */ jsx(Flex, { children: /* @__PURE__ */ jsx(CaretDown, {}) })
990
- ]
991
- }
992
- ) }) }),
993
- /* @__PURE__ */ jsx(Popover.Content, { sideOffset: 16, children: /* @__PURE__ */ jsx("ul", { children: localesForDocument.map((name) => /* @__PURE__ */ jsx(Box, { padding: 3, tag: "li", children: /* @__PURE__ */ jsx(Typography, { children: name }) }, name)) }) })
994
- ] });
995
- };
996
- const Button = styled.button`
997
- width: 100%;
998
-
999
- svg {
1000
- > g,
1001
- path {
1002
- fill: ${({ theme }) => theme.colors.neutral500};
1003
- }
1004
- }
1005
- &:hover {
1006
- svg {
1007
- > g,
1008
- path {
1009
- fill: ${({ theme }) => theme.colors.neutral600};
1010
- }
1011
- }
1012
- }
1013
- &:active {
1014
- svg {
1015
- > g,
1016
- path {
1017
- fill: ${({ theme }) => theme.colors.neutral400};
1018
- }
1019
- }
1020
- }
1021
- `;
1022
- const ActionWrapper = styled(Flex)`
1023
- svg {
1024
- height: 0.4rem;
1025
- }
1026
- `;
1027
- const addColumnToTableHook = ({ displayedHeaders, layout }) => {
1028
- const { options } = layout;
1029
- const isFieldLocalized = doesPluginOptionsHaveI18nLocalized(options) ? options.i18n.localized : false;
1030
- if (!isFieldLocalized) {
1031
- return { displayedHeaders, layout };
1032
- }
1033
- return {
1034
- displayedHeaders: [
1035
- ...displayedHeaders,
1036
- {
1037
- attribute: { type: "string" },
1038
- label: {
1039
- id: getTranslation("list-view.table.header.label"),
1040
- defaultMessage: "Available in"
1041
- },
1042
- searchable: false,
1043
- sortable: false,
1044
- name: "locales",
1045
- // @ts-expect-error – ID is seen as number | string; this will change when we move the type over.
1046
- cellFormatter: (props, _header, meta) => /* @__PURE__ */ jsx(LocaleListCell, { ...props, ...meta })
1047
- }
1048
- ],
1049
- layout
1050
- };
1051
- };
1052
- const addLocaleToReleasesHook = ({ displayedHeaders = [] }) => {
1053
- return {
1054
- displayedHeaders: [
1055
- // TODO: Fix when migrating to v5
1056
- // ...displayedHeaders,
1057
- {
1058
- key: "__locale__",
1059
- fieldSchema: { type: "string" },
1060
- metadatas: {
1061
- label: {
1062
- id: "content-releases.page.ReleaseDetails.table.header.label.locale",
1063
- defaultMessage: "locale"
1064
- },
1065
- searchable: false,
1066
- sortable: false
1067
- },
1068
- name: "locale"
1069
- }
1070
- ],
1071
- hasI18nEnabled: true
1072
- };
1073
- };
1074
- const extendCTBAttributeInitialDataMiddleware = () => {
1075
- return ({ getState }) => (next) => (action) => {
1076
- const enhanceAction = () => {
1077
- try {
1078
- const store = getState();
1079
- const hasi18nEnabled = get(
1080
- store,
1081
- [
1082
- "content-type-builder_dataManagerProvider",
1083
- "modifiedData",
1084
- "contentType",
1085
- "schema",
1086
- "pluginOptions",
1087
- "i18n",
1088
- "localized"
1089
- ],
1090
- false
1091
- );
1092
- if (hasi18nEnabled) {
1093
- const pluginOptions = action.options ? { ...action.options.pluginOptions, i18n: { localized: true } } : { i18n: { localized: true } };
1094
- return next({
1095
- ...action,
1096
- options: {
1097
- pluginOptions
1098
- }
1099
- });
1100
- }
1101
- return next(action);
1102
- } catch (err) {
1103
- return next(action);
1104
- }
1105
- };
1106
- if (action.type === "ContentTypeBuilder/FormModal/SET_ATTRIBUTE_DATA_SCHEMA" && action.forTarget === "contentType" && !["relation", "component"].includes(action.attributeType) && !action.isEditing) {
1107
- return enhanceAction();
1108
- }
1109
- if (action.type === "ContentTypeBuilder/FormModal/SET_CUSTOM_FIELD_DATA_SCHEMA" && action.forTarget === "contentType" && !action.isEditing) {
1110
- return enhanceAction();
1111
- }
1112
- if ((action.type === "ContentTypeBuilder/FormModal/RESET_PROPS_AND_SET_FORM_FOR_ADDING_AN_EXISTING_COMPO" || action.type === "ContentTypeBuilder/FormModal/RESET_PROPS_AND_SAVE_CURRENT_DATA") && action.forTarget === "contentType") {
1113
- return enhanceAction();
1114
- }
1115
- return next(action);
1116
- };
1117
- };
1118
- const extendCTBInitialDataMiddleware = () => {
1119
- return () => (next) => (action) => {
1120
- if (action.type === "ContentTypeBuilder/FormModal/SET_DATA_TO_EDIT" && action.modalType === "contentType") {
1121
- const i18n = { localized: false };
1122
- const pluginOptions = action.data.pluginOptions ? { ...action.data.pluginOptions, i18n } : { i18n };
1123
- const data = { ...action.data, pluginOptions };
1124
- if (action.actionType === "create") {
1125
- return next({ ...action, data });
1126
- }
1127
- if (!action.data.pluginOptions?.i18n?.localized) {
1128
- return next({ ...action, data });
1129
- }
1130
- }
1131
- return next(action);
1132
- };
1133
- };
1134
- const localeMiddleware = (ctx) => (next) => (permissions) => {
1135
- const match = matchPath("/content-manager/:collectionType/:model?/:id", ctx.pathname);
1136
- if (!match) {
1137
- return next(permissions);
1138
- }
1139
- const search = qs.parse(ctx.search);
1140
- if (typeof search !== "object") {
1141
- return next(permissions);
1142
- }
1143
- if (!("plugins" in search && typeof search.plugins === "object")) {
1144
- return next(permissions);
1145
- }
1146
- if (!("i18n" in search.plugins && typeof search.plugins.i18n === "object" && !Array.isArray(search.plugins.i18n))) {
1147
- return next(permissions);
1148
- }
1149
- const { locale } = search.plugins.i18n;
1150
- if (typeof locale !== "string") {
1151
- return next(permissions);
1152
- }
1153
- const revisedPermissions = permissions.filter(
1154
- (permission) => !permission.properties?.locales || permission.properties.locales.includes(locale)
1155
- );
1156
- return next(revisedPermissions);
1157
- };
1158
- const prefixPluginTranslations = (trad, pluginId2) => {
1159
- if (!pluginId2) {
1160
- throw new TypeError("pluginId can't be empty");
1161
- }
1162
- return Object.keys(trad).reduce((acc, current) => {
1163
- acc[`${pluginId2}.${current}`] = trad[current];
1164
- return acc;
1165
- }, {});
1166
- };
1167
- const mutateCTBContentTypeSchema = (nextSchema, prevSchema) => {
1168
- if (!doesPluginOptionsHaveI18nLocalized(nextSchema.pluginOptions)) {
1169
- return nextSchema;
1170
- }
1171
- const isNextSchemaLocalized = nextSchema.pluginOptions.i18n.localized;
1172
- const isPrevSchemaLocalized = doesPluginOptionsHaveI18nLocalized(
1173
- prevSchema?.schema?.pluginOptions
1174
- ) ? prevSchema?.schema?.pluginOptions.i18n.localized : false;
1175
- if (isNextSchemaLocalized && isPrevSchemaLocalized) {
1176
- return nextSchema;
1177
- }
1178
- if (isNextSchemaLocalized) {
1179
- const attributes = addLocalisationToFields(nextSchema.attributes);
1180
- return { ...nextSchema, attributes };
1181
- }
1182
- if (!isNextSchemaLocalized) {
1183
- const pluginOptions = omit(nextSchema.pluginOptions, "i18n");
1184
- const attributes = disableAttributesLocalisation(nextSchema.attributes);
1185
- return { ...nextSchema, pluginOptions, attributes };
1186
- }
1187
- return nextSchema;
1188
- };
1189
- const addLocalisationToFields = (attributes) => Object.keys(attributes).reduce((acc, current) => {
1190
- const currentAttribute = attributes[current];
1191
- if (LOCALIZED_FIELDS.includes(currentAttribute.type)) {
1192
- const i18n = { localized: true };
1193
- const pluginOptions = currentAttribute.pluginOptions ? { ...currentAttribute.pluginOptions, i18n } : { i18n };
1194
- acc[current] = { ...currentAttribute, pluginOptions };
1195
- return acc;
1196
- }
1197
- acc[current] = currentAttribute;
1198
- return acc;
1199
- }, {});
1200
- const disableAttributesLocalisation = (attributes) => Object.keys(attributes).reduce((acc, current) => {
1201
- acc[current] = omit(attributes[current], "pluginOptions.i18n");
1202
- return acc;
1203
- }, {});
1204
- const index = {
1205
- register(app) {
1206
- app.addMiddlewares([extendCTBAttributeInitialDataMiddleware, extendCTBInitialDataMiddleware]);
1207
- app.addMiddlewares([() => i18nApi.middleware]);
1208
- app.addReducers({
1209
- [i18nApi.reducerPath]: i18nApi.reducer
1210
- });
1211
- app.addRBACMiddleware([localeMiddleware]);
1212
- app.registerPlugin({
1213
- id: pluginId,
1214
- initializer: Initializer,
1215
- isReady: false,
1216
- name: pluginId
1217
- });
1218
- },
1219
- bootstrap(app) {
1220
- app.registerHook("Admin/CM/pages/ListView/inject-column-in-table", addColumnToTableHook);
1221
- app.registerHook("Admin/CM/pages/EditView/mutate-edit-view-layout", mutateEditViewHook);
1222
- app.registerHook(
1223
- "ContentReleases/pages/ReleaseDetails/add-locale-in-releases",
1224
- addLocaleToReleasesHook
1225
- );
1226
- app.addSettingsLink("global", {
1227
- intlLabel: {
1228
- id: getTranslation("plugin.name"),
1229
- defaultMessage: "Internationalization"
1230
- },
1231
- id: "internationalization",
1232
- to: "internationalization",
1233
- Component: () => import("./SettingsPage-D3GMs9sy.mjs").then((mod) => ({ default: mod.ProtectedSettingsPage })),
1234
- permissions: PERMISSIONS.accessMain
1235
- });
1236
- const contentManager = app.getPlugin("content-manager");
1237
- contentManager.apis.addDocumentHeaderAction([LocalePickerAction]);
1238
- contentManager.apis.addDocumentAction((actions) => {
1239
- const indexOfDeleteAction = actions.findIndex((action) => action.type === "delete");
1240
- actions.splice(indexOfDeleteAction, 0, DeleteLocaleAction);
1241
- return actions;
1242
- });
1243
- contentManager.apis.addDocumentAction((actions) => {
1244
- actions.splice(2, 0, BulkLocalePublishAction);
1245
- return actions;
1246
- });
1247
- contentManager.injectComponent("listView", "actions", {
1248
- name: "i18n-locale-filter",
1249
- Component: LocalePicker
1250
- });
1251
- contentManager.injectComponent("listView", "publishModalAdditionalInfos", {
1252
- name: "i18n-publish-bullets-in-modal",
1253
- Component: PublishModalAdditionalInfo
1254
- });
1255
- contentManager.injectComponent("listView", "unpublishModalAdditionalInfos", {
1256
- name: "i18n-unpublish-bullets-in-modal",
1257
- Component: UnpublishModalAdditionalInfo
1258
- });
1259
- contentManager.injectComponent("listView", "deleteModalAdditionalInfos", {
1260
- name: "i18n-delete-bullets-in-modal",
1261
- Component: DeleteModalAdditionalInfo
1262
- });
1263
- const ctbPlugin = app.getPlugin("content-type-builder");
1264
- if (ctbPlugin) {
1265
- const ctbFormsAPI = ctbPlugin.apis.forms;
1266
- ctbFormsAPI.addContentTypeSchemaMutation(mutateCTBContentTypeSchema);
1267
- ctbFormsAPI.components.add({ id: "checkboxConfirmation", component: CheckboxConfirmation });
1268
- ctbFormsAPI.extendContentType({
1269
- validator: () => ({
1270
- i18n: yup.object().shape({
1271
- localized: yup.bool()
1272
- })
1273
- }),
1274
- form: {
1275
- advanced() {
1276
- return [
1277
- {
1278
- name: "pluginOptions.i18n.localized",
1279
- description: {
1280
- id: getTranslation("plugin.schema.i18n.localized.description-content-type"),
1281
- defaultMessage: "Allows translating an entry into different languages"
1282
- },
1283
- type: "checkboxConfirmation",
1284
- intlLabel: {
1285
- id: getTranslation("plugin.schema.i18n.localized.label-content-type"),
1286
- defaultMessage: "Localization"
1287
- }
1288
- }
1289
- ];
1290
- }
1291
- }
1292
- });
1293
- ctbFormsAPI.extendFields(LOCALIZED_FIELDS, {
1294
- validator: (args) => ({
1295
- i18n: yup.object().shape({
1296
- localized: yup.bool().test({
1297
- name: "ensure-unique-localization",
1298
- message: getTranslation("plugin.schema.i18n.ensure-unique-localization"),
1299
- test(value) {
1300
- if (value === void 0 || value) {
1301
- return true;
1302
- }
1303
- const unique = get(args, ["3", "modifiedData", "unique"], null);
1304
- if (unique && !value) {
1305
- return false;
1306
- }
1307
- return true;
1308
- }
1309
- })
1310
- })
1311
- }),
1312
- form: {
1313
- advanced({ contentTypeSchema, forTarget, type, step }) {
1314
- if (forTarget !== "contentType") {
1315
- return [];
1316
- }
1317
- const hasI18nEnabled = get(
1318
- contentTypeSchema,
1319
- ["schema", "pluginOptions", "i18n", "localized"],
1320
- false
1321
- );
1322
- if (!hasI18nEnabled) {
1323
- return [];
1324
- }
1325
- if (type === "component" && step === "1") {
1326
- return [];
1327
- }
1328
- return [
1329
- {
1330
- name: "pluginOptions.i18n.localized",
1331
- description: {
1332
- id: getTranslation("plugin.schema.i18n.localized.description-field"),
1333
- defaultMessage: "The field can have different values in each locale"
1334
- },
1335
- type: "checkbox",
1336
- intlLabel: {
1337
- id: getTranslation("plugin.schema.i18n.localized.label-field"),
1338
- defaultMessage: "Enable localization for this field"
1339
- }
1340
- }
1341
- ];
1342
- }
1343
- }
1344
- });
1345
- }
1346
- },
1347
- async registerTrads({ locales }) {
1348
- const importedTrads = await Promise.all(
1349
- locales.map((locale) => {
1350
- return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/de.json": () => import("./de-9eCAqqrB.mjs"), "./translations/dk.json": () => import("./dk-2qBjxt-P.mjs"), "./translations/en.json": () => import("./en-CM6Pjfyv.mjs"), "./translations/es.json": () => import("./es-DlmMVaBG.mjs"), "./translations/fr.json": () => import("./fr-3S6ke71d.mjs"), "./translations/ko.json": () => import("./ko-qTjQ8IMw.mjs"), "./translations/pl.json": () => import("./pl-B67TSHqT.mjs"), "./translations/ru.json": () => import("./ru-hagMa57T.mjs"), "./translations/tr.json": () => import("./tr-Dw_jmkG-.mjs"), "./translations/zh-Hans.json": () => import("./zh-Hans-Dyc-aR-h.mjs"), "./translations/zh.json": () => import("./zh-57YM4amO.mjs") }), `./translations/${locale}.json`).then(({ default: data }) => {
1351
- return {
1352
- data: prefixPluginTranslations(data, pluginId),
1353
- locale
1354
- };
1355
- }).catch(() => {
1356
- return {
1357
- data: {},
1358
- locale
1359
- };
1360
- });
1361
- })
1362
- );
1363
- return Promise.resolve(importedTrads);
1364
- }
1365
- };
1366
- export {
1367
- PERMISSIONS as P,
1368
- useGetDefaultLocalesQuery as a,
1369
- useDeleteLocaleMutation as b,
1370
- useUpdateLocaleMutation as c,
1371
- useGetLocalesQuery as d,
1372
- getTranslation as g,
1373
- index as i,
1374
- useCreateLocaleMutation as u
1375
- };
1376
- //# sourceMappingURL=index-COk7qNR1.mjs.map