@strapi/content-manager 0.0.0-experimental.e60ec1829240dae21c1e1d29076681c322288813 → 0.0.0-experimental.e8d8fc824d0f6a695b2a9ebaa4680ed21c3645ca

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 (257) hide show
  1. package/LICENSE +18 -3
  2. package/dist/_chunks/{CardDragPreview-DSVYodBX.js → CardDragPreview-C0QyJgRA.js} +10 -14
  3. package/dist/_chunks/CardDragPreview-C0QyJgRA.js.map +1 -0
  4. package/dist/_chunks/{CardDragPreview-ikSG4M46.mjs → CardDragPreview-DOxamsuj.mjs} +7 -9
  5. package/dist/_chunks/CardDragPreview-DOxamsuj.mjs.map +1 -0
  6. package/dist/_chunks/{ComponentConfigurationPage-DjWJdz6Y.js → ComponentConfigurationPage-BlzvDpbX.js} +5 -6
  7. package/dist/_chunks/{ComponentConfigurationPage-DjWJdz6Y.js.map → ComponentConfigurationPage-BlzvDpbX.js.map} +1 -1
  8. package/dist/_chunks/{ComponentConfigurationPage-BPvzFjM7.mjs → ComponentConfigurationPage-DaPOlQaD.mjs} +4 -4
  9. package/dist/_chunks/{ComponentConfigurationPage-BPvzFjM7.mjs.map → ComponentConfigurationPage-DaPOlQaD.mjs.map} +1 -1
  10. package/dist/_chunks/{ComponentIcon-BBQsYCVn.js → ComponentIcon-CRbtQEUV.js} +9 -4
  11. package/dist/_chunks/ComponentIcon-CRbtQEUV.js.map +1 -0
  12. package/dist/_chunks/{ComponentIcon-BOFnK76n.mjs → ComponentIcon-u4bIXTFY.mjs} +9 -3
  13. package/dist/_chunks/ComponentIcon-u4bIXTFY.mjs.map +1 -0
  14. package/dist/_chunks/{EditConfigurationPage-DacbqQ_f.mjs → EditConfigurationPage-BZPXItXo.mjs} +4 -4
  15. package/dist/_chunks/{EditConfigurationPage-DacbqQ_f.mjs.map → EditConfigurationPage-BZPXItXo.mjs.map} +1 -1
  16. package/dist/_chunks/{EditConfigurationPage-Dmv83RlS.js → EditConfigurationPage-uy-v43AR.js} +5 -6
  17. package/dist/_chunks/{EditConfigurationPage-Dmv83RlS.js.map → EditConfigurationPage-uy-v43AR.js.map} +1 -1
  18. package/dist/_chunks/{EditViewPage-DvNpQkam.js → EditViewPage-DT6A4ayX.js} +102 -54
  19. package/dist/_chunks/EditViewPage-DT6A4ayX.js.map +1 -0
  20. package/dist/_chunks/EditViewPage-oOLeTySr.mjs +254 -0
  21. package/dist/_chunks/EditViewPage-oOLeTySr.mjs.map +1 -0
  22. package/dist/_chunks/{Field-6gvGdPBV.mjs → Field-D7dv2aUX.mjs} +1192 -896
  23. package/dist/_chunks/Field-D7dv2aUX.mjs.map +1 -0
  24. package/dist/_chunks/{Field-DmVKIAOo.js → Field-kYFVIGiP.js} +1238 -943
  25. package/dist/_chunks/Field-kYFVIGiP.js.map +1 -0
  26. package/dist/_chunks/FieldTypeIcon-CMlNO8PE.mjs.map +1 -1
  27. package/dist/_chunks/FieldTypeIcon-Dnwq_IRF.js.map +1 -1
  28. package/dist/_chunks/{Form-DW6K1IH-.mjs → Form-BxR6sc29.mjs} +67 -46
  29. package/dist/_chunks/Form-BxR6sc29.mjs.map +1 -0
  30. package/dist/_chunks/{Form-CPZC9vWa.js → Form-CCijSg3V.js} +68 -49
  31. package/dist/_chunks/Form-CCijSg3V.js.map +1 -0
  32. package/dist/_chunks/{History-DeAPlvtv.js → History-BMndx49M.js} +182 -147
  33. package/dist/_chunks/History-BMndx49M.js.map +1 -0
  34. package/dist/_chunks/{History-Dmr9fmUA.mjs → History-D8F7aYQU.mjs} +181 -144
  35. package/dist/_chunks/History-D8F7aYQU.mjs.map +1 -0
  36. package/dist/_chunks/{ListConfigurationPage-DPCwW5Vr.js → ListConfigurationPage-DouY1EWM.js} +72 -63
  37. package/dist/_chunks/ListConfigurationPage-DouY1EWM.js.map +1 -0
  38. package/dist/_chunks/{ListConfigurationPage-DhwvYcNv.mjs → ListConfigurationPage-DqAdSPwC.mjs} +68 -57
  39. package/dist/_chunks/ListConfigurationPage-DqAdSPwC.mjs.map +1 -0
  40. package/dist/_chunks/{ListViewPage-5ySZ-VUs.js → ListViewPage-BPVmh9pq.js} +179 -164
  41. package/dist/_chunks/ListViewPage-BPVmh9pq.js.map +1 -0
  42. package/dist/_chunks/{ListViewPage-BtAwuYLE.mjs → ListViewPage-C73F0jPh.mjs} +175 -159
  43. package/dist/_chunks/ListViewPage-C73F0jPh.mjs.map +1 -0
  44. package/dist/_chunks/{NoContentTypePage-DSPxnxxp.mjs → NoContentTypePage-B5w7iJOF.mjs} +3 -3
  45. package/dist/_chunks/NoContentTypePage-B5w7iJOF.mjs.map +1 -0
  46. package/dist/_chunks/{NoContentTypePage-DOC_yWOf.js → NoContentTypePage-BwcL--4H.js} +3 -3
  47. package/dist/_chunks/NoContentTypePage-BwcL--4H.js.map +1 -0
  48. package/dist/_chunks/{NoPermissionsPage-Dwu8rRJu.js → NoPermissionsPage-BMFKVcwJ.js} +2 -2
  49. package/dist/_chunks/{NoPermissionsPage-Dwu8rRJu.js.map → NoPermissionsPage-BMFKVcwJ.js.map} +1 -1
  50. package/dist/_chunks/{NoPermissionsPage-UWDC-1Tw.mjs → NoPermissionsPage-UnEgMGK4.mjs} +2 -2
  51. package/dist/_chunks/{NoPermissionsPage-UWDC-1Tw.mjs.map → NoPermissionsPage-UnEgMGK4.mjs.map} +1 -1
  52. package/dist/_chunks/Preview-B7PR3Ok_.js +312 -0
  53. package/dist/_chunks/Preview-B7PR3Ok_.js.map +1 -0
  54. package/dist/_chunks/Preview-DECOhK0D.mjs +294 -0
  55. package/dist/_chunks/Preview-DECOhK0D.mjs.map +1 -0
  56. package/dist/_chunks/{Relations-J8cscLlR.mjs → Relations-DinMQJ4B.mjs} +138 -94
  57. package/dist/_chunks/Relations-DinMQJ4B.mjs.map +1 -0
  58. package/dist/_chunks/{Relations-CgWtgnPe.js → Relations-lndx3aQk.js} +142 -100
  59. package/dist/_chunks/Relations-lndx3aQk.js.map +1 -0
  60. package/dist/_chunks/{en-C-V1_90f.js → en-BK8Xyl5I.js} +38 -18
  61. package/dist/_chunks/{en-C-V1_90f.js.map → en-BK8Xyl5I.js.map} +1 -1
  62. package/dist/_chunks/{en-MBPul9Su.mjs → en-Dtk_ot79.mjs} +38 -18
  63. package/dist/_chunks/{en-MBPul9Su.mjs.map → en-Dtk_ot79.mjs.map} +1 -1
  64. package/dist/_chunks/{es-EUonQTon.js → es-9K52xZIr.js} +2 -2
  65. package/dist/_chunks/{ja-CcFe8diO.js.map → es-9K52xZIr.js.map} +1 -1
  66. package/dist/_chunks/{es-CeXiYflN.mjs → es-D34tqjMw.mjs} +2 -2
  67. package/dist/_chunks/{es-CeXiYflN.mjs.map → es-D34tqjMw.mjs.map} +1 -1
  68. package/dist/_chunks/{fr-CD9VFbPM.mjs → fr--pg5jUbt.mjs} +13 -3
  69. package/dist/_chunks/{fr-CD9VFbPM.mjs.map → fr--pg5jUbt.mjs.map} +1 -1
  70. package/dist/_chunks/{fr-B7kGGg3E.js → fr-B2Kyv8Z9.js} +13 -3
  71. package/dist/_chunks/{fr-B7kGGg3E.js.map → fr-B2Kyv8Z9.js.map} +1 -1
  72. package/dist/_chunks/hooks-BAaaKPS_.js.map +1 -1
  73. package/dist/_chunks/{index-CwRRo1V9.mjs → index-C2SagWVW.mjs} +2070 -988
  74. package/dist/_chunks/index-C2SagWVW.mjs.map +1 -0
  75. package/dist/_chunks/{index-C6AH2hEl.js → index-Cnw4gqee.js} +2047 -966
  76. package/dist/_chunks/index-Cnw4gqee.js.map +1 -0
  77. package/dist/_chunks/{ja-CcFe8diO.js → ja-7sfIbjxE.js} +2 -2
  78. package/dist/_chunks/{es-EUonQTon.js.map → ja-7sfIbjxE.js.map} +1 -1
  79. package/dist/_chunks/{ja-CtsUxOvk.mjs → ja-BHqhDq4V.mjs} +2 -2
  80. package/dist/_chunks/{ja-CtsUxOvk.mjs.map → ja-BHqhDq4V.mjs.map} +1 -1
  81. package/dist/_chunks/{layout-jIDzX0Fp.mjs → layout-DY_D9MGA.mjs} +46 -28
  82. package/dist/_chunks/layout-DY_D9MGA.mjs.map +1 -0
  83. package/dist/_chunks/{layout-B_SXLhqf.js → layout-ivwIVPnV.js} +47 -32
  84. package/dist/_chunks/layout-ivwIVPnV.js.map +1 -0
  85. package/dist/_chunks/{objects-gigeqt7s.js → objects-BcXOv6_9.js} +2 -4
  86. package/dist/_chunks/{objects-gigeqt7s.js.map → objects-BcXOv6_9.js.map} +1 -1
  87. package/dist/_chunks/{objects-mKMAmfec.mjs → objects-D6yBsdmx.mjs} +2 -4
  88. package/dist/_chunks/{objects-mKMAmfec.mjs.map → objects-D6yBsdmx.mjs.map} +1 -1
  89. package/dist/_chunks/{relations-iBMa_OFG.js → relations-B7C7O_Pv.js} +6 -7
  90. package/dist/_chunks/relations-B7C7O_Pv.js.map +1 -0
  91. package/dist/_chunks/{relations-CuvIgCqI.mjs → relations-Boc5Y9kX.mjs} +6 -7
  92. package/dist/_chunks/relations-Boc5Y9kX.mjs.map +1 -0
  93. package/dist/_chunks/useDebounce-CtcjDB3L.js +28 -0
  94. package/dist/_chunks/useDebounce-CtcjDB3L.js.map +1 -0
  95. package/dist/_chunks/useDebounce-DmuSJIF3.mjs +29 -0
  96. package/dist/_chunks/useDebounce-DmuSJIF3.mjs.map +1 -0
  97. package/dist/_chunks/{useDragAndDrop-J0TUUbR6.js → useDragAndDrop-BMtgCYzL.js} +5 -9
  98. package/dist/_chunks/useDragAndDrop-BMtgCYzL.js.map +1 -0
  99. package/dist/_chunks/{useDragAndDrop-DdHgKsqq.mjs → useDragAndDrop-DJ6jqvZN.mjs} +4 -7
  100. package/dist/_chunks/useDragAndDrop-DJ6jqvZN.mjs.map +1 -0
  101. package/dist/admin/index.js +3 -1
  102. package/dist/admin/index.js.map +1 -1
  103. package/dist/admin/index.mjs +9 -7
  104. package/dist/admin/src/components/ComponentIcon.d.ts +6 -3
  105. package/dist/admin/src/content-manager.d.ts +6 -5
  106. package/dist/admin/src/exports.d.ts +2 -1
  107. package/dist/admin/src/history/components/VersionInputRenderer.d.ts +1 -1
  108. package/dist/admin/src/history/index.d.ts +3 -0
  109. package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
  110. package/dist/admin/src/hooks/useDocument.d.ts +37 -9
  111. package/dist/admin/src/hooks/useDocumentActions.d.ts +24 -3
  112. package/dist/admin/src/hooks/useDocumentLayout.d.ts +2 -2
  113. package/dist/admin/src/hooks/useDragAndDrop.d.ts +4 -4
  114. package/dist/admin/src/hooks/useKeyboardDragAndDrop.d.ts +1 -1
  115. package/dist/admin/src/index.d.ts +1 -0
  116. package/dist/admin/src/pages/EditView/EditViewPage.d.ts +9 -1
  117. package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +12 -5
  118. package/dist/admin/src/pages/EditView/components/DocumentStatus.d.ts +2 -2
  119. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.d.ts +7 -0
  120. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/utils/prismLanguages.d.ts +49 -0
  121. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.d.ts +3 -3
  122. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/constants.d.ts +5 -0
  123. package/dist/admin/src/pages/EditView/components/FormInputs/Component/Input.d.ts +2 -2
  124. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.d.ts +3 -5
  125. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.d.ts +1 -1
  126. package/dist/admin/src/pages/EditView/components/FormInputs/Relations.d.ts +30 -18
  127. package/dist/admin/src/pages/EditView/components/FormInputs/UID.d.ts +2 -2
  128. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.d.ts +3 -49
  129. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/Field.d.ts +2 -2
  130. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.d.ts +2 -2
  131. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.d.ts +16 -53
  132. package/dist/admin/src/pages/EditView/components/Header.d.ts +11 -11
  133. package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +2 -10
  134. package/dist/admin/src/pages/ListView/components/BulkActions/Actions.d.ts +3 -30
  135. package/dist/admin/src/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.d.ts +2 -2
  136. package/dist/admin/src/pages/ListView/components/BulkActions/PublishAction.d.ts +9 -26
  137. package/dist/admin/src/preview/components/PreviewContent.d.ts +2 -0
  138. package/dist/admin/src/preview/components/PreviewHeader.d.ts +2 -0
  139. package/dist/admin/src/preview/components/PreviewSidePanel.d.ts +3 -0
  140. package/dist/admin/src/preview/index.d.ts +4 -0
  141. package/dist/admin/src/preview/pages/Preview.d.ts +11 -0
  142. package/dist/admin/src/preview/routes.d.ts +3 -0
  143. package/dist/admin/src/preview/services/preview.d.ts +3 -0
  144. package/dist/admin/src/router.d.ts +1 -1
  145. package/dist/admin/src/services/api.d.ts +2 -3
  146. package/dist/admin/src/services/components.d.ts +2 -2
  147. package/dist/admin/src/services/contentTypes.d.ts +5 -5
  148. package/dist/admin/src/services/documents.d.ts +31 -20
  149. package/dist/admin/src/services/init.d.ts +2 -2
  150. package/dist/admin/src/services/relations.d.ts +3 -3
  151. package/dist/admin/src/services/uid.d.ts +3 -3
  152. package/dist/admin/src/utils/api.d.ts +4 -18
  153. package/dist/admin/src/utils/validation.d.ts +5 -7
  154. package/dist/server/index.js +886 -480
  155. package/dist/server/index.js.map +1 -1
  156. package/dist/server/index.mjs +892 -485
  157. package/dist/server/index.mjs.map +1 -1
  158. package/dist/server/src/bootstrap.d.ts.map +1 -1
  159. package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
  160. package/dist/server/src/controllers/index.d.ts.map +1 -1
  161. package/dist/server/src/controllers/relations.d.ts.map +1 -1
  162. package/dist/server/src/controllers/single-types.d.ts.map +1 -1
  163. package/dist/server/src/controllers/uid.d.ts.map +1 -1
  164. package/dist/server/src/controllers/utils/metadata.d.ts +23 -0
  165. package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -0
  166. package/dist/server/src/controllers/validation/dimensions.d.ts +11 -0
  167. package/dist/server/src/controllers/validation/dimensions.d.ts.map +1 -0
  168. package/dist/server/src/controllers/validation/index.d.ts +1 -1
  169. package/dist/server/src/history/services/history.d.ts.map +1 -1
  170. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  171. package/dist/server/src/history/services/utils.d.ts +4 -4
  172. package/dist/server/src/history/services/utils.d.ts.map +1 -1
  173. package/dist/server/src/index.d.ts +22 -42
  174. package/dist/server/src/index.d.ts.map +1 -1
  175. package/dist/server/src/policies/hasPermissions.d.ts.map +1 -1
  176. package/dist/server/src/preview/controllers/index.d.ts +2 -0
  177. package/dist/server/src/preview/controllers/index.d.ts.map +1 -0
  178. package/dist/server/src/preview/controllers/preview.d.ts +13 -0
  179. package/dist/server/src/preview/controllers/preview.d.ts.map +1 -0
  180. package/dist/server/src/preview/controllers/validation/preview.d.ts +6 -0
  181. package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -0
  182. package/dist/server/src/preview/index.d.ts +4 -0
  183. package/dist/server/src/preview/index.d.ts.map +1 -0
  184. package/dist/server/src/preview/routes/index.d.ts +8 -0
  185. package/dist/server/src/preview/routes/index.d.ts.map +1 -0
  186. package/dist/server/src/preview/routes/preview.d.ts +4 -0
  187. package/dist/server/src/preview/routes/preview.d.ts.map +1 -0
  188. package/dist/server/src/preview/services/index.d.ts +16 -0
  189. package/dist/server/src/preview/services/index.d.ts.map +1 -0
  190. package/dist/server/src/preview/services/preview-config.d.ts +32 -0
  191. package/dist/server/src/preview/services/preview-config.d.ts.map +1 -0
  192. package/dist/server/src/preview/services/preview.d.ts +12 -0
  193. package/dist/server/src/preview/services/preview.d.ts.map +1 -0
  194. package/dist/server/src/preview/utils.d.ts +19 -0
  195. package/dist/server/src/preview/utils.d.ts.map +1 -0
  196. package/dist/server/src/register.d.ts.map +1 -1
  197. package/dist/server/src/routes/index.d.ts.map +1 -1
  198. package/dist/server/src/services/document-manager.d.ts +13 -12
  199. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  200. package/dist/server/src/services/document-metadata.d.ts +16 -35
  201. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  202. package/dist/server/src/services/index.d.ts +22 -42
  203. package/dist/server/src/services/index.d.ts.map +1 -1
  204. package/dist/server/src/services/permission-checker.d.ts.map +1 -1
  205. package/dist/server/src/services/utils/populate.d.ts +8 -1
  206. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  207. package/dist/server/src/utils/index.d.ts +2 -0
  208. package/dist/server/src/utils/index.d.ts.map +1 -1
  209. package/dist/shared/contracts/collection-types.d.ts +17 -7
  210. package/dist/shared/contracts/collection-types.d.ts.map +1 -1
  211. package/dist/shared/contracts/index.d.ts +1 -0
  212. package/dist/shared/contracts/index.d.ts.map +1 -1
  213. package/dist/shared/contracts/preview.d.ts +27 -0
  214. package/dist/shared/contracts/preview.d.ts.map +1 -0
  215. package/dist/shared/contracts/relations.d.ts +2 -2
  216. package/dist/shared/contracts/relations.d.ts.map +1 -1
  217. package/dist/shared/index.js +4 -0
  218. package/dist/shared/index.js.map +1 -1
  219. package/dist/shared/index.mjs +4 -0
  220. package/dist/shared/index.mjs.map +1 -1
  221. package/package.json +22 -21
  222. package/dist/_chunks/CardDragPreview-DSVYodBX.js.map +0 -1
  223. package/dist/_chunks/CardDragPreview-ikSG4M46.mjs.map +0 -1
  224. package/dist/_chunks/ComponentIcon-BBQsYCVn.js.map +0 -1
  225. package/dist/_chunks/ComponentIcon-BOFnK76n.mjs.map +0 -1
  226. package/dist/_chunks/EditViewPage-DDS6H9HO.mjs +0 -203
  227. package/dist/_chunks/EditViewPage-DDS6H9HO.mjs.map +0 -1
  228. package/dist/_chunks/EditViewPage-DvNpQkam.js.map +0 -1
  229. package/dist/_chunks/Field-6gvGdPBV.mjs.map +0 -1
  230. package/dist/_chunks/Field-DmVKIAOo.js.map +0 -1
  231. package/dist/_chunks/Form-CPZC9vWa.js.map +0 -1
  232. package/dist/_chunks/Form-DW6K1IH-.mjs.map +0 -1
  233. package/dist/_chunks/History-DeAPlvtv.js.map +0 -1
  234. package/dist/_chunks/History-Dmr9fmUA.mjs.map +0 -1
  235. package/dist/_chunks/ListConfigurationPage-DPCwW5Vr.js.map +0 -1
  236. package/dist/_chunks/ListConfigurationPage-DhwvYcNv.mjs.map +0 -1
  237. package/dist/_chunks/ListViewPage-5ySZ-VUs.js.map +0 -1
  238. package/dist/_chunks/ListViewPage-BtAwuYLE.mjs.map +0 -1
  239. package/dist/_chunks/NoContentTypePage-DOC_yWOf.js.map +0 -1
  240. package/dist/_chunks/NoContentTypePage-DSPxnxxp.mjs.map +0 -1
  241. package/dist/_chunks/Relations-CgWtgnPe.js.map +0 -1
  242. package/dist/_chunks/Relations-J8cscLlR.mjs.map +0 -1
  243. package/dist/_chunks/index-C6AH2hEl.js.map +0 -1
  244. package/dist/_chunks/index-CwRRo1V9.mjs.map +0 -1
  245. package/dist/_chunks/layout-B_SXLhqf.js.map +0 -1
  246. package/dist/_chunks/layout-jIDzX0Fp.mjs.map +0 -1
  247. package/dist/_chunks/relations-CuvIgCqI.mjs.map +0 -1
  248. package/dist/_chunks/relations-iBMa_OFG.js.map +0 -1
  249. package/dist/_chunks/urls-CbOsUOoW.mjs +0 -7
  250. package/dist/_chunks/urls-CbOsUOoW.mjs.map +0 -1
  251. package/dist/_chunks/urls-DzZya_gm.js +0 -6
  252. package/dist/_chunks/urls-DzZya_gm.js.map +0 -1
  253. package/dist/_chunks/useDragAndDrop-DdHgKsqq.mjs.map +0 -1
  254. package/dist/_chunks/useDragAndDrop-J0TUUbR6.js.map +0 -1
  255. package/dist/server/src/controllers/utils/dimensions.d.ts +0 -5
  256. package/dist/server/src/controllers/utils/dimensions.d.ts.map +0 -1
  257. package/strapi-server.js +0 -3
