@strapi/admin 5.0.0-beta.1 → 5.0.0-beta.3

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 (1022) hide show
  1. package/dist/admin/AdminSeatInfo-H5eNy3Gq.js +105 -0
  2. package/dist/admin/AdminSeatInfo-H5eNy3Gq.js.map +1 -0
  3. package/dist/admin/AdminSeatInfo-jPH1stsB.mjs +101 -0
  4. package/dist/admin/AdminSeatInfo-jPH1stsB.mjs.map +1 -0
  5. package/dist/admin/ApplicationInfoPage-QiVVy6LS.mjs +664 -0
  6. package/dist/admin/ApplicationInfoPage-QiVVy6LS.mjs.map +1 -0
  7. package/dist/admin/ApplicationInfoPage-leY1AEgo.js +692 -0
  8. package/dist/admin/ApplicationInfoPage-leY1AEgo.js.map +1 -0
  9. package/dist/admin/AuthResponse-5G-7aJDM.mjs +43 -0
  10. package/dist/admin/AuthResponse-5G-7aJDM.mjs.map +1 -0
  11. package/dist/admin/AuthResponse-kdo9DYPT.js +70 -0
  12. package/dist/admin/AuthResponse-kdo9DYPT.js.map +1 -0
  13. package/dist/admin/AuthenticatedLayout-1x0WC6c6.js +1121 -0
  14. package/dist/admin/AuthenticatedLayout-1x0WC6c6.js.map +1 -0
  15. package/dist/admin/AuthenticatedLayout-zaOd05gw.mjs +1088 -0
  16. package/dist/admin/AuthenticatedLayout-zaOd05gw.mjs.map +1 -0
  17. package/dist/admin/CreateActionEE-2DKYzbq_.js +61 -0
  18. package/dist/admin/CreateActionEE-2DKYzbq_.js.map +1 -0
  19. package/dist/admin/CreateActionEE-TcGdWjIN.mjs +53 -0
  20. package/dist/admin/CreateActionEE-TcGdWjIN.mjs.map +1 -0
  21. package/dist/admin/CreatePage-J84OUqE4.js +269 -0
  22. package/dist/admin/CreatePage-J84OUqE4.js.map +1 -0
  23. package/dist/admin/CreatePage-gSoe3n8A.mjs +13 -0
  24. package/dist/admin/CreatePage-gSoe3n8A.mjs.map +1 -0
  25. package/dist/admin/CreatePage-pniatTP-.mjs +240 -0
  26. package/dist/admin/CreatePage-pniatTP-.mjs.map +1 -0
  27. package/dist/admin/CreatePage-z4ERqv1R.js +18 -0
  28. package/dist/admin/CreatePage-z4ERqv1R.js.map +1 -0
  29. package/dist/admin/CreateView-BdO0Pvex.mjs +13 -0
  30. package/dist/admin/CreateView-BdO0Pvex.mjs.map +1 -0
  31. package/dist/admin/CreateView-JNmfRawb.js +17 -0
  32. package/dist/admin/CreateView-JNmfRawb.js.map +1 -0
  33. package/dist/admin/CreateView-NwMXZjDh.js +17 -0
  34. package/dist/admin/CreateView-NwMXZjDh.js.map +1 -0
  35. package/dist/admin/CreateView-sFb3ySEj.mjs +13 -0
  36. package/dist/admin/CreateView-sFb3ySEj.mjs.map +1 -0
  37. package/dist/admin/EditPage-3wx6NJgA.mjs +790 -0
  38. package/dist/admin/EditPage-3wx6NJgA.mjs.map +1 -0
  39. package/dist/admin/EditPage-IQRLHMer.mjs +322 -0
  40. package/dist/admin/EditPage-IQRLHMer.mjs.map +1 -0
  41. package/dist/admin/EditPage-dAyJwJfs.js +351 -0
  42. package/dist/admin/EditPage-dAyJwJfs.js.map +1 -0
  43. package/dist/admin/EditPage-eR6riBsR.js +818 -0
  44. package/dist/admin/EditPage-eR6riBsR.js.map +1 -0
  45. package/dist/admin/EditPage-rdOE18EC.js +281 -0
  46. package/dist/admin/EditPage-rdOE18EC.js.map +1 -0
  47. package/dist/admin/EditPage-yztdPcnM.mjs +255 -0
  48. package/dist/admin/EditPage-yztdPcnM.mjs.map +1 -0
  49. package/dist/admin/EditView-fbzip_S8.mjs +332 -0
  50. package/dist/admin/EditView-fbzip_S8.mjs.map +1 -0
  51. package/dist/admin/EditView-oyHNBKvL.js +358 -0
  52. package/dist/admin/EditView-oyHNBKvL.js.map +1 -0
  53. package/dist/admin/EditViewPage-LdDGNi6d.js +875 -0
  54. package/dist/admin/EditViewPage-LdDGNi6d.js.map +1 -0
  55. package/dist/admin/EditViewPage-rDgxiutd.mjs +842 -0
  56. package/dist/admin/EditViewPage-rDgxiutd.mjs.map +1 -0
  57. package/dist/admin/EventsTable--peC0Geq.js +36 -0
  58. package/dist/admin/EventsTable--peC0Geq.js.map +1 -0
  59. package/dist/admin/EventsTable-rNMPq-X1.mjs +32 -0
  60. package/dist/admin/EventsTable-rNMPq-X1.mjs.map +1 -0
  61. package/dist/admin/HomePage-14WM2hIE.js +15 -0
  62. package/dist/admin/HomePage-14WM2hIE.js.map +1 -0
  63. package/dist/admin/HomePage-e2Bs6Kar.js +591 -0
  64. package/dist/admin/HomePage-e2Bs6Kar.js.map +1 -0
  65. package/dist/admin/HomePage-qgAro8dS.mjs +563 -0
  66. package/dist/admin/HomePage-qgAro8dS.mjs.map +1 -0
  67. package/dist/admin/HomePage-zQ7HL9y6.mjs +11 -0
  68. package/dist/admin/HomePage-zQ7HL9y6.mjs.map +1 -0
  69. package/dist/admin/InstalledPluginsPage-ZIPyDrzh.js +121 -0
  70. package/dist/admin/InstalledPluginsPage-ZIPyDrzh.js.map +1 -0
  71. package/dist/admin/InstalledPluginsPage-s_PGIc3_.mjs +96 -0
  72. package/dist/admin/InstalledPluginsPage-s_PGIc3_.mjs.map +1 -0
  73. package/dist/admin/Layout-KAX2c8wc.js +232 -0
  74. package/dist/admin/Layout-KAX2c8wc.js.map +1 -0
  75. package/dist/admin/Layout-mEj5c1Bi.mjs +204 -0
  76. package/dist/admin/Layout-mEj5c1Bi.mjs.map +1 -0
  77. package/dist/admin/ListPage-AI8neqxV.mjs +332 -0
  78. package/dist/admin/ListPage-AI8neqxV.mjs.map +1 -0
  79. package/dist/admin/ListPage-ARW72ceH.js +357 -0
  80. package/dist/admin/ListPage-ARW72ceH.js.map +1 -0
  81. package/dist/admin/ListPage-AUimd0cK.js +563 -0
  82. package/dist/admin/ListPage-AUimd0cK.js.map +1 -0
  83. package/dist/admin/ListPage-BIpKdUdv.mjs +486 -0
  84. package/dist/admin/ListPage-BIpKdUdv.mjs.map +1 -0
  85. package/dist/admin/ListPage-DxI49fdQ.js +307 -0
  86. package/dist/admin/ListPage-DxI49fdQ.js.map +1 -0
  87. package/dist/admin/ListPage-MvgbZlgc.js +15 -0
  88. package/dist/admin/ListPage-MvgbZlgc.js.map +1 -0
  89. package/dist/admin/ListPage-ZDEeaYvm.mjs +11 -0
  90. package/dist/admin/ListPage-ZDEeaYvm.mjs.map +1 -0
  91. package/dist/admin/ListPage-asZ9aDzG.mjs +282 -0
  92. package/dist/admin/ListPage-asZ9aDzG.mjs.map +1 -0
  93. package/dist/admin/ListPage-romICg1Z.js +514 -0
  94. package/dist/admin/ListPage-romICg1Z.js.map +1 -0
  95. package/dist/admin/ListPage-tniramRN.mjs +535 -0
  96. package/dist/admin/ListPage-tniramRN.mjs.map +1 -0
  97. package/dist/admin/ListView-1VRmjfh8.js +232 -0
  98. package/dist/admin/ListView-1VRmjfh8.js.map +1 -0
  99. package/dist/admin/ListView-6hlTFx5H.mjs +197 -0
  100. package/dist/admin/ListView-6hlTFx5H.mjs.map +1 -0
  101. package/dist/admin/ListView-GYuN24HV.mjs +206 -0
  102. package/dist/admin/ListView-GYuN24HV.mjs.map +1 -0
  103. package/dist/admin/ListView-ph55AtDF.js +223 -0
  104. package/dist/admin/ListView-ph55AtDF.js.map +1 -0
  105. package/dist/admin/Login-LxE58baP.mjs +31 -0
  106. package/dist/admin/Login-LxE58baP.mjs.map +1 -0
  107. package/dist/admin/Login-WeDT3kAj.js +39 -0
  108. package/dist/admin/Login-WeDT3kAj.js.map +1 -0
  109. package/dist/admin/MagicLinkEE-AO_SBYi5.mjs +27 -0
  110. package/dist/admin/MagicLinkEE-AO_SBYi5.mjs.map +1 -0
  111. package/dist/admin/MagicLinkEE-_fUwHKdf.js +31 -0
  112. package/dist/admin/MagicLinkEE-_fUwHKdf.js.map +1 -0
  113. package/dist/admin/MarketplacePage-26cUn4e5.mjs +1020 -0
  114. package/dist/admin/MarketplacePage-26cUn4e5.mjs.map +1 -0
  115. package/dist/admin/MarketplacePage-m8Lf3adM.js +1051 -0
  116. package/dist/admin/MarketplacePage-m8Lf3adM.js.map +1 -0
  117. package/dist/admin/Ornaments-RhzFP9rf.js +214 -0
  118. package/dist/admin/Ornaments-RhzFP9rf.js.map +1 -0
  119. package/dist/admin/Permissions-NRzJqZEr.js +2086 -0
  120. package/dist/admin/Permissions-NRzJqZEr.js.map +1 -0
  121. package/dist/admin/Permissions-VzklM1ie.mjs +2050 -0
  122. package/dist/admin/Permissions-VzklM1ie.mjs.map +1 -0
  123. package/dist/admin/PrivateRoute-KAM10GGM.js +22 -0
  124. package/dist/admin/PrivateRoute-KAM10GGM.js.map +1 -0
  125. package/dist/admin/PrivateRoute-wDu6Vo0N.mjs +20 -0
  126. package/dist/admin/PrivateRoute-wDu6Vo0N.mjs.map +1 -0
  127. package/dist/admin/ProfilePage-0d-k7mtP.mjs +387 -0
  128. package/dist/admin/ProfilePage-0d-k7mtP.mjs.map +1 -0
  129. package/dist/admin/ProfilePage-oSih4pcL.js +415 -0
  130. package/dist/admin/ProfilePage-oSih4pcL.js.map +1 -0
  131. package/dist/admin/PurchaseAuditLogs-8_4PcW7P.mjs +48 -0
  132. package/dist/admin/PurchaseAuditLogs-8_4PcW7P.mjs.map +1 -0
  133. package/dist/admin/PurchaseAuditLogs-tS_tVSGI.js +52 -0
  134. package/dist/admin/PurchaseAuditLogs-tS_tVSGI.js.map +1 -0
  135. package/dist/admin/PurchaseSingleSignOn--gblfVu6.mjs +51 -0
  136. package/dist/admin/PurchaseSingleSignOn--gblfVu6.mjs.map +1 -0
  137. package/dist/admin/PurchaseSingleSignOn-9SV6-fYs.js +55 -0
  138. package/dist/admin/PurchaseSingleSignOn-9SV6-fYs.js.map +1 -0
  139. package/dist/admin/SelectRoles-V_PZUtVT.mjs +106 -0
  140. package/dist/admin/SelectRoles-V_PZUtVT.mjs.map +1 -0
  141. package/dist/admin/SelectRoles-ZsRUnSdr.js +114 -0
  142. package/dist/admin/SelectRoles-ZsRUnSdr.js.map +1 -0
  143. package/dist/admin/SingleSignOnPage-jtjy4_4U.js +259 -0
  144. package/dist/admin/SingleSignOnPage-jtjy4_4U.js.map +1 -0
  145. package/dist/admin/SingleSignOnPage-kbLz1A_y.mjs +234 -0
  146. package/dist/admin/SingleSignOnPage-kbLz1A_y.mjs.map +1 -0
  147. package/dist/admin/Table-ZFyORhH3.mjs +196 -0
  148. package/dist/admin/Table-ZFyORhH3.mjs.map +1 -0
  149. package/dist/admin/Table-kMt3jQ2g.js +221 -0
  150. package/dist/admin/Table-kMt3jQ2g.js.map +1 -0
  151. package/dist/admin/TokenTypeSelect-Ngz4ONEL.js +386 -0
  152. package/dist/admin/TokenTypeSelect-Ngz4ONEL.js.map +1 -0
  153. package/dist/admin/TokenTypeSelect-oOKwvsQ2.mjs +358 -0
  154. package/dist/admin/TokenTypeSelect-oOKwvsQ2.mjs.map +1 -0
  155. package/dist/admin/UseCasePage-2wum_xzS.mjs +146 -0
  156. package/dist/admin/UseCasePage-2wum_xzS.mjs.map +1 -0
  157. package/dist/admin/UseCasePage-qrhHiF5S.js +175 -0
  158. package/dist/admin/UseCasePage-qrhHiF5S.js.map +1 -0
  159. package/dist/admin/admin-DUKhYsmP.mjs +256 -0
  160. package/dist/admin/admin-DUKhYsmP.mjs.map +1 -0
  161. package/dist/admin/admin-vlKSOeHB.js +274 -0
  162. package/dist/admin/admin-vlKSOeHB.js.map +1 -0
  163. package/dist/admin/apiTokens-dBRuo1wd.mjs +56 -0
  164. package/dist/admin/apiTokens-dBRuo1wd.mjs.map +1 -0
  165. package/dist/admin/apiTokens-lXn03No3.js +62 -0
  166. package/dist/admin/apiTokens-lXn03No3.js.map +1 -0
  167. package/dist/admin/ar-74XpZHjA.js +853 -0
  168. package/dist/admin/ar-74XpZHjA.js.map +1 -0
  169. package/dist/admin/ar-gTQs8p7A.mjs +832 -0
  170. package/dist/admin/ar-gTQs8p7A.mjs.map +1 -0
  171. package/dist/admin/ca-A-U5stlG.mjs +520 -0
  172. package/dist/admin/ca-A-U5stlG.mjs.map +1 -0
  173. package/dist/admin/ca-tfhzbe_0.js +538 -0
  174. package/dist/admin/ca-tfhzbe_0.js.map +1 -0
  175. package/dist/admin/constants-enREoOEa.mjs +52 -0
  176. package/dist/admin/constants-enREoOEa.mjs.map +1 -0
  177. package/dist/admin/constants-jQFnBWVd.js +60 -0
  178. package/dist/admin/constants-jQFnBWVd.js.map +1 -0
  179. package/dist/admin/cs-iYqoHUVt.mjs +166 -0
  180. package/dist/admin/cs-iYqoHUVt.mjs.map +1 -0
  181. package/dist/admin/cs-sS-228vY.js +179 -0
  182. package/dist/admin/cs-sS-228vY.js.map +1 -0
  183. package/dist/admin/de-og0YSnla.js +532 -0
  184. package/dist/admin/de-og0YSnla.js.map +1 -0
  185. package/dist/admin/de-uZBjRd6a.mjs +514 -0
  186. package/dist/admin/de-uZBjRd6a.mjs.map +1 -0
  187. package/dist/admin/dk-GtDhDxRc.js +452 -0
  188. package/dist/admin/dk-GtDhDxRc.js.map +1 -0
  189. package/dist/admin/dk-nXAO32DE.mjs +434 -0
  190. package/dist/admin/dk-nXAO32DE.mjs.map +1 -0
  191. package/dist/admin/ee.js +12 -0
  192. package/dist/admin/ee.js.map +1 -0
  193. package/dist/admin/ee.mjs +3 -0
  194. package/dist/admin/ee.mjs.map +1 -0
  195. package/dist/admin/en-2FB7x9Rq.js +804 -0
  196. package/dist/admin/en-2FB7x9Rq.js.map +1 -0
  197. package/dist/admin/en-qvX6GTOD.mjs +783 -0
  198. package/dist/admin/en-qvX6GTOD.mjs.map +1 -0
  199. package/dist/admin/es-TQtY4G8X.js +615 -0
  200. package/dist/admin/es-TQtY4G8X.js.map +1 -0
  201. package/dist/admin/es-i0dEHPPQ.mjs +595 -0
  202. package/dist/admin/es-i0dEHPPQ.mjs.map +1 -0
  203. package/dist/admin/eu-SRdPRyQu.js +645 -0
  204. package/dist/admin/eu-SRdPRyQu.js.map +1 -0
  205. package/dist/admin/eu-wFmYHERY.mjs +625 -0
  206. package/dist/admin/eu-wFmYHERY.mjs.map +1 -0
  207. package/dist/admin/fr-GW5-kEO9.js +571 -0
  208. package/dist/admin/fr-GW5-kEO9.js.map +1 -0
  209. package/dist/admin/fr-OI7VyC_k.mjs +550 -0
  210. package/dist/admin/fr-OI7VyC_k.mjs.map +1 -0
  211. package/dist/admin/gu-z6qqOLRh.js +438 -0
  212. package/dist/admin/gu-z6qqOLRh.js.map +1 -0
  213. package/dist/admin/gu-zSaMc-a6.mjs +429 -0
  214. package/dist/admin/gu-zSaMc-a6.mjs.map +1 -0
  215. package/dist/admin/he-CLdZZ_n1.js +329 -0
  216. package/dist/admin/he-CLdZZ_n1.js.map +1 -0
  217. package/dist/admin/he-YzAGShlQ.mjs +315 -0
  218. package/dist/admin/he-YzAGShlQ.mjs.map +1 -0
  219. package/dist/admin/hi-3pMoYe6q.js +537 -0
  220. package/dist/admin/hi-3pMoYe6q.js.map +1 -0
  221. package/dist/admin/hi-ZQ4t6UdY.mjs +519 -0
  222. package/dist/admin/hi-ZQ4t6UdY.mjs.map +1 -0
  223. package/dist/admin/hu-O1FJoY8c.mjs +625 -0
  224. package/dist/admin/hu-O1FJoY8c.mjs.map +1 -0
  225. package/dist/admin/hu-VxIqV1X0.js +645 -0
  226. package/dist/admin/hu-VxIqV1X0.js.map +1 -0
  227. package/dist/admin/id-Lb_0kPQU.mjs +290 -0
  228. package/dist/admin/id-Lb_0kPQU.mjs.map +1 -0
  229. package/dist/admin/id-cUUpuxZO.js +303 -0
  230. package/dist/admin/id-cUUpuxZO.js.map +1 -0
  231. package/dist/admin/index-dcaxfEDi.js +5241 -0
  232. package/dist/admin/index-dcaxfEDi.js.map +1 -0
  233. package/dist/admin/index-oBxjGftZ.mjs +5163 -0
  234. package/dist/admin/index-oBxjGftZ.mjs.map +1 -0
  235. package/dist/admin/index.js +26 -27
  236. package/dist/admin/index.js.map +1 -1
  237. package/dist/admin/index.mjs +3 -3
  238. package/dist/admin/it-136monzD.mjs +299 -0
  239. package/dist/admin/it-136monzD.mjs.map +1 -0
  240. package/dist/admin/it-m8H0rXTP.js +312 -0
  241. package/dist/admin/it-m8H0rXTP.js.map +1 -0
  242. package/dist/admin/ja-0-FUC0T4.mjs +434 -0
  243. package/dist/admin/ja-0-FUC0T4.mjs.map +1 -0
  244. package/dist/admin/ja-jhqUhh7F.js +452 -0
  245. package/dist/admin/ja-jhqUhh7F.js.map +1 -0
  246. package/dist/admin/ko-Fq49QS3z.js +451 -0
  247. package/dist/admin/ko-Fq49QS3z.js.map +1 -0
  248. package/dist/admin/ko-H3Y8GpnD.mjs +433 -0
  249. package/dist/admin/ko-H3Y8GpnD.mjs.map +1 -0
  250. package/dist/admin/ml-NPdcpJoN.mjs +519 -0
  251. package/dist/admin/ml-NPdcpJoN.mjs.map +1 -0
  252. package/dist/admin/ml-mLJM4sQP.js +537 -0
  253. package/dist/admin/ml-mLJM4sQP.js.map +1 -0
  254. package/dist/admin/ms-NDmpSkMY.js +213 -0
  255. package/dist/admin/ms-NDmpSkMY.js.map +1 -0
  256. package/dist/admin/ms-v9c434YI.mjs +200 -0
  257. package/dist/admin/ms-v9c434YI.mjs.map +1 -0
  258. package/dist/admin/nl-RREi1JAg.js +641 -0
  259. package/dist/admin/nl-RREi1JAg.js.map +1 -0
  260. package/dist/admin/nl-qHmOt3d1.mjs +621 -0
  261. package/dist/admin/nl-qHmOt3d1.mjs.map +1 -0
  262. package/dist/admin/no-2wT9Jd9n.js +313 -0
  263. package/dist/admin/no-2wT9Jd9n.js.map +1 -0
  264. package/dist/admin/no-XGZQN-Ji.mjs +300 -0
  265. package/dist/admin/no-XGZQN-Ji.mjs.map +1 -0
  266. package/dist/admin/pl-Id5YX-Pw.mjs +519 -0
  267. package/dist/admin/pl-Id5YX-Pw.mjs.map +1 -0
  268. package/dist/admin/pl-kU2npCRO.js +537 -0
  269. package/dist/admin/pl-kU2npCRO.js.map +1 -0
  270. package/dist/admin/pt-BR-0o0Gf-P8.mjs +588 -0
  271. package/dist/admin/pt-BR-0o0Gf-P8.mjs.map +1 -0
  272. package/dist/admin/pt-BR-R-dMJxPL.js +608 -0
  273. package/dist/admin/pt-BR-R-dMJxPL.js.map +1 -0
  274. package/dist/admin/pt-IygqsPYv.js +212 -0
  275. package/dist/admin/pt-IygqsPYv.js.map +1 -0
  276. package/dist/admin/pt-f52AXrxz.mjs +200 -0
  277. package/dist/admin/pt-f52AXrxz.mjs.map +1 -0
  278. package/dist/admin/rbac-WZsv1761.js +1237 -0
  279. package/dist/admin/rbac-WZsv1761.js.map +1 -0
  280. package/dist/admin/rbac-sYT_mXH0.mjs +1171 -0
  281. package/dist/admin/rbac-sYT_mXH0.mjs.map +1 -0
  282. package/dist/admin/ru-5TBoMH_2.js +766 -0
  283. package/dist/admin/ru-5TBoMH_2.js.map +1 -0
  284. package/dist/admin/ru-FpmG9SEf.mjs +745 -0
  285. package/dist/admin/ru-FpmG9SEf.mjs.map +1 -0
  286. package/dist/admin/sa-KUwV8aRB.mjs +519 -0
  287. package/dist/admin/sa-KUwV8aRB.mjs.map +1 -0
  288. package/dist/admin/sa-KmwTiEO5.js +537 -0
  289. package/dist/admin/sa-KmwTiEO5.js.map +1 -0
  290. package/dist/admin/selectors-3gRe5pAj.mjs +6 -0
  291. package/dist/admin/selectors-3gRe5pAj.mjs.map +1 -0
  292. package/dist/admin/selectors-CiTVxP8O.js +8 -0
  293. package/dist/admin/selectors-CiTVxP8O.js.map +1 -0
  294. package/dist/admin/sk-IV2uPmXo.js +503 -0
  295. package/dist/admin/sk-IV2uPmXo.js.map +1 -0
  296. package/dist/admin/sk-g_1C955P.mjs +483 -0
  297. package/dist/admin/sk-g_1C955P.mjs.map +1 -0
  298. package/dist/admin/src/StrapiApp.d.ts +12 -41
  299. package/dist/admin/src/components/Context.d.ts +6 -0
  300. package/dist/admin/src/components/Filters.d.ts +6 -1
  301. package/dist/admin/src/components/Form.d.ts +10 -1
  302. package/dist/admin/src/components/PageHelpers.d.ts +4 -0
  303. package/dist/admin/src/core/apis/rbac.d.ts +24 -0
  304. package/dist/admin/src/core/store/configure.d.ts +7 -18
  305. package/dist/admin/src/core/store/hooks.d.ts +6 -21
  306. package/dist/admin/src/ee.d.ts +5 -0
  307. package/dist/admin/src/features/Auth.d.ts +14 -3
  308. package/dist/admin/src/features/StrapiApp.d.ts +3 -1
  309. package/dist/admin/src/hooks/useAdminRoles.d.ts +1 -1
  310. package/dist/admin/src/hooks/useContentTypes.d.ts +3 -3
  311. package/dist/admin/src/hooks/useRBAC.d.ts +33 -1
  312. package/dist/admin/src/index.d.ts +8 -4
  313. package/dist/admin/src/pages/Marketplace/hooks/useMarketplaceData.d.ts +2 -2
  314. package/dist/admin/src/pages/Settings/pages/Roles/components/CollapseLabel.d.ts +1 -1
  315. package/dist/admin/src/pages/Settings/pages/Webhooks/hooks/useWebhooks.d.ts +4 -4
  316. package/dist/admin/src/selectors.d.ts +4 -14
  317. package/dist/admin/src/services/admin.d.ts +5 -5
  318. package/dist/admin/src/services/api.d.ts +3 -3
  319. package/dist/admin/src/services/apiTokens.d.ts +1 -1
  320. package/dist/admin/src/services/auth.d.ts +10 -10
  321. package/dist/admin/src/services/contentApi.d.ts +1 -1
  322. package/dist/admin/src/services/contentManager.d.ts +2 -2
  323. package/dist/admin/src/services/transferTokens.d.ts +1 -1
  324. package/dist/admin/src/services/users.d.ts +8 -8
  325. package/dist/admin/src/services/webhooks.d.ts +2 -2
  326. package/dist/admin/src/utils/once.d.ts +1 -0
  327. package/dist/admin/src/utils/urls.d.ts +7 -1
  328. package/dist/admin/src/utils/users.d.ts +4 -4
  329. package/dist/admin/sv-Uv9nW9cN.js +640 -0
  330. package/dist/admin/sv-Uv9nW9cN.js.map +1 -0
  331. package/dist/admin/sv-lzyY1dsz.mjs +620 -0
  332. package/dist/admin/sv-lzyY1dsz.mjs.map +1 -0
  333. package/dist/admin/test.js +170 -2649
  334. package/dist/admin/test.js.map +1 -1
  335. package/dist/admin/test.mjs +166 -2645
  336. package/dist/admin/test.mjs.map +1 -1
  337. package/dist/admin/tests/mockData.d.ts +0 -1065
  338. package/dist/admin/tests/store.d.ts +0 -169
  339. package/dist/admin/tests/utils.d.ts +2 -176
  340. package/dist/admin/th-7LJ9Y8EL.mjs +284 -0
  341. package/dist/admin/th-7LJ9Y8EL.mjs.map +1 -0
  342. package/dist/admin/th-SXQwWjv6.js +297 -0
  343. package/dist/admin/th-SXQwWjv6.js.map +1 -0
  344. package/dist/admin/tr-09v-DLMg.mjs +581 -0
  345. package/dist/admin/tr-09v-DLMg.mjs.map +1 -0
  346. package/dist/admin/tr-RBQM-Vq5.js +601 -0
  347. package/dist/admin/tr-RBQM-Vq5.js.map +1 -0
  348. package/dist/admin/transferTokens-5qQjIKFd.js +65 -0
  349. package/dist/admin/transferTokens-5qQjIKFd.js.map +1 -0
  350. package/dist/admin/transferTokens-OLPKYcY_.mjs +59 -0
  351. package/dist/admin/transferTokens-OLPKYcY_.mjs.map +1 -0
  352. package/dist/admin/uk-38IblmOr.mjs +201 -0
  353. package/dist/admin/uk-38IblmOr.mjs.map +1 -0
  354. package/dist/admin/uk-5T4XFIKm.js +214 -0
  355. package/dist/admin/uk-5T4XFIKm.js.map +1 -0
  356. package/dist/admin/useAdminRoles-HWIbyk2Z.mjs +28 -0
  357. package/dist/admin/useAdminRoles-HWIbyk2Z.mjs.map +1 -0
  358. package/dist/admin/useAdminRoles-Q2BxHs4o.js +50 -0
  359. package/dist/admin/useAdminRoles-Q2BxHs4o.js.map +1 -0
  360. package/dist/admin/useEnterprise-DUs6BYlP.js +50 -0
  361. package/dist/admin/useEnterprise-DUs6BYlP.js.map +1 -0
  362. package/dist/admin/useEnterprise-jpsYZWzn.mjs +28 -0
  363. package/dist/admin/useEnterprise-jpsYZWzn.mjs.map +1 -0
  364. package/dist/admin/useLicenseLimitNotification-0UWeCY_u.js +105 -0
  365. package/dist/admin/useLicenseLimitNotification-0UWeCY_u.js.map +1 -0
  366. package/dist/admin/useLicenseLimitNotification-aTNbD3xK.mjs +80 -0
  367. package/dist/admin/useLicenseLimitNotification-aTNbD3xK.mjs.map +1 -0
  368. package/dist/admin/useLicenseLimits-F7K-YWAE.mjs +23 -0
  369. package/dist/admin/useLicenseLimits-F7K-YWAE.mjs.map +1 -0
  370. package/dist/admin/useLicenseLimits-m11DOu9p.js +45 -0
  371. package/dist/admin/useLicenseLimits-m11DOu9p.js.map +1 -0
  372. package/dist/admin/useWebhooks-7BXPSMHG.mjs +91 -0
  373. package/dist/admin/useWebhooks-7BXPSMHG.mjs.map +1 -0
  374. package/dist/admin/useWebhooks-oZ5DKtvz.js +93 -0
  375. package/dist/admin/useWebhooks-oZ5DKtvz.js.map +1 -0
  376. package/dist/admin/users-R5A0kUOV.js +33 -0
  377. package/dist/admin/users-R5A0kUOV.js.map +1 -0
  378. package/dist/admin/users-a4KTyEyc.mjs +30 -0
  379. package/dist/admin/users-a4KTyEyc.mjs.map +1 -0
  380. package/dist/admin/validation-2MGgF10o.js +65 -0
  381. package/dist/admin/validation-2MGgF10o.js.map +1 -0
  382. package/dist/admin/validation-gH-06ERZ.mjs +43 -0
  383. package/dist/admin/validation-gH-06ERZ.mjs.map +1 -0
  384. package/dist/admin/vi-mj-Smy3d.js +200 -0
  385. package/dist/admin/vi-mj-Smy3d.js.map +1 -0
  386. package/dist/admin/vi-ryNZtXtk.mjs +187 -0
  387. package/dist/admin/vi-ryNZtXtk.mjs.map +1 -0
  388. package/dist/admin/zh-6qF5HCOo.js +642 -0
  389. package/dist/admin/zh-6qF5HCOo.js.map +1 -0
  390. package/dist/admin/zh-Hans-HlxDUeVA.mjs +716 -0
  391. package/dist/admin/zh-Hans-HlxDUeVA.mjs.map +1 -0
  392. package/dist/admin/zh-Hans-eWSoi9-X.js +737 -0
  393. package/dist/admin/zh-Hans-eWSoi9-X.js.map +1 -0
  394. package/dist/admin/zh-WEteLuNm.mjs +622 -0
  395. package/dist/admin/zh-WEteLuNm.mjs.map +1 -0
  396. package/dist/ee/admin/src/hooks/useLicenseLimits.d.ts +1 -1
  397. package/dist/ee/admin/src/services/auditLogs.d.ts +1 -1
  398. package/dist/ee/server/index.js +20 -31
  399. package/dist/ee/server/index.js.map +1 -1
  400. package/dist/ee/server/index.mjs +21 -32
  401. package/dist/ee/server/index.mjs.map +1 -1
  402. package/dist/package.json.d.ts +24 -33
  403. package/dist/server/index.js +51 -55
  404. package/dist/server/index.js.map +1 -1
  405. package/dist/server/index.mjs +52 -56
  406. package/dist/server/index.mjs.map +1 -1
  407. package/dist/server/src/controllers/admin.d.ts.map +1 -1
  408. package/dist/server/src/controllers/webhooks.d.ts.map +1 -1
  409. package/dist/server/src/services/passport.d.ts.map +1 -1
  410. package/dist/server/src/validation/project-settings.d.ts +52 -6
  411. package/dist/server/src/validation/project-settings.d.ts.map +1 -1
  412. package/dist/shared/contracts/content-types.d.ts +5 -0
  413. package/dist/shared/contracts/content-types.d.ts.map +1 -0
  414. package/package.json +25 -34
  415. package/dist/admin/AdminSeatInfo-Gp4BFR1_.js +0 -105
  416. package/dist/admin/AdminSeatInfo-Gp4BFR1_.js.map +0 -1
  417. package/dist/admin/AdminSeatInfo-dDgFBcLY.mjs +0 -101
  418. package/dist/admin/AdminSeatInfo-dDgFBcLY.mjs.map +0 -1
  419. package/dist/admin/ApplicationInfoPage-GQLKLk5T.mjs +0 -670
  420. package/dist/admin/ApplicationInfoPage-GQLKLk5T.mjs.map +0 -1
  421. package/dist/admin/ApplicationInfoPage-e_sOqQMh.js +0 -698
  422. package/dist/admin/ApplicationInfoPage-e_sOqQMh.js.map +0 -1
  423. package/dist/admin/AuthResponse-gf-zZkxm.mjs +0 -43
  424. package/dist/admin/AuthResponse-gf-zZkxm.mjs.map +0 -1
  425. package/dist/admin/AuthResponse-l5QiAAK7.js +0 -70
  426. package/dist/admin/AuthResponse-l5QiAAK7.js.map +0 -1
  427. package/dist/admin/AuthenticatedLayout-3fYM18Xy.mjs +0 -1115
  428. package/dist/admin/AuthenticatedLayout-3fYM18Xy.mjs.map +0 -1
  429. package/dist/admin/AuthenticatedLayout-gGQYIisy.js +0 -1148
  430. package/dist/admin/AuthenticatedLayout-gGQYIisy.js.map +0 -1
  431. package/dist/admin/ComponentConfigurationPage-0kf7a5LK.mjs +0 -237
  432. package/dist/admin/ComponentConfigurationPage-0kf7a5LK.mjs.map +0 -1
  433. package/dist/admin/ComponentConfigurationPage-U7RcNJFs.js +0 -262
  434. package/dist/admin/ComponentConfigurationPage-U7RcNJFs.js.map +0 -1
  435. package/dist/admin/ComponentIcon-AkrHxAkm.mjs +0 -158
  436. package/dist/admin/ComponentIcon-AkrHxAkm.mjs.map +0 -1
  437. package/dist/admin/ComponentIcon-wcNWpdCz.js +0 -180
  438. package/dist/admin/ComponentIcon-wcNWpdCz.js.map +0 -1
  439. package/dist/admin/CreateActionEE-HO-FmNjw.js +0 -61
  440. package/dist/admin/CreateActionEE-HO-FmNjw.js.map +0 -1
  441. package/dist/admin/CreateActionEE-OscS6KZj.mjs +0 -53
  442. package/dist/admin/CreateActionEE-OscS6KZj.mjs.map +0 -1
  443. package/dist/admin/CreatePage-1a_Nb-RK.mjs +0 -248
  444. package/dist/admin/CreatePage-1a_Nb-RK.mjs.map +0 -1
  445. package/dist/admin/CreatePage-8rG8fSZv.mjs +0 -245
  446. package/dist/admin/CreatePage-8rG8fSZv.mjs.map +0 -1
  447. package/dist/admin/CreatePage-B0kLot_Q.js +0 -18
  448. package/dist/admin/CreatePage-B0kLot_Q.js.map +0 -1
  449. package/dist/admin/CreatePage-c92hDTE3.mjs +0 -13
  450. package/dist/admin/CreatePage-c92hDTE3.mjs.map +0 -1
  451. package/dist/admin/CreatePage-h9gJgINE.js +0 -274
  452. package/dist/admin/CreatePage-h9gJgINE.js.map +0 -1
  453. package/dist/admin/CreatePage-pN8WcSWM.js +0 -272
  454. package/dist/admin/CreatePage-pN8WcSWM.js.map +0 -1
  455. package/dist/admin/CreateView-Gd7sLphf.js +0 -17
  456. package/dist/admin/CreateView-Gd7sLphf.js.map +0 -1
  457. package/dist/admin/CreateView-PIPvgwa8.mjs +0 -13
  458. package/dist/admin/CreateView-PIPvgwa8.mjs.map +0 -1
  459. package/dist/admin/CreateView-kVD9MjAf.js +0 -17
  460. package/dist/admin/CreateView-kVD9MjAf.js.map +0 -1
  461. package/dist/admin/CreateView-nXkGgZTO.mjs +0 -13
  462. package/dist/admin/CreateView-nXkGgZTO.mjs.map +0 -1
  463. package/dist/admin/EditConfigurationPage-YAS-MAtE.js +0 -155
  464. package/dist/admin/EditConfigurationPage-YAS-MAtE.js.map +0 -1
  465. package/dist/admin/EditConfigurationPage-jugWslla.mjs +0 -130
  466. package/dist/admin/EditConfigurationPage-jugWslla.mjs.map +0 -1
  467. package/dist/admin/EditPage-6pGLGlrZ.mjs +0 -794
  468. package/dist/admin/EditPage-6pGLGlrZ.mjs.map +0 -1
  469. package/dist/admin/EditPage-I99-ASjb.mjs +0 -325
  470. package/dist/admin/EditPage-I99-ASjb.mjs.map +0 -1
  471. package/dist/admin/EditPage-NrM8ZRAf.mjs +0 -303
  472. package/dist/admin/EditPage-NrM8ZRAf.mjs.map +0 -1
  473. package/dist/admin/EditPage-ci9fcWte.js +0 -327
  474. package/dist/admin/EditPage-ci9fcWte.js.map +0 -1
  475. package/dist/admin/EditPage-fT6nuOwT.mjs +0 -260
  476. package/dist/admin/EditPage-fT6nuOwT.mjs.map +0 -1
  477. package/dist/admin/EditPage-hEDFGDcC.js +0 -822
  478. package/dist/admin/EditPage-hEDFGDcC.js.map +0 -1
  479. package/dist/admin/EditPage-m5HVhxC-.js +0 -286
  480. package/dist/admin/EditPage-m5HVhxC-.js.map +0 -1
  481. package/dist/admin/EditPage-um8Yysr-.js +0 -354
  482. package/dist/admin/EditPage-um8Yysr-.js.map +0 -1
  483. package/dist/admin/EditView-79rujo0b.mjs +0 -336
  484. package/dist/admin/EditView-79rujo0b.mjs.map +0 -1
  485. package/dist/admin/EditView-zEf-a-YM.js +0 -362
  486. package/dist/admin/EditView-zEf-a-YM.js.map +0 -1
  487. package/dist/admin/EditViewPage-BJdNfzBZ.mjs +0 -198
  488. package/dist/admin/EditViewPage-BJdNfzBZ.mjs.map +0 -1
  489. package/dist/admin/EditViewPage-Y67V7K7l.js +0 -226
  490. package/dist/admin/EditViewPage-Y67V7K7l.js.map +0 -1
  491. package/dist/admin/EditViewPage-iuq_KY3C.mjs +0 -846
  492. package/dist/admin/EditViewPage-iuq_KY3C.mjs.map +0 -1
  493. package/dist/admin/EditViewPage-vrE8FNb1.js +0 -879
  494. package/dist/admin/EditViewPage-vrE8FNb1.js.map +0 -1
  495. package/dist/admin/EventsTable-LOh2EX0N.mjs +0 -32
  496. package/dist/admin/EventsTable-LOh2EX0N.mjs.map +0 -1
  497. package/dist/admin/EventsTable-bm16Pj4a.js +0 -36
  498. package/dist/admin/EventsTable-bm16Pj4a.js.map +0 -1
  499. package/dist/admin/FieldTypeIcon-SCwhXPf6.mjs +0 -50
  500. package/dist/admin/FieldTypeIcon-SCwhXPf6.mjs.map +0 -1
  501. package/dist/admin/FieldTypeIcon-u9dTaLwb.js +0 -52
  502. package/dist/admin/FieldTypeIcon-u9dTaLwb.js.map +0 -1
  503. package/dist/admin/Filters-5FAHd62q.js +0 -511
  504. package/dist/admin/Filters-5FAHd62q.js.map +0 -1
  505. package/dist/admin/Filters-hYfcsahl.mjs +0 -489
  506. package/dist/admin/Filters-hYfcsahl.mjs.map +0 -1
  507. package/dist/admin/Form-7gccxUtH.mjs +0 -739
  508. package/dist/admin/Form-7gccxUtH.mjs.map +0 -1
  509. package/dist/admin/Form-m0qUJusG.js +0 -767
  510. package/dist/admin/Form-m0qUJusG.js.map +0 -1
  511. package/dist/admin/History-UVk6YZaL.js +0 -456
  512. package/dist/admin/History-UVk6YZaL.js.map +0 -1
  513. package/dist/admin/History-gNttF1-u.mjs +0 -430
  514. package/dist/admin/History-gNttF1-u.mjs.map +0 -1
  515. package/dist/admin/HomePage-2q7ngwX4.mjs +0 -11
  516. package/dist/admin/HomePage-2q7ngwX4.mjs.map +0 -1
  517. package/dist/admin/HomePage-_eHszm7N.mjs +0 -521
  518. package/dist/admin/HomePage-_eHszm7N.mjs.map +0 -1
  519. package/dist/admin/HomePage-jwm3AAzI.js +0 -530
  520. package/dist/admin/HomePage-jwm3AAzI.js.map +0 -1
  521. package/dist/admin/HomePage-ozwWqZdZ.js +0 -15
  522. package/dist/admin/HomePage-ozwWqZdZ.js.map +0 -1
  523. package/dist/admin/InputRenderer-tdeZayqM.js +0 -5345
  524. package/dist/admin/InputRenderer-tdeZayqM.js.map +0 -1
  525. package/dist/admin/InputRenderer-uXGu-VvL.mjs +0 -5304
  526. package/dist/admin/InputRenderer-uXGu-VvL.mjs.map +0 -1
  527. package/dist/admin/InstalledPluginsPage-rGp1BINi.mjs +0 -101
  528. package/dist/admin/InstalledPluginsPage-rGp1BINi.mjs.map +0 -1
  529. package/dist/admin/InstalledPluginsPage-relNbZiA.js +0 -126
  530. package/dist/admin/InstalledPluginsPage-relNbZiA.js.map +0 -1
  531. package/dist/admin/Layout-JSg7Wwnx.mjs +0 -89
  532. package/dist/admin/Layout-JSg7Wwnx.mjs.map +0 -1
  533. package/dist/admin/Layout-gqm-mRb2.mjs +0 -209
  534. package/dist/admin/Layout-gqm-mRb2.mjs.map +0 -1
  535. package/dist/admin/Layout-rp7YlCuF.js +0 -237
  536. package/dist/admin/Layout-rp7YlCuF.js.map +0 -1
  537. package/dist/admin/Layout-tPXv8ts4.js +0 -97
  538. package/dist/admin/Layout-tPXv8ts4.js.map +0 -1
  539. package/dist/admin/ListConfigurationPage-1JkDop6y.mjs +0 -651
  540. package/dist/admin/ListConfigurationPage-1JkDop6y.mjs.map +0 -1
  541. package/dist/admin/ListConfigurationPage-egv99PTx.js +0 -679
  542. package/dist/admin/ListConfigurationPage-egv99PTx.js.map +0 -1
  543. package/dist/admin/ListPage-5VIwPlnG.js +0 -520
  544. package/dist/admin/ListPage-5VIwPlnG.js.map +0 -1
  545. package/dist/admin/ListPage-85XB15gk.js +0 -305
  546. package/dist/admin/ListPage-85XB15gk.js.map +0 -1
  547. package/dist/admin/ListPage-NG7c9Zx-.js +0 -313
  548. package/dist/admin/ListPage-NG7c9Zx-.js.map +0 -1
  549. package/dist/admin/ListPage-Wf8HxliA.js +0 -15
  550. package/dist/admin/ListPage-Wf8HxliA.js.map +0 -1
  551. package/dist/admin/ListPage-Y0vGfxO1.mjs +0 -492
  552. package/dist/admin/ListPage-Y0vGfxO1.mjs.map +0 -1
  553. package/dist/admin/ListPage-_1MCPNWC.mjs +0 -11
  554. package/dist/admin/ListPage-_1MCPNWC.mjs.map +0 -1
  555. package/dist/admin/ListPage-bdblB4wE.mjs +0 -338
  556. package/dist/admin/ListPage-bdblB4wE.mjs.map +0 -1
  557. package/dist/admin/ListPage-d0uTS6lH.js +0 -363
  558. package/dist/admin/ListPage-d0uTS6lH.js.map +0 -1
  559. package/dist/admin/ListPage-e0975Wh-.js +0 -568
  560. package/dist/admin/ListPage-e0975Wh-.js.map +0 -1
  561. package/dist/admin/ListPage-eMKRFxzM.mjs +0 -288
  562. package/dist/admin/ListPage-eMKRFxzM.mjs.map +0 -1
  563. package/dist/admin/ListPage-tFqx6zb_.mjs +0 -540
  564. package/dist/admin/ListPage-tFqx6zb_.mjs.map +0 -1
  565. package/dist/admin/ListPage-v07yRAHk.mjs +0 -277
  566. package/dist/admin/ListPage-v07yRAHk.mjs.map +0 -1
  567. package/dist/admin/ListView-9shnR2xp.mjs +0 -212
  568. package/dist/admin/ListView-9shnR2xp.mjs.map +0 -1
  569. package/dist/admin/ListView-IaEe1_Uy.js +0 -238
  570. package/dist/admin/ListView-IaEe1_Uy.js.map +0 -1
  571. package/dist/admin/ListView-_EZZ571X.js +0 -228
  572. package/dist/admin/ListView-_EZZ571X.js.map +0 -1
  573. package/dist/admin/ListView-z9G1Eash.mjs +0 -202
  574. package/dist/admin/ListView-z9G1Eash.mjs.map +0 -1
  575. package/dist/admin/ListViewPage-FE12IpwT.mjs +0 -925
  576. package/dist/admin/ListViewPage-FE12IpwT.mjs.map +0 -1
  577. package/dist/admin/ListViewPage-u5WSF93L.js +0 -957
  578. package/dist/admin/ListViewPage-u5WSF93L.js.map +0 -1
  579. package/dist/admin/Login-9iKNSYCJ.mjs +0 -31
  580. package/dist/admin/Login-9iKNSYCJ.mjs.map +0 -1
  581. package/dist/admin/Login-ug0ICazL.js +0 -39
  582. package/dist/admin/Login-ug0ICazL.js.map +0 -1
  583. package/dist/admin/MagicLinkEE-3a4aj5bM.mjs +0 -27
  584. package/dist/admin/MagicLinkEE-3a4aj5bM.mjs.map +0 -1
  585. package/dist/admin/MagicLinkEE-TlpYCgSF.js +0 -31
  586. package/dist/admin/MagicLinkEE-TlpYCgSF.js.map +0 -1
  587. package/dist/admin/MarketplacePage-BBs4GMeX.mjs +0 -1014
  588. package/dist/admin/MarketplacePage-BBs4GMeX.mjs.map +0 -1
  589. package/dist/admin/MarketplacePage-GuZItQkJ.js +0 -1045
  590. package/dist/admin/MarketplacePage-GuZItQkJ.js.map +0 -1
  591. package/dist/admin/NoContentTypePage-MI-TNgDm.mjs +0 -50
  592. package/dist/admin/NoContentTypePage-MI-TNgDm.mjs.map +0 -1
  593. package/dist/admin/NoContentTypePage-WM9PSeKc.js +0 -54
  594. package/dist/admin/NoContentTypePage-WM9PSeKc.js.map +0 -1
  595. package/dist/admin/NoPermissionsPage-K6eIf5zl.mjs +0 -23
  596. package/dist/admin/NoPermissionsPage-K6eIf5zl.mjs.map +0 -1
  597. package/dist/admin/NoPermissionsPage-PP92ItBk.js +0 -27
  598. package/dist/admin/NoPermissionsPage-PP92ItBk.js.map +0 -1
  599. package/dist/admin/NotAllowed-9d8xvtvI.mjs +0 -36
  600. package/dist/admin/NotAllowed-9d8xvtvI.mjs.map +0 -1
  601. package/dist/admin/NotAllowed-FmDlK9I3.js +0 -42
  602. package/dist/admin/NotAllowed-FmDlK9I3.js.map +0 -1
  603. package/dist/admin/Ornaments-fHu7120M.js +0 -214
  604. package/dist/admin/Ornaments-fHu7120M.js.map +0 -1
  605. package/dist/admin/Permissions-jsl-R7bI.js +0 -2082
  606. package/dist/admin/Permissions-jsl-R7bI.js.map +0 -1
  607. package/dist/admin/Permissions-v99MLjbi.mjs +0 -2046
  608. package/dist/admin/Permissions-v99MLjbi.mjs.map +0 -1
  609. package/dist/admin/PrivateRoute-AFoVG5Bk.js +0 -22
  610. package/dist/admin/PrivateRoute-AFoVG5Bk.js.map +0 -1
  611. package/dist/admin/PrivateRoute-XiRz2oSq.mjs +0 -20
  612. package/dist/admin/PrivateRoute-XiRz2oSq.mjs.map +0 -1
  613. package/dist/admin/ProfilePage-HjJiMiTt.mjs +0 -391
  614. package/dist/admin/ProfilePage-HjJiMiTt.mjs.map +0 -1
  615. package/dist/admin/ProfilePage-wGM1mvXn.js +0 -419
  616. package/dist/admin/ProfilePage-wGM1mvXn.js.map +0 -1
  617. package/dist/admin/PurchaseAuditLogs-Rrl9r1j8.mjs +0 -48
  618. package/dist/admin/PurchaseAuditLogs-Rrl9r1j8.mjs.map +0 -1
  619. package/dist/admin/PurchaseAuditLogs-couRts7-.js +0 -52
  620. package/dist/admin/PurchaseAuditLogs-couRts7-.js.map +0 -1
  621. package/dist/admin/PurchaseReviewWorkflows--btlOW_J.mjs +0 -51
  622. package/dist/admin/PurchaseReviewWorkflows--btlOW_J.mjs.map +0 -1
  623. package/dist/admin/PurchaseReviewWorkflows-iyB5BJRO.js +0 -55
  624. package/dist/admin/PurchaseReviewWorkflows-iyB5BJRO.js.map +0 -1
  625. package/dist/admin/PurchaseSingleSignOn-L8l1HqSb.mjs +0 -51
  626. package/dist/admin/PurchaseSingleSignOn-L8l1HqSb.mjs.map +0 -1
  627. package/dist/admin/PurchaseSingleSignOn-oXrB5aDz.js +0 -55
  628. package/dist/admin/PurchaseSingleSignOn-oXrB5aDz.js.map +0 -1
  629. package/dist/admin/ReviewWorkflowsColumn-NUu47oVz.mjs +0 -34
  630. package/dist/admin/ReviewWorkflowsColumn-NUu47oVz.mjs.map +0 -1
  631. package/dist/admin/ReviewWorkflowsColumn-uIqJfjyd.js +0 -39
  632. package/dist/admin/ReviewWorkflowsColumn-uIqJfjyd.js.map +0 -1
  633. package/dist/admin/SelectRoles-5vr-vXOm.js +0 -114
  634. package/dist/admin/SelectRoles-5vr-vXOm.js.map +0 -1
  635. package/dist/admin/SelectRoles-ytHc3di2.mjs +0 -106
  636. package/dist/admin/SelectRoles-ytHc3di2.mjs.map +0 -1
  637. package/dist/admin/SingleSignOnPage-1Wqj_7y-.js +0 -263
  638. package/dist/admin/SingleSignOnPage-1Wqj_7y-.js.map +0 -1
  639. package/dist/admin/SingleSignOnPage-7oJES3UH.mjs +0 -238
  640. package/dist/admin/SingleSignOnPage-7oJES3UH.mjs.map +0 -1
  641. package/dist/admin/Table-LQhGojNx.mjs +0 -165
  642. package/dist/admin/Table-LQhGojNx.mjs.map +0 -1
  643. package/dist/admin/Table-M5UsBfFs.js +0 -190
  644. package/dist/admin/Table-M5UsBfFs.js.map +0 -1
  645. package/dist/admin/TokenTypeSelect-5o9mvFd7.mjs +0 -357
  646. package/dist/admin/TokenTypeSelect-5o9mvFd7.mjs.map +0 -1
  647. package/dist/admin/TokenTypeSelect-ZBDI26vJ.js +0 -385
  648. package/dist/admin/TokenTypeSelect-ZBDI26vJ.js.map +0 -1
  649. package/dist/admin/UseCasePage-e7rn-aW-.mjs +0 -146
  650. package/dist/admin/UseCasePage-e7rn-aW-.mjs.map +0 -1
  651. package/dist/admin/UseCasePage-q3u-xs7F.js +0 -175
  652. package/dist/admin/UseCasePage-q3u-xs7F.js.map +0 -1
  653. package/dist/admin/apiTokens-_gKUBKPQ.js +0 -62
  654. package/dist/admin/apiTokens-_gKUBKPQ.js.map +0 -1
  655. package/dist/admin/apiTokens-nD8zbNlc.mjs +0 -56
  656. package/dist/admin/apiTokens-nD8zbNlc.mjs.map +0 -1
  657. package/dist/admin/ar-i6ait0_Z.js +0 -939
  658. package/dist/admin/ar-i6ait0_Z.js.map +0 -1
  659. package/dist/admin/ar-lYsknZVT.mjs +0 -918
  660. package/dist/admin/ar-lYsknZVT.mjs.map +0 -1
  661. package/dist/admin/ca-1Cl4eOmr.js +0 -727
  662. package/dist/admin/ca-1Cl4eOmr.js.map +0 -1
  663. package/dist/admin/ca-ruPjUw52.mjs +0 -709
  664. package/dist/admin/ca-ruPjUw52.mjs.map +0 -1
  665. package/dist/admin/constants-6E1OwHx7.js +0 -197
  666. package/dist/admin/constants-6E1OwHx7.js.map +0 -1
  667. package/dist/admin/constants-AdKxCt0x.mjs +0 -52
  668. package/dist/admin/constants-AdKxCt0x.mjs.map +0 -1
  669. package/dist/admin/constants-D6NLEhwu.mjs +0 -172
  670. package/dist/admin/constants-D6NLEhwu.mjs.map +0 -1
  671. package/dist/admin/constants-DxpaZFhM.mjs +0 -10
  672. package/dist/admin/constants-DxpaZFhM.mjs.map +0 -1
  673. package/dist/admin/constants-ZZWbRAQT.js +0 -60
  674. package/dist/admin/constants-ZZWbRAQT.js.map +0 -1
  675. package/dist/admin/constants-wsN7Fj5H.js +0 -14
  676. package/dist/admin/constants-wsN7Fj5H.js.map +0 -1
  677. package/dist/admin/cs-MneRs5g8.js +0 -294
  678. package/dist/admin/cs-MneRs5g8.js.map +0 -1
  679. package/dist/admin/cs-cEW7Jgll.mjs +0 -281
  680. package/dist/admin/cs-cEW7Jgll.mjs.map +0 -1
  681. package/dist/admin/de-vPJQw5Tm.js +0 -719
  682. package/dist/admin/de-vPJQw5Tm.js.map +0 -1
  683. package/dist/admin/de-xZr3TXsT.mjs +0 -701
  684. package/dist/admin/de-xZr3TXsT.mjs.map +0 -1
  685. package/dist/admin/dk-_Fh6kypZ.js +0 -637
  686. package/dist/admin/dk-_Fh6kypZ.js.map +0 -1
  687. package/dist/admin/dk-nqK-ugFb.mjs +0 -619
  688. package/dist/admin/dk-nqK-ugFb.mjs.map +0 -1
  689. package/dist/admin/en-X84kQxpg.js +0 -1068
  690. package/dist/admin/en-X84kQxpg.js.map +0 -1
  691. package/dist/admin/en-qxG24n4z.mjs +0 -1047
  692. package/dist/admin/en-qxG24n4z.mjs.map +0 -1
  693. package/dist/admin/es-6dicYJQA.mjs +0 -779
  694. package/dist/admin/es-6dicYJQA.mjs.map +0 -1
  695. package/dist/admin/es-FC_8jlK7.js +0 -799
  696. package/dist/admin/es-FC_8jlK7.js.map +0 -1
  697. package/dist/admin/eu-Pzqod2VF.js +0 -835
  698. package/dist/admin/eu-Pzqod2VF.js.map +0 -1
  699. package/dist/admin/eu-l9nvfvQj.mjs +0 -815
  700. package/dist/admin/eu-l9nvfvQj.mjs.map +0 -1
  701. package/dist/admin/fr-8h2tzs3Z.js +0 -765
  702. package/dist/admin/fr-8h2tzs3Z.js.map +0 -1
  703. package/dist/admin/fr-97oVHDGZ.mjs +0 -744
  704. package/dist/admin/fr-97oVHDGZ.mjs.map +0 -1
  705. package/dist/admin/gu-YXP9LW1p.mjs +0 -617
  706. package/dist/admin/gu-YXP9LW1p.mjs.map +0 -1
  707. package/dist/admin/gu-fkXeW5oU.js +0 -626
  708. package/dist/admin/gu-fkXeW5oU.js.map +0 -1
  709. package/dist/admin/he-Rnd0orlz.mjs +0 -315
  710. package/dist/admin/he-Rnd0orlz.mjs.map +0 -1
  711. package/dist/admin/he-YNZzVWgP.js +0 -329
  712. package/dist/admin/he-YNZzVWgP.js.map +0 -1
  713. package/dist/admin/hi-42LJgJV1.mjs +0 -707
  714. package/dist/admin/hi-42LJgJV1.mjs.map +0 -1
  715. package/dist/admin/hi-ubgoUzQ0.js +0 -725
  716. package/dist/admin/hi-ubgoUzQ0.js.map +0 -1
  717. package/dist/admin/hu-oHJgjivB.js +0 -835
  718. package/dist/admin/hu-oHJgjivB.js.map +0 -1
  719. package/dist/admin/hu-xsansjmF.mjs +0 -815
  720. package/dist/admin/hu-xsansjmF.mjs.map +0 -1
  721. package/dist/admin/id-JurRr0gC.mjs +0 -438
  722. package/dist/admin/id-JurRr0gC.mjs.map +0 -1
  723. package/dist/admin/id-T2ge96wh.js +0 -451
  724. package/dist/admin/id-T2ge96wh.js.map +0 -1
  725. package/dist/admin/index-1NFAbkxM.mjs +0 -5927
  726. package/dist/admin/index-1NFAbkxM.mjs.map +0 -1
  727. package/dist/admin/index-mQQPK-ix.js +0 -6023
  728. package/dist/admin/index-mQQPK-ix.js.map +0 -1
  729. package/dist/admin/it-890_w-P3.mjs +0 -449
  730. package/dist/admin/it-890_w-P3.mjs.map +0 -1
  731. package/dist/admin/it-uWPMs24z.js +0 -462
  732. package/dist/admin/it-uWPMs24z.js.map +0 -1
  733. package/dist/admin/ja-F61alnK1.mjs +0 -618
  734. package/dist/admin/ja-F61alnK1.mjs.map +0 -1
  735. package/dist/admin/ja-pw-zE8MH.js +0 -636
  736. package/dist/admin/ja-pw-zE8MH.js.map +0 -1
  737. package/dist/admin/ko-DfQWK5T3.mjs +0 -616
  738. package/dist/admin/ko-DfQWK5T3.mjs.map +0 -1
  739. package/dist/admin/ko-XhK2FY3_.js +0 -634
  740. package/dist/admin/ko-XhK2FY3_.js.map +0 -1
  741. package/dist/admin/ml-EVaVYywL.mjs +0 -707
  742. package/dist/admin/ml-EVaVYywL.mjs.map +0 -1
  743. package/dist/admin/ml-hT2VI8JA.js +0 -725
  744. package/dist/admin/ml-hT2VI8JA.js.map +0 -1
  745. package/dist/admin/ms-CzgcVrsY.mjs +0 -332
  746. package/dist/admin/ms-CzgcVrsY.mjs.map +0 -1
  747. package/dist/admin/ms-DoMJCZ42.js +0 -345
  748. package/dist/admin/ms-DoMJCZ42.js.map +0 -1
  749. package/dist/admin/nl-LLi_sx9P.js +0 -831
  750. package/dist/admin/nl-LLi_sx9P.js.map +0 -1
  751. package/dist/admin/nl-XNqQYx_K.mjs +0 -811
  752. package/dist/admin/nl-XNqQYx_K.mjs.map +0 -1
  753. package/dist/admin/no-JwA1Lt4Y.mjs +0 -300
  754. package/dist/admin/no-JwA1Lt4Y.mjs.map +0 -1
  755. package/dist/admin/no-wmtVIVuz.js +0 -313
  756. package/dist/admin/no-wmtVIVuz.js.map +0 -1
  757. package/dist/admin/pl-05ncDTwZ.js +0 -724
  758. package/dist/admin/pl-05ncDTwZ.js.map +0 -1
  759. package/dist/admin/pl-euPz4n1g.mjs +0 -706
  760. package/dist/admin/pl-euPz4n1g.mjs.map +0 -1
  761. package/dist/admin/pt-BR-vpbGYSYw.mjs +0 -777
  762. package/dist/admin/pt-BR-vpbGYSYw.mjs.map +0 -1
  763. package/dist/admin/pt-BR-xA4J5pi2.js +0 -797
  764. package/dist/admin/pt-BR-xA4J5pi2.js.map +0 -1
  765. package/dist/admin/pt-RlnkaSdF.mjs +0 -287
  766. package/dist/admin/pt-RlnkaSdF.mjs.map +0 -1
  767. package/dist/admin/pt-yArB6nEx.js +0 -299
  768. package/dist/admin/pt-yArB6nEx.js.map +0 -1
  769. package/dist/admin/reducers-IQWvK_9L.mjs +0 -4617
  770. package/dist/admin/reducers-IQWvK_9L.mjs.map +0 -1
  771. package/dist/admin/reducers-wZUQqmNX.js +0 -4764
  772. package/dist/admin/reducers-wZUQqmNX.js.map +0 -1
  773. package/dist/admin/ru-4bDDGI3o.js +0 -996
  774. package/dist/admin/ru-4bDDGI3o.js.map +0 -1
  775. package/dist/admin/ru-tyoEF5X6.mjs +0 -975
  776. package/dist/admin/ru-tyoEF5X6.mjs.map +0 -1
  777. package/dist/admin/sa-OOEUNg5o.js +0 -725
  778. package/dist/admin/sa-OOEUNg5o.js.map +0 -1
  779. package/dist/admin/sa-s-WVHU-Y.mjs +0 -707
  780. package/dist/admin/sa-s-WVHU-Y.mjs.map +0 -1
  781. package/dist/admin/selectors-PTHjHMQi.js +0 -8
  782. package/dist/admin/selectors-PTHjHMQi.js.map +0 -1
  783. package/dist/admin/selectors-nn3C3YKE.mjs +0 -6
  784. package/dist/admin/selectors-nn3C3YKE.mjs.map +0 -1
  785. package/dist/admin/sk-1sQSF-r2.js +0 -693
  786. package/dist/admin/sk-1sQSF-r2.js.map +0 -1
  787. package/dist/admin/sk-5bIrjuCN.mjs +0 -673
  788. package/dist/admin/sk-5bIrjuCN.mjs.map +0 -1
  789. package/dist/admin/src/components/InjectionZone.d.ts +0 -59
  790. package/dist/admin/src/content-manager/components/ComponentIcon.d.ts +0 -8
  791. package/dist/admin/src/content-manager/components/ConfigurationForm/EditFieldForm.d.ts +0 -9
  792. package/dist/admin/src/content-manager/components/ConfigurationForm/Fields.d.ts +0 -21
  793. package/dist/admin/src/content-manager/components/ConfigurationForm/Form.d.ts +0 -32
  794. package/dist/admin/src/content-manager/components/DragPreviews/CardDragPreview.d.ts +0 -7
  795. package/dist/admin/src/content-manager/components/DragPreviews/ComponentDragPreview.d.ts +0 -6
  796. package/dist/admin/src/content-manager/components/DragPreviews/RelationDragPreview.d.ts +0 -11
  797. package/dist/admin/src/content-manager/components/FieldTypeIcon.d.ts +0 -9
  798. package/dist/admin/src/content-manager/components/LeftMenu.d.ts +0 -2
  799. package/dist/admin/src/content-manager/constants/attributes.d.ts +0 -14
  800. package/dist/admin/src/content-manager/constants/collections.d.ts +0 -3
  801. package/dist/admin/src/content-manager/constants/dragAndDrop.d.ts +0 -8
  802. package/dist/admin/src/content-manager/exports.d.ts +0 -10
  803. package/dist/admin/src/content-manager/features/DocumentRBAC.d.ts +0 -36
  804. package/dist/admin/src/content-manager/history/components/HistoryAction.d.ts +0 -3
  805. package/dist/admin/src/content-manager/history/components/VersionContent.d.ts +0 -2
  806. package/dist/admin/src/content-manager/history/components/VersionHeader.d.ts +0 -5
  807. package/dist/admin/src/content-manager/history/components/VersionsList.d.ts +0 -2
  808. package/dist/admin/src/content-manager/history/pages/History.d.ts +0 -25
  809. package/dist/admin/src/content-manager/history/routes.d.ts +0 -11
  810. package/dist/admin/src/content-manager/history/services/historyVersion.d.ts +0 -7
  811. package/dist/admin/src/content-manager/hooks/useContentManagerInitData.d.ts +0 -15
  812. package/dist/admin/src/content-manager/hooks/useContentTypeSchema.d.ts +0 -24
  813. package/dist/admin/src/content-manager/hooks/useDocument.d.ts +0 -89
  814. package/dist/admin/src/content-manager/hooks/useDocumentActions.d.ts +0 -102
  815. package/dist/admin/src/content-manager/hooks/useDocumentLayout.d.ts +0 -138
  816. package/dist/admin/src/content-manager/hooks/useDragAndDrop.d.ts +0 -51
  817. package/dist/admin/src/content-manager/hooks/useKeyboardDragAndDrop.d.ts +0 -14
  818. package/dist/admin/src/content-manager/hooks/useLazyComponents.d.ts +0 -13
  819. package/dist/admin/src/content-manager/hooks/useSyncRbac.d.ts +0 -15
  820. package/dist/admin/src/content-manager/layout.d.ts +0 -16
  821. package/dist/admin/src/content-manager/modules/rbac.d.ts +0 -14
  822. package/dist/admin/src/content-manager/modules/reducers.d.ts +0 -4
  823. package/dist/admin/src/content-manager/pages/ComponentConfigurationPage.d.ts +0 -3
  824. package/dist/admin/src/content-manager/pages/EditConfigurationPage.d.ts +0 -3
  825. package/dist/admin/src/content-manager/pages/EditView/EditViewPage.d.ts +0 -3
  826. package/dist/admin/src/content-manager/pages/EditView/components/DocumentActions.d.ts +0 -69
  827. package/dist/admin/src/content-manager/pages/EditView/components/DocumentStatus.d.ts +0 -16
  828. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.d.ts +0 -3
  829. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.d.ts +0 -3
  830. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.d.ts +0 -3
  831. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.d.ts +0 -3
  832. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.d.ts +0 -3
  833. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/Blocks/Paragraph.d.ts +0 -3
  834. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.d.ts +0 -3
  835. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.d.ts +0 -6
  836. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.d.ts +0 -61
  837. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.d.ts +0 -10
  838. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.d.ts +0 -10
  839. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.d.ts +0 -10
  840. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/Modifiers.d.ts +0 -16
  841. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/plugins/withImages.d.ts +0 -11
  842. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/plugins/withLinks.d.ts +0 -9
  843. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.d.ts +0 -8
  844. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/utils/conversions.d.ts +0 -13
  845. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/utils/enterKey.d.ts +0 -6
  846. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/utils/links.d.ts +0 -10
  847. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/BlocksInput/utils/types.d.ts +0 -10
  848. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Component/Initializer.d.ts +0 -9
  849. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Component/Input.d.ts +0 -9
  850. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Component/NonRepeatable.d.ts +0 -6
  851. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Component/Repeatable.d.ts +0 -6
  852. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/ComponentContext.d.ts +0 -42
  853. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/DynamicZone/AddComponentButton.d.ts +0 -11
  854. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/DynamicZone/ComponentCard.d.ts +0 -9
  855. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.d.ts +0 -17
  856. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.d.ts +0 -9
  857. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.d.ts +0 -14
  858. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/DynamicZone/DynamicZoneLabel.d.ts +0 -12
  859. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/DynamicZone/Field.d.ts +0 -13
  860. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/NotAllowed.d.ts +0 -7
  861. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Relations.d.ts +0 -26
  862. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/UID.d.ts +0 -9
  863. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Wysiwyg/Editor.d.ts +0 -18
  864. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.d.ts +0 -59
  865. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Wysiwyg/Field.d.ts +0 -11
  866. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.d.ts +0 -5
  867. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.d.ts +0 -7
  868. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.d.ts +0 -17
  869. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.d.ts +0 -54
  870. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Wysiwyg/utils/continueList.d.ts +0 -5
  871. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Wysiwyg/utils/mdRenderer.d.ts +0 -4
  872. package/dist/admin/src/content-manager/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.d.ts +0 -16
  873. package/dist/admin/src/content-manager/pages/EditView/components/FormLayout.d.ts +0 -5
  874. package/dist/admin/src/content-manager/pages/EditView/components/Header.d.ts +0 -35
  875. package/dist/admin/src/content-manager/pages/EditView/components/InputRenderer.d.ts +0 -14
  876. package/dist/admin/src/content-manager/pages/EditView/components/Panels.d.ts +0 -10
  877. package/dist/admin/src/content-manager/pages/EditView/utils/data.d.ts +0 -20
  878. package/dist/admin/src/content-manager/pages/EditView/utils/forms.d.ts +0 -9
  879. package/dist/admin/src/content-manager/pages/ListConfiguration/ListConfigurationPage.d.ts +0 -10
  880. package/dist/admin/src/content-manager/pages/ListConfiguration/components/DraggableCard.d.ts +0 -12
  881. package/dist/admin/src/content-manager/pages/ListConfiguration/components/EditFieldForm.d.ts +0 -8
  882. package/dist/admin/src/content-manager/pages/ListConfiguration/components/Header.d.ts +0 -8
  883. package/dist/admin/src/content-manager/pages/ListConfiguration/components/Settings.d.ts +0 -5
  884. package/dist/admin/src/content-manager/pages/ListConfiguration/components/SortDisplayedFields.d.ts +0 -6
  885. package/dist/admin/src/content-manager/pages/ListView/ListViewPage.d.ts +0 -3
  886. package/dist/admin/src/content-manager/pages/ListView/components/AutoCloneFailureModal.d.ts +0 -8
  887. package/dist/admin/src/content-manager/pages/ListView/components/BulkActions/Actions.d.ts +0 -52
  888. package/dist/admin/src/content-manager/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.d.ts +0 -15
  889. package/dist/admin/src/content-manager/pages/ListView/components/BulkActions/PublishAction.d.ts +0 -31
  890. package/dist/admin/src/content-manager/pages/ListView/components/Filters.d.ts +0 -8
  891. package/dist/admin/src/content-manager/pages/ListView/components/InjectionZoneList.d.ts +0 -7
  892. package/dist/admin/src/content-manager/pages/ListView/components/TableActions.d.ts +0 -8
  893. package/dist/admin/src/content-manager/pages/ListView/components/TableCells/CellContent.d.ts +0 -9
  894. package/dist/admin/src/content-manager/pages/ListView/components/TableCells/CellValue.d.ts +0 -8
  895. package/dist/admin/src/content-manager/pages/ListView/components/TableCells/Components.d.ts +0 -12
  896. package/dist/admin/src/content-manager/pages/ListView/components/TableCells/Media.d.ts +0 -23
  897. package/dist/admin/src/content-manager/pages/ListView/components/TableCells/Relations.d.ts +0 -12
  898. package/dist/admin/src/content-manager/pages/ListView/components/ViewSettingsMenu.d.ts +0 -10
  899. package/dist/admin/src/content-manager/pages/NoContentTypePage.d.ts +0 -2
  900. package/dist/admin/src/content-manager/pages/NoPermissionsPage.d.ts +0 -2
  901. package/dist/admin/src/content-manager/router.d.ts +0 -5
  902. package/dist/admin/src/content-manager/services/api.d.ts +0 -3
  903. package/dist/admin/src/content-manager/services/components.d.ts +0 -6
  904. package/dist/admin/src/content-manager/services/contentTypes.d.ts +0 -18
  905. package/dist/admin/src/content-manager/services/documents.d.ts +0 -94
  906. package/dist/admin/src/content-manager/services/init.d.ts +0 -10
  907. package/dist/admin/src/content-manager/services/relations.d.ts +0 -49
  908. package/dist/admin/src/content-manager/services/uid.d.ts +0 -32
  909. package/dist/admin/src/content-manager/utils/api.d.ts +0 -19
  910. package/dist/admin/src/content-manager/utils/attributes.d.ts +0 -19
  911. package/dist/admin/src/content-manager/utils/relations.d.ts +0 -12
  912. package/dist/admin/src/content-manager/utils/translations.d.ts +0 -2
  913. package/dist/admin/src/content-manager/utils/validation.d.ts +0 -7
  914. package/dist/admin/src/core/apis/content-manager.d.ts +0 -126
  915. package/dist/admin/src/hooks/useInjectionZone.d.ts +0 -2
  916. package/dist/admin/src/pages/Settings/pages/PurchaseReviewWorkflows.d.ts +0 -2
  917. package/dist/admin/src/utils/getYupInnerErrors.d.ts +0 -7
  918. package/dist/admin/src/utils/hashAdminUserEmail.d.ts +0 -6
  919. package/dist/admin/sv-JVgQU2PS.mjs +0 -810
  920. package/dist/admin/sv-JVgQU2PS.mjs.map +0 -1
  921. package/dist/admin/sv-d0rqYiHZ.js +0 -830
  922. package/dist/admin/sv-d0rqYiHZ.js.map +0 -1
  923. package/dist/admin/th-er8qvbeL.mjs +0 -420
  924. package/dist/admin/th-er8qvbeL.mjs.map +0 -1
  925. package/dist/admin/th-mqExIzdv.js +0 -433
  926. package/dist/admin/th-mqExIzdv.js.map +0 -1
  927. package/dist/admin/tr-aYPucbUC.js +0 -788
  928. package/dist/admin/tr-aYPucbUC.js.map +0 -1
  929. package/dist/admin/tr-b2vrBJ49.mjs +0 -768
  930. package/dist/admin/tr-b2vrBJ49.mjs.map +0 -1
  931. package/dist/admin/transferTokens-P5z1yVh2.js +0 -65
  932. package/dist/admin/transferTokens-P5z1yVh2.js.map +0 -1
  933. package/dist/admin/transferTokens-PlBVZdw3.mjs +0 -59
  934. package/dist/admin/transferTokens-PlBVZdw3.mjs.map +0 -1
  935. package/dist/admin/uk-1c7KIaI6.js +0 -346
  936. package/dist/admin/uk-1c7KIaI6.js.map +0 -1
  937. package/dist/admin/uk-RfkbT49M.mjs +0 -333
  938. package/dist/admin/uk-RfkbT49M.mjs.map +0 -1
  939. package/dist/admin/useAdminRoles-BG7b996L.mjs +0 -28
  940. package/dist/admin/useAdminRoles-BG7b996L.mjs.map +0 -1
  941. package/dist/admin/useAdminRoles-THWXour6.js +0 -50
  942. package/dist/admin/useAdminRoles-THWXour6.js.map +0 -1
  943. package/dist/admin/useContentTypes-PEGh0Cg-.mjs +0 -51
  944. package/dist/admin/useContentTypes-PEGh0Cg-.mjs.map +0 -1
  945. package/dist/admin/useContentTypes-RoSvxizj.js +0 -73
  946. package/dist/admin/useContentTypes-RoSvxizj.js.map +0 -1
  947. package/dist/admin/useDebounce-OnUygPz6.mjs +0 -17
  948. package/dist/admin/useDebounce-OnUygPz6.mjs.map +0 -1
  949. package/dist/admin/useDebounce-tz5EMJbt.js +0 -39
  950. package/dist/admin/useDebounce-tz5EMJbt.js.map +0 -1
  951. package/dist/admin/useDocumentLayout-4trWL6Jz.mjs +0 -732
  952. package/dist/admin/useDocumentLayout-4trWL6Jz.mjs.map +0 -1
  953. package/dist/admin/useDocumentLayout-V_N5dUwQ.js +0 -764
  954. package/dist/admin/useDocumentLayout-V_N5dUwQ.js.map +0 -1
  955. package/dist/admin/useLicenseLimitNotification-9DqSZuyc.mjs +0 -80
  956. package/dist/admin/useLicenseLimitNotification-9DqSZuyc.mjs.map +0 -1
  957. package/dist/admin/useLicenseLimitNotification-SiWQ5LGo.js +0 -105
  958. package/dist/admin/useLicenseLimitNotification-SiWQ5LGo.js.map +0 -1
  959. package/dist/admin/useReviewWorkflows-0ty4mwQd.js +0 -29
  960. package/dist/admin/useReviewWorkflows-0ty4mwQd.js.map +0 -1
  961. package/dist/admin/useReviewWorkflows-HwyFyit7.mjs +0 -27
  962. package/dist/admin/useReviewWorkflows-HwyFyit7.mjs.map +0 -1
  963. package/dist/admin/useSyncRbac-LNOzRXJ5.mjs +0 -45
  964. package/dist/admin/useSyncRbac-LNOzRXJ5.mjs.map +0 -1
  965. package/dist/admin/useSyncRbac-vkWgDJTE.js +0 -67
  966. package/dist/admin/useSyncRbac-vkWgDJTE.js.map +0 -1
  967. package/dist/admin/useWebhooks-DmGNXCdi.js +0 -93
  968. package/dist/admin/useWebhooks-DmGNXCdi.js.map +0 -1
  969. package/dist/admin/useWebhooks-dOVyaYlw.mjs +0 -91
  970. package/dist/admin/useWebhooks-dOVyaYlw.mjs.map +0 -1
  971. package/dist/admin/validateWorkflow-99y3bkNx.js +0 -1077
  972. package/dist/admin/validateWorkflow-99y3bkNx.js.map +0 -1
  973. package/dist/admin/validateWorkflow-ubLwZqCK.mjs +0 -1033
  974. package/dist/admin/validateWorkflow-ubLwZqCK.mjs.map +0 -1
  975. package/dist/admin/validation-cpJKCQz1.mjs +0 -43
  976. package/dist/admin/validation-cpJKCQz1.mjs.map +0 -1
  977. package/dist/admin/validation-lIVymZ0n.js +0 -65
  978. package/dist/admin/validation-lIVymZ0n.js.map +0 -1
  979. package/dist/admin/vi-Rg9es0FD.js +0 -301
  980. package/dist/admin/vi-Rg9es0FD.js.map +0 -1
  981. package/dist/admin/vi-pyngavdo.mjs +0 -288
  982. package/dist/admin/vi-pyngavdo.mjs.map +0 -1
  983. package/dist/admin/zh-Hans-Gbpdme1Q.mjs +0 -939
  984. package/dist/admin/zh-Hans-Gbpdme1Q.mjs.map +0 -1
  985. package/dist/admin/zh-Hans-SgnidiuG.js +0 -960
  986. package/dist/admin/zh-Hans-SgnidiuG.js.map +0 -1
  987. package/dist/admin/zh-ONWhjzCj.js +0 -839
  988. package/dist/admin/zh-ONWhjzCj.js.map +0 -1
  989. package/dist/admin/zh-fMjW2qMl.mjs +0 -819
  990. package/dist/admin/zh-fMjW2qMl.mjs.map +0 -1
  991. package/dist/ee/admin/src/content-manager/pages/EditView/components/AssigneeSelect.d.ts +0 -2
  992. package/dist/ee/admin/src/content-manager/pages/EditView/components/ReviewWorkflowsPanel.d.ts +0 -3
  993. package/dist/ee/admin/src/content-manager/pages/EditView/components/StageSelect.d.ts +0 -1
  994. package/dist/ee/admin/src/content-manager/pages/EditView/components/constants.d.ts +0 -2
  995. package/dist/ee/admin/src/content-manager/pages/ListSettingsView/constants.d.ts +0 -7
  996. package/dist/ee/admin/src/content-manager/pages/ListView/components/AssigneeFilter.d.ts +0 -7
  997. package/dist/ee/admin/src/content-manager/pages/ListView/components/ReviewWorkflowsAssigneeEE.d.ts +0 -7
  998. package/dist/ee/admin/src/content-manager/pages/ListView/components/ReviewWorkflowsColumn.d.ts +0 -2
  999. package/dist/ee/admin/src/content-manager/pages/ListView/components/ReviewWorkflowsStageEE.d.ts +0 -7
  1000. package/dist/ee/admin/src/content-manager/pages/ListView/components/StageFilter.d.ts +0 -8
  1001. package/dist/ee/admin/src/content-manager/pages/ListView/constants.d.ts +0 -69
  1002. package/dist/ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/CreatePage.d.ts +0 -1
  1003. package/dist/ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/EditPage.d.ts +0 -1
  1004. package/dist/ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/ListPage.d.ts +0 -2
  1005. package/dist/ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/actions.d.ts +0 -86
  1006. package/dist/ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/components/AddStage.d.ts +0 -2
  1007. package/dist/ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/components/Layout.d.ts +0 -12
  1008. package/dist/ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/components/LimitsModal.d.ts +0 -15
  1009. package/dist/ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/components/Stage.d.ts +0 -10
  1010. package/dist/ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/components/StageDragPreview.d.ts +0 -4
  1011. package/dist/ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/components/Stages.d.ts +0 -7
  1012. package/dist/ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/components/WorkflowAttributes.d.ts +0 -4
  1013. package/dist/ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/constants.d.ts +0 -20
  1014. package/dist/ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/hooks/useReviewWorkflows.d.ts +0 -15
  1015. package/dist/ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/reducer.d.ts +0 -38
  1016. package/dist/ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/selectors.d.ts +0 -62
  1017. package/dist/ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/utils/colors.d.ts +0 -8
  1018. package/dist/ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/utils/validateWorkflow.d.ts +0 -5
  1019. package/dist/ee/admin/src/services/reviewWorkflows.d.ts +0 -39
  1020. package/dist/shared/contracts/review-workflows.d.ts +0 -83
  1021. package/dist/shared/contracts/review-workflows.d.ts.map +0 -1
  1022. /package/dist/admin/src/{content-manager/hooks → hooks}/usePrev.d.ts +0 -0
