@strapi/i18n 0.0.0-next.820adfc37c687bbcc4a213ae6929c541358b71e8 → 0.0.0-next.83367b80833204c0744701aef452a8d8d2ce25b6

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 (422) hide show
  1. package/dist/admin/components/BulkLocaleActionModal.js +262 -0
  2. package/dist/admin/components/BulkLocaleActionModal.js.map +1 -0
  3. package/dist/admin/components/BulkLocaleActionModal.mjs +260 -0
  4. package/dist/admin/components/BulkLocaleActionModal.mjs.map +1 -0
  5. package/dist/admin/components/CMHeaderActions.js +727 -0
  6. package/dist/admin/components/CMHeaderActions.js.map +1 -0
  7. package/dist/admin/components/CMHeaderActions.mjs +702 -0
  8. package/dist/admin/components/CMHeaderActions.mjs.map +1 -0
  9. package/dist/admin/components/CMListViewModalsAdditionalInformation.js +69 -0
  10. package/dist/admin/components/CMListViewModalsAdditionalInformation.js.map +1 -0
  11. package/dist/admin/components/CMListViewModalsAdditionalInformation.mjs +65 -0
  12. package/dist/admin/components/CMListViewModalsAdditionalInformation.mjs.map +1 -0
  13. package/dist/admin/components/CheckboxConfirmation.js +155 -0
  14. package/dist/admin/components/CheckboxConfirmation.js.map +1 -0
  15. package/dist/admin/components/CheckboxConfirmation.mjs +134 -0
  16. package/dist/admin/components/CheckboxConfirmation.mjs.map +1 -0
  17. package/dist/admin/components/CreateLocale.js +395 -0
  18. package/dist/admin/components/CreateLocale.js.map +1 -0
  19. package/dist/admin/components/CreateLocale.mjs +369 -0
  20. package/dist/admin/components/CreateLocale.mjs.map +1 -0
  21. package/dist/admin/components/DeleteLocale.js +90 -0
  22. package/dist/admin/components/DeleteLocale.js.map +1 -0
  23. package/dist/admin/components/DeleteLocale.mjs +69 -0
  24. package/dist/admin/components/DeleteLocale.mjs.map +1 -0
  25. package/dist/admin/components/EditLocale.js +212 -0
  26. package/dist/admin/components/EditLocale.js.map +1 -0
  27. package/dist/admin/components/EditLocale.mjs +190 -0
  28. package/dist/admin/components/EditLocale.mjs.map +1 -0
  29. package/dist/admin/components/LocaleListCell.js +82 -0
  30. package/dist/admin/components/LocaleListCell.js.map +1 -0
  31. package/dist/admin/components/LocaleListCell.mjs +80 -0
  32. package/dist/admin/components/LocaleListCell.mjs.map +1 -0
  33. package/dist/admin/components/LocalePicker.js +105 -0
  34. package/dist/admin/components/LocalePicker.js.map +1 -0
  35. package/dist/admin/components/LocalePicker.mjs +84 -0
  36. package/dist/admin/components/LocalePicker.mjs.map +1 -0
  37. package/dist/admin/components/LocaleTable.js +143 -0
  38. package/dist/admin/components/LocaleTable.js.map +1 -0
  39. package/dist/admin/components/LocaleTable.mjs +122 -0
  40. package/dist/admin/components/LocaleTable.mjs.map +1 -0
  41. package/dist/admin/constants.js +37 -0
  42. package/dist/admin/constants.js.map +1 -0
  43. package/dist/admin/constants.mjs +35 -0
  44. package/dist/admin/constants.mjs.map +1 -0
  45. package/dist/admin/contentManagerHooks/editView.js +109 -0
  46. package/dist/admin/contentManagerHooks/editView.js.map +1 -0
  47. package/dist/admin/contentManagerHooks/editView.mjs +88 -0
  48. package/dist/admin/contentManagerHooks/editView.mjs.map +1 -0
  49. package/dist/admin/contentManagerHooks/listView.js +43 -0
  50. package/dist/admin/contentManagerHooks/listView.js.map +1 -0
  51. package/dist/admin/contentManagerHooks/listView.mjs +41 -0
  52. package/dist/admin/contentManagerHooks/listView.mjs.map +1 -0
  53. package/dist/admin/contentReleasesHooks/releaseDetailsView.js +20 -0
  54. package/dist/admin/contentReleasesHooks/releaseDetailsView.js.map +1 -0
  55. package/dist/admin/contentReleasesHooks/releaseDetailsView.mjs +18 -0
  56. package/dist/admin/contentReleasesHooks/releaseDetailsView.mjs.map +1 -0
  57. package/dist/admin/hooks/useI18n.js +78 -0
  58. package/dist/admin/hooks/useI18n.js.map +1 -0
  59. package/dist/admin/hooks/useI18n.mjs +57 -0
  60. package/dist/admin/hooks/useI18n.mjs.map +1 -0
  61. package/dist/admin/index.js +225 -5
  62. package/dist/admin/index.js.map +1 -1
  63. package/dist/admin/index.mjs +201 -5
  64. package/dist/admin/index.mjs.map +1 -1
  65. package/dist/admin/middlewares/extendCTBAttributeInitialData.js +71 -0
  66. package/dist/admin/middlewares/extendCTBAttributeInitialData.js.map +1 -0
  67. package/dist/admin/middlewares/extendCTBAttributeInitialData.mjs +69 -0
  68. package/dist/admin/middlewares/extendCTBAttributeInitialData.mjs.map +1 -0
  69. package/dist/admin/middlewares/extendCTBInitialData.js +40 -0
  70. package/dist/admin/middlewares/extendCTBInitialData.js.map +1 -0
  71. package/dist/admin/middlewares/extendCTBInitialData.mjs +38 -0
  72. package/dist/admin/middlewares/extendCTBInitialData.mjs.map +1 -0
  73. package/dist/admin/middlewares/rbac-middleware.js +49 -0
  74. package/dist/admin/middlewares/rbac-middleware.js.map +1 -0
  75. package/dist/admin/middlewares/rbac-middleware.mjs +28 -0
  76. package/dist/admin/middlewares/rbac-middleware.mjs.map +1 -0
  77. package/dist/admin/pages/SettingsPage.js +182 -0
  78. package/dist/admin/pages/SettingsPage.js.map +1 -0
  79. package/dist/admin/pages/SettingsPage.mjs +179 -0
  80. package/dist/admin/pages/SettingsPage.mjs.map +1 -0
  81. package/dist/admin/pluginId.js +6 -0
  82. package/dist/admin/pluginId.js.map +1 -0
  83. package/dist/admin/pluginId.mjs +4 -0
  84. package/dist/admin/pluginId.mjs.map +1 -0
  85. package/dist/admin/services/api.js +14 -0
  86. package/dist/admin/services/api.js.map +1 -0
  87. package/dist/admin/services/api.mjs +12 -0
  88. package/dist/admin/services/api.mjs.map +1 -0
  89. package/dist/admin/services/locales.js +72 -0
  90. package/dist/admin/services/locales.js.map +1 -0
  91. package/dist/admin/services/locales.mjs +66 -0
  92. package/dist/admin/services/locales.mjs.map +1 -0
  93. package/dist/admin/services/relations.js +23 -0
  94. package/dist/admin/services/relations.js.map +1 -0
  95. package/dist/admin/services/relations.mjs +21 -0
  96. package/dist/admin/services/relations.mjs.map +1 -0
  97. package/dist/admin/services/settings.js +29 -0
  98. package/dist/admin/services/settings.js.map +1 -0
  99. package/dist/admin/services/settings.mjs +26 -0
  100. package/dist/admin/services/settings.mjs.map +1 -0
  101. package/dist/admin/src/components/CMHeaderActions.d.ts +1 -1
  102. package/dist/admin/src/components/LocaleListCell.d.ts +4 -4
  103. package/dist/admin/src/components/tests/CreateLocale.test.d.ts +1 -0
  104. package/dist/admin/src/components/tests/DeleteLocale.test.d.ts +1 -0
  105. package/dist/admin/src/components/tests/EditLocale.test.d.ts +1 -0
  106. package/dist/admin/src/components/tests/LocaleListCell.test.d.ts +1 -0
  107. package/dist/admin/src/contentReleasesHooks/releaseDetailsView.d.ts +1 -1
  108. package/dist/admin/src/pages/tests/SettingsPage.test.d.ts +1 -0
  109. package/dist/admin/src/services/api.d.ts +1 -1
  110. package/dist/admin/src/services/locales.d.ts +1 -1
  111. package/dist/admin/src/services/relations.d.ts +1 -1
  112. package/dist/admin/src/services/settings.d.ts +5 -0
  113. package/dist/admin/src/utils/schemas.d.ts +642 -16
  114. package/dist/admin/tests/server.d.ts +1 -0
  115. package/dist/admin/tests/utils.d.ts +6 -0
  116. package/dist/admin/translations/de.json.js +66 -0
  117. package/dist/admin/translations/de.json.js.map +1 -0
  118. package/dist/admin/translations/de.json.mjs +64 -0
  119. package/dist/admin/translations/de.json.mjs.map +1 -0
  120. package/dist/admin/translations/dk.json.js +66 -0
  121. package/dist/admin/translations/dk.json.js.map +1 -0
  122. package/dist/admin/translations/dk.json.mjs +64 -0
  123. package/dist/admin/translations/dk.json.mjs.map +1 -0
  124. package/dist/admin/translations/en.json.js +83 -0
  125. package/dist/admin/translations/en.json.js.map +1 -0
  126. package/dist/admin/translations/en.json.mjs +81 -0
  127. package/dist/admin/translations/en.json.mjs.map +1 -0
  128. package/dist/admin/translations/es.json.js +66 -0
  129. package/dist/admin/translations/es.json.js.map +1 -0
  130. package/dist/admin/translations/es.json.mjs +64 -0
  131. package/dist/admin/translations/es.json.mjs.map +1 -0
  132. package/dist/admin/translations/fr.json.js +66 -0
  133. package/dist/admin/translations/fr.json.js.map +1 -0
  134. package/dist/admin/translations/fr.json.mjs +64 -0
  135. package/dist/admin/translations/fr.json.mjs.map +1 -0
  136. package/dist/admin/translations/ko.json.js +65 -0
  137. package/dist/admin/translations/ko.json.js.map +1 -0
  138. package/dist/admin/translations/ko.json.mjs +63 -0
  139. package/dist/admin/translations/ko.json.mjs.map +1 -0
  140. package/dist/admin/translations/pl.json.js +66 -0
  141. package/dist/admin/translations/pl.json.js.map +1 -0
  142. package/dist/admin/translations/pl.json.mjs +64 -0
  143. package/dist/admin/translations/pl.json.mjs.map +1 -0
  144. package/dist/admin/translations/ru.json.js +68 -0
  145. package/dist/admin/translations/ru.json.js.map +1 -0
  146. package/dist/admin/translations/ru.json.mjs +66 -0
  147. package/dist/admin/translations/ru.json.mjs.map +1 -0
  148. package/dist/admin/translations/tr.json.js +66 -0
  149. package/dist/admin/translations/tr.json.js.map +1 -0
  150. package/dist/admin/translations/tr.json.mjs +64 -0
  151. package/dist/admin/translations/tr.json.mjs.map +1 -0
  152. package/dist/admin/translations/uk.json.js +82 -0
  153. package/dist/admin/translations/uk.json.js.map +1 -0
  154. package/dist/admin/translations/uk.json.mjs +80 -0
  155. package/dist/admin/translations/uk.json.mjs.map +1 -0
  156. package/dist/admin/translations/zh-Hans.json.js +57 -0
  157. package/dist/admin/translations/zh-Hans.json.js.map +1 -0
  158. package/dist/admin/translations/zh-Hans.json.mjs +55 -0
  159. package/dist/admin/translations/zh-Hans.json.mjs.map +1 -0
  160. package/dist/admin/translations/zh.json.js +66 -0
  161. package/dist/admin/translations/zh.json.js.map +1 -0
  162. package/dist/admin/translations/zh.json.mjs +64 -0
  163. package/dist/admin/translations/zh.json.mjs.map +1 -0
  164. package/dist/admin/utils/baseQuery.js +8 -0
  165. package/dist/admin/utils/baseQuery.js.map +1 -0
  166. package/dist/admin/utils/baseQuery.mjs +6 -0
  167. package/dist/admin/utils/baseQuery.mjs.map +1 -0
  168. package/dist/admin/utils/clean.js +70 -0
  169. package/dist/admin/utils/clean.js.map +1 -0
  170. package/dist/admin/utils/clean.mjs +68 -0
  171. package/dist/admin/utils/clean.mjs.map +1 -0
  172. package/dist/admin/utils/fields.js +34 -0
  173. package/dist/admin/utils/fields.js.map +1 -0
  174. package/dist/admin/utils/fields.mjs +31 -0
  175. package/dist/admin/utils/fields.mjs.map +1 -0
  176. package/dist/admin/utils/getTranslation.js +8 -0
  177. package/dist/admin/utils/getTranslation.js.map +1 -0
  178. package/dist/admin/utils/getTranslation.mjs +6 -0
  179. package/dist/admin/utils/getTranslation.mjs.map +1 -0
  180. package/dist/admin/utils/prefixPluginTranslations.js +11 -0
  181. package/dist/admin/utils/prefixPluginTranslations.js.map +1 -0
  182. package/dist/admin/utils/prefixPluginTranslations.mjs +9 -0
  183. package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -0
  184. package/dist/admin/utils/schemas.js +74 -0
  185. package/dist/admin/utils/schemas.js.map +1 -0
  186. package/dist/admin/utils/schemas.mjs +72 -0
  187. package/dist/admin/utils/schemas.mjs.map +1 -0
  188. package/dist/admin/utils/strings.js +6 -0
  189. package/dist/admin/utils/strings.js.map +1 -0
  190. package/dist/admin/utils/strings.mjs +4 -0
  191. package/dist/admin/utils/strings.mjs.map +1 -0
  192. package/dist/server/bootstrap.js +79 -0
  193. package/dist/server/bootstrap.js.map +1 -0
  194. package/dist/server/bootstrap.mjs +77 -0
  195. package/dist/server/bootstrap.mjs.map +1 -0
  196. package/dist/server/constants/index.js +29 -0
  197. package/dist/server/constants/index.js.map +1 -0
  198. package/dist/server/constants/index.mjs +25 -0
  199. package/dist/server/constants/index.mjs.map +1 -0
  200. package/dist/server/constants/iso-locales.json.js +2423 -0
  201. package/dist/server/constants/iso-locales.json.js.map +1 -0
  202. package/dist/server/constants/iso-locales.json.mjs +2421 -0
  203. package/dist/server/constants/iso-locales.json.mjs.map +1 -0
  204. package/dist/server/content-types/index.js +10 -0
  205. package/dist/server/content-types/index.js.map +1 -0
  206. package/dist/server/content-types/index.mjs +8 -0
  207. package/dist/server/content-types/index.mjs.map +1 -0
  208. package/dist/server/content-types/locale/index.js +10 -0
  209. package/dist/server/content-types/locale/index.js.map +1 -0
  210. package/dist/server/content-types/locale/index.mjs +8 -0
  211. package/dist/server/content-types/locale/index.mjs.map +1 -0
  212. package/dist/server/content-types/locale/schema.json.js +46 -0
  213. package/dist/server/content-types/locale/schema.json.js.map +1 -0
  214. package/dist/server/content-types/locale/schema.json.mjs +38 -0
  215. package/dist/server/content-types/locale/schema.json.mjs.map +1 -0
  216. package/dist/server/controllers/content-types.js +76 -0
  217. package/dist/server/controllers/content-types.js.map +1 -0
  218. package/dist/server/controllers/content-types.mjs +74 -0
  219. package/dist/server/controllers/content-types.mjs.map +1 -0
  220. package/dist/server/controllers/index.js +16 -0
  221. package/dist/server/controllers/index.js.map +1 -0
  222. package/dist/server/controllers/index.mjs +14 -0
  223. package/dist/server/controllers/index.mjs.map +1 -0
  224. package/dist/server/controllers/iso-locales.js +13 -0
  225. package/dist/server/controllers/iso-locales.js.map +1 -0
  226. package/dist/server/controllers/iso-locales.mjs +11 -0
  227. package/dist/server/controllers/iso-locales.mjs.map +1 -0
  228. package/dist/server/controllers/locales.js +108 -0
  229. package/dist/server/controllers/locales.js.map +1 -0
  230. package/dist/server/controllers/locales.mjs +87 -0
  231. package/dist/server/controllers/locales.mjs.map +1 -0
  232. package/dist/server/controllers/settings.js +24 -0
  233. package/dist/server/controllers/settings.js.map +1 -0
  234. package/dist/server/controllers/settings.mjs +22 -0
  235. package/dist/server/controllers/settings.mjs.map +1 -0
  236. package/dist/server/controllers/validate-locale-creation.js +47 -0
  237. package/dist/server/controllers/validate-locale-creation.js.map +1 -0
  238. package/dist/server/controllers/validate-locale-creation.mjs +45 -0
  239. package/dist/server/controllers/validate-locale-creation.mjs.map +1 -0
  240. package/dist/server/domain/locale.js +11 -0
  241. package/dist/server/domain/locale.js.map +1 -0
  242. package/dist/server/domain/locale.mjs +9 -0
  243. package/dist/server/domain/locale.mjs.map +1 -0
  244. package/dist/server/graphql.js +115 -0
  245. package/dist/server/graphql.js.map +1 -0
  246. package/dist/server/graphql.mjs +113 -0
  247. package/dist/server/graphql.mjs.map +1 -0
  248. package/dist/server/index.js +18 -3460
  249. package/dist/server/index.js.map +1 -1
  250. package/dist/server/index.mjs +17 -3443
  251. package/dist/server/index.mjs.map +1 -1
  252. package/dist/server/register.js +79 -0
  253. package/dist/server/register.js.map +1 -0
  254. package/dist/server/register.mjs +77 -0
  255. package/dist/server/register.mjs.map +1 -0
  256. package/dist/server/routes/admin.js +122 -0
  257. package/dist/server/routes/admin.js.map +1 -0
  258. package/dist/server/routes/admin.mjs +120 -0
  259. package/dist/server/routes/admin.mjs.map +1 -0
  260. package/dist/server/routes/content-api.js +19 -0
  261. package/dist/server/routes/content-api.js.map +1 -0
  262. package/dist/server/routes/content-api.mjs +17 -0
  263. package/dist/server/routes/content-api.mjs.map +1 -0
  264. package/dist/server/routes/index.js +12 -0
  265. package/dist/server/routes/index.js.map +1 -0
  266. package/dist/server/routes/index.mjs +10 -0
  267. package/dist/server/routes/index.mjs.map +1 -0
  268. package/dist/server/routes/validation/locale.js +57 -0
  269. package/dist/server/routes/validation/locale.js.map +1 -0
  270. package/dist/server/routes/validation/locale.mjs +36 -0
  271. package/dist/server/routes/validation/locale.mjs.map +1 -0
  272. package/dist/server/services/ai-localizations.js +28 -0
  273. package/dist/server/services/ai-localizations.js.map +1 -0
  274. package/dist/server/services/ai-localizations.mjs +26 -0
  275. package/dist/server/services/ai-localizations.mjs.map +1 -0
  276. package/dist/server/services/content-types.js +157 -0
  277. package/dist/server/services/content-types.js.map +1 -0
  278. package/dist/server/services/content-types.mjs +155 -0
  279. package/dist/server/services/content-types.mjs.map +1 -0
  280. package/dist/server/services/index.js +26 -0
  281. package/dist/server/services/index.js.map +1 -0
  282. package/dist/server/services/index.mjs +24 -0
  283. package/dist/server/services/index.mjs.map +1 -0
  284. package/dist/server/services/iso-locales.js +12 -0
  285. package/dist/server/services/iso-locales.js.map +1 -0
  286. package/dist/server/services/iso-locales.mjs +10 -0
  287. package/dist/server/services/iso-locales.mjs.map +1 -0
  288. package/dist/server/services/locales.js +114 -0
  289. package/dist/server/services/locales.js.map +1 -0
  290. package/dist/server/services/locales.mjs +112 -0
  291. package/dist/server/services/locales.mjs.map +1 -0
  292. package/dist/server/services/localizations.js +68 -0
  293. package/dist/server/services/localizations.js.map +1 -0
  294. package/dist/server/services/localizations.mjs +66 -0
  295. package/dist/server/services/localizations.mjs.map +1 -0
  296. package/dist/server/services/metrics.js +30 -0
  297. package/dist/server/services/metrics.js.map +1 -0
  298. package/dist/server/services/metrics.mjs +28 -0
  299. package/dist/server/services/metrics.mjs.map +1 -0
  300. package/dist/server/services/permissions/actions.js +136 -0
  301. package/dist/server/services/permissions/actions.js.map +1 -0
  302. package/dist/server/services/permissions/actions.mjs +134 -0
  303. package/dist/server/services/permissions/actions.mjs.map +1 -0
  304. package/dist/server/services/permissions/engine.js +52 -0
  305. package/dist/server/services/permissions/engine.js.map +1 -0
  306. package/dist/server/services/permissions/engine.mjs +50 -0
  307. package/dist/server/services/permissions/engine.mjs.map +1 -0
  308. package/dist/server/services/permissions/sections-builder.js +45 -0
  309. package/dist/server/services/permissions/sections-builder.js.map +1 -0
  310. package/dist/server/services/permissions/sections-builder.mjs +43 -0
  311. package/dist/server/services/permissions/sections-builder.mjs.map +1 -0
  312. package/dist/server/services/permissions.js +14 -0
  313. package/dist/server/services/permissions.js.map +1 -0
  314. package/dist/server/services/permissions.mjs +12 -0
  315. package/dist/server/services/permissions.mjs.map +1 -0
  316. package/dist/server/services/sanitize/index.js +34 -0
  317. package/dist/server/services/sanitize/index.js.map +1 -0
  318. package/dist/server/services/sanitize/index.mjs +32 -0
  319. package/dist/server/services/sanitize/index.mjs.map +1 -0
  320. package/dist/server/services/settings.js +25 -0
  321. package/dist/server/services/settings.js.map +1 -0
  322. package/dist/server/services/settings.mjs +23 -0
  323. package/dist/server/services/settings.mjs.map +1 -0
  324. package/dist/server/src/controllers/index.d.ts +4 -0
  325. package/dist/server/src/controllers/index.d.ts.map +1 -1
  326. package/dist/server/src/controllers/settings.d.ts +7 -0
  327. package/dist/server/src/controllers/settings.d.ts.map +1 -0
  328. package/dist/server/src/index.d.ts +22 -7
  329. package/dist/server/src/index.d.ts.map +1 -1
  330. package/dist/server/src/routes/admin.d.ts.map +1 -1
  331. package/dist/server/src/routes/content-api.d.ts +5 -8
  332. package/dist/server/src/routes/content-api.d.ts.map +1 -1
  333. package/dist/server/src/routes/index.d.ts +3 -7
  334. package/dist/server/src/routes/index.d.ts.map +1 -1
  335. package/dist/server/src/routes/validation/index.d.ts +2 -0
  336. package/dist/server/src/routes/validation/index.d.ts.map +1 -0
  337. package/dist/server/src/routes/validation/locale.d.ts +41 -0
  338. package/dist/server/src/routes/validation/locale.d.ts.map +1 -0
  339. package/dist/server/src/services/ai-localizations.d.ts +8 -0
  340. package/dist/server/src/services/ai-localizations.d.ts.map +1 -0
  341. package/dist/server/src/services/index.d.ts +15 -0
  342. package/dist/server/src/services/index.d.ts.map +1 -1
  343. package/dist/server/src/services/localizations.d.ts +1 -1
  344. package/dist/server/src/services/localizations.d.ts.map +1 -1
  345. package/dist/server/src/services/settings.d.ts +13 -0
  346. package/dist/server/src/services/settings.d.ts.map +1 -0
  347. package/dist/server/src/utils/index.d.ts +3 -1
  348. package/dist/server/src/utils/index.d.ts.map +1 -1
  349. package/dist/server/src/validation/settings.d.ts +12 -0
  350. package/dist/server/src/validation/settings.d.ts.map +1 -0
  351. package/dist/server/utils/index.js +16 -0
  352. package/dist/server/utils/index.js.map +1 -0
  353. package/dist/server/utils/index.mjs +13 -0
  354. package/dist/server/utils/index.mjs.map +1 -0
  355. package/dist/server/validation/content-types.js +18 -0
  356. package/dist/server/validation/content-types.js.map +1 -0
  357. package/dist/server/validation/content-types.mjs +16 -0
  358. package/dist/server/validation/content-types.mjs.map +1 -0
  359. package/dist/server/validation/locales.js +23 -0
  360. package/dist/server/validation/locales.js.map +1 -0
  361. package/dist/server/validation/locales.mjs +20 -0
  362. package/dist/server/validation/locales.mjs.map +1 -0
  363. package/dist/server/validation/settings.js +11 -0
  364. package/dist/server/validation/settings.js.map +1 -0
  365. package/dist/server/validation/settings.mjs +9 -0
  366. package/dist/server/validation/settings.mjs.map +1 -0
  367. package/dist/shared/contracts/content-manager.d.ts +1 -1
  368. package/dist/shared/contracts/settings.d.ts +40 -0
  369. package/dist/shared/contracts/shared.d.ts +1 -1
  370. package/package.json +18 -14
  371. package/dist/_chunks/SettingsPage-BAx9nmep.mjs +0 -554
  372. package/dist/_chunks/SettingsPage-BAx9nmep.mjs.map +0 -1
  373. package/dist/_chunks/SettingsPage-BTgjb2KS.js +0 -573
  374. package/dist/_chunks/SettingsPage-BTgjb2KS.js.map +0 -1
  375. package/dist/_chunks/de-9eCAqqrB.mjs +0 -66
  376. package/dist/_chunks/de-9eCAqqrB.mjs.map +0 -1
  377. package/dist/_chunks/de-DtWiGdHl.js +0 -66
  378. package/dist/_chunks/de-DtWiGdHl.js.map +0 -1
  379. package/dist/_chunks/dk-2qBjxt-P.mjs +0 -66
  380. package/dist/_chunks/dk-2qBjxt-P.mjs.map +0 -1
  381. package/dist/_chunks/dk-D8C-casx.js +0 -66
  382. package/dist/_chunks/dk-D8C-casx.js.map +0 -1
  383. package/dist/_chunks/en-BKBz3tro.js +0 -81
  384. package/dist/_chunks/en-BKBz3tro.js.map +0 -1
  385. package/dist/_chunks/en-DlXfy6Gy.mjs +0 -81
  386. package/dist/_chunks/en-DlXfy6Gy.mjs.map +0 -1
  387. package/dist/_chunks/es-DS-XFGSw.js +0 -66
  388. package/dist/_chunks/es-DS-XFGSw.js.map +0 -1
  389. package/dist/_chunks/es-DlmMVaBG.mjs +0 -66
  390. package/dist/_chunks/es-DlmMVaBG.mjs.map +0 -1
  391. package/dist/_chunks/fr-3S6ke71d.mjs +0 -66
  392. package/dist/_chunks/fr-3S6ke71d.mjs.map +0 -1
  393. package/dist/_chunks/fr-BTjekDpq.js +0 -66
  394. package/dist/_chunks/fr-BTjekDpq.js.map +0 -1
  395. package/dist/_chunks/index-3yyF237r.js +0 -1644
  396. package/dist/_chunks/index-3yyF237r.js.map +0 -1
  397. package/dist/_chunks/index-B0NijiBB.mjs +0 -1623
  398. package/dist/_chunks/index-B0NijiBB.mjs.map +0 -1
  399. package/dist/_chunks/ko-DmcGUBQ3.js +0 -65
  400. package/dist/_chunks/ko-DmcGUBQ3.js.map +0 -1
  401. package/dist/_chunks/ko-qTjQ8IMw.mjs +0 -65
  402. package/dist/_chunks/ko-qTjQ8IMw.mjs.map +0 -1
  403. package/dist/_chunks/pl-B67TSHqT.mjs +0 -66
  404. package/dist/_chunks/pl-B67TSHqT.mjs.map +0 -1
  405. package/dist/_chunks/pl-Cn5RYonZ.js +0 -66
  406. package/dist/_chunks/pl-Cn5RYonZ.js.map +0 -1
  407. package/dist/_chunks/ru-BMBgVL3s.js +0 -68
  408. package/dist/_chunks/ru-BMBgVL3s.js.map +0 -1
  409. package/dist/_chunks/ru-hagMa57T.mjs +0 -68
  410. package/dist/_chunks/ru-hagMa57T.mjs.map +0 -1
  411. package/dist/_chunks/tr-CarUU76c.js +0 -66
  412. package/dist/_chunks/tr-CarUU76c.js.map +0 -1
  413. package/dist/_chunks/tr-Dw_jmkG-.mjs +0 -66
  414. package/dist/_chunks/tr-Dw_jmkG-.mjs.map +0 -1
  415. package/dist/_chunks/zh-57YM4amO.mjs +0 -66
  416. package/dist/_chunks/zh-57YM4amO.mjs.map +0 -1
  417. package/dist/_chunks/zh-CukOviB0.js +0 -66
  418. package/dist/_chunks/zh-CukOviB0.js.map +0 -1
  419. package/dist/_chunks/zh-Hans-DSHIXAa3.js +0 -57
  420. package/dist/_chunks/zh-Hans-DSHIXAa3.js.map +0 -1
  421. package/dist/_chunks/zh-Hans-Dyc-aR-h.mjs +0 -57
  422. package/dist/_chunks/zh-Hans-Dyc-aR-h.mjs.map +0 -1