@@ -54,7 +54,7 @@ const ja = {
54
54
  "components.TableEmpty.withFilters": "適用されたフィルタには{contentType}はありません...",
55
55
  "components.TableEmpty.withSearch": "検索に対応する{contentType}はありません({search})...",
56
56
  "components.TableEmpty.withoutFilter": "{contentType}はありません...",
57
- "components.empty-repeatable": "No entry yet. Click on the button below to add one.",
57
+ "components.empty-repeatable": "No entry yet. Click to add one.",
58
58
  "components.notification.info.maximum-requirement": "You have already reached the maximum number of fields",
59
59
  "components.notification.info.minimum-requirement": "A field has been added to match the minimum requirement",
60
60
  "components.repeatable.reorder.error": "An error occurred while reordering your component's field, please try again",
@@ -193,4 +193,4 @@ exports.default = ja;
193
193
  exports.groups = groups;
194
194
  exports.models = models;
195
195
  exports.pageNotFound = pageNotFound;
196
- //# sourceMappingURL=ja-CcFe8diO.js.map
196
+ //# sourceMappingURL=ja-7sfIbjxE.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"es-EUonQTon.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"ja-7sfIbjxE.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -52,7 +52,7 @@ const ja = {
52
52
  "components.TableEmpty.withFilters": "適用されたフィルタには{contentType}はありません...",
53
53
  "components.TableEmpty.withSearch": "検索に対応する{contentType}はありません({search})...",
54
54
  "components.TableEmpty.withoutFilter": "{contentType}はありません...",
55
- "components.empty-repeatable": "No entry yet. Click on the button below to add one.",
55
+ "components.empty-repeatable": "No entry yet. Click to add one.",
56
56
  "components.notification.info.maximum-requirement": "You have already reached the maximum number of fields",
57
57
  "components.notification.info.minimum-requirement": "A field has been added to match the minimum requirement",
58
58
  "components.repeatable.reorder.error": "An error occurred while reordering your component's field, please try again",
@@ -193,4 +193,4 @@ export {
193
193
  models,
194
194
  pageNotFound
195
195
  };
196
- //# sourceMappingURL=ja-CtsUxOvk.mjs.map
196
+ //# sourceMappingURL=ja-BHqhDq4V.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ja-CtsUxOvk.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"ja-BHqhDq4V.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -3,17 +3,17 @@ import * as React from "react";
3
3
  import { useEffect } from "react";
4
4
  import { useQueryParams, useNotification, useStrapiApp, useAPIErrorHandler, useAuth, useGuidedTour, Page, Layouts } from "@strapi/admin/strapi-admin";
5
5
  import { useIntl } from "react-intl";
6
- import { NavLink, useMatch, useLocation, Navigate, Routes, Route } from "react-router-dom";
7
- import { Box, Flex, Typography, IconButton, useFilter, useCollator, SubNav, SubNavHeader, SubNavSections, SubNavSection, SubNavLink, useNotifyAT } from "@strapi/design-system";
6
+ import { NavLink, useMatch, useLocation, Navigate, Outlet } from "react-router-dom";
7
+ import { Box, Flex, Typography, IconButton, SubNavLink, useFilter, useCollator, SubNav, SubNavHeader, SubNavSections, SubNavSection, useNotifyAT } from "@strapi/design-system";
8
8
  import { useDragLayer } from "react-dnd";
9
- import { C as CardDragPreview } from "./CardDragPreview-ikSG4M46.mjs";
9
+ import { C as CardDragPreview } from "./CardDragPreview-DOxamsuj.mjs";
10
10
  import { CaretDown, Trash, Drag, Cross } from "@strapi/icons";
11
- import styled from "styled-components";
12
- import { D as DocumentStatus, g as getTranslation, u as useGetInitialDataQuery, a as useGetAllContentTypeSettingsQuery, s as setInitialData, C as COLLECTION_TYPES, S as SINGLE_TYPES, H as HOOKS, r as routes } from "./index-CwRRo1V9.mjs";
13
- import { F as FlexWrapper, L as LinkEllipsis, D as DisconnectButton } from "./Relations-J8cscLlR.mjs";
11
+ import { styled } from "styled-components";
12
+ import { D as DocumentStatus, u as useContentTypeSchema, g as getTranslation, a as useGetInitialDataQuery, b as useGetAllContentTypeSettingsQuery, s as setInitialData, C as COLLECTION_TYPES, S as SINGLE_TYPES, H as HOOKS } from "./index-C2SagWVW.mjs";
13
+ import { F as FlexWrapper, L as LinkEllipsis, D as DisconnectButton } from "./Relations-DinMQJ4B.mjs";
14
14
  import { stringify, parse } from "qs";
15
15
  import { u as useTypedSelector, a as useTypedDispatch } from "./hooks-E5u1mcgM.mjs";
16
- import { I as ItemTypes } from "./useDragAndDrop-DdHgKsqq.mjs";
16
+ import { I as ItemTypes } from "./useDragAndDrop-DJ6jqvZN.mjs";
17
17
  function getStyle(initialOffset, currentOffset, mouseOffset) {
18
18
  if (!initialOffset || !currentOffset || !mouseOffset) {
19
19
  return { display: "none" };
@@ -77,8 +77,8 @@ const ComponentDragPreview = ({ displayedValue }) => {
77
77
  /* @__PURE__ */ jsx(Flex, { maxWidth: "15rem", children: /* @__PURE__ */ jsx(Typography, { textColor: "neutral700", ellipsis: true, children: displayedValue }) })
78
78
  ] }) }),