@@ -1,4764 +0,0 @@
1
- 'use strict';
2
-
3
- const jsxRuntime = require('react/jsx-runtime');
4
- const React = require('react');
5
- const reactContext = require('@radix-ui/react-context');
6
- const reactIntl = require('react-intl');
7
- const isEqual = require('lodash/isEqual');
8
- const axios = require('axios');
9
- const defaultsDeep = require('lodash/defaultsDeep');
10
- const designSystem = require('@strapi/design-system');
11
- const reactRedux = require('react-redux');
12
- const styled = require('styled-components');
13
- const immer = require('immer');
14
- const reactHelmet = require('react-helmet');
15
- const reactRouterDom = require('react-router-dom');
16
- const reactDnd = require('react-dnd');
17
- const get = require('lodash/get');
18
- const set = require('lodash/set');
19
- const ContextSelector = require('use-context-selector');
20
- const Icons = require('@strapi/icons');
21
- const toolkit = require('@reduxjs/toolkit');
22
- const react = require('@reduxjs/toolkit/query/react');
23
- const qs = require('qs');
24
- const v2 = require('@strapi/design-system/v2');
25
- const fractionalIndexing = require('fractional-indexing');
26
- const pipe = require('lodash/fp/pipe');
27
- const reactDndHtml5Backend = require('react-dnd-html5-backend');
28
- const reactWindow = require('react-window');
29
- const clone = require('lodash/clone');
30
- const toPath = require('lodash/toPath');
31
- const yup = require('yup');
32
-
33
- const _interopDefault = e => e && e.__esModule ? e : { default: e };
34
-
35
- function _interopNamespace(e) {
36
- if (e && e.__esModule) return e;
37
- const n = Object.create(null, { [Symbol.toStringTag]: { value: 'Module' } });
38
- if (e) {
39
- for (const k in e) {
40
- if (k !== 'default') {
41
- const d = Object.getOwnPropertyDescriptor(e, k);
42
- Object.defineProperty(n, k, d.get ? d : {
43
- enumerable: true,
44
- get: () => e[k]
45
- });
46
- }
47
- }
48
- }
49
- n.default = e;
50
- return Object.freeze(n);
51
- }
52
-
53
- const React__namespace = /*#__PURE__*/_interopNamespace(React);
54
- const isEqual__default = /*#__PURE__*/_interopDefault(isEqual);
55
- const axios__default = /*#__PURE__*/_interopDefault(axios);
56
- const defaultsDeep__default = /*#__PURE__*/_interopDefault(defaultsDeep);
57
- const styled__default = /*#__PURE__*/_interopDefault(styled);
58
- const get__default = /*#__PURE__*/_interopDefault(get);
59
- const set__default = /*#__PURE__*/_interopDefault(set);
60
- const ContextSelector__namespace = /*#__PURE__*/_interopNamespace(ContextSelector);
61
- const qs__default = /*#__PURE__*/_interopDefault(qs);
62
- const pipe__default = /*#__PURE__*/_interopDefault(pipe);
63
- const clone__default = /*#__PURE__*/_interopDefault(clone);
64
- const toPath__default = /*#__PURE__*/_interopDefault(toPath);
65
- const yup__namespace = /*#__PURE__*/_interopNamespace(yup);
66
-
67
- function createContext(rootComponentName, defaultContext) {
68
- const Context = ContextSelector__namespace.createContext(defaultContext);
69
- const Provider = (props) => {
70
- const { children, ...context } = props;
71
- const value = React__namespace.useMemo(() => context, Object.values(context));
72
- return /* @__PURE__ */ jsxRuntime.jsx(Context.Provider, { value, children });
73
- };
74
- const useContext = (consumerName, selector) => ContextSelector__namespace.useContextSelector(Context, (ctx) => {
75
- if (ctx)
76
- return selector(ctx);
77
- throw new Error(`\`${consumerName}\` must be used within \`${rootComponentName}\``);
78
- });
79
- Provider.displayName = rootComponentName + "Provider";
80
- return [Provider, useContext];
81
- }
82
-
83
- const useTypedDispatch = reactRedux.useDispatch;
84
- const useTypedStore = reactRedux.useStore;
85
- const useTypedSelector = reactRedux.useSelector;
86
- const createTypedSelector = (selector) => toolkit.createSelector((state) => state, selector);
87
-
88
- const THEME_LOCAL_STORAGE_KEY = "STRAPI_THEME";
89
- const LANGUAGE_LOCAL_STORAGE_KEY = "strapi-admin-language";
90
- const adminSlice = toolkit.createSlice({
91
- name: "admin",
92
- initialState: () => {
93
- return {
94
- language: {
95
- locale: "en",
96
- localeNames: { en: "English" }
97
- },
98
- permissions: {},
99
- theme: {
100
- availableThemes: [],
101
- currentTheme: localStorage.getItem(THEME_LOCAL_STORAGE_KEY) || "system"
102
- }
103
- };
104
- },
105
- reducers: {
106
- setAppTheme(state, action) {
107
- state.theme.currentTheme = action.payload;
108
- window.localStorage.setItem(THEME_LOCAL_STORAGE_KEY, action.payload);
109
- },
110
- setAvailableThemes(state, action) {
111
- state.theme.availableThemes = action.payload;
112
- },
113
- setLocale(state, action) {
114
- state.language.locale = action.payload;
115
- window.localStorage.setItem(LANGUAGE_LOCAL_STORAGE_KEY, action.payload);
116
- document.documentElement.setAttribute("lang", action.payload);
117
- }
118
- }
119
- });
120
- const reducer$5 = adminSlice.reducer;
121
- const { setAppTheme, setAvailableThemes, setLocale } = adminSlice.actions;
122
-
123
- const fetchClient = () => {
124
- const instance2 = axios__default.default.create({
125
- headers: {
126
- Accept: "application/json",
127
- "Content-Type": "application/json"
128
- },
129
- paramsSerializer: (params) => {
130
- return qs__default.default.stringify(params, { encode: false });
131
- }
132
- });
133
- instance2.interceptors.request.use(
134
- async (config) => {
135
- config.headers.Authorization = `Bearer ${getToken()}`;
136
- return config;
137
- },
138
- (error) => Promise.reject(error)
139
- );
140
- instance2.interceptors.response.use(
141
- (response) => response,
142
- (error) => {
143
- if (error?.response?.status === 401) {
144
- clearItem(STORAGE_KEYS.TOKEN);
145
- clearItem(STORAGE_KEYS.USER);
146
- window.location.reload();
147
- }
148
- throw error;
149
- }
150
- );
151
- return instance2;
152
- };
153
- const clearItem = (key) => {
154
- if (window.localStorage.getItem(key)) {
155
- return window.localStorage.removeItem(key);
156
- }
157
- if (window.sessionStorage.getItem(key)) {
158
- return window.sessionStorage.removeItem(key);
159
- }
160
- };
161
- const getToken = () => JSON.parse(
162
- localStorage.getItem(STORAGE_KEYS.TOKEN) ?? sessionStorage.getItem(STORAGE_KEYS.TOKEN) ?? '""'
163
- );
164
- const instance = fetchClient();
165
- const addPrependingSlash = (url) => url.charAt(0) !== "/" ? `/${url}` : url;
166
- const hasProtocol = (url) => new RegExp("^(?:[a-z+]+:)?//", "i").test(url);
167
- const normalizeUrl = (url) => hasProtocol(url) ? url : addPrependingSlash(url);
168
- const getFetchClient = (defaultOptions = {}) => {
169
- instance.defaults.baseURL = window.strapi.backendURL;
170
- return {
171
- get: (url, config) => instance.get(normalizeUrl(url), {
172
- ...defaultOptions,
173
- ...config
174
- }),
175
- put: (url, data, config) => instance.put(normalizeUrl(url), data, { ...defaultOptions, ...config }),
176
- post: (url, data, config) => instance.post(normalizeUrl(url), data, { ...defaultOptions, ...config }),
177
- del: (url, config) => instance.delete(normalizeUrl(url), { ...defaultOptions, ...config })
178
- };
179
- };
180
-
181
- const axiosBaseQuery = () => async (query, { signal }) => {
182
- try {
183
- const { get, post, del, put } = getFetchClient();
184
- if (typeof query === "string") {
185
- const result = await get(query, { signal });
186
- return { data: result.data };
187
- } else {
188
- const { url, method = "GET", data, config } = query;
189
- if (method === "POST") {
190
- const result2 = await post(url, data, { ...config, signal });
191
- return { data: result2.data };
192
- }
193
- if (method === "DELETE") {
194
- const result2 = await del(url, { ...config, signal });
195
- return { data: result2.data };
196
- }
197
- if (method === "PUT") {
198
- const result2 = await put(url, data, { ...config, signal });
199
- return { data: result2.data };
200
- }
201
- const result = await get(url, { ...config, signal });
202
- return { data: result.data };
203
- }
204
- } catch (err) {
205
- if (axios.isAxiosError(err)) {
206
- if (typeof err.response?.data === "object" && err.response?.data !== null && "error" in err.response?.data) {
207
- return { data: void 0, error: err.response?.data.error };
208
- } else {
209
- return {
210
- data: void 0,
211
- error: {
212
- name: "UnknownError",
213
- message: "There was an unknown error response from the API",
214
- details: err.response?.data,
215
- status: err.response?.status
216
- }
217
- };
218
- }
219
- }
220
- const error = err;
221
- return {
222
- data: void 0,
223
- error: {
224
- name: error.name,
225
- message: error.message,
226
- stack: error.stack
227
- }
228
- };
229
- }
230
- };
231
- const isBaseQueryError = (error) => {
232
- return error.name !== void 0;
233
- };
234
-
235
- const adminApi = react.createApi({
236
- reducerPath: "adminApi",
237
- baseQuery: axiosBaseQuery(),
238
- tagTypes: [
239
- "ApiToken",
240
- "LicenseLimits",
241
- "Me",
242
- "ProjectSettings",
243
- "ProvidersOptions",
244
- "ReviewWorkflow",
245
- "ReviewWorkflowStage",
246
- "Role",
247
- "RolePermissions",
248
- "TransferToken",
249
- "User",
250
- "Webhook"
251
- ],
252
- endpoints: (builder) => ({
253
- /**
254
- * This is here because it's shared between the transfer-token routes & the api-tokens.
255
- */
256
- regenerateToken: builder.mutation({
257
- query: (url) => ({
258
- method: "POST",
259
- url: `${url}/regenerate`
260
- }),
261
- transformResponse: (response) => response.data
262
- })
263
- })
264
- });
265
- const { useRegenerateTokenMutation } = adminApi;
266
-
267
- const authService = adminApi.injectEndpoints({
268
- endpoints: (builder) => ({
269
- /**
270
- * ME
271
- */
272
- getMe: builder.query({
273
- query: () => ({
274
- method: "GET",
275
- url: "/admin/users/me"
276
- }),
277
- transformResponse(res) {
278
- return res.data;
279
- },
280
- providesTags: (res) => res ? ["Me", { type: "User", id: res.id }] : ["Me"]
281
- }),
282
- getMyPermissions: builder.query({
283
- query: () => ({
284
- method: "GET",
285
- url: "/admin/users/me/permissions"
286
- }),
287
- transformResponse(res) {
288
- return res.data;
289
- }
290
- }),
291
- updateMe: builder.mutation({
292
- query: (body) => ({
293
- method: "PUT",
294
- url: "/admin/users/me",
295
- data: body
296
- }),
297
- transformResponse(res) {
298
- return res.data;
299
- },
300
- invalidatesTags: ["Me"]
301
- }),
302
- /**
303
- * Permissions
304
- */
305
- checkPermissions: builder.query({
306
- query: (permissions) => ({
307
- method: "POST",
308
- url: "/admin/permissions/check",
309
- data: permissions
310
- })
311
- }),
312
- /**
313
- * Auth methods
314
- */
315
- login: builder.mutation({
316
- query: (body) => ({
317
- method: "POST",
318
- url: "/admin/login",
319
- data: body
320
- }),
321
- transformResponse(res) {
322
- return res.data;
323
- },
324
- invalidatesTags: ["Me"]
325
- }),
326
- logout: builder.mutation({
327
- query: () => ({
328
- method: "POST",
329
- url: "/admin/logout"
330
- })
331
- }),
332
- resetPassword: builder.mutation({
333
- query: (body) => ({
334
- method: "POST",
335
- url: "/admin/reset-password",
336
- data: body
337
- }),
338
- transformResponse(res) {
339
- return res.data;
340
- }
341
- }),
342
- renewToken: builder.mutation({
343
- query: (body) => ({
344
- method: "POST",
345
- url: "/admin/renew-token",
346
- data: body
347
- }),
348
- transformResponse(res) {
349
- return res.data;
350
- }
351
- }),
352
- getRegistrationInfo: builder.query({
353
- query: (registrationToken) => ({
354
- url: "/admin/registration-info",
355
- method: "GET",
356
- config: {
357
- params: {
358
- registrationToken
359
- }
360
- }
361
- }),
362
- transformResponse(res) {
363
- return res.data;
364
- }
365
- }),
366
- registerAdmin: builder.mutation({
367
- query: (body) => ({
368
- method: "POST",
369
- url: "/admin/register-admin",
370
- data: body
371
- }),
372
- transformResponse(res) {
373
- return res.data;
374
- }
375
- }),
376
- registerUser: builder.mutation({
377
- query: (body) => ({
378
- method: "POST",
379
- url: "/admin/register",
380
- data: body
381
- }),
382
- transformResponse(res) {
383
- return res.data;
384
- }
385
- }),
386
- forgotPassword: builder.mutation({
387
- query: (body) => ({
388
- url: "/admin/forgot-password",
389
- method: "POST",
390
- data: body
391
- })
392
- }),
393
- isSSOLocked: builder.query({
394
- query: () => ({
395
- url: "/admin/providers/isSSOLocked",
396
- method: "GET"
397
- }),
398
- transformResponse(res) {
399
- return res.data;
400
- }
401
- }),
402
- getProviders: builder.query({
403
- query: () => ({
404
- url: "/admin/providers",
405
- method: "GET"
406
- })
407
- }),
408
- getProviderOptions: builder.query({
409
- query: () => ({
410
- url: "/admin/providers/options",
411
- method: "GET"
412
- }),
413
- transformResponse(res) {
414
- return res.data;
415
- },
416
- providesTags: ["ProvidersOptions"]
417
- }),
418
- updateProviderOptions: builder.mutation({
419
- query: (body) => ({
420
- url: "/admin/providers/options",
421
- method: "PUT",
422
- data: body
423
- }),
424
- transformResponse(res) {
425
- return res.data;
426
- },
427
- invalidatesTags: ["ProvidersOptions"]
428
- })
429
- }),
430
- overrideExisting: false
431
- });
432
- const {
433
- useCheckPermissionsQuery,
434
- useLazyCheckPermissionsQuery,
435
- useGetMeQuery,
436
- useLoginMutation,
437
- useRenewTokenMutation,
438
- useLogoutMutation,
439
- useUpdateMeMutation,
440
- useResetPasswordMutation,
441
- useRegisterAdminMutation,
442
- useRegisterUserMutation,
443
- useGetRegistrationInfoQuery,
444
- useForgotPasswordMutation,
445
- useGetMyPermissionsQuery,
446
- useIsSSOLockedQuery,
447
- useGetProvidersQuery,
448
- useGetProviderOptionsQuery,
449
- useUpdateProviderOptionsMutation
450
- } = authService;
451
-
452
- const [Provider, useAuth] = createContext("Auth");
453
- const STORAGE_KEYS = {
454
- TOKEN: "jwtToken",
455
- USER: "userInfo"
456
- };
457
- const AuthProvider = ({ children, _defaultPermissions = [] }) => {
458
- const dispatch = useTypedDispatch();
459
- const [token, setToken] = React__namespace.useState(() => {
460
- const token2 = localStorage.getItem(STORAGE_KEYS.TOKEN) ?? sessionStorage.getItem(STORAGE_KEYS.TOKEN);
461
- if (typeof token2 === "string") {
462
- return JSON.parse(token2);
463
- }
464
- return null;
465
- });
466
- const { data: user } = useGetMeQuery(void 0, {
467
- /**
468
- * If there's no token, we don't try to fetch
469
- * the user data because it will fail.
470
- */
471
- skip: !token
472
- });
473
- const {
474
- data: userPermissions = _defaultPermissions,
475
- refetch,
476
- isUninitialized
477
- } = useGetMyPermissionsQuery(void 0, {
478
- skip: !token
479
- });
480
- const navigate = reactRouterDom.useNavigate();
481
- const [loginMutation] = useLoginMutation();
482
- const [renewTokenMutation] = useRenewTokenMutation();
483
- const [logoutMutation] = useLogoutMutation();
484
- const clearStorage = React__namespace.useCallback(() => {
485
- localStorage.removeItem(STORAGE_KEYS.TOKEN);
486
- localStorage.removeItem(STORAGE_KEYS.USER);
487
- sessionStorage.removeItem(STORAGE_KEYS.TOKEN);
488
- sessionStorage.removeItem(STORAGE_KEYS.USER);
489
- setToken(null);
490
- }, []);
491
- React__namespace.useEffect(() => {
492
- const token2 = localStorage.getItem(STORAGE_KEYS.TOKEN) ?? sessionStorage.getItem(STORAGE_KEYS.TOKEN);
493
- if (token2) {
494
- renewTokenMutation({ token: JSON.parse(token2) }).then((res) => {
495
- if ("data" in res) {
496
- setToken(res.data.token);
497
- } else {
498
- clearStorage();
499
- navigate("/auth/login");
500
- }
501
- });
502
- }
503
- }, [renewTokenMutation, clearStorage, navigate]);
504
- React__namespace.useEffect(() => {
505
- if (user) {
506
- if (user.preferedLanguage) {
507
- dispatch(setLocale(user.preferedLanguage));
508
- }
509
- }
510
- }, [dispatch, user]);
511
- React__namespace.useEffect(() => {
512
- if (token) {
513
- storeToken(token, false);
514
- }
515
- }, [token]);
516
- React__namespace.useEffect(() => {
517
- const handleUserStorageChange = (event) => {
518
- if (event.key === STORAGE_KEYS.USER && event.newValue === null) {
519
- clearStorage();
520
- navigate("/auth/login");
521
- }
522
- };
523
- window.addEventListener("storage", handleUserStorageChange);
524
- return () => {
525
- window.removeEventListener("storage", handleUserStorageChange);
526
- };
527
- });
528
- const login = React__namespace.useCallback(
529
- async ({ rememberMe, ...body }) => {
530
- const res = await loginMutation(body);
531
- if ("data" in res) {
532
- const { token: token2 } = res.data;
533
- storeToken(token2, rememberMe);
534
- setToken(token2);
535
- }
536
- return res;
537
- },
538
- [loginMutation]
539
- );
540
- const logout = React__namespace.useCallback(async () => {
541
- await logoutMutation();
542
- clearStorage();
543
- navigate("/auth/login");
544
- }, [clearStorage, logoutMutation, navigate]);
545
- const refetchPermissions = React__namespace.useCallback(async () => {
546
- if (!isUninitialized) {
547
- await refetch();
548
- }
549
- }, [isUninitialized, refetch]);
550
- const [checkPermissions] = useLazyCheckPermissionsQuery();
551
- const checkUserHasPermissions = React__namespace.useCallback(
552
- async (permissions, passedPermissions) => {
553
- if (!permissions || !permissions.length) {
554
- return true;
555
- }
556
- const matchingPermissions = permissions.filter(
557
- (permission) => (passedPermissions || userPermissions).findIndex(
558
- (perm) => perm.action === permission.action && perm.subject === permission.subject
559
- ) >= 0
560
- );
561
- const shouldCheckConditions = matchingPermissions.some(
562
- (perm) => Array.isArray(perm.conditions) && perm.conditions.length > 0
563
- );
564
- if (!shouldCheckConditions) {
565
- return matchingPermissions.length > 0;
566
- }
567
- const { data, error } = await checkPermissions({
568
- permissions: matchingPermissions.map((perm) => ({
569
- action: perm.action,
570
- subject: perm.subject
571
- }))
572
- });
573
- if (error) {
574
- throw error;
575
- } else {
576
- return data?.data.every((v) => v === true) ?? false;
577
- }
578
- },
579
- [checkPermissions, userPermissions]
580
- );
581
- return /* @__PURE__ */ jsxRuntime.jsx(
582
- Provider,
583
- {
584
- token,
585
- user,
586
- login,
587
- logout,
588
- permissions: userPermissions,
589
- checkUserHasPermissions,
590
- refetchPermissions,
591
- setToken,
592
- children
593
- }
594
- );
595
- };
596
- const storeToken = (token, persist) => {
597
- if (!persist) {
598
- return window.sessionStorage.setItem(STORAGE_KEYS.TOKEN, JSON.stringify(token));
599
- }
600
- return window.localStorage.setItem(STORAGE_KEYS.TOKEN, JSON.stringify(token));
601
- };
602
-
603
- const NotificationsContext = React__namespace.createContext({
604
- toggleNotification: () => {
605
- }
606
- });
607
- const NotificationsProvider = ({ children }) => {
608
- const notificationIdRef = React__namespace.useRef(0);
609
- const [notifications, setNotifications] = React__namespace.useState([]);
610
- const toggleNotification = React__namespace.useCallback(
611
- ({ type, message, link, timeout, blockTransition, onClose, title }) => {
612
- setNotifications((s) => [
613
- ...s,
614
- {
615
- id: notificationIdRef.current++,
616
- type,
617
- message,
618
- link,
619
- timeout,
620
- blockTransition,
621
- onClose,
622
- title
623
- }
624
- ]);
625
- },
626
- []
627
- );
628
- const clearNotification = React__namespace.useCallback((id) => {
629
- setNotifications((s) => s.filter((n) => n.id !== id));
630
- }, []);
631
- const value = React__namespace.useMemo(() => ({ toggleNotification }), [toggleNotification]);
632
- return /* @__PURE__ */ jsxRuntime.jsxs(NotificationsContext.Provider, { value, children: [
633
- /* @__PURE__ */ jsxRuntime.jsx(
634
- designSystem.Flex,
635
- {
636
- left: "50%",
637
- marginLeft: "-250px",
638
- position: "fixed",
639
- direction: "column",
640
- alignItems: "stretch",
641
- gap: 2,
642
- top: `${46 / 16}rem`,
643
- width: `${500 / 16}rem`,
644
- zIndex: 10,
645
- children: notifications.map((notification) => {
646
- return /* @__PURE__ */ jsxRuntime.jsx(
647
- Notification,
648
- {
649
- ...notification,
650
- clearNotification
651
- },
652
- notification.id
653
- );
654
- })
655
- }
656
- ),
657
- children
658
- ] });
659
- };
660
- const Notification = ({
661
- clearNotification,
662
- blockTransition = false,
663
- id,
664
- link,
665
- message,
666
- onClose,
667
- timeout = 2500,
668
- title,
669
- type
670
- }) => {
671
- const { formatMessage } = reactIntl.useIntl();
672
- const onCloseCallback = designSystem.useCallbackRef(onClose);
673
- const handleClose = React__namespace.useCallback(() => {
674
- onCloseCallback();
675
- clearNotification(id);
676
- }, [clearNotification, id, onCloseCallback]);
677
- React__namespace.useEffect(() => {
678
- if (!blockTransition) {
679
- const timeoutReference = setTimeout(() => {
680
- handleClose();
681
- }, timeout);
682
- return () => {
683
- clearTimeout(timeoutReference);
684
- };
685
- }
686
- }, [blockTransition, handleClose, timeout]);
687
- let variant;
688
- let alertTitle;
689
- if (type === "info") {
690
- variant = "default";
691
- alertTitle = formatMessage({
692
- id: "notification.default.title",
693
- defaultMessage: "Information:"
694
- });
695
- } else if (type === "danger") {
696
- variant = "danger";
697
- alertTitle = formatMessage({
698
- id: "notification.warning.title",
699
- defaultMessage: "Warning:"
700
- });
701
- } else if (type === "warning") {
702
- variant = "warning";
703
- alertTitle = formatMessage({
704
- id: "notification.warning.title",
705
- defaultMessage: "Warning:"
706
- });
707
- } else {
708
- variant = "success";
709
- alertTitle = formatMessage({
710
- id: "notification.success.title",
711
- defaultMessage: "Success:"
712
- });
713
- }
714
- if (title) {
715
- alertTitle = title;
716
- }
717
- return /* @__PURE__ */ jsxRuntime.jsx(
718
- designSystem.Alert,
719
- {
720
- action: link ? /* @__PURE__ */ jsxRuntime.jsx(v2.Link, { href: link.url, isExternal: true, children: link.label }) : void 0,
721
- onClose: handleClose,
722
- closeLabel: formatMessage({
723
- id: "global.close",
724
- defaultMessage: "Close"
725
- }),
726
- title: alertTitle,
727
- variant,
728
- children: message
729
- }
730
- );
731
- };
732
- /**
733
- * @preserve
734
- * @description Returns an object to interact with the notification
735
- * system. The callbacks are wrapped in `useCallback` for a stable
736
- * identity.
737
- *
738
- * @example
739
- * ```tsx
740
- * import { useNotification } from '@strapi/strapi/admin';
741
- *
742
- * const MyComponent = () => {
743
- * const { toggleNotification } = useNotification();
744
- *
745
- * return <button onClick={() => toggleNotification({ message: 'Hello world!' })}>Click me</button>;
746
- */
747
- const useNotification = () => React__namespace.useContext(NotificationsContext);
748
-
749
- function getPrefixedId(message, callback) {
750
- const prefixedMessage = `apiError.${message}`;
751
- if (typeof callback === "function") {
752
- return callback(prefixedMessage);
753
- }
754
- return prefixedMessage;
755
- }
756
-
757
- function normalizeError(error, { name, intlMessagePrefixCallback }) {
758
- const { message } = error;
759
- const normalizedError = {
760
- id: getPrefixedId(message, intlMessagePrefixCallback),
761
- defaultMessage: message,
762
- name: error.name ?? name,
763
- values: {}
764
- };
765
- if ("path" in error) {
766
- normalizedError.values = { path: error.path.join(".") };
767
- }
768
- return normalizedError;
769
- }
770
- const validateErrorIsYupValidationError = (err) => typeof err.details === "object" && err.details !== null && "errors" in err.details;
771
- function normalizeAPIError(apiError, intlMessagePrefixCallback) {
772
- const error = apiError.response?.data.error;
773
- if (error) {
774
- if (validateErrorIsYupValidationError(error)) {
775
- return {
776
- name: error.name,
777
- message: error?.message || null,
778
- errors: error.details.errors.map(
779
- (err) => normalizeError(err, { name: error.name, intlMessagePrefixCallback })
780
- )
781
- };
782
- }
783
- return normalizeError(error, { intlMessagePrefixCallback });
784
- }
785
- return null;
786
- }
787
-
788
- function useAPIErrorHandler(intlMessagePrefixCallback) {
789
- const { formatMessage } = reactIntl.useIntl();
790
- const formatError = React__namespace.useCallback(
791
- (error) => {
792
- try {
793
- const formattedErr = formatAPIError(error, { intlMessagePrefixCallback, formatMessage });
794
- if (!formattedErr) {
795
- return formatAxiosError(error, { intlMessagePrefixCallback, formatMessage });
796
- }
797
- return formattedErr;
798
- } catch (_) {
799
- throw new Error("formatAPIError: Unknown error:", error);
800
- }
801
- },
802
- [formatMessage, intlMessagePrefixCallback]
803
- );
804
- return {
805
- /**
806
- * @alpha
807
- * Convert ValidationErrors from the API into an object that can be used by forms.
808
- */
809
- _unstableFormatValidationErrors: React__namespace.useCallback(
810
- (error) => {
811
- if (typeof error.details === "object" && error.details !== null) {
812
- if ("errors" in error.details && Array.isArray(error.details.errors)) {
813
- const validationErrors = error.details.errors;
814
- return validationErrors.reduce((acc, err) => {
815
- const { path, message } = err;
816
- return {
817
- ...acc,
818
- [path.join(".")]: message
819
- };
820
- }, {});
821
- } else {
822
- const details = error.details;
823
- return Object.keys(details).reduce((acc, key) => {
824
- const messages = details[key];
825
- return {
826
- ...acc,
827
- [key]: messages.join(", ")
828
- };
829
- }, {});
830
- }
831
- } else {
832
- return {};
833
- }
834
- },
835
- []
836
- ),
837
- /**
838
- * @alpha
839
- * This handles the errors given from `redux-toolkit`'s axios based baseQuery function.
840
- */
841
- _unstableFormatAPIError: React__namespace.useCallback(
842
- (error) => {
843
- const err = {
844
- response: {
845
- data: {
846
- error
847
- }
848
- }
849
- };
850
- if (!error.message) {
851
- return "Unknown error occured.";
852
- }
853
- return formatError(err);
854
- },
855
- [formatError]
856
- ),
857
- formatAPIError: formatError
858
- };
859
- }
860
- function formatAxiosError(error, { intlMessagePrefixCallback, formatMessage }) {
861
- const { code, message } = error;
862
- return formatMessage(
863
- {
864
- id: getPrefixedId(message, intlMessagePrefixCallback),
865
- defaultMessage: message
866
- },
867
- {
868
- code
869
- }
870
- );
871
- }
872
- function formatAPIError(error, { formatMessage, intlMessagePrefixCallback }) {
873
- if (!formatMessage) {
874
- throw new Error("The formatMessage callback is a mandatory argument.");
875
- }
876
- const normalizedError = normalizeAPIError(error, intlMessagePrefixCallback);
877
- if (!normalizedError) {
878
- return null;
879
- }
880
- if ("message" in normalizedError && normalizedError.message !== null) {
881
- return normalizedError.message;
882
- }
883
- if ("errors" in normalizedError) {
884
- return normalizedError.errors.map(({ id, defaultMessage, values }) => formatMessage({ id, defaultMessage }, values)).join("\n");
885
- }
886
- return formatMessage(normalizedError);
887
- }
888
-
889
- const PageMain = ({ children, ...restProps }) => {
890
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Main, { ...restProps, children });
891
- };
892
- const Loading = ({ children = "Loading content." }) => {
893
- return /* @__PURE__ */ jsxRuntime.jsx(PageMain, { height: "100vh", "aria-busy": true, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { alignItems: "center", height: "100%", justifyContent: "center", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Loader, { children }) }) });
894
- };
895
- const Error$1 = (props) => {
896
- const { formatMessage } = reactIntl.useIntl();
897
- return /* @__PURE__ */ jsxRuntime.jsx(PageMain, { height: "100%", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { alignItems: "center", height: "100%", justifyContent: "center", children: /* @__PURE__ */ jsxRuntime.jsx(
898
- designSystem.EmptyStateLayout,
899
- {
900
- icon: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Icon, { as: Icons.ExclamationMarkCircle, width: "10rem" }),
901
- content: formatMessage({
902
- id: "anErrorOccurred",
903
- defaultMessage: "Woops! Something went wrong. Please, try again."
904
- }),
905
- ...props
906
- }
907
- ) }) });
908
- };
909
- const NoPermissions = (props) => {
910
- const { formatMessage } = reactIntl.useIntl();
911
- return /* @__PURE__ */ jsxRuntime.jsx(PageMain, { height: "100%", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { alignItems: "center", height: "100%", justifyContent: "center", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { minWidth: "50%", children: /* @__PURE__ */ jsxRuntime.jsx(
912
- designSystem.EmptyStateLayout,
913
- {
914
- icon: /* @__PURE__ */ jsxRuntime.jsx(Icons.EmptyPermissions, { width: "10rem" }),
915
- content: formatMessage({
916
- id: "app.components.EmptyStateLayout.content-permissions",
917
- defaultMessage: "You don't have the permissions to access that content"
918
- }),
919
- ...props
920
- }
921
- ) }) }) });
922
- };
923
- const NoData = (props) => {
924
- const { formatMessage } = reactIntl.useIntl();
925
- return /* @__PURE__ */ jsxRuntime.jsx(PageMain, { height: "100%", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { alignItems: "center", height: "100%", width: "100%", justifyContent: "center", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { minWidth: "50%", children: /* @__PURE__ */ jsxRuntime.jsx(
926
- designSystem.EmptyStateLayout,
927
- {
928
- icon: /* @__PURE__ */ jsxRuntime.jsx(Icons.EmptyDocuments, { width: "10rem" }),
929
- content: formatMessage({
930
- id: "app.components.EmptyStateLayout.content-document",
931
- defaultMessage: "No content found"
932
- }),
933
- ...props
934
- }
935
- ) }) }) });
936
- };
937
- const Protect = ({ permissions = [], children }) => {
938
- const userPermissions = useAuth("Protect", (state) => state.permissions);
939
- const { toggleNotification } = useNotification();
940
- const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
941
- const matchingPermissions = userPermissions.filter(
942
- (permission) => permissions.findIndex(
943
- (perm) => perm.action === permission.action && perm.subject === permission.subject
944
- ) >= 0
945
- );
946
- const shouldCheckConditions = matchingPermissions.some(
947
- (perm) => Array.isArray(perm.conditions) && perm.conditions.length > 0
948
- );
949
- const { isLoading, error, data } = useCheckPermissionsQuery(
950
- {
951
- permissions: matchingPermissions.map((perm) => ({
952
- action: perm.action,
953
- subject: perm.subject
954
- }))
955
- },
956
- {
957
- skip: !shouldCheckConditions
958
- }
959
- );
960
- React__namespace.useEffect(() => {
961
- if (error) {
962
- toggleNotification({
963
- type: "danger",
964
- message: formatAPIError(error)
965
- });
966
- }
967
- }, [error, formatAPIError, toggleNotification]);
968
- if (isLoading) {
969
- return /* @__PURE__ */ jsxRuntime.jsx(Loading, {});
970
- }
971
- if (error) {
972
- return /* @__PURE__ */ jsxRuntime.jsx(Error$1, {});
973
- }
974
- const { data: permissionsData } = data || {};
975
- const canAccess = shouldCheckConditions && permissionsData ? !permissionsData.includes(false) : matchingPermissions.length > 0;
976
- if (!canAccess) {
977
- return /* @__PURE__ */ jsxRuntime.jsx(NoPermissions, {});
978
- }
979
- return typeof children === "function" ? children({ permissions: matchingPermissions }) : children;
980
- };
981
- const Page = {
982
- Error: Error$1,
983
- Loading,
984
- NoPermissions,
985
- Protect,
986
- NoData,
987
- Main: PageMain
988
- };
989
-
990
- const usePrev = (value) => {
991
- const ref = React.useRef();
992
- React.useEffect(() => {
993
- ref.current = value;
994
- }, [value]);
995
- return ref.current;
996
- };
997
-
998
- const capitalise = (str) => str.charAt(0).toUpperCase() + str.slice(1);
999
-
1000
- const useRBAC = (permissionsToCheck = {}, passedPermissions) => {
1001
- const userPermissions = useAuth("useRBAC", (state) => state.permissions);
1002
- const [isLoading, setIsLoading] = React.useState(true);
1003
- const [error, setError] = React.useState();
1004
- const [data, setData] = React.useState();
1005
- const defaultAllowedActions = React.useMemo(
1006
- () => Object.keys(permissionsToCheck).reduce(
1007
- (acc, name) => ({
1008
- ...acc,
1009
- [name]: false
1010
- }),
1011
- {}
1012
- ),
1013
- [permissionsToCheck]
1014
- );
1015
- const checkUserHasPermissions = useAuth("useRBAC", (state) => state.checkUserHasPermissions);
1016
- const permssionsChecked = usePrev(permissionsToCheck);
1017
- React.useEffect(() => {
1018
- if (!isEqual__default.default(permssionsChecked, permissionsToCheck)) {
1019
- setIsLoading(true);
1020
- setData(void 0);
1021
- setError(void 0);
1022
- const permissionEntries = Object.entries(permissionsToCheck);
1023
- for (const [name, permissions] of permissionEntries) {
1024
- checkUserHasPermissions(permissions, passedPermissions).then((res) => {
1025
- if (res) {
1026
- setData((s) => ({
1027
- ...s,
1028
- [name]: res
1029
- }));
1030
- }
1031
- }).catch((err) => {
1032
- setError(err);
1033
- }).finally(() => {
1034
- setIsLoading(false);
1035
- });
1036
- }
1037
- }
1038
- }, [checkUserHasPermissions, passedPermissions, permissionsToCheck, permssionsChecked]);
1039
- const actions = {
1040
- ...defaultAllowedActions,
1041
- ...data
1042
- };
1043
- const allowedActions = Object.entries(actions).reduce((acc, [name, allowed]) => {
1044
- acc[`can${capitalise(name)}`] = allowed;
1045
- return acc;
1046
- }, {});
1047
- return { allowedActions, isLoading: isLoading || userPermissions.length === 0, error };
1048
- };
1049
-
1050
- const prefixFileUrlWithBackendUrl = (fileURL) => {
1051
- return !!fileURL && fileURL.startsWith("/") ? `${window.strapi.backendURL}${fileURL}` : fileURL;
1052
- };
1053
-
1054
- const admin = adminApi.injectEndpoints({
1055
- endpoints: (builder) => ({
1056
- init: builder.query({
1057
- query: () => ({
1058
- url: "/admin/init",
1059
- method: "GET"
1060
- }),
1061
- transformResponse(res) {
1062
- return res.data;
1063
- }
1064
- }),
1065
- information: builder.query({
1066
- query: () => ({
1067
- url: "/admin/information",
1068
- method: "GET"
1069
- }),
1070
- transformResponse(res) {
1071
- return res.data;
1072
- }
1073
- }),
1074
- telemetryProperties: builder.query({
1075
- query: () => ({
1076
- url: "/admin/telemetry-properties",
1077
- method: "GET",
1078
- config: {
1079
- validateStatus: (status) => status < 500
1080
- }
1081
- }),
1082
- transformResponse(res) {
1083
- return res.data;
1084
- }
1085
- }),
1086
- projectSettings: builder.query({
1087
- query: () => ({
1088
- url: "/admin/project-settings",
1089
- method: "GET"
1090
- }),
1091
- providesTags: ["ProjectSettings"],
1092
- transformResponse(data) {
1093
- return {
1094
- authLogo: data.authLogo ? {
1095
- name: data.authLogo.name,
1096
- url: prefixFileUrlWithBackendUrl(data.authLogo.url)
1097
- } : void 0,
1098
- menuLogo: data.menuLogo ? {
1099
- name: data.menuLogo.name,
1100
- url: prefixFileUrlWithBackendUrl(data.menuLogo.url)
1101
- } : void 0
1102
- };
1103
- }
1104
- }),
1105
- updateProjectSettings: builder.mutation({
1106
- query: (data) => ({
1107
- url: "/admin/project-settings",
1108
- method: "POST",
1109
- data,
1110
- config: {
1111
- headers: {
1112
- "Content-Type": "multipart/form-data"
1113
- }
1114
- }
1115
- }),
1116
- invalidatesTags: ["ProjectSettings"]
1117
- }),
1118
- getPlugins: builder.query({
1119
- query: () => ({
1120
- url: "/admin/plugins",
1121
- method: "GET"
1122
- })
1123
- }),
1124
- getLicenseLimits: builder.query({
1125
- query: () => ({
1126
- url: "/admin/license-limit-information",
1127
- method: "GET"
1128
- }),
1129
- providesTags: ["LicenseLimits"]
1130
- })
1131
- }),
1132
- overrideExisting: false
1133
- });
1134
- const {
1135
- useInitQuery,
1136
- useTelemetryPropertiesQuery,
1137
- useInformationQuery,
1138
- useProjectSettingsQuery,
1139
- useUpdateProjectSettingsMutation,
1140
- useGetPluginsQuery,
1141
- useGetLicenseLimitsQuery
1142
- } = admin;
1143
-
1144
- const [AppInfoProvider, useAppInfo] = createContext("AppInfo", {});
1145
-
1146
- const TrackingContext = React__namespace.createContext({
1147
- uuid: false
1148
- });
1149
- const TrackingProvider = ({ children }) => {
1150
- const token = useAuth("App", (state) => state.token);
1151
- const { data: initData } = useInitQuery();
1152
- const { uuid } = initData ?? {};
1153
- const { data } = useTelemetryPropertiesQuery(void 0, {
1154
- skip: !initData?.uuid || !token
1155
- });
1156
- React__namespace.useEffect(() => {
1157
- if (uuid && data) {
1158
- const event = "didInitializeAdministration";
1159
- try {
1160
- fetch("https://analytics.strapi.io/api/v2/track", {
1161
- method: "POST",
1162
- body: JSON.stringify({
1163
- // This event is anonymous
1164
- event,
1165
- userId: "",
1166
- eventPropeties: {},
1167
- groupProperties: { ...data, projectId: uuid }
1168
- }),
1169
- headers: {
1170
- "Content-Type": "application/json",
1171
- "X-Strapi-Event": event
1172
- }
1173
- });
1174
- } catch {
1175
- }
1176
- }
1177
- }, [data, uuid]);
1178
- const value = React__namespace.useMemo(
1179
- () => ({
1180
- uuid,
1181
- telemetryProperties: data
1182
- }),
1183
- [uuid, data]
1184
- );
1185
- return /* @__PURE__ */ jsxRuntime.jsx(TrackingContext.Provider, { value, children });
1186
- };
1187
- const useTracking = () => {
1188
- const { uuid, telemetryProperties } = React__namespace.useContext(TrackingContext);
1189
- const userId = useAppInfo("useTracking", (state) => state.userId);
1190
- const trackUsage = React__namespace.useCallback(
1191
- async (event, properties) => {
1192
- try {
1193
- if (uuid && !window.strapi.telemetryDisabled) {
1194
- const res = await axios__default.default.post(
1195
- "https://analytics.strapi.io/api/v2/track",
1196
- {
1197
- event,
1198
- userId,
1199
- eventProperties: { ...properties },
1200
- userProperties: {},
1201
- groupProperties: {
1202
- ...telemetryProperties,
1203
- projectId: uuid,
1204
- projectType: window.strapi.projectType
1205
- }
1206
- },
1207
- {
1208
- headers: {
1209
- "Content-Type": "application/json",
1210
- "X-Strapi-Event": event
1211
- }
1212
- }
1213
- );
1214
- return res;
1215
- }
1216
- } catch (err) {
1217
- }
1218
- return null;
1219
- },
1220
- [telemetryProperties, userId, uuid]
1221
- );
1222
- return { trackUsage };
1223
- };
1224
-
1225
- const [ConfigurationContextProvider, useConfiguration] = reactContext.createContext("ConfigurationContext");
1226
- const ConfigurationProvider = ({
1227
- children,
1228
- defaultAuthLogo,
1229
- defaultMenuLogo,
1230
- showReleaseNotification = false,
1231
- showTutorials = false
1232
- }) => {
1233
- const { trackUsage } = useTracking();
1234
- const { formatMessage } = reactIntl.useIntl();
1235
- const { toggleNotification } = useNotification();
1236
- const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
1237
- const permissions = useTypedSelector(
1238
- (state) => state.admin_app.permissions.settings?.["project-settings"]
1239
- );
1240
- const token = useAuth("ConfigurationProvider", (state) => state.token);
1241
- const {
1242
- allowedActions: { canRead }
1243
- } = useRBAC(permissions);
1244
- const {
1245
- data: { authLogo: customAuthLogo, menuLogo: customMenuLogo } = {},
1246
- error,
1247
- isLoading
1248
- } = useInitQuery();
1249
- React__namespace.useEffect(() => {
1250
- if (error) {
1251
- toggleNotification({
1252
- type: "danger",
1253
- message: formatMessage({ id: "app.containers.App.notification.error.init" })
1254
- });
1255
- }
1256
- }, [error, formatMessage, toggleNotification]);
1257
- const { data, isSuccess } = useProjectSettingsQuery(void 0, {
1258
- skip: !token || !canRead
1259
- });
1260
- const [updateProjectSettingsMutation] = useUpdateProjectSettingsMutation();
1261
- const updateProjectSettings = React__namespace.useCallback(
1262
- async (body) => {
1263
- const formData = new FormData();
1264
- Object.entries(body).forEach(([key, value]) => {
1265
- if (value?.rawFile) {
1266
- formData.append(key, value.rawFile);
1267
- } else if (value === null) {
1268
- formData.append(key, JSON.stringify(value));
1269
- }
1270
- });
1271
- const res = await updateProjectSettingsMutation(formData);
1272
- if ("data" in res) {
1273
- const updatedMenuLogo = !!res.data.menuLogo && !!body.menuLogo?.rawFile;
1274
- const updatedAuthLogo = !!res.data.authLogo && !!body.authLogo?.rawFile;
1275
- if (updatedMenuLogo) {
1276
- trackUsage("didChangeLogo", {
1277
- logo: "menu"
1278
- });
1279
- }
1280
- if (updatedAuthLogo) {
1281
- trackUsage("didChangeLogo", {
1282
- logo: "auth"
1283
- });
1284
- }
1285
- toggleNotification({
1286
- type: "success",
1287
- message: formatMessage({ id: "app", defaultMessage: "Saved" })
1288
- });
1289
- } else {
1290
- toggleNotification({
1291
- type: "danger",
1292
- message: formatAPIError(res.error)
1293
- });
1294
- }
1295
- },
1296
- [formatAPIError, formatMessage, toggleNotification, trackUsage, updateProjectSettingsMutation]
1297
- );
1298
- if (isLoading) {
1299
- return /* @__PURE__ */ jsxRuntime.jsx(Page.Loading, {});
1300
- }
1301
- return /* @__PURE__ */ jsxRuntime.jsx(
1302
- ConfigurationContextProvider,
1303
- {
1304
- showReleaseNotification,
1305
- showTutorials,
1306
- logos: {
1307
- menu: {
1308
- custom: isSuccess ? data?.menuLogo : {
1309
- url: customMenuLogo ?? ""
1310
- },
1311
- default: defaultMenuLogo
1312
- },
1313
- auth: {
1314
- custom: isSuccess ? data?.authLogo : {
1315
- url: customAuthLogo ?? ""
1316
- },
1317
- default: defaultAuthLogo
1318
- }
1319
- },
1320
- updateProjectSettings,
1321
- children
1322
- }
1323
- );
1324
- };
1325
-
1326
- const [StrapiAppProvider, useStrapiApp] = createContext("StrapiApp");
1327
-
1328
- const GUIDED_TOUR_COMPLETED_STEPS = "GUIDED_TOUR_COMPLETED_STEPS";
1329
- const GUIDED_TOUR_CURRENT_STEP = "GUIDED_TOUR_CURRENT_STEP";
1330
- const GUIDED_TOUR_SKIPPED = "GUIDED_TOUR_SKIPPED";
1331
- const [GuidedTourProviderImpl, useGuidedTour] = createContext("GuidedTour");
1332
- const GuidedTourProvider = ({ children }) => {
1333
- const [{ currentStep, guidedTourState, isGuidedTourVisible, isSkipped }, dispatch] = React__namespace.useReducer(reducer$4, initialState$2, initialiseState);
1334
- const setCurrentStep = (step) => {
1335
- if (step !== null) {
1336
- const isStepAlreadyDone = get__default.default(guidedTourState, step);
1337
- const [sectionName, stepName] = step.split(".");
1338
- const sectionArray = Object.entries(guidedTourState[sectionName]);
1339
- const currentStepIndex = sectionArray.findIndex(([key]) => key === stepName);
1340
- const previousSteps = sectionArray.slice(0, currentStepIndex);
1341
- const isStepToShow = previousSteps.every(([, sectionValue]) => sectionValue);
1342
- if (isStepAlreadyDone || isSkipped || !isStepToShow) {
1343
- return null;
1344
- }
1345
- }
1346
- window.localStorage.setItem(GUIDED_TOUR_CURRENT_STEP, JSON.stringify(null));
1347
- return dispatch({
1348
- type: "SET_CURRENT_STEP",
1349
- step
1350
- });
1351
- };
1352
- const setGuidedTourVisibility = (value) => {
1353
- dispatch({
1354
- type: "SET_GUIDED_TOUR_VISIBILITY",
1355
- value
1356
- });
1357
- };
1358
- const setStepState = (currentStep2, value) => {
1359
- addCompletedStep(currentStep2);
1360
- dispatch({
1361
- type: "SET_STEP_STATE",
1362
- currentStep: currentStep2,
1363
- value
1364
- });
1365
- };
1366
- const startSection = (sectionName) => {
1367
- const sectionSteps = guidedTourState[sectionName];
1368
- if (sectionSteps) {
1369
- const guidedTourArray = Object.entries(guidedTourState);
1370
- const currentSectionIndex = guidedTourArray.findIndex(([key]) => key === sectionName);
1371
- const previousSections = guidedTourArray.slice(0, currentSectionIndex);
1372
- const isSectionToShow = previousSections.every(
1373
- ([, sectionValue]) => Object.values(sectionValue).every(Boolean)
1374
- );
1375
- const [firstStep] = Object.keys(sectionSteps);
1376
- const isFirstStepDone = sectionSteps[firstStep];
1377
- if (isSectionToShow && !currentStep && !isFirstStepDone) {
1378
- setCurrentStep(`${sectionName}.${firstStep}`);
1379
- }
1380
- }
1381
- };
1382
- const setSkipped = (value) => {
1383
- window.localStorage.setItem(GUIDED_TOUR_SKIPPED, JSON.stringify(value));
1384
- dispatch({
1385
- type: "SET_SKIPPED",
1386
- value
1387
- });
1388
- };
1389
- return /* @__PURE__ */ jsxRuntime.jsx(
1390
- GuidedTourProviderImpl,
1391
- {
1392
- guidedTourState,
1393
- currentStep,
1394
- setCurrentStep,
1395
- setGuidedTourVisibility,
1396
- setSkipped,
1397
- setStepState,
1398
- startSection,
1399
- isGuidedTourVisible,
1400
- isSkipped,
1401
- children
1402
- }
1403
- );
1404
- };
1405
- const initialState$2 = {
1406
- currentStep: null,
1407
- guidedTourState: {
1408
- contentTypeBuilder: {
1409
- create: false,
1410
- success: false
1411
- },
1412
- contentManager: {
1413
- create: false,
1414
- success: false
1415
- },
1416
- apiTokens: {
1417
- create: false,
1418
- success: false
1419
- },
1420
- transferTokens: {
1421
- create: false,
1422
- success: false
1423
- }
1424
- },
1425
- isGuidedTourVisible: false,
1426
- isSkipped: false
1427
- };
1428
- const reducer$4 = (state = initialState$2, action) => immer.produce(state, (draftState) => {
1429
- switch (action.type) {
1430
- case "SET_CURRENT_STEP": {
1431
- draftState.currentStep = action.step;
1432
- break;
1433
- }
1434
- case "SET_STEP_STATE": {
1435
- const [section, step] = action.currentStep.split(".");
1436
- draftState.guidedTourState[section][step] = action.value;
1437
- break;
1438
- }
1439
- case "SET_SKIPPED": {
1440
- draftState.isSkipped = action.value;
1441
- break;
1442
- }
1443
- case "SET_GUIDED_TOUR_VISIBILITY": {
1444
- draftState.isGuidedTourVisible = action.value;
1445
- break;
1446
- }
1447
- default: {
1448
- return draftState;
1449
- }
1450
- }
1451
- });
1452
- const initialiseState = (initialState2) => {
1453
- const copyInitialState = { ...initialState2 };
1454
- const guidedTourLocaleStorage = JSON.parse(
1455
- window.localStorage.getItem(GUIDED_TOUR_COMPLETED_STEPS) ?? "[]"
1456
- );
1457
- const currentStepLocaleStorage = JSON.parse(
1458
- window.localStorage.getItem(GUIDED_TOUR_CURRENT_STEP) ?? "null"
1459
- );
1460
- const skippedLocaleStorage = JSON.parse(
1461
- window.localStorage.getItem(GUIDED_TOUR_SKIPPED) ?? "false"
1462
- );
1463
- if (Array.isArray(guidedTourLocaleStorage)) {
1464
- guidedTourLocaleStorage.forEach((step) => {
1465
- const [sectionName, stepName] = step.split(".");
1466
- set__default.default(copyInitialState, ["guidedTourState", sectionName, stepName], true);
1467
- });
1468
- }
1469
- if (currentStepLocaleStorage) {
1470
- const [sectionName, stepName] = currentStepLocaleStorage.split(".");
1471
- set__default.default(copyInitialState, ["guidedTourState", sectionName, stepName], true);
1472
- addCompletedStep(currentStepLocaleStorage);
1473
- window.localStorage.setItem(GUIDED_TOUR_CURRENT_STEP, JSON.stringify(null));
1474
- }
1475
- if (skippedLocaleStorage !== null) {
1476
- set__default.default(copyInitialState, "isSkipped", skippedLocaleStorage);
1477
- }
1478
- return copyInitialState;
1479
- };
1480
- const addCompletedStep = (completedStep) => {
1481
- const currentSteps = JSON.parse(window.localStorage.getItem(GUIDED_TOUR_COMPLETED_STEPS) ?? "[]");
1482
- if (!Array.isArray(currentSteps)) {
1483
- return;
1484
- }
1485
- const isAlreadyStored = currentSteps.includes(completedStep);
1486
- if (isAlreadyStored) {
1487
- return;
1488
- }
1489
- window.localStorage.setItem(
1490
- GUIDED_TOUR_COMPLETED_STEPS,
1491
- JSON.stringify([...currentSteps, completedStep])
1492
- );
1493
- };
1494
-
1495
- const LanguageProvider = ({ children, messages }) => {
1496
- const locale = useTypedSelector((state) => state.admin_app.language.locale);
1497
- const appMessages = defaultsDeep__default.default(messages[locale], messages.en);
1498
- return /* @__PURE__ */ jsxRuntime.jsx(reactIntl.IntlProvider, { locale, defaultLocale: "en", messages: appMessages, textComponent: "span", children });
1499
- };
1500
-
1501
- const Theme = ({ children, themes }) => {
1502
- const { currentTheme } = useTypedSelector((state) => state.admin_app.theme);
1503
- const [systemTheme, setSystemTheme] = React__namespace.useState();
1504
- const { locale } = reactIntl.useIntl();
1505
- const dispatch = reactRedux.useDispatch();
1506
- React__namespace.useEffect(() => {
1507
- const themeWatcher = window.matchMedia("(prefers-color-scheme: dark)");
1508
- setSystemTheme(themeWatcher.matches ? "dark" : "light");
1509
- const listener = (event) => {
1510
- setSystemTheme(event.matches ? "dark" : "light");
1511
- };
1512
- themeWatcher.addEventListener("change", listener);
1513
- return () => {
1514
- themeWatcher.removeEventListener("change", listener);
1515
- };
1516
- }, []);
1517
- React__namespace.useEffect(() => {
1518
- dispatch(setAvailableThemes(Object.keys(themes)));
1519
- }, [dispatch, themes]);
1520
- const computedThemeName = currentTheme === "system" ? systemTheme : currentTheme;
1521
- return /* @__PURE__ */ jsxRuntime.jsxs(
1522
- designSystem.DesignSystemProvider,
1523
- {
1524
- locale,
1525
- theme: themes?.[computedThemeName || "light"],
1526
- children: [
1527
- children,
1528
- /* @__PURE__ */ jsxRuntime.jsx(GlobalStyle, {})
1529
- ]
1530
- }
1531
- );
1532
- };
1533
- const GlobalStyle = styled.createGlobalStyle`
1534
- body {
1535
- background: ${({ theme }) => theme.colors.neutral100};
1536
- }
1537
- `;
1538
-
1539
- const ADMIN_PERMISSIONS_CE = {
1540
- contentManager: {
1541
- main: [],
1542
- collectionTypesConfigurations: [
1543
- {
1544
- action: "plugin::content-manager.collection-types.configure-view",
1545
- subject: null
1546
- }
1547
- ],
1548
- componentsConfigurations: [
1549
- {
1550
- action: "plugin::content-manager.components.configure-layout",
1551
- subject: null
1552
- }
1553
- ],
1554
- singleTypesConfigurations: [
1555
- {
1556
- action: "plugin::content-manager.single-types.configure-view",
1557
- subject: null
1558
- }
1559
- ]
1560
- },
1561
- marketplace: {
1562
- main: [{ action: "admin::marketplace.read", subject: null }],
1563
- read: [{ action: "admin::marketplace.read", subject: null }]
1564
- },
1565
- settings: {
1566
- roles: {
1567
- main: [
1568
- { action: "admin::roles.create", subject: null },
1569
- { action: "admin::roles.update", subject: null },
1570
- { action: "admin::roles.read", subject: null },
1571
- { action: "admin::roles.delete", subject: null }
1572
- ],
1573
- create: [{ action: "admin::roles.create", subject: null }],
1574
- delete: [{ action: "admin::roles.delete", subject: null }],
1575
- read: [{ action: "admin::roles.read", subject: null }],
1576
- update: [{ action: "admin::roles.update", subject: null }]
1577
- },
1578
- users: {
1579
- main: [
1580
- { action: "admin::users.create", subject: null },
1581
- { action: "admin::users.read", subject: null },
1582
- { action: "admin::users.update", subject: null },
1583
- { action: "admin::users.delete", subject: null }
1584
- ],
1585
- create: [{ action: "admin::users.create", subject: null }],
1586
- delete: [{ action: "admin::users.delete", subject: null }],
1587
- read: [{ action: "admin::users.read", subject: null }],
1588
- update: [{ action: "admin::users.update", subject: null }]
1589
- },
1590
- webhooks: {
1591
- main: [
1592
- { action: "admin::webhooks.create", subject: null },
1593
- { action: "admin::webhooks.read", subject: null },
1594
- { action: "admin::webhooks.update", subject: null },
1595
- { action: "admin::webhooks.delete", subject: null }
1596
- ],
1597
- create: [{ action: "admin::webhooks.create", subject: null }],
1598
- delete: [{ action: "admin::webhooks.delete", subject: null }],
1599
- read: [
1600
- { action: "admin::webhooks.read", subject: null },
1601
- // NOTE: We need to check with the API
1602
- { action: "admin::webhooks.update", subject: null },
1603
- { action: "admin::webhooks.delete", subject: null }
1604
- ],
1605
- update: [{ action: "admin::webhooks.update", subject: null }]
1606
- },
1607
- "api-tokens": {
1608
- main: [{ action: "admin::api-tokens.access", subject: null }],
1609
- create: [{ action: "admin::api-tokens.create", subject: null }],
1610
- delete: [{ action: "admin::api-tokens.delete", subject: null }],
1611
- read: [{ action: "admin::api-tokens.read", subject: null }],
1612
- update: [{ action: "admin::api-tokens.update", subject: null }],
1613
- regenerate: [{ action: "admin::api-tokens.regenerate", subject: null }]
1614
- },
1615
- "transfer-tokens": {
1616
- main: [{ action: "admin::transfer.tokens.access", subject: null }],
1617
- create: [{ action: "admin::transfer.tokens.create", subject: null }],
1618
- delete: [{ action: "admin::transfer.tokens.delete", subject: null }],
1619
- read: [{ action: "admin::transfer.tokens.read", subject: null }],
1620
- update: [{ action: "admin::transfer.tokens.update", subject: null }],
1621
- regenerate: [{ action: "admin::transfer.tokens.regenerate", subject: null }]
1622
- },
1623
- "project-settings": {
1624
- read: [{ action: "admin::project-settings.read", subject: null }],
1625
- update: [{ action: "admin::project-settings.update", subject: null }]
1626
- }
1627
- }
1628
- };
1629
- const HOOKS = {
1630
- /**
1631
- * Hook that allows to mutate the displayed headers of the list view table
1632
- * @constant
1633
- * @type {string}
1634
- */
1635
- INJECT_COLUMN_IN_TABLE: "Admin/CM/pages/ListView/inject-column-in-table",
1636
- /**
1637
- * Hook that allows to mutate the CM's collection types links pre-set filters
1638
- * @constant
1639
- * @type {string}
1640
- */
1641
- MUTATE_COLLECTION_TYPES_LINKS: "Admin/CM/pages/App/mutate-collection-types-links",
1642
- /**
1643
- * Hook that allows to mutate the CM's edit view layout
1644
- * @constant
1645
- * @type {string}
1646
- */
1647
- MUTATE_EDIT_VIEW_LAYOUT: "Admin/CM/pages/EditView/mutate-edit-view-layout",
1648
- /**
1649
- * Hook that allows to mutate the CM's single types links pre-set filters
1650
- * @constant
1651
- * @type {string}
1652
- */
1653
- MUTATE_SINGLE_TYPES_LINKS: "Admin/CM/pages/App/mutate-single-types-links"
1654
- };
1655
- const SETTINGS_LINKS_CE = () => ({
1656
- global: [
1657
- {
1658
- intlLabel: { id: "Settings.application.title", defaultMessage: "Overview" },
1659
- to: "/settings/application-infos",
1660
- id: "000-application-infos"
1661
- },
1662
- {
1663
- intlLabel: { id: "Settings.webhooks.title", defaultMessage: "Webhooks" },
1664
- to: "/settings/webhooks",
1665
- id: "webhooks"
1666
- },
1667
- {
1668
- intlLabel: { id: "Settings.apiTokens.title", defaultMessage: "API Tokens" },
1669
- to: "/settings/api-tokens?sort=name:ASC",
1670
- id: "api-tokens"
1671
- },
1672
- {
1673
- intlLabel: { id: "Settings.transferTokens.title", defaultMessage: "Transfer Tokens" },
1674
- to: "/settings/transfer-tokens?sort=name:ASC",
1675
- id: "transfer-tokens"
1676
- },
1677
- // If the Enterprise feature is not enabled and if the config doesn't disable it, we promote the Enterprise feature by displaying them in the settings menu.
1678
- // Disable this by adding "promoteEE: false" to your `./config/admin.js` file
1679
- ...!window.strapi.features.isEnabled(window.strapi.features.SSO) && window.strapi?.flags?.promoteEE ? [
1680
- {
1681
- intlLabel: { id: "Settings.sso.title", defaultMessage: "Single Sign-On" },
1682
- to: "/settings/purchase-single-sign-on",
1683
- id: "sso",
1684
- lockIcon: true
1685
- }
1686
- ] : [],
1687
- ...!window.strapi.features.isEnabled(window.strapi.features.REVIEW_WORKFLOWS) && window.strapi?.flags?.promoteEE ? [
1688
- {
1689
- intlLabel: {
1690
- id: "Settings.review-workflows.page.title",
1691
- defaultMessage: "Review Workflows"
1692
- },
1693
- to: "/settings/purchase-review-workflows",
1694
- id: "review-workflows",
1695
- lockIcon: true
1696
- }
1697
- ] : []
1698
- ],
1699
- admin: [
1700
- {
1701
- intlLabel: { id: "global.roles", defaultMessage: "Roles" },
1702
- to: "/settings/roles",
1703
- id: "roles"
1704
- },
1705
- {
1706
- intlLabel: { id: "global.users", defaultMessage: "Users" },
1707
- // Init the search params directly
1708
- to: "/settings/users?pageSize=10&page=1&sort=firstname",
1709
- id: "users"
1710
- },
1711
- ...!window.strapi.features.isEnabled(window.strapi.features.AUDIT_LOGS) && window.strapi?.flags?.promoteEE ? [
1712
- {
1713
- intlLabel: { id: "global.auditLogs", defaultMessage: "Audit Logs" },
1714
- to: "/settings/purchase-audit-logs",
1715
- id: "auditLogs",
1716
- lockIcon: true
1717
- }
1718
- ] : []
1719
- ]
1720
- });
1721
-
1722
- const SINGLE_TYPES = "single-types";
1723
- const COLLECTION_TYPES = "collection-types";
1724
-
1725
- const routes = [
1726
- {
1727
- path: ":collectionType/:slug/:id/history",
1728
- lazy: async () => {
1729
- const { ProtectedHistoryPage } = await Promise.resolve().then(() => require('./History-UVk6YZaL.js'));
1730
- return {
1731
- Component: ProtectedHistoryPage
1732
- };
1733
- }
1734
- },
1735
- {
1736
- path: ":collectionType/:slug/history",
1737
- lazy: async () => {
1738
- const { ProtectedHistoryPage } = await Promise.resolve().then(() => require('./History-UVk6YZaL.js'));
1739
- return {
1740
- Component: ProtectedHistoryPage
1741
- };
1742
- }
1743
- }
1744
- ];
1745
- function useIsHistoryRoute() {
1746
- const location = reactRouterDom.useLocation();
1747
- const historyRoutes = routes.map((route) => ({ path: `content-manager/${route.path}` }));
1748
- const matches = reactRouterDom.matchRoutes(historyRoutes, location);
1749
- return Boolean(matches);
1750
- }
1751
-
1752
- const useQueryParams = (initialParams) => {
1753
- const { search } = reactRouterDom.useLocation();
1754
- const navigate = reactRouterDom.useNavigate();
1755
- const query = React.useMemo(() => {
1756
- const searchQuery = search.startsWith("?") ? search.slice(1) : search;
1757
- if (!search && initialParams) {
1758
- return initialParams;
1759
- }
1760
- return { ...initialParams, ...qs.parse(searchQuery) };
1761
- }, [search, initialParams]);
1762
- const setQuery = React.useCallback(
1763
- (nextParams, method = "push", replace = false) => {
1764
- let nextQuery = { ...query };
1765
- if (method === "remove") {
1766
- Object.keys(nextParams).forEach((key) => {
1767
- if (Object.prototype.hasOwnProperty.call(nextQuery, key)) {
1768
- delete nextQuery[key];
1769
- }
1770
- });
1771
- } else {
1772
- nextQuery = { ...query, ...nextParams };
1773
- }
1774
- navigate({ search: qs.stringify(nextQuery, { encode: false }) }, { replace });
1775
- },
1776
- [navigate, query]
1777
- );
1778
- return [{ query, rawQuery: search }, setQuery];
1779
- };
1780
-
1781
- const extractValuesFromYupError = (errorType, errorParams) => {
1782
- if (!errorType || !errorParams) {
1783
- return {};
1784
- }
1785
- return {
1786
- [errorType]: errorParams[errorType]
1787
- };
1788
- };
1789
- const getYupInnerErrors = (error) => (error?.inner || []).reduce((acc, currentError) => {
1790
- if (currentError.path) {
1791
- acc[currentError.path.split("[").join(".").split("]").join("")] = {
1792
- id: currentError.message,
1793
- defaultMessage: currentError.message,
1794
- values: extractValuesFromYupError(currentError?.type, currentError?.params)
1795
- };
1796
- }
1797
- return acc;
1798
- }, {});
1799
-
1800
- const contentManagerApi = react.createApi({
1801
- reducerPath: "contentManagerApi",
1802
- baseQuery: axiosBaseQuery(),
1803
- tagTypes: [
1804
- "ComponentConfiguration",
1805
- "ContentTypesConfiguration",
1806
- "ContentTypeSettings",
1807
- "Document",
1808
- "InitialData",
1809
- "HistoryVersion",
1810
- "Relations"
1811
- ],
1812
- endpoints: () => ({})
1813
- });
1814
-
1815
- const documentApi = contentManagerApi.injectEndpoints({
1816
- endpoints: (builder) => ({
1817
- autoCloneDocument: builder.mutation({
1818
- query: ({ model, sourceId, query }) => ({
1819
- url: `/content-manager/collection-types/${model}/auto-clone/${sourceId}`,
1820
- method: "POST",
1821
- config: {
1822
- params: query
1823
- }
1824
- }),
1825
- invalidatesTags: (_result, _error, { model }) => [{ type: "Document", id: `${model}_LIST` }]
1826
- }),
1827
- cloneDocument: builder.mutation({
1828
- query: ({ model, sourceId, data, params }) => ({
1829
- url: `/content-manager/collection-types/${model}/clone/${sourceId}`,
1830
- method: "POST",
1831
- data,
1832
- config: {
1833
- params
1834
- }
1835
- }),
1836
- invalidatesTags: (_result, _error, { model }) => [{ type: "Document", id: `${model}_LIST` }]
1837
- }),
1838
- /**
1839
- * Creates a new collection-type document. This should ONLY be used for collection-types.
1840
- * single-types should always be using `updateDocument` since they always exist.
1841
- */
1842
- createDocument: builder.mutation({
1843
- query: ({ model, data, params }) => ({
1844
- url: `/content-manager/collection-types/${model}`,
1845
- method: "POST",
1846
- data,
1847
- config: {
1848
- params
1849
- }
1850
- }),
1851
- invalidatesTags: (result, _error, { model }) => [
1852
- { type: "Document", id: `${model}_LIST` },
1853
- "Relations"
1854
- ]
1855
- }),
1856
- deleteDocument: builder.mutation({
1857
- query: ({ collectionType, model, documentId, params }) => ({
1858
- url: `/content-manager/${collectionType}/${model}${collectionType !== SINGLE_TYPES && documentId ? `/${documentId}` : ""}`,
1859
- method: "DELETE",
1860
- config: {
1861
- params
1862
- }
1863
- }),
1864
- invalidatesTags: (_result, _error, { collectionType, model }) => [
1865
- { type: "Document", id: collectionType !== SINGLE_TYPES ? `${model}_LIST` : model }
1866
- ]
1867
- }),
1868
- deleteManyDocuments: builder.mutation({
1869
- query: ({ model, ...body }) => ({
1870
- url: `/content-manager/collection-types/${model}/actions/bulkDelete`,
1871
- method: "POST",
1872
- data: body
1873
- }),
1874
- invalidatesTags: (_res, _error, { model, documentIds }) => documentIds.map((id) => ({ type: "Document", id: `${model}_${id}` }))
1875
- }),
1876
- discardDocument: builder.mutation({
1877
- query: ({ collectionType, model, documentId, params }) => ({
1878
- url: documentId ? `/content-manager/${collectionType}/${model}/${documentId}/actions/discard` : `/content-manager/${collectionType}/${model}/actions/discard`,
1879
- method: "POST",
1880
- config: {
1881
- params
1882
- }
1883
- }),
1884
- invalidatesTags: (_result, _error, { collectionType, model, documentId }) => {
1885
- return [
1886
- {
1887
- type: "Document",
1888
- id: collectionType !== SINGLE_TYPES ? `${model}_${documentId}` : model
1889
- },
1890
- { type: "Document", id: `${model}_LIST` },
1891
- "Relations"
1892
- ];
1893
- }
1894
- }),
1895
- /**
1896
- * Gets all documents of a collection type or single type.
1897
- * By passing different params you can get different results e.g. only published documents or 'es' documents.
1898
- */
1899
- getAllDocuments: builder.query({
1900
- query: ({ model, params }) => ({
1901
- url: `/content-manager/collection-types/${model}`,
1902
- method: "GET",
1903
- config: {
1904
- params
1905
- }
1906
- }),
1907
- providesTags: (result, _error, arg) => {
1908
- return [
1909
- { type: "Document", id: `${arg.model}_LIST` },
1910
- ...result?.results.map(({ documentId }) => ({
1911
- type: "Document",
1912
- id: `${arg.model}_${documentId}`
1913
- })) ?? []
1914
- ];
1915
- }
1916
- }),
1917
- getDraftRelationCount: builder.query({
1918
- query: ({ collectionType, model, documentId, params }) => ({
1919
- url: documentId ? `/content-manager/${collectionType}/${model}/${documentId}/actions/countDraftRelations` : `/content-manager/${collectionType}/${model}/actions/countDraftRelations`,
1920
- method: "GET",
1921
- config: {
1922
- params
1923
- }
1924
- })
1925
- }),
1926
- getDocument: builder.query({
1927
- // @ts-expect-error – TODO: fix ts error where data unknown doesn't work with response via an assertion?
1928
- queryFn: async ({ collectionType, model, documentId, params }, _api, _extraOpts, baseQuery) => {
1929
- const res = await baseQuery({
1930
- url: `/content-manager/${collectionType}/${model}${documentId ? `/${documentId}` : ""}`,
1931
- method: "GET",
1932
- config: {
1933
- params
1934
- }
1935
- });
1936
- if (res.error && res.error.name === "NotFoundError" && collectionType === SINGLE_TYPES) {
1937
- return { data: { document: void 0 }, error: void 0 };
1938
- }
1939
- return res;
1940
- },
1941
- providesTags: (result, _error, { collectionType, model, documentId }) => {
1942
- return [
1943
- // we prefer the result's id because we don't fetch single-types with an ID.
1944
- {
1945
- type: "Document",
1946
- id: collectionType !== SINGLE_TYPES ? `${model}_${result && "documentId" in result ? result.documentId : documentId}` : model
1947
- }
1948
- ];
1949
- }
1950
- }),
1951
- getManyDraftRelationCount: builder.query({
1952
- query: ({ model, ...params }) => ({
1953
- url: `/content-manager/collection-types/${model}/actions/countManyEntriesDraftRelations`,
1954
- method: "GET",
1955
- config: {
1956
- params
1957
- }
1958
- }),
1959
- transformResponse: (response) => response.data
1960
- }),
1961
- /**
1962
- * This endpoint will either create or update documents at the same time as publishing.
1963
- */
1964
- publishDocument: builder.mutation({
1965
- query: ({ collectionType, model, documentId, params, data }) => ({
1966
- url: documentId ? `/content-manager/${collectionType}/${model}/${documentId}/actions/publish` : `/content-manager/${collectionType}/${model}/actions/publish`,
1967
- method: "POST",
1968
- data,
1969
- config: {
1970
- params
1971
- }
1972
- }),
1973
- invalidatesTags: (_result, _error, { collectionType, model, documentId }) => {
1974
- return [
1975
- {
1976
- type: "Document",
1977
- id: collectionType !== SINGLE_TYPES ? `${model}_${documentId}` : model
1978
- },
1979
- { type: "Document", id: `${model}_LIST` },
1980
- "Relations"
1981
- ];
1982
- }
1983
- }),
1984
- publishManyDocuments: builder.mutation({
1985
- query: ({ model, ...body }) => ({
1986
- url: `/content-manager/collection-types/${model}/actions/bulkPublish`,
1987
- method: "POST",
1988
- data: body
1989
- }),
1990
- invalidatesTags: (_res, _error, { model, documentIds }) => documentIds.map((id) => ({ type: "Document", id: `${model}_${id}` }))
1991
- }),
1992
- updateDocument: builder.mutation({
1993
- query: ({ collectionType, model, documentId, data, params }) => ({
1994
- url: `/content-manager/${collectionType}/${model}${documentId ? `/${documentId}` : ""}`,
1995
- method: "PUT",
1996
- data,
1997
- config: {
1998
- params
1999
- }
2000
- }),
2001
- invalidatesTags: (_result, _error, { collectionType, model, documentId }) => {
2002
- return [
2003
- {
2004
- type: "Document",
2005
- id: collectionType !== SINGLE_TYPES ? `${model}_${documentId}` : model
2006
- },
2007
- "Relations"
2008
- ];
2009
- }
2010
- }),
2011
- unpublishDocument: builder.mutation({
2012
- query: ({ collectionType, model, documentId, params, data }) => ({
2013
- url: documentId ? `/content-manager/${collectionType}/${model}/${documentId}/actions/unpublish` : `/content-manager/${collectionType}/${model}/actions/unpublish`,
2014
- method: "POST",
2015
- data,
2016
- config: {
2017
- params
2018
- }
2019
- }),
2020
- invalidatesTags: (_result, _error, { collectionType, model, documentId }) => {
2021
- return [
2022
- {
2023
- type: "Document",
2024
- id: collectionType !== SINGLE_TYPES ? `${model}_${documentId}` : model
2025
- }
2026
- ];
2027
- }
2028
- }),
2029
- unpublishManyDocuments: builder.mutation({
2030
- query: ({ model, ...body }) => ({
2031
- url: `/content-manager/collection-types/${model}/actions/bulkUnpublish`,
2032
- method: "POST",
2033
- data: body
2034
- }),
2035
- invalidatesTags: (_res, _error, { model, documentIds }) => documentIds.map((id) => ({ type: "Document", id: `${model}_${id}` }))
2036
- })
2037
- })
2038
- });
2039
- const {
2040
- useAutoCloneDocumentMutation,
2041
- useCloneDocumentMutation,
2042
- useCreateDocumentMutation,
2043
- useDeleteDocumentMutation,
2044
- useDeleteManyDocumentsMutation,
2045
- useDiscardDocumentMutation,
2046
- useGetAllDocumentsQuery,
2047
- useLazyGetDocumentQuery,
2048
- useGetDocumentQuery,
2049
- useLazyGetDraftRelationCountQuery,
2050
- useGetManyDraftRelationCountQuery,
2051
- usePublishDocumentMutation,
2052
- usePublishManyDocumentsMutation,
2053
- useUpdateDocumentMutation,
2054
- useUnpublishDocumentMutation,
2055
- useUnpublishManyDocumentsMutation
2056
- } = documentApi;
2057
-
2058
- const buildValidParams = (query) => {
2059
- if (!query)
2060
- return query;
2061
- const { plugins: _, ...validQueryParams } = {
2062
- ...query,
2063
- ...Object.values(query?.plugins ?? {}).reduce(
2064
- (acc, current) => Object.assign(acc, current),
2065
- {}
2066
- )
2067
- };
2068
- if ("_q" in validQueryParams) {
2069
- validQueryParams._q = encodeURIComponent(validQueryParams._q);
2070
- }
2071
- return validQueryParams;
2072
- };
2073
-
2074
- const errorsTrads = {
2075
- email: {
2076
- id: "components.Input.error.validation.email",
2077
- defaultMessage: "This is not a valid email."
2078
- },
2079
- json: {
2080
- id: "components.Input.error.validation.json",
2081
- defaultMessage: "This doesn't match the JSON format"
2082
- },
2083
- lowercase: {
2084
- id: "components.Input.error.validation.lowercase",
2085
- defaultMessage: "The value must be a lowercase string"
2086
- },
2087
- max: {
2088
- id: "components.Input.error.validation.max",
2089
- defaultMessage: "The value is too high (max: {max})."
2090
- },
2091
- maxLength: {
2092
- id: "components.Input.error.validation.maxLength",
2093
- defaultMessage: "The value is too long (max: {max})."
2094
- },
2095
- min: {
2096
- id: "components.Input.error.validation.min",
2097
- defaultMessage: "The value is too low (min: {min})."
2098
- },
2099
- minLength: {
2100
- id: "components.Input.error.validation.minLength",
2101
- defaultMessage: "The value is too short (min: {min})."
2102
- },
2103
- regex: {
2104
- id: "components.Input.error.validation.regex",
2105
- defaultMessage: "The value does not match the regex."
2106
- },
2107
- required: {
2108
- id: "components.Input.error.validation.required",
2109
- defaultMessage: "This value is required."
2110
- },
2111
- string: {
2112
- id: "components.Input.error.validation.string",
2113
- defaultMessage: "This is not a valid string."
2114
- },
2115
- unique: {
2116
- id: "components.Input.error.validation.unique",
2117
- defaultMessage: "This value is already used."
2118
- },
2119
- integer: {
2120
- id: "component.Input.error.validation.integer",
2121
- defaultMessage: "The value must be an integer"
2122
- }
2123
- };
2124
-
2125
- const ID = "id";
2126
- const CREATED_BY_ATTRIBUTE_NAME = "createdBy";
2127
- const UPDATED_BY_ATTRIBUTE_NAME = "updatedBy";
2128
- const CREATOR_FIELDS = [CREATED_BY_ATTRIBUTE_NAME, UPDATED_BY_ATTRIBUTE_NAME];
2129
- const PUBLISHED_BY_ATTRIBUTE_NAME = "publishedBy";
2130
- const CREATED_AT_ATTRIBUTE_NAME = "createdAt";
2131
- const UPDATED_AT_ATTRIBUTE_NAME = "updatedAt";
2132
- const PUBLISHED_AT_ATTRIBUTE_NAME = "publishedAt";
2133
- const DOCUMENT_META_FIELDS = [
2134
- ID,
2135
- ...CREATOR_FIELDS,
2136
- PUBLISHED_BY_ATTRIBUTE_NAME,
2137
- CREATED_AT_ATTRIBUTE_NAME,
2138
- UPDATED_AT_ATTRIBUTE_NAME,
2139
- PUBLISHED_AT_ATTRIBUTE_NAME
2140
- ];
2141
- const ATTRIBUTE_TYPES_THAT_CANNOT_BE_MAIN_FIELD = [
2142
- "dynamiczone",
2143
- "json",
2144
- "text",
2145
- "relation",
2146
- "component",
2147
- "boolean",
2148
- "media",
2149
- "password",
2150
- "richtext",
2151
- "timestamp",
2152
- "blocks"
2153
- ];
2154
-
2155
- const createYupSchema = (attributes = {}, components = {}) => {
2156
- const createModelSchema = (attributes2) => yup__namespace.object().shape(
2157
- Object.entries(attributes2).reduce((acc, [name, attribute]) => {
2158
- if (DOCUMENT_META_FIELDS.includes(name)) {
2159
- return acc;
2160
- }
2161
- const validations = [
2162
- addRequiredValidation,
2163
- addMinLengthValidation,
2164
- addMaxLengthValidation,
2165
- addMinValidation,
2166
- addMaxValidation,
2167
- addRegexValidation
2168
- ].map((fn) => fn(attribute));
2169
- const transformSchema = pipe__default.default(...validations);
2170
- switch (attribute.type) {
2171
- case "component": {
2172
- const { attributes: attributes3 } = components[attribute.component];
2173
- if (attribute.repeatable) {
2174
- return {
2175
- ...acc,
2176
- [name]: transformSchema(
2177
- yup__namespace.array().of(createModelSchema(attributes3).nullable(false))
2178
- )
2179
- };
2180
- } else {
2181
- return {
2182
- ...acc,
2183
- [name]: transformSchema(createModelSchema(attributes3))
2184
- };
2185
- }
2186
- }
2187
- case "dynamiczone":
2188
- return {
2189
- ...acc,
2190
- [name]: transformSchema(
2191
- yup__namespace.array().of(
2192
- yup__namespace.lazy(
2193
- (data) => {
2194
- const { attributes: attributes3 } = components[data.__component];
2195
- return yup__namespace.object().shape({
2196
- __component: yup__namespace.string().required().oneOf(Object.keys(components))
2197
- }).nullable(false).concat(createModelSchema(attributes3));
2198
- }
2199
- )
2200
- )
2201
- )
2202
- };
2203
- case "relation":
2204
- return {
2205
- ...acc,
2206
- [name]: transformSchema(
2207
- yup__namespace.array().of(
2208
- yup__namespace.object().shape({
2209
- id: yup__namespace.string().required()
2210
- })
2211
- )
2212
- )
2213
- };
2214
- default:
2215
- return {
2216
- ...acc,
2217
- [name]: transformSchema(createAttributeSchema(attribute))
2218
- };
2219
- }
2220
- }, {})
2221
- ).default(null);
2222
- return createModelSchema(attributes);
2223
- };
2224
- const createAttributeSchema = (attribute) => {
2225
- switch (attribute.type) {
2226
- case "biginteger":
2227
- return yup__namespace.string().matches(/^-?\d*$/);
2228
- case "boolean":
2229
- return yup__namespace.boolean();
2230
- case "blocks":
2231
- return yup__namespace.mixed().test("isBlocks", errorsTrads.json, (value) => {
2232
- if (!value || Array.isArray(value)) {
2233
- return true;
2234
- } else {
2235
- return false;
2236
- }
2237
- });
2238
- case "decimal":
2239
- case "float":
2240
- case "integer":
2241
- return yup__namespace.number();
2242
- case "email":
2243
- return yup__namespace.string().email(errorsTrads.email);
2244
- case "enumeration":
2245
- return yup__namespace.string().oneOf([...attribute.enum, null]);
2246
- case "json":
2247
- return yup__namespace.mixed().test("isJSON", errorsTrads.json, (value) => {
2248
- if (!value || typeof value === "string" && value.length === 0) {
2249
- return true;
2250
- }
2251
- try {
2252
- JSON.parse(value);
2253
- return true;
2254
- } catch (err) {
2255
- return false;
2256
- }
2257
- });
2258
- case "password":
2259
- case "richtext":
2260
- case "string":
2261
- case "text":
2262
- return yup__namespace.string();
2263
- case "uid":
2264
- return yup__namespace.string().matches(/^[A-Za-z0-9-_.~]*$/);
2265
- default:
2266
- return yup__namespace.mixed();
2267
- }
2268
- };
2269
- const addRequiredValidation = (attribute) => (schema) => {
2270
- if (attribute.required) {
2271
- return schema.required({
2272
- id: errorsTrads.required.id,
2273
- defaultMessage: "This field is required."
2274
- });
2275
- }
2276
- return schema.nullable();
2277
- };
2278
- const addMinLengthValidation = (attribute) => (schema) => {
2279
- if ("minLength" in attribute && attribute.minLength && Number.isInteger(attribute.minLength) && "min" in schema) {
2280
- return schema.min(attribute.minLength, {
2281
- ...errorsTrads.minLength,
2282
- values: {
2283
- min: attribute.minLength
2284
- }
2285
- });
2286
- }
2287
- return schema;
2288
- };
2289
- const addMaxLengthValidation = (attribute) => (schema) => {
2290
- if ("maxLength" in attribute && attribute.maxLength && Number.isInteger(attribute.maxLength) && "max" in schema) {
2291
- return schema.max(attribute.maxLength, {
2292
- ...errorsTrads.maxLength,
2293
- values: {
2294
- max: attribute.maxLength
2295
- }
2296
- });
2297
- }
2298
- return schema;
2299
- };
2300
- const addMinValidation = (attribute) => (schema) => {
2301
- if ("min" in attribute) {
2302
- const min = toInteger(attribute.min);
2303
- if ("min" in schema && min) {
2304
- return schema.min(min, {
2305
- ...errorsTrads.min,
2306
- values: {
2307
- min
2308
- }
2309
- });
2310
- }
2311
- }
2312
- return schema;
2313
- };
2314
- const addMaxValidation = (attribute) => (schema) => {
2315
- if ("max" in attribute) {
2316
- const max = toInteger(attribute.max);
2317
- if ("max" in schema && max) {
2318
- return schema.max(max, {
2319
- ...errorsTrads.max,
2320
- values: {
2321
- max
2322
- }
2323
- });
2324
- }
2325
- }
2326
- return schema;
2327
- };
2328
- const toInteger = (val) => {
2329
- if (typeof val === "number" || val === void 0) {
2330
- return val;
2331
- } else {
2332
- const num = Number(val);
2333
- return isNaN(num) ? void 0 : num;
2334
- }
2335
- };
2336
- const addRegexValidation = (attribute) => (schema) => {
2337
- if ("regex" in attribute && attribute.regex && "matches" in schema) {
2338
- return schema.matches(new RegExp(attribute.regex), {
2339
- message: {
2340
- id: errorsTrads.regex.id,
2341
- defaultMessage: "The value does not match the defined pattern."
2342
- },
2343
- excludeEmptyString: !attribute.required
2344
- });
2345
- }
2346
- return schema;
2347
- };
2348
-
2349
- const initApi = contentManagerApi.injectEndpoints({
2350
- endpoints: (builder) => ({
2351
- getInitialData: builder.query({
2352
- query: () => "/content-manager/init",
2353
- transformResponse: (response) => response.data,
2354
- providesTags: ["InitialData"]
2355
- })
2356
- })
2357
- });
2358
- const { useGetInitialDataQuery } = initApi;
2359
-
2360
- const useContentTypeSchema = (model) => {
2361
- const { toggleNotification } = useNotification();
2362
- const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
2363
- const { components, contentType, contentTypes, error, isLoading, isFetching } = useGetInitialDataQuery(void 0, {
2364
- selectFromResult: (res) => {
2365
- const contentType2 = res.data?.contentTypes.find((ct) => ct.uid === model);
2366
- const componentsByKey = res.data?.components.reduce(
2367
- (acc, component) => {
2368
- acc[component.uid] = component;
2369
- return acc;
2370
- },
2371
- {}
2372
- );
2373
- const components2 = extractContentTypeComponents(contentType2?.attributes, componentsByKey);
2374
- return {
2375
- isLoading: res.isLoading,
2376
- isFetching: res.isFetching,
2377
- error: res.error,
2378
- components: Object.keys(components2).length === 0 ? void 0 : components2,
2379
- contentType: contentType2,
2380
- contentTypes: res.data?.contentTypes ?? []
2381
- };
2382
- }
2383
- });
2384
- React__namespace.useEffect(() => {
2385
- if (error) {
2386
- toggleNotification({
2387
- type: "danger",
2388
- message: formatAPIError(error)
2389
- });
2390
- }
2391
- }, [toggleNotification, error, formatAPIError]);
2392
- return {
2393
- // This must be memoized to avoid inifiinite re-renders where the empty object is different everytime.
2394
- components: React__namespace.useMemo(() => components ?? {}, [components]),
2395
- schema: contentType,
2396
- schemas: contentTypes,
2397
- isLoading: isLoading || isFetching
2398
- };
2399
- };
2400
- const extractContentTypeComponents = (attributes = {}, allComponents = {}) => {
2401
- const getComponents = (attributes2) => {
2402
- return attributes2.reduce((acc, attribute) => {
2403
- if (attribute.type === "component") {
2404
- const componentAttributes = Object.values(
2405
- allComponents[attribute.component]?.attributes ?? {}
2406
- );
2407
- acc.push(attribute.component, ...getComponents(componentAttributes));
2408
- } else if (attribute.type === "dynamiczone") {
2409
- acc.push(
2410
- ...attribute.components,
2411
- ...attribute.components.flatMap((componentUid) => {
2412
- const componentAttributes = Object.values(
2413
- allComponents[componentUid]?.attributes ?? {}
2414
- );
2415
- return getComponents(componentAttributes);
2416
- })
2417
- );
2418
- }
2419
- return acc;
2420
- }, []);
2421
- };
2422
- const componentUids = getComponents(Object.values(attributes));
2423
- const uniqueComponentUids = [...new Set(componentUids)];
2424
- const componentsByKey = uniqueComponentUids.reduce((acc, uid) => {
2425
- acc[uid] = allComponents[uid];
2426
- return acc;
2427
- }, {});
2428
- return componentsByKey;
2429
- };
2430
-
2431
- const useDocument = (args, opts) => {
2432
- const { toggleNotification } = useNotification();
2433
- const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
2434
- const {
2435
- currentData: data,
2436
- isLoading: isLoadingDocument,
2437
- isFetching: isFetchingDocument,
2438
- error
2439
- } = useGetDocumentQuery(args, opts);
2440
- const { components, schema, isLoading: isLoadingSchema } = useContentTypeSchema(args.model);
2441
- React__namespace.useEffect(() => {
2442
- if (error) {
2443
- toggleNotification({
2444
- type: "danger",
2445
- message: formatAPIError(error)
2446
- });
2447
- }
2448
- }, [toggleNotification, error, formatAPIError, args.collectionType]);
2449
- const validationSchema = React__namespace.useMemo(() => {
2450
- if (!schema) {
2451
- return null;
2452
- }
2453
- return createYupSchema(schema.attributes, components);
2454
- }, [schema, components]);
2455
- const validate = React__namespace.useCallback(
2456
- (document) => {
2457
- if (!validationSchema) {
2458
- throw new Error(
2459
- "There is no validation schema generated, this is likely due to the schema not being loaded yet."
2460
- );
2461
- }
2462
- try {
2463
- validationSchema.validateSync(document, { abortEarly: false, strict: true });
2464
- return null;
2465
- } catch (error2) {
2466
- if (error2 instanceof yup.ValidationError) {
2467
- return getYupInnerErrors(error2);
2468
- }
2469
- throw error2;
2470
- }
2471
- },
2472
- [validationSchema]
2473
- );
2474
- const isLoading = isLoadingDocument || isFetchingDocument || isLoadingSchema;
2475
- return {
2476
- components,
2477
- document: data?.data,
2478
- meta: data?.meta,
2479
- isLoading,
2480
- schema,
2481
- validate
2482
- };
2483
- };
2484
- const useDoc = () => {
2485
- const { id, slug, collectionType, origin } = reactRouterDom.useParams();
2486
- const [{ query }] = useQueryParams();
2487
- const params = React__namespace.useMemo(() => buildValidParams(query), [query]);
2488
- if (!collectionType) {
2489
- throw new Error("Could not find collectionType in url params");
2490
- }
2491
- if (!slug) {
2492
- throw new Error("Could not find model in url params");
2493
- }
2494
- return {
2495
- collectionType,
2496
- model: slug,
2497
- id: origin || id === "create" ? void 0 : id,
2498
- ...useDocument(
2499
- { documentId: origin || id, model: slug, collectionType, params },
2500
- {
2501
- skip: id === "create" || !origin && !id && collectionType !== SINGLE_TYPES
2502
- }
2503
- )
2504
- };
2505
- };
2506
-
2507
- function getIn(obj, key, def, pathStartIndex = 0) {
2508
- const path = toPath__default.default(key);
2509
- while (obj && pathStartIndex < path.length) {
2510
- obj = obj[path[pathStartIndex++]];
2511
- }
2512
- if (pathStartIndex !== path.length && !obj) {
2513
- return def;
2514
- }
2515
- return obj === void 0 ? def : obj;
2516
- }
2517
- const isObject = (obj) => obj !== null && typeof obj === "object" && !Array.isArray(obj);
2518
- const isInteger = (obj) => String(Math.floor(Number(obj))) === obj;
2519
- function setIn(obj, path, value) {
2520
- const res = clone__default.default(obj);
2521
- let resVal = res;
2522
- let i = 0;
2523
- const pathArray = toPath__default.default(path);
2524
- for (; i < pathArray.length - 1; i++) {
2525
- const currentPath = pathArray[i];
2526
- const currentObj = getIn(obj, pathArray.slice(0, i + 1));
2527
- if (currentObj && (isObject(currentObj) || Array.isArray(currentObj))) {
2528
- resVal = resVal[currentPath] = clone__default.default(currentObj);
2529
- } else {
2530
- const nextPath = pathArray[i + 1];
2531
- resVal = resVal[currentPath] = isInteger(nextPath) && Number(nextPath) >= 0 ? [] : {};
2532
- }
2533
- }
2534
- if ((i === 0 ? obj : resVal)[pathArray[i]] === value) {
2535
- return obj;
2536
- }
2537
- if (value === void 0) {
2538
- delete resVal[pathArray[i]];
2539
- } else {
2540
- resVal[pathArray[i]] = value;
2541
- }
2542
- if (i === 0 && value === void 0) {
2543
- delete res[pathArray[i]];
2544
- }
2545
- return res;
2546
- }
2547
-
2548
- const ERR_MSG = "The Form Component has not been initialised, ensure you are using this hook within a Form component";
2549
- const [FormProvider, useForm] = createContext("Form", {
2550
- disabled: false,
2551
- errors: {},
2552
- initialValues: {},
2553
- isSubmitting: false,
2554
- modified: false,
2555
- addFieldRow: () => {
2556
- throw new Error(ERR_MSG);
2557
- },
2558
- moveFieldRow: () => {
2559
- throw new Error(ERR_MSG);
2560
- },
2561
- onChange: () => {
2562
- throw new Error(ERR_MSG);
2563
- },
2564
- removeFieldRow: () => {
2565
- throw new Error(ERR_MSG);
2566
- },
2567
- resetForm: () => {
2568
- throw new Error(ERR_MSG);
2569
- },
2570
- setErrors: () => {
2571
- throw new Error(ERR_MSG);
2572
- },
2573
- setValues: () => {
2574
- throw new Error(ERR_MSG);
2575
- },
2576
- setSubmitting: () => {
2577
- throw new Error(ERR_MSG);
2578
- },
2579
- validate: async () => {
2580
- throw new Error(ERR_MSG);
2581
- },
2582
- values: {}
2583
- });
2584
- const Form = React__namespace.forwardRef(
2585
- ({ disabled = false, method, onSubmit, ...props }, ref) => {
2586
- const formRef = React__namespace.useRef(null);
2587
- const initialValues = React__namespace.useRef(props.initialValues ?? {});
2588
- const [state, dispatch] = React__namespace.useReducer(reducer$3, {
2589
- errors: {},
2590
- isSubmitting: false,
2591
- values: props.initialValues ?? {}
2592
- });
2593
- React__namespace.useEffect(() => {
2594
- if (!isEqual__default.default(initialValues.current, props.initialValues)) {
2595
- initialValues.current = props.initialValues ?? {};
2596
- dispatch({
2597
- type: "SET_INITIAL_VALUES",
2598
- payload: props.initialValues ?? {}
2599
- });
2600
- }
2601
- }, [props.initialValues]);
2602
- const setErrors = React__namespace.useCallback((errors) => {
2603
- dispatch({
2604
- type: "SET_ERRORS",
2605
- payload: errors
2606
- });
2607
- }, []);
2608
- const setValues = React__namespace.useCallback((values) => {
2609
- dispatch({
2610
- type: "SET_VALUES",
2611
- payload: values
2612
- });
2613
- }, []);
2614
- React__namespace.useEffect(() => {
2615
- if (Object.keys(state.errors).length === 0)
2616
- return;
2617
- const ref2 = setTimeout(() => {
2618
- const [firstError] = formRef.current.querySelectorAll("[data-strapi-field-error]");
2619
- if (firstError) {
2620
- const errorId = firstError.getAttribute("id");
2621
- const formElementInError = formRef.current.querySelector(
2622
- `[aria-describedby="${errorId}"]`
2623
- );
2624
- if (formElementInError && formElementInError instanceof HTMLElement) {
2625
- formElementInError.focus();
2626
- }
2627
- }
2628
- });
2629
- return () => clearTimeout(ref2);
2630
- }, [state.errors]);
2631
- const validate = React__namespace.useCallback(
2632
- async (shouldSetErrors = true) => {
2633
- setErrors({});
2634
- if (!props.validationSchema) {
2635
- return { data: state.values };
2636
- }
2637
- try {
2638
- const data = await props.validationSchema.validate(state.values, { abortEarly: false });
2639
- return { data };
2640
- } catch (err) {
2641
- if (isErrorYupValidationError(err)) {
2642
- let errors = {};
2643
- if (err.inner) {
2644
- if (err.inner.length === 0) {
2645
- return setIn(errors, err.path, err.message);
2646
- }
2647
- for (const error of err.inner) {
2648
- if (!getIn(errors, error.path)) {
2649
- errors = setIn(errors, error.path, error.message);
2650
- }
2651
- }
2652
- }
2653
- if (shouldSetErrors) {
2654
- setErrors(errors);
2655
- }
2656
- return { errors };
2657
- } else {
2658
- if (process.env.NODE_ENV !== "production") {
2659
- console.warn(
2660
- `Warning: An unhandled error was caught during validation in <Formik validationSchema />`,
2661
- err
2662
- );
2663
- }
2664
- throw err;
2665
- }
2666
- }
2667
- },
2668
- [props, setErrors, state.values]
2669
- );
2670
- const handleSubmit = async (e) => {
2671
- e.stopPropagation();
2672
- e.preventDefault();
2673
- if (!onSubmit) {
2674
- return;
2675
- }
2676
- dispatch({
2677
- type: "SUBMIT_ATTEMPT"
2678
- });
2679
- try {
2680
- const { data, errors } = await validate();
2681
- if (errors) {
2682
- setErrors(errors);
2683
- throw new Error("Submission failed");
2684
- }
2685
- await onSubmit(data, {
2686
- setErrors,
2687
- setValues,
2688
- resetForm
2689
- });
2690
- dispatch({
2691
- type: "SUBMIT_SUCCESS"
2692
- });
2693
- } catch (err) {
2694
- dispatch({
2695
- type: "SUBMIT_FAILURE"
2696
- });
2697
- if (err instanceof Error && err.message === "Submission failed") {
2698
- return;
2699
- }
2700
- }
2701
- };
2702
- const modified = React__namespace.useMemo(
2703
- () => !isEqual__default.default(initialValues.current, state.values),
2704
- [state.values]
2705
- );
2706
- const handleChange = designSystem.useCallbackRef((eventOrPath, v) => {
2707
- if (typeof eventOrPath === "string") {
2708
- dispatch({
2709
- type: "SET_FIELD_VALUE",
2710
- payload: {
2711
- field: eventOrPath,
2712
- value: v
2713
- }
2714
- });
2715
- return;
2716
- }
2717
- const target = eventOrPath.target || eventOrPath.currentTarget;
2718
- const { type, name, id, value, options, multiple } = target;
2719
- const field = name || id;
2720
- if (!field && process.env.NODE_ENV !== "production") {
2721
- console.warn(
2722
- `\`onChange\` was called with an event, but you forgot to pass a \`name\` or \`id'\` attribute to your input. The field to update cannot be determined`
2723
- );
2724
- }
2725
- let val;
2726
- if (/number|range/.test(type)) {
2727
- const parsed = parseFloat(value);
2728
- val = isNaN(parsed) ? "" : parsed;
2729
- } else if (/checkbox/.test(type)) {
2730
- val = !getIn(state.values, field);
2731
- } else if (options && multiple) {
2732
- val = Array.from(options).filter((el) => el.selected).map((el) => el.value);
2733
- } else {
2734
- val = value;
2735
- }
2736
- if (field) {
2737
- dispatch({
2738
- type: "SET_FIELD_VALUE",
2739
- payload: {
2740
- field,
2741
- value: val
2742
- }
2743
- });
2744
- }
2745
- });
2746
- const addFieldRow = React__namespace.useCallback(
2747
- (field, value, addAtIndex) => {
2748
- dispatch({
2749
- type: "ADD_FIELD_ROW",
2750
- payload: {
2751
- field,
2752
- value,
2753
- addAtIndex
2754
- }
2755
- });
2756
- },
2757
- []
2758
- );
2759
- const removeFieldRow = React__namespace.useCallback(
2760
- (field, removeAtIndex) => {
2761
- dispatch({
2762
- type: "REMOVE_FIELD_ROW",
2763
- payload: {
2764
- field,
2765
- removeAtIndex
2766
- }
2767
- });
2768
- },
2769
- []
2770
- );
2771
- const moveFieldRow = React__namespace.useCallback(
2772
- (field, fromIndex, toIndex) => {
2773
- dispatch({
2774
- type: "MOVE_FIELD_ROW",
2775
- payload: {
2776
- field,
2777
- fromIndex,
2778
- toIndex
2779
- }
2780
- });
2781
- },
2782
- []
2783
- );
2784
- const resetForm = React__namespace.useCallback(() => {
2785
- dispatch({
2786
- type: "RESET_FORM",
2787
- payload: {
2788
- errors: {},
2789
- isSubmitting: false,
2790
- values: initialValues.current
2791
- }
2792
- });
2793
- }, []);
2794
- const setSubmitting = React__namespace.useCallback((isSubmitting) => {
2795
- dispatch({ type: "SET_ISSUBMITTING", payload: isSubmitting });
2796
- }, []);
2797
- const composedRefs = designSystem.useComposedRefs(formRef, ref);
2798
- return /* @__PURE__ */ jsxRuntime.jsx("form", { ref: composedRefs, method, noValidate: true, onSubmit: handleSubmit, children: /* @__PURE__ */ jsxRuntime.jsx(
2799
- FormProvider,
2800
- {
2801
- disabled,
2802
- onChange: handleChange,
2803
- initialValues,
2804
- modified,
2805
- addFieldRow,
2806
- moveFieldRow,
2807
- removeFieldRow,
2808
- resetForm,
2809
- setErrors,
2810
- setValues,
2811
- setSubmitting,
2812
- validate,
2813
- ...state,
2814
- children: typeof props.children === "function" ? props.children({
2815
- modified,
2816
- disabled,
2817
- onChange: handleChange,
2818
- ...state,
2819
- resetForm
2820
- }) : props.children
2821
- }
2822
- ) });
2823
- }
2824
- );
2825
- const isErrorYupValidationError = (err) => typeof err === "object" && err !== null && "name" in err && typeof err.name === "string" && err.name === "ValidationError";
2826
- const reducer$3 = (state, action) => immer.produce(state, (draft) => {
2827
- switch (action.type) {
2828
- case "SET_INITIAL_VALUES":
2829
- draft.values = action.payload;
2830
- break;
2831
- case "SET_VALUES":
2832
- draft.values = action.payload;
2833
- break;
2834
- case "SUBMIT_ATTEMPT":
2835
- draft.isSubmitting = true;
2836
- break;
2837
- case "SUBMIT_FAILURE":
2838
- draft.isSubmitting = false;
2839
- break;
2840
- case "SUBMIT_SUCCESS":
2841
- draft.isSubmitting = false;
2842
- break;
2843
- case "SET_FIELD_VALUE":
2844
- draft.values = setIn(state.values, action.payload.field, action.payload.value);
2845
- break;
2846
- case "ADD_FIELD_ROW": {
2847
- const currentField = getIn(state.values, action.payload.field, []);
2848
- let position = action.payload.addAtIndex;
2849
- if (position === void 0) {
2850
- position = currentField.length;
2851
- } else if (position < 0) {
2852
- position = 0;
2853
- }
2854
- const [key] = fractionalIndexing.generateNKeysBetween(
2855
- currentField.at(position - 1)?.__temp_key__,
2856
- currentField.at(position)?.__temp_key__,
2857
- 1
2858
- );
2859
- draft.values = setIn(
2860
- state.values,
2861
- action.payload.field,
2862
- setIn(currentField, position.toString(), { ...action.payload.value, __temp_key__: key })
2863
- );
2864
- break;
2865
- }
2866
- case "MOVE_FIELD_ROW": {
2867
- const { field, fromIndex, toIndex } = action.payload;
2868
- const currentField = [...getIn(state.values, field, [])];
2869
- const currentRow = currentField[fromIndex];
2870
- const startKey = fromIndex > toIndex ? currentField[toIndex - 1]?.__temp_key__ : currentField[toIndex]?.__temp_key__;
2871
- const endKey = fromIndex > toIndex ? currentField[toIndex]?.__temp_key__ : currentField[toIndex + 1]?.__temp_key__;
2872
- const [newKey] = fractionalIndexing.generateNKeysBetween(startKey, endKey, 1);
2873
- currentField.splice(fromIndex, 1);
2874
- currentField.splice(toIndex, 0, { ...currentRow, __temp_key__: newKey });
2875
- draft.values = setIn(state.values, field, currentField);
2876
- break;
2877
- }
2878
- case "REMOVE_FIELD_ROW": {
2879
- const currentField = getIn(state.values, action.payload.field, []);
2880
- let position = action.payload.removeAtIndex;
2881
- if (position === void 0) {
2882
- position = currentField.length - 1;
2883
- } else if (position < 0) {
2884
- position = 0;
2885
- }
2886
- const newValue = setIn(currentField, position.toString(), void 0).filter(
2887
- (val) => val
2888
- );
2889
- draft.values = setIn(
2890
- state.values,
2891
- action.payload.field,
2892
- newValue.length > 0 ? newValue : void 0
2893
- );
2894
- break;
2895
- }
2896
- case "SET_ERRORS":
2897
- if (!isEqual__default.default(state.errors, action.payload)) {
2898
- draft.errors = action.payload;
2899
- }
2900
- break;
2901
- case "SET_ISSUBMITTING":
2902
- draft.isSubmitting = action.payload;
2903
- break;
2904
- case "RESET_FORM":
2905
- draft.values = action.payload.values;
2906
- draft.errors = action.payload.errors;
2907
- draft.isSubmitting = action.payload.isSubmitting;
2908
- break;
2909
- }
2910
- });
2911
- const useField = (path) => {
2912
- const { formatMessage } = reactIntl.useIntl();
2913
- const initialValue = useForm(
2914
- "useField",
2915
- (state) => getIn(state.initialValues, path)
2916
- );
2917
- const value = useForm(
2918
- "useField",
2919
- (state) => getIn(state.values, path)
2920
- );
2921
- const handleChange = useForm("useField", (state) => state.onChange);
2922
- const error = useForm("useField", (state) => getIn(state.errors, path));
2923
- return {
2924
- initialValue,
2925
- /**
2926
- * Errors can be a string, or a MesaageDescriptor, so we need to handle both cases.
2927
- * If it's anything else, we don't return it.
2928
- */
2929
- error: isErrorMessageDescriptor(error) ? formatMessage(
2930
- {
2931
- id: error.id,
2932
- defaultMessage: error.defaultMessage
2933
- },
2934
- error.values
2935
- ) : typeof error === "string" ? error : void 0,
2936
- onChange: handleChange,
2937
- value
2938
- };
2939
- };
2940
- const isErrorMessageDescriptor = (object) => {
2941
- return typeof object === "object" && object !== null && "id" in object && "defaultMessage" in object;
2942
- };
2943
- const Blocker = () => {
2944
- const { formatMessage } = reactIntl.useIntl();
2945
- const modified = useForm("Blocker", (state) => state.modified);
2946
- const isSubmitting = useForm("Blocker", (state) => state.isSubmitting);
2947
- const blocker = reactRouterDom.useBlocker(
2948
- ({ currentLocation, nextLocation }) => !isSubmitting && modified && currentLocation.pathname !== nextLocation.pathname
2949
- );
2950
- if (blocker.state === "blocked") {
2951
- return /* @__PURE__ */ jsxRuntime.jsxs(
2952
- designSystem.Dialog,
2953
- {
2954
- isOpen: true,
2955
- title: formatMessage({
2956
- id: "app.components.ConfirmDialog.title",
2957
- defaultMessage: "Confirmation"
2958
- }),
2959
- onClose: () => blocker.reset(),
2960
- children: [
2961
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.DialogBody, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", gap: 2, children: [
2962
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Icon, { as: Icons.ExclamationMarkCircle, width: "24px", height: "24px", color: "danger600" }),
2963
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { as: "p", variant: "omega", textAlign: "center", children: formatMessage({
2964
- id: "global.prompt.unsaved",
2965
- defaultMessage: "You have unsaved changes, are you sure you want to leave?"
2966
- }) })
2967
- ] }) }),
2968
- /* @__PURE__ */ jsxRuntime.jsx(
2969
- designSystem.DialogFooter,
2970
- {
2971
- startAction: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { onClick: () => blocker.reset(), variant: "tertiary", children: formatMessage({
2972
- id: "app.components.Button.cancel",
2973
- defaultMessage: "Cancel"
2974
- }) }),
2975
- endAction: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { onClick: () => blocker.proceed(), variant: "danger", children: formatMessage({
2976
- id: "app.components.Button.confirm",
2977
- defaultMessage: "Confirm"
2978
- }) })
2979
- }
2980
- )
2981
- ]
2982
- }
2983
- );
2984
- }
2985
- return null;
2986
- };
2987
-
2988
- const getTranslation = (id) => `content-manager.${id}`;
2989
-
2990
- const DocumentStatus = ({ status = "draft", ...restProps }) => {
2991
- const statusVariant = status === "draft" ? "primary" : status === "published" ? "success" : "alternative";
2992
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Status, { ...restProps, showBullet: false, size: "S", variant: statusVariant, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { as: "span", variant: "omega", fontWeight: "bold", children: capitalise(status) }) });
2993
- };
2994
-
2995
- function getStyle(initialOffset, currentOffset, mouseOffset) {
2996
- if (!initialOffset || !currentOffset || !mouseOffset) {
2997
- return { display: "none" };
2998
- }
2999
- const { x, y } = mouseOffset;
3000
- return {
3001
- transform: `translate(${x}px, ${y}px)`
3002
- };
3003
- }
3004
- const DragLayer = ({ renderItem }) => {
3005
- const { itemType, isDragging, item, initialOffset, currentOffset, mouseOffset } = reactDnd.useDragLayer(
3006
- (monitor) => ({
3007
- item: monitor.getItem(),
3008
- itemType: monitor.getItemType(),
3009
- initialOffset: monitor.getInitialSourceClientOffset(),
3010
- currentOffset: monitor.getSourceClientOffset(),
3011
- isDragging: monitor.isDragging(),
3012
- mouseOffset: monitor.getClientOffset()
3013
- })
3014
- );
3015
- if (!isDragging) {
3016
- return null;
3017
- }
3018
- return /* @__PURE__ */ jsxRuntime.jsx(
3019
- designSystem.Box,
3020
- {
3021
- height: "100%",
3022
- left: 0,
3023
- position: "fixed",
3024
- pointerEvents: "none",
3025
- top: 0,
3026
- zIndex: 100,
3027
- width: "100%",
3028
- children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { style: getStyle(initialOffset, currentOffset, mouseOffset), children: renderItem({ type: itemType, item }) })
3029
- }
3030
- );
3031
- };
3032
-
3033
- const CardDragPreview = ({ label, isSibling = false }) => {
3034
- return /* @__PURE__ */ jsxRuntime.jsxs(
3035
- FieldContainer,
3036
- {
3037
- background: isSibling ? "neutral100" : "primary100",
3038
- display: "inline-flex",
3039
- gap: 3,
3040
- hasRadius: true,
3041
- justifyContent: "space-between",
3042
- isSibling,
3043
- "max-height": `${32 / 16}rem`,
3044
- maxWidth: "min-content",
3045
- children: [
3046
- /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 3, children: [
3047
- /* @__PURE__ */ jsxRuntime.jsx(DragButton, { alignItems: "center", cursor: "all-scroll", padding: 3, children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Drag, {}) }),
3048
- /* @__PURE__ */ jsxRuntime.jsx(
3049
- TypographyMaxWidth,
3050
- {
3051
- textColor: isSibling ? void 0 : "primary600",
3052
- fontWeight: "bold",
3053
- ellipsis: true,
3054
- children: label
3055
- }
3056
- )
3057
- ] }),
3058
- /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { children: [
3059
- /* @__PURE__ */ jsxRuntime.jsx(ActionBox, { alignItems: "center", children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Pencil, {}) }),
3060
- /* @__PURE__ */ jsxRuntime.jsx(ActionBox, { alignItems: "center", children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Cross, {}) })
3061
- ] })
3062
- ]
3063
- }
3064
- );
3065
- };
3066
- const ActionBox = styled__default.default(designSystem.Flex)`
3067
- height: ${({ theme }) => theme.spaces[7]};
3068
-
3069
- &:last-child {
3070
- padding: 0 ${({ theme }) => theme.spaces[3]};
3071
- }
3072
- `;
3073
- const DragButton = styled__default.default(ActionBox)`
3074
- border-right: 1px solid ${({ theme }) => theme.colors.primary200};
3075
-
3076
- svg {
3077
- width: ${12 / 16}rem;
3078
- height: ${12 / 16}rem;
3079
- }
3080
- `;
3081
- const FieldContainer = styled__default.default(designSystem.Flex)`
3082
- border: 1px solid
3083
- ${({ theme, isSibling }) => isSibling ? theme.colors.neutral150 : theme.colors.primary200};
3084
-
3085
- svg {
3086
- width: ${10 / 16}rem;
3087
- height: ${10 / 16}rem;
3088
-
3089
- path {
3090
- fill: ${({ theme, isSibling }) => isSibling ? void 0 : theme.colors.primary600};
3091
- }
3092
- }
3093
- `;
3094
- const TypographyMaxWidth = styled__default.default(designSystem.Typography)`
3095
- max-width: ${72 / 16}rem;
3096
- `;
3097
-
3098
- const ComponentDragPreview = ({ displayedValue }) => {
3099
- return /* @__PURE__ */ jsxRuntime.jsxs(
3100
- designSystem.Flex,
3101
- {
3102
- background: "neutral0",
3103
- borderColor: "neutral200",
3104
- justifyContent: "space-between",
3105
- gap: 3,
3106
- padding: 3,
3107
- width: `${300 / 16}rem`,
3108
- children: [
3109
- /* @__PURE__ */ jsxRuntime.jsx(ToggleButton, { type: "button", children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 6, children: [
3110
- /* @__PURE__ */ jsxRuntime.jsx(
3111
- DropdownIconWrapper,
3112
- {
3113
- alignItems: "center",
3114
- justifyContent: "center",
3115
- background: "neutral200",
3116
- height: `${32 / 16}rem`,
3117
- width: `${32 / 16}rem`,
3118
- children: /* @__PURE__ */ jsxRuntime.jsx(Icons.CarretDown, {})
3119
- }
3120
- ),
3121
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { maxWidth: `${150 / 16}rem`, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "neutral700", ellipsis: true, children: displayedValue }) })
3122
- ] }) }),
3123
- /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
3124
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.IconButton, { "aria-label": "", borderWidth: 0, children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Trash, {}) }),
3125
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.IconButton, { "aria-label": "", borderWidth: 0, children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Drag, {}) })
3126
- ] })
3127
- ]
3128
- }
3129
- );
3130
- };
3131
- const DropdownIconWrapper = styled__default.default(designSystem.Flex)`
3132
- border-radius: 50%;
3133
-
3134
- svg {
3135
- height: ${6 / 16}rem;
3136
- width: ${11 / 16}rem;
3137
- > path {
3138
- fill: ${({ theme }) => theme.colors.neutral600};
3139
- }
3140
- }
3141
- `;
3142
- const ToggleButton = styled__default.default.button`
3143
- border: none;
3144
- background: transparent;
3145
- display: block;
3146
- width: 100%;
3147
- text-align: unset;
3148
- padding: 0;
3149
- `;
3150
-
3151
- const useFocusInputField = (name) => {
3152
- const { search: searchString } = reactRouterDom.useLocation();
3153
- const search = React.useMemo(() => new URLSearchParams(searchString), [searchString]);
3154
- const [field, setField] = React.useState(null);
3155
- React.useEffect(() => {
3156
- if (search.has("field") && search.get("field") === name && field) {
3157
- if ("input" in field) {
3158
- field.input.current.focus();
3159
- field.input.current.scrollIntoView({
3160
- block: "center"
3161
- });
3162
- } else {
3163
- field.focus();
3164
- field.scrollIntoView({
3165
- block: "center"
3166
- });
3167
- }
3168
- }
3169
- }, [search, name, field]);
3170
- return setField;
3171
- };
3172
-
3173
- const ItemTypes = {
3174
- COMPONENT: "component",
3175
- EDIT_FIELD: "editField",
3176
- FIELD: "field",
3177
- DYNAMIC_ZONE: "dynamicZone",
3178
- RELATION: "relation",
3179
- BLOCKS: "blocks"
3180
- };
3181
-
3182
- const useKeyboardDragAndDrop = (active, index, { onCancel, onDropItem, onGrabItem, onMoveItem }) => {
3183
- const [isSelected, setIsSelected] = React__namespace.useState(false);
3184
- const handleMove = (movement) => {
3185
- if (!isSelected) {
3186
- return;
3187
- }
3188
- if (typeof index === "number" && onMoveItem) {
3189
- if (movement === "UP") {
3190
- onMoveItem(index - 1, index);
3191
- } else if (movement === "DOWN") {
3192
- onMoveItem(index + 1, index);
3193
- }
3194
- }
3195
- };
3196
- const handleDragClick = () => {
3197
- if (isSelected) {
3198
- if (onDropItem) {
3199
- onDropItem(index);
3200
- }
3201
- setIsSelected(false);
3202
- } else {
3203
- if (onGrabItem) {
3204
- onGrabItem(index);
3205
- }
3206
- setIsSelected(true);
3207
- }
3208
- };
3209
- const handleCancel = () => {
3210
- if (isSelected) {
3211
- setIsSelected(false);
3212
- if (onCancel) {
3213
- onCancel(index);
3214
- }
3215
- }
3216
- };
3217
- const handleKeyDown = (e) => {
3218
- if (!active) {
3219
- return;
3220
- }
3221
- if (e.key === "Tab" && !isSelected) {
3222
- return;
3223
- }
3224
- e.preventDefault();
3225
- switch (e.key) {
3226
- case " ":
3227
- case "Enter":
3228
- handleDragClick();
3229
- break;
3230
- case "Escape":
3231
- handleCancel();
3232
- break;
3233
- case "ArrowDown":
3234
- case "ArrowRight":
3235
- handleMove("DOWN");
3236
- break;
3237
- case "ArrowUp":
3238
- case "ArrowLeft":
3239
- handleMove("UP");
3240
- break;
3241
- }
3242
- };
3243
- return handleKeyDown;
3244
- };
3245
-
3246
- const DIRECTIONS = {
3247
- UPWARD: "upward",
3248
- DOWNWARD: "downward"
3249
- };
3250
- const DROP_SENSITIVITY = {
3251
- REGULAR: "regular",
3252
- IMMEDIATE: "immediate"
3253
- };
3254
- const useDragAndDrop = (active, {
3255
- type = "STRAPI_DND",
3256
- index,
3257
- item,
3258
- onStart,
3259
- onEnd,
3260
- onGrabItem,
3261
- onDropItem,
3262
- onCancel,
3263
- onMoveItem,
3264
- dropSensitivity = DROP_SENSITIVITY.REGULAR
3265
- }) => {
3266
- const objectRef = React__namespace.useRef(null);
3267
- const [{ handlerId, isOver }, dropRef] = reactDnd.useDrop({
3268
- accept: type,
3269
- collect(monitor) {
3270
- return {
3271
- handlerId: monitor.getHandlerId(),
3272
- isOver: monitor.isOver({ shallow: true })
3273
- };
3274
- },
3275
- drop(item2) {
3276
- const draggedIndex = item2.index;
3277
- const newIndex = index;
3278
- if (isOver && onDropItem) {
3279
- onDropItem(draggedIndex, newIndex);
3280
- }
3281
- },
3282
- hover(item2, monitor) {
3283
- if (!objectRef.current || !onMoveItem) {
3284
- return;
3285
- }
3286
- const dragIndex = item2.index;
3287
- const newIndex = index;
3288
- const hoverBoundingRect = objectRef.current?.getBoundingClientRect();
3289
- const hoverMiddleY = (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;
3290
- const clientOffset = monitor.getClientOffset();
3291
- if (!clientOffset)
3292
- return;
3293
- const hoverClientY = clientOffset && clientOffset.y - hoverBoundingRect.top;
3294
- if (typeof dragIndex === "number" && typeof newIndex === "number") {
3295
- if (dragIndex === newIndex) {
3296
- return;
3297
- }
3298
- if (dropSensitivity === DROP_SENSITIVITY.REGULAR) {
3299
- if (dragIndex < newIndex && hoverClientY < hoverMiddleY) {
3300
- return;
3301
- }
3302
- if (dragIndex > newIndex && hoverClientY > hoverMiddleY) {
3303
- return;
3304
- }
3305
- }
3306
- onMoveItem(newIndex, dragIndex);
3307
- item2.index = newIndex;
3308
- } else {
3309
- if (Array.isArray(dragIndex) && Array.isArray(newIndex)) {
3310
- const minLength = Math.min(dragIndex.length, newIndex.length);
3311
- let areEqual = true;
3312
- let isLessThan = false;
3313
- let isGreaterThan = false;
3314
- for (let i = 0; i < minLength; i++) {
3315
- if (dragIndex[i] < newIndex[i]) {
3316
- isLessThan = true;
3317
- areEqual = false;
3318
- break;
3319
- } else if (dragIndex[i] > newIndex[i]) {
3320
- isGreaterThan = true;
3321
- areEqual = false;
3322
- break;
3323
- }
3324
- }
3325
- if (areEqual && dragIndex.length === newIndex.length) {
3326
- return;
3327
- }
3328
- if (dropSensitivity === DROP_SENSITIVITY.REGULAR) {
3329
- if (isLessThan && !isGreaterThan && hoverClientY < hoverMiddleY) {
3330
- return;
3331
- }
3332
- if (isGreaterThan && !isLessThan && hoverClientY > hoverMiddleY) {
3333
- return;
3334
- }
3335
- }
3336
- }
3337
- onMoveItem(newIndex, dragIndex);
3338
- item2.index = newIndex;
3339
- }
3340
- }
3341
- });
3342
- const getDragDirection = (monitor) => {
3343
- if (monitor && monitor.isDragging() && !monitor.didDrop() && monitor.getInitialClientOffset() && monitor.getClientOffset()) {
3344
- const deltaY = monitor.getInitialClientOffset().y - monitor.getClientOffset().y;
3345
- if (deltaY > 0)
3346
- return DIRECTIONS.UPWARD;
3347
- if (deltaY < 0)
3348
- return DIRECTIONS.DOWNWARD;
3349
- return null;
3350
- }
3351
- return null;
3352
- };
3353
- const [{ isDragging, direction }, dragRef, dragPreviewRef] = reactDnd.useDrag({
3354
- type,
3355
- item() {
3356
- if (onStart) {
3357
- onStart();
3358
- }
3359
- const { width } = objectRef.current?.getBoundingClientRect() ?? {};
3360
- return { index, width, ...item };
3361
- },
3362
- end() {
3363
- if (onEnd) {
3364
- onEnd();
3365
- }
3366
- },
3367
- canDrag: active,
3368
- /**
3369
- * This is useful when the item is in a virtualized list.
3370
- * However, if we don't have an ID then we want the libraries
3371
- * defaults to take care of this.
3372
- */
3373
- isDragging: item?.id ? (monitor) => {
3374
- return item.id === monitor.getItem().id;
3375
- } : void 0,
3376
- collect: (monitor) => ({
3377
- isDragging: monitor.isDragging(),
3378
- initialOffset: monitor.getInitialClientOffset(),
3379
- currentOffset: monitor.getClientOffset(),
3380
- direction: getDragDirection(monitor)
3381
- })
3382
- });
3383
- const handleKeyDown = useKeyboardDragAndDrop(active, index, {
3384
- onGrabItem,
3385
- onDropItem,
3386
- onCancel,
3387
- onMoveItem
3388
- });
3389
- return [
3390
- { handlerId, isDragging, handleKeyDown, isOverDropTarget: isOver, direction },
3391
- objectRef,
3392
- dropRef,
3393
- dragRef,
3394
- dragPreviewRef
3395
- ];
3396
- };
3397
-
3398
- const relationsApi = contentManagerApi.injectEndpoints({
3399
- endpoints: (build) => ({
3400
- getRelations: build.query({
3401
- query: ({ model, id, targetField, params }) => {
3402
- return {
3403
- url: `/content-manager/relations/${model}/${id}/${targetField}`,
3404
- method: "GET",
3405
- config: {
3406
- params
3407
- }
3408
- };
3409
- },
3410
- serializeQueryArgs: (args) => {
3411
- const { endpointName, queryArgs } = args;
3412
- return {
3413
- endpointName,
3414
- model: queryArgs.model,
3415
- id: queryArgs.id,
3416
- targetField: queryArgs.targetField,
3417
- locale: queryArgs.params?.locale,
3418
- status: queryArgs.params?.status
3419
- };
3420
- },
3421
- merge: (currentCache, newItems) => {
3422
- if (currentCache.pagination && newItems.pagination) {
3423
- if (currentCache.pagination.page < newItems.pagination.page) {
3424
- const existingIds = currentCache.results.map((item) => item.documentId);
3425
- const uniqueNewItems = newItems.results.filter(
3426
- (item) => !existingIds.includes(item.documentId)
3427
- );
3428
- currentCache.results.push(...prepareTempKeys(uniqueNewItems, currentCache.results));
3429
- currentCache.pagination = newItems.pagination;
3430
- } else if (newItems.pagination.page === 1) {
3431
- currentCache.results = prepareTempKeys(newItems.results);
3432
- currentCache.pagination = newItems.pagination;
3433
- }
3434
- }
3435
- },
3436
- forceRefetch({ currentArg, previousArg }) {
3437
- if (!currentArg?.params && !previousArg?.params) {
3438
- return false;
3439
- }
3440
- return currentArg?.params?.page !== previousArg?.params?.page || currentArg?.params?.pageSize !== previousArg?.params?.pageSize;
3441
- },
3442
- transformResponse: (response) => {
3443
- if ("results" in response && response.results) {
3444
- return {
3445
- ...response,
3446
- results: prepareTempKeys(response.results.toReversed())
3447
- };
3448
- } else {
3449
- return response;
3450
- }
3451
- },
3452
- providesTags: ["Relations"]
3453
- }),
3454
- searchRelations: build.query({
3455
- query: ({ model, targetField, params }) => {
3456
- return {
3457
- url: `/content-manager/relations/${model}/${targetField}`,
3458
- method: "GET",
3459
- config: {
3460
- params
3461
- }
3462
- };
3463
- },
3464
- serializeQueryArgs: (args) => {
3465
- const { endpointName, queryArgs } = args;
3466
- return {
3467
- endpointName,
3468
- model: queryArgs.model,
3469
- targetField: queryArgs.targetField,
3470
- _q: queryArgs.params?._q,
3471
- idsToOmit: queryArgs.params?.idsToOmit,
3472
- idsToInclude: queryArgs.params?.idsToInclude
3473
- };
3474
- },
3475
- merge: (currentCache, newItems) => {
3476
- if (currentCache.pagination && newItems.pagination) {
3477
- if (currentCache.pagination.page < newItems.pagination.page) {
3478
- const existingIds = currentCache.results.map((item) => item.documentId);
3479
- const uniqueNewItems = newItems.results.filter(
3480
- (item) => !existingIds.includes(item.documentId)
3481
- );
3482
- currentCache.results.push(...uniqueNewItems);
3483
- currentCache.pagination = newItems.pagination;
3484
- } else if (newItems.pagination.page === 1) {
3485
- currentCache.results = newItems.results;
3486
- currentCache.pagination = newItems.pagination;
3487
- }
3488
- }
3489
- },
3490
- forceRefetch({ currentArg, previousArg }) {
3491
- if (!currentArg?.params && !previousArg?.params) {
3492
- return false;
3493
- }
3494
- return currentArg?.params?.page !== previousArg?.params?.page || currentArg?.params?.pageSize !== previousArg?.params?.pageSize;
3495
- },
3496
- transformResponse: (response) => {
3497
- if (response.results) {
3498
- return {
3499
- ...response,
3500
- results: response.results
3501
- };
3502
- } else {
3503
- return response;
3504
- }
3505
- }
3506
- })
3507
- })
3508
- });
3509
- const prepareTempKeys = (relations, existingRelations = []) => {
3510
- const [firstItem] = existingRelations.slice(0);
3511
- const keys = fractionalIndexing.generateNKeysBetween(null, firstItem?.__temp_key__ ?? null, relations.length);
3512
- return relations.map((datum, index) => ({
3513
- ...datum,
3514
- __temp_key__: keys[index]
3515
- }));
3516
- };
3517
- const { useGetRelationsQuery, useLazySearchRelationsQuery } = relationsApi;
3518
-
3519
- const getRelationLabel = (relation, mainField) => {
3520
- const label = mainField && relation[mainField.name] ? relation[mainField.name] : null;
3521
- if (typeof label === "string") {
3522
- return label;
3523
- }
3524
- return relation.documentId;
3525
- };
3526
-
3527
- const [ComponentProvider, useComponent] = createContext("ComponentContext", {
3528
- id: void 0,
3529
- level: -1,
3530
- uid: void 0,
3531
- type: void 0
3532
- });
3533
-
3534
- const RELATIONS_TO_DISPLAY = 5;
3535
- const ONE_WAY_RELATIONS = ["oneWay", "oneToOne", "manyToOne", "oneToManyMorph", "oneToOneMorph"];
3536
- const RelationsField = React__namespace.forwardRef(
3537
- ({ disabled, label, ...props }, ref) => {
3538
- const [currentPage, setCurrentPage] = React__namespace.useState(1);
3539
- const { document, model: documentModel } = useDoc();
3540
- const documentId = document?.documentId;
3541
- const { formatMessage } = reactIntl.useIntl();
3542
- const [{ query }] = useQueryParams();
3543
- const params = buildValidParams(query);
3544
- const isMorph = props.attribute.relation.toLowerCase().includes("morph");
3545
- const isDisabled = isMorph || disabled;
3546
- const { id: componentId, uid } = useComponent("RelationsField", ({ uid: uid2, id: id2 }) => ({ id: id2, uid: uid2 }));
3547
- const id = componentId ? componentId.toString() : documentId;
3548
- const model = uid ?? documentModel;
3549
- const [targetField] = props.name.split(".").slice(-1);
3550
- const { data, isLoading, isFetching } = useGetRelationsQuery(
3551
- {
3552
- model,
3553
- targetField,
3554
- // below we don't run the query if there is no id.
3555
- id,
3556
- params: {
3557
- ...params,
3558
- pageSize: RELATIONS_TO_DISPLAY,
3559
- page: currentPage
3560
- }
3561
- },
3562
- {
3563
- refetchOnMountOrArgChange: true,
3564
- skip: !id,
3565
- selectFromResult: (result) => {
3566
- return {
3567
- ...result,
3568
- data: {
3569
- ...result.data,
3570
- results: result.data?.results ? result.data.results : []
3571
- }
3572
- };
3573
- }
3574
- }
3575
- );
3576
- const handleLoadMore = () => {
3577
- setCurrentPage((prev) => prev + 1);
3578
- };
3579
- const field = useField(props.name);
3580
- const isFetchingMoreRelations = isLoading || isFetching;
3581
- const realServerRelationsCount = "pagination" in data && data.pagination ? data.pagination.total : 0;
3582
- const relationsConnected = (field.value?.connect ?? []).filter(
3583
- (rel) => data.results.findIndex((relation) => relation.id === rel.id) === -1
3584
- ).length ?? 0;
3585
- const relationsDisconnected = field.value?.disconnect?.length ?? 0;
3586
- const relationsCount = realServerRelationsCount + relationsConnected - relationsDisconnected;
3587
- const relations = React__namespace.useMemo(() => {
3588
- const ctx = {
3589
- field: field.value,
3590
- // @ts-expect-error – targetModel does exist on the attribute. But it's not typed.
3591
- href: `../${COLLECTION_TYPES}/${props.attribute.targetModel}`,
3592
- mainField: props.mainField
3593
- };
3594
- const transformations = pipe__default.default(
3595
- removeConnected(ctx),
3596
- removeDisconnected(ctx),
3597
- addLabelAndHref(ctx)
3598
- );
3599
- const transformedRels = transformations([...data.results]);
3600
- return [...transformedRels, ...field.value?.connect ?? []].sort((a, b) => {
3601
- if (a.__temp_key__ < b.__temp_key__)
3602
- return -1;
3603
- if (a.__temp_key__ > b.__temp_key__)
3604
- return 1;
3605
- return 0;
3606
- });
3607
- }, [
3608
- data.results,
3609
- field.value,
3610
- // @ts-expect-error – targetModel does exist on the attribute. But it's not typed.
3611
- props.attribute.targetModel,
3612
- props.mainField
3613
- ]);
3614
- const handleConnect = (relation) => {
3615
- const [lastItemInList] = relations.slice(-1);
3616
- const item = {
3617
- id: relation.id,
3618
- status: relation.status,
3619
- /**
3620
- * If there's a last item, that's the first key we use to generate out next one.
3621
- */
3622
- __temp_key__: fractionalIndexing.generateNKeysBetween(lastItemInList?.__temp_key__ ?? null, null, 1)[0],
3623
- // Fallback to `id` if there is no `mainField` value, which will overwrite the above `id` property with the exact same data.
3624
- [props.mainField?.name ?? "documentId"]: relation[props.mainField?.name ?? "documentId"],
3625
- label: getRelationLabel(relation, props.mainField),
3626
- // @ts-expect-error – targetModel does exist on the attribute, but it's not typed.
3627
- href: `../${COLLECTION_TYPES}/${props.attribute.targetModel}/${relation.documentId}`
3628
- };
3629
- if (ONE_WAY_RELATIONS.includes(props.attribute.relation)) {
3630
- field.onChange(`${props.name}.connect`, [item]);
3631
- } else {
3632
- field.onChange(`${props.name}.connect`, [...field.value?.connect ?? [], item]);
3633
- }
3634
- };
3635
- return /* @__PURE__ */ jsxRuntime.jsxs(
3636
- designSystem.Flex,
3637
- {
3638
- ref,
3639
- direction: "column",
3640
- gap: 3,
3641
- justifyContent: "space-between",
3642
- alignItems: "stretch",
3643
- wrap: "wrap",
3644
- children: [
3645
- /* @__PURE__ */ jsxRuntime.jsxs(StyledFlex, { direction: "column", alignItems: "start", gap: 2, width: "100%", children: [
3646
- /* @__PURE__ */ jsxRuntime.jsx(
3647
- RelationsInput,
3648
- {
3649
- disabled: isDisabled,
3650
- id,
3651
- label: `${label} ${relationsCount > 0 ? `(${relationsCount})` : ""}`,
3652
- model,
3653
- onChange: handleConnect,
3654
- ...props
3655
- }
3656
- ),
3657
- "pagination" in data && data.pagination && data.pagination.pageCount > data.pagination.page ? /* @__PURE__ */ jsxRuntime.jsx(
3658
- designSystem.TextButton,
3659
- {
3660
- disabled: isFetchingMoreRelations,
3661
- onClick: handleLoadMore,
3662
- loading: isFetchingMoreRelations,
3663
- startIcon: /* @__PURE__ */ jsxRuntime.jsx(Icons.Refresh, {}),
3664
- shrink: 0,
3665
- children: formatMessage({
3666
- id: getTranslation("relation.loadMore"),
3667
- defaultMessage: "Load More"
3668
- })
3669
- }
3670
- ) : null
3671
- ] }),
3672
- /* @__PURE__ */ jsxRuntime.jsx(
3673
- RelationsList,
3674
- {
3675
- data: relations,
3676
- serverData: data.results,
3677
- disabled: isDisabled,
3678
- name: props.name,
3679
- isLoading: isFetchingMoreRelations,
3680
- relationType: props.attribute.relation
3681
- }
3682
- )
3683
- ]
3684
- }
3685
- );
3686
- }
3687
- );
3688
- const StyledFlex = styled__default.default(designSystem.Flex)`
3689
- & > div {
3690
- width: 100%;
3691
- }
3692
- `;
3693
- const removeConnected = ({ field }) => (relations) => {
3694
- return relations.filter((relation) => {
3695
- const connectedRelations = field?.connect ?? [];
3696
- return connectedRelations.findIndex((rel) => rel.id === relation.id) === -1;
3697
- });
3698
- };
3699
- const removeDisconnected = ({ field }) => (relations) => relations.filter((relation) => {
3700
- const disconnectedRelations = field?.disconnect ?? [];
3701
- return disconnectedRelations.findIndex((rel) => rel.id === relation.id) === -1;
3702
- });
3703
- const addLabelAndHref = ({ mainField, href }) => (relations) => relations.map((relation) => {
3704
- return {
3705
- ...relation,
3706
- // Fallback to `id` if there is no `mainField` value, which will overwrite the above `documentId` property with the exact same data.
3707
- [mainField?.name ?? "documentId"]: relation[mainField?.name ?? "documentId"],
3708
- label: getRelationLabel(relation, mainField),
3709
- href: `${href}/${relation.documentId}`
3710
- };
3711
- });
3712
- const RelationsInput = ({
3713
- disabled,
3714
- hint,
3715
- id,
3716
- label,
3717
- model,
3718
- name,
3719
- mainField,
3720
- placeholder,
3721
- required,
3722
- onChange
3723
- }) => {
3724
- const [textValue, setTextValue] = React__namespace.useState("");
3725
- const [searchParams, setSearchParams] = React__namespace.useState({
3726
- _q: "",
3727
- page: 1
3728
- });
3729
- const { toggleNotification } = useNotification();
3730
- const [{ query }] = useQueryParams();
3731
- const { formatMessage } = reactIntl.useIntl();
3732
- const fieldRef = useFocusInputField(name);
3733
- const field = useField(name);
3734
- const [searchForTrigger, { data, isLoading }] = useLazySearchRelationsQuery();
3735
- React__namespace.useEffect(() => {
3736
- const [targetField] = name.split(".").slice(-1);
3737
- searchForTrigger({
3738
- model,
3739
- targetField,
3740
- params: {
3741
- ...buildValidParams(query),
3742
- id: id ?? "",
3743
- pageSize: 10,
3744
- idsToInclude: field.value?.disconnect?.map((rel) => rel.id.toString()) ?? [],
3745
- idsToOmit: field.value?.connect?.map((rel) => rel.id.toString()) ?? [],
3746
- ...searchParams
3747
- }
3748
- });
3749
- }, [
3750
- field.value?.connect,
3751
- field.value?.disconnect,
3752
- id,
3753
- model,
3754
- name,
3755
- query,
3756
- searchForTrigger,
3757
- searchParams
3758
- ]);
3759
- const handleSearch = async (search) => {
3760
- setSearchParams((s) => ({ ...s, _q: search, page: 1 }));
3761
- };
3762
- const hasNextPage = data?.pagination ? data.pagination.page < data.pagination.pageCount : false;
3763
- const options = data?.results ?? [];
3764
- const handleChange = (relationId) => {
3765
- if (!relationId) {
3766
- return;
3767
- }
3768
- const relation = options.find((opt) => opt.id.toString() === relationId);
3769
- if (!relation) {
3770
- console.error(
3771
- "You've tried to add a relation with an id that does not exist in the options you can see, this is likely a bug with Strapi. Please open an issue."
3772
- );
3773
- toggleNotification({
3774
- message: formatMessage({
3775
- id: getTranslation("relation.error-adding-relation"),
3776
- defaultMessage: "An error occurred while trying to add the relation."
3777
- }),
3778
- type: "danger"
3779
- });
3780
- return;
3781
- }
3782
- onChange(relation);
3783
- };
3784
- const handleLoadMore = () => {
3785
- if (!data || !data.pagination) {
3786
- return;
3787
- } else if (data.pagination.page < data.pagination.pageCount) {
3788
- setSearchParams((s) => ({ ...s, page: s.page + 1 }));
3789
- }
3790
- };
3791
- React__namespace.useLayoutEffect(() => {
3792
- setTextValue("");
3793
- }, [field.value]);
3794
- return /* @__PURE__ */ jsxRuntime.jsx(
3795
- designSystem.Combobox,
3796
- {
3797
- ref: fieldRef,
3798
- autocomplete: "none",
3799
- error: field.error,
3800
- name,
3801
- hint,
3802
- required,
3803
- label,
3804
- disabled,
3805
- placeholder: placeholder || formatMessage({
3806
- id: getTranslation("relation.add"),
3807
- defaultMessage: "Add relation"
3808
- }),
3809
- hasMoreItems: hasNextPage,
3810
- loading: isLoading,
3811
- onOpenChange: () => {
3812
- handleSearch(textValue ?? "");
3813
- },
3814
- noOptionsMessage: () => formatMessage({
3815
- id: getTranslation("relation.notAvailable"),
3816
- defaultMessage: "No relations available"
3817
- }),
3818
- loadingMessage: formatMessage({
3819
- id: getTranslation("relation.isLoading"),
3820
- defaultMessage: "Relations are loading"
3821
- }),
3822
- onLoadMore: handleLoadMore,
3823
- textValue,
3824
- onChange: handleChange,
3825
- onTextValueChange: (text) => {
3826
- setTextValue(text);
3827
- },
3828
- onInputChange: (event) => {
3829
- handleSearch(event.currentTarget.value);
3830
- },
3831
- children: options.map((opt) => {
3832
- const textValue2 = getRelationLabel(opt, mainField);
3833
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.ComboboxOption, { value: opt.id.toString(), textValue: textValue2, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, justifyContent: "space-between", children: [
3834
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { ellipsis: true, children: textValue2 }),
3835
- opt.status ? /* @__PURE__ */ jsxRuntime.jsx(DocumentStatus, { status: opt.status }) : null
3836
- ] }) }, opt.id);
3837
- })
3838
- }
3839
- );
3840
- };
3841
- const RELATION_ITEM_HEIGHT = 50;
3842
- const RELATION_GUTTER = 4;
3843
- const RelationsList = ({
3844
- data,
3845
- serverData,
3846
- disabled,
3847
- name,
3848
- isLoading,
3849
- relationType
3850
- }) => {
3851
- const ariaDescriptionId = React__namespace.useId();
3852
- const { formatMessage } = reactIntl.useIntl();
3853
- const listRef = React__namespace.useRef(null);
3854
- const outerListRef = React__namespace.useRef(null);
3855
- const [overflow, setOverflow] = React__namespace.useState();
3856
- const [liveText, setLiveText] = React__namespace.useState("");
3857
- const field = useField(name);
3858
- const removeFieldRow = useForm("RelationsList", (state) => state.removeFieldRow);
3859
- const addFieldRow = useForm("RelationsList", (state) => state.addFieldRow);
3860
- React__namespace.useEffect(() => {
3861
- if (data.length <= RELATIONS_TO_DISPLAY) {
3862
- return setOverflow(void 0);
3863
- }
3864
- const handleNativeScroll = (e) => {
3865
- const el = e.target;
3866
- const parentScrollContainerHeight = el.parentNode.scrollHeight;
3867
- const maxScrollBottom = el.scrollHeight - el.scrollTop;
3868
- if (el.scrollTop === 0) {
3869
- return setOverflow("bottom");
3870
- }
3871
- if (maxScrollBottom === parentScrollContainerHeight) {
3872
- return setOverflow("top");
3873
- }
3874
- return setOverflow("top-bottom");
3875
- };
3876
- const outerListRefCurrent = outerListRef?.current;
3877
- if (!isLoading && data.length > 0 && outerListRefCurrent) {
3878
- outerListRef.current.addEventListener("scroll", handleNativeScroll);
3879
- }
3880
- return () => {
3881
- if (outerListRefCurrent) {
3882
- outerListRefCurrent.removeEventListener("scroll", handleNativeScroll);
3883
- }
3884
- };
3885
- }, [isLoading, data.length]);
3886
- const getItemPos = (index) => `${index + 1} of ${data.length}`;
3887
- const handleMoveItem = (newIndex, oldIndex) => {
3888
- const item = data[oldIndex];
3889
- setLiveText(
3890
- formatMessage(
3891
- {
3892
- id: getTranslation("dnd.reorder"),
3893
- defaultMessage: "{item}, moved. New position in list: {position}."
3894
- },
3895
- {
3896
- item: item.label ?? item.documentId,
3897
- position: getItemPos(newIndex)
3898
- }
3899
- )
3900
- );
3901
- const newData = [...data];
3902
- const currentRow = data[oldIndex];
3903
- const startKey = oldIndex > newIndex ? newData[newIndex - 1]?.__temp_key__ : newData[newIndex]?.__temp_key__;
3904
- const endKey = oldIndex > newIndex ? newData[newIndex]?.__temp_key__ : newData[newIndex + 1]?.__temp_key__;
3905
- const [newKey] = fractionalIndexing.generateNKeysBetween(startKey, endKey, 1);
3906
- newData.splice(oldIndex, 1);
3907
- newData.splice(newIndex, 0, { ...currentRow, __temp_key__: newKey });
3908
- const connectedRelations = newData.reduce((acc, relation, currentIndex, array) => {
3909
- const relationOnServer = serverData.find(
3910
- (oldRelation) => oldRelation.documentId === relation.documentId
3911
- );
3912
- const relationInFront = array[currentIndex + 1];
3913
- if (!relationOnServer || relationOnServer.__temp_key__ !== relation.__temp_key__) {
3914
- const position = relationInFront ? {
3915
- before: relationInFront.documentId,
3916
- locale: relationInFront.locale,
3917
- status: relationInFront.status
3918
- } : { end: true };
3919
- const relationWithPosition = { ...relation, position };
3920
- return [...acc, relationWithPosition];
3921
- }
3922
- return acc;
3923
- }, []).toReversed();
3924
- field.onChange(`${name}.connect`, connectedRelations);
3925
- };
3926
- const handleGrabItem = (index) => {
3927
- const item = data[index];
3928
- setLiveText(
3929
- formatMessage(
3930
- {
3931
- id: getTranslation("dnd.grab-item"),
3932
- defaultMessage: `{item}, grabbed. Current position in list: {position}. Press up and down arrow to change position, Spacebar to drop, Escape to cancel.`
3933
- },
3934
- {
3935
- item: item.label ?? item.documentId,
3936
- position: getItemPos(index)
3937
- }
3938
- )
3939
- );
3940
- };
3941
- const handleDropItem = (index) => {
3942
- const { href: _href, label, ...item } = data[index];
3943
- setLiveText(
3944
- formatMessage(
3945
- {
3946
- id: getTranslation("dnd.drop-item"),
3947
- defaultMessage: `{item}, dropped. Final position in list: {position}.`
3948
- },
3949
- {
3950
- item: label ?? item.documentId,
3951
- position: getItemPos(index)
3952
- }
3953
- )
3954
- );
3955
- };
3956
- const handleCancel = (index) => {
3957
- const item = data[index];
3958
- setLiveText(
3959
- formatMessage(
3960
- {
3961
- id: getTranslation("dnd.cancel-item"),
3962
- defaultMessage: "{item}, dropped. Re-order cancelled."
3963
- },
3964
- {
3965
- item: item.label ?? item.documentId
3966
- }
3967
- )
3968
- );
3969
- };
3970
- const handleDisconnect = (relation) => {
3971
- if (field.value && field.value.connect) {
3972
- const indexOfRelationInConnectArray = field.value.connect.findIndex(
3973
- (rel) => rel.id === relation.id
3974
- );
3975
- if (indexOfRelationInConnectArray >= 0) {
3976
- removeFieldRow(`${name}.connect`, indexOfRelationInConnectArray);
3977
- return;
3978
- }
3979
- }
3980
- addFieldRow(`${name}.disconnect`, { id: relation.id });
3981
- };
3982
- const canReorder = !ONE_WAY_RELATIONS.includes(relationType);
3983
- const dynamicListHeight = data.length > RELATIONS_TO_DISPLAY ? Math.min(data.length, RELATIONS_TO_DISPLAY) * (RELATION_ITEM_HEIGHT + RELATION_GUTTER) + RELATION_ITEM_HEIGHT / 2 : Math.min(data.length, RELATIONS_TO_DISPLAY) * (RELATION_ITEM_HEIGHT + RELATION_GUTTER);
3984
- return /* @__PURE__ */ jsxRuntime.jsxs(ShadowBox, { overflowDirection: overflow, children: [
3985
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.VisuallyHidden, { id: ariaDescriptionId, children: formatMessage({
3986
- id: getTranslation("dnd.instructions"),
3987
- defaultMessage: `Press spacebar to grab and re-order`
3988
- }) }),
3989
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.VisuallyHidden, { "aria-live": "assertive", children: liveText }),
3990
- /* @__PURE__ */ jsxRuntime.jsx(
3991
- reactWindow.FixedSizeList,
3992
- {
3993
- height: dynamicListHeight,
3994
- ref: listRef,
3995
- outerRef: outerListRef,
3996
- itemCount: data.length,
3997
- itemSize: RELATION_ITEM_HEIGHT + RELATION_GUTTER,
3998
- itemData: {
3999
- ariaDescribedBy: ariaDescriptionId,
4000
- canDrag: canReorder,
4001
- disabled,
4002
- handleCancel,
4003
- handleDropItem,
4004
- handleGrabItem,
4005
- handleMoveItem,
4006
- name,
4007
- handleDisconnect,
4008
- relations: data
4009
- },
4010
- itemKey: (index) => data[index].id,
4011
- innerElementType: "ol",
4012
- children: ListItem
4013
- }
4014
- )
4015
- ] });
4016
- };
4017
- const ShadowBox = styled__default.default(designSystem.Box)`
4018
- position: relative;
4019
- overflow: hidden;
4020
- flex: 1;
4021
-
4022
- &:before,
4023
- &:after {
4024
- position: absolute;
4025
- width: 100%;
4026
- height: 4px;
4027
- z-index: 1;
4028
- }
4029
-
4030
- &:before {
4031
- /* TODO: as for DS Table component we would need this to be handled by the DS theme */
4032
- content: '';
4033
- background: linear-gradient(rgba(3, 3, 5, 0.2) 0%, rgba(0, 0, 0, 0) 100%);
4034
- top: 0;
4035
- opacity: ${({ overflowDirection }) => overflowDirection === "top-bottom" || overflowDirection === "top" ? 1 : 0};
4036
- transition: opacity 0.2s ease-in-out;
4037
- }
4038
-
4039
- &:after {
4040
- /* TODO: as for DS Table component we would need this to be handled by the DS theme */
4041
- content: '';
4042
- background: linear-gradient(0deg, rgba(3, 3, 5, 0.2) 0%, rgba(0, 0, 0, 0) 100%);
4043
- bottom: 0;
4044
- opacity: ${({ overflowDirection }) => overflowDirection === "top-bottom" || overflowDirection === "bottom" ? 1 : 0};
4045
- transition: opacity 0.2s ease-in-out;
4046
- }
4047
- `;
4048
- const ListItem = ({ data, index, style }) => {
4049
- const {
4050
- ariaDescribedBy,
4051
- canDrag = false,
4052
- disabled = false,
4053
- handleCancel,
4054
- handleDisconnect,
4055
- handleDropItem,
4056
- handleGrabItem,
4057
- handleMoveItem,
4058
- name,
4059
- relations
4060
- } = data;
4061
- const { formatMessage } = reactIntl.useIntl();
4062
- const { href, documentId, label, status } = relations[index];
4063
- const [{ handlerId, isDragging, handleKeyDown }, relationRef, dropRef, dragRef, dragPreviewRef] = useDragAndDrop(
4064
- canDrag && !disabled,
4065
- {
4066
- type: `${ItemTypes.RELATION}_${name}`,
4067
- index,
4068
- item: {
4069
- displayedValue: label,
4070
- status,
4071
- id: documentId,
4072
- index
4073
- },
4074
- onMoveItem: handleMoveItem,
4075
- onDropItem: handleDropItem,
4076
- onGrabItem: handleGrabItem,
4077
- onCancel: handleCancel,
4078
- dropSensitivity: DROP_SENSITIVITY.REGULAR
4079
- }
4080
- );
4081
- const composedRefs = designSystem.useComposedRefs(relationRef, dragRef);
4082
- React__namespace.useEffect(() => {
4083
- dragPreviewRef(reactDndHtml5Backend.getEmptyImage());
4084
- }, [dragPreviewRef]);
4085
- return /* @__PURE__ */ jsxRuntime.jsx(
4086
- designSystem.Box,
4087
- {
4088
- style,
4089
- as: "li",
4090
- ref: dropRef,
4091
- "aria-describedby": ariaDescribedBy,
4092
- cursor: canDrag ? "all-scroll" : "default",
4093
- children: isDragging ? /* @__PURE__ */ jsxRuntime.jsx(RelationItemPlaceholder, {}) : /* @__PURE__ */ jsxRuntime.jsxs(
4094
- designSystem.Flex,
4095
- {
4096
- paddingTop: 2,
4097
- paddingBottom: 2,
4098
- paddingLeft: canDrag ? 2 : 4,
4099
- paddingRight: 4,
4100
- hasRadius: true,
4101
- borderColor: "neutral200",
4102
- background: disabled ? "neutral150" : "neutral0",
4103
- justifyContent: "space-between",
4104
- ref: composedRefs,
4105
- "data-handler-id": handlerId,
4106
- children: [
4107
- /* @__PURE__ */ jsxRuntime.jsxs(FlexWrapper, { gap: 1, children: [
4108
- canDrag ? /* @__PURE__ */ jsxRuntime.jsx(
4109
- designSystem.IconButton,
4110
- {
4111
- forwardedAs: "div",
4112
- role: "button",
4113
- tabIndex: 0,
4114
- "aria-label": formatMessage({
4115
- id: getTranslation("components.RelationInput.icon-button-aria-label"),
4116
- defaultMessage: "Drag"
4117
- }),
4118
- borderWidth: 0,
4119
- onKeyDown: handleKeyDown,
4120
- disabled,
4121
- children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Drag, {})
4122
- }
4123
- ) : null,
4124
- /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { width: "100%", minWidth: 0, justifyContent: "space-between", children: [
4125
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { minWidth: 0, paddingTop: 1, paddingBottom: 1, paddingRight: 4, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tooltip, { description: label, children: href ? /* @__PURE__ */ jsxRuntime.jsx(LinkEllipsis, { forwardedAs: reactRouterDom.NavLink, to: href, children: label }) : /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: disabled ? "neutral600" : "primary600", ellipsis: true, children: label }) }) }),
4126
- status ? /* @__PURE__ */ jsxRuntime.jsx(DocumentStatus, { status }) : null
4127
- ] })
4128
- ] }),
4129
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { paddingLeft: 4, children: /* @__PURE__ */ jsxRuntime.jsx(
4130
- DisconnectButton,
4131
- {
4132
- disabled,
4133
- type: "button",
4134
- onClick: () => handleDisconnect(relations[index]),
4135
- "aria-label": formatMessage({
4136
- id: getTranslation("relation.disconnect"),
4137
- defaultMessage: "Remove"
4138
- }),
4139
- children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Icon, { width: "12px", as: Icons.Cross })
4140
- }
4141
- ) })
4142
- ]
4143
- }
4144
- )
4145
- }
4146
- );
4147
- };
4148
- const FlexWrapper = styled__default.default(designSystem.Flex)`
4149
- width: 100%;
4150
- /* Used to prevent endAction to be pushed out of container */
4151
- min-width: 0;
4152
-
4153
- & > div[role='button'] {
4154
- cursor: all-scroll;
4155
- }
4156
- `;
4157
- const DisconnectButton = styled__default.default.button`
4158
- svg path {
4159
- fill: ${({ theme, disabled }) => disabled ? theme.colors.neutral600 : theme.colors.neutral500};
4160
- }
4161
-
4162
- &:hover svg path,
4163
- &:focus svg path {
4164
- fill: ${({ theme, disabled }) => !disabled && theme.colors.neutral600};
4165
- }
4166
- `;
4167
- const LinkEllipsis = styled__default.default(v2.Link)`
4168
- display: block;
4169
-
4170
- & > span {
4171
- white-space: nowrap;
4172
- overflow: hidden;
4173
- text-overflow: ellipsis;
4174
- display: block;
4175
- }
4176
- `;
4177
- const RelationItemPlaceholder = () => /* @__PURE__ */ jsxRuntime.jsx(
4178
- designSystem.Box,
4179
- {
4180
- paddingTop: 2,
4181
- paddingBottom: 2,
4182
- paddingLeft: 4,
4183
- paddingRight: 4,
4184
- hasRadius: true,
4185
- borderStyle: "dashed",
4186
- borderColor: "primary600",
4187
- borderWidth: "1px",
4188
- background: "primary100",
4189
- height: `calc(100% - ${RELATION_GUTTER}px)`
4190
- }
4191
- );
4192
-
4193
- const RelationDragPreview = ({ status, displayedValue, width }) => {
4194
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { style: { width }, children: /* @__PURE__ */ jsxRuntime.jsxs(
4195
- designSystem.Flex,
4196
- {
4197
- paddingTop: 2,
4198
- paddingBottom: 2,
4199
- paddingLeft: 2,
4200
- paddingRight: 4,
4201
- hasRadius: true,
4202
- borderWidth: 1,
4203
- background: "neutral0",
4204
- borderColor: "neutral200",
4205
- justifyContent: "space-between",
4206
- children: [
4207
- /* @__PURE__ */ jsxRuntime.jsxs(FlexWrapper, { gap: 1, children: [
4208
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.IconButton, { "aria-label": "", borderWidth: 0, children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Drag, {}) }),
4209
- /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { width: "100%", minWidth: 0, justifyContent: "space-between", children: [
4210
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { minWidth: 0, paddingTop: 1, paddingBottom: 1, paddingRight: 4, children: /* @__PURE__ */ jsxRuntime.jsx(LinkEllipsis, { href: "", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "primary600", ellipsis: true, children: displayedValue }) }) }),
4211
- status ? /* @__PURE__ */ jsxRuntime.jsx(DocumentStatus, { status }) : null
4212
- ] })
4213
- ] }),
4214
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { paddingLeft: 4, children: /* @__PURE__ */ jsxRuntime.jsx(DisconnectButton, { type: "button", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Icon, { width: "12px", as: Icons.Cross }) }) })
4215
- ]
4216
- }
4217
- ) });
4218
- };
4219
-
4220
- const LeftMenu = () => {
4221
- const [search, setSearch] = React__namespace.useState("");
4222
- const [{ query }] = useQueryParams();
4223
- const { formatMessage, locale } = reactIntl.useIntl();
4224
- const collectionTypeLinks = useTypedSelector(
4225
- (state) => state["content-manager_app"].collectionTypeLinks
4226
- );
4227
- const singleTypeLinks = useTypedSelector((state) => state["content-manager_app"].singleTypeLinks);
4228
- const { startsWith } = designSystem.useFilter(locale, {
4229
- sensitivity: "base"
4230
- });
4231
- const formatter = designSystem.useCollator(locale, {
4232
- sensitivity: "base"
4233
- });
4234
- const menu = React__namespace.useMemo(
4235
- () => [
4236
- {
4237
- id: "collectionTypes",
4238
- title: formatMessage({
4239
- id: getTranslation("components.LeftMenu.collection-types"),
4240
- defaultMessage: "Collection Types"
4241
- }),
4242
- searchable: true,
4243
- links: collectionTypeLinks
4244
- },
4245
- {
4246
- id: "singleTypes",
4247
- title: formatMessage({
4248
- id: getTranslation("components.LeftMenu.single-types"),
4249
- defaultMessage: "Single Types"
4250
- }),
4251
- searchable: true,
4252
- links: singleTypeLinks
4253
- }
4254
- ].map((section) => ({
4255
- ...section,
4256
- links: section.links.filter((link) => startsWith(link.title, search)).sort((a, b) => formatter.compare(a.title, b.title)).map((link) => {
4257
- return {
4258
- ...link,
4259
- title: formatMessage({ id: link.title, defaultMessage: link.title })
4260
- };
4261
- })
4262
- })),
4263
- [collectionTypeLinks, search, singleTypeLinks, startsWith, formatMessage, formatter]
4264
- );
4265
- const handleClear = () => {
4266
- setSearch("");
4267
- };
4268
- const handleChangeSearch = ({ target: { value } }) => {
4269
- setSearch(value);
4270
- };
4271
- const label = formatMessage({
4272
- id: getTranslation("header.name"),
4273
- defaultMessage: "Content"
4274
- });
4275
- return /* @__PURE__ */ jsxRuntime.jsxs(v2.SubNav, { ariaLabel: label, children: [
4276
- /* @__PURE__ */ jsxRuntime.jsx(
4277
- v2.SubNavHeader,
4278
- {
4279
- label,
4280
- searchable: true,
4281
- value: search,
4282
- onChange: handleChangeSearch,
4283
- onClear: handleClear,
4284
- searchLabel: formatMessage({
4285
- id: "content-manager.components.LeftMenu.Search.label",
4286
- defaultMessage: "Search for a content type"
4287
- })
4288
- }
4289
- ),
4290
- /* @__PURE__ */ jsxRuntime.jsx(v2.SubNavSections, { children: menu.map((section) => {
4291
- return /* @__PURE__ */ jsxRuntime.jsx(
4292
- v2.SubNavSection,
4293
- {
4294
- label: section.title,
4295
- badgeLabel: section.links.length.toString(),
4296
- children: section.links.map((link) => {
4297
- return /* @__PURE__ */ jsxRuntime.jsx(
4298
- v2.SubNavLink,
4299
- {
4300
- as: reactRouterDom.NavLink,
4301
- to: {
4302
- pathname: link.to,
4303
- /**
4304
- * We re-add the plugins query to the params available in the menu,
4305
- * this means once you've changed the locale in the app, you continue
4306
- * to see the same locale when changing content-type.
4307
- *
4308
- * NOTE: if you go to a content-type that does not have i18n enabled,
4309
- * we return the default documents anyway.
4310
- */
4311
- search: qs.stringify({
4312
- ...qs.parse(link.search ?? ""),
4313
- plugins: query.plugins
4314
- })
4315
- },
4316
- children: link.title
4317
- },
4318
- link.uid
4319
- );
4320
- })
4321
- },
4322
- section.id
4323
- );
4324
- }) })
4325
- ] });
4326
- };
4327
-
4328
- const contentTypesApi = contentManagerApi.injectEndpoints({
4329
- endpoints: (builder) => ({
4330
- getContentTypeConfiguration: builder.query({
4331
- query: (uid) => ({
4332
- url: `/content-manager/content-types/${uid}/configuration`,
4333
- method: "GET"
4334
- }),
4335
- transformResponse: (response) => response.data,
4336
- providesTags: (_result, _error, uid) => [
4337
- { type: "ContentTypesConfiguration", id: uid },
4338
- { type: "ContentTypeSettings", id: "LIST" }
4339
- ]
4340
- }),
4341
- getAllContentTypeSettings: builder.query({
4342
- query: () => "/content-manager/content-types-settings",
4343
- transformResponse: (response) => response.data,
4344
- providesTags: [{ type: "ContentTypeSettings", id: "LIST" }]
4345
- }),
4346
- updateContentTypeConfiguration: builder.mutation({
4347
- query: ({ uid, ...body }) => ({
4348
- url: `/content-manager/content-types/${uid}/configuration`,
4349
- method: "PUT",
4350
- data: body
4351
- }),
4352
- transformResponse: (response) => response.data,
4353
- invalidatesTags: (_result, _error, { uid }) => [
4354
- { type: "ContentTypesConfiguration", id: uid },
4355
- { type: "ContentTypeSettings", id: "LIST" },
4356
- // Is this necessary?
4357
- { type: "InitialData" }
4358
- ]
4359
- })
4360
- })
4361
- });
4362
- const {
4363
- useGetContentTypeConfigurationQuery,
4364
- useGetAllContentTypeSettingsQuery,
4365
- useUpdateContentTypeConfigurationMutation
4366
- } = contentTypesApi;
4367
-
4368
- const { MUTATE_COLLECTION_TYPES_LINKS, MUTATE_SINGLE_TYPES_LINKS } = HOOKS;
4369
- const useContentManagerInitData = () => {
4370
- const dispatch = useTypedDispatch();
4371
- const { toggleNotification } = useNotification();
4372
- const runHookWaterfall = useStrapiApp(
4373
- "useContentManagerInitData",
4374
- (state2) => state2.runHookWaterfall
4375
- );
4376
- const { notifyStatus } = designSystem.useNotifyAT();
4377
- const { formatMessage } = reactIntl.useIntl();
4378
- const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler(getTranslation);
4379
- const checkUserHasPermissions = useAuth(
4380
- "useContentManagerInitData",
4381
- (state2) => state2.checkUserHasPermissions
4382
- );
4383
- const state = useTypedSelector((state2) => state2["content-manager_app"]);
4384
- const initialDataQuery = useGetInitialDataQuery(void 0, {
4385
- /**
4386
- * TODO: remove this when the CTB has been refactored to use redux-toolkit-query
4387
- * and it can invalidate the cache on mutation
4388
- */
4389
- refetchOnMountOrArgChange: true
4390
- });
4391
- React.useEffect(() => {
4392
- if (initialDataQuery.data) {
4393
- notifyStatus(
4394
- formatMessage({
4395
- id: getTranslation("App.schemas.data-loaded"),
4396
- defaultMessage: "The schemas have been successfully loaded."
4397
- })
4398
- );
4399
- }
4400
- }, [formatMessage, initialDataQuery.data, notifyStatus]);
4401
- React.useEffect(() => {
4402
- if (initialDataQuery.error) {
4403
- toggleNotification({ type: "danger", message: formatAPIError(initialDataQuery.error) });
4404
- }
4405
- }, [formatAPIError, initialDataQuery.error, toggleNotification]);
4406
- const contentTypeSettingsQuery = useGetAllContentTypeSettingsQuery();
4407
- React.useEffect(() => {
4408
- if (contentTypeSettingsQuery.error) {
4409
- toggleNotification({
4410
- type: "danger",
4411
- message: formatAPIError(contentTypeSettingsQuery.error)
4412
- });
4413
- }
4414
- }, [formatAPIError, contentTypeSettingsQuery.error, toggleNotification]);
4415
- const formatData = async (components, contentTypes, fieldSizes, contentTypeConfigurations) => {
4416
- const { collectionType: collectionTypeLinks, singleType: singleTypeLinks } = contentTypes.reduce(
4417
- (acc, model) => {
4418
- acc[model.kind].push(model);
4419
- return acc;
4420
- },
4421
- {
4422
- collectionType: [],
4423
- singleType: []
4424
- }
4425
- );
4426
- const collectionTypeSectionLinks = generateLinks(
4427
- collectionTypeLinks,
4428
- "collectionTypes",
4429
- contentTypeConfigurations
4430
- );
4431
- const singleTypeSectionLinks = generateLinks(singleTypeLinks, "singleTypes");
4432
- const collectionTypeLinksPermissions = await Promise.all(
4433
- collectionTypeSectionLinks.map(({ permissions }) => checkUserHasPermissions(permissions))
4434
- );
4435
- const authorizedCollectionTypeLinks = collectionTypeSectionLinks.filter(
4436
- (_, index) => collectionTypeLinksPermissions[index]
4437
- );
4438
- const singleTypeLinksPermissions = await Promise.all(
4439
- singleTypeSectionLinks.map(({ permissions }) => checkUserHasPermissions(permissions))
4440
- );
4441
- const authorizedSingleTypeLinks = singleTypeSectionLinks.filter(
4442
- (_, index) => singleTypeLinksPermissions[index]
4443
- );
4444
- const { ctLinks } = runHookWaterfall(MUTATE_COLLECTION_TYPES_LINKS, {
4445
- ctLinks: authorizedCollectionTypeLinks,
4446
- models: contentTypes
4447
- });
4448
- const { stLinks } = runHookWaterfall(MUTATE_SINGLE_TYPES_LINKS, {
4449
- stLinks: authorizedSingleTypeLinks,
4450
- models: contentTypes
4451
- });
4452
- dispatch({
4453
- type: SET_INIT_DATA,
4454
- authorizedCollectionTypeLinks: ctLinks,
4455
- authorizedSingleTypeLinks: stLinks,
4456
- contentTypeSchemas: contentTypes,
4457
- components,
4458
- fieldSizes
4459
- });
4460
- };
4461
- React.useEffect(() => {
4462
- if (initialDataQuery.data && contentTypeSettingsQuery.data) {
4463
- formatData(
4464
- initialDataQuery.data.components,
4465
- initialDataQuery.data.contentTypes,
4466
- initialDataQuery.data.fieldSizes,
4467
- contentTypeSettingsQuery.data
4468
- );
4469
- }
4470
- }, [initialDataQuery.data, contentTypeSettingsQuery.data]);
4471
- return { ...state };
4472
- };
4473
- const generateLinks = (links, type, configurations = []) => {
4474
- return links.filter((link) => link.isDisplayed).map((link) => {
4475
- const collectionTypesPermissions = [
4476
- { action: "plugin::content-manager.explorer.create", subject: link.uid },
4477
- { action: "plugin::content-manager.explorer.read", subject: link.uid }
4478
- ];
4479
- const singleTypesPermissions = [
4480
- { action: "plugin::content-manager.explorer.read", subject: link.uid }
4481
- ];
4482
- const permissions = type === "collectionTypes" ? collectionTypesPermissions : singleTypesPermissions;
4483
- const currentContentTypeConfig = configurations.find(({ uid }) => uid === link.uid);
4484
- let search = null;
4485
- if (currentContentTypeConfig) {
4486
- const searchParams = {
4487
- page: 1,
4488
- pageSize: currentContentTypeConfig.settings.pageSize,
4489
- sort: `${currentContentTypeConfig.settings.defaultSortBy}:${currentContentTypeConfig.settings.defaultSortOrder}`
4490
- };
4491
- search = qs.stringify(searchParams, { encode: false });
4492
- }
4493
- return {
4494
- permissions,
4495
- search,
4496
- kind: link.kind,
4497
- title: link.info.displayName,
4498
- to: `/content-manager/${link.kind === "collectionType" ? COLLECTION_TYPES : SINGLE_TYPES}/${link.uid}`,
4499
- uid: link.uid,
4500
- // Used for the list item key in the helper plugin
4501
- name: link.uid,
4502
- isDisplayed: link.isDisplayed
4503
- };
4504
- });
4505
- };
4506
-
4507
- const Layout = () => {
4508
- const contentTypeMatch = reactRouterDom.useMatch("/content-manager/:kind/:uid/*");
4509
- const { isLoading, collectionTypeLinks, models, singleTypeLinks } = useContentManagerInitData();
4510
- const authorisedModels = [...collectionTypeLinks, ...singleTypeLinks].sort(
4511
- (a, b) => a.title.localeCompare(b.title)
4512
- );
4513
- const { pathname } = reactRouterDom.useLocation();
4514
- const { formatMessage } = reactIntl.useIntl();
4515
- const startSection = useGuidedTour("Layout", (state) => state.startSection);
4516
- const startSectionRef = React__namespace.useRef(startSection);
4517
- const isHistoryRoute = useIsHistoryRoute();
4518
- React__namespace.useEffect(() => {
4519
- if (startSectionRef.current) {
4520
- startSectionRef.current("contentManager");
4521
- }
4522
- }, []);
4523
- if (isLoading) {
4524
- return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
4525
- /* @__PURE__ */ jsxRuntime.jsx(
4526
- reactHelmet.Helmet,
4527
- {
4528
- title: formatMessage({
4529
- id: getTranslation("plugin.name"),
4530
- defaultMessage: "Content Manager"
4531
- })
4532
- }
4533
- ),
4534
- /* @__PURE__ */ jsxRuntime.jsx(Page.Loading, {})
4535
- ] });
4536
- }
4537
- const supportedModelsToDisplay = models.filter(({ isDisplayed }) => isDisplayed);
4538
- if (authorisedModels.length === 0 && supportedModelsToDisplay.length > 0 && pathname !== "/content-manager/403") {
4539
- return /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Navigate, { to: "/403" });
4540
- }
4541
- if (supportedModelsToDisplay.length === 0 && pathname !== "/no-content-types") {
4542
- return /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Navigate, { to: "/no-content-types" });
4543
- }
4544
- if (!contentTypeMatch && authorisedModels.length > 0) {
4545
- return /* @__PURE__ */ jsxRuntime.jsx(
4546
- reactRouterDom.Navigate,
4547
- {
4548
- to: {
4549
- pathname: authorisedModels[0].to,
4550
- search: authorisedModels[0].search ?? ""
4551
- }
4552
- }
4553
- );
4554
- }
4555
- return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
4556
- /* @__PURE__ */ jsxRuntime.jsx(
4557
- reactHelmet.Helmet,
4558
- {
4559
- title: formatMessage({
4560
- id: getTranslation("plugin.name"),
4561
- defaultMessage: "Content Manager"
4562
- })
4563
- }
4564
- ),
4565
- isHistoryRoute ? /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Outlet, {}) : /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Layout, { sideNav: /* @__PURE__ */ jsxRuntime.jsx(LeftMenu, {}), children: [
4566
- /* @__PURE__ */ jsxRuntime.jsx(DragLayer, { renderItem: renderDraglayerItem }),
4567
- /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Outlet, {})
4568
- ] })
4569
- ] });
4570
- };
4571
- function renderDraglayerItem({ type, item }) {
4572
- if (!type || type && typeof type !== "string") {
4573
- return null;
4574
- }
4575
- const [actualType] = type.split("_");
4576
- switch (actualType) {
4577
- case ItemTypes.EDIT_FIELD:
4578
- case ItemTypes.FIELD:
4579
- return /* @__PURE__ */ jsxRuntime.jsx(CardDragPreview, { label: item.label });
4580
- case ItemTypes.COMPONENT:
4581
- case ItemTypes.DYNAMIC_ZONE:
4582
- return /* @__PURE__ */ jsxRuntime.jsx(ComponentDragPreview, { displayedValue: item.displayedValue });
4583
- case ItemTypes.RELATION:
4584
- return /* @__PURE__ */ jsxRuntime.jsx(RelationDragPreview, { ...item });
4585
- default:
4586
- return null;
4587
- }
4588
- }
4589
- const SET_INIT_DATA = "ContentManager/App/SET_INIT_DATA";
4590
- const initialState$1 = {
4591
- collectionTypeLinks: [],
4592
- components: [],
4593
- fieldSizes: {},
4594
- models: [],
4595
- singleTypeLinks: [],
4596
- isLoading: true
4597
- };
4598
- const reducer$2 = (state = initialState$1, action) => immer.produce(state, (draftState) => {
4599
- switch (action.type) {
4600
- case SET_INIT_DATA: {
4601
- const initDataAction = action;
4602
- draftState.collectionTypeLinks = initDataAction.authorizedCollectionTypeLinks.filter(
4603
- ({ isDisplayed }) => isDisplayed
4604
- );
4605
- draftState.singleTypeLinks = initDataAction.authorizedSingleTypeLinks.filter(
4606
- ({ isDisplayed }) => isDisplayed
4607
- );
4608
- draftState.components = initDataAction.components;
4609
- draftState.models = initDataAction.contentTypeSchemas;
4610
- draftState.fieldSizes = initDataAction.fieldSizes;
4611
- draftState.isLoading = false;
4612
- break;
4613
- }
4614
- default:
4615
- return draftState;
4616
- }
4617
- });
4618
-
4619
- const layout = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
4620
- __proto__: null,
4621
- Layout,
4622
- SET_INIT_DATA,
4623
- reducer: reducer$2
4624
- }, Symbol.toStringTag, { value: 'Module' }));
4625
-
4626
- const initialState = {
4627
- permissions: void 0
4628
- };
4629
- const rbacSlice = toolkit.createSlice({
4630
- name: "rbac",
4631
- initialState,
4632
- reducers: {
4633
- setPermissions(state, action) {
4634
- state.permissions = Object.values(action.payload.permissions).reduce((acc, current) => {
4635
- return [...acc, ...current];
4636
- }, []);
4637
- },
4638
- resetPermissions(state) {
4639
- state.permissions = void 0;
4640
- }
4641
- }
4642
- });
4643
- const { actions, reducer: reducer$1 } = rbacSlice;
4644
- const { setPermissions, resetPermissions } = actions;
4645
-
4646
- const reducer = toolkit.combineReducers({
4647
- rbac: reducer$1
4648
- });
4649
-
4650
- exports.ADMIN_PERMISSIONS_CE = ADMIN_PERMISSIONS_CE;
4651
- exports.ATTRIBUTE_TYPES_THAT_CANNOT_BE_MAIN_FIELD = ATTRIBUTE_TYPES_THAT_CANNOT_BE_MAIN_FIELD;
4652
- exports.AppInfoProvider = AppInfoProvider;
4653
- exports.AuthProvider = AuthProvider;
4654
- exports.Blocker = Blocker;
4655
- exports.COLLECTION_TYPES = COLLECTION_TYPES;
4656
- exports.CREATED_AT_ATTRIBUTE_NAME = CREATED_AT_ATTRIBUTE_NAME;
4657
- exports.CREATED_BY_ATTRIBUTE_NAME = CREATED_BY_ATTRIBUTE_NAME;
4658
- exports.CREATOR_FIELDS = CREATOR_FIELDS;
4659
- exports.CardDragPreview = CardDragPreview;
4660
- exports.ComponentProvider = ComponentProvider;
4661
- exports.ConfigurationContextProvider = ConfigurationContextProvider;
4662
- exports.ConfigurationProvider = ConfigurationProvider;
4663
- exports.DIRECTIONS = DIRECTIONS;
4664
- exports.DOCUMENT_META_FIELDS = DOCUMENT_META_FIELDS;
4665
- exports.DocumentStatus = DocumentStatus;
4666
- exports.DragLayer = DragLayer;
4667
- exports.Form = Form;
4668
- exports.GuidedTourProvider = GuidedTourProvider;
4669
- exports.HOOKS = HOOKS;
4670
- exports.ItemTypes = ItemTypes;
4671
- exports.LANGUAGE_LOCAL_STORAGE_KEY = LANGUAGE_LOCAL_STORAGE_KEY;
4672
- exports.LanguageProvider = LanguageProvider;
4673
- exports.NotificationsProvider = NotificationsProvider;
4674
- exports.PUBLISHED_AT_ATTRIBUTE_NAME = PUBLISHED_AT_ATTRIBUTE_NAME;
4675
- exports.PUBLISHED_BY_ATTRIBUTE_NAME = PUBLISHED_BY_ATTRIBUTE_NAME;
4676
- exports.Page = Page;
4677
- exports.RelationsField = RelationsField;
4678
- exports.SETTINGS_LINKS_CE = SETTINGS_LINKS_CE;
4679
- exports.SINGLE_TYPES = SINGLE_TYPES;
4680
- exports.StrapiAppProvider = StrapiAppProvider;
4681
- exports.THEME_LOCAL_STORAGE_KEY = THEME_LOCAL_STORAGE_KEY;
4682
- exports.Theme = Theme;
4683
- exports.TrackingProvider = TrackingProvider;
4684
- exports.UPDATED_AT_ATTRIBUTE_NAME = UPDATED_AT_ATTRIBUTE_NAME;
4685
- exports.UPDATED_BY_ATTRIBUTE_NAME = UPDATED_BY_ATTRIBUTE_NAME;
4686
- exports.adminApi = adminApi;
4687
- exports.buildValidParams = buildValidParams;
4688
- exports.capitalise = capitalise;
4689
- exports.contentManagerApi = contentManagerApi;
4690
- exports.createContext = createContext;
4691
- exports.createTypedSelector = createTypedSelector;
4692
- exports.createYupSchema = createYupSchema;
4693
- exports.errorsTrads = errorsTrads;
4694
- exports.extractContentTypeComponents = extractContentTypeComponents;
4695
- exports.getFetchClient = getFetchClient;
4696
- exports.getIn = getIn;
4697
- exports.getRelationLabel = getRelationLabel;
4698
- exports.getTranslation = getTranslation;
4699
- exports.isBaseQueryError = isBaseQueryError;
4700
- exports.isObject = isObject;
4701
- exports.layout = layout;
4702
- exports.prefixFileUrlWithBackendUrl = prefixFileUrlWithBackendUrl;
4703
- exports.reducer = reducer$5;
4704
- exports.reducer$1 = reducer$2;
4705
- exports.reducer$2 = reducer;
4706
- exports.resetPermissions = resetPermissions;
4707
- exports.routes = routes;
4708
- exports.setAppTheme = setAppTheme;
4709
- exports.setIn = setIn;
4710
- exports.setLocale = setLocale;
4711
- exports.setPermissions = setPermissions;
4712
- exports.useAPIErrorHandler = useAPIErrorHandler;
4713
- exports.useAppInfo = useAppInfo;
4714
- exports.useAuth = useAuth;
4715
- exports.useAutoCloneDocumentMutation = useAutoCloneDocumentMutation;
4716
- exports.useCloneDocumentMutation = useCloneDocumentMutation;
4717
- exports.useComponent = useComponent;
4718
- exports.useConfiguration = useConfiguration;
4719
- exports.useContentTypeSchema = useContentTypeSchema;
4720
- exports.useCreateDocumentMutation = useCreateDocumentMutation;
4721
- exports.useDeleteDocumentMutation = useDeleteDocumentMutation;
4722
- exports.useDiscardDocumentMutation = useDiscardDocumentMutation;
4723
- exports.useDoc = useDoc;
4724
- exports.useDocument = useDocument;
4725
- exports.useDragAndDrop = useDragAndDrop;
4726
- exports.useField = useField;
4727
- exports.useFocusInputField = useFocusInputField;
4728
- exports.useForgotPasswordMutation = useForgotPasswordMutation;
4729
- exports.useForm = useForm;
4730
- exports.useGetAllDocumentsQuery = useGetAllDocumentsQuery;
4731
- exports.useGetContentTypeConfigurationQuery = useGetContentTypeConfigurationQuery;
4732
- exports.useGetInitialDataQuery = useGetInitialDataQuery;
4733
- exports.useGetLicenseLimitsQuery = useGetLicenseLimitsQuery;
4734
- exports.useGetPluginsQuery = useGetPluginsQuery;
4735
- exports.useGetProviderOptionsQuery = useGetProviderOptionsQuery;
4736
- exports.useGetProvidersQuery = useGetProvidersQuery;
4737
- exports.useGetRegistrationInfoQuery = useGetRegistrationInfoQuery;
4738
- exports.useGetRelationsQuery = useGetRelationsQuery;
4739
- exports.useGuidedTour = useGuidedTour;
4740
- exports.useInformationQuery = useInformationQuery;
4741
- exports.useInitQuery = useInitQuery;
4742
- exports.useIsHistoryRoute = useIsHistoryRoute;
4743
- exports.useIsSSOLockedQuery = useIsSSOLockedQuery;
4744
- exports.useLazyGetDocumentQuery = useLazyGetDocumentQuery;
4745
- exports.useNotification = useNotification;
4746
- exports.usePrev = usePrev;
4747
- exports.usePublishDocumentMutation = usePublishDocumentMutation;
4748
- exports.useQueryParams = useQueryParams;
4749
- exports.useRBAC = useRBAC;
4750
- exports.useRegenerateTokenMutation = useRegenerateTokenMutation;
4751
- exports.useRegisterAdminMutation = useRegisterAdminMutation;
4752
- exports.useRegisterUserMutation = useRegisterUserMutation;
4753
- exports.useResetPasswordMutation = useResetPasswordMutation;
4754
- exports.useStrapiApp = useStrapiApp;
4755
- exports.useTracking = useTracking;
4756
- exports.useTypedDispatch = useTypedDispatch;
4757
- exports.useTypedSelector = useTypedSelector;
4758
- exports.useTypedStore = useTypedStore;
4759
- exports.useUnpublishDocumentMutation = useUnpublishDocumentMutation;
4760
- exports.useUpdateContentTypeConfigurationMutation = useUpdateContentTypeConfigurationMutation;
4761
- exports.useUpdateDocumentMutation = useUpdateDocumentMutation;
4762
- exports.useUpdateMeMutation = useUpdateMeMutation;
4763
- exports.useUpdateProviderOptionsMutation = useUpdateProviderOptionsMutation;
4764
- //# sourceMappingURL=reducers-wZUQqmNX.js.map