@@ -0,0 +1,702 @@
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+ import { skipToken } from '@reduxjs/toolkit/query';
4
+ import { useQueryParams, useForm, useNotification, useAPIErrorHandler, Table } from '@strapi/admin/strapi-admin';
5
+ import { unstable_useDocument, unstable_useDocumentActions, buildValidParams } from '@strapi/content-manager/strapi-admin';
6
+ import { Dialog, Flex, Typography, Field, SingleSelect, SingleSelectOption, Button, Status, Modal } from '@strapi/design-system';
7
+ import { Trash, Plus, Earth, WarningCircle, ListPlus, Cross } from '@strapi/icons';
8
+ import { useIntl } from 'react-intl';
9
+ import { useNavigate } from 'react-router-dom';
10
+ import { styled } from 'styled-components';
11
+ import { useI18n } from '../hooks/useI18n.mjs';
12
+ import { useGetLocalesQuery } from '../services/locales.mjs';
13
+ import { useGetManyDraftRelationCountQuery } from '../services/relations.mjs';
14
+ import { cleanData } from '../utils/clean.mjs';
15
+ import { getTranslation } from '../utils/getTranslation.mjs';
16
+ import { capitalize } from '../utils/strings.mjs';
17
+ import { BulkLocaleActionModal } from './BulkLocaleActionModal.mjs';
18
+
19
+ const statusVariants = {
20
+ draft: 'secondary',
21
+ published: 'success',
22
+ modified: 'alternative'
23
+ };
24
+ const LocaleOption = ({ isDraftAndPublishEnabled, locale, status, entryExists })=>{
25
+ const { formatMessage } = useIntl();
26
+ if (!entryExists) {
27
+ return formatMessage({
28
+ id: getTranslation('CMEditViewLocalePicker.locale.create'),
29
+ defaultMessage: 'Create <bold>{locale}</bold> locale'
30
+ }, {
31
+ bold: (locale)=>/*#__PURE__*/ jsx("b", {
32
+ children: locale
33
+ }),
34
+ locale: locale.name
35
+ });
36
+ }
37
+ return /*#__PURE__*/ jsxs(Flex, {
38
+ width: "100%",
39
+ gap: 1,
40
+ justifyContent: "space-between",
41
+ children: [
42
+ /*#__PURE__*/ jsx(Typography, {
43
+ children: locale.name
44
+ }),
45
+ isDraftAndPublishEnabled ? /*#__PURE__*/ jsx(Status, {
46
+ display: "flex",
47
+ paddingLeft: "6px",
48
+ paddingRight: "6px",
49
+ paddingTop: "2px",
50
+ paddingBottom: "2px",
51
+ size: "S",
52
+ variant: statusVariants[status],
53
+ children: /*#__PURE__*/ jsx(Typography, {
54
+ tag: "span",
55
+ variant: "pi",
56
+ fontWeight: "bold",
57
+ children: capitalize(status)
58
+ })
59
+ }) : null
60
+ ]
61
+ });
62
+ };
63
+ const LocalePickerAction = ({ document, meta, model, collectionType, documentId })=>{
64
+ const { formatMessage } = useIntl();
65
+ const [{ query }, setQuery] = useQueryParams();
66
+ const { hasI18n, canCreate, canRead } = useI18n();
67
+ const { data: locales = [] } = useGetLocalesQuery();
68
+ const currentDesiredLocale = query.plugins?.i18n?.locale;
69
+ const { schema } = unstable_useDocument({
70
+ model,
71
+ collectionType,
72
+ documentId,
73
+ params: {
74
+ locale: currentDesiredLocale
75
+ }
76
+ });
77
+ const handleSelect = React.useCallback((value)=>{
78
+ setQuery({
79
+ plugins: {
80
+ ...query.plugins,
81
+ i18n: {
82
+ locale: value
83
+ }
84
+ }
85
+ });
86
+ }, [
87
+ query.plugins,
88
+ setQuery
89
+ ]);
90
+ React.useEffect(()=>{
91
+ if (!Array.isArray(locales) || !hasI18n) {
92
+ return;
93
+ }
94
+ /**
95
+ * Handle the case where the current locale query param doesn't exist
96
+ * in the list of available locales, so we redirect to the default locale.
97
+ */ const doesLocaleExist = locales.find((loc)=>loc.code === currentDesiredLocale);
98
+ const defaultLocale = locales.find((locale)=>locale.isDefault);
99
+ if (!doesLocaleExist && defaultLocale?.code) {
100
+ handleSelect(defaultLocale.code);
101
+ }
102
+ }, [
103
+ handleSelect,
104
+ hasI18n,
105
+ locales,
106
+ currentDesiredLocale
107
+ ]);
108
+ const currentLocale = Array.isArray(locales) ? locales.find((locale)=>locale.code === currentDesiredLocale) : undefined;
109
+ // Use meta.availableLocales instead of document.localizations
110
+ // meta.availableLocales contains all locales for the document, even when creating new locales
111
+ const availableLocales = meta?.availableLocales ?? [];
112
+ const documentLocalizations = document?.localizations ?? [];
113
+ // Prefer meta.availableLocales as it's more reliable, fallback to document.localizations
114
+ const allLocalizations = availableLocales.length > 0 ? availableLocales : documentLocalizations;
115
+ const allCurrentLocales = [
116
+ {
117
+ status: getDocumentStatus(document, meta),
118
+ locale: currentLocale?.code
119
+ },
120
+ ...allLocalizations
121
+ ];
122
+ if (!hasI18n || !Array.isArray(locales) || locales.length === 0) {
123
+ return null;
124
+ }
125
+ const displayedLocales = locales.filter((locale)=>{
126
+ /**
127
+ * If you can read we allow you to see the locale exists
128
+ * otherwise the locale is hidden.
129
+ */ return canRead.includes(locale.code);
130
+ });
131
+ return {
132
+ label: formatMessage({
133
+ id: getTranslation('Settings.locales.modal.locales.label'),
134
+ defaultMessage: 'Locales'
135
+ }),
136
+ options: displayedLocales.map((locale)=>{
137
+ const entryWithLocaleExists = allCurrentLocales.some((doc)=>doc.locale === locale.code);
138
+ const currentLocaleDoc = allCurrentLocales.find((doc)=>'locale' in doc ? doc.locale === locale.code : false);
139
+ const permissionsToCheck = currentLocaleDoc ? canRead : canCreate;
140
+ return {
141
+ disabled: !permissionsToCheck.includes(locale.code),
142
+ value: locale.code,
143
+ label: /*#__PURE__*/ jsx(LocaleOption, {
144
+ isDraftAndPublishEnabled: !!schema?.options?.draftAndPublish,
145
+ locale: locale,
146
+ status: currentLocaleDoc?.status,
147
+ entryExists: entryWithLocaleExists
148
+ }),
149
+ startIcon: !entryWithLocaleExists ? /*#__PURE__*/ jsx(Plus, {}) : null
150
+ };
151
+ }),
152
+ customizeContent: ()=>currentLocale?.name,
153
+ onSelect: handleSelect,
154
+ value: currentLocale
155
+ };
156
+ };
157
+ const getDocumentStatus = (document, meta)=>{
158
+ const docStatus = document?.status;
159
+ const statuses = meta?.availableStatus ?? [];
160
+ /**
161
+ * Creating an entry
162
+ */ if (!docStatus) {
163
+ return 'draft';
164
+ }
165
+ /**
166
+ * We're viewing a draft, but the document could have a published version
167
+ */ if (docStatus === 'draft' && statuses.find((doc)=>doc.publishedAt !== null)) {
168
+ return 'published';
169
+ }
170
+ return docStatus;
171
+ };
172
+ /* -------------------------------------------------------------------------------------------------
173
+ * FillFromAnotherLocaleAction
174
+ * -----------------------------------------------------------------------------------------------*/ const FillFromAnotherLocaleAction = ({ documentId, meta, model, collectionType })=>{
175
+ const { formatMessage } = useIntl();
176
+ const [{ query }] = useQueryParams();
177
+ const { hasI18n } = useI18n();
178
+ const currentDesiredLocale = query.plugins?.i18n?.locale;
179
+ const [localeSelected, setLocaleSelected] = React.useState(null);
180
+ const setValues = useForm('FillFromAnotherLocale', (state)=>state.setValues);
181
+ const { getDocument } = unstable_useDocumentActions();
182
+ const { schema, components } = unstable_useDocument({
183
+ model,
184
+ documentId,
185
+ collectionType,
186
+ params: {
187
+ locale: currentDesiredLocale
188
+ }
189
+ });
190
+ const { data: locales = [] } = useGetLocalesQuery();
191
+ const availableLocales = Array.isArray(locales) ? locales.filter((locale)=>meta?.availableLocales.some((l)=>l.locale === locale.code)) : [];
192
+ const fillFromLocale = (onClose)=>async ()=>{
193
+ const response = await getDocument({
194
+ collectionType,
195
+ model,
196
+ documentId,
197
+ params: {
198
+ locale: localeSelected
199
+ }
200
+ });
201
+ if (!response || !schema) {
202
+ return;
203
+ }
204
+ const { data } = response;
205
+ const cleanedData = cleanData(data, schema, components);
206
+ setValues(cleanedData);
207
+ onClose();
208
+ };
209
+ if (!hasI18n) {
210
+ return null;
211
+ }
212
+ return {
213
+ type: 'icon',
214
+ icon: /*#__PURE__*/ jsx(Earth, {}),
215
+ disabled: availableLocales.length === 0,
216
+ label: formatMessage({
217
+ id: getTranslation('CMEditViewCopyLocale.copy-text'),
218
+ defaultMessage: 'Fill in from another locale'
219
+ }),
220
+ dialog: {
221
+ type: 'dialog',
222
+ title: formatMessage({
223
+ id: getTranslation('CMEditViewCopyLocale.dialog.title'),
224
+ defaultMessage: 'Confirmation'
225
+ }),
226
+ content: ({ onClose })=>/*#__PURE__*/ jsxs(Fragment, {
227
+ children: [
228
+ /*#__PURE__*/ jsx(Dialog.Body, {
229
+ children: /*#__PURE__*/ jsxs(Flex, {
230
+ direction: "column",
231
+ gap: 3,
232
+ children: [
233
+ /*#__PURE__*/ jsx(WarningCircle, {
234
+ width: "24px",
235
+ height: "24px",
236
+ fill: "danger600"
237
+ }),
238
+ /*#__PURE__*/ jsx(Typography, {
239
+ textAlign: "center",
240
+ children: formatMessage({
241
+ id: getTranslation('CMEditViewCopyLocale.dialog.body'),
242
+ defaultMessage: 'Your current content will be erased and filled by the content of the selected locale:'
243
+ })
244
+ }),
245
+ /*#__PURE__*/ jsxs(Field.Root, {
246
+ width: "100%",
247
+ children: [
248
+ /*#__PURE__*/ jsx(Field.Label, {
249
+ children: formatMessage({
250
+ id: getTranslation('CMEditViewCopyLocale.dialog.field.label'),
251
+ defaultMessage: 'Locale'
252
+ })
253
+ }),
254
+ /*#__PURE__*/ jsx(SingleSelect, {
255
+ value: localeSelected,
256
+ placeholder: formatMessage({
257
+ id: getTranslation('CMEditViewCopyLocale.dialog.field.placeholder'),
258
+ defaultMessage: 'Select one locale...'
259
+ }),
260
+ // @ts-expect-error – the DS will handle numbers, but we're not allowing the API.
261
+ onChange: (value)=>setLocaleSelected(value),
262
+ children: availableLocales.map((locale)=>/*#__PURE__*/ jsx(SingleSelectOption, {
263
+ value: locale.code,
264
+ children: locale.name
265
+ }, locale.code))
266
+ })
267
+ ]
268
+ })
269
+ ]
270
+ })
271
+ }),
272
+ /*#__PURE__*/ jsx(Dialog.Footer, {
273
+ children: /*#__PURE__*/ jsxs(Flex, {
274
+ gap: 2,
275
+ width: "100%",
276
+ children: [
277
+ /*#__PURE__*/ jsx(Button, {
278
+ flex: "auto",
279
+ variant: "tertiary",
280
+ onClick: onClose,
281
+ children: formatMessage({
282
+ id: getTranslation('CMEditViewCopyLocale.cancel-text'),
283
+ defaultMessage: 'No, cancel'
284
+ })
285
+ }),
286
+ /*#__PURE__*/ jsx(Button, {
287
+ flex: "auto",
288
+ variant: "success",
289
+ onClick: fillFromLocale(onClose),
290
+ children: formatMessage({
291
+ id: getTranslation('CMEditViewCopyLocale.submit-text'),
292
+ defaultMessage: 'Yes, fill in'
293
+ })
294
+ })
295
+ ]
296
+ })
297
+ })
298
+ ]
299
+ })
300
+ }
301
+ };
302
+ };
303
+ /* -------------------------------------------------------------------------------------------------
304
+ * DeleteLocaleAction
305
+ * -----------------------------------------------------------------------------------------------*/ const DeleteLocaleAction = ({ document, documentId, model, collectionType })=>{
306
+ const { formatMessage } = useIntl();
307
+ const navigate = useNavigate();
308
+ const { toggleNotification } = useNotification();
309
+ const { delete: deleteAction, isLoading } = unstable_useDocumentActions();
310
+ const { hasI18n, canDelete } = useI18n();
311
+ // Get the current locale object, using the URL instead of document so it works while creating
312
+ const [{ query }] = useQueryParams();
313
+ const { data: locales = [] } = useGetLocalesQuery();
314
+ const currentDesiredLocale = query.plugins?.i18n?.locale;
315
+ const locale = !('error' in locales) && locales.find((loc)=>loc.code === currentDesiredLocale);
316
+ if (!hasI18n) {
317
+ return null;
318
+ }
319
+ return {
320
+ disabled: document?.locale && !canDelete.includes(document.locale) || !document || !document.id,
321
+ position: [
322
+ 'header',
323
+ 'table-row'
324
+ ],
325
+ label: formatMessage({
326
+ id: getTranslation('actions.delete.label'),
327
+ defaultMessage: 'Delete entry ({locale})'
328
+ }, {
329
+ locale: locale && locale.name
330
+ }),
331
+ icon: /*#__PURE__*/ jsx(StyledTrash, {}),
332
+ variant: 'danger',
333
+ dialog: {
334
+ type: 'dialog',
335
+ title: formatMessage({
336
+ id: getTranslation('actions.delete.dialog.title'),
337
+ defaultMessage: 'Confirmation'
338
+ }),
339
+ content: /*#__PURE__*/ jsxs(Flex, {
340
+ direction: "column",
341
+ gap: 2,
342
+ children: [
343
+ /*#__PURE__*/ jsx(WarningCircle, {
344
+ width: "24px",
345
+ height: "24px",
346
+ fill: "danger600"
347
+ }),
348
+ /*#__PURE__*/ jsx(Typography, {
349
+ tag: "p",
350
+ variant: "omega",
351
+ textAlign: "center",
352
+ children: formatMessage({
353
+ id: getTranslation('actions.delete.dialog.body'),
354
+ defaultMessage: 'Are you sure?'
355
+ })
356
+ })
357
+ ]
358
+ }),
359
+ loading: isLoading,
360
+ onConfirm: async ()=>{
361
+ const unableToDelete = // We are unable to delete a collection type without a document ID
362
+ // & unable to delete generally if there is no document locale
363
+ collectionType !== 'single-types' && !documentId || !document?.locale;
364
+ if (unableToDelete) {
365
+ console.error("You're trying to delete a document without an id or locale, this is likely a bug with Strapi. Please open an issue.");
366
+ toggleNotification({
367
+ message: formatMessage({
368
+ id: getTranslation('actions.delete.error'),
369
+ defaultMessage: 'An error occurred while trying to delete the document locale.'
370
+ }),
371
+ type: 'danger'
372
+ });
373
+ return;
374
+ }
375
+ const res = await deleteAction({
376
+ documentId,
377
+ model,
378
+ collectionType,
379
+ params: {
380
+ locale: document.locale
381
+ }
382
+ });
383
+ if (!('error' in res)) {
384
+ navigate({
385
+ pathname: `../${collectionType}/${model}`
386
+ }, {
387
+ replace: true
388
+ });
389
+ }
390
+ }
391
+ }
392
+ };
393
+ };
394
+ /* -------------------------------------------------------------------------------------------------
395
+ * BulkLocaleAction
396
+ *
397
+ * This component is used to handle bulk publish and unpublish actions on locales.
398
+ * -----------------------------------------------------------------------------------------------*/ const BulkLocaleAction = ({ document, documentId, model, collectionType, action })=>{
399
+ const locale = document?.locale ?? null;
400
+ const [{ query }] = useQueryParams();
401
+ const params = React.useMemo(()=>buildValidParams(query), [
402
+ query
403
+ ]);
404
+ const isOnPublishedTab = query.status === 'published';
405
+ const { formatMessage } = useIntl();
406
+ const { hasI18n, canPublish } = useI18n();
407
+ const { toggleNotification } = useNotification();
408
+ const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
409
+ const [selectedRows, setSelectedRows] = React.useState([]);
410
+ const [isDraftRelationConfirmationOpen, setIsDraftRelationConfirmationOpen] = React.useState(false);
411
+ const { publishMany: publishManyAction, unpublishMany: unpublishManyAction } = unstable_useDocumentActions();
412
+ const { schema, validate } = unstable_useDocument({
413
+ model,
414
+ collectionType,
415
+ documentId,
416
+ params: {
417
+ locale
418
+ }
419
+ }, {
420
+ // No need to fetch the document, the data is already available in the `document` prop
421
+ skip: true
422
+ });
423
+ const { data: localesMetadata = [] } = useGetLocalesQuery(hasI18n ? undefined : skipToken);
424
+ const headers = [
425
+ {
426
+ label: formatMessage({
427
+ id: 'global.name',
428
+ defaultMessage: 'Name'
429
+ }),
430
+ name: 'name'
431
+ },
432
+ {
433
+ label: formatMessage({
434
+ id: getTranslation('CMEditViewBulkLocale.status'),
435
+ defaultMessage: 'Status'
436
+ }),
437
+ name: 'status'
438
+ },
439
+ {
440
+ label: formatMessage({
441
+ id: getTranslation('CMEditViewBulkLocale.publication-status'),
442
+ defaultMessage: 'Publication Status'
443
+ }),
444
+ name: 'publication-status'
445
+ }
446
+ ];
447
+ // Extract the rows for the bulk locale publish modal and any validation
448
+ // errors per locale
449
+ const [rows, validationErrors] = React.useMemo(()=>{
450
+ if (!document) {
451
+ return [
452
+ [],
453
+ {}
454
+ ];
455
+ }
456
+ const localizations = document.localizations ?? [];
457
+ // Build the rows for the bulk locale publish modal by combining the current
458
+ // document with all the available locales from the document meta
459
+ const locales = localizations.map((doc)=>{
460
+ const { locale, status } = doc;
461
+ return {
462
+ locale,
463
+ status
464
+ };
465
+ });
466
+ // Add the current document locale
467
+ locales.unshift({
468
+ locale: document.locale,
469
+ status: document.status
470
+ });
471
+ // Build the validation errors for each locale.
472
+ const allDocuments = [
473
+ document,
474
+ ...localizations
475
+ ];
476
+ const errors = allDocuments.reduce((errs, document)=>{
477
+ if (!document) {
478
+ return errs;
479
+ }
480
+ // Validate each locale entry via the useDocument validate function and store any errors in a dictionary
481
+ const validation = validate(document);
482
+ if (validation !== null) {
483
+ errs[document.locale] = validation;
484
+ }
485
+ return errs;
486
+ }, {});
487
+ return [
488
+ locales,
489
+ errors
490
+ ];
491
+ }, [
492
+ document,
493
+ validate
494
+ ]);
495
+ const isBulkPublish = action === 'bulk-publish';
496
+ const localesForAction = selectedRows.reduce((acc, selectedRow)=>{
497
+ const isValidLocale = // Validation errors are irrelevant if we are trying to unpublish
498
+ !isBulkPublish || !Object.keys(validationErrors).includes(selectedRow.locale);
499
+ const shouldAddLocale = isBulkPublish ? selectedRow.status !== 'published' && isValidLocale : selectedRow.status !== 'draft' && isValidLocale;
500
+ if (shouldAddLocale) {
501
+ acc.push(selectedRow.locale);
502
+ }
503
+ return acc;
504
+ }, []);
505
+ // TODO skipping this for now as there is a bug with the draft relation count that will be worked on separately
506
+ // see https://www.notion.so/strapi/Count-draft-relations-56901b492efb45ab90d42fe975b32bd8?pvs=4
507
+ const enableDraftRelationsCount = false;
508
+ const { data: draftRelationsCount = 0, isLoading: isDraftRelationsLoading, error: isDraftRelationsError } = useGetManyDraftRelationCountQuery({
509
+ model,
510
+ documentIds: [
511
+ documentId
512
+ ],
513
+ locale: localesForAction
514
+ }, {
515
+ skip: !enableDraftRelationsCount
516
+ });
517
+ React.useEffect(()=>{
518
+ if (isDraftRelationsError) {
519
+ toggleNotification({
520
+ type: 'danger',
521
+ message: formatAPIError(isDraftRelationsError)
522
+ });
523
+ }
524
+ }, [
525
+ isDraftRelationsError,
526
+ toggleNotification,
527
+ formatAPIError
528
+ ]);
529
+ if (!schema?.options?.draftAndPublish) {
530
+ return null;
531
+ }
532
+ if (!hasI18n) {
533
+ return null;
534
+ }
535
+ if (!documentId) {
536
+ return null;
537
+ }
538
+ // This document action can be enabled given that draft and publish and i18n are
539
+ // enabled and we can publish the current locale.
540
+ const publish = async ()=>{
541
+ await publishManyAction({
542
+ model,
543
+ documentIds: [
544
+ documentId
545
+ ],
546
+ params: {
547
+ ...params,
548
+ locale: localesForAction
549
+ }
550
+ });
551
+ setSelectedRows([]);
552
+ };
553
+ const unpublish = async ()=>{
554
+ await unpublishManyAction({
555
+ model,
556
+ documentIds: [
557
+ documentId
558
+ ],
559
+ params: {
560
+ ...params,
561
+ locale: localesForAction
562
+ }
563
+ });
564
+ setSelectedRows([]);
565
+ };
566
+ const handleAction = async ()=>{
567
+ if (draftRelationsCount > 0) {
568
+ setIsDraftRelationConfirmationOpen(true);
569
+ } else if (isBulkPublish) {
570
+ await publish();
571
+ } else {
572
+ await unpublish();
573
+ }
574
+ };
575
+ if (isDraftRelationConfirmationOpen) {
576
+ return {
577
+ label: formatMessage({
578
+ id: 'app.components.ConfirmDialog.title',
579
+ defaultMessage: 'Confirmation'
580
+ }),
581
+ variant: 'danger',
582
+ dialog: {
583
+ onCancel: ()=>{
584
+ setIsDraftRelationConfirmationOpen(false);
585
+ },
586
+ onConfirm: async ()=>{
587
+ await publish();
588
+ setIsDraftRelationConfirmationOpen(false);
589
+ },
590
+ type: 'dialog',
591
+ title: formatMessage({
592
+ id: getTranslation('actions.publish.dialog.title'),
593
+ defaultMessage: 'Confirmation'
594
+ }),
595
+ content: /*#__PURE__*/ jsxs(Flex, {
596
+ direction: "column",
597
+ alignItems: "center",
598
+ gap: 2,
599
+ children: [
600
+ /*#__PURE__*/ jsx(WarningCircle, {
601
+ width: "2.4rem",
602
+ height: "2.4rem",
603
+ fill: "danger600"
604
+ }),
605
+ /*#__PURE__*/ jsx(Typography, {
606
+ textAlign: "center",
607
+ children: formatMessage({
608
+ id: getTranslation('CMEditViewBulkLocale.draft-relation-warning'),
609
+ defaultMessage: 'Some locales are related to draft entries. Publishing them could leave broken links in your app.'
610
+ })
611
+ }),
612
+ /*#__PURE__*/ jsx(Typography, {
613
+ textAlign: "center",
614
+ children: formatMessage({
615
+ id: getTranslation('CMEditViewBulkLocale.continue-confirmation'),
616
+ defaultMessage: 'Are you sure you want to continue?'
617
+ })
618
+ })
619
+ ]
620
+ })
621
+ }
622
+ };
623
+ }
624
+ const hasPermission = selectedRows.map(({ locale })=>locale).every((locale)=>canPublish.includes(locale));
625
+ return {
626
+ label: formatMessage({
627
+ id: getTranslation(`CMEditViewBulkLocale.${isBulkPublish ? 'publish' : 'unpublish'}-title`),
628
+ defaultMessage: `${isBulkPublish ? 'Publish' : 'Unpublish'} Multiple Locales`
629
+ }),
630
+ variant: isBulkPublish ? 'secondary' : 'danger',
631
+ icon: isBulkPublish ? /*#__PURE__*/ jsx(ListPlus, {}) : /*#__PURE__*/ jsx(Cross, {}),
632
+ disabled: isOnPublishedTab || canPublish.length === 0,
633
+ position: [
634
+ 'panel'
635
+ ],
636
+ dialog: {
637
+ type: 'modal',
638
+ title: formatMessage({
639
+ id: getTranslation(`CMEditViewBulkLocale.${isBulkPublish ? 'publish' : 'unpublish'}-title`),
640
+ defaultMessage: `${isBulkPublish ? 'Publish' : 'Unpublish'} Multiple Locales`
641
+ }),
642
+ content: ()=>{
643
+ return /*#__PURE__*/ jsx(Table.Root, {
644
+ headers: headers,
645
+ rows: rows.map((row)=>({
646
+ ...row,
647
+ id: row.locale
648
+ })),
649
+ selectedRows: selectedRows,
650
+ onSelectedRowsChange: (tableSelectedRows)=>setSelectedRows(tableSelectedRows),
651
+ children: /*#__PURE__*/ jsx(BulkLocaleActionModal, {
652
+ validationErrors: validationErrors,
653
+ headers: headers,
654
+ rows: rows,
655
+ localesMetadata: localesMetadata,
656
+ action: action ?? 'bulk-publish'
657
+ })
658
+ });
659
+ },
660
+ footer: ()=>/*#__PURE__*/ jsx(Modal.Footer, {
661
+ justifyContent: "flex-end",
662
+ children: /*#__PURE__*/ jsx(Button, {
663
+ loading: isDraftRelationsLoading,
664
+ disabled: !hasPermission || localesForAction.length === 0,
665
+ variant: "default",
666
+ onClick: handleAction,
667
+ children: formatMessage({
668
+ id: isBulkPublish ? 'app.utils.publish' : 'app.utils.unpublish',
669
+ defaultMessage: isBulkPublish ? 'Publish' : 'Unpublish'
670
+ })
671
+ })
672
+ })
673
+ }
674
+ };
675
+ };
676
+ /* -------------------------------------------------------------------------------------------------
677
+ * BulkLocalePublishAction
678
+ * -----------------------------------------------------------------------------------------------*/ const BulkLocalePublishAction = (props)=>{
679
+ return BulkLocaleAction({
680
+ action: 'bulk-publish',
681
+ ...props
682
+ });
683
+ };
684
+ /* -------------------------------------------------------------------------------------------------
685
+ * BulkLocaleUnpublishAction
686
+ * -----------------------------------------------------------------------------------------------*/ const BulkLocaleUnpublishAction = (props)=>{
687
+ return BulkLocaleAction({
688
+ action: 'bulk-unpublish',
689
+ ...props
690
+ });
691
+ };
692
+ /**
693
+ * Because the icon system is completely broken, we have to do
694
+ * this to remove the fill from the cog.
695
+ */ const StyledTrash = styled(Trash)`
696
+ path {
697
+ fill: currentColor;
698
+ }
699
+ `;
700
+
701
+ export { BulkLocalePublishAction, BulkLocaleUnpublishAction, DeleteLocaleAction, FillFromAnotherLocaleAction, LocalePickerAction };
702
+ //# sourceMappingURL=CMHeaderActions.mjs.map