79
79
  /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
80
- /* @__PURE__ */ jsx(IconButton, { "aria-label": "", borderWidth: 0, children: /* @__PURE__ */ jsx(Trash, {}) }),
81
- /* @__PURE__ */ jsx(IconButton, { "aria-label": "", borderWidth: 0, children: /* @__PURE__ */ jsx(Drag, {}) })
80
+ /* @__PURE__ */ jsx(IconButton, { withTooltip: false, label: "", variant: "ghost", children: /* @__PURE__ */ jsx(Trash, {}) }),
81
+ /* @__PURE__ */ jsx(IconButton, { withTooltip: false, label: "", variant: "ghost", children: /* @__PURE__ */ jsx(Drag, {}) })
82
82
  ] })
83
83
  ]
84
84
  }
@@ -119,7 +119,7 @@ const RelationDragPreview = ({ status, displayedValue, width }) => {
119
119
  gap: 4,
120
120
  children: [
121
121
  /* @__PURE__ */ jsxs(FlexWrapper, { gap: 1, children: [
122
- /* @__PURE__ */ jsx(IconButton, { "aria-label": "", borderWidth: 0, children: /* @__PURE__ */ jsx(Drag, {}) }),
122
+ /* @__PURE__ */ jsx(IconButton, { withTooltip: false, label: "", variant: "ghost", children: /* @__PURE__ */ jsx(Drag, {}) }),
123
123
  /* @__PURE__ */ jsxs(Flex, { width: "100%", minWidth: 0, justifyContent: "space-between", children: [
124
124
  /* @__PURE__ */ jsx(Box, { minWidth: 0, paddingTop: 1, paddingBottom: 1, paddingRight: 4, children: /* @__PURE__ */ jsx(LinkEllipsis, { href: "", children: /* @__PURE__ */ jsx(Typography, { textColor: "primary600", ellipsis: true, children: displayedValue }) }) }),
125
125
  status ? /* @__PURE__ */ jsx(DocumentStatus, { status }) : null
@@ -130,6 +130,17 @@ const RelationDragPreview = ({ status, displayedValue, width }) => {
130
130
  }
131
131
  ) });
132
132
  };
133
+ const SubNavLinkCustom = styled(SubNavLink)`
134
+ div {
135
+ width: inherit;
136
+ span:nth-child(2) {
137
+ white-space: nowrap;
138
+ overflow: hidden;
139
+ text-overflow: ellipsis;
140
+ width: inherit;
141
+ }
142
+ }
143
+ `;
133
144
  const LeftMenu = () => {
134
145
  const [search, setSearch] = React.useState("");
135
146
  const [{ query }] = useQueryParams();
@@ -138,6 +149,7 @@ const LeftMenu = () => {
138
149
  (state) => state["content-manager"].app.collectionTypeLinks
139
150
  );
140
151
  const singleTypeLinks = useTypedSelector((state) => state["content-manager"].app.singleTypeLinks);
152
+ const { schemas } = useContentTypeSchema();
141
153
  const { startsWith } = useFilter(locale, {
142
154
  sensitivity: "base"
143
155
  });
@@ -183,9 +195,21 @@ const LeftMenu = () => {
183
195
  };
184
196
  const label = formatMessage({
185
197
  id: getTranslation("header.name"),
186
- defaultMessage: "Content"
198
+ defaultMessage: "Content Manager"
187
199
  });
188
- return /* @__PURE__ */ jsxs(SubNav, { ariaLabel: label, children: [
200
+ const getPluginsParamsForLink = (link) => {
201
+ const schema = schemas.find((schema2) => schema2.uid === link.uid);
202
+ const isI18nEnabled = Boolean(schema?.pluginOptions?.i18n?.localized);
203
+ if (query.plugins && "i18n" in query.plugins) {
204
+ const { i18n, ...restPlugins } = query.plugins;
205
+ if (!isI18nEnabled) {
206
+ return restPlugins;
207
+ }
208
+ return { i18n, ...restPlugins };
209
+ }
210
+ return query.plugins;
211
+ };
212
+ return /* @__PURE__ */ jsxs(SubNav, { "aria-label": label, children: [
189
213
  /* @__PURE__ */ jsx(
190
214
  SubNavHeader,
191
215
  {
@@ -208,24 +232,17 @@ const LeftMenu = () => {
208
232
  badgeLabel: section.links.length.toString(),
209
233
  children: section.links.map((link) => {
210
234
  return /* @__PURE__ */ jsx(
211
- SubNavLink,
235
+ SubNavLinkCustom,
212
236
  {
213
- as: NavLink,
237
+ tag: NavLink,
214
238
  to: {
215
239
  pathname: link.to,
216
- /**
217
- * We re-add the plugins query to the params available in the menu,
218
- * this means once you've changed the locale in the app, you continue
219
- * to see the same locale when changing content-type.
220
- *
221
- * NOTE: if you go to a content-type that does not have i18n enabled,
222
- * we return the default documents anyway.
223
- */
224
240
  search: stringify({
225
241
  ...parse(link.search ?? ""),
226
- plugins: query.plugins
242
+ plugins: getPluginsParamsForLink(link)
227
243
  })
228
244
  },
245
+ width: "100%",
229
246
  children: link.title
230
247
  },
231
248
  link.uid
@@ -305,13 +322,13 @@ const useContentManagerInitData = () => {
305
322
  collectionTypeSectionLinks.map(({ permissions }) => checkUserHasPermissions(permissions))
306
323
  );
307
324
  const authorizedCollectionTypeLinks = collectionTypeSectionLinks.filter(
308
- (_, index) => collectionTypeLinksPermissions[index]
325
+ (_, index) => collectionTypeLinksPermissions[index].length > 0
309
326
  );
310
327
  const singleTypeLinksPermissions = await Promise.all(
311
328
  singleTypeSectionLinks.map(({ permissions }) => checkUserHasPermissions(permissions))
312
329
  );
313
330
  const authorizedSingleTypeLinks = singleTypeSectionLinks.filter(
314
- (_, index) => singleTypeLinksPermissions[index]
331
+ (_, index) => singleTypeLinksPermissions[index].length > 0
315
332
  );
316
333
  const { ctLinks } = runHookWaterfall(MUTATE_COLLECTION_TYPES_LINKS, {
317
334
  ctLinks: authorizedCollectionTypeLinks,
@@ -414,7 +431,8 @@ const Layout = () => {
414
431
  to: {
415
432
  pathname: authorisedModels[0].to,
416
433
  search: authorisedModels[0].search ?? ""
417
- }
434
+ },
435
+ replace: true
418
436
  }
419
437
  );
420
438
  }
@@ -425,7 +443,7 @@ const Layout = () => {
425
443
  }) }),
426
444
  /* @__PURE__ */ jsxs(Layouts.Root, { sideNav: /* @__PURE__ */ jsx(LeftMenu, {}), children: [
427
445
  /* @__PURE__ */ jsx(DragLayer, { renderItem: renderDraglayerItem }),
428
- /* @__PURE__ */ jsx(Routes, { children: routes.map((route) => /* @__PURE__ */ jsx(Route, { ...route }, route.path)) })
446
+ /* @__PURE__ */ jsx(Outlet, {})
429
447
  ] })
430
448
  ] });
431
449
  };
@@ -450,4 +468,4 @@ function renderDraglayerItem({ type, item }) {
450
468
  export {
451
469
  Layout
452
470
  };
453
- //# sourceMappingURL=layout-jIDzX0Fp.mjs.map
471
+ //# sourceMappingURL=layout-DY_D9MGA.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout-DY_D9MGA.mjs","sources":["../../admin/src/components/DragLayer.tsx","../../admin/src/components/DragPreviews/ComponentDragPreview.tsx","../../admin/src/components/DragPreviews/RelationDragPreview.tsx","../../admin/src/components/LeftMenu.tsx","../../admin/src/hooks/useContentManagerInitData.ts","../../admin/src/layout.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport { DragLayerMonitor, XYCoord, useDragLayer } from 'react-dnd';\n\nfunction getStyle(\n initialOffset: XYCoord | null,\n currentOffset: XYCoord | null,\n mouseOffset: XYCoord | null\n) {\n if (!initialOffset || !currentOffset || !mouseOffset) {\n return { display: 'none' };\n }\n\n const { x, y } = mouseOffset;\n\n return {\n transform: `translate(${x}px, ${y}px)`,\n };\n}\n\nexport interface DragLayerProps {\n renderItem: (item: {\n /**\n * TODO: it'd be great if we could make this a union where the type infers the item.\n */\n item: any;\n type: ReturnType<DragLayerMonitor['getItemType']>;\n }) => React.ReactNode;\n}\n\nconst DragLayer = ({ renderItem }: DragLayerProps) => {\n const { itemType, isDragging, item, initialOffset, currentOffset, mouseOffset } = useDragLayer(\n (monitor) => ({\n item: monitor.getItem(),\n itemType: monitor.getItemType(),\n initialOffset: monitor.getInitialSourceClientOffset(),\n currentOffset: monitor.getSourceClientOffset(),\n isDragging: monitor.isDragging(),\n mouseOffset: monitor.getClientOffset(),\n })\n );\n\n if (!isDragging) {\n return null;\n }\n\n return (\n <Box\n height=\"100%\"\n left={0}\n position=\"fixed\"\n pointerEvents=\"none\"\n top={0}\n zIndex={100}\n width=\"100%\"\n >\n <Box style={getStyle(initialOffset, currentOffset, mouseOffset)}>\n {renderItem({ type: itemType, item })}\n </Box>\n </Box>\n );\n};\n\nexport { DragLayer };\n","import { Flex, FlexComponent, IconButton, Typography } from '@strapi/design-system';\nimport { CaretDown, Drag, Trash } from '@strapi/icons';\nimport { styled } from 'styled-components';\n\ninterface ComponentDragPreviewProps {\n displayedValue: string;\n}\n\nconst ComponentDragPreview = ({ displayedValue }: ComponentDragPreviewProps) => {\n return (\n <Flex\n background=\"neutral0\"\n borderColor=\"neutral200\"\n justifyContent=\"space-between\"\n gap={3}\n padding={3}\n width=\"30rem\"\n >\n <ToggleButton type=\"button\">\n <Flex gap={6}>\n <DropdownIconWrapper\n alignItems=\"center\"\n justifyContent=\"center\"\n background=\"neutral200\"\n height=\"3.2rem\"\n width=\"3.2rem\"\n >\n <CaretDown />\n </DropdownIconWrapper>\n\n <Flex maxWidth=\"15rem\">\n <Typography textColor=\"neutral700\" ellipsis>\n {displayedValue}\n </Typography>\n </Flex>\n </Flex>\n </ToggleButton>\n\n <Flex gap={2}>\n <IconButton withTooltip={false} label=\"\" variant=\"ghost\">\n <Trash />\n </IconButton>\n\n <IconButton withTooltip={false} label=\"\" variant=\"ghost\">\n <Drag />\n </IconButton>\n </Flex>\n </Flex>\n );\n};\n\nconst DropdownIconWrapper = styled<FlexComponent>(Flex)`\n border-radius: 50%;\n\n svg {\n height: 0.6rem;\n width: 1.1rem;\n > path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n }\n`;\n\n// TODO: we shouldn't have to reset a whole button\nconst ToggleButton = styled.button`\n border: none;\n background: transparent;\n display: block;\n width: 100%;\n text-align: unset;\n padding: 0;\n`;\n\nexport { ComponentDragPreview };\nexport type { ComponentDragPreviewProps };\n","import { Box, Flex, IconButton, Typography } from '@strapi/design-system';\nimport { Cross, Drag } from '@strapi/icons';\n\nimport { DocumentStatus } from '../../pages/EditView/components/DocumentStatus';\nimport {\n DisconnectButton,\n LinkEllipsis,\n FlexWrapper,\n} from '../../pages/EditView/components/FormInputs/Relations';\n\nimport type { Data } from '@strapi/types';\n\ninterface RelationDragPreviewProps {\n status?: string;\n displayedValue: string;\n id: Data.ID;\n index: number;\n width: number;\n}\n\nconst RelationDragPreview = ({ status, displayedValue, width }: RelationDragPreviewProps) => {\n return (\n <Box style={{ width }}>\n <Flex\n paddingTop={2}\n paddingBottom={2}\n paddingLeft={2}\n paddingRight={4}\n hasRadius\n borderWidth={1}\n background=\"neutral0\"\n borderColor=\"neutral200\"\n justifyContent=\"space-between\"\n gap={4}\n >\n <FlexWrapper gap={1}>\n <IconButton withTooltip={false} label=\"\" variant=\"ghost\">\n <Drag />\n </IconButton>\n <Flex width=\"100%\" minWidth={0} justifyContent=\"space-between\">\n <Box minWidth={0} paddingTop={1} paddingBottom={1} paddingRight={4}>\n <LinkEllipsis href=\"\">\n <Typography textColor=\"primary600\" ellipsis>\n {displayedValue}\n </Typography>\n </LinkEllipsis>\n </Box>\n {status ? <DocumentStatus status={status} /> : null}\n </Flex>\n </FlexWrapper>\n <DisconnectButton type=\"button\">\n <Cross width=\"12px\" />\n </DisconnectButton>\n </Flex>\n </Box>\n );\n};\n\nexport { RelationDragPreview };\nexport type { RelationDragPreviewProps };\n","import * as React from 'react';\n\nimport { useQueryParams } from '@strapi/admin/strapi-admin';\nimport {\n useCollator,\n useFilter,\n SubNav,\n SubNavHeader,\n SubNavLink,\n SubNavSection,\n SubNavSections,\n} from '@strapi/design-system';\nimport { parse, stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useContentTypeSchema } from '../hooks/useContentTypeSchema';\nimport { useTypedSelector } from '../modules/hooks';\nimport { getTranslation } from '../utils/translations';\n\nimport type { ContentManagerLink } from '../hooks/useContentManagerInitData';\n\nconst SubNavLinkCustom = styled(SubNavLink)`\n div {\n width: inherit;\n span:nth-child(2) {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n width: inherit;\n }\n }\n`;\n\nconst LeftMenu = () => {\n const [search, setSearch] = React.useState('');\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n const { formatMessage, locale } = useIntl();\n\n const collectionTypeLinks = useTypedSelector(\n (state) => state['content-manager'].app.collectionTypeLinks\n );\n\n const singleTypeLinks = useTypedSelector((state) => state['content-manager'].app.singleTypeLinks);\n const { schemas } = useContentTypeSchema();\n\n const { startsWith } = useFilter(locale, {\n sensitivity: 'base',\n });\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const menu = React.useMemo(\n () =>\n [\n {\n id: 'collectionTypes',\n title: formatMessage({\n id: getTranslation('components.LeftMenu.collection-types'),\n defaultMessage: 'Collection Types',\n }),\n searchable: true,\n links: collectionTypeLinks,\n },\n {\n id: 'singleTypes',\n title: formatMessage({\n id: getTranslation('components.LeftMenu.single-types'),\n defaultMessage: 'Single Types',\n }),\n searchable: true,\n links: singleTypeLinks,\n },\n ].map((section) => ({\n ...section,\n links: section.links\n /**\n * Filter by the search value\n */\n .filter((link) => startsWith(link.title, search))\n /**\n * Sort correctly using the language\n */\n .sort((a, b) => formatter.compare(a.title, b.title))\n /**\n * Apply the formated strings to the links from react-intl\n */\n .map((link) => {\n return {\n ...link,\n title: formatMessage({ id: link.title, defaultMessage: link.title }),\n };\n }),\n })),\n [collectionTypeLinks, search, singleTypeLinks, startsWith, formatMessage, formatter]\n );\n\n const handleClear = () => {\n setSearch('');\n };\n\n const handleChangeSearch = ({ target: { value } }: { target: { value: string } }) => {\n setSearch(value);\n };\n\n const label = formatMessage({\n id: getTranslation('header.name'),\n defaultMessage: 'Content Manager',\n });\n\n const getPluginsParamsForLink = (link: ContentManagerLink) => {\n const schema = schemas.find((schema) => schema.uid === link.uid);\n const isI18nEnabled = Boolean((schema?.pluginOptions?.i18n as any)?.localized);\n\n // The search params have the i18n plugin\n if (query.plugins && 'i18n' in query.plugins) {\n // Prepare removal of i18n from the plugins search params\n const { i18n, ...restPlugins } = query.plugins;\n\n // i18n is not enabled, remove it from the plugins search params\n if (!isI18nEnabled) {\n return restPlugins;\n }\n\n // i18n is enabled, put the plugins search params back together\n return { i18n, ...restPlugins };\n }\n\n return query.plugins;\n };\n\n return (\n <SubNav aria-label={label}>\n <SubNavHeader\n label={label}\n searchable\n value={search}\n onChange={handleChangeSearch}\n onClear={handleClear}\n searchLabel={formatMessage({\n id: 'content-manager.components.LeftMenu.Search.label',\n defaultMessage: 'Search for a content type',\n })}\n />\n <SubNavSections>\n {menu.map((section) => {\n return (\n <SubNavSection\n key={section.id}\n label={section.title}\n badgeLabel={section.links.length.toString()}\n >\n {section.links.map((link) => {\n return (\n <SubNavLinkCustom\n tag={NavLink}\n key={link.uid}\n to={{\n pathname: link.to,\n search: stringify({\n ...parse(link.search ?? ''),\n plugins: getPluginsParamsForLink(link),\n }),\n }}\n width=\"100%\"\n >\n {link.title}\n </SubNavLinkCustom>\n );\n })}\n </SubNavSection>\n );\n })}\n </SubNavSections>\n </SubNav>\n );\n};\n\nexport { LeftMenu };\n","import { useEffect } from 'react';\n\nimport {\n useAuth,\n type Permission,\n useNotification,\n useStrapiApp,\n useAPIErrorHandler,\n} from '@strapi/admin/strapi-admin';\nimport { useNotifyAT } from '@strapi/design-system';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\n\nimport { COLLECTION_TYPES, SINGLE_TYPES } from '../constants/collections';\nimport { HOOKS } from '../constants/hooks';\nimport { AppState, setInitialData } from '../modules/app';\nimport { useTypedDispatch, useTypedSelector } from '../modules/hooks';\nimport { useGetAllContentTypeSettingsQuery } from '../services/contentTypes';\nimport { useGetInitialDataQuery } from '../services/init';\nimport { getTranslation } from '../utils/translations';\n\nimport type { Component } from '../../../shared/contracts/components';\nimport type {\n ContentType,\n FindContentTypesSettings,\n} from '../../../shared/contracts/content-types';\nimport type { GetInitData } from '../../../shared/contracts/init';\n\nconst { MUTATE_COLLECTION_TYPES_LINKS, MUTATE_SINGLE_TYPES_LINKS } = HOOKS;\n\ninterface ContentManagerLink {\n permissions: Permission[];\n search: string | null;\n kind: string;\n title: string;\n to: string;\n uid: string;\n name: string;\n isDisplayed: boolean;\n}\n\nconst useContentManagerInitData = (): AppState => {\n const { toggleNotification } = useNotification();\n const dispatch = useTypedDispatch();\n const runHookWaterfall = useStrapiApp(\n 'useContentManagerInitData',\n (state) => state.runHookWaterfall\n );\n const { notifyStatus } = useNotifyAT();\n const { formatMessage } = useIntl();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler(getTranslation);\n const checkUserHasPermissions = useAuth(\n 'useContentManagerInitData',\n (state) => state.checkUserHasPermissions\n );\n\n const state = useTypedSelector((state) => state['content-manager'].app);\n\n const initialDataQuery = useGetInitialDataQuery(undefined, {\n /**\n * TODO: remove this when the CTB has been refactored to use redux-toolkit-query\n * and it can invalidate the cache on mutation\n */\n refetchOnMountOrArgChange: true,\n });\n\n useEffect(() => {\n if (initialDataQuery.data) {\n notifyStatus(\n formatMessage({\n id: getTranslation('App.schemas.data-loaded'),\n defaultMessage: 'The schemas have been successfully loaded.',\n })\n );\n }\n }, [formatMessage, initialDataQuery.data, notifyStatus]);\n\n useEffect(() => {\n if (initialDataQuery.error) {\n toggleNotification({ type: 'danger', message: formatAPIError(initialDataQuery.error) });\n }\n }, [formatAPIError, initialDataQuery.error, toggleNotification]);\n\n const contentTypeSettingsQuery = useGetAllContentTypeSettingsQuery();\n\n useEffect(() => {\n if (contentTypeSettingsQuery.error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(contentTypeSettingsQuery.error),\n });\n }\n }, [formatAPIError, contentTypeSettingsQuery.error, toggleNotification]);\n\n const formatData = async (\n components: Component[],\n contentTypes: ContentType[],\n fieldSizes: GetInitData.Response['data']['fieldSizes'],\n contentTypeConfigurations: FindContentTypesSettings.Response['data']\n ) => {\n /**\n * We group these by the two types we support. We do with an object because we can use default\n * values of arrays to make sure we always have an array to manipulate further on if, for example,\n * a user has not made any single types.\n *\n * This means we have to manually add new content types to this hook if we add a new type – but\n * the safety is worth it.\n */\n const { collectionType: collectionTypeLinks, singleType: singleTypeLinks } =\n contentTypes.reduce<{\n collectionType: ContentType[];\n singleType: ContentType[];\n }>(\n (acc, model) => {\n acc[model.kind].push(model);\n return acc;\n },\n {\n collectionType: [],\n singleType: [],\n }\n );\n const collectionTypeSectionLinks = generateLinks(\n collectionTypeLinks,\n 'collectionTypes',\n contentTypeConfigurations\n );\n const singleTypeSectionLinks = generateLinks(singleTypeLinks, 'singleTypes');\n\n // Collection Types verifications\n const collectionTypeLinksPermissions = await Promise.all(\n collectionTypeSectionLinks.map(({ permissions }) => checkUserHasPermissions(permissions))\n );\n\n const authorizedCollectionTypeLinks = collectionTypeSectionLinks.filter(\n (_, index) => collectionTypeLinksPermissions[index].length > 0\n );\n\n // Single Types verifications\n const singleTypeLinksPermissions = await Promise.all(\n singleTypeSectionLinks.map(({ permissions }) => checkUserHasPermissions(permissions))\n );\n const authorizedSingleTypeLinks = singleTypeSectionLinks.filter(\n (_, index) => singleTypeLinksPermissions[index].length > 0\n );\n const { ctLinks } = runHookWaterfall(MUTATE_COLLECTION_TYPES_LINKS, {\n ctLinks: authorizedCollectionTypeLinks,\n models: contentTypes,\n });\n const { stLinks } = runHookWaterfall(MUTATE_SINGLE_TYPES_LINKS, {\n stLinks: authorizedSingleTypeLinks,\n models: contentTypes,\n });\n\n dispatch(\n setInitialData({\n authorizedCollectionTypeLinks: ctLinks,\n authorizedSingleTypeLinks: stLinks,\n components,\n contentTypeSchemas: contentTypes,\n fieldSizes,\n })\n );\n };\n\n useEffect(() => {\n if (initialDataQuery.data && contentTypeSettingsQuery.data) {\n formatData(\n initialDataQuery.data.components,\n initialDataQuery.data.contentTypes,\n initialDataQuery.data.fieldSizes,\n contentTypeSettingsQuery.data\n );\n }\n }, [initialDataQuery.data, contentTypeSettingsQuery.data]);\n\n return { ...state };\n};\n\nconst generateLinks = (\n links: ContentType[],\n type: 'collectionTypes' | 'singleTypes',\n configurations: FindContentTypesSettings.Response['data'] = []\n) => {\n return links\n .filter((link) => link.isDisplayed)\n .map((link) => {\n const collectionTypesPermissions = [\n { action: 'plugin::content-manager.explorer.create', subject: link.uid },\n { action: 'plugin::content-manager.explorer.read', subject: link.uid },\n ];\n const singleTypesPermissions = [\n { action: 'plugin::content-manager.explorer.read', subject: link.uid },\n ];\n const permissions =\n type === 'collectionTypes' ? collectionTypesPermissions : singleTypesPermissions;\n\n const currentContentTypeConfig = configurations.find(({ uid }) => uid === link.uid);\n\n let search = null;\n\n if (currentContentTypeConfig) {\n const searchParams = {\n page: 1,\n pageSize: currentContentTypeConfig.settings.pageSize,\n sort: `${currentContentTypeConfig.settings.defaultSortBy}:${currentContentTypeConfig.settings.defaultSortOrder}`,\n };\n\n search = stringify(searchParams, { encode: false });\n }\n\n return {\n permissions,\n search,\n kind: link.kind,\n title: link.info.displayName,\n to: `/content-manager/${link.kind === 'collectionType' ? COLLECTION_TYPES : SINGLE_TYPES}/${\n link.uid\n }`,\n uid: link.uid,\n // Used for the list item key in the helper plugin\n name: link.uid,\n isDisplayed: link.isDisplayed,\n } satisfies ContentManagerLink;\n });\n};\n\nexport { useContentManagerInitData };\nexport type { ContentManagerLink };\n","/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport { Page, useGuidedTour, Layouts } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\nimport { Navigate, Outlet, useLocation, useMatch } from 'react-router-dom';\n\nimport { DragLayer, DragLayerProps } from './components/DragLayer';\nimport { CardDragPreview } from './components/DragPreviews/CardDragPreview';\nimport { ComponentDragPreview } from './components/DragPreviews/ComponentDragPreview';\nimport { RelationDragPreview } from './components/DragPreviews/RelationDragPreview';\nimport { LeftMenu } from './components/LeftMenu';\nimport { ItemTypes } from './constants/dragAndDrop';\nimport { useContentManagerInitData } from './hooks/useContentManagerInitData';\nimport { getTranslation } from './utils/translations';\n\n/* -------------------------------------------------------------------------------------------------\n * Layout\n * -----------------------------------------------------------------------------------------------*/\n\nconst Layout = () => {\n const contentTypeMatch = useMatch('/content-manager/:kind/:uid/*');\n\n const { isLoading, collectionTypeLinks, models, singleTypeLinks } = useContentManagerInitData();\n const authorisedModels = [...collectionTypeLinks, ...singleTypeLinks].sort((a, b) =>\n a.title.localeCompare(b.title)\n );\n\n const { pathname } = useLocation();\n const { formatMessage } = useIntl();\n const startSection = useGuidedTour('Layout', (state) => state.startSection);\n const startSectionRef = React.useRef(startSection);\n\n React.useEffect(() => {\n if (startSectionRef.current) {\n startSectionRef.current('contentManager');\n }\n }, []);\n\n if (isLoading) {\n return (\n <>\n <Page.Title>\n {formatMessage({\n id: getTranslation('plugin.name'),\n defaultMessage: 'Content Manager',\n })}\n </Page.Title>\n <Page.Loading />\n </>\n );\n }\n\n // Array of models that are displayed in the content manager\n const supportedModelsToDisplay = models.filter(({ isDisplayed }) => isDisplayed);\n\n // Redirect the user to the 403 page\n if (\n authorisedModels.length === 0 &&\n supportedModelsToDisplay.length > 0 &&\n pathname !== '/content-manager/403'\n ) {\n return <Navigate to=\"/403\" />;\n }\n\n // Redirect the user to the create content type page\n if (supportedModelsToDisplay.length === 0 && pathname !== '/no-content-types') {\n return <Navigate to=\"/no-content-types\" />;\n }\n\n if (!contentTypeMatch && authorisedModels.length > 0) {\n return (\n <Navigate\n to={{\n pathname: authorisedModels[0].to,\n search: authorisedModels[0].search ?? '',\n }}\n replace\n />\n );\n }\n\n return (\n <>\n <Page.Title>\n {formatMessage({\n id: getTranslation('plugin.name'),\n defaultMessage: 'Content Manager',\n })}\n </Page.Title>\n <Layouts.Root sideNav={<LeftMenu />}>\n <DragLayer renderItem={renderDraglayerItem} />\n <Outlet />\n </Layouts.Root>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * renderDraglayerItem\n * -----------------------------------------------------------------------------------------------*/\n\nfunction renderDraglayerItem({ type, item }: Parameters<DragLayerProps['renderItem']>[0]) {\n if (!type || (type && typeof type !== 'string')) {\n return null;\n }\n\n /**\n * Because a user may have multiple relations / dynamic zones / repeable fields in the same content type,\n * we append the fieldName for the item type to make them unique, however, we then want to extract that\n * first type to apply the correct preview.\n */\n const [actualType] = type.split('_');\n\n switch (actualType) {\n case ItemTypes.EDIT_FIELD:\n case ItemTypes.FIELD:\n return <CardDragPreview label={item.label} />;\n case ItemTypes.COMPONENT:\n case ItemTypes.DYNAMIC_ZONE:\n return <ComponentDragPreview displayedValue={item.displayedValue} />;\n\n case ItemTypes.RELATION:\n return <RelationDragPreview {...item} />;\n\n default:\n return null;\n }\n}\n\nexport { Layout };\n"],"names":["schema","state"],"mappings":"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"}
@@ -7,18 +7,16 @@ const reactIntl = require("react-intl");
7
7
  const reactRouterDom = require("react-router-dom");
8
8
  const designSystem = require("@strapi/design-system");
9
9
  const reactDnd = require("react-dnd");
10
- const CardDragPreview = require("./CardDragPreview-DSVYodBX.js");
10
+ const CardDragPreview = require("./CardDragPreview-C0QyJgRA.js");
11
11
  const Icons = require("@strapi/icons");
12
- const styled = require("styled-components");
13
- const index = require("./index-C6AH2hEl.js");
14
- const Relations = require("./Relations-CgWtgnPe.js");
12
+ const styledComponents = require("styled-components");
13
+ const index = require("./index-Cnw4gqee.js");
14
+ const Relations = require("./Relations-lndx3aQk.js");
15
15
  const qs = require("qs");
16
16
  const hooks = require("./hooks-BAaaKPS_.js");
17
- const useDragAndDrop = require("./useDragAndDrop-J0TUUbR6.js");
18
- const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
17
+ const useDragAndDrop = require("./useDragAndDrop-BMtgCYzL.js");
19
18
  function _interopNamespace(e) {
20
- if (e && e.__esModule)
21
- return e;
19
+ if (e && e.__esModule) return e;
22
20
  const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
23
21
  if (e) {
24
22
  for (const k in e) {
@@ -35,7 +33,6 @@ function _interopNamespace(e) {
35
33
  return Object.freeze(n);
36
34
  }
37
35
  const React__namespace = /* @__PURE__ */ _interopNamespace(React);
38
- const styled__default = /* @__PURE__ */ _interopDefault(styled);
39
36
  function getStyle(initialOffset, currentOffset, mouseOffset) {
40
37
  if (!initialOffset || !currentOffset || !mouseOffset) {
41
38
  return { display: "none" };
@@ -99,14 +96,14 @@ const ComponentDragPreview = ({ displayedValue }) => {
99
96
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { maxWidth: "15rem", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "neutral700", ellipsis: true, children: displayedValue }) })
100
97
  ] }) }),
101
98
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
102
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.IconButton, { "aria-label": "", borderWidth: 0, children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Trash, {}) }),
103
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.IconButton, { "aria-label": "", borderWidth: 0, children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Drag, {}) })
99
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.IconButton, { withTooltip: false, label: "", variant: "ghost", children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Trash, {}) }),
100
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.IconButton, { withTooltip: false, label: "", variant: "ghost", children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Drag, {}) })
104
101
  ] })
105
102
  ]
106
103
  }
107
104
  );
108
105
  };
109
- const DropdownIconWrapper = styled__default.default(designSystem.Flex)`
106
+ const DropdownIconWrapper = styledComponents.styled(designSystem.Flex)`
110
107
  border-radius: 50%;
111
108
 
112
109
  svg {
@@ -117,7 +114,7 @@ const DropdownIconWrapper = styled__default.default(designSystem.Flex)`
117
114
  }
118
115
  }
119
116
  `;
120
- const ToggleButton = styled__default.default.button`
117
+ const ToggleButton = styledComponents.styled.button`
121
118
  border: none;
122
119
  background: transparent;
123
120
  display: block;
@@ -141,7 +138,7 @@ const RelationDragPreview = ({ status, displayedValue, width }) => {
141
138
  gap: 4,
142
139
  children: [
143
140
  /* @__PURE__ */ jsxRuntime.jsxs(Relations.FlexWrapper, { gap: 1, children: [
144
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.IconButton, { "aria-label": "", borderWidth: 0, children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Drag, {}) }),
141
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.IconButton, { withTooltip: false, label: "", variant: "ghost", children: /* @__PURE__ */ jsxRuntime.jsx(Icons.Drag, {}) }),
145
142
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { width: "100%", minWidth: 0, justifyContent: "space-between", children: [
146
143
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { minWidth: 0, paddingTop: 1, paddingBottom: 1, paddingRight: 4, children: /* @__PURE__ */ jsxRuntime.jsx(Relations.LinkEllipsis, { href: "", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "primary600", ellipsis: true, children: displayedValue }) }) }),
147
144
  status ? /* @__PURE__ */ jsxRuntime.jsx(index.DocumentStatus, { status }) : null
@@ -152,6 +149,17 @@ const RelationDragPreview = ({ status, displayedValue, width }) => {
152
149
  }
153
150
  ) });
154
151
  };
152
+ const SubNavLinkCustom = styledComponents.styled(designSystem.SubNavLink)`
153
+ div {
154
+ width: inherit;
155
+ span:nth-child(2) {
156
+ white-space: nowrap;
157
+ overflow: hidden;
158
+ text-overflow: ellipsis;
159
+ width: inherit;
160
+ }
161
+ }
162
+ `;
155
163
  const LeftMenu = () => {
156
164
  const [search, setSearch] = React__namespace.useState("");
157
165
  const [{ query }] = strapiAdmin.useQueryParams();
@@ -160,6 +168,7 @@ const LeftMenu = () => {
160
168
  (state) => state["content-manager"].app.collectionTypeLinks
161
169
  );
162
170
  const singleTypeLinks = hooks.useTypedSelector((state) => state["content-manager"].app.singleTypeLinks);
171
+ const { schemas } = index.useContentTypeSchema();
163
172
  const { startsWith } = designSystem.useFilter(locale, {
164
173
  sensitivity: "base"
165
174
  });
@@ -205,9 +214,21 @@ const LeftMenu = () => {
205
214
  };
206
215
  const label = formatMessage({
207
216
  id: index.getTranslation("header.name"),
208
- defaultMessage: "Content"
217
+ defaultMessage: "Content Manager"
209
218
  });
210
- return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.SubNav, { ariaLabel: label, children: [
219
+ const getPluginsParamsForLink = (link) => {
220
+ const schema = schemas.find((schema2) => schema2.uid === link.uid);
221
+ const isI18nEnabled = Boolean(schema?.pluginOptions?.i18n?.localized);
222
+ if (query.plugins && "i18n" in query.plugins) {
223
+ const { i18n, ...restPlugins } = query.plugins;
224
+ if (!isI18nEnabled) {
225
+ return restPlugins;
226
+ }
227
+ return { i18n, ...restPlugins };
228
+ }
229
+ return query.plugins;
230
+ };
231
+ return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.SubNav, { "aria-label": label, children: [
211
232
  /* @__PURE__ */ jsxRuntime.jsx(
212
233
  designSystem.SubNavHeader,
213
234
  {
@@ -230,24 +251,17 @@ const LeftMenu = () => {
230
251
  badgeLabel: section.links.length.toString(),
231
252
  children: section.links.map((link) => {
232
253
  return /* @__PURE__ */ jsxRuntime.jsx(
233
- designSystem.SubNavLink,
254
+ SubNavLinkCustom,
234
255
  {
235
- as: reactRouterDom.NavLink,
256
+ tag: reactRouterDom.NavLink,
236
257
  to: {
237
258
  pathname: link.to,
238
- /**
239
- * We re-add the plugins query to the params available in the menu,
240
- * this means once you've changed the locale in the app, you continue
241
- * to see the same locale when changing content-type.
242
- *
243
- * NOTE: if you go to a content-type that does not have i18n enabled,
244
- * we return the default documents anyway.
245
- */
246
259
  search: qs.stringify({
247
260
  ...qs.parse(link.search ?? ""),
248
- plugins: query.plugins
261
+ plugins: getPluginsParamsForLink(link)
249
262
  })
250
263
  },
264
+ width: "100%",
251
265
  children: link.title
252
266
  },
253
267
  link.uid
@@ -327,13 +341,13 @@ const useContentManagerInitData = () => {
327
341
  collectionTypeSectionLinks.map(({ permissions }) => checkUserHasPermissions(permissions))
328
342
  );
329
343
  const authorizedCollectionTypeLinks = collectionTypeSectionLinks.filter(
330
- (_, index2) => collectionTypeLinksPermissions[index2]
344
+ (_, index2) => collectionTypeLinksPermissions[index2].length > 0
331
345
  );
332
346
  const singleTypeLinksPermissions = await Promise.all(
333
347
  singleTypeSectionLinks.map(({ permissions }) => checkUserHasPermissions(permissions))
334
348
  );
335
349
  const authorizedSingleTypeLinks = singleTypeSectionLinks.filter(
336
- (_, index2) => singleTypeLinksPermissions[index2]
350
+ (_, index2) => singleTypeLinksPermissions[index2].length > 0
337
351
  );
338
352
  const { ctLinks } = runHookWaterfall(MUTATE_COLLECTION_TYPES_LINKS, {
339
353
  ctLinks: authorizedCollectionTypeLinks,
@@ -436,7 +450,8 @@ const Layout = () => {
436
450
  to: {
437
451
  pathname: authorisedModels[0].to,
438
452
  search: authorisedModels[0].search ?? ""
439
- }
453
+ },
454
+ replace: true
440
455
  }
441
456
  );
442
457
  }
@@ -447,7 +462,7 @@ const Layout = () => {
447
462
  }) }),
448
463
  /* @__PURE__ */ jsxRuntime.jsxs(strapiAdmin.Layouts.Root, { sideNav: /* @__PURE__ */ jsxRuntime.jsx(LeftMenu, {}), children: [
449
464
  /* @__PURE__ */ jsxRuntime.jsx(DragLayer, { renderItem: renderDraglayerItem }),
450
- /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Routes, { children: index.routes.map((route) => /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Route, { ...route }, route.path)) })
465
+ /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Outlet, {})
451
466
  ] })
452
467
  ] });
453
468
  };
@@ -470,4 +485,4 @@ function renderDraglayerItem({ type, item }) {
470
485
  }
471
486
  }
472
487
  exports.Layout = Layout;
473
- //# sourceMappingURL=layout-B_SXLhqf.js.map
488
+ //# sourceMappingURL=layout-ivwIVPnV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout-ivwIVPnV.js","sources":["../../admin/src/components/DragLayer.tsx","../../admin/src/components/DragPreviews/ComponentDragPreview.tsx","../../admin/src/components/DragPreviews/RelationDragPreview.tsx","../../admin/src/components/LeftMenu.tsx","../../admin/src/hooks/useContentManagerInitData.ts","../../admin/src/layout.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport { DragLayerMonitor, XYCoord, useDragLayer } from 'react-dnd';\n\nfunction getStyle(\n initialOffset: XYCoord | null,\n currentOffset: XYCoord | null,\n mouseOffset: XYCoord | null\n) {\n if (!initialOffset || !currentOffset || !mouseOffset) {\n return { display: 'none' };\n }\n\n const { x, y } = mouseOffset;\n\n return {\n transform: `translate(${x}px, ${y}px)`,\n };\n}\n\nexport interface DragLayerProps {\n renderItem: (item: {\n /**\n * TODO: it'd be great if we could make this a union where the type infers the item.\n */\n item: any;\n type: ReturnType<DragLayerMonitor['getItemType']>;\n }) => React.ReactNode;\n}\n\nconst DragLayer = ({ renderItem }: DragLayerProps) => {\n const { itemType, isDragging, item, initialOffset, currentOffset, mouseOffset } = useDragLayer(\n (monitor) => ({\n item: monitor.getItem(),\n itemType: monitor.getItemType(),\n initialOffset: monitor.getInitialSourceClientOffset(),\n currentOffset: monitor.getSourceClientOffset(),\n isDragging: monitor.isDragging(),\n mouseOffset: monitor.getClientOffset(),\n })\n );\n\n if (!isDragging) {\n return null;\n }\n\n return (\n <Box\n height=\"100%\"\n left={0}\n position=\"fixed\"\n pointerEvents=\"none\"\n top={0}\n zIndex={100}\n width=\"100%\"\n >\n <Box style={getStyle(initialOffset, currentOffset, mouseOffset)}>\n {renderItem({ type: itemType, item })}\n </Box>\n </Box>\n );\n};\n\nexport { DragLayer };\n","import { Flex, FlexComponent, IconButton, Typography } from '@strapi/design-system';\nimport { CaretDown, Drag, Trash } from '@strapi/icons';\nimport { styled } from 'styled-components';\n\ninterface ComponentDragPreviewProps {\n displayedValue: string;\n}\n\nconst ComponentDragPreview = ({ displayedValue }: ComponentDragPreviewProps) => {\n return (\n <Flex\n background=\"neutral0\"\n borderColor=\"neutral200\"\n justifyContent=\"space-between\"\n gap={3}\n padding={3}\n width=\"30rem\"\n >\n <ToggleButton type=\"button\">\n <Flex gap={6}>\n <DropdownIconWrapper\n alignItems=\"center\"\n justifyContent=\"center\"\n background=\"neutral200\"\n height=\"3.2rem\"\n width=\"3.2rem\"\n >\n <CaretDown />\n </DropdownIconWrapper>\n\n <Flex maxWidth=\"15rem\">\n <Typography textColor=\"neutral700\" ellipsis>\n {displayedValue}\n </Typography>\n </Flex>\n </Flex>\n </ToggleButton>\n\n <Flex gap={2}>\n <IconButton withTooltip={false} label=\"\" variant=\"ghost\">\n <Trash />\n </IconButton>\n\n <IconButton withTooltip={false} label=\"\" variant=\"ghost\">\n <Drag />\n </IconButton>\n </Flex>\n </Flex>\n );\n};\n\nconst DropdownIconWrapper = styled<FlexComponent>(Flex)`\n border-radius: 50%;\n\n svg {\n height: 0.6rem;\n width: 1.1rem;\n > path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n }\n`;\n\n// TODO: we shouldn't have to reset a whole button\nconst ToggleButton = styled.button`\n border: none;\n background: transparent;\n display: block;\n width: 100%;\n text-align: unset;\n padding: 0;\n`;\n\nexport { ComponentDragPreview };\nexport type { ComponentDragPreviewProps };\n","import { Box, Flex, IconButton, Typography } from '@strapi/design-system';\nimport { Cross, Drag } from '@strapi/icons';\n\nimport { DocumentStatus } from '../../pages/EditView/components/DocumentStatus';\nimport {\n DisconnectButton,\n LinkEllipsis,\n FlexWrapper,\n} from '../../pages/EditView/components/FormInputs/Relations';\n\nimport type { Data } from '@strapi/types';\n\ninterface RelationDragPreviewProps {\n status?: string;\n displayedValue: string;\n id: Data.ID;\n index: number;\n width: number;\n}\n\nconst RelationDragPreview = ({ status, displayedValue, width }: RelationDragPreviewProps) => {\n return (\n <Box style={{ width }}>\n <Flex\n paddingTop={2}\n paddingBottom={2}\n paddingLeft={2}\n paddingRight={4}\n hasRadius\n borderWidth={1}\n background=\"neutral0\"\n borderColor=\"neutral200\"\n justifyContent=\"space-between\"\n gap={4}\n >\n <FlexWrapper gap={1}>\n <IconButton withTooltip={false} label=\"\" variant=\"ghost\">\n <Drag />\n </IconButton>\n <Flex width=\"100%\" minWidth={0} justifyContent=\"space-between\">\n <Box minWidth={0} paddingTop={1} paddingBottom={1} paddingRight={4}>\n <LinkEllipsis href=\"\">\n <Typography textColor=\"primary600\" ellipsis>\n {displayedValue}\n </Typography>\n </LinkEllipsis>\n </Box>\n {status ? <DocumentStatus status={status} /> : null}\n </Flex>\n </FlexWrapper>\n <DisconnectButton type=\"button\">\n <Cross width=\"12px\" />\n </DisconnectButton>\n </Flex>\n </Box>\n );\n};\n\nexport { RelationDragPreview };\nexport type { RelationDragPreviewProps };\n","import * as React from 'react';\n\nimport { useQueryParams } from '@strapi/admin/strapi-admin';\nimport {\n useCollator,\n useFilter,\n SubNav,\n SubNavHeader,\n SubNavLink,\n SubNavSection,\n SubNavSections,\n} from '@strapi/design-system';\nimport { parse, stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useContentTypeSchema } from '../hooks/useContentTypeSchema';\nimport { useTypedSelector } from '../modules/hooks';\nimport { getTranslation } from '../utils/translations';\n\nimport type { ContentManagerLink } from '../hooks/useContentManagerInitData';\n\nconst SubNavLinkCustom = styled(SubNavLink)`\n div {\n width: inherit;\n span:nth-child(2) {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n width: inherit;\n }\n }\n`;\n\nconst LeftMenu = () => {\n const [search, setSearch] = React.useState('');\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n const { formatMessage, locale } = useIntl();\n\n const collectionTypeLinks = useTypedSelector(\n (state) => state['content-manager'].app.collectionTypeLinks\n );\n\n const singleTypeLinks = useTypedSelector((state) => state['content-manager'].app.singleTypeLinks);\n const { schemas } = useContentTypeSchema();\n\n const { startsWith } = useFilter(locale, {\n sensitivity: 'base',\n });\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const menu = React.useMemo(\n () =>\n [\n {\n id: 'collectionTypes',\n title: formatMessage({\n id: getTranslation('components.LeftMenu.collection-types'),\n defaultMessage: 'Collection Types',\n }),\n searchable: true,\n links: collectionTypeLinks,\n },\n {\n id: 'singleTypes',\n title: formatMessage({\n id: getTranslation('components.LeftMenu.single-types'),\n defaultMessage: 'Single Types',\n }),\n searchable: true,\n links: singleTypeLinks,\n },\n ].map((section) => ({\n ...section,\n links: section.links\n /**\n * Filter by the search value\n */\n .filter((link) => startsWith(link.title, search))\n /**\n * Sort correctly using the language\n */\n .sort((a, b) => formatter.compare(a.title, b.title))\n /**\n * Apply the formated strings to the links from react-intl\n */\n .map((link) => {\n return {\n ...link,\n title: formatMessage({ id: link.title, defaultMessage: link.title }),\n };\n }),\n })),\n [collectionTypeLinks, search, singleTypeLinks, startsWith, formatMessage, formatter]\n );\n\n const handleClear = () => {\n setSearch('');\n };\n\n const handleChangeSearch = ({ target: { value } }: { target: { value: string } }) => {\n setSearch(value);\n };\n\n const label = formatMessage({\n id: getTranslation('header.name'),\n defaultMessage: 'Content Manager',\n });\n\n const getPluginsParamsForLink = (link: ContentManagerLink) => {\n const schema = schemas.find((schema) => schema.uid === link.uid);\n const isI18nEnabled = Boolean((schema?.pluginOptions?.i18n as any)?.localized);\n\n // The search params have the i18n plugin\n if (query.plugins && 'i18n' in query.plugins) {\n // Prepare removal of i18n from the plugins search params\n const { i18n, ...restPlugins } = query.plugins;\n\n // i18n is not enabled, remove it from the plugins search params\n if (!isI18nEnabled) {\n return restPlugins;\n }\n\n // i18n is enabled, put the plugins search params back together\n return { i18n, ...restPlugins };\n }\n\n return query.plugins;\n };\n\n return (\n <SubNav aria-label={label}>\n <SubNavHeader\n label={label}\n searchable\n value={search}\n onChange={handleChangeSearch}\n onClear={handleClear}\n searchLabel={formatMessage({\n id: 'content-manager.components.LeftMenu.Search.label',\n defaultMessage: 'Search for a content type',\n })}\n />\n <SubNavSections>\n {menu.map((section) => {\n return (\n <SubNavSection\n key={section.id}\n label={section.title}\n badgeLabel={section.links.length.toString()}\n >\n {section.links.map((link) => {\n return (\n <SubNavLinkCustom\n tag={NavLink}\n key={link.uid}\n to={{\n pathname: link.to,\n search: stringify({\n ...parse(link.search ?? ''),\n plugins: getPluginsParamsForLink(link),\n }),\n }}\n width=\"100%\"\n >\n {link.title}\n </SubNavLinkCustom>\n );\n })}\n </SubNavSection>\n );\n })}\n </SubNavSections>\n </SubNav>\n );\n};\n\nexport { LeftMenu };\n","import { useEffect } from 'react';\n\nimport {\n useAuth,\n type Permission,\n useNotification,\n useStrapiApp,\n useAPIErrorHandler,\n} from '@strapi/admin/strapi-admin';\nimport { useNotifyAT } from '@strapi/design-system';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\n\nimport { COLLECTION_TYPES, SINGLE_TYPES } from '../constants/collections';\nimport { HOOKS } from '../constants/hooks';\nimport { AppState, setInitialData } from '../modules/app';\nimport { useTypedDispatch, useTypedSelector } from '../modules/hooks';\nimport { useGetAllContentTypeSettingsQuery } from '../services/contentTypes';\nimport { useGetInitialDataQuery } from '../services/init';\nimport { getTranslation } from '../utils/translations';\n\nimport type { Component } from '../../../shared/contracts/components';\nimport type {\n ContentType,\n FindContentTypesSettings,\n} from '../../../shared/contracts/content-types';\nimport type { GetInitData } from '../../../shared/contracts/init';\n\nconst { MUTATE_COLLECTION_TYPES_LINKS, MUTATE_SINGLE_TYPES_LINKS } = HOOKS;\n\ninterface ContentManagerLink {\n permissions: Permission[];\n search: string | null;\n kind: string;\n title: string;\n to: string;\n uid: string;\n name: string;\n isDisplayed: boolean;\n}\n\nconst useContentManagerInitData = (): AppState => {\n const { toggleNotification } = useNotification();\n const dispatch = useTypedDispatch();\n const runHookWaterfall = useStrapiApp(\n 'useContentManagerInitData',\n (state) => state.runHookWaterfall\n );\n const { notifyStatus } = useNotifyAT();\n const { formatMessage } = useIntl();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler(getTranslation);\n const checkUserHasPermissions = useAuth(\n 'useContentManagerInitData',\n (state) => state.checkUserHasPermissions\n );\n\n const state = useTypedSelector((state) => state['content-manager'].app);\n\n const initialDataQuery = useGetInitialDataQuery(undefined, {\n /**\n * TODO: remove this when the CTB has been refactored to use redux-toolkit-query\n * and it can invalidate the cache on mutation\n */\n refetchOnMountOrArgChange: true,\n });\n\n useEffect(() => {\n if (initialDataQuery.data) {\n notifyStatus(\n formatMessage({\n id: getTranslation('App.schemas.data-loaded'),\n defaultMessage: 'The schemas have been successfully loaded.',\n })\n );\n }\n }, [formatMessage, initialDataQuery.data, notifyStatus]);\n\n useEffect(() => {\n if (initialDataQuery.error) {\n toggleNotification({ type: 'danger', message: formatAPIError(initialDataQuery.error) });\n }\n }, [formatAPIError, initialDataQuery.error, toggleNotification]);\n\n const contentTypeSettingsQuery = useGetAllContentTypeSettingsQuery();\n\n useEffect(() => {\n if (contentTypeSettingsQuery.error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(contentTypeSettingsQuery.error),\n });\n }\n }, [formatAPIError, contentTypeSettingsQuery.error, toggleNotification]);\n\n const formatData = async (\n components: Component[],\n contentTypes: ContentType[],\n fieldSizes: GetInitData.Response['data']['fieldSizes'],\n contentTypeConfigurations: FindContentTypesSettings.Response['data']\n ) => {\n /**\n * We group these by the two types we support. We do with an object because we can use default\n * values of arrays to make sure we always have an array to manipulate further on if, for example,\n * a user has not made any single types.\n *\n * This means we have to manually add new content types to this hook if we add a new type – but\n * the safety is worth it.\n */\n const { collectionType: collectionTypeLinks, singleType: singleTypeLinks } =\n contentTypes.reduce<{\n collectionType: ContentType[];\n singleType: ContentType[];\n }>(\n (acc, model) => {\n acc[model.kind].push(model);\n return acc;\n },\n {\n collectionType: [],\n singleType: [],\n }\n );\n const collectionTypeSectionLinks = generateLinks(\n collectionTypeLinks,\n 'collectionTypes',\n contentTypeConfigurations\n );\n const singleTypeSectionLinks = generateLinks(singleTypeLinks, 'singleTypes');\n\n // Collection Types verifications\n const collectionTypeLinksPermissions = await Promise.all(\n collectionTypeSectionLinks.map(({ permissions }) => checkUserHasPermissions(permissions))\n );\n\n const authorizedCollectionTypeLinks = collectionTypeSectionLinks.filter(\n (_, index) => collectionTypeLinksPermissions[index].length > 0\n );\n\n // Single Types verifications\n const singleTypeLinksPermissions = await Promise.all(\n singleTypeSectionLinks.map(({ permissions }) => checkUserHasPermissions(permissions))\n );\n const authorizedSingleTypeLinks = singleTypeSectionLinks.filter(\n (_, index) => singleTypeLinksPermissions[index].length > 0\n );\n const { ctLinks } = runHookWaterfall(MUTATE_COLLECTION_TYPES_LINKS, {\n ctLinks: authorizedCollectionTypeLinks,\n models: contentTypes,\n });\n const { stLinks } = runHookWaterfall(MUTATE_SINGLE_TYPES_LINKS, {\n stLinks: authorizedSingleTypeLinks,\n models: contentTypes,\n });\n\n dispatch(\n setInitialData({\n authorizedCollectionTypeLinks: ctLinks,\n authorizedSingleTypeLinks: stLinks,\n components,\n contentTypeSchemas: contentTypes,\n fieldSizes,\n })\n );\n };\n\n useEffect(() => {\n if (initialDataQuery.data && contentTypeSettingsQuery.data) {\n formatData(\n initialDataQuery.data.components,\n initialDataQuery.data.contentTypes,\n initialDataQuery.data.fieldSizes,\n contentTypeSettingsQuery.data\n );\n }\n }, [initialDataQuery.data, contentTypeSettingsQuery.data]);\n\n return { ...state };\n};\n\nconst generateLinks = (\n links: ContentType[],\n type: 'collectionTypes' | 'singleTypes',\n configurations: FindContentTypesSettings.Response['data'] = []\n) => {\n return links\n .filter((link) => link.isDisplayed)\n .map((link) => {\n const collectionTypesPermissions = [\n { action: 'plugin::content-manager.explorer.create', subject: link.uid },\n { action: 'plugin::content-manager.explorer.read', subject: link.uid },\n ];\n const singleTypesPermissions = [\n { action: 'plugin::content-manager.explorer.read', subject: link.uid },\n ];\n const permissions =\n type === 'collectionTypes' ? collectionTypesPermissions : singleTypesPermissions;\n\n const currentContentTypeConfig = configurations.find(({ uid }) => uid === link.uid);\n\n let search = null;\n\n if (currentContentTypeConfig) {\n const searchParams = {\n page: 1,\n pageSize: currentContentTypeConfig.settings.pageSize,\n sort: `${currentContentTypeConfig.settings.defaultSortBy}:${currentContentTypeConfig.settings.defaultSortOrder}`,\n };\n\n search = stringify(searchParams, { encode: false });\n }\n\n return {\n permissions,\n search,\n kind: link.kind,\n title: link.info.displayName,\n to: `/content-manager/${link.kind === 'collectionType' ? COLLECTION_TYPES : SINGLE_TYPES}/${\n link.uid\n }`,\n uid: link.uid,\n // Used for the list item key in the helper plugin\n name: link.uid,\n isDisplayed: link.isDisplayed,\n } satisfies ContentManagerLink;\n });\n};\n\nexport { useContentManagerInitData };\nexport type { ContentManagerLink };\n","/* eslint-disable check-file/filename-naming-convention */\nimport * as React from 'react';\n\nimport { Page, useGuidedTour, Layouts } from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\nimport { Navigate, Outlet, useLocation, useMatch } from 'react-router-dom';\n\nimport { DragLayer, DragLayerProps } from './components/DragLayer';\nimport { CardDragPreview } from './components/DragPreviews/CardDragPreview';\nimport { ComponentDragPreview } from './components/DragPreviews/ComponentDragPreview';\nimport { RelationDragPreview } from './components/DragPreviews/RelationDragPreview';\nimport { LeftMenu } from './components/LeftMenu';\nimport { ItemTypes } from './constants/dragAndDrop';\nimport { useContentManagerInitData } from './hooks/useContentManagerInitData';\nimport { getTranslation } from './utils/translations';\n\n/* -------------------------------------------------------------------------------------------------\n * Layout\n * -----------------------------------------------------------------------------------------------*/\n\nconst Layout = () => {\n const contentTypeMatch = useMatch('/content-manager/:kind/:uid/*');\n\n const { isLoading, collectionTypeLinks, models, singleTypeLinks } = useContentManagerInitData();\n const authorisedModels = [...collectionTypeLinks, ...singleTypeLinks].sort((a, b) =>\n a.title.localeCompare(b.title)\n );\n\n const { pathname } = useLocation();\n const { formatMessage } = useIntl();\n const startSection = useGuidedTour('Layout', (state) => state.startSection);\n const startSectionRef = React.useRef(startSection);\n\n React.useEffect(() => {\n if (startSectionRef.current) {\n startSectionRef.current('contentManager');\n }\n }, []);\n\n if (isLoading) {\n return (\n <>\n <Page.Title>\n {formatMessage({\n id: getTranslation('plugin.name'),\n defaultMessage: 'Content Manager',\n })}\n </Page.Title>\n <Page.Loading />\n </>\n );\n }\n\n // Array of models that are displayed in the content manager\n const supportedModelsToDisplay = models.filter(({ isDisplayed }) => isDisplayed);\n\n // Redirect the user to the 403 page\n if (\n authorisedModels.length === 0 &&\n supportedModelsToDisplay.length > 0 &&\n pathname !== '/content-manager/403'\n ) {\n return <Navigate to=\"/403\" />;\n }\n\n // Redirect the user to the create content type page\n if (supportedModelsToDisplay.length === 0 && pathname !== '/no-content-types') {\n return <Navigate to=\"/no-content-types\" />;\n }\n\n if (!contentTypeMatch && authorisedModels.length > 0) {\n return (\n <Navigate\n to={{\n pathname: authorisedModels[0].to,\n search: authorisedModels[0].search ?? '',\n }}\n replace\n />\n );\n }\n\n return (\n <>\n <Page.Title>\n {formatMessage({\n id: getTranslation('plugin.name'),\n defaultMessage: 'Content Manager',\n })}\n </Page.Title>\n <Layouts.Root sideNav={<LeftMenu />}>\n <DragLayer renderItem={renderDraglayerItem} />\n <Outlet />\n </Layouts.Root>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * renderDraglayerItem\n * -----------------------------------------------------------------------------------------------*/\n\nfunction renderDraglayerItem({ type, item }: Parameters<DragLayerProps['renderItem']>[0]) {\n if (!type || (type && typeof type !== 'string')) {\n return null;\n }\n\n /**\n * Because a user may have multiple relations / dynamic zones / repeable fields in the same content type,\n * we append the fieldName for the item type to make them unique, however, we then want to extract that\n * first type to apply the correct preview.\n */\n const [actualType] = type.split('_');\n\n switch (actualType) {\n case ItemTypes.EDIT_FIELD:\n case ItemTypes.FIELD:\n return <CardDragPreview label={item.label} />;\n case ItemTypes.COMPONENT:\n case ItemTypes.DYNAMIC_ZONE:\n return <ComponentDragPreview displayedValue={item.displayedValue} />;\n\n case ItemTypes.RELATION:\n return <RelationDragPreview {...item} />;\n\n default:\n return null;\n }\n}\n\nexport { Layout };\n"],"names":["useDragLayer","jsx","Box","jsxs","Flex","CaretDown","Typography","IconButton","Trash","Drag","styled","FlexWrapper","LinkEllipsis","DocumentStatus","DisconnectButton","Cross","SubNavLink","React","useQueryParams","useIntl","useTypedSelector","useContentTypeSchema","useFilter","useCollator","getTranslation","schema","SubNav","SubNavHeader","SubNavSections","SubNavSection","NavLink","stringify","parse","HOOKS","useNotification","useTypedDispatch","useStrapiApp","state","useNotifyAT","useAPIErrorHandler","useAuth","useGetInitialDataQuery","useEffect","useGetAllContentTypeSettingsQuery","index","setInitialData","COLLECTION_TYPES","SINGLE_TYPES","useMatch","useLocation","useGuidedTour","Fragment","Page","Navigate","Layouts","Outlet","ItemTypes","CardDragPreview"],"mappings":"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"}
@@ -34,10 +34,8 @@ function setIn(obj, path, value) {
34
34
  if ((i === 0 ? obj : resVal)[pathArray[i]] === value) {
35
35
  return obj;
36
36
  }
37
- if (value === void 0) {
37
+ {
38
38
  delete resVal[pathArray[i]];
39
- } else {
40
- resVal[pathArray[i]] = value;
41
39
  }
42
40
  if (i === 0 && value === void 0) {
43
41
  delete res[pathArray[i]];
@@ -46,4 +44,4 @@ function setIn(obj, path, value) {
46
44
  }
47
45
  exports.getIn = getIn;
48
46
  exports.setIn = setIn;
49
- //# sourceMappingURL=objects-gigeqt7s.js.map
47
+ //# sourceMappingURL=objects-BcXOv6_9.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"objects-gigeqt7s.js","sources":["../../admin/src/utils/objects.ts"],"sourcesContent":["import clone from 'lodash/clone';\nimport toPath from 'lodash/toPath';\n\n/**\n * Deeply get a value from an object via its path.\n */\nexport function getIn(obj: any, key: string | string[], def?: any, pathStartIndex: number = 0) {\n const path = toPath(key);\n while (obj && pathStartIndex < path.length) {\n obj = obj[path[pathStartIndex++]];\n }\n\n // check if path is not in the end\n if (pathStartIndex !== path.length && !obj) {\n return def;\n }\n\n return obj === undefined ? def : obj;\n}\n\n/** @internal is the given object an Object? */\nexport const isObject = (obj: any): obj is object =>\n obj !== null && typeof obj === 'object' && !Array.isArray(obj);\n\n/** @internal is the given object an integer? */\nexport const isInteger = (obj: any): boolean => String(Math.floor(Number(obj))) === obj;\n\n/**\n * Deeply set a value from in object via its path. If the value at `path`\n * has changed, return a shallow copy of obj with `value` set at `path`.\n * If `value` has not changed, return the original `obj`.\n *\n * Existing objects / arrays along `path` are also shallow copied. Sibling\n * objects along path retain the same internal js reference. Since new\n * objects / arrays are only created along `path`, we can test if anything\n * changed in a nested structure by comparing the object's reference in\n * the old and new object, similar to how russian doll cache invalidation\n * works.\n *\n * In earlier versions of this function, which used cloneDeep, there were\n * issues whereby settings a nested value would mutate the parent\n * instead of creating a new object. `clone` avoids that bug making a\n * shallow copy of the objects along the update path\n * so no object is mutated in place.\n *\n * Before changing this function, please read through the following\n * discussions.\n *\n * @see https://github.com/developit/linkstate\n * @see https://github.com/jaredpalmer/formik/pull/123\n */\nexport function setIn(obj: any, path: string, value: any): any {\n const res: any = clone(obj); // this keeps inheritance when obj is a class\n let resVal: any = res;\n let i = 0;\n const pathArray = toPath(path);\n\n for (; i < pathArray.length - 1; i++) {\n const currentPath: string = pathArray[i];\n const currentObj: any = getIn(obj, pathArray.slice(0, i + 1));\n\n if (currentObj && (isObject(currentObj) || Array.isArray(currentObj))) {\n resVal = resVal[currentPath] = clone(currentObj);\n } else {\n const nextPath: string = pathArray[i + 1];\n resVal = resVal[currentPath] = isInteger(nextPath) && Number(nextPath) >= 0 ? [] : {};\n }\n }\n\n // Return original object if new value is the same as current\n if ((i === 0 ? obj : resVal)[pathArray[i]] === value) {\n return obj;\n }\n\n if (value === undefined) {\n delete resVal[pathArray[i]];\n } else {\n resVal[pathArray[i]] = value;\n }\n\n // If the path array has a single element, the loop did not run.\n // Deleting on `resVal` had no effect in this scenario, so we delete on the result instead.\n if (i === 0 && value === undefined) {\n delete res[pathArray[i]];\n }\n\n return res;\n}\n"],"names":["toPath","clone"],"mappings":";;;;;;AAMO,SAAS,MAAM,KAAU,KAAwB,KAAW,iBAAyB,GAAG;AACvF,QAAA,OAAOA,wBAAO,GAAG;AAChB,SAAA,OAAO,iBAAiB,KAAK,QAAQ;AACpC,UAAA,IAAI,KAAK,gBAAgB,CAAC;AAAA,EAClC;AAGA,MAAI,mBAAmB,KAAK,UAAU,CAAC,KAAK;AACnC,WAAA;AAAA,EACT;AAEO,SAAA,QAAQ,SAAY,MAAM;AACnC;AAGa,MAAA,WAAW,CAAC,QACvB,QAAQ,QAAQ,OAAO,QAAQ,YAAY,CAAC,MAAM,QAAQ,GAAG;AAGlD,MAAA,YAAY,CAAC,QAAsB,OAAO,KAAK,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM;AA0BpE,SAAA,MAAM,KAAU,MAAc,OAAiB;AACvD,QAAA,MAAWC,uBAAM,GAAG;AAC1B,MAAI,SAAc;AAClB,MAAI,IAAI;AACF,QAAA,YAAYD,wBAAO,IAAI;AAE7B,SAAO,IAAI,UAAU,SAAS,GAAG,KAAK;AAC9B,UAAA,cAAsB,UAAU,CAAC;AACjC,UAAA,aAAkB,MAAM,KAAK,UAAU,MAAM,GAAG,IAAI,CAAC,CAAC;AAE5D,QAAI,eAAe,SAAS,UAAU,KAAK,MAAM,QAAQ,UAAU,IAAI;AACrE,eAAS,OAAO,WAAW,IAAIC,eAAA,QAAM,UAAU;AAAA,IAAA,OAC1C;AACC,YAAA,WAAmB,UAAU,IAAI,CAAC;AACxC,eAAS,OAAO,WAAW,IAAI,UAAU,QAAQ,KAAK,OAAO,QAAQ,KAAK,IAAI,CAAA,IAAK,CAAA;AAAA,IACrF;AAAA,EACF;AAGK,OAAA,MAAM,IAAI,MAAM,QAAQ,UAAU,CAAC,CAAC,MAAM,OAAO;AAC7C,WAAA;AAAA,EACT;AAEA,MAAI,UAAU,QAAW;AAChB,WAAA,OAAO,UAAU,CAAC,CAAC;AAAA,EAAA,OACrB;AACE,WAAA,UAAU,CAAC,CAAC,IAAI;AAAA,EACzB;AAII,MAAA,MAAM,KAAK,UAAU,QAAW;AAC3B,WAAA,IAAI,UAAU,CAAC,CAAC;AAAA,EACzB;AAEO,SAAA;AACT;;;"}
1
+ {"version":3,"file":"objects-BcXOv6_9.js","sources":["../../admin/src/utils/objects.ts"],"sourcesContent":["import clone from 'lodash/clone';\nimport toPath from 'lodash/toPath';\n\n/**\n * Deeply get a value from an object via its path.\n */\nexport function getIn(obj: any, key: string | string[], def?: any, pathStartIndex: number = 0) {\n const path = toPath(key);\n while (obj && pathStartIndex < path.length) {\n obj = obj[path[pathStartIndex++]];\n }\n\n // check if path is not in the end\n if (pathStartIndex !== path.length && !obj) {\n return def;\n }\n\n return obj === undefined ? def : obj;\n}\n\n/** @internal is the given object an Object? */\nexport const isObject = (obj: any): obj is object =>\n obj !== null && typeof obj === 'object' && !Array.isArray(obj);\n\n/** @internal is the given object an integer? */\nexport const isInteger = (obj: any): boolean => String(Math.floor(Number(obj))) === obj;\n\n/**\n * Deeply set a value from in object via its path. If the value at `path`\n * has changed, return a shallow copy of obj with `value` set at `path`.\n * If `value` has not changed, return the original `obj`.\n *\n * Existing objects / arrays along `path` are also shallow copied. Sibling\n * objects along path retain the same internal js reference. Since new\n * objects / arrays are only created along `path`, we can test if anything\n * changed in a nested structure by comparing the object's reference in\n * the old and new object, similar to how russian doll cache invalidation\n * works.\n *\n * In earlier versions of this function, which used cloneDeep, there were\n * issues whereby settings a nested value would mutate the parent\n * instead of creating a new object. `clone` avoids that bug making a\n * shallow copy of the objects along the update path\n * so no object is mutated in place.\n *\n * Before changing this function, please read through the following\n * discussions.\n *\n * @see https://github.com/developit/linkstate\n * @see https://github.com/jaredpalmer/formik/pull/123\n */\nexport function setIn(obj: any, path: string, value: any): any {\n const res: any = clone(obj); // this keeps inheritance when obj is a class\n let resVal: any = res;\n let i = 0;\n const pathArray = toPath(path);\n\n for (; i < pathArray.length - 1; i++) {\n const currentPath: string = pathArray[i];\n const currentObj: any = getIn(obj, pathArray.slice(0, i + 1));\n\n if (currentObj && (isObject(currentObj) || Array.isArray(currentObj))) {\n resVal = resVal[currentPath] = clone(currentObj);\n } else {\n const nextPath: string = pathArray[i + 1];\n resVal = resVal[currentPath] = isInteger(nextPath) && Number(nextPath) >= 0 ? [] : {};\n }\n }\n\n // Return original object if new value is the same as current\n if ((i === 0 ? obj : resVal)[pathArray[i]] === value) {\n return obj;\n }\n\n if (value === undefined) {\n delete resVal[pathArray[i]];\n } else {\n resVal[pathArray[i]] = value;\n }\n\n // If the path array has a single element, the loop did not run.\n // Deleting on `resVal` had no effect in this scenario, so we delete on the result instead.\n if (i === 0 && value === undefined) {\n delete res[pathArray[i]];\n }\n\n return res;\n}\n"],"names":["toPath","clone"],"mappings":";;;;;;AAMO,SAAS,MAAM,KAAU,KAAwB,KAAW,iBAAyB,GAAG;AACvF,QAAA,OAAOA,wBAAO,GAAG;AAChB,SAAA,OAAO,iBAAiB,KAAK,QAAQ;AACpC,UAAA,IAAI,KAAK,gBAAgB,CAAC;AAAA,EAAA;AAIlC,MAAI,mBAAmB,KAAK,UAAU,CAAC,KAAK;AACnC,WAAA;AAAA,EAAA;AAGF,SAAA,QAAQ,SAAY,MAAM;AACnC;AAGa,MAAA,WAAW,CAAC,QACvB,QAAQ,QAAQ,OAAO,QAAQ,YAAY,CAAC,MAAM,QAAQ,GAAG;AAGlD,MAAA,YAAY,CAAC,QAAsB,OAAO,KAAK,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM;AA0BpE,SAAA,MAAM,KAAU,MAAc,OAAiB;AACvD,QAAA,MAAWC,uBAAM,GAAG;AAC1B,MAAI,SAAc;AAClB,MAAI,IAAI;AACF,QAAA,YAAYD,wBAAO,IAAI;AAE7B,SAAO,IAAI,UAAU,SAAS,GAAG,KAAK;AAC9B,UAAA,cAAsB,UAAU,CAAC;AACjC,UAAA,aAAkB,MAAM,KAAK,UAAU,MAAM,GAAG,IAAI,CAAC,CAAC;AAE5D,QAAI,eAAe,SAAS,UAAU,KAAK,MAAM,QAAQ,UAAU,IAAI;AACrE,eAAS,OAAO,WAAW,IAAIC,eAAAA,QAAM,UAAU;AAAA,IAAA,OAC1C;AACC,YAAA,WAAmB,UAAU,IAAI,CAAC;AACxC,eAAS,OAAO,WAAW,IAAI,UAAU,QAAQ,KAAK,OAAO,QAAQ,KAAK,IAAI,CAAC,IAAI,CAAC;AAAA,IAAA;AAAA,EACtF;AAIG,OAAA,MAAM,IAAI,MAAM,QAAQ,UAAU,CAAC,CAAC,MAAM,OAAO;AAC7C,WAAA;AAAA,EAAA;AAGgB;AAChB,WAAA,OAAO,UAAU,CAAC,CAAC;AAAA,EAAA;AAOxB,MAAA,MAAM,KAAK,UAAU,QAAW;AAC3B,WAAA,IAAI,UAAU,CAAC,CAAC;AAAA,EAAA;AAGlB,SAAA;AACT;;;"}
@@ -30,10 +30,8 @@ function setIn(obj, path, value) {
30
30
  if ((i === 0 ? obj : resVal)[pathArray[i]] === value) {
31
31
  return obj;
32
32
  }
33
- if (value === void 0) {
33
+ {
34
34
  delete resVal[pathArray[i]];
35
- } else {
36
- resVal[pathArray[i]] = value;
37
35
  }
38
36
  if (i === 0 && value === void 0) {
39
37
  delete res[pathArray[i]];
@@ -44,4 +42,4 @@ export {
44
42
  getIn as g,
45
43
  setIn as s
46
44
  };
47
- //# sourceMappingURL=objects-mKMAmfec.mjs.map
45
+ //# sourceMappingURL=objects-D6yBsdmx.mjs.map