@strapi/i18n 0.0.0-experimental.614aaf36aaf7e94667b876f02949c3651d9715da → 0.0.0-experimental.6188a65af997a4a8b190bbf104a9ba27ebf583c8

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 (388) 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 +220 -16
  62. package/dist/admin/index.js.map +1 -1
  63. package/dist/admin/index.mjs +202 -15
  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/services/api.d.ts +1 -1
  102. package/dist/admin/src/services/locales.d.ts +1 -1
  103. package/dist/admin/src/services/relations.d.ts +1 -1
  104. package/dist/admin/src/services/settings.d.ts +5 -0
  105. package/dist/admin/src/utils/schemas.d.ts +642 -16
  106. package/dist/admin/{chunks/de-nEMWvIiY.js → translations/de.json.js} +2 -2
  107. package/dist/admin/translations/de.json.js.map +1 -0
  108. package/dist/admin/{chunks/de-Cm8mYdaO.mjs → translations/de.json.mjs} +1 -1
  109. package/dist/admin/translations/de.json.mjs.map +1 -0
  110. package/dist/admin/{chunks/dk-CYATLPVe.js → translations/dk.json.js} +2 -2
  111. package/dist/admin/translations/dk.json.js.map +1 -0
  112. package/dist/admin/{chunks/dk-BeUFOegB.mjs → translations/dk.json.mjs} +1 -1
  113. package/dist/admin/translations/dk.json.mjs.map +1 -0
  114. package/dist/admin/{chunks/en-CG5cUCbD.js → translations/en.json.js} +4 -2
  115. package/dist/admin/translations/en.json.js.map +1 -0
  116. package/dist/admin/{chunks/en-eWSaCeOb.mjs → translations/en.json.mjs} +3 -1
  117. package/dist/admin/translations/en.json.mjs.map +1 -0
  118. package/dist/admin/{chunks/es-CWsogTGm.js → translations/es.json.js} +2 -2
  119. package/dist/admin/translations/es.json.js.map +1 -0
  120. package/dist/admin/{chunks/es-DqF_IdAc.mjs → translations/es.json.mjs} +1 -1
  121. package/dist/admin/translations/es.json.mjs.map +1 -0
  122. package/dist/admin/{chunks/fr-CC7UFcYd.js → translations/fr.json.js} +2 -2
  123. package/dist/admin/translations/fr.json.js.map +1 -0
  124. package/dist/admin/{chunks/fr-CyARbZ3c.mjs → translations/fr.json.mjs} +1 -1
  125. package/dist/admin/translations/fr.json.mjs.map +1 -0
  126. package/dist/admin/{chunks/ko-XwGmfhoq.js → translations/ko.json.js} +2 -2
  127. package/dist/admin/translations/ko.json.js.map +1 -0
  128. package/dist/admin/{chunks/ko-Ax4NSedM.mjs → translations/ko.json.mjs} +1 -1
  129. package/dist/admin/translations/ko.json.mjs.map +1 -0
  130. package/dist/admin/{chunks/pl-B_vzY_ZB.js → translations/pl.json.js} +2 -2
  131. package/dist/admin/translations/pl.json.js.map +1 -0
  132. package/dist/admin/{chunks/pl-B-aqvMqL.mjs → translations/pl.json.mjs} +1 -1
  133. package/dist/admin/translations/pl.json.mjs.map +1 -0
  134. package/dist/admin/{chunks/ru-WzHcJV1f.js → translations/ru.json.js} +2 -2
  135. package/dist/admin/translations/ru.json.js.map +1 -0
  136. package/dist/admin/{chunks/ru-VkPjQ-Sk.mjs → translations/ru.json.mjs} +1 -1
  137. package/dist/admin/translations/ru.json.mjs.map +1 -0
  138. package/dist/admin/{chunks/tr-CcWp6u3w.js → translations/tr.json.js} +2 -2
  139. package/dist/admin/translations/tr.json.js.map +1 -0
  140. package/dist/admin/{chunks/tr-DcTR88c9.mjs → translations/tr.json.mjs} +1 -1
  141. package/dist/admin/translations/tr.json.mjs.map +1 -0
  142. package/dist/admin/{chunks/uk-CO6JHYRC.js → translations/uk.json.js} +2 -2
  143. package/dist/admin/translations/uk.json.js.map +1 -0
  144. package/dist/admin/{chunks/uk-CMz6iPag.mjs → translations/uk.json.mjs} +1 -1
  145. package/dist/admin/translations/uk.json.mjs.map +1 -0
  146. package/dist/admin/{chunks/zh-Hans-DnU2bhri.js → translations/zh-Hans.json.js} +2 -2
  147. package/dist/admin/translations/zh-Hans.json.js.map +1 -0
  148. package/dist/admin/{chunks/zh-Hans-L3wsRegj.mjs → translations/zh-Hans.json.mjs} +1 -1
  149. package/dist/admin/translations/zh-Hans.json.mjs.map +1 -0
  150. package/dist/admin/{chunks/zh-C9So4SGq.js → translations/zh.json.js} +2 -2
  151. package/dist/admin/translations/zh.json.js.map +1 -0
  152. package/dist/admin/{chunks/zh-RZyMiPIs.mjs → translations/zh.json.mjs} +1 -1
  153. package/dist/admin/translations/zh.json.mjs.map +1 -0
  154. package/dist/admin/utils/baseQuery.js +8 -0
  155. package/dist/admin/utils/baseQuery.js.map +1 -0
  156. package/dist/admin/utils/baseQuery.mjs +6 -0
  157. package/dist/admin/utils/baseQuery.mjs.map +1 -0
  158. package/dist/admin/utils/clean.js +70 -0
  159. package/dist/admin/utils/clean.js.map +1 -0
  160. package/dist/admin/utils/clean.mjs +68 -0
  161. package/dist/admin/utils/clean.mjs.map +1 -0
  162. package/dist/admin/utils/fields.js +34 -0
  163. package/dist/admin/utils/fields.js.map +1 -0
  164. package/dist/admin/utils/fields.mjs +31 -0
  165. package/dist/admin/utils/fields.mjs.map +1 -0
  166. package/dist/admin/utils/getTranslation.js +8 -0
  167. package/dist/admin/utils/getTranslation.js.map +1 -0
  168. package/dist/admin/utils/getTranslation.mjs +6 -0
  169. package/dist/admin/utils/getTranslation.mjs.map +1 -0
  170. package/dist/admin/utils/prefixPluginTranslations.js +11 -0
  171. package/dist/admin/utils/prefixPluginTranslations.js.map +1 -0
  172. package/dist/admin/utils/prefixPluginTranslations.mjs +9 -0
  173. package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -0
  174. package/dist/admin/utils/schemas.js +74 -0
  175. package/dist/admin/utils/schemas.js.map +1 -0
  176. package/dist/admin/utils/schemas.mjs +72 -0
  177. package/dist/admin/utils/schemas.mjs.map +1 -0
  178. package/dist/admin/utils/strings.js +6 -0
  179. package/dist/admin/utils/strings.js.map +1 -0
  180. package/dist/admin/utils/strings.mjs +4 -0
  181. package/dist/admin/utils/strings.mjs.map +1 -0
  182. package/dist/server/bootstrap.js +79 -0
  183. package/dist/server/bootstrap.js.map +1 -0
  184. package/dist/server/bootstrap.mjs +77 -0
  185. package/dist/server/bootstrap.mjs.map +1 -0
  186. package/dist/server/constants/index.js +29 -0
  187. package/dist/server/constants/index.js.map +1 -0
  188. package/dist/server/constants/index.mjs +25 -0
  189. package/dist/server/constants/index.mjs.map +1 -0
  190. package/dist/server/constants/iso-locales.json.js +2423 -0
  191. package/dist/server/constants/iso-locales.json.js.map +1 -0
  192. package/dist/server/constants/iso-locales.json.mjs +2421 -0
  193. package/dist/server/constants/iso-locales.json.mjs.map +1 -0
  194. package/dist/server/content-types/index.js +10 -0
  195. package/dist/server/content-types/index.js.map +1 -0
  196. package/dist/server/content-types/index.mjs +8 -0
  197. package/dist/server/content-types/index.mjs.map +1 -0
  198. package/dist/server/content-types/locale/index.js +10 -0
  199. package/dist/server/content-types/locale/index.js.map +1 -0
  200. package/dist/server/content-types/locale/index.mjs +8 -0
  201. package/dist/server/content-types/locale/index.mjs.map +1 -0
  202. package/dist/server/content-types/locale/schema.json.js +46 -0
  203. package/dist/server/content-types/locale/schema.json.js.map +1 -0
  204. package/dist/server/content-types/locale/schema.json.mjs +38 -0
  205. package/dist/server/content-types/locale/schema.json.mjs.map +1 -0
  206. package/dist/server/controllers/content-types.js +76 -0
  207. package/dist/server/controllers/content-types.js.map +1 -0
  208. package/dist/server/controllers/content-types.mjs +74 -0
  209. package/dist/server/controllers/content-types.mjs.map +1 -0
  210. package/dist/server/controllers/index.js +16 -0
  211. package/dist/server/controllers/index.js.map +1 -0
  212. package/dist/server/controllers/index.mjs +14 -0
  213. package/dist/server/controllers/index.mjs.map +1 -0
  214. package/dist/server/controllers/iso-locales.js +13 -0
  215. package/dist/server/controllers/iso-locales.js.map +1 -0
  216. package/dist/server/controllers/iso-locales.mjs +11 -0
  217. package/dist/server/controllers/iso-locales.mjs.map +1 -0
  218. package/dist/server/controllers/locales.js +108 -0
  219. package/dist/server/controllers/locales.js.map +1 -0
  220. package/dist/server/controllers/locales.mjs +87 -0
  221. package/dist/server/controllers/locales.mjs.map +1 -0
  222. package/dist/server/controllers/settings.js +24 -0
  223. package/dist/server/controllers/settings.js.map +1 -0
  224. package/dist/server/controllers/settings.mjs +22 -0
  225. package/dist/server/controllers/settings.mjs.map +1 -0
  226. package/dist/server/controllers/validate-locale-creation.js +47 -0
  227. package/dist/server/controllers/validate-locale-creation.js.map +1 -0
  228. package/dist/server/controllers/validate-locale-creation.mjs +45 -0
  229. package/dist/server/controllers/validate-locale-creation.mjs.map +1 -0
  230. package/dist/server/domain/locale.js +11 -0
  231. package/dist/server/domain/locale.js.map +1 -0
  232. package/dist/server/domain/locale.mjs +9 -0
  233. package/dist/server/domain/locale.mjs.map +1 -0
  234. package/dist/server/graphql.js +115 -0
  235. package/dist/server/graphql.js.map +1 -0
  236. package/dist/server/graphql.mjs +113 -0
  237. package/dist/server/graphql.mjs.map +1 -0
  238. package/dist/server/index.js +10 -3712
  239. package/dist/server/index.js.map +1 -1
  240. package/dist/server/index.mjs +7 -3691
  241. package/dist/server/index.mjs.map +1 -1
  242. package/dist/server/register.js +79 -0
  243. package/dist/server/register.js.map +1 -0
  244. package/dist/server/register.mjs +77 -0
  245. package/dist/server/register.mjs.map +1 -0
  246. package/dist/server/routes/admin.js +122 -0
  247. package/dist/server/routes/admin.js.map +1 -0
  248. package/dist/server/routes/admin.mjs +120 -0
  249. package/dist/server/routes/admin.mjs.map +1 -0
  250. package/dist/server/routes/content-api.js +19 -0
  251. package/dist/server/routes/content-api.js.map +1 -0
  252. package/dist/server/routes/content-api.mjs +17 -0
  253. package/dist/server/routes/content-api.mjs.map +1 -0
  254. package/dist/server/routes/index.js +12 -0
  255. package/dist/server/routes/index.js.map +1 -0
  256. package/dist/server/routes/index.mjs +10 -0
  257. package/dist/server/routes/index.mjs.map +1 -0
  258. package/dist/server/routes/validation/locale.js +57 -0
  259. package/dist/server/routes/validation/locale.js.map +1 -0
  260. package/dist/server/routes/validation/locale.mjs +36 -0
  261. package/dist/server/routes/validation/locale.mjs.map +1 -0
  262. package/dist/server/services/ai-localizations.js +28 -0
  263. package/dist/server/services/ai-localizations.js.map +1 -0
  264. package/dist/server/services/ai-localizations.mjs +26 -0
  265. package/dist/server/services/ai-localizations.mjs.map +1 -0
  266. package/dist/server/services/content-types.js +157 -0
  267. package/dist/server/services/content-types.js.map +1 -0
  268. package/dist/server/services/content-types.mjs +155 -0
  269. package/dist/server/services/content-types.mjs.map +1 -0
  270. package/dist/server/services/index.js +26 -0
  271. package/dist/server/services/index.js.map +1 -0
  272. package/dist/server/services/index.mjs +24 -0
  273. package/dist/server/services/index.mjs.map +1 -0
  274. package/dist/server/services/iso-locales.js +12 -0
  275. package/dist/server/services/iso-locales.js.map +1 -0
  276. package/dist/server/services/iso-locales.mjs +10 -0
  277. package/dist/server/services/iso-locales.mjs.map +1 -0
  278. package/dist/server/services/locales.js +114 -0
  279. package/dist/server/services/locales.js.map +1 -0
  280. package/dist/server/services/locales.mjs +112 -0
  281. package/dist/server/services/locales.mjs.map +1 -0
  282. package/dist/server/services/localizations.js +68 -0
  283. package/dist/server/services/localizations.js.map +1 -0
  284. package/dist/server/services/localizations.mjs +66 -0
  285. package/dist/server/services/localizations.mjs.map +1 -0
  286. package/dist/server/services/metrics.js +30 -0
  287. package/dist/server/services/metrics.js.map +1 -0
  288. package/dist/server/services/metrics.mjs +28 -0
  289. package/dist/server/services/metrics.mjs.map +1 -0
  290. package/dist/server/services/permissions/actions.js +136 -0
  291. package/dist/server/services/permissions/actions.js.map +1 -0
  292. package/dist/server/services/permissions/actions.mjs +134 -0
  293. package/dist/server/services/permissions/actions.mjs.map +1 -0
  294. package/dist/server/services/permissions/engine.js +52 -0
  295. package/dist/server/services/permissions/engine.js.map +1 -0
  296. package/dist/server/services/permissions/engine.mjs +50 -0
  297. package/dist/server/services/permissions/engine.mjs.map +1 -0
  298. package/dist/server/services/permissions/sections-builder.js +45 -0
  299. package/dist/server/services/permissions/sections-builder.js.map +1 -0
  300. package/dist/server/services/permissions/sections-builder.mjs +43 -0
  301. package/dist/server/services/permissions/sections-builder.mjs.map +1 -0
  302. package/dist/server/services/permissions.js +14 -0
  303. package/dist/server/services/permissions.js.map +1 -0
  304. package/dist/server/services/permissions.mjs +12 -0
  305. package/dist/server/services/permissions.mjs.map +1 -0
  306. package/dist/server/services/sanitize/index.js +34 -0
  307. package/dist/server/services/sanitize/index.js.map +1 -0
  308. package/dist/server/services/sanitize/index.mjs +32 -0
  309. package/dist/server/services/sanitize/index.mjs.map +1 -0
  310. package/dist/server/services/settings.js +25 -0
  311. package/dist/server/services/settings.js.map +1 -0
  312. package/dist/server/services/settings.mjs +23 -0
  313. package/dist/server/services/settings.mjs.map +1 -0
  314. package/dist/server/src/controllers/index.d.ts +4 -0
  315. package/dist/server/src/controllers/index.d.ts.map +1 -1
  316. package/dist/server/src/controllers/settings.d.ts +7 -0
  317. package/dist/server/src/controllers/settings.d.ts.map +1 -0
  318. package/dist/server/src/index.d.ts +22 -7
  319. package/dist/server/src/index.d.ts.map +1 -1
  320. package/dist/server/src/routes/admin.d.ts.map +1 -1
  321. package/dist/server/src/routes/content-api.d.ts +5 -8
  322. package/dist/server/src/routes/content-api.d.ts.map +1 -1
  323. package/dist/server/src/routes/index.d.ts +3 -7
  324. package/dist/server/src/routes/index.d.ts.map +1 -1
  325. package/dist/server/src/routes/validation/index.d.ts +2 -0
  326. package/dist/server/src/routes/validation/index.d.ts.map +1 -0
  327. package/dist/server/src/routes/validation/locale.d.ts +41 -0
  328. package/dist/server/src/routes/validation/locale.d.ts.map +1 -0
  329. package/dist/server/src/services/ai-localizations.d.ts +8 -0
  330. package/dist/server/src/services/ai-localizations.d.ts.map +1 -0
  331. package/dist/server/src/services/index.d.ts +15 -0
  332. package/dist/server/src/services/index.d.ts.map +1 -1
  333. package/dist/server/src/services/settings.d.ts +13 -0
  334. package/dist/server/src/services/settings.d.ts.map +1 -0
  335. package/dist/server/src/utils/index.d.ts +3 -1
  336. package/dist/server/src/utils/index.d.ts.map +1 -1
  337. package/dist/server/src/validation/settings.d.ts +12 -0
  338. package/dist/server/src/validation/settings.d.ts.map +1 -0
  339. package/dist/server/utils/index.js +16 -0
  340. package/dist/server/utils/index.js.map +1 -0
  341. package/dist/server/utils/index.mjs +13 -0
  342. package/dist/server/utils/index.mjs.map +1 -0
  343. package/dist/server/validation/content-types.js +18 -0
  344. package/dist/server/validation/content-types.js.map +1 -0
  345. package/dist/server/validation/content-types.mjs +16 -0
  346. package/dist/server/validation/content-types.mjs.map +1 -0
  347. package/dist/server/validation/locales.js +23 -0
  348. package/dist/server/validation/locales.js.map +1 -0
  349. package/dist/server/validation/locales.mjs +20 -0
  350. package/dist/server/validation/locales.mjs.map +1 -0
  351. package/dist/server/validation/settings.js +11 -0
  352. package/dist/server/validation/settings.js.map +1 -0
  353. package/dist/server/validation/settings.mjs +9 -0
  354. package/dist/server/validation/settings.mjs.map +1 -0
  355. package/dist/shared/contracts/settings.d.ts +40 -0
  356. package/package.json +11 -9
  357. package/dist/admin/chunks/SettingsPage-BOEeBbiM.mjs +0 -797
  358. package/dist/admin/chunks/SettingsPage-BOEeBbiM.mjs.map +0 -1
  359. package/dist/admin/chunks/SettingsPage-Mg2Ygywx.js +0 -820
  360. package/dist/admin/chunks/SettingsPage-Mg2Ygywx.js.map +0 -1
  361. package/dist/admin/chunks/de-Cm8mYdaO.mjs.map +0 -1
  362. package/dist/admin/chunks/de-nEMWvIiY.js.map +0 -1
  363. package/dist/admin/chunks/dk-BeUFOegB.mjs.map +0 -1
  364. package/dist/admin/chunks/dk-CYATLPVe.js.map +0 -1
  365. package/dist/admin/chunks/en-CG5cUCbD.js.map +0 -1
  366. package/dist/admin/chunks/en-eWSaCeOb.mjs.map +0 -1
  367. package/dist/admin/chunks/es-CWsogTGm.js.map +0 -1
  368. package/dist/admin/chunks/es-DqF_IdAc.mjs.map +0 -1
  369. package/dist/admin/chunks/fr-CC7UFcYd.js.map +0 -1
  370. package/dist/admin/chunks/fr-CyARbZ3c.mjs.map +0 -1
  371. package/dist/admin/chunks/index--VTS8j_L.mjs +0 -2008
  372. package/dist/admin/chunks/index--VTS8j_L.mjs.map +0 -1
  373. package/dist/admin/chunks/index-hJ67XV0K.js +0 -2037
  374. package/dist/admin/chunks/index-hJ67XV0K.js.map +0 -1
  375. package/dist/admin/chunks/ko-Ax4NSedM.mjs.map +0 -1
  376. package/dist/admin/chunks/ko-XwGmfhoq.js.map +0 -1
  377. package/dist/admin/chunks/pl-B-aqvMqL.mjs.map +0 -1
  378. package/dist/admin/chunks/pl-B_vzY_ZB.js.map +0 -1
  379. package/dist/admin/chunks/ru-VkPjQ-Sk.mjs.map +0 -1
  380. package/dist/admin/chunks/ru-WzHcJV1f.js.map +0 -1
  381. package/dist/admin/chunks/tr-CcWp6u3w.js.map +0 -1
  382. package/dist/admin/chunks/tr-DcTR88c9.mjs.map +0 -1
  383. package/dist/admin/chunks/uk-CMz6iPag.mjs.map +0 -1
  384. package/dist/admin/chunks/uk-CO6JHYRC.js.map +0 -1
  385. package/dist/admin/chunks/zh-C9So4SGq.js.map +0 -1
  386. package/dist/admin/chunks/zh-Hans-DnU2bhri.js.map +0 -1
  387. package/dist/admin/chunks/zh-Hans-L3wsRegj.mjs.map +0 -1
  388. package/dist/admin/chunks/zh-RZyMiPIs.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