@strapi/admin 4.26.0 → 4.26.1

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 (211) hide show
  1. package/dist/_chunks/{AdminSeatInfo-gLztRe97.mjs → AdminSeatInfo-eBQoj8_8.mjs} +3 -3
  2. package/dist/_chunks/{AdminSeatInfo-gLztRe97.mjs.map → AdminSeatInfo-eBQoj8_8.mjs.map} +1 -1
  3. package/dist/_chunks/{AdminSeatInfo-CcnrDPFr.js → AdminSeatInfo-nK8rqSxi.js} +3 -3
  4. package/dist/_chunks/{AdminSeatInfo-CcnrDPFr.js.map → AdminSeatInfo-nK8rqSxi.js.map} +1 -1
  5. package/dist/_chunks/{AuthenticatedApp-9hmvxLus.mjs → AuthenticatedApp-JancbsrG.mjs} +20 -20
  6. package/dist/_chunks/{AuthenticatedApp-9hmvxLus.mjs.map → AuthenticatedApp-JancbsrG.mjs.map} +1 -1
  7. package/dist/_chunks/{AuthenticatedApp-WZhpPnNK.js → AuthenticatedApp-tkj6j2bL.js} +20 -20
  8. package/dist/_chunks/{AuthenticatedApp-WZhpPnNK.js.map → AuthenticatedApp-tkj6j2bL.js.map} +1 -1
  9. package/dist/_chunks/{CreateActionEE-jpIeNaRY.js → CreateActionEE-FyZajf1M.js} +2 -2
  10. package/dist/_chunks/{CreateActionEE-jpIeNaRY.js.map → CreateActionEE-FyZajf1M.js.map} +1 -1
  11. package/dist/_chunks/{CreateActionEE-yjoda5Hb.mjs → CreateActionEE-ONxhbJu1.mjs} +2 -2
  12. package/dist/_chunks/{CreateActionEE-yjoda5Hb.mjs.map → CreateActionEE-ONxhbJu1.mjs.map} +1 -1
  13. package/dist/_chunks/{CreatePage-y2qFb3EW.mjs → CreatePage-8M0vdxg2.mjs} +6 -6
  14. package/dist/_chunks/{CreatePage-y2qFb3EW.mjs.map → CreatePage-8M0vdxg2.mjs.map} +1 -1
  15. package/dist/_chunks/{CreatePage-dw59ltG7.js → CreatePage-IPkwTKwc.js} +6 -6
  16. package/dist/_chunks/{CreatePage-dw59ltG7.js.map → CreatePage-IPkwTKwc.js.map} +1 -1
  17. package/dist/_chunks/{CreatePage-_3GFnssV.mjs → CreatePage-Ozitc6XZ.mjs} +3 -3
  18. package/dist/_chunks/{CreatePage-_3GFnssV.mjs.map → CreatePage-Ozitc6XZ.mjs.map} +1 -1
  19. package/dist/_chunks/{CreatePage-gKmLd90c.mjs → CreatePage-UG-W7iQ1.mjs} +8 -8
  20. package/dist/_chunks/{CreatePage-gKmLd90c.mjs.map → CreatePage-UG-W7iQ1.mjs.map} +1 -1
  21. package/dist/_chunks/{CreatePage-A08bjELp.js → CreatePage-m7HvMdiG.js} +8 -8
  22. package/dist/_chunks/{CreatePage-A08bjELp.js.map → CreatePage-m7HvMdiG.js.map} +1 -1
  23. package/dist/_chunks/{CreatePage-0Mt-xoxO.js → CreatePage-q-0DWH6f.js} +3 -3
  24. package/dist/_chunks/{CreatePage-0Mt-xoxO.js.map → CreatePage-q-0DWH6f.js.map} +1 -1
  25. package/dist/_chunks/{CreateView-r0wXY7d9.js → CreateView-3vXuRwTE.js} +6 -6
  26. package/dist/_chunks/{CreateView-r0wXY7d9.js.map → CreateView-3vXuRwTE.js.map} +1 -1
  27. package/dist/_chunks/{CreateView-icsdK0LP.mjs → CreateView-MEEAMj_j.mjs} +6 -6
  28. package/dist/_chunks/{CreateView-icsdK0LP.mjs.map → CreateView-MEEAMj_j.mjs.map} +1 -1
  29. package/dist/_chunks/{CreateView-iw5zdito.js → CreateView-UTZaprgW.js} +6 -6
  30. package/dist/_chunks/{CreateView-iw5zdito.js.map → CreateView-UTZaprgW.js.map} +1 -1
  31. package/dist/_chunks/{CreateView-48K591De.mjs → CreateView-iyd6ZNMx.mjs} +6 -6
  32. package/dist/_chunks/{CreateView-48K591De.mjs.map → CreateView-iyd6ZNMx.mjs.map} +1 -1
  33. package/dist/_chunks/{EditPage-pYEEit-R.js → EditPage-6Dkfaypn.js} +9 -9
  34. package/dist/_chunks/{EditPage-pYEEit-R.js.map → EditPage-6Dkfaypn.js.map} +1 -1
  35. package/dist/_chunks/{EditPage-eBgXmlCr.mjs → EditPage-MB7ic_DE.mjs} +6 -6
  36. package/dist/_chunks/{EditPage-eBgXmlCr.mjs.map → EditPage-MB7ic_DE.mjs.map} +1 -1
  37. package/dist/_chunks/{EditPage-jvG5GlJc.mjs → EditPage-PN8fpWzJ.mjs} +4 -4
  38. package/dist/_chunks/{EditPage-jvG5GlJc.mjs.map → EditPage-PN8fpWzJ.mjs.map} +1 -1
  39. package/dist/_chunks/{EditPage-rf_a255j.js → EditPage-Rkprr51L.js} +6 -6
  40. package/dist/_chunks/{EditPage-rf_a255j.js.map → EditPage-Rkprr51L.js.map} +1 -1
  41. package/dist/_chunks/{EditPage-6p8Brxzp.js → EditPage-TwHF7L9k.js} +6 -6
  42. package/dist/_chunks/{EditPage-6p8Brxzp.js.map → EditPage-TwHF7L9k.js.map} +1 -1
  43. package/dist/_chunks/{EditPage-ps19Ubuk.mjs → EditPage-XBuNWkpO.mjs} +6 -6
  44. package/dist/_chunks/{EditPage-ps19Ubuk.mjs.map → EditPage-XBuNWkpO.mjs.map} +1 -1
  45. package/dist/_chunks/{EditPage-fuMYcO_D.mjs → EditPage-dzBvUrJv.mjs} +9 -9
  46. package/dist/_chunks/{EditPage-fuMYcO_D.mjs.map → EditPage-dzBvUrJv.mjs.map} +1 -1
  47. package/dist/_chunks/{EditPage-nGqO0c8E.js → EditPage-wrNTcvou.js} +4 -4
  48. package/dist/_chunks/{EditPage-nGqO0c8E.js.map → EditPage-wrNTcvou.js.map} +1 -1
  49. package/dist/_chunks/{EditView-9KEeAO94.js → EditView-Hdykp6zL.js} +4 -4
  50. package/dist/_chunks/{EditView-9KEeAO94.js.map → EditView-Hdykp6zL.js.map} +1 -1
  51. package/dist/_chunks/{EditView-Pd1zWX47.mjs → EditView-rQjXLZp8.mjs} +4 -4
  52. package/dist/_chunks/{EditView-Pd1zWX47.mjs.map → EditView-rQjXLZp8.mjs.map} +1 -1
  53. package/dist/_chunks/{EditViewPage-Jje9Oegz.mjs → EditViewPage-K0arDsHr.mjs} +4 -4
  54. package/dist/_chunks/{EditViewPage-Jje9Oegz.mjs.map → EditViewPage-K0arDsHr.mjs.map} +1 -1
  55. package/dist/_chunks/{EditViewPage-KQhcQtqd.js → EditViewPage-suFXvPEu.js} +4 -4
  56. package/dist/_chunks/{EditViewPage-KQhcQtqd.js.map → EditViewPage-suFXvPEu.js.map} +1 -1
  57. package/dist/_chunks/{EventsTable-SMVq4K27.js → EventsTable-QFx2TI60.js} +6 -6
  58. package/dist/_chunks/{EventsTable-SMVq4K27.js.map → EventsTable-QFx2TI60.js.map} +1 -1
  59. package/dist/_chunks/{EventsTable-OjN46vKG.mjs → EventsTable-_Sjd60rm.mjs} +6 -6
  60. package/dist/_chunks/{EventsTable-OjN46vKG.mjs.map → EventsTable-_Sjd60rm.mjs.map} +1 -1
  61. package/dist/_chunks/{HomePage-_OZ837dF.js → HomePage-BUCiJHkf.js} +5 -5
  62. package/dist/_chunks/{HomePage-_OZ837dF.js.map → HomePage-BUCiJHkf.js.map} +1 -1
  63. package/dist/_chunks/{HomePage-zkMkOLZy.js → HomePage-SEKwiDoe.js} +6 -6
  64. package/dist/_chunks/{HomePage-zkMkOLZy.js.map → HomePage-SEKwiDoe.js.map} +1 -1
  65. package/dist/_chunks/{HomePage-iGGPufdI.mjs → HomePage-VJHyeUoh.mjs} +5 -5
  66. package/dist/_chunks/{HomePage-iGGPufdI.mjs.map → HomePage-VJHyeUoh.mjs.map} +1 -1
  67. package/dist/_chunks/{HomePage-1PlFSGc-.mjs → HomePage-yjuVHSI3.mjs} +6 -6
  68. package/dist/_chunks/{HomePage-1PlFSGc-.mjs.map → HomePage-yjuVHSI3.mjs.map} +1 -1
  69. package/dist/_chunks/{InformationBoxEE-RkUQObb9.js → InformationBoxEE-w1jk2goo.js} +3 -3
  70. package/dist/_chunks/{InformationBoxEE-RkUQObb9.js.map → InformationBoxEE-w1jk2goo.js.map} +1 -1
  71. package/dist/_chunks/{InformationBoxEE-Y8w2OZfF.mjs → InformationBoxEE-xdYByBFg.mjs} +3 -3
  72. package/dist/_chunks/{InformationBoxEE-Y8w2OZfF.mjs.map → InformationBoxEE-xdYByBFg.mjs.map} +1 -1
  73. package/dist/_chunks/{InstalledPluginsPage-6VEamMx-.js → InstalledPluginsPage-X4E_06W_.js} +3 -3
  74. package/dist/_chunks/{InstalledPluginsPage-6VEamMx-.js.map → InstalledPluginsPage-X4E_06W_.js.map} +1 -1
  75. package/dist/_chunks/{InstalledPluginsPage-FLV-i16T.mjs → InstalledPluginsPage-fgJ5-kNV.mjs} +3 -3
  76. package/dist/_chunks/{InstalledPluginsPage-FLV-i16T.mjs.map → InstalledPluginsPage-fgJ5-kNV.mjs.map} +1 -1
  77. package/dist/_chunks/{Layout-yDFhMeG0.js → Layout-QrAc9In_.js} +2 -2
  78. package/dist/_chunks/{Layout-yDFhMeG0.js.map → Layout-QrAc9In_.js.map} +1 -1
  79. package/dist/_chunks/{Layout-BbFzmdA3.mjs → Layout-sy4_7v7O.mjs} +2 -2
  80. package/dist/_chunks/{Layout-BbFzmdA3.mjs.map → Layout-sy4_7v7O.mjs.map} +1 -1
  81. package/dist/_chunks/{ListPage-3_Rmx0WL.js → ListPage-5rgyIGmO.js} +8 -8
  82. package/dist/_chunks/{ListPage-3_Rmx0WL.js.map → ListPage-5rgyIGmO.js.map} +1 -1
  83. package/dist/_chunks/{ListPage-r1G44Ymw.mjs → ListPage-6xeDUcGB.mjs} +2 -2
  84. package/dist/_chunks/{ListPage-r1G44Ymw.mjs.map → ListPage-6xeDUcGB.mjs.map} +1 -1
  85. package/dist/_chunks/{ListPage-AUecxlA9.js → ListPage-AnMlAIXK.js} +6 -6
  86. package/dist/_chunks/{ListPage-AUecxlA9.js.map → ListPage-AnMlAIXK.js.map} +1 -1
  87. package/dist/_chunks/{ListPage-QhtuDpJA.js → ListPage-DMkNWoJu.js} +7 -7
  88. package/dist/_chunks/{ListPage-QhtuDpJA.js.map → ListPage-DMkNWoJu.js.map} +1 -1
  89. package/dist/_chunks/{ListPage-Lqx57Glr.mjs → ListPage-Hv68x6W-.mjs} +7 -7
  90. package/dist/_chunks/{ListPage-Lqx57Glr.mjs.map → ListPage-Hv68x6W-.mjs.map} +1 -1
  91. package/dist/_chunks/{ListPage-kz10SAjp.js → ListPage-KXTkgGme.js} +4 -4
  92. package/dist/_chunks/{ListPage-kz10SAjp.js.map → ListPage-KXTkgGme.js.map} +1 -1
  93. package/dist/_chunks/{ListPage-iaetHfR8.mjs → ListPage-NG7JT4yN.mjs} +6 -6
  94. package/dist/_chunks/{ListPage-iaetHfR8.mjs.map → ListPage-NG7JT4yN.mjs.map} +1 -1
  95. package/dist/_chunks/{ListPage-Zab_MlPC.js → ListPage-UkAUyG2N.js} +3 -3
  96. package/dist/_chunks/{ListPage-Zab_MlPC.js.map → ListPage-UkAUyG2N.js.map} +1 -1
  97. package/dist/_chunks/{ListPage-iiklTiAf.mjs → ListPage-b8Z1h4MO.mjs} +3 -3
  98. package/dist/_chunks/{ListPage-iiklTiAf.mjs.map → ListPage-b8Z1h4MO.mjs.map} +1 -1
  99. package/dist/_chunks/{ListPage-zsMQLWZe.js → ListPage-jo_bXvnl.js} +2 -2
  100. package/dist/_chunks/{ListPage-zsMQLWZe.js.map → ListPage-jo_bXvnl.js.map} +1 -1
  101. package/dist/_chunks/{ListPage-WJP01btb.mjs → ListPage-ufqDMdqp.mjs} +4 -4
  102. package/dist/_chunks/{ListPage-WJP01btb.mjs.map → ListPage-ufqDMdqp.mjs.map} +1 -1
  103. package/dist/_chunks/{ListPage-59QCcSqZ.mjs → ListPage-zP1FDM-4.mjs} +8 -8
  104. package/dist/_chunks/{ListPage-59QCcSqZ.mjs.map → ListPage-zP1FDM-4.mjs.map} +1 -1
  105. package/dist/_chunks/{ListView-mKtPXw3S.mjs → ListView-9YFsJ7GI.mjs} +3 -3
  106. package/dist/_chunks/{ListView-mKtPXw3S.mjs.map → ListView-9YFsJ7GI.mjs.map} +1 -1
  107. package/dist/_chunks/{ListView-baie7EdX.js → ListView-NS-P5YQG.js} +3 -3
  108. package/dist/_chunks/{ListView-baie7EdX.js.map → ListView-NS-P5YQG.js.map} +1 -1
  109. package/dist/_chunks/{ListView-5XArx3Uw.js → ListView-nOHxPWGQ.js} +3 -3
  110. package/dist/_chunks/{ListView-5XArx3Uw.js.map → ListView-nOHxPWGQ.js.map} +1 -1
  111. package/dist/_chunks/{ListView-dF3W-1qO.mjs → ListView-ytDk6yty.mjs} +3 -3
  112. package/dist/_chunks/{ListView-dF3W-1qO.mjs.map → ListView-ytDk6yty.mjs.map} +1 -1
  113. package/dist/_chunks/{Login-fNgnBkZN.mjs → Login-BRD5caM-.mjs} +2 -2
  114. package/dist/_chunks/{Login-fNgnBkZN.mjs.map → Login-BRD5caM-.mjs.map} +1 -1
  115. package/dist/_chunks/{Login-xMEWYqb3.js → Login-BnkbBY7n.js} +2 -2
  116. package/dist/_chunks/{Login-xMEWYqb3.js.map → Login-BnkbBY7n.js.map} +1 -1
  117. package/dist/_chunks/{MagicLinkEE-7ImmXKjt.mjs → MagicLinkEE-AqYdmaet.mjs} +4 -4
  118. package/dist/_chunks/{MagicLinkEE-7ImmXKjt.mjs.map → MagicLinkEE-AqYdmaet.mjs.map} +1 -1
  119. package/dist/_chunks/{MagicLinkEE-8eVOHtWs.js → MagicLinkEE-u9iZrfmz.js} +4 -4
  120. package/dist/_chunks/{MagicLinkEE-8eVOHtWs.js.map → MagicLinkEE-u9iZrfmz.js.map} +1 -1
  121. package/dist/_chunks/{MarketplacePage-Xg7mos0Q.js → MarketplacePage-ccjqZRTt.js} +3 -3
  122. package/dist/_chunks/{MarketplacePage-Xg7mos0Q.js.map → MarketplacePage-ccjqZRTt.js.map} +1 -1
  123. package/dist/_chunks/{MarketplacePage-9gMDs0VU.mjs → MarketplacePage-vZrbVgk6.mjs} +3 -3
  124. package/dist/_chunks/{MarketplacePage-9gMDs0VU.mjs.map → MarketplacePage-vZrbVgk6.mjs.map} +1 -1
  125. package/dist/_chunks/{Permissions-hFoxbU5P.js → Permissions-J__XYO4N.js} +2 -2
  126. package/dist/_chunks/{Permissions-hFoxbU5P.js.map → Permissions-J__XYO4N.js.map} +1 -1
  127. package/dist/_chunks/{Permissions-zCLsoAGa.mjs → Permissions-UIYvY1V6.mjs} +2 -2
  128. package/dist/_chunks/{Permissions-zCLsoAGa.mjs.map → Permissions-UIYvY1V6.mjs.map} +1 -1
  129. package/dist/_chunks/{ProfilePage-31ZnqdJz.mjs → ProfilePage-ArnPF1HF.mjs} +3 -3
  130. package/dist/_chunks/{ProfilePage-31ZnqdJz.mjs.map → ProfilePage-ArnPF1HF.mjs.map} +1 -1
  131. package/dist/_chunks/{ProfilePage-v0d-63SV.js → ProfilePage-UC76-e8W.js} +3 -3
  132. package/dist/_chunks/{ProfilePage-v0d-63SV.js.map → ProfilePage-UC76-e8W.js.map} +1 -1
  133. package/dist/_chunks/{ReviewWorkflowsColumn-bEpMVnyq.mjs → ReviewWorkflowsColumn-fsCyaPpY.mjs} +2 -2
  134. package/dist/_chunks/{ReviewWorkflowsColumn-bEpMVnyq.mjs.map → ReviewWorkflowsColumn-fsCyaPpY.mjs.map} +1 -1
  135. package/dist/_chunks/{ReviewWorkflowsColumn-jFslDSOJ.js → ReviewWorkflowsColumn-ksuXynRr.js} +2 -2
  136. package/dist/_chunks/{ReviewWorkflowsColumn-jFslDSOJ.js.map → ReviewWorkflowsColumn-ksuXynRr.js.map} +1 -1
  137. package/dist/_chunks/{SelectRoles-397jvh3w.mjs → SelectRoles-CIq2yfaQ.mjs} +3 -3
  138. package/dist/_chunks/{SelectRoles-397jvh3w.mjs.map → SelectRoles-CIq2yfaQ.mjs.map} +1 -1
  139. package/dist/_chunks/{SelectRoles-zOmfqKL0.js → SelectRoles-PkTP4NZ9.js} +3 -3
  140. package/dist/_chunks/{SelectRoles-zOmfqKL0.js.map → SelectRoles-PkTP4NZ9.js.map} +1 -1
  141. package/dist/_chunks/{SettingsPage-ge7YVBZh.mjs → SettingsPage-EA8dPv72.mjs} +21 -21
  142. package/dist/_chunks/{SettingsPage-ge7YVBZh.mjs.map → SettingsPage-EA8dPv72.mjs.map} +1 -1
  143. package/dist/_chunks/{SettingsPage-mNt0QiTY.js → SettingsPage-U-uPBrTq.js} +21 -21
  144. package/dist/_chunks/{SettingsPage-mNt0QiTY.js.map → SettingsPage-U-uPBrTq.js.map} +1 -1
  145. package/dist/_chunks/{SingleSignOnPage-LgnrCYCc.mjs → SingleSignOnPage-Q9-Wf9m_.mjs} +3 -3
  146. package/dist/_chunks/{SingleSignOnPage-LgnrCYCc.mjs.map → SingleSignOnPage-Q9-Wf9m_.mjs.map} +1 -1
  147. package/dist/_chunks/{SingleSignOnPage-M8yMsFLO.js → SingleSignOnPage-wH4ht7VG.js} +3 -3
  148. package/dist/_chunks/{SingleSignOnPage-M8yMsFLO.js.map → SingleSignOnPage-wH4ht7VG.js.map} +1 -1
  149. package/dist/_chunks/{TokenTypeSelect-9HpXl_PF.js → TokenTypeSelect-CktNrCwU.js} +2 -2
  150. package/dist/_chunks/{TokenTypeSelect-9HpXl_PF.js.map → TokenTypeSelect-CktNrCwU.js.map} +1 -1
  151. package/dist/_chunks/{TokenTypeSelect-5ERmNfP1.mjs → TokenTypeSelect-wnlrTbAa.mjs} +2 -2
  152. package/dist/_chunks/{TokenTypeSelect-5ERmNfP1.mjs.map → TokenTypeSelect-wnlrTbAa.mjs.map} +1 -1
  153. package/dist/_chunks/{apiTokens-_zIqFUDl.js → apiTokens-4Dkmm3mz.js} +2 -2
  154. package/dist/_chunks/{apiTokens-_zIqFUDl.js.map → apiTokens-4Dkmm3mz.js.map} +1 -1
  155. package/dist/_chunks/{apiTokens-yQ6rHhJk.mjs → apiTokens-M1a_X8Mi.mjs} +2 -2
  156. package/dist/_chunks/{apiTokens-yQ6rHhJk.mjs.map → apiTokens-M1a_X8Mi.mjs.map} +1 -1
  157. package/dist/_chunks/{constants-HE_pNGiL.mjs → constants-DsdEho7h.mjs} +6 -6
  158. package/dist/_chunks/{constants-HE_pNGiL.mjs.map → constants-DsdEho7h.mjs.map} +1 -1
  159. package/dist/_chunks/{constants-Fs0PGeXa.mjs → constants-GnPzy29z.mjs} +4 -4
  160. package/dist/_chunks/{constants-Fs0PGeXa.mjs.map → constants-GnPzy29z.mjs.map} +1 -1
  161. package/dist/_chunks/{constants-BRLS-pE4.js → constants-UfJQh0Pb.js} +4 -4
  162. package/dist/_chunks/{constants-BRLS-pE4.js.map → constants-UfJQh0Pb.js.map} +1 -1
  163. package/dist/_chunks/{constants-GxbFWMRK.mjs → constants-dUW26bVk.mjs} +2 -2
  164. package/dist/_chunks/{constants-GxbFWMRK.mjs.map → constants-dUW26bVk.mjs.map} +1 -1
  165. package/dist/_chunks/{constants-ODlahW77.js → constants-dzw_CGSe.js} +2 -2
  166. package/dist/_chunks/{constants-ODlahW77.js.map → constants-dzw_CGSe.js.map} +1 -1
  167. package/dist/_chunks/{constants-VC_tKTEj.js → constants-mjIKiYj9.js} +6 -6
  168. package/dist/_chunks/{constants-VC_tKTEj.js.map → constants-mjIKiYj9.js.map} +1 -1
  169. package/dist/_chunks/{constants-T-cuT2Ca.mjs → constants-wVrPdbQM.mjs} +2 -2
  170. package/dist/_chunks/{constants-T-cuT2Ca.mjs.map → constants-wVrPdbQM.mjs.map} +1 -1
  171. package/dist/_chunks/{constants-1LJYNtJf.js → constants-x08gNwKa.js} +2 -2
  172. package/dist/_chunks/{constants-1LJYNtJf.js.map → constants-x08gNwKa.js.map} +1 -1
  173. package/dist/_chunks/{index-nzsPp67p.js → index-B2pQGVY3.js} +10 -10
  174. package/dist/_chunks/{index-nzsPp67p.js.map → index-B2pQGVY3.js.map} +1 -1
  175. package/dist/_chunks/{index-KlaImB-Z.mjs → index-QXnY1tED.mjs} +10 -10
  176. package/dist/_chunks/{index-KlaImB-Z.mjs.map → index-QXnY1tED.mjs.map} +1 -1
  177. package/dist/_chunks/{reviewWorkflows-xaCXGNG_.mjs → reviewWorkflows-76a_umNy.mjs} +2 -2
  178. package/dist/_chunks/{reviewWorkflows-xaCXGNG_.mjs.map → reviewWorkflows-76a_umNy.mjs.map} +1 -1
  179. package/dist/_chunks/{reviewWorkflows-6LYktuSC.js → reviewWorkflows-gpc93f2V.js} +2 -2
  180. package/dist/_chunks/{reviewWorkflows-6LYktuSC.js.map → reviewWorkflows-gpc93f2V.js.map} +1 -1
  181. package/dist/_chunks/{transferTokens-nEqTmvrl.mjs → transferTokens-lc9afeqD.mjs} +2 -2
  182. package/dist/_chunks/{transferTokens-nEqTmvrl.mjs.map → transferTokens-lc9afeqD.mjs.map} +1 -1
  183. package/dist/_chunks/{transferTokens-2uzdnbMv.js → transferTokens-oP5Jhfjf.js} +2 -2
  184. package/dist/_chunks/{transferTokens-2uzdnbMv.js.map → transferTokens-oP5Jhfjf.js.map} +1 -1
  185. package/dist/_chunks/{useAdminRoles-LDuoVSqV.mjs → useAdminRoles-fJpSKcg6.mjs} +2 -2
  186. package/dist/_chunks/{useAdminRoles-LDuoVSqV.mjs.map → useAdminRoles-fJpSKcg6.mjs.map} +1 -1
  187. package/dist/_chunks/{useAdminRoles-GDWeBZj1.js → useAdminRoles-oh0w1yyF.js} +2 -2
  188. package/dist/_chunks/{useAdminRoles-GDWeBZj1.js.map → useAdminRoles-oh0w1yyF.js.map} +1 -1
  189. package/dist/_chunks/{useContentTypes-sr3aXJbS.js → useContentTypes-JE0rL3of.js} +2 -2
  190. package/dist/_chunks/{useContentTypes-sr3aXJbS.js.map → useContentTypes-JE0rL3of.js.map} +1 -1
  191. package/dist/_chunks/{useContentTypes-96_zKnV_.mjs → useContentTypes-i2Y3ZAzE.mjs} +2 -2
  192. package/dist/_chunks/{useContentTypes-96_zKnV_.mjs.map → useContentTypes-i2Y3ZAzE.mjs.map} +1 -1
  193. package/dist/_chunks/{useLicenseLimitNotification-Tb12lIXD.mjs → useLicenseLimitNotification-BmO-UE6j.mjs} +2 -2
  194. package/dist/_chunks/{useLicenseLimitNotification-Tb12lIXD.mjs.map → useLicenseLimitNotification-BmO-UE6j.mjs.map} +1 -1
  195. package/dist/_chunks/{useLicenseLimitNotification-3yitZJCi.js → useLicenseLimitNotification-iVte3d1O.js} +2 -2
  196. package/dist/_chunks/{useLicenseLimitNotification-3yitZJCi.js.map → useLicenseLimitNotification-iVte3d1O.js.map} +1 -1
  197. package/dist/_chunks/{useReviewWorkflows-sjtDLjeH.mjs → useReviewWorkflows-79V4Wi8E.mjs} +2 -2
  198. package/dist/_chunks/{useReviewWorkflows-sjtDLjeH.mjs.map → useReviewWorkflows-79V4Wi8E.mjs.map} +1 -1
  199. package/dist/_chunks/{useReviewWorkflows-D7TMsQhe.js → useReviewWorkflows-AApqlDLz.js} +2 -2
  200. package/dist/_chunks/{useReviewWorkflows-D7TMsQhe.js.map → useReviewWorkflows-AApqlDLz.js.map} +1 -1
  201. package/dist/_chunks/{useWebhooks-nFFf0Nl-.js → useWebhooks-9KD1Lo7Z.js} +2 -2
  202. package/dist/_chunks/{useWebhooks-nFFf0Nl-.js.map → useWebhooks-9KD1Lo7Z.js.map} +1 -1
  203. package/dist/_chunks/{useWebhooks-m2S17Isk.mjs → useWebhooks-J6ctP7xE.mjs} +2 -2
  204. package/dist/_chunks/{useWebhooks-m2S17Isk.mjs.map → useWebhooks-J6ctP7xE.mjs.map} +1 -1
  205. package/dist/_chunks/{validateWorkflow-3iIakrPp.js → validateWorkflow-nS825mHl.js} +2 -2
  206. package/dist/_chunks/{validateWorkflow-3iIakrPp.js.map → validateWorkflow-nS825mHl.js.map} +1 -1
  207. package/dist/_chunks/{validateWorkflow-LfwdPU9V.mjs → validateWorkflow-uSj3IhLm.mjs} +2 -2
  208. package/dist/_chunks/{validateWorkflow-LfwdPU9V.mjs.map → validateWorkflow-uSj3IhLm.mjs.map} +1 -1
  209. package/dist/admin/index.js +1 -1
  210. package/dist/admin/index.mjs +1 -1
  211. package/package.json +12 -12
@@ -1 +1 @@
1
- {"version":3,"file":"Permissions-hFoxbU5P.js","sources":["../../admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.ts","../../admin/src/utils/arrays.ts","../../admin/src/pages/Settings/pages/Roles/utils/createArrayOfValues.ts","../../admin/src/pages/Settings/pages/Roles/utils/permissions.ts","../../admin/src/pages/Settings/pages/Roles/utils/forms.ts","../../admin/src/pages/Settings/pages/Roles/utils/layouts.ts","../../admin/src/pages/Settings/pages/Roles/utils/updateConditionsToFalse.ts","../../admin/src/pages/Settings/pages/Roles/utils/updateValues.ts","../../admin/src/pages/Settings/pages/Roles/utils/constants.ts","../../admin/src/pages/Settings/pages/Roles/utils/removeConditionKeyFromData.ts","../../admin/src/pages/Settings/pages/Roles/utils/getCheckboxState.ts","../../admin/src/utils/strings.ts","../../admin/src/pages/Settings/pages/Roles/components/CollapseLabel.tsx","../../admin/src/pages/Settings/pages/Roles/components/HiddenAction.tsx","../../admin/src/pages/Settings/pages/Roles/components/RequiredSign.tsx","../../admin/src/pages/Settings/pages/Roles/components/RowLabelWithCheckbox.tsx","../../admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.tsx","../../admin/src/pages/Settings/pages/Roles/components/ConditionsButton.tsx","../../admin/src/pages/Settings/pages/Roles/components/ConditionsModal.tsx","../../admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.tsx","../../admin/src/pages/Settings/pages/Roles/components/GlobalActions.tsx","../../admin/src/pages/Settings/pages/Roles/components/ContentTypes.tsx","../../admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.tsx","../../admin/src/pages/Settings/pages/Roles/components/Permissions.tsx"],"sourcesContent":["import { createContext } from '@radix-ui/react-context';\n\nimport { Condition } from '../../../../../../../shared/contracts/permissions';\n\nimport type {\n OnChangeCollectionTypeGlobalActionCheckboxAction,\n OnChangeCollectionTypeRowLeftCheckboxAction,\n OnChangeConditionsAction,\n State,\n} from '../components/Permissions';\n\n// Note: I had to guess most of these types based on the name and usage, but I actually don't\n// know if they are correct, because the usage is very generic. Feel free to correct them if\n// they create problems.\nexport interface PermissionsDataManagerContextValue extends Pick<State, 'modifiedData'> {\n availableConditions: Condition[];\n onChangeCollectionTypeLeftActionRowCheckbox: (\n pathToCollectionType: OnChangeCollectionTypeRowLeftCheckboxAction['pathToCollectionType'],\n propertyName: OnChangeCollectionTypeRowLeftCheckboxAction['propertyName'],\n rowName: OnChangeCollectionTypeRowLeftCheckboxAction['rowName'],\n value: OnChangeCollectionTypeRowLeftCheckboxAction['value']\n ) => void;\n onChangeConditions: (conditions: OnChangeConditionsAction['conditions']) => void;\n onChangeSimpleCheckbox: (event: { target: { name: string; value: boolean } }) => void;\n onChangeParentCheckbox: (event: { target: { name: string; value: boolean } }) => void;\n onChangeCollectionTypeGlobalActionCheckbox: (\n collectionTypeKind: OnChangeCollectionTypeGlobalActionCheckboxAction['collectionTypeKind'],\n actionId: OnChangeCollectionTypeGlobalActionCheckboxAction['actionId'],\n value: OnChangeCollectionTypeGlobalActionCheckboxAction['value']\n ) => void;\n}\n\nconst [PermissionsDataManagerProvider, usePermissionsDataManagerContext] =\n createContext<PermissionsDataManagerContextValue>('PermissionsDataManager');\n\nexport const usePermissionsDataManager = () =>\n usePermissionsDataManagerContext('usePermissionsDataManager');\n\nexport { PermissionsDataManagerProvider };\n","/**\n * @internal\n * @description Mutates a value to be a union of flat values, no arrays allowed.\n */\ntype Flat<T> = T extends string ? T : T extends ArrayLike<any> ? never : T;\n\n/**\n * @internal\n */\ninterface RecursiveArray<T> extends Array<T | RecursiveArray<T>> {}\n/**\n * @internal\n */\ninterface ArrayOfRecursiveArraysOrValues<T> extends ArrayLike<T | RecursiveArray<T>> {}\n\n/**\n * @internal\n *\n * @description Flattens an array recursively.\n */\nconst flattenDeep = <T>(\n array?: ArrayOfRecursiveArraysOrValues<T> | null | undefined\n): Array<Flat<T>> => {\n if (Array.isArray(array)) {\n return array.reduce((acc, value) => {\n if (Array.isArray(value)) {\n acc.push(...flattenDeep(value));\n } else {\n acc.push(value);\n }\n\n return acc;\n }, [] as Array<Flat<T>>);\n } else {\n return [];\n }\n};\n\nexport { flattenDeep };\nexport type { Flat, RecursiveArray, ArrayOfRecursiveArraysOrValues };\n","import { Flat, flattenDeep } from '../../../../../utils/arrays';\nimport { isObject } from '../../../../../utils/objects';\n\nconst createArrayOfValues = <TData>(obj: unknown): Array<Flat<TData>> => {\n if (!isObject(obj)) {\n return [];\n }\n\n return flattenDeep(\n Object.values(obj).map((value) => {\n if (isObject(value)) {\n return createArrayOfValues(value);\n }\n\n return value;\n })\n );\n};\n\nexport { createArrayOfValues };\n","import { isObject } from '../../../../../utils/objects';\n\nimport { createArrayOfValues } from './createArrayOfValues';\n\nimport type { ConditionForm, Form, PropertyChildForm } from './forms';\nimport type { UpdatePermissions } from '../../../../../../../shared/contracts/roles';\nimport type { Permission } from '../../../../../../../shared/contracts/shared';\nimport type { PermissionsDataManagerContextValue } from '../hooks/usePermissionsDataManager';\n\ntype PermissionApiBody = UpdatePermissions.Request['body']['permissions'];\n\n/**\n * @description Given a users permissions array we find the first one that matches a provided subject & action\n */\nconst findMatchingPermission = (\n permissions: Permission[],\n action: string,\n subject: string | null\n) => permissions.find((perm) => perm.action === action && perm.subject === subject);\n\nconst formatPermissionsForAPI = (\n modifiedData: PermissionsDataManagerContextValue['modifiedData']\n): PermissionApiBody => {\n const pluginsPermissions = formatSettingsPermissions(modifiedData.plugins);\n const settingsPermissions = formatSettingsPermissions(modifiedData.settings);\n const collectionTypesPermissions = formatContentTypesPermissions(modifiedData.collectionTypes);\n const singleTypesPermissions = formatContentTypesPermissions(modifiedData.singleTypes);\n\n return [\n ...pluginsPermissions,\n ...settingsPermissions,\n ...collectionTypesPermissions,\n ...singleTypesPermissions,\n ];\n};\n\nconst formatSettingsPermissions = (\n settingsPermissionsObject:\n | PermissionsDataManagerContextValue['modifiedData']['plugins']\n | PermissionsDataManagerContextValue['modifiedData']['settings']\n): PermissionApiBody => {\n return Object.values(settingsPermissionsObject).reduce<PermissionApiBody>((formAcc, form) => {\n const currentCategoryPermissions = Object.values(form).reduce<PermissionApiBody>(\n (childFormAcc, childForm) => {\n const permissions = Object.entries(childForm).reduce<PermissionApiBody>(\n (\n responsesAcc,\n [\n actionName,\n {\n conditions,\n properties: { enabled },\n },\n ]\n ) => {\n if (!enabled) {\n return responsesAcc;\n }\n\n responsesAcc.push({\n action: actionName,\n subject: null,\n conditions: createConditionsArray(conditions),\n properties: {},\n });\n\n return responsesAcc;\n },\n []\n );\n\n return [...childFormAcc, ...permissions];\n },\n []\n );\n\n return [...formAcc, ...currentCategoryPermissions];\n }, []);\n};\n\nconst formatContentTypesPermissions = (contentTypesPermissions: Form): PermissionApiBody => {\n const permissions = Object.entries(contentTypesPermissions).reduce<PermissionApiBody>(\n (allPermissions, current) => {\n const [subject, currentSubjectActions] = current;\n\n const permissions = Object.entries(currentSubjectActions).reduce<PermissionApiBody>(\n (acc, current) => {\n const [actionName, permissions] = current;\n const shouldCreatePermission = createArrayOfValues(permissions).some((val) => val);\n\n if (!shouldCreatePermission) {\n return acc;\n }\n\n if (!permissions?.properties?.enabled) {\n const createdPermissionsArray = Object.entries(permissions.properties).reduce<\n PermissionApiBody[number]\n >(\n (acc, current) => {\n const [propertyName, propertyValue] = current;\n\n // @ts-expect-error – `propertyValue` can be boolean or an object, but we don't account for it...\n acc.properties[propertyName] = createPropertyArray(propertyValue);\n\n return acc;\n },\n {\n action: actionName,\n subject,\n conditions: createConditionsArray(permissions.conditions),\n properties: {},\n }\n );\n\n return [...acc, createdPermissionsArray];\n }\n\n if (!permissions.properties.enabled) {\n return acc;\n }\n\n acc.push({\n action: actionName,\n subject,\n properties: {},\n conditions: createConditionsArray(permissions.conditions),\n });\n\n return acc;\n },\n []\n );\n\n return [...allPermissions, ...permissions];\n },\n []\n );\n\n return permissions;\n};\n\nconst createPropertyArray = (propertyValue: PropertyChildForm, prefix = ''): string[] => {\n return Object.entries(propertyValue).reduce<string[]>((acc, current) => {\n const [name, value] = current;\n\n if (isObject(value)) {\n return [...acc, ...createPropertyArray(value, `${prefix}${name}.`)];\n }\n\n if (value && !isObject(value)) {\n acc.push(`${prefix}${name}`);\n }\n\n return acc;\n }, []);\n};\n\nconst createConditionsArray = (conditions: ConditionForm) =>\n Object.entries(conditions)\n .filter(([, conditionValue]) => {\n return conditionValue;\n })\n .map(([conditionName]) => conditionName);\n\nexport { findMatchingPermission, formatPermissionsForAPI };\n","import isEmpty from 'lodash/isEmpty';\nimport merge from 'lodash/merge';\n\nimport { findMatchingPermission } from './permissions';\n\nimport type { GenericLayout } from './layouts';\nimport type {\n Condition,\n SettingPermission,\n ContentPermission,\n Subject,\n SubjectProperty,\n} from '../../../../../../../shared/contracts/permissions';\nimport type { Permission } from '../../../../../../../shared/contracts/shared';\n\ntype ConditionForm = Record<string, boolean>;\n\n/**\n * Creates the default condition form: { [conditionId]: false }\n */\nconst createDefaultConditionsForm = (\n conditions: Condition[],\n initialConditions: Permission['conditions'] = []\n): ConditionForm =>\n conditions.reduce<ConditionForm>((acc, current) => {\n acc[current.id] = initialConditions.indexOf(current.id) !== -1;\n\n return acc;\n }, {});\n\ninterface SubCategoryForm {\n properties: {\n enabled: boolean;\n };\n conditions: ConditionForm;\n}\n\ntype ChildrenForm = Record<\n string,\n SubCategoryForm | (Omit<SubCategoryForm, 'properties'> & PropertyForm)\n>;\n\ntype Form = Record<string, ChildrenForm>;\n\nconst createDefaultForm = <TLayout extends Omit<SettingPermission, 'category'>>(\n layout: GenericLayout<TLayout>[],\n conditions: Condition[],\n initialPermissions: Permission[] = []\n) => {\n return layout.reduce<Record<string, Form>>((acc, { categoryId, childrenForm }) => {\n const childrenDefaultForm = childrenForm.reduce<Form>((acc, current) => {\n acc[current.subCategoryId] = current.actions.reduce<ChildrenForm>((acc, current) => {\n const foundMatchingPermission = findMatchingPermission(\n initialPermissions,\n current.action,\n null\n );\n\n acc[current.action] = {\n properties: {\n enabled: foundMatchingPermission !== undefined,\n },\n conditions: createDefaultConditionsForm(\n conditions,\n foundMatchingPermission?.conditions ?? []\n ),\n };\n\n return acc;\n }, {});\n\n return acc;\n }, {});\n\n acc[categoryId] = childrenDefaultForm;\n\n return acc;\n }, {});\n};\n\ninterface PropertyChildForm extends Record<string, boolean | PropertyChildForm> {}\n\ninterface PropertyForm {\n properties: PropertyChildForm;\n}\n\n/**\n * Creates the default form for all the properties found in a content type's layout\n */\nconst createDefaultPropertiesForm = (\n properties: string[],\n subject: Subject,\n matchingPermission?: Permission\n): PropertyForm => {\n const recursivelyCreatePropertyForm = (\n { children = [] }: SubjectProperty,\n propertyValues: string[],\n prefix = ''\n ): PropertyChildForm => {\n return children.reduce<PropertyChildForm>((acc, current) => {\n if (current.children) {\n return {\n ...acc,\n [current.value]: recursivelyCreatePropertyForm(\n current,\n propertyValues,\n `${prefix}${current.value}.`\n ),\n };\n }\n\n const hasProperty = propertyValues.indexOf(`${prefix}${current.value}`) !== -1;\n\n acc[current.value] = hasProperty;\n\n return acc;\n }, {});\n };\n\n return properties.reduce<PropertyForm>(\n (acc, currentPropertyName) => {\n const foundProperty = subject.properties.find(({ value }) => value === currentPropertyName);\n\n if (foundProperty) {\n const matchingPermissionPropertyValues =\n matchingPermission?.properties[foundProperty.value] ?? [];\n\n const propertyForm = recursivelyCreatePropertyForm(\n foundProperty,\n matchingPermissionPropertyValues\n );\n\n acc.properties[currentPropertyName] = propertyForm;\n }\n\n return acc;\n },\n { properties: {} }\n );\n};\n\n/**\n * Creates the default for for a content type\n */\nconst createDefaultCTForm = (\n { subjects, actions = [] }: ContentPermission,\n conditions: Condition[],\n initialPermissions: Permission[] = []\n) => {\n return actions.reduce<Form>((defaultForm, action) => {\n type SubjectLayouts = Record<string, Subject>;\n\n const subjectLayouts = action.subjects.reduce<SubjectLayouts>((acc, current) => {\n const foundLayout = subjects.find(({ uid }) => uid === current) || null;\n\n if (foundLayout) {\n acc[current] = foundLayout;\n }\n\n return acc;\n }, {});\n\n // This can happen when an action is not related to a content type\n // for instance the D&P permission is applied only with the cts that\n // have the D&P features enabled\n if (isEmpty(subjectLayouts)) {\n return defaultForm;\n }\n\n // The object has the following shape: { [ctUID]: { [actionId]: { [property]: { enabled: false } } } }\n const contentTypesActions = Object.keys(subjectLayouts).reduce<Form>((acc, currentCTUID) => {\n const { actionId, applyToProperties } = action;\n const currentSubjectLayout = subjectLayouts[currentCTUID];\n const properties = currentSubjectLayout.properties.map(({ value }) => value);\n const doesNothaveProperty = properties.every(\n (property) => (applyToProperties || []).indexOf(property) === -1\n );\n\n const matchingPermission = findMatchingPermission(initialPermissions, actionId, currentCTUID);\n const conditionsForm = createDefaultConditionsForm(\n conditions,\n matchingPermission?.conditions ?? []\n );\n\n if (!acc[currentCTUID]) {\n acc[currentCTUID] = {};\n }\n\n if (isEmpty(applyToProperties) || doesNothaveProperty) {\n acc[currentCTUID][actionId] = {\n properties: {\n enabled: matchingPermission !== undefined,\n },\n conditions: conditionsForm,\n };\n\n return acc;\n }\n\n const propertiesForm = createDefaultPropertiesForm(\n applyToProperties,\n subjectLayouts[currentCTUID],\n matchingPermission\n );\n\n acc[currentCTUID][actionId] = { ...propertiesForm, conditions: conditionsForm };\n\n return acc;\n }, {});\n\n return merge(defaultForm, contentTypesActions);\n }, {});\n};\n\nexport { createDefaultConditionsForm, createDefaultForm, createDefaultCTForm };\nexport type { ConditionForm, Form, PropertyForm, SubCategoryForm, ChildrenForm, PropertyChildForm };\n","import groupBy from 'lodash/groupBy';\n\nimport { SettingPermission } from '../../../../../../../shared/contracts/permissions';\n\ninterface GenericLayout<TLayout> {\n category: string;\n categoryId: string;\n childrenForm: Array<{\n subCategoryName: string;\n subCategoryId: string;\n actions: TLayout[];\n }>;\n}\n\nconst formatLayout = <TLayout extends Omit<SettingPermission, 'category'>>(\n layout: TLayout[],\n groupByKey: keyof TLayout\n): GenericLayout<TLayout>[] => {\n return Object.entries(groupBy(layout, groupByKey)).map(([itemName, item]) => ({\n category: itemName,\n categoryId: itemName.split(' ').join('-'),\n childrenForm: Object.entries(groupBy(item, 'subCategory')).map(\n ([subCategoryName, actions]) => ({\n subCategoryName,\n subCategoryId: subCategoryName.split(' ').join('-'),\n actions,\n })\n ),\n }));\n};\n\nexport { formatLayout };\nexport type { GenericLayout };\n","import has from 'lodash/has';\nimport omit from 'lodash/omit';\n\nimport { isObject } from '../../../../../utils/objects';\n\nimport { createArrayOfValues } from './createArrayOfValues';\n/**\n * Changes all the conditions leaf when the properties are all falsy\n */\nconst updateConditionsToFalse = (obj: object): object => {\n return Object.keys(obj).reduce((acc, current) => {\n // @ts-expect-error – TODO: type better\n const currentValue = obj[current];\n\n if (isObject(currentValue) && !has(currentValue, 'conditions')) {\n return { ...acc, [current]: updateConditionsToFalse(currentValue) };\n }\n\n if (isObject(currentValue) && has(currentValue, 'conditions')) {\n const isActionEnabled = createArrayOfValues(omit(currentValue, 'conditions')).some(\n (val) => val\n );\n\n if (!isActionEnabled) {\n // @ts-expect-error – TODO: type better\n const updatedConditions = Object.keys(currentValue.conditions).reduce((acc1, current) => {\n // @ts-expect-error – TODO: type better\n acc1[current] = false;\n\n return acc1;\n }, {});\n\n return { ...acc, [current]: { ...currentValue, conditions: updatedConditions } };\n }\n }\n\n // @ts-expect-error – TODO: type better\n acc[current] = currentValue;\n\n return acc;\n }, {});\n};\n\nexport { updateConditionsToFalse };\n","import { isObject } from '../../../../../utils/objects';\n\n/**\n * Sets all the none object values of an object to the given one\n * It preserves the shape of the object, it only modifies the leafs\n * of an object.\n * This utility is very helpful when dealing with parent<>children checkboxes\n */\nconst updateValues = (obj: object, valueToSet: boolean, isFieldUpdate = false): object => {\n return Object.keys(obj).reduce((acc, current) => {\n const currentValue = obj[current as keyof object];\n\n if (current === 'conditions' && !isFieldUpdate) {\n // @ts-expect-error – TODO: type better\n acc[current] = currentValue;\n\n return acc;\n }\n\n if (isObject(currentValue)) {\n return { ...acc, [current]: updateValues(currentValue, valueToSet, current === 'fields') };\n }\n\n // @ts-expect-error – TODO: type better\n acc[current] = valueToSet;\n\n return acc;\n }, {});\n};\n\nexport { updateValues };\n","export const cellWidth = `${120 / 16}rem`;\nexport const firstRowWidth = `${200 / 16}rem`;\nexport const rowHeight = `${53 / 16}rem`;\n","type DataWithoutCondition<TData extends { conditions?: unknown }> = Omit<TData, 'conditions'>;\n\nconst removeConditionKeyFromData = <TData extends { conditions?: unknown }>(\n obj?: TData\n): DataWithoutCondition<TData> | null => {\n if (!obj) {\n return null;\n }\n\n return Object.entries(obj).reduce((acc, [key, value]) => {\n if (key !== 'conditions') {\n // @ts-expect-error – TODO: fix this type error correctly.\n acc[key] = value;\n }\n\n return acc;\n }, {} as DataWithoutCondition<TData>);\n};\n\nexport { removeConditionKeyFromData };\nexport type { DataWithoutCondition };\n","import { createArrayOfValues } from './createArrayOfValues';\nimport { removeConditionKeyFromData } from './removeConditionKeyFromData';\n\ninterface RecursiveRecordOfBooleans extends Record<string, boolean | RecursiveRecordOfBooleans> {}\n\nconst getCheckboxState = (dataObj: RecursiveRecordOfBooleans) => {\n const dataWithoutCondition = removeConditionKeyFromData(dataObj);\n\n const arrayOfValues = createArrayOfValues(dataWithoutCondition);\n\n if (!arrayOfValues.length) {\n return { hasAllActionsSelected: false, hasSomeActionsSelected: false };\n }\n\n const hasAllActionsSelected = arrayOfValues.every((val) => val);\n const hasSomeActionsSelected = arrayOfValues.some((val) => val) && !hasAllActionsSelected;\n\n return { hasAllActionsSelected, hasSomeActionsSelected };\n};\n\nexport { getCheckboxState };\nexport type { RecursiveRecordOfBooleans };\n","const capitalise = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1);\n\nexport { capitalise };\n","import { Flex } from '@strapi/design-system';\nimport styled from 'styled-components';\n\nconst CollapseLabel = styled(Flex)<{ isCollapsable: boolean }>`\n padding-right: ${({ theme }) => theme.spaces[2]};\n overflow: hidden;\n flex: 1;\n ${({ isCollapsable }) => isCollapsable && 'cursor: pointer;'}\n`;\n\nexport { CollapseLabel };\n","import styled from 'styled-components';\n\nimport { cellWidth } from '../utils/constants';\n\nconst HiddenAction = styled.div`\n width: ${cellWidth};\n`;\n\nexport { HiddenAction };\n","import { Box } from '@strapi/design-system';\n\nconst RequiredSign = () => (\n <Box color=\"danger700\" paddingLeft={1}>\n *\n </Box>\n);\n\nexport { RequiredSign };\n","import * as React from 'react';\n\nimport { BaseCheckbox, Box, Flex, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { capitalise } from '../../../../../utils/strings';\nimport { PermissionsDataManagerContextValue } from '../hooks/usePermissionsDataManager';\nimport { firstRowWidth } from '../utils/constants';\n\nimport { CollapseLabel } from './CollapseLabel';\n\ninterface RowLabelWithCheckboxProps {\n children: React.ReactNode;\n checkboxName?: string;\n isActive?: boolean;\n isCollapsable?: boolean;\n isFormDisabled?: boolean;\n label: string;\n onChange: PermissionsDataManagerContextValue['onChangeParentCheckbox'];\n onClick: () => void;\n someChecked?: boolean;\n value: boolean;\n}\n\nconst RowLabelWithCheckbox = ({\n checkboxName = '',\n children,\n isActive = false,\n isCollapsable = false,\n isFormDisabled = false,\n label,\n onChange,\n onClick,\n someChecked = false,\n value,\n}: RowLabelWithCheckboxProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex alignItems=\"center\" paddingLeft={6} width={firstRowWidth} shrink={0}>\n <Box paddingRight={2}>\n <BaseCheckbox\n name={checkboxName}\n aria-label={formatMessage(\n {\n id: `Settings.permissions.select-all-by-permission`,\n defaultMessage: 'Select all {label} permissions',\n },\n { label }\n )}\n disabled={isFormDisabled}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onValueChange={(value) =>\n onChange({\n target: {\n name: checkboxName,\n value,\n },\n })\n }\n indeterminate={someChecked}\n value={value}\n />\n </Box>\n <CollapseLabel\n title={label}\n alignItems=\"center\"\n isCollapsable={isCollapsable}\n {...(isCollapsable && {\n onClick,\n 'aria-expanded': isActive,\n onKeyDown: ({ key }) => (key === 'Enter' || key === ' ') && onClick(),\n tabIndex: 0,\n role: 'button',\n })}\n >\n <Typography\n fontWeight={isActive ? 'bold' : undefined}\n textColor={isActive ? 'primary600' : 'neutral800'}\n ellipsis\n >\n {capitalise(label)}\n </Typography>\n {children}\n </CollapseLabel>\n </Flex>\n );\n};\n\nexport { RowLabelWithCheckbox };\nexport type { RowLabelWithCheckboxProps };\n","import React, { useMemo } from 'react';\n\nimport { BaseCheckbox, Box, Flex, Typography } from '@strapi/design-system';\nimport { CarretDown } from '@strapi/icons';\nimport get from 'lodash/get';\nimport { useIntl } from 'react-intl';\nimport styled, { DefaultTheme, css } from 'styled-components';\n\nimport { Action, SubjectProperty } from '../../../../../../../shared/contracts/permissions';\nimport { capitalise } from '../../../../../utils/strings';\nimport {\n PermissionsDataManagerContextValue,\n usePermissionsDataManager,\n} from '../hooks/usePermissionsDataManager';\nimport { cellWidth, firstRowWidth, rowHeight } from '../utils/constants';\nimport { getCheckboxState } from '../utils/getCheckboxState';\n\nimport { CollapseLabel } from './CollapseLabel';\nimport { HiddenAction } from './HiddenAction';\nimport { RequiredSign } from './RequiredSign';\nimport { RowLabelWithCheckbox, RowLabelWithCheckboxProps } from './RowLabelWithCheckbox';\n\n/* -------------------------------------------------------------------------------------------------\n * CollapsePropertyMatrix\n * -----------------------------------------------------------------------------------------------*/\n\ninterface CollapsePropertyMatrixProps\n extends Pick<\n ActionRowProps,\n 'childrenForm' | 'isFormDisabled' | 'label' | 'pathToData' | 'propertyName'\n > {\n availableActions?: Array<Action & { isDisplayed: boolean }>;\n}\n\ninterface PropertyAction {\n label: string;\n actionId: string;\n isActionRelatedToCurrentProperty: boolean;\n}\n\nconst CollapsePropertyMatrix = ({\n availableActions = [],\n childrenForm = [],\n isFormDisabled,\n label,\n pathToData,\n propertyName,\n}: CollapsePropertyMatrixProps) => {\n const propertyActions = useMemo(\n () =>\n availableActions.map((action) => {\n const isActionRelatedToCurrentProperty =\n Array.isArray(action.applyToProperties) &&\n action.applyToProperties.indexOf(propertyName) !== -1 &&\n action.isDisplayed;\n\n return { label: action.label, actionId: action.actionId, isActionRelatedToCurrentProperty };\n }) satisfies PropertyAction[],\n [availableActions, propertyName]\n );\n\n return (\n <Flex display=\"inline-flex\" direction=\"column\" minWidth={0}>\n <Header label={label} headers={propertyActions} />\n <Box>\n {childrenForm.map(({ children: childrenForm, label, value, required }, i) => (\n <ActionRow\n childrenForm={childrenForm}\n key={value}\n label={label}\n isFormDisabled={isFormDisabled}\n name={value}\n required={required}\n propertyActions={propertyActions}\n pathToData={pathToData}\n propertyName={propertyName}\n isOdd={i % 2 === 0}\n />\n ))}\n </Box>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ActionRow\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ActionRowProps\n extends Pick<\n SubActionRowProps,\n 'childrenForm' | 'isFormDisabled' | 'propertyActions' | 'propertyName'\n > {\n label: string;\n name: string;\n required?: boolean;\n pathToData: string;\n isOdd?: boolean;\n}\n\nconst ActionRow = ({\n childrenForm = [],\n label,\n isFormDisabled = false,\n name,\n required = false,\n pathToData,\n propertyActions,\n propertyName,\n isOdd = false,\n}: ActionRowProps) => {\n const { formatMessage } = useIntl();\n const [rowToOpen, setRowToOpen] = React.useState<string | null>(null);\n const {\n modifiedData,\n onChangeCollectionTypeLeftActionRowCheckbox,\n onChangeParentCheckbox,\n onChangeSimpleCheckbox,\n } = usePermissionsDataManager();\n\n const isActive = rowToOpen === name;\n\n const recursiveChildren = useMemo(() => {\n if (!Array.isArray(childrenForm)) {\n return [];\n }\n\n return childrenForm;\n }, [childrenForm]);\n\n const isCollapsable = recursiveChildren.length > 0;\n\n const handleClick = React.useCallback(() => {\n if (isCollapsable) {\n setRowToOpen((prev) => {\n if (prev === name) {\n return null;\n }\n\n return name;\n });\n }\n }, [isCollapsable, name]);\n\n const handleChangeLeftRowCheckbox: RowLabelWithCheckboxProps['onChange'] = ({\n target: { value },\n }) => {\n onChangeCollectionTypeLeftActionRowCheckbox(pathToData, propertyName, name, value);\n };\n\n const { hasAllActionsSelected, hasSomeActionsSelected } = useMemo(() => {\n return getRowLabelCheckboxState(propertyActions, modifiedData, pathToData, propertyName, name);\n }, [propertyActions, modifiedData, pathToData, propertyName, name]);\n\n return (\n <>\n <Wrapper\n alignItems=\"center\"\n isCollapsable={isCollapsable}\n isActive={isActive}\n background={isOdd ? 'neutral100' : 'neutral0'}\n >\n <Flex>\n <RowLabelWithCheckbox\n onChange={handleChangeLeftRowCheckbox}\n onClick={handleClick}\n isCollapsable={isCollapsable}\n isFormDisabled={isFormDisabled}\n label={label}\n someChecked={hasSomeActionsSelected}\n value={hasAllActionsSelected}\n isActive={isActive}\n >\n {required && <RequiredSign />}\n <CarretIcon $isActive={isActive} />\n </RowLabelWithCheckbox>\n <Flex>\n {propertyActions.map(({ label, isActionRelatedToCurrentProperty, actionId }) => {\n if (!isActionRelatedToCurrentProperty) {\n return <HiddenAction key={label} />;\n }\n\n const checkboxName = [\n ...pathToData.split('..'),\n actionId,\n 'properties',\n propertyName,\n name,\n ];\n\n if (!isCollapsable) {\n const checkboxValue = get(modifiedData, checkboxName, false);\n\n return (\n <Flex\n key={actionId}\n width={cellWidth}\n position=\"relative\"\n justifyContent=\"center\"\n alignItems=\"center\"\n >\n <BaseCheckbox\n disabled={isFormDisabled}\n name={checkboxName.join('..')}\n aria-label={formatMessage(\n {\n id: `Settings.permissions.select-by-permission`,\n defaultMessage: 'Select {label} permission',\n },\n { label: `${name} ${label}` }\n )}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onValueChange={(value) => {\n onChangeSimpleCheckbox({\n target: {\n name: checkboxName.join('..'),\n value,\n },\n });\n }}\n value={checkboxValue}\n />\n </Flex>\n );\n }\n\n const data = get(modifiedData, checkboxName, {});\n\n const { hasAllActionsSelected, hasSomeActionsSelected } = getCheckboxState(data);\n\n return (\n <Flex\n key={label}\n width={cellWidth}\n position=\"relative\"\n justifyContent=\"center\"\n alignItems=\"center\"\n >\n <BaseCheckbox\n disabled={isFormDisabled}\n name={checkboxName.join('..')}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onValueChange={(value) => {\n onChangeParentCheckbox({\n target: {\n name: checkboxName.join('..'),\n value,\n },\n });\n }}\n aria-label={formatMessage(\n {\n id: `Settings.permissions.select-by-permission`,\n defaultMessage: 'Select {label} permission',\n },\n { label: `${name} ${label}` }\n )}\n value={hasAllActionsSelected}\n indeterminate={hasSomeActionsSelected}\n />\n </Flex>\n );\n })}\n </Flex>\n </Flex>\n </Wrapper>\n {isActive && (\n <SubActionRow\n childrenForm={recursiveChildren}\n isFormDisabled={isFormDisabled}\n parentName={name}\n pathToDataFromActionRow={pathToData}\n propertyName={propertyName}\n propertyActions={propertyActions}\n recursiveLevel={0}\n />\n )}\n </>\n );\n};\n\n/**\n *\n * Returns the state of the left checkbox of a ActionRow main checkbox\n */\nconst getRowLabelCheckboxState = (\n propertyActions: PropertyAction[],\n modifiedData: PermissionsDataManagerContextValue['modifiedData'],\n pathToContentType: string,\n propertyToCheck: string,\n targetKey: string\n) => {\n const actionIds = propertyActions.reduce<string[]>((acc, current) => {\n if (current.isActionRelatedToCurrentProperty) {\n acc.push(current.actionId);\n }\n\n return acc;\n }, []);\n\n const data = actionIds.reduce<Record<string, boolean>>((acc, current) => {\n const mainData = get(\n modifiedData,\n [...pathToContentType.split('..'), current, 'properties', propertyToCheck, targetKey],\n false\n );\n\n acc[current] = mainData;\n\n return acc;\n }, {});\n\n return getCheckboxState(data);\n};\n\nconst Wrapper = styled(Flex)<{ isCollapsable?: boolean; isActive?: boolean }>`\n height: ${rowHeight};\n flex: 1;\n\n ${({ isCollapsable, theme }) =>\n isCollapsable &&\n `\n ${CarretIcon} {\n display: block;\n color: ${theme.colors.neutral100};\n }\n &:hover {\n ${activeStyle(theme)}\n }\n `}\n ${({ isActive, theme }) => isActive && activeStyle(theme)};\n`;\n\nconst CarretIcon = styled(CarretDown)<{ $isActive: boolean }>`\n display: none;\n width: ${10 / 16}rem;\n transform: rotate(${({ $isActive }) => ($isActive ? '180' : '0')}deg);\n margin-left: ${({ theme }) => theme.spaces[2]};\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * SubActionRow\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SubActionRowProps {\n childrenForm: SubjectProperty['children'];\n isFormDisabled?: boolean;\n parentName: string;\n pathToDataFromActionRow: string;\n propertyActions: PropertyAction[];\n propertyName: string;\n recursiveLevel: number;\n}\n\nconst SubActionRow = ({\n childrenForm = [],\n isFormDisabled,\n recursiveLevel,\n pathToDataFromActionRow,\n propertyActions,\n parentName,\n propertyName,\n}: SubActionRowProps) => {\n const { formatMessage } = useIntl();\n const { modifiedData, onChangeParentCheckbox, onChangeSimpleCheckbox } =\n usePermissionsDataManager();\n const [rowToOpen, setRowToOpen] = React.useState<string | null>(null);\n\n const handleClickToggleSubLevel = (name: string) => {\n setRowToOpen((prev) => {\n if (prev === name) {\n return null;\n }\n\n return name;\n });\n };\n\n const displayedRecursiveChildren = useMemo(() => {\n if (!rowToOpen) {\n return null;\n }\n\n return childrenForm.find(({ value }) => value === rowToOpen);\n }, [rowToOpen, childrenForm]);\n\n return (\n <Box paddingLeft={`2rem`}>\n <TopTimeline />\n {childrenForm.map(({ label, value, required, children: subChildrenForm }, index) => {\n const isVisible = index + 1 < childrenForm.length;\n const isArrayType = Array.isArray(subChildrenForm);\n const isActive = rowToOpen === value;\n\n return (\n <LeftBorderTimeline key={value} isVisible={isVisible}>\n <Flex height={rowHeight}>\n <StyledBox>\n <Svg\n width=\"20\"\n height=\"23\"\n viewBox=\"0 0 20 23\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n color=\"primary200\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M7.02477 14.7513C8.65865 17.0594 11.6046 18.6059 17.5596 18.8856C18.6836 18.9384 19.5976 19.8435 19.5976 20.9688V20.9688C19.5976 22.0941 18.6841 23.0125 17.5599 22.9643C10.9409 22.6805 6.454 20.9387 3.75496 17.1258C0.937988 13.1464 0.486328 7.39309 0.486328 0.593262H4.50974C4.50974 7.54693 5.06394 11.9813 7.02477 14.7513Z\"\n fill=\"#D9D8FF\"\n />\n </Svg>\n </StyledBox>\n <Flex style={{ flex: 1 }}>\n <RowStyle level={recursiveLevel} isActive={isActive} isCollapsable={isArrayType}>\n <CollapseLabel\n alignItems=\"center\"\n isCollapsable={isArrayType}\n {...(isArrayType && {\n onClick: () => handleClickToggleSubLevel(value),\n 'aria-expanded': isActive,\n onKeyDown: ({ key }) =>\n (key === 'Enter' || key === ' ') && handleClickToggleSubLevel(value),\n tabIndex: 0,\n role: 'button',\n })}\n title={label}\n >\n <Typography ellipsis>{capitalise(label)}</Typography>\n {required && <RequiredSign />}\n <CarretIcon $isActive={isActive} />\n </CollapseLabel>\n </RowStyle>\n <Flex style={{ flex: 1 }}>\n {propertyActions.map(\n ({ actionId, label: propertyLabel, isActionRelatedToCurrentProperty }) => {\n if (!isActionRelatedToCurrentProperty) {\n return <HiddenAction key={actionId} />;\n }\n /*\n * Usually we use a 'dot' in order to know the key path of an object for which we want to change the value.\n * Since an action and a subject are both separated by '.' or '::' we chose to use the '..' separators\n */\n const checkboxName = [\n ...pathToDataFromActionRow.split('..'),\n actionId,\n 'properties',\n propertyName,\n ...parentName.split('..'),\n value,\n ];\n\n const checkboxValue = get(modifiedData, checkboxName, false);\n\n if (!subChildrenForm) {\n return (\n <Flex\n key={propertyLabel}\n position=\"relative\"\n width={cellWidth}\n justifyContent=\"center\"\n alignItems=\"center\"\n >\n <BaseCheckbox\n disabled={isFormDisabled}\n name={checkboxName.join('..')}\n aria-label={formatMessage(\n {\n id: `Settings.permissions.select-by-permission`,\n defaultMessage: 'Select {label} permission',\n },\n { label: `${parentName} ${label} ${propertyLabel}` }\n )}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onValueChange={(value) => {\n onChangeSimpleCheckbox({\n target: {\n name: checkboxName.join('..'),\n value,\n },\n });\n }}\n value={checkboxValue}\n />\n </Flex>\n );\n }\n\n const { hasAllActionsSelected, hasSomeActionsSelected } =\n getCheckboxState(checkboxValue);\n\n return (\n <Flex\n key={propertyLabel}\n position=\"relative\"\n width={cellWidth}\n justifyContent=\"center\"\n alignItems=\"center\"\n >\n <BaseCheckbox\n key={propertyLabel}\n disabled={isFormDisabled}\n name={checkboxName.join('..')}\n aria-label={formatMessage(\n {\n id: `Settings.permissions.select-by-permission`,\n defaultMessage: 'Select {label} permission',\n },\n { label: `${parentName} ${label} ${propertyLabel}` }\n )}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onValueChange={(value) => {\n onChangeParentCheckbox({\n target: {\n name: checkboxName.join('..'),\n value,\n },\n });\n }}\n value={hasAllActionsSelected}\n indeterminate={hasSomeActionsSelected}\n />\n </Flex>\n );\n }\n )}\n </Flex>\n </Flex>\n </Flex>\n {displayedRecursiveChildren && isActive && (\n <Box paddingBottom={2}>\n <SubActionRow\n isFormDisabled={isFormDisabled}\n parentName={`${parentName}..${value}`}\n pathToDataFromActionRow={pathToDataFromActionRow}\n propertyActions={propertyActions}\n propertyName={propertyName}\n recursiveLevel={recursiveLevel + 1}\n childrenForm={displayedRecursiveChildren.children}\n />\n </Box>\n )}\n </LeftBorderTimeline>\n );\n })}\n </Box>\n );\n};\n\nconst LeftBorderTimeline = styled(Box)<{ isVisible?: boolean }>`\n border-left: ${({ isVisible, theme }) =>\n isVisible ? `4px solid ${theme.colors.primary200}` : '4px solid transparent'};\n`;\n\nconst RowStyle = styled(Flex)<{ level: number; isCollapsable?: boolean; isActive?: boolean }>`\n padding-left: ${({ theme }) => theme.spaces[4]};\n width: ${({ level }) => 145 - level * 36}px;\n\n ${({ isCollapsable, theme }) =>\n isCollapsable &&\n `\n ${CarretIcon} {\n display: block;\n color: ${theme.colors.neutral100};\n }\n &:hover {\n ${activeStyle(theme)}\n }\n `}\n ${({ isActive, theme }) => isActive && activeStyle(theme)};\n`;\n\nconst TopTimeline = styled.div`\n padding-top: ${({ theme }) => theme.spaces[2]};\n margin-top: ${({ theme }) => theme.spaces[2]};\n width: ${4 / 16}rem;\n background-color: ${({ theme }) => theme.colors.primary200};\n border-top-left-radius: 2px;\n border-top-right-radius: 2px;\n`;\n\nconst StyledBox = styled(Box)`\n transform: translate(-4px, -12px);\n\n &:before {\n content: '';\n width: ${4 / 16}rem;\n height: ${12 / 16}rem;\n background: ${({ theme }) => theme.colors.primary200};\n display: block;\n }\n`;\n\nconst Svg = styled.svg<{ color: keyof DefaultTheme['colors'] }>`\n position: relative;\n flex-shrink: 0;\n transform: translate(-0.5px, -1px);\n\n * {\n fill: ${({ theme, color }) => theme.colors[color]};\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * Header\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderProps {\n headers?: PropertyAction[];\n label: string;\n}\n\nconst Header = ({ headers = [], label }: HeaderProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex>\n <Flex width={firstRowWidth} height={rowHeight} shrink={0} alignItems=\"center\" paddingLeft={6}>\n <Typography variant=\"sigma\" textColor=\"neutral500\">\n {formatMessage(\n {\n id: 'Settings.roles.form.permission.property-label',\n defaultMessage: '{label} permissions',\n },\n { label }\n )}\n </Typography>\n </Flex>\n {headers.map((header) => {\n if (!header.isActionRelatedToCurrentProperty) {\n return <Flex width={cellWidth} shrink={0} key={header.label} />;\n }\n\n return (\n <Flex width={cellWidth} shrink={0} justifyContent=\"center\" key={header.label}>\n <Typography variant=\"sigma\" textColor=\"neutral500\">\n {formatMessage({\n id: `Settings.roles.form.permissions.${header.label.toLowerCase()}`,\n defaultMessage: header.label,\n })}\n </Typography>\n </Flex>\n );\n })}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * activeStyle (util)\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal\n */\nconst activeStyle = (theme: DefaultTheme) => css`\n ${Typography} {\n color: ${theme.colors.primary600};\n font-weight: ${theme.fontWeights.bold};\n }\n ${CarretIcon} {\n display: block;\n\n path {\n fill: ${theme.colors.primary600};\n }\n }\n`;\n\nexport { activeStyle as _internalActiveStyle };\nexport { CollapsePropertyMatrix };\n","import { Box, Button, ButtonProps } from '@strapi/design-system';\nimport { Cog } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\ninterface ConditionsButtonProps extends Pick<ButtonProps, 'className' | 'onClick' | 'variant'> {\n hasConditions?: boolean;\n}\n\nconst ConditionsButtonImpl = ({\n onClick,\n className,\n hasConditions = false,\n variant = 'tertiary',\n}: ConditionsButtonProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <ButtonContainer hasConditions={hasConditions} className={className}>\n <Button variant={variant} startIcon={<Cog />} onClick={onClick}>\n {formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n })}\n </Button>\n </ButtonContainer>\n );\n};\n\ninterface ButtonContainerProps extends Pick<ConditionsButtonProps, 'hasConditions'> {\n disabled?: boolean;\n}\n\nconst ButtonContainer = styled(Box)<ButtonContainerProps>`\n ${({ hasConditions, disabled, theme }) =>\n hasConditions &&\n `\n &:before {\n content: '';\n position: absolute;\n top: -3px;\n left: -10px;\n width: 6px;\n height: 6px;\n border-radius: ${20 / 16}rem;;\n background: ${disabled ? theme.colors.neutral100 : theme.colors.primary600};\n }\n `}\n`;\n\n/**\n * We reference the component directly in other styled-components\n * and as such we need it to have a className already assigned.\n * Therefore we wrapped the implementation in a styled function.\n */\nconst ConditionsButton = styled(ConditionsButtonImpl)``;\n\nexport { ConditionsButton };\nexport type { ConditionsButtonProps };\n","import * as React from 'react';\n\nimport {\n Box,\n Button,\n Flex,\n ModalBody,\n ModalFooter,\n ModalHeader,\n ModalLayout,\n ModalLayoutProps,\n MultiSelectNested,\n MultiSelectNestedProps,\n Typography,\n} from '@strapi/design-system';\nimport { Breadcrumbs, Crumb } from '@strapi/design-system/v2';\nimport produce from 'immer';\nimport get from 'lodash/get';\nimport groupBy from 'lodash/groupBy';\nimport upperFirst from 'lodash/upperFirst';\nimport { useIntl } from 'react-intl';\n\nimport { capitalise } from '../../../../../utils/strings';\nimport {\n PermissionsDataManagerContextValue,\n usePermissionsDataManager,\n} from '../hooks/usePermissionsDataManager';\n\nimport type { HiddenCheckboxAction, VisibleCheckboxAction } from './ContentTypeCollapses';\nimport type { ConditionForm } from '../utils/forms';\n\n/* -------------------------------------------------------------------------------------------------\n * ConditionsModal\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ConditionAction extends Pick<ActionRowProps, 'label'> {\n actionId: string;\n isDisplayed: boolean;\n hasSomeActionsSelected?: boolean;\n hasAllActionsSelected?: boolean;\n pathToConditionsObject: string[];\n}\n\ninterface ConditionsModalProps extends Pick<ActionRowProps, 'isFormDisabled'> {\n actions?: Array<ConditionAction | HiddenCheckboxAction | VisibleCheckboxAction>;\n headerBreadCrumbs?: string[];\n onClosed: ModalLayoutProps['onClose'];\n onToggle: () => void;\n}\n\nconst ConditionsModal = ({\n actions = [],\n headerBreadCrumbs = [],\n isFormDisabled,\n onClosed,\n onToggle,\n}: ConditionsModalProps) => {\n const { formatMessage } = useIntl();\n const { availableConditions, modifiedData, onChangeConditions } = usePermissionsDataManager();\n\n const arrayOfOptionsGroupedByCategory = React.useMemo(() => {\n return Object.entries(groupBy(availableConditions, 'category'));\n }, [availableConditions]);\n\n const actionsToDisplay = actions.filter<VisibleCheckboxAction | ConditionAction>(\n // @ts-expect-error – TODO: fix this type issue\n ({ isDisplayed, hasSomeActionsSelected, hasAllActionsSelected }) =>\n isDisplayed && Boolean(hasSomeActionsSelected || hasAllActionsSelected)\n );\n\n const [state, setState] = React.useState(\n createDefaultConditionsForm(actionsToDisplay, modifiedData, arrayOfOptionsGroupedByCategory)\n );\n\n const handleChange = (name: string, values: ConditionForm) => {\n setState(\n produce((draft) => {\n if (!draft[name]) {\n draft[name] = {};\n }\n\n if (!draft[name].default) {\n draft[name].default = {};\n }\n\n draft[name].default = values;\n })\n );\n };\n\n const handleSubmit = () => {\n const conditionsWithoutCategory = Object.entries(state).reduce<Record<string, ConditionForm>>(\n (acc, current) => {\n const [key, value] = current;\n\n const merged = Object.values(value).reduce((acc1, current1) => {\n return { ...acc1, ...current1 };\n }, {});\n\n acc[key] = merged;\n\n return acc;\n },\n {}\n );\n\n onChangeConditions(conditionsWithoutCategory);\n onToggle();\n };\n\n return (\n <ModalLayout labelledBy=\"condition-modal-breadcrumbs\" onClose={onClosed}>\n <ModalHeader>\n <Breadcrumbs id=\"condition-modal-breadcrumbs\" label={headerBreadCrumbs.join(', ')}>\n {headerBreadCrumbs.map((label, index, arr) => (\n <Crumb isCurrent={index === arr.length - 1} key={label}>\n {upperFirst(\n formatMessage({\n id: label,\n defaultMessage: label,\n })\n )}\n </Crumb>\n ))}\n </Breadcrumbs>\n </ModalHeader>\n <ModalBody>\n {actionsToDisplay.length === 0 && (\n <Typography>\n {formatMessage({\n id: 'Settings.permissions.conditions.no-actions',\n defaultMessage:\n 'You first need to select actions (create, read, update, ...) before defining conditions on them.',\n })}\n </Typography>\n )}\n <ul>\n {actionsToDisplay.map(({ actionId, label, pathToConditionsObject }, index) => {\n const name = pathToConditionsObject.join('..');\n\n return (\n <ActionRow\n key={actionId}\n arrayOfOptionsGroupedByCategory={arrayOfOptionsGroupedByCategory}\n label={label}\n isFormDisabled={isFormDisabled}\n isGrey={index % 2 === 0}\n name={name}\n onChange={handleChange}\n value={get(state, name, {})}\n />\n );\n })}\n </ul>\n </ModalBody>\n <ModalFooter\n startActions={\n <Button variant=\"tertiary\" onClick={onToggle}>\n {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'Cancel' })}\n </Button>\n }\n endActions={\n <Button onClick={handleSubmit}>\n {formatMessage({\n id: 'Settings.permissions.conditions.apply',\n defaultMessage: 'Apply',\n })}\n </Button>\n }\n />\n </ModalLayout>\n );\n};\n\nconst createDefaultConditionsForm = (\n actionsToDisplay: Array<ConditionAction | VisibleCheckboxAction>,\n modifiedData: PermissionsDataManagerContextValue['modifiedData'],\n arrayOfOptionsGroupedByCategory: ActionRowProps['arrayOfOptionsGroupedByCategory']\n) => {\n return actionsToDisplay.reduce<Record<string, Record<string, ConditionForm>>>((acc, current) => {\n const valueFromModifiedData: ConditionForm = get(\n modifiedData,\n [...current.pathToConditionsObject, 'conditions'],\n {}\n );\n\n const categoryDefaultForm = arrayOfOptionsGroupedByCategory.reduce<\n Record<string, ConditionForm>\n >((acc, current) => {\n const [categoryName, relatedConditions] = current;\n\n const conditionsForm = relatedConditions.reduce<ConditionForm>((acc, current) => {\n acc[current.id] = get(valueFromModifiedData, current.id, false);\n\n return acc;\n }, {});\n\n acc[categoryName] = conditionsForm;\n\n return acc;\n }, {});\n\n acc[current.pathToConditionsObject.join('..')] = categoryDefaultForm;\n\n return acc;\n }, {});\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ActionRow\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ActionRowProps {\n arrayOfOptionsGroupedByCategory: Array<\n [string, PermissionsDataManagerContextValue['availableConditions']]\n >;\n isFormDisabled?: boolean;\n isGrey?: boolean;\n label: string;\n name: string;\n onChange?: (name: string, values: Record<string, boolean>) => void;\n value: Record<string, ConditionForm>;\n}\n\nconst ActionRow = ({\n arrayOfOptionsGroupedByCategory,\n isFormDisabled = false,\n isGrey = false,\n label,\n name,\n onChange,\n value,\n}: ActionRowProps) => {\n const { formatMessage } = useIntl();\n\n const handleChange: MultiSelectNestedProps['onChange'] = (val) => {\n if (onChange) {\n onChange(name, getNewStateFromChangedValues(arrayOfOptionsGroupedByCategory, val));\n }\n };\n\n return (\n <Flex as=\"li\" background={isGrey ? 'neutral100' : 'neutral0'} paddingBottom={3} paddingTop={3}>\n <Flex paddingLeft={6} style={{ width: 180 }}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.permissions.conditions.can',\n defaultMessage: 'Can',\n })}\n &nbsp;\n </Typography>\n <Typography variant=\"sigma\" title={label} textColor=\"primary600\" ellipsis>\n {formatMessage({\n id: `Settings.roles.form.permissions.${label.toLowerCase()}`,\n defaultMessage: label,\n })}\n </Typography>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n &nbsp;\n {formatMessage({\n id: 'Settings.permissions.conditions.when',\n defaultMessage: 'When',\n })}\n </Typography>\n </Flex>\n <Box style={{ maxWidth: 430, width: '100%' }}>\n {/* @ts-expect-error – fix this label issue */}\n <MultiSelectNested\n id={name}\n customizeContent={(values = []) => `${values.length} currently selected`}\n onChange={handleChange}\n value={getSelectedValues(value)}\n options={getNestedOptions(arrayOfOptionsGroupedByCategory)}\n disabled={isFormDisabled}\n />\n </Box>\n </Flex>\n );\n};\n\nconst getSelectedValues = (rawValue: Record<string, ConditionForm>): string[] =>\n Object.values(rawValue)\n .map((x) =>\n Object.entries(x)\n .filter(([, value]) => value)\n .map(([key]) => key)\n )\n .flat();\n\nconst getNestedOptions = (options: ActionRowProps['arrayOfOptionsGroupedByCategory']) =>\n options.reduce<MultiSelectNestedProps['options']>((acc, [label, children]) => {\n acc.push({\n label: capitalise(label),\n children: children.map((child) => ({\n label: child.displayName,\n value: child.id,\n })),\n });\n\n return acc;\n }, []);\n\nconst getNewStateFromChangedValues = (\n options: ActionRowProps['arrayOfOptionsGroupedByCategory'],\n changedValues: string[]\n) =>\n options\n .map(([, values]) => values)\n .flat()\n .reduce<Record<string, boolean>>(\n (acc, curr) => ({ [curr.id]: changedValues.includes(curr.id), ...acc }),\n {}\n );\n\nexport { ConditionsModal };\nexport type { ConditionsModalProps };\n","import * as React from 'react';\n\nimport { BaseCheckbox, Box, Flex } from '@strapi/design-system';\nimport { ChevronDown, ChevronUp } from '@strapi/icons';\nimport get from 'lodash/get';\nimport isEmpty from 'lodash/isEmpty';\nimport omit from 'lodash/omit';\nimport { useIntl } from 'react-intl';\nimport styled, { DefaultTheme } from 'styled-components';\n\nimport { Action, Subject } from '../../../../../../../shared/contracts/permissions';\nimport {\n PermissionsDataManagerContextValue,\n usePermissionsDataManager,\n} from '../hooks/usePermissionsDataManager';\nimport { cellWidth, rowHeight } from '../utils/constants';\nimport { createArrayOfValues } from '../utils/createArrayOfValues';\nimport { ConditionForm } from '../utils/forms';\nimport { getCheckboxState } from '../utils/getCheckboxState';\n\nimport { CollapsePropertyMatrix, _internalActiveStyle } from './CollapsePropertyMatrix';\nimport { ConditionsButton } from './ConditionsButton';\nimport { ConditionsModal } from './ConditionsModal';\nimport { HiddenAction } from './HiddenAction';\nimport { RowLabelWithCheckbox, RowLabelWithCheckboxProps } from './RowLabelWithCheckbox';\n\n/* -------------------------------------------------------------------------------------------------\n * ContentTypeCollapses\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ContentTypeCollapsesProps extends Pick<CollapseProps, 'pathToData'> {\n actions?: Action[];\n isFormDisabled?: boolean;\n subjects?: Subject[];\n}\n\nconst ContentTypeCollapses = ({\n actions = [],\n isFormDisabled,\n pathToData,\n subjects = [],\n}: ContentTypeCollapsesProps) => {\n const [collapseToOpen, setCollapseToOpen] = React.useState<string | null>(null);\n\n const handleClickToggleCollapse = (collapseName: string) => () => {\n const nextCollapseToOpen = collapseToOpen === collapseName ? null : collapseName;\n\n setCollapseToOpen(nextCollapseToOpen);\n };\n\n return (\n <>\n {subjects.map(({ uid, label, properties }, index) => {\n const isActive = collapseToOpen === uid;\n const availableActions = actions.map((action) => ({\n ...action,\n isDisplayed: Array.isArray(action.subjects) && action.subjects.indexOf(uid) !== -1,\n }));\n return (\n <Flex\n key={uid}\n direction=\"column\"\n display=\"inline-flex\"\n minWidth=\"100%\"\n borderColor=\"primary600\"\n borderWidth={isActive ? 1 : 0}\n >\n <Collapse\n availableActions={availableActions}\n isActive={isActive}\n isGrey={index % 2 === 0}\n isFormDisabled={isFormDisabled}\n label={label}\n onClickToggle={handleClickToggleCollapse(uid)}\n pathToData={[pathToData, uid].join('..')}\n />\n {isActive &&\n properties.map(({ label: propertyLabel, value, children: childrenForm }) => {\n return (\n <CollapsePropertyMatrix\n availableActions={availableActions}\n childrenForm={childrenForm}\n isFormDisabled={isFormDisabled}\n label={propertyLabel}\n pathToData={[pathToData, uid].join('..')}\n propertyName={value}\n key={value}\n />\n );\n })}\n </Flex>\n );\n })}\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Collapse\n * -----------------------------------------------------------------------------------------------*/\n\ninterface CollapseProps\n extends Pick<RowLabelWithCheckboxProps, 'isActive' | 'isFormDisabled' | 'label'> {\n availableActions?: Array<Action & { isDisplayed: boolean }>;\n isGrey?: boolean;\n onClickToggle: RowLabelWithCheckboxProps['onClick'];\n pathToData: string;\n}\n\nconst Collapse = ({\n availableActions = [],\n isActive = false,\n isGrey = false,\n isFormDisabled = false,\n label,\n onClickToggle,\n pathToData,\n}: CollapseProps) => {\n const [isModalOpen, setModalOpen] = React.useState(false);\n const { formatMessage } = useIntl();\n const { modifiedData, onChangeParentCheckbox, onChangeSimpleCheckbox } =\n usePermissionsDataManager();\n\n const handleToggleModalIsOpen = () => {\n setModalOpen((s) => !s);\n };\n\n const handleModalClose = () => {\n setModalOpen(false);\n };\n\n // This corresponds to the data related to the CT left checkbox\n // modifiedData: { collectionTypes: { [ctuid]: {create: {properties: { fields: {f1: true} }, update: {}, ... } } } }\n const mainData = get(modifiedData, pathToData.split('..'), {});\n // The utils we are using: getCheckboxState, retrieves all the boolean leafs of an object in order\n // to return the state of checkbox. Since the conditions are not related to the property we need to remove the key from the object.\n const dataWithoutCondition = React.useMemo(() => {\n return Object.keys(mainData).reduce<Record<string, ConditionForm>>((acc, current) => {\n acc[current] = omit(mainData[current], 'conditions');\n\n return acc;\n }, {});\n }, [mainData]);\n\n const { hasAllActionsSelected, hasSomeActionsSelected } = getCheckboxState(dataWithoutCondition);\n\n // Here we create an array of <checkbox>, since the state of each one of them is used in\n // order to know if whether or not we need to display the associated action in\n // the <ConditionsModal />\n const checkboxesActions = React.useMemo(() => {\n return generateCheckboxesActions(availableActions, modifiedData, pathToData);\n }, [availableActions, modifiedData, pathToData]);\n\n // @ts-expect-error – hasConditions does not exist on all versions of checkboxesActions.\n const doesConditionButtonHasConditions = checkboxesActions.some((action) => action.hasConditions);\n\n return (\n <BoxWrapper isActive={isActive}>\n <Wrapper\n height={rowHeight}\n flex={1}\n alignItems=\"center\"\n background={isGrey ? 'neutral100' : 'neutral0'}\n >\n <RowLabelWithCheckbox\n isCollapsable\n isFormDisabled={isFormDisabled}\n label={label}\n checkboxName={pathToData}\n onChange={onChangeParentCheckbox}\n onClick={onClickToggle}\n someChecked={hasSomeActionsSelected}\n value={hasAllActionsSelected}\n isActive={isActive}\n >\n <Chevron paddingLeft={2}>{isActive ? <ChevronUp /> : <ChevronDown />}</Chevron>\n </RowLabelWithCheckbox>\n\n <Flex style={{ flex: 1 }}>\n {checkboxesActions.map(\n ({ actionId, hasSomeActionsSelected, isDisplayed, ...restAction }) => {\n if (!isDisplayed) {\n return <HiddenAction key={actionId} />;\n }\n\n const {\n hasConditions,\n hasAllActionsSelected,\n isParentCheckbox,\n checkboxName,\n label: permissionLabel,\n } = restAction as VisibleCheckboxAction;\n\n if (isParentCheckbox) {\n return (\n <Cell key={actionId} justifyContent=\"center\" alignItems=\"center\">\n {hasConditions && (\n <Box\n as=\"span\"\n position=\"absolute\"\n top=\"-6px\"\n left=\"37px\"\n width=\"6px\"\n height=\"6px\"\n borderRadius=\"20px\"\n background=\"primary600\"\n />\n )}\n <BaseCheckbox\n disabled={isFormDisabled}\n name={checkboxName}\n aria-label={formatMessage(\n {\n id: `Settings.permissions.select-by-permission`,\n defaultMessage: 'Select {label} permission',\n },\n { label: `${permissionLabel} ${label}` }\n )}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onValueChange={(value) => {\n onChangeParentCheckbox({\n target: {\n name: checkboxName,\n value,\n },\n });\n }}\n indeterminate={hasSomeActionsSelected}\n value={hasAllActionsSelected}\n />\n </Cell>\n );\n }\n\n return (\n <Cell key={actionId} justifyContent=\"center\" alignItems=\"center\">\n {hasConditions && (\n <Box\n as=\"span\"\n position=\"absolute\"\n top=\"-6px\"\n left=\"37px\"\n width=\"6px\"\n height=\"6px\"\n borderRadius=\"20px\"\n background=\"primary600\"\n />\n )}\n <BaseCheckbox\n disabled={isFormDisabled}\n indeterminate={hasConditions}\n name={checkboxName}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onValueChange={(value) => {\n onChangeSimpleCheckbox({\n target: {\n name: checkboxName,\n value,\n },\n });\n }}\n value={hasAllActionsSelected}\n />\n </Cell>\n );\n }\n )}\n </Flex>\n {isModalOpen && (\n <ConditionsModal\n headerBreadCrumbs={[label, 'Settings.permissions.conditions.conditions']}\n actions={checkboxesActions}\n isFormDisabled={isFormDisabled}\n onClosed={handleModalClose}\n onToggle={handleToggleModalIsOpen}\n />\n )}\n </Wrapper>\n <Box transform=\"translateY(10px)\" right=\"9px\" position=\"absolute\">\n <ConditionsButton\n onClick={handleToggleModalIsOpen}\n hasConditions={doesConditionButtonHasConditions}\n />\n </Box>\n </BoxWrapper>\n );\n};\n\ninterface VisibleCheckboxAction {\n actionId: string;\n hasAllActionsSelected: boolean;\n hasSomeActionsSelected: boolean;\n isDisplayed: true;\n isParentCheckbox: boolean;\n checkboxName: string;\n label: string;\n hasConditions: boolean;\n pathToConditionsObject: string[];\n}\n\ninterface HiddenCheckboxAction {\n actionId: string;\n isDisplayed: false;\n hasAllActionsSelected?: never;\n hasSomeActionsSelected: boolean;\n}\n\nconst generateCheckboxesActions = (\n availableActions: Array<Action & { isDisplayed: boolean }>,\n modifiedData: PermissionsDataManagerContextValue['modifiedData'],\n pathToData: string\n): Array<VisibleCheckboxAction | HiddenCheckboxAction> => {\n return availableActions.map(({ actionId, isDisplayed, applyToProperties, label }) => {\n if (!isDisplayed) {\n return { actionId, hasSomeActionsSelected: false, isDisplayed };\n }\n\n const baseCheckboxNameArray = [...pathToData.split('..'), actionId];\n const checkboxNameArray = isEmpty(applyToProperties)\n ? [...baseCheckboxNameArray, 'properties', 'enabled']\n : baseCheckboxNameArray;\n const conditionsValue = get(modifiedData, [...baseCheckboxNameArray, 'conditions'], null);\n\n const baseCheckboxAction = {\n actionId,\n checkboxName: checkboxNameArray.join('..'),\n hasConditions: createArrayOfValues(conditionsValue).some((val) => val),\n isDisplayed,\n label,\n pathToConditionsObject: baseCheckboxNameArray,\n };\n\n if (isEmpty(applyToProperties)) {\n const value = get(modifiedData, checkboxNameArray, false);\n\n // Since applyToProperties is empty it is not a parent checkbox, therefore hasAllActionsSelected is\n // equal to hasSomeActionsSelected\n return {\n ...baseCheckboxAction,\n hasAllActionsSelected: value,\n hasSomeActionsSelected: value,\n isParentCheckbox: false,\n };\n }\n\n const mainData = get(modifiedData, checkboxNameArray, null);\n\n const { hasAllActionsSelected, hasSomeActionsSelected } = getCheckboxState(mainData);\n\n return {\n ...baseCheckboxAction,\n hasAllActionsSelected,\n hasSomeActionsSelected,\n isParentCheckbox: true,\n };\n });\n};\n\nconst activeRowStyle = (theme: DefaultTheme, isActive?: boolean): string => `\n ${Wrapper} {\n background-color: ${theme.colors.primary100};\n color: ${theme.colors.primary600};\n border-radius: ${isActive ? '2px 2px 0 0' : '2px'};\n }\n ${Chevron} {\n display: flex;\n }\n ${ConditionsButton} {\n display: block;\n }\n &:hover {\n ${_internalActiveStyle(theme)}\n }\n\n &:focus-within {\n ${() => activeRowStyle(theme, isActive)}\n }\n`;\n\nconst Wrapper = styled(Flex)`\n border: 1px solid transparent;\n`;\n\nconst BoxWrapper = styled.div<{ isActive: boolean }>`\n display: inline-flex;\n min-width: 100%;\n\n ${ConditionsButton} {\n display: none;\n }\n ${({ isActive, theme }) => isActive && activeRowStyle(theme, isActive)}\n &:hover {\n ${({ theme, isActive }) => activeRowStyle(theme, isActive)}\n }\n`;\n\nconst Cell = styled(Flex)`\n width: ${cellWidth};\n position: relative;\n`;\n\nconst Chevron = styled(Box)`\n display: none;\n svg {\n width: 11px;\n }\n * {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n`;\n\nexport { ContentTypeCollapses };\nexport type { ContentTypeCollapsesProps, HiddenCheckboxAction, VisibleCheckboxAction };\n","import * as React from 'react';\n\nimport { BaseCheckbox, Box, Flex, Typography } from '@strapi/design-system';\nimport get from 'lodash/get';\nimport { useIntl } from 'react-intl';\n\nimport { Action } from '../../../../../../../shared/contracts/permissions';\nimport {\n PermissionsDataManagerContextValue,\n usePermissionsDataManager,\n} from '../hooks/usePermissionsDataManager';\nimport { cellWidth, firstRowWidth } from '../utils/constants';\nimport { RecursiveRecordOfBooleans, getCheckboxState } from '../utils/getCheckboxState';\nimport { removeConditionKeyFromData } from '../utils/removeConditionKeyFromData';\n\ninterface GlobalActionsProps {\n actions: Action[];\n isFormDisabled?: boolean;\n kind: Extract<keyof PermissionsDataManagerContextValue['modifiedData'], `${string}Types`>;\n}\n\nconst GlobalActions = ({ actions = [], isFormDisabled, kind }: GlobalActionsProps) => {\n const { formatMessage } = useIntl();\n const { modifiedData, onChangeCollectionTypeGlobalActionCheckbox } = usePermissionsDataManager();\n\n const displayedActions = actions.filter(({ subjects }) => subjects && subjects.length);\n\n const checkboxesState = React.useMemo(() => {\n const actionsIds = displayedActions.map(({ actionId }) => actionId);\n\n const data = modifiedData[kind];\n\n const relatedActionsData = actionsIds.reduce<Record<string, RecursiveRecordOfBooleans>>(\n (acc, actionId) => {\n Object.keys(data).forEach((ctUid) => {\n const actionIdData = get(data, [ctUid, actionId]);\n\n const actionIdState = { [ctUid]: removeConditionKeyFromData(actionIdData)! };\n\n if (!acc[actionId]) {\n acc[actionId] = actionIdState;\n } else {\n acc[actionId] = { ...acc[actionId], ...actionIdState };\n }\n });\n\n return acc;\n },\n {}\n );\n\n const checkboxesState = Object.keys(relatedActionsData).reduce<\n Record<\n string,\n {\n hasAllActionsSelected: boolean;\n hasSomeActionsSelected: boolean;\n }\n >\n >((acc, current) => {\n acc[current] = getCheckboxState(relatedActionsData[current]);\n\n return acc;\n }, {});\n\n return checkboxesState;\n }, [modifiedData, displayedActions, kind]);\n\n return (\n <Box paddingBottom={4} paddingTop={6} style={{ paddingLeft: firstRowWidth }}>\n <Flex gap={0}>\n {displayedActions.map(({ label, actionId }) => {\n return (\n <Flex\n shrink={0}\n width={cellWidth}\n direction=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n key={actionId}\n gap={3}\n >\n <Typography variant=\"sigma\" textColor=\"neutral500\">\n {formatMessage({\n id: `Settings.roles.form.permissions.${label.toLowerCase()}`,\n defaultMessage: label,\n })}\n </Typography>\n <BaseCheckbox\n disabled={isFormDisabled}\n onValueChange={(value) => {\n onChangeCollectionTypeGlobalActionCheckbox(kind, actionId, value);\n }}\n name={actionId}\n aria-label={formatMessage(\n {\n id: `Settings.permissions.select-all-by-permission`,\n defaultMessage: 'Select all {label} permissions',\n },\n {\n label: formatMessage({\n id: `Settings.roles.form.permissions.${label.toLowerCase()}`,\n defaultMessage: label,\n }),\n }\n )}\n value={get(checkboxesState, [actionId, 'hasAllActionsSelected'], false)}\n indeterminate={get(checkboxesState, [actionId, 'hasSomeActionsSelected'], false)}\n />\n </Flex>\n );\n })}\n </Flex>\n </Box>\n );\n};\n\nexport { GlobalActions };\nexport type { GlobalActionsProps };\n","import { Box } from '@strapi/design-system';\nimport styled from 'styled-components';\n\nimport { ContentPermission } from '../../../../../../../shared/contracts/permissions';\n\nimport { ContentTypeCollapses } from './ContentTypeCollapses';\nimport { GlobalActions, GlobalActionsProps } from './GlobalActions';\n\ninterface ContentTypesProps extends Pick<GlobalActionsProps, 'kind'> {\n isFormDisabled?: boolean;\n layout: ContentPermission;\n}\n\nconst ContentTypes = ({\n isFormDisabled,\n kind,\n layout: { actions, subjects },\n}: ContentTypesProps) => {\n const sortedSubjects = [...subjects].sort((a, b) => a.label.localeCompare(b.label));\n\n return (\n <StyledBox background=\"neutral0\">\n <GlobalActions actions={actions} kind={kind} isFormDisabled={isFormDisabled} />\n <ContentTypeCollapses\n actions={actions}\n isFormDisabled={isFormDisabled}\n pathToData={kind}\n subjects={sortedSubjects}\n />\n </StyledBox>\n );\n};\n\nconst StyledBox = styled(Box)`\n overflow-x: auto;\n`;\n\nexport { ContentTypes };\n","import * as React from 'react';\n\nimport {\n Accordion,\n AccordionContent,\n AccordionToggle,\n Box,\n Checkbox,\n Flex,\n Grid,\n GridItem,\n Typography,\n} from '@strapi/design-system';\nimport get from 'lodash/get';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport {\n SettingPermission,\n PluginPermission,\n} from '../../../../../../../shared/contracts/permissions';\nimport { capitalise } from '../../../../../utils/strings';\nimport {\n PermissionsDataManagerContextValue,\n usePermissionsDataManager,\n} from '../hooks/usePermissionsDataManager';\nimport { createArrayOfValues } from '../utils/createArrayOfValues';\nimport { ChildrenForm, ConditionForm } from '../utils/forms';\nimport { RecursiveRecordOfBooleans, getCheckboxState } from '../utils/getCheckboxState';\nimport { removeConditionKeyFromData } from '../utils/removeConditionKeyFromData';\n\nimport { ConditionsButton } from './ConditionsButton';\nimport { ConditionsModal } from './ConditionsModal';\n\nimport type { GenericLayout } from '../utils/layouts';\n\n/* -------------------------------------------------------------------------------------------------\n * PluginsAndSettingsPermissions\n * -----------------------------------------------------------------------------------------------*/\n\ntype Layout = GenericLayout<SettingPermission | PluginPermission>[];\n\ninterface PluginsAndSettingsPermissionsProps extends Pick<RowProps, 'kind' | 'isFormDisabled'> {\n layout: Layout;\n}\n\nconst PluginsAndSettingsPermissions = ({\n layout,\n ...restProps\n}: PluginsAndSettingsPermissionsProps) => {\n const [openedCategory, setOpenedCategory] = React.useState<string | null>(null);\n\n const handleOpenCategory = (categoryName: string) => {\n setOpenedCategory(categoryName === openedCategory ? null : categoryName);\n };\n\n return (\n <Box padding={6} background=\"neutral0\">\n {layout.map(({ category, categoryId, childrenForm }, index) => {\n return (\n <Row\n key={category}\n childrenForm={childrenForm}\n isOpen={openedCategory === category}\n isWhite={index % 2 === 1}\n name={category}\n onOpenCategory={handleOpenCategory}\n pathToData={[restProps.kind, categoryId]}\n {...restProps}\n />\n );\n })}\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Row\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RowProps extends Pick<Layout[number], 'childrenForm'> {\n kind: Exclude<keyof PermissionsDataManagerContextValue['modifiedData'], `${string}Types`>;\n name: string;\n isFormDisabled?: boolean;\n isOpen?: boolean;\n isWhite?: boolean;\n onOpenCategory: (categoryName: string) => void;\n pathToData: string[];\n}\n\nconst Row = ({\n childrenForm,\n kind,\n name,\n isOpen = false,\n isFormDisabled = false,\n isWhite,\n onOpenCategory,\n pathToData,\n}: RowProps) => {\n const { formatMessage } = useIntl();\n const handleClick = () => {\n onOpenCategory(name);\n };\n\n const categoryName = name.split('::').pop() ?? '';\n\n return (\n <Accordion\n expanded={isOpen}\n onToggle={handleClick}\n id={`accordion-${name}`}\n variant={isWhite ? 'primary' : 'secondary'}\n >\n <AccordionToggle\n title={capitalise(categoryName)}\n description={`${formatMessage(\n { id: 'Settings.permissions.category', defaultMessage: categoryName },\n { category: categoryName }\n )} ${kind === 'plugins' ? 'plugin' : kind}`}\n />\n\n <AccordionContent>\n <Box padding={6}>\n {childrenForm.map(({ actions, subCategoryName, subCategoryId }) => (\n <SubCategory\n key={subCategoryName}\n actions={actions}\n categoryName={categoryName}\n isFormDisabled={isFormDisabled}\n subCategoryName={subCategoryName}\n pathToData={[...pathToData, subCategoryId]}\n />\n ))}\n </Box>\n </AccordionContent>\n </Accordion>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * SubCategory\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SubCategoryProps {\n actions?: Array<SettingPermission | PluginPermission>;\n categoryName: string;\n isFormDisabled?: boolean;\n subCategoryName: string;\n pathToData: string[];\n}\n\nconst SubCategory = ({\n actions = [],\n categoryName,\n isFormDisabled,\n subCategoryName,\n pathToData,\n}: SubCategoryProps) => {\n const [isModalOpen, setModalOpen] = React.useState(false);\n const { modifiedData, onChangeParentCheckbox, onChangeSimpleCheckbox } =\n usePermissionsDataManager();\n const { formatMessage } = useIntl();\n\n const mainData = get(modifiedData, pathToData, {});\n\n const dataWithoutCondition = React.useMemo(() => {\n return Object.keys(mainData).reduce<RecursiveRecordOfBooleans>((acc, current) => {\n acc[current] = removeConditionKeyFromData(mainData[current])!;\n\n return acc;\n }, {});\n }, [mainData]);\n\n const { hasAllActionsSelected, hasSomeActionsSelected } = getCheckboxState(dataWithoutCondition);\n\n const handleToggleModalIsOpen = () => {\n setModalOpen((s) => !s);\n };\n\n const handleModalClose = () => {\n setModalOpen(false);\n };\n // We need to format the actions so it matches the shape of the ConditionsModal actions props\n const formattedActions = React.useMemo(() => {\n return actions.map((action) => {\n const checkboxName = [...pathToData, action.action, 'properties', 'enabled'];\n const checkboxValue = get(modifiedData, checkboxName, false);\n const conditionValue = get(modifiedData, [...pathToData, action.action, 'conditions'], {});\n const hasConditions = createArrayOfValues(conditionValue).some((val) => val);\n\n return {\n ...action,\n isDisplayed: checkboxValue,\n checkboxName: checkboxName.join('..'),\n hasSomeActionsSelected: checkboxValue,\n value: checkboxValue,\n hasConditions,\n label: action.displayName,\n actionId: action.action,\n pathToConditionsObject: [...pathToData, action.action],\n };\n });\n }, [actions, modifiedData, pathToData]);\n\n const datum: ChildrenForm = get(modifiedData, [...pathToData], {});\n\n const doesButtonHasCondition = createArrayOfValues(\n Object.entries(datum).reduce<Record<string, ConditionForm>>((acc, current) => {\n const [catName, { conditions }] = current;\n\n acc[catName] = conditions;\n\n return acc;\n }, {})\n ).some((val) => val);\n\n return (\n <>\n <Box>\n <Flex justifyContent=\"space-between\" alignItems=\"center\">\n <Box paddingRight={4}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {subCategoryName}\n </Typography>\n </Box>\n <Border flex={1} />\n <Box paddingLeft={4}>\n <Checkbox\n name={pathToData.join('..')}\n disabled={isFormDisabled}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onValueChange={(value) => {\n onChangeParentCheckbox({\n target: {\n name: pathToData.join('..'),\n value,\n },\n });\n }}\n indeterminate={hasSomeActionsSelected}\n value={hasAllActionsSelected}\n >\n {formatMessage({ id: 'app.utils.select-all', defaultMessage: 'Select all' })}\n </Checkbox>\n </Box>\n </Flex>\n <Flex paddingTop={6} paddingBottom={6}>\n <Grid gap={2} style={{ flex: 1 }}>\n {formattedActions.map(({ checkboxName, value, action, displayName, hasConditions }) => {\n return (\n <GridItem col={3} key={action}>\n <CheckboxWrapper disabled={isFormDisabled} hasConditions={hasConditions}>\n <Checkbox\n name={checkboxName}\n disabled={isFormDisabled}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onValueChange={(value) => {\n onChangeSimpleCheckbox({\n target: {\n name: checkboxName,\n value,\n },\n });\n }}\n value={value}\n >\n {displayName}\n </Checkbox>\n </CheckboxWrapper>\n </GridItem>\n );\n })}\n </Grid>\n <ConditionsButton\n hasConditions={doesButtonHasCondition}\n onClick={handleToggleModalIsOpen}\n />\n </Flex>\n </Box>\n {isModalOpen && (\n <ConditionsModal\n headerBreadCrumbs={[categoryName, subCategoryName]}\n actions={formattedActions}\n isFormDisabled={isFormDisabled}\n onClosed={handleModalClose}\n onToggle={handleToggleModalIsOpen}\n />\n )}\n </>\n );\n};\n\nconst Border = styled(Box)`\n align-self: center;\n border-top: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\nconst CheckboxWrapper = styled.div<{ hasConditions?: boolean; disabled?: boolean }>`\n position: relative;\n word-break: keep-all;\n ${({ hasConditions, disabled, theme }) =>\n hasConditions &&\n `\n &:before {\n content: '';\n position: absolute;\n top: ${-4 / 16}rem;\n left: ${-8 / 16}rem;\n width: ${6 / 16}rem;\n height: ${6 / 16}rem;\n border-radius: ${20 / 16}rem;\n background: ${disabled ? theme.colors.neutral100 : theme.colors.primary600};\n }\n `}\n`;\n\nexport { PluginsAndSettingsPermissions };\n","import * as React from 'react';\n\nimport { Tab, TabGroup, TabPanel, TabPanels, Tabs } from '@strapi/design-system';\nimport { difference } from '@strapi/helper-plugin';\nimport produce from 'immer';\nimport cloneDeep from 'lodash/cloneDeep';\nimport get from 'lodash/get';\nimport has from 'lodash/has';\nimport isEmpty from 'lodash/isEmpty';\nimport set from 'lodash/set';\nimport { useIntl } from 'react-intl';\n\nimport * as PermissonContracts from '../../../../../../../shared/contracts/permissions';\nimport { Permission } from '../../../../../../../shared/contracts/shared';\nimport { isObject } from '../../../../../utils/objects';\nimport {\n PermissionsDataManagerContextValue,\n PermissionsDataManagerProvider,\n} from '../hooks/usePermissionsDataManager';\nimport { ConditionForm, Form, createDefaultCTForm, createDefaultForm } from '../utils/forms';\nimport { GenericLayout, formatLayout } from '../utils/layouts';\nimport { formatPermissionsForAPI } from '../utils/permissions';\nimport { updateConditionsToFalse } from '../utils/updateConditionsToFalse';\nimport { updateValues } from '../utils/updateValues';\n\nimport { ContentTypes } from './ContentTypes';\nimport { PluginsAndSettingsPermissions } from './PluginsAndSettings';\n\nconst TAB_LABELS = [\n {\n labelId: 'app.components.LeftMenuLinkContainer.collectionTypes',\n defaultMessage: 'Collection Types',\n id: 'collectionTypes',\n },\n {\n labelId: 'app.components.LeftMenuLinkContainer.singleTypes',\n id: 'singleTypes',\n defaultMessage: 'Single Types',\n },\n {\n labelId: 'app.components.LeftMenuLinkContainer.plugins',\n defaultMessage: 'Plugins',\n id: 'plugins',\n },\n {\n labelId: 'app.components.LeftMenuLinkContainer.settings',\n defaultMessage: 'Settings',\n id: 'settings',\n },\n] as const;\n\n/* -------------------------------------------------------------------------------------------------\n * Permissions\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface PermissionsAPI {\n getPermissions: () => {\n didUpdateConditions: boolean;\n permissionsToSend: Omit<Permission, 'id' | 'createdAt' | 'updatedAt' | 'actionParameters'>[];\n };\n resetForm: () => void;\n setFormAfterSubmit: () => void;\n}\n\ninterface PermissionsProps {\n isFormDisabled?: boolean;\n permissions?: Permission[];\n layout: PermissonContracts.GetAll.Response['data'];\n}\n\nconst Permissions = React.forwardRef<PermissionsAPI, PermissionsProps>(\n ({ layout, isFormDisabled, permissions = [] }, api) => {\n const [{ initialData, layouts, modifiedData }, dispatch] = React.useReducer(\n reducer,\n initialState,\n () => init(layout, permissions)\n );\n const { formatMessage } = useIntl();\n\n React.useImperativeHandle(api, () => {\n return {\n getPermissions() {\n const collectionTypesDiff = difference(\n initialData.collectionTypes,\n modifiedData.collectionTypes\n );\n const singleTypesDiff = difference(initialData.singleTypes, modifiedData.singleTypes);\n\n const contentTypesDiff = { ...collectionTypesDiff, ...singleTypesDiff };\n\n let didUpdateConditions;\n\n if (isEmpty(contentTypesDiff)) {\n didUpdateConditions = false;\n } else {\n didUpdateConditions = Object.values(contentTypesDiff).some((permission = {}) => {\n return Object.values(permission).some((permissionValue) =>\n has(permissionValue, 'conditions')\n );\n });\n }\n\n return { permissionsToSend: formatPermissionsForAPI(modifiedData), didUpdateConditions };\n },\n resetForm() {\n dispatch({ type: 'RESET_FORM' });\n },\n setFormAfterSubmit() {\n dispatch({ type: 'SET_FORM_AFTER_SUBMIT' });\n },\n } satisfies PermissionsAPI;\n });\n\n const handleChangeCollectionTypeLeftActionRowCheckbox = (\n pathToCollectionType: OnChangeCollectionTypeRowLeftCheckboxAction['pathToCollectionType'],\n propertyName: OnChangeCollectionTypeRowLeftCheckboxAction['propertyName'],\n rowName: OnChangeCollectionTypeRowLeftCheckboxAction['rowName'],\n value: OnChangeCollectionTypeRowLeftCheckboxAction['value']\n ) => {\n dispatch({\n type: 'ON_CHANGE_COLLECTION_TYPE_ROW_LEFT_CHECKBOX',\n pathToCollectionType,\n propertyName,\n rowName,\n value,\n });\n };\n\n const handleChangeCollectionTypeGlobalActionCheckbox = (\n collectionTypeKind: OnChangeCollectionTypeGlobalActionCheckboxAction['collectionTypeKind'],\n actionId: OnChangeCollectionTypeGlobalActionCheckboxAction['actionId'],\n value: OnChangeCollectionTypeGlobalActionCheckboxAction['value']\n ) => {\n dispatch({\n type: 'ON_CHANGE_COLLECTION_TYPE_GLOBAL_ACTION_CHECKBOX',\n collectionTypeKind,\n actionId,\n value,\n });\n };\n\n const handleChangeConditions = (conditions: OnChangeConditionsAction['conditions']) => {\n dispatch({ type: 'ON_CHANGE_CONDITIONS', conditions });\n };\n\n const handleChangeSimpleCheckbox: PermissionsDataManagerContextValue['onChangeSimpleCheckbox'] =\n React.useCallback(({ target: { name, value } }) => {\n dispatch({\n type: 'ON_CHANGE_SIMPLE_CHECKBOX',\n keys: name,\n value,\n });\n }, []);\n\n const handleChangeParentCheckbox: PermissionsDataManagerContextValue['onChangeParentCheckbox'] =\n React.useCallback(({ target: { name, value } }) => {\n dispatch({\n type: 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX',\n keys: name,\n value,\n });\n }, []);\n\n return (\n <PermissionsDataManagerProvider\n availableConditions={layout.conditions}\n modifiedData={modifiedData}\n onChangeConditions={handleChangeConditions}\n onChangeSimpleCheckbox={handleChangeSimpleCheckbox}\n onChangeParentCheckbox={handleChangeParentCheckbox}\n onChangeCollectionTypeLeftActionRowCheckbox={\n handleChangeCollectionTypeLeftActionRowCheckbox\n }\n onChangeCollectionTypeGlobalActionCheckbox={handleChangeCollectionTypeGlobalActionCheckbox}\n >\n <TabGroup\n id=\"tabs\"\n label={formatMessage({\n id: 'Settings.permissions.users.tabs.label',\n defaultMessage: 'Tabs Permissions',\n })}\n >\n <Tabs>\n {TAB_LABELS.map((tabLabel) => (\n <Tab key={tabLabel.id}>\n {formatMessage({ id: tabLabel.labelId, defaultMessage: tabLabel.defaultMessage })}\n </Tab>\n ))}\n </Tabs>\n <TabPanels style={{ position: 'relative' }}>\n <TabPanel>\n <ContentTypes\n layout={layouts.collectionTypes}\n kind=\"collectionTypes\"\n isFormDisabled={isFormDisabled}\n />\n </TabPanel>\n <TabPanel>\n <ContentTypes\n layout={layouts.singleTypes}\n kind=\"singleTypes\"\n isFormDisabled={isFormDisabled}\n />\n </TabPanel>\n <TabPanel>\n <PluginsAndSettingsPermissions\n layout={layouts.plugins}\n kind=\"plugins\"\n isFormDisabled={isFormDisabled}\n />\n </TabPanel>\n <TabPanel>\n <PluginsAndSettingsPermissions\n layout={layouts.settings}\n kind=\"settings\"\n isFormDisabled={isFormDisabled}\n />\n </TabPanel>\n </TabPanels>\n </TabGroup>\n </PermissionsDataManagerProvider>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * reducer\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PermissionForms {\n collectionTypes: Form;\n plugins: Record<string, Form>;\n settings: Record<string, Form>;\n singleTypes: Form;\n}\n\ninterface State {\n initialData: PermissionForms;\n modifiedData: PermissionForms;\n layouts: {\n collectionTypes: PermissonContracts.ContentPermission;\n singleTypes: PermissonContracts.ContentPermission;\n plugins: GenericLayout<PermissonContracts.PluginPermission>[];\n settings: GenericLayout<PermissonContracts.SettingPermission>[];\n };\n}\n\nconst initialState = {\n initialData: {},\n modifiedData: {},\n layouts: {},\n};\n\ninterface OnChangeCollectionTypeGlobalActionCheckboxAction {\n type: 'ON_CHANGE_COLLECTION_TYPE_GLOBAL_ACTION_CHECKBOX';\n collectionTypeKind: keyof PermissionForms;\n actionId: string;\n value: boolean;\n}\n\ninterface OnChangeCollectionTypeRowLeftCheckboxAction {\n type: 'ON_CHANGE_COLLECTION_TYPE_ROW_LEFT_CHECKBOX';\n pathToCollectionType: string;\n propertyName: string;\n rowName: string;\n value: boolean;\n}\n\ninterface OnChangeConditionsAction {\n type: 'ON_CHANGE_CONDITIONS';\n conditions: Record<string, ConditionForm>;\n}\n\ninterface OnChangeSimpleCheckboxAction {\n type: 'ON_CHANGE_SIMPLE_CHECKBOX';\n keys: string;\n value: boolean;\n}\n\ninterface OnChangeToggleParentCheckbox {\n type: 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX';\n keys: string;\n value: boolean;\n}\n\ninterface ResetFormAction {\n type: 'RESET_FORM';\n}\n\ninterface SetFormAfterSubmitAction {\n type: 'SET_FORM_AFTER_SUBMIT';\n}\n\ntype Action =\n | OnChangeCollectionTypeGlobalActionCheckboxAction\n | OnChangeCollectionTypeRowLeftCheckboxAction\n | OnChangeConditionsAction\n | OnChangeSimpleCheckboxAction\n | OnChangeToggleParentCheckbox\n | ResetFormAction\n | SetFormAfterSubmitAction;\n\n/* eslint-disable consistent-return */\nconst reducer = (state: State, action: Action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n // This action is called when a checkbox in the <GlobalActions />\n // changes\n case 'ON_CHANGE_COLLECTION_TYPE_GLOBAL_ACTION_CHECKBOX': {\n const { collectionTypeKind, actionId, value } = action;\n const pathToData = ['modifiedData', collectionTypeKind];\n\n Object.keys(get(state, pathToData)).forEach((collectionType) => {\n const collectionTypeActionData = get(\n state,\n [...pathToData, collectionType, actionId],\n undefined\n );\n\n if (collectionTypeActionData) {\n let updatedValues = updateValues(collectionTypeActionData, value);\n\n // We need to remove the applied conditions\n // @ts-expect-error – TODO: type better\n if (!value && updatedValues.conditions) {\n // @ts-expect-error – TODO: type better\n const updatedConditions = updateValues(updatedValues.conditions, false);\n\n updatedValues = { ...updatedValues, conditions: updatedConditions };\n }\n\n set(draftState, [...pathToData, collectionType, actionId], updatedValues);\n }\n });\n\n break;\n }\n case 'ON_CHANGE_COLLECTION_TYPE_ROW_LEFT_CHECKBOX': {\n const { pathToCollectionType, propertyName, rowName, value } = action;\n let nextModifiedDataState = cloneDeep(state.modifiedData);\n const pathToModifiedDataCollectionType = pathToCollectionType.split('..');\n\n const objToUpdate = get(nextModifiedDataState, pathToModifiedDataCollectionType, {});\n\n Object.keys(objToUpdate).forEach((actionId) => {\n // When a ct has multiple properties (ex: locales, field)\n // We need to make sure that we add any new property to the modifiedData\n // object.\n if (has(objToUpdate[actionId], `properties.${propertyName}`)) {\n const objValue = get(objToUpdate, [actionId, 'properties', propertyName, rowName]);\n const pathToDataToSet = [\n ...pathToModifiedDataCollectionType,\n actionId,\n 'properties',\n propertyName,\n rowName,\n ];\n\n if (!isObject(objValue)) {\n set(nextModifiedDataState, pathToDataToSet, value);\n } else {\n const updatedValue = updateValues(objValue, value);\n\n set(nextModifiedDataState, pathToDataToSet, updatedValue);\n }\n }\n });\n\n // When we uncheck a row, we need to check if we also need to disable the conditions\n if (!value) {\n // @ts-expect-error – TODO: type better\n nextModifiedDataState = updateConditionsToFalse(nextModifiedDataState);\n }\n\n set(draftState, 'modifiedData', nextModifiedDataState);\n\n break;\n }\n case 'ON_CHANGE_CONDITIONS': {\n Object.entries(action.conditions).forEach((array) => {\n const [stringPathToData, conditionsToUpdate] = array;\n\n set(\n draftState,\n ['modifiedData', ...stringPathToData.split('..'), 'conditions'],\n conditionsToUpdate\n );\n });\n\n break;\n }\n case 'ON_CHANGE_SIMPLE_CHECKBOX': {\n let nextModifiedDataState = cloneDeep(state.modifiedData);\n\n set(nextModifiedDataState, [...action.keys.split('..')], action.value);\n\n // When we uncheck a single checkbox we need to remove the conditions from the parent\n if (!action.value) {\n // @ts-expect-error – TODO: type better\n nextModifiedDataState = updateConditionsToFalse(nextModifiedDataState);\n }\n\n set(draftState, 'modifiedData', nextModifiedDataState);\n\n break;\n }\n /*\n * Here the idea is to retrieve a specific value of the modifiedObject\n * then update all the boolean values of the retrieved one\n * and update the drafState.\n *\n * For instance in order to enable create action for all the fields and locales\n * of the restaurant content type we need to :\n * 1. Retrieve the modifiedData.collectionTypes.restaurant.create object\n * 2. Toggle all the end boolean values to the desired one\n * 3. Update the draftState\n *\n * Since the case works well in order to update what we called \"parent\" checkbox. We can\n * reuse the action when we need to toggle change all the values that depends on this one.\n * A parent checkbox is a checkbox which value is not a boolean but depends on its children ones, therefore,\n * a parent checkbox does not have a represented value in the draftState, they are just helpers.\n *\n * Given the following data:\n *\n * const data = {\n * restaurant: {\n * create: {\n * fields: { name: true },\n * locales: { en: false }\n * }\n * }\n * }\n *\n * The value of the create checkbox for the restaurant will be ƒalse since not all its children have\n * truthy values and in order to set its value to true when need to have all the values of its children set to true.\n *\n * Similarly, we can reuse the logic for the components attributes\n *\n */\n case 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX': {\n const { keys, value } = action;\n const pathToValue = [...keys.split('..')];\n let nextModifiedDataState = cloneDeep(state.modifiedData);\n const oldValues = get(nextModifiedDataState, pathToValue, {});\n\n const updatedValues = updateValues(oldValues, value);\n set(nextModifiedDataState, pathToValue, updatedValues);\n\n // When we uncheck a parent checkbox we need to remove the associated conditions\n if (!value) {\n // @ts-expect-error – TODO: type better\n nextModifiedDataState = updateConditionsToFalse(nextModifiedDataState);\n }\n\n set(draftState, ['modifiedData'], nextModifiedDataState);\n\n break;\n }\n case 'RESET_FORM': {\n draftState.modifiedData = state.initialData;\n break;\n }\n case 'SET_FORM_AFTER_SUBMIT': {\n draftState.initialData = state.modifiedData;\n break;\n }\n default:\n return draftState;\n }\n });\n\n/* -------------------------------------------------------------------------------------------------\n * init (reducer)\n * -----------------------------------------------------------------------------------------------*/\n\nconst init = (\n layout: PermissionsProps['layout'],\n permissions: PermissionsProps['permissions']\n): State => {\n const {\n conditions,\n sections: { collectionTypes, singleTypes, plugins, settings },\n } = layout;\n\n const layouts = {\n collectionTypes,\n singleTypes,\n plugins: formatLayout(plugins, 'plugin'),\n settings: formatLayout(settings, 'category'),\n };\n\n const defaultForm = {\n collectionTypes: createDefaultCTForm(collectionTypes, conditions, permissions),\n singleTypes: createDefaultCTForm(singleTypes, conditions, permissions),\n plugins: createDefaultForm(layouts.plugins, conditions, permissions),\n settings: createDefaultForm(layouts.settings, conditions, permissions),\n };\n\n return {\n initialData: defaultForm,\n modifiedData: defaultForm,\n layouts,\n };\n};\n\nexport { Permissions };\nexport type {\n State,\n OnChangeCollectionTypeRowLeftCheckboxAction,\n OnChangeConditionsAction,\n OnChangeCollectionTypeGlobalActionCheckboxAction,\n};\n"],"names":["createContext","isObject","permissions","current","acc","createDefaultConditionsForm","isEmpty","merge","groupBy","has","omit","styled","Flex","jsx","Box","useIntl","jsxs","BaseCheckbox","value","Typography","useMemo","childrenForm","label","ActionRow","React","Fragment","Wrapper","get","hasAllActionsSelected","hasSomeActionsSelected","CarretDown","index","StyledBox","css","Button","Cog","produce","ModalLayout","ModalHeader","Breadcrumbs","Crumb","upperFirst","ModalBody","ModalFooter","MultiSelectNested","ChevronUp","ChevronDown","_internalActiveStyle","checkboxesState","Accordion","AccordionToggle","AccordionContent","Checkbox","Grid","GridItem","difference","TabGroup","Tabs","Tab","TabPanels","TabPanel","set","cloneDeep"],"mappings":"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"}
1
+ {"version":3,"file":"Permissions-J__XYO4N.js","sources":["../../admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.ts","../../admin/src/utils/arrays.ts","../../admin/src/pages/Settings/pages/Roles/utils/createArrayOfValues.ts","../../admin/src/pages/Settings/pages/Roles/utils/permissions.ts","../../admin/src/pages/Settings/pages/Roles/utils/forms.ts","../../admin/src/pages/Settings/pages/Roles/utils/layouts.ts","../../admin/src/pages/Settings/pages/Roles/utils/updateConditionsToFalse.ts","../../admin/src/pages/Settings/pages/Roles/utils/updateValues.ts","../../admin/src/pages/Settings/pages/Roles/utils/constants.ts","../../admin/src/pages/Settings/pages/Roles/utils/removeConditionKeyFromData.ts","../../admin/src/pages/Settings/pages/Roles/utils/getCheckboxState.ts","../../admin/src/utils/strings.ts","../../admin/src/pages/Settings/pages/Roles/components/CollapseLabel.tsx","../../admin/src/pages/Settings/pages/Roles/components/HiddenAction.tsx","../../admin/src/pages/Settings/pages/Roles/components/RequiredSign.tsx","../../admin/src/pages/Settings/pages/Roles/components/RowLabelWithCheckbox.tsx","../../admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.tsx","../../admin/src/pages/Settings/pages/Roles/components/ConditionsButton.tsx","../../admin/src/pages/Settings/pages/Roles/components/ConditionsModal.tsx","../../admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.tsx","../../admin/src/pages/Settings/pages/Roles/components/GlobalActions.tsx","../../admin/src/pages/Settings/pages/Roles/components/ContentTypes.tsx","../../admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.tsx","../../admin/src/pages/Settings/pages/Roles/components/Permissions.tsx"],"sourcesContent":["import { createContext } from '@radix-ui/react-context';\n\nimport { Condition } from '../../../../../../../shared/contracts/permissions';\n\nimport type {\n OnChangeCollectionTypeGlobalActionCheckboxAction,\n OnChangeCollectionTypeRowLeftCheckboxAction,\n OnChangeConditionsAction,\n State,\n} from '../components/Permissions';\n\n// Note: I had to guess most of these types based on the name and usage, but I actually don't\n// know if they are correct, because the usage is very generic. Feel free to correct them if\n// they create problems.\nexport interface PermissionsDataManagerContextValue extends Pick<State, 'modifiedData'> {\n availableConditions: Condition[];\n onChangeCollectionTypeLeftActionRowCheckbox: (\n pathToCollectionType: OnChangeCollectionTypeRowLeftCheckboxAction['pathToCollectionType'],\n propertyName: OnChangeCollectionTypeRowLeftCheckboxAction['propertyName'],\n rowName: OnChangeCollectionTypeRowLeftCheckboxAction['rowName'],\n value: OnChangeCollectionTypeRowLeftCheckboxAction['value']\n ) => void;\n onChangeConditions: (conditions: OnChangeConditionsAction['conditions']) => void;\n onChangeSimpleCheckbox: (event: { target: { name: string; value: boolean } }) => void;\n onChangeParentCheckbox: (event: { target: { name: string; value: boolean } }) => void;\n onChangeCollectionTypeGlobalActionCheckbox: (\n collectionTypeKind: OnChangeCollectionTypeGlobalActionCheckboxAction['collectionTypeKind'],\n actionId: OnChangeCollectionTypeGlobalActionCheckboxAction['actionId'],\n value: OnChangeCollectionTypeGlobalActionCheckboxAction['value']\n ) => void;\n}\n\nconst [PermissionsDataManagerProvider, usePermissionsDataManagerContext] =\n createContext<PermissionsDataManagerContextValue>('PermissionsDataManager');\n\nexport const usePermissionsDataManager = () =>\n usePermissionsDataManagerContext('usePermissionsDataManager');\n\nexport { PermissionsDataManagerProvider };\n","/**\n * @internal\n * @description Mutates a value to be a union of flat values, no arrays allowed.\n */\ntype Flat<T> = T extends string ? T : T extends ArrayLike<any> ? never : T;\n\n/**\n * @internal\n */\ninterface RecursiveArray<T> extends Array<T | RecursiveArray<T>> {}\n/**\n * @internal\n */\ninterface ArrayOfRecursiveArraysOrValues<T> extends ArrayLike<T | RecursiveArray<T>> {}\n\n/**\n * @internal\n *\n * @description Flattens an array recursively.\n */\nconst flattenDeep = <T>(\n array?: ArrayOfRecursiveArraysOrValues<T> | null | undefined\n): Array<Flat<T>> => {\n if (Array.isArray(array)) {\n return array.reduce((acc, value) => {\n if (Array.isArray(value)) {\n acc.push(...flattenDeep(value));\n } else {\n acc.push(value);\n }\n\n return acc;\n }, [] as Array<Flat<T>>);\n } else {\n return [];\n }\n};\n\nexport { flattenDeep };\nexport type { Flat, RecursiveArray, ArrayOfRecursiveArraysOrValues };\n","import { Flat, flattenDeep } from '../../../../../utils/arrays';\nimport { isObject } from '../../../../../utils/objects';\n\nconst createArrayOfValues = <TData>(obj: unknown): Array<Flat<TData>> => {\n if (!isObject(obj)) {\n return [];\n }\n\n return flattenDeep(\n Object.values(obj).map((value) => {\n if (isObject(value)) {\n return createArrayOfValues(value);\n }\n\n return value;\n })\n );\n};\n\nexport { createArrayOfValues };\n","import { isObject } from '../../../../../utils/objects';\n\nimport { createArrayOfValues } from './createArrayOfValues';\n\nimport type { ConditionForm, Form, PropertyChildForm } from './forms';\nimport type { UpdatePermissions } from '../../../../../../../shared/contracts/roles';\nimport type { Permission } from '../../../../../../../shared/contracts/shared';\nimport type { PermissionsDataManagerContextValue } from '../hooks/usePermissionsDataManager';\n\ntype PermissionApiBody = UpdatePermissions.Request['body']['permissions'];\n\n/**\n * @description Given a users permissions array we find the first one that matches a provided subject & action\n */\nconst findMatchingPermission = (\n permissions: Permission[],\n action: string,\n subject: string | null\n) => permissions.find((perm) => perm.action === action && perm.subject === subject);\n\nconst formatPermissionsForAPI = (\n modifiedData: PermissionsDataManagerContextValue['modifiedData']\n): PermissionApiBody => {\n const pluginsPermissions = formatSettingsPermissions(modifiedData.plugins);\n const settingsPermissions = formatSettingsPermissions(modifiedData.settings);\n const collectionTypesPermissions = formatContentTypesPermissions(modifiedData.collectionTypes);\n const singleTypesPermissions = formatContentTypesPermissions(modifiedData.singleTypes);\n\n return [\n ...pluginsPermissions,\n ...settingsPermissions,\n ...collectionTypesPermissions,\n ...singleTypesPermissions,\n ];\n};\n\nconst formatSettingsPermissions = (\n settingsPermissionsObject:\n | PermissionsDataManagerContextValue['modifiedData']['plugins']\n | PermissionsDataManagerContextValue['modifiedData']['settings']\n): PermissionApiBody => {\n return Object.values(settingsPermissionsObject).reduce<PermissionApiBody>((formAcc, form) => {\n const currentCategoryPermissions = Object.values(form).reduce<PermissionApiBody>(\n (childFormAcc, childForm) => {\n const permissions = Object.entries(childForm).reduce<PermissionApiBody>(\n (\n responsesAcc,\n [\n actionName,\n {\n conditions,\n properties: { enabled },\n },\n ]\n ) => {\n if (!enabled) {\n return responsesAcc;\n }\n\n responsesAcc.push({\n action: actionName,\n subject: null,\n conditions: createConditionsArray(conditions),\n properties: {},\n });\n\n return responsesAcc;\n },\n []\n );\n\n return [...childFormAcc, ...permissions];\n },\n []\n );\n\n return [...formAcc, ...currentCategoryPermissions];\n }, []);\n};\n\nconst formatContentTypesPermissions = (contentTypesPermissions: Form): PermissionApiBody => {\n const permissions = Object.entries(contentTypesPermissions).reduce<PermissionApiBody>(\n (allPermissions, current) => {\n const [subject, currentSubjectActions] = current;\n\n const permissions = Object.entries(currentSubjectActions).reduce<PermissionApiBody>(\n (acc, current) => {\n const [actionName, permissions] = current;\n const shouldCreatePermission = createArrayOfValues(permissions).some((val) => val);\n\n if (!shouldCreatePermission) {\n return acc;\n }\n\n if (!permissions?.properties?.enabled) {\n const createdPermissionsArray = Object.entries(permissions.properties).reduce<\n PermissionApiBody[number]\n >(\n (acc, current) => {\n const [propertyName, propertyValue] = current;\n\n // @ts-expect-error – `propertyValue` can be boolean or an object, but we don't account for it...\n acc.properties[propertyName] = createPropertyArray(propertyValue);\n\n return acc;\n },\n {\n action: actionName,\n subject,\n conditions: createConditionsArray(permissions.conditions),\n properties: {},\n }\n );\n\n return [...acc, createdPermissionsArray];\n }\n\n if (!permissions.properties.enabled) {\n return acc;\n }\n\n acc.push({\n action: actionName,\n subject,\n properties: {},\n conditions: createConditionsArray(permissions.conditions),\n });\n\n return acc;\n },\n []\n );\n\n return [...allPermissions, ...permissions];\n },\n []\n );\n\n return permissions;\n};\n\nconst createPropertyArray = (propertyValue: PropertyChildForm, prefix = ''): string[] => {\n return Object.entries(propertyValue).reduce<string[]>((acc, current) => {\n const [name, value] = current;\n\n if (isObject(value)) {\n return [...acc, ...createPropertyArray(value, `${prefix}${name}.`)];\n }\n\n if (value && !isObject(value)) {\n acc.push(`${prefix}${name}`);\n }\n\n return acc;\n }, []);\n};\n\nconst createConditionsArray = (conditions: ConditionForm) =>\n Object.entries(conditions)\n .filter(([, conditionValue]) => {\n return conditionValue;\n })\n .map(([conditionName]) => conditionName);\n\nexport { findMatchingPermission, formatPermissionsForAPI };\n","import isEmpty from 'lodash/isEmpty';\nimport merge from 'lodash/merge';\n\nimport { findMatchingPermission } from './permissions';\n\nimport type { GenericLayout } from './layouts';\nimport type {\n Condition,\n SettingPermission,\n ContentPermission,\n Subject,\n SubjectProperty,\n} from '../../../../../../../shared/contracts/permissions';\nimport type { Permission } from '../../../../../../../shared/contracts/shared';\n\ntype ConditionForm = Record<string, boolean>;\n\n/**\n * Creates the default condition form: { [conditionId]: false }\n */\nconst createDefaultConditionsForm = (\n conditions: Condition[],\n initialConditions: Permission['conditions'] = []\n): ConditionForm =>\n conditions.reduce<ConditionForm>((acc, current) => {\n acc[current.id] = initialConditions.indexOf(current.id) !== -1;\n\n return acc;\n }, {});\n\ninterface SubCategoryForm {\n properties: {\n enabled: boolean;\n };\n conditions: ConditionForm;\n}\n\ntype ChildrenForm = Record<\n string,\n SubCategoryForm | (Omit<SubCategoryForm, 'properties'> & PropertyForm)\n>;\n\ntype Form = Record<string, ChildrenForm>;\n\nconst createDefaultForm = <TLayout extends Omit<SettingPermission, 'category'>>(\n layout: GenericLayout<TLayout>[],\n conditions: Condition[],\n initialPermissions: Permission[] = []\n) => {\n return layout.reduce<Record<string, Form>>((acc, { categoryId, childrenForm }) => {\n const childrenDefaultForm = childrenForm.reduce<Form>((acc, current) => {\n acc[current.subCategoryId] = current.actions.reduce<ChildrenForm>((acc, current) => {\n const foundMatchingPermission = findMatchingPermission(\n initialPermissions,\n current.action,\n null\n );\n\n acc[current.action] = {\n properties: {\n enabled: foundMatchingPermission !== undefined,\n },\n conditions: createDefaultConditionsForm(\n conditions,\n foundMatchingPermission?.conditions ?? []\n ),\n };\n\n return acc;\n }, {});\n\n return acc;\n }, {});\n\n acc[categoryId] = childrenDefaultForm;\n\n return acc;\n }, {});\n};\n\ninterface PropertyChildForm extends Record<string, boolean | PropertyChildForm> {}\n\ninterface PropertyForm {\n properties: PropertyChildForm;\n}\n\n/**\n * Creates the default form for all the properties found in a content type's layout\n */\nconst createDefaultPropertiesForm = (\n properties: string[],\n subject: Subject,\n matchingPermission?: Permission\n): PropertyForm => {\n const recursivelyCreatePropertyForm = (\n { children = [] }: SubjectProperty,\n propertyValues: string[],\n prefix = ''\n ): PropertyChildForm => {\n return children.reduce<PropertyChildForm>((acc, current) => {\n if (current.children) {\n return {\n ...acc,\n [current.value]: recursivelyCreatePropertyForm(\n current,\n propertyValues,\n `${prefix}${current.value}.`\n ),\n };\n }\n\n const hasProperty = propertyValues.indexOf(`${prefix}${current.value}`) !== -1;\n\n acc[current.value] = hasProperty;\n\n return acc;\n }, {});\n };\n\n return properties.reduce<PropertyForm>(\n (acc, currentPropertyName) => {\n const foundProperty = subject.properties.find(({ value }) => value === currentPropertyName);\n\n if (foundProperty) {\n const matchingPermissionPropertyValues =\n matchingPermission?.properties[foundProperty.value] ?? [];\n\n const propertyForm = recursivelyCreatePropertyForm(\n foundProperty,\n matchingPermissionPropertyValues\n );\n\n acc.properties[currentPropertyName] = propertyForm;\n }\n\n return acc;\n },\n { properties: {} }\n );\n};\n\n/**\n * Creates the default for for a content type\n */\nconst createDefaultCTForm = (\n { subjects, actions = [] }: ContentPermission,\n conditions: Condition[],\n initialPermissions: Permission[] = []\n) => {\n return actions.reduce<Form>((defaultForm, action) => {\n type SubjectLayouts = Record<string, Subject>;\n\n const subjectLayouts = action.subjects.reduce<SubjectLayouts>((acc, current) => {\n const foundLayout = subjects.find(({ uid }) => uid === current) || null;\n\n if (foundLayout) {\n acc[current] = foundLayout;\n }\n\n return acc;\n }, {});\n\n // This can happen when an action is not related to a content type\n // for instance the D&P permission is applied only with the cts that\n // have the D&P features enabled\n if (isEmpty(subjectLayouts)) {\n return defaultForm;\n }\n\n // The object has the following shape: { [ctUID]: { [actionId]: { [property]: { enabled: false } } } }\n const contentTypesActions = Object.keys(subjectLayouts).reduce<Form>((acc, currentCTUID) => {\n const { actionId, applyToProperties } = action;\n const currentSubjectLayout = subjectLayouts[currentCTUID];\n const properties = currentSubjectLayout.properties.map(({ value }) => value);\n const doesNothaveProperty = properties.every(\n (property) => (applyToProperties || []).indexOf(property) === -1\n );\n\n const matchingPermission = findMatchingPermission(initialPermissions, actionId, currentCTUID);\n const conditionsForm = createDefaultConditionsForm(\n conditions,\n matchingPermission?.conditions ?? []\n );\n\n if (!acc[currentCTUID]) {\n acc[currentCTUID] = {};\n }\n\n if (isEmpty(applyToProperties) || doesNothaveProperty) {\n acc[currentCTUID][actionId] = {\n properties: {\n enabled: matchingPermission !== undefined,\n },\n conditions: conditionsForm,\n };\n\n return acc;\n }\n\n const propertiesForm = createDefaultPropertiesForm(\n applyToProperties,\n subjectLayouts[currentCTUID],\n matchingPermission\n );\n\n acc[currentCTUID][actionId] = { ...propertiesForm, conditions: conditionsForm };\n\n return acc;\n }, {});\n\n return merge(defaultForm, contentTypesActions);\n }, {});\n};\n\nexport { createDefaultConditionsForm, createDefaultForm, createDefaultCTForm };\nexport type { ConditionForm, Form, PropertyForm, SubCategoryForm, ChildrenForm, PropertyChildForm };\n","import groupBy from 'lodash/groupBy';\n\nimport { SettingPermission } from '../../../../../../../shared/contracts/permissions';\n\ninterface GenericLayout<TLayout> {\n category: string;\n categoryId: string;\n childrenForm: Array<{\n subCategoryName: string;\n subCategoryId: string;\n actions: TLayout[];\n }>;\n}\n\nconst formatLayout = <TLayout extends Omit<SettingPermission, 'category'>>(\n layout: TLayout[],\n groupByKey: keyof TLayout\n): GenericLayout<TLayout>[] => {\n return Object.entries(groupBy(layout, groupByKey)).map(([itemName, item]) => ({\n category: itemName,\n categoryId: itemName.split(' ').join('-'),\n childrenForm: Object.entries(groupBy(item, 'subCategory')).map(\n ([subCategoryName, actions]) => ({\n subCategoryName,\n subCategoryId: subCategoryName.split(' ').join('-'),\n actions,\n })\n ),\n }));\n};\n\nexport { formatLayout };\nexport type { GenericLayout };\n","import has from 'lodash/has';\nimport omit from 'lodash/omit';\n\nimport { isObject } from '../../../../../utils/objects';\n\nimport { createArrayOfValues } from './createArrayOfValues';\n/**\n * Changes all the conditions leaf when the properties are all falsy\n */\nconst updateConditionsToFalse = (obj: object): object => {\n return Object.keys(obj).reduce((acc, current) => {\n // @ts-expect-error – TODO: type better\n const currentValue = obj[current];\n\n if (isObject(currentValue) && !has(currentValue, 'conditions')) {\n return { ...acc, [current]: updateConditionsToFalse(currentValue) };\n }\n\n if (isObject(currentValue) && has(currentValue, 'conditions')) {\n const isActionEnabled = createArrayOfValues(omit(currentValue, 'conditions')).some(\n (val) => val\n );\n\n if (!isActionEnabled) {\n // @ts-expect-error – TODO: type better\n const updatedConditions = Object.keys(currentValue.conditions).reduce((acc1, current) => {\n // @ts-expect-error – TODO: type better\n acc1[current] = false;\n\n return acc1;\n }, {});\n\n return { ...acc, [current]: { ...currentValue, conditions: updatedConditions } };\n }\n }\n\n // @ts-expect-error – TODO: type better\n acc[current] = currentValue;\n\n return acc;\n }, {});\n};\n\nexport { updateConditionsToFalse };\n","import { isObject } from '../../../../../utils/objects';\n\n/**\n * Sets all the none object values of an object to the given one\n * It preserves the shape of the object, it only modifies the leafs\n * of an object.\n * This utility is very helpful when dealing with parent<>children checkboxes\n */\nconst updateValues = (obj: object, valueToSet: boolean, isFieldUpdate = false): object => {\n return Object.keys(obj).reduce((acc, current) => {\n const currentValue = obj[current as keyof object];\n\n if (current === 'conditions' && !isFieldUpdate) {\n // @ts-expect-error – TODO: type better\n acc[current] = currentValue;\n\n return acc;\n }\n\n if (isObject(currentValue)) {\n return { ...acc, [current]: updateValues(currentValue, valueToSet, current === 'fields') };\n }\n\n // @ts-expect-error – TODO: type better\n acc[current] = valueToSet;\n\n return acc;\n }, {});\n};\n\nexport { updateValues };\n","export const cellWidth = `${120 / 16}rem`;\nexport const firstRowWidth = `${200 / 16}rem`;\nexport const rowHeight = `${53 / 16}rem`;\n","type DataWithoutCondition<TData extends { conditions?: unknown }> = Omit<TData, 'conditions'>;\n\nconst removeConditionKeyFromData = <TData extends { conditions?: unknown }>(\n obj?: TData\n): DataWithoutCondition<TData> | null => {\n if (!obj) {\n return null;\n }\n\n return Object.entries(obj).reduce((acc, [key, value]) => {\n if (key !== 'conditions') {\n // @ts-expect-error – TODO: fix this type error correctly.\n acc[key] = value;\n }\n\n return acc;\n }, {} as DataWithoutCondition<TData>);\n};\n\nexport { removeConditionKeyFromData };\nexport type { DataWithoutCondition };\n","import { createArrayOfValues } from './createArrayOfValues';\nimport { removeConditionKeyFromData } from './removeConditionKeyFromData';\n\ninterface RecursiveRecordOfBooleans extends Record<string, boolean | RecursiveRecordOfBooleans> {}\n\nconst getCheckboxState = (dataObj: RecursiveRecordOfBooleans) => {\n const dataWithoutCondition = removeConditionKeyFromData(dataObj);\n\n const arrayOfValues = createArrayOfValues(dataWithoutCondition);\n\n if (!arrayOfValues.length) {\n return { hasAllActionsSelected: false, hasSomeActionsSelected: false };\n }\n\n const hasAllActionsSelected = arrayOfValues.every((val) => val);\n const hasSomeActionsSelected = arrayOfValues.some((val) => val) && !hasAllActionsSelected;\n\n return { hasAllActionsSelected, hasSomeActionsSelected };\n};\n\nexport { getCheckboxState };\nexport type { RecursiveRecordOfBooleans };\n","const capitalise = (str: string): string => str.charAt(0).toUpperCase() + str.slice(1);\n\nexport { capitalise };\n","import { Flex } from '@strapi/design-system';\nimport styled from 'styled-components';\n\nconst CollapseLabel = styled(Flex)<{ isCollapsable: boolean }>`\n padding-right: ${({ theme }) => theme.spaces[2]};\n overflow: hidden;\n flex: 1;\n ${({ isCollapsable }) => isCollapsable && 'cursor: pointer;'}\n`;\n\nexport { CollapseLabel };\n","import styled from 'styled-components';\n\nimport { cellWidth } from '../utils/constants';\n\nconst HiddenAction = styled.div`\n width: ${cellWidth};\n`;\n\nexport { HiddenAction };\n","import { Box } from '@strapi/design-system';\n\nconst RequiredSign = () => (\n <Box color=\"danger700\" paddingLeft={1}>\n *\n </Box>\n);\n\nexport { RequiredSign };\n","import * as React from 'react';\n\nimport { BaseCheckbox, Box, Flex, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { capitalise } from '../../../../../utils/strings';\nimport { PermissionsDataManagerContextValue } from '../hooks/usePermissionsDataManager';\nimport { firstRowWidth } from '../utils/constants';\n\nimport { CollapseLabel } from './CollapseLabel';\n\ninterface RowLabelWithCheckboxProps {\n children: React.ReactNode;\n checkboxName?: string;\n isActive?: boolean;\n isCollapsable?: boolean;\n isFormDisabled?: boolean;\n label: string;\n onChange: PermissionsDataManagerContextValue['onChangeParentCheckbox'];\n onClick: () => void;\n someChecked?: boolean;\n value: boolean;\n}\n\nconst RowLabelWithCheckbox = ({\n checkboxName = '',\n children,\n isActive = false,\n isCollapsable = false,\n isFormDisabled = false,\n label,\n onChange,\n onClick,\n someChecked = false,\n value,\n}: RowLabelWithCheckboxProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex alignItems=\"center\" paddingLeft={6} width={firstRowWidth} shrink={0}>\n <Box paddingRight={2}>\n <BaseCheckbox\n name={checkboxName}\n aria-label={formatMessage(\n {\n id: `Settings.permissions.select-all-by-permission`,\n defaultMessage: 'Select all {label} permissions',\n },\n { label }\n )}\n disabled={isFormDisabled}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onValueChange={(value) =>\n onChange({\n target: {\n name: checkboxName,\n value,\n },\n })\n }\n indeterminate={someChecked}\n value={value}\n />\n </Box>\n <CollapseLabel\n title={label}\n alignItems=\"center\"\n isCollapsable={isCollapsable}\n {...(isCollapsable && {\n onClick,\n 'aria-expanded': isActive,\n onKeyDown: ({ key }) => (key === 'Enter' || key === ' ') && onClick(),\n tabIndex: 0,\n role: 'button',\n })}\n >\n <Typography\n fontWeight={isActive ? 'bold' : undefined}\n textColor={isActive ? 'primary600' : 'neutral800'}\n ellipsis\n >\n {capitalise(label)}\n </Typography>\n {children}\n </CollapseLabel>\n </Flex>\n );\n};\n\nexport { RowLabelWithCheckbox };\nexport type { RowLabelWithCheckboxProps };\n","import React, { useMemo } from 'react';\n\nimport { BaseCheckbox, Box, Flex, Typography } from '@strapi/design-system';\nimport { CarretDown } from '@strapi/icons';\nimport get from 'lodash/get';\nimport { useIntl } from 'react-intl';\nimport styled, { DefaultTheme, css } from 'styled-components';\n\nimport { Action, SubjectProperty } from '../../../../../../../shared/contracts/permissions';\nimport { capitalise } from '../../../../../utils/strings';\nimport {\n PermissionsDataManagerContextValue,\n usePermissionsDataManager,\n} from '../hooks/usePermissionsDataManager';\nimport { cellWidth, firstRowWidth, rowHeight } from '../utils/constants';\nimport { getCheckboxState } from '../utils/getCheckboxState';\n\nimport { CollapseLabel } from './CollapseLabel';\nimport { HiddenAction } from './HiddenAction';\nimport { RequiredSign } from './RequiredSign';\nimport { RowLabelWithCheckbox, RowLabelWithCheckboxProps } from './RowLabelWithCheckbox';\n\n/* -------------------------------------------------------------------------------------------------\n * CollapsePropertyMatrix\n * -----------------------------------------------------------------------------------------------*/\n\ninterface CollapsePropertyMatrixProps\n extends Pick<\n ActionRowProps,\n 'childrenForm' | 'isFormDisabled' | 'label' | 'pathToData' | 'propertyName'\n > {\n availableActions?: Array<Action & { isDisplayed: boolean }>;\n}\n\ninterface PropertyAction {\n label: string;\n actionId: string;\n isActionRelatedToCurrentProperty: boolean;\n}\n\nconst CollapsePropertyMatrix = ({\n availableActions = [],\n childrenForm = [],\n isFormDisabled,\n label,\n pathToData,\n propertyName,\n}: CollapsePropertyMatrixProps) => {\n const propertyActions = useMemo(\n () =>\n availableActions.map((action) => {\n const isActionRelatedToCurrentProperty =\n Array.isArray(action.applyToProperties) &&\n action.applyToProperties.indexOf(propertyName) !== -1 &&\n action.isDisplayed;\n\n return { label: action.label, actionId: action.actionId, isActionRelatedToCurrentProperty };\n }) satisfies PropertyAction[],\n [availableActions, propertyName]\n );\n\n return (\n <Flex display=\"inline-flex\" direction=\"column\" minWidth={0}>\n <Header label={label} headers={propertyActions} />\n <Box>\n {childrenForm.map(({ children: childrenForm, label, value, required }, i) => (\n <ActionRow\n childrenForm={childrenForm}\n key={value}\n label={label}\n isFormDisabled={isFormDisabled}\n name={value}\n required={required}\n propertyActions={propertyActions}\n pathToData={pathToData}\n propertyName={propertyName}\n isOdd={i % 2 === 0}\n />\n ))}\n </Box>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ActionRow\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ActionRowProps\n extends Pick<\n SubActionRowProps,\n 'childrenForm' | 'isFormDisabled' | 'propertyActions' | 'propertyName'\n > {\n label: string;\n name: string;\n required?: boolean;\n pathToData: string;\n isOdd?: boolean;\n}\n\nconst ActionRow = ({\n childrenForm = [],\n label,\n isFormDisabled = false,\n name,\n required = false,\n pathToData,\n propertyActions,\n propertyName,\n isOdd = false,\n}: ActionRowProps) => {\n const { formatMessage } = useIntl();\n const [rowToOpen, setRowToOpen] = React.useState<string | null>(null);\n const {\n modifiedData,\n onChangeCollectionTypeLeftActionRowCheckbox,\n onChangeParentCheckbox,\n onChangeSimpleCheckbox,\n } = usePermissionsDataManager();\n\n const isActive = rowToOpen === name;\n\n const recursiveChildren = useMemo(() => {\n if (!Array.isArray(childrenForm)) {\n return [];\n }\n\n return childrenForm;\n }, [childrenForm]);\n\n const isCollapsable = recursiveChildren.length > 0;\n\n const handleClick = React.useCallback(() => {\n if (isCollapsable) {\n setRowToOpen((prev) => {\n if (prev === name) {\n return null;\n }\n\n return name;\n });\n }\n }, [isCollapsable, name]);\n\n const handleChangeLeftRowCheckbox: RowLabelWithCheckboxProps['onChange'] = ({\n target: { value },\n }) => {\n onChangeCollectionTypeLeftActionRowCheckbox(pathToData, propertyName, name, value);\n };\n\n const { hasAllActionsSelected, hasSomeActionsSelected } = useMemo(() => {\n return getRowLabelCheckboxState(propertyActions, modifiedData, pathToData, propertyName, name);\n }, [propertyActions, modifiedData, pathToData, propertyName, name]);\n\n return (\n <>\n <Wrapper\n alignItems=\"center\"\n isCollapsable={isCollapsable}\n isActive={isActive}\n background={isOdd ? 'neutral100' : 'neutral0'}\n >\n <Flex>\n <RowLabelWithCheckbox\n onChange={handleChangeLeftRowCheckbox}\n onClick={handleClick}\n isCollapsable={isCollapsable}\n isFormDisabled={isFormDisabled}\n label={label}\n someChecked={hasSomeActionsSelected}\n value={hasAllActionsSelected}\n isActive={isActive}\n >\n {required && <RequiredSign />}\n <CarretIcon $isActive={isActive} />\n </RowLabelWithCheckbox>\n <Flex>\n {propertyActions.map(({ label, isActionRelatedToCurrentProperty, actionId }) => {\n if (!isActionRelatedToCurrentProperty) {\n return <HiddenAction key={label} />;\n }\n\n const checkboxName = [\n ...pathToData.split('..'),\n actionId,\n 'properties',\n propertyName,\n name,\n ];\n\n if (!isCollapsable) {\n const checkboxValue = get(modifiedData, checkboxName, false);\n\n return (\n <Flex\n key={actionId}\n width={cellWidth}\n position=\"relative\"\n justifyContent=\"center\"\n alignItems=\"center\"\n >\n <BaseCheckbox\n disabled={isFormDisabled}\n name={checkboxName.join('..')}\n aria-label={formatMessage(\n {\n id: `Settings.permissions.select-by-permission`,\n defaultMessage: 'Select {label} permission',\n },\n { label: `${name} ${label}` }\n )}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onValueChange={(value) => {\n onChangeSimpleCheckbox({\n target: {\n name: checkboxName.join('..'),\n value,\n },\n });\n }}\n value={checkboxValue}\n />\n </Flex>\n );\n }\n\n const data = get(modifiedData, checkboxName, {});\n\n const { hasAllActionsSelected, hasSomeActionsSelected } = getCheckboxState(data);\n\n return (\n <Flex\n key={label}\n width={cellWidth}\n position=\"relative\"\n justifyContent=\"center\"\n alignItems=\"center\"\n >\n <BaseCheckbox\n disabled={isFormDisabled}\n name={checkboxName.join('..')}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onValueChange={(value) => {\n onChangeParentCheckbox({\n target: {\n name: checkboxName.join('..'),\n value,\n },\n });\n }}\n aria-label={formatMessage(\n {\n id: `Settings.permissions.select-by-permission`,\n defaultMessage: 'Select {label} permission',\n },\n { label: `${name} ${label}` }\n )}\n value={hasAllActionsSelected}\n indeterminate={hasSomeActionsSelected}\n />\n </Flex>\n );\n })}\n </Flex>\n </Flex>\n </Wrapper>\n {isActive && (\n <SubActionRow\n childrenForm={recursiveChildren}\n isFormDisabled={isFormDisabled}\n parentName={name}\n pathToDataFromActionRow={pathToData}\n propertyName={propertyName}\n propertyActions={propertyActions}\n recursiveLevel={0}\n />\n )}\n </>\n );\n};\n\n/**\n *\n * Returns the state of the left checkbox of a ActionRow main checkbox\n */\nconst getRowLabelCheckboxState = (\n propertyActions: PropertyAction[],\n modifiedData: PermissionsDataManagerContextValue['modifiedData'],\n pathToContentType: string,\n propertyToCheck: string,\n targetKey: string\n) => {\n const actionIds = propertyActions.reduce<string[]>((acc, current) => {\n if (current.isActionRelatedToCurrentProperty) {\n acc.push(current.actionId);\n }\n\n return acc;\n }, []);\n\n const data = actionIds.reduce<Record<string, boolean>>((acc, current) => {\n const mainData = get(\n modifiedData,\n [...pathToContentType.split('..'), current, 'properties', propertyToCheck, targetKey],\n false\n );\n\n acc[current] = mainData;\n\n return acc;\n }, {});\n\n return getCheckboxState(data);\n};\n\nconst Wrapper = styled(Flex)<{ isCollapsable?: boolean; isActive?: boolean }>`\n height: ${rowHeight};\n flex: 1;\n\n ${({ isCollapsable, theme }) =>\n isCollapsable &&\n `\n ${CarretIcon} {\n display: block;\n color: ${theme.colors.neutral100};\n }\n &:hover {\n ${activeStyle(theme)}\n }\n `}\n ${({ isActive, theme }) => isActive && activeStyle(theme)};\n`;\n\nconst CarretIcon = styled(CarretDown)<{ $isActive: boolean }>`\n display: none;\n width: ${10 / 16}rem;\n transform: rotate(${({ $isActive }) => ($isActive ? '180' : '0')}deg);\n margin-left: ${({ theme }) => theme.spaces[2]};\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * SubActionRow\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SubActionRowProps {\n childrenForm: SubjectProperty['children'];\n isFormDisabled?: boolean;\n parentName: string;\n pathToDataFromActionRow: string;\n propertyActions: PropertyAction[];\n propertyName: string;\n recursiveLevel: number;\n}\n\nconst SubActionRow = ({\n childrenForm = [],\n isFormDisabled,\n recursiveLevel,\n pathToDataFromActionRow,\n propertyActions,\n parentName,\n propertyName,\n}: SubActionRowProps) => {\n const { formatMessage } = useIntl();\n const { modifiedData, onChangeParentCheckbox, onChangeSimpleCheckbox } =\n usePermissionsDataManager();\n const [rowToOpen, setRowToOpen] = React.useState<string | null>(null);\n\n const handleClickToggleSubLevel = (name: string) => {\n setRowToOpen((prev) => {\n if (prev === name) {\n return null;\n }\n\n return name;\n });\n };\n\n const displayedRecursiveChildren = useMemo(() => {\n if (!rowToOpen) {\n return null;\n }\n\n return childrenForm.find(({ value }) => value === rowToOpen);\n }, [rowToOpen, childrenForm]);\n\n return (\n <Box paddingLeft={`2rem`}>\n <TopTimeline />\n {childrenForm.map(({ label, value, required, children: subChildrenForm }, index) => {\n const isVisible = index + 1 < childrenForm.length;\n const isArrayType = Array.isArray(subChildrenForm);\n const isActive = rowToOpen === value;\n\n return (\n <LeftBorderTimeline key={value} isVisible={isVisible}>\n <Flex height={rowHeight}>\n <StyledBox>\n <Svg\n width=\"20\"\n height=\"23\"\n viewBox=\"0 0 20 23\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n color=\"primary200\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M7.02477 14.7513C8.65865 17.0594 11.6046 18.6059 17.5596 18.8856C18.6836 18.9384 19.5976 19.8435 19.5976 20.9688V20.9688C19.5976 22.0941 18.6841 23.0125 17.5599 22.9643C10.9409 22.6805 6.454 20.9387 3.75496 17.1258C0.937988 13.1464 0.486328 7.39309 0.486328 0.593262H4.50974C4.50974 7.54693 5.06394 11.9813 7.02477 14.7513Z\"\n fill=\"#D9D8FF\"\n />\n </Svg>\n </StyledBox>\n <Flex style={{ flex: 1 }}>\n <RowStyle level={recursiveLevel} isActive={isActive} isCollapsable={isArrayType}>\n <CollapseLabel\n alignItems=\"center\"\n isCollapsable={isArrayType}\n {...(isArrayType && {\n onClick: () => handleClickToggleSubLevel(value),\n 'aria-expanded': isActive,\n onKeyDown: ({ key }) =>\n (key === 'Enter' || key === ' ') && handleClickToggleSubLevel(value),\n tabIndex: 0,\n role: 'button',\n })}\n title={label}\n >\n <Typography ellipsis>{capitalise(label)}</Typography>\n {required && <RequiredSign />}\n <CarretIcon $isActive={isActive} />\n </CollapseLabel>\n </RowStyle>\n <Flex style={{ flex: 1 }}>\n {propertyActions.map(\n ({ actionId, label: propertyLabel, isActionRelatedToCurrentProperty }) => {\n if (!isActionRelatedToCurrentProperty) {\n return <HiddenAction key={actionId} />;\n }\n /*\n * Usually we use a 'dot' in order to know the key path of an object for which we want to change the value.\n * Since an action and a subject are both separated by '.' or '::' we chose to use the '..' separators\n */\n const checkboxName = [\n ...pathToDataFromActionRow.split('..'),\n actionId,\n 'properties',\n propertyName,\n ...parentName.split('..'),\n value,\n ];\n\n const checkboxValue = get(modifiedData, checkboxName, false);\n\n if (!subChildrenForm) {\n return (\n <Flex\n key={propertyLabel}\n position=\"relative\"\n width={cellWidth}\n justifyContent=\"center\"\n alignItems=\"center\"\n >\n <BaseCheckbox\n disabled={isFormDisabled}\n name={checkboxName.join('..')}\n aria-label={formatMessage(\n {\n id: `Settings.permissions.select-by-permission`,\n defaultMessage: 'Select {label} permission',\n },\n { label: `${parentName} ${label} ${propertyLabel}` }\n )}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onValueChange={(value) => {\n onChangeSimpleCheckbox({\n target: {\n name: checkboxName.join('..'),\n value,\n },\n });\n }}\n value={checkboxValue}\n />\n </Flex>\n );\n }\n\n const { hasAllActionsSelected, hasSomeActionsSelected } =\n getCheckboxState(checkboxValue);\n\n return (\n <Flex\n key={propertyLabel}\n position=\"relative\"\n width={cellWidth}\n justifyContent=\"center\"\n alignItems=\"center\"\n >\n <BaseCheckbox\n key={propertyLabel}\n disabled={isFormDisabled}\n name={checkboxName.join('..')}\n aria-label={formatMessage(\n {\n id: `Settings.permissions.select-by-permission`,\n defaultMessage: 'Select {label} permission',\n },\n { label: `${parentName} ${label} ${propertyLabel}` }\n )}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onValueChange={(value) => {\n onChangeParentCheckbox({\n target: {\n name: checkboxName.join('..'),\n value,\n },\n });\n }}\n value={hasAllActionsSelected}\n indeterminate={hasSomeActionsSelected}\n />\n </Flex>\n );\n }\n )}\n </Flex>\n </Flex>\n </Flex>\n {displayedRecursiveChildren && isActive && (\n <Box paddingBottom={2}>\n <SubActionRow\n isFormDisabled={isFormDisabled}\n parentName={`${parentName}..${value}`}\n pathToDataFromActionRow={pathToDataFromActionRow}\n propertyActions={propertyActions}\n propertyName={propertyName}\n recursiveLevel={recursiveLevel + 1}\n childrenForm={displayedRecursiveChildren.children}\n />\n </Box>\n )}\n </LeftBorderTimeline>\n );\n })}\n </Box>\n );\n};\n\nconst LeftBorderTimeline = styled(Box)<{ isVisible?: boolean }>`\n border-left: ${({ isVisible, theme }) =>\n isVisible ? `4px solid ${theme.colors.primary200}` : '4px solid transparent'};\n`;\n\nconst RowStyle = styled(Flex)<{ level: number; isCollapsable?: boolean; isActive?: boolean }>`\n padding-left: ${({ theme }) => theme.spaces[4]};\n width: ${({ level }) => 145 - level * 36}px;\n\n ${({ isCollapsable, theme }) =>\n isCollapsable &&\n `\n ${CarretIcon} {\n display: block;\n color: ${theme.colors.neutral100};\n }\n &:hover {\n ${activeStyle(theme)}\n }\n `}\n ${({ isActive, theme }) => isActive && activeStyle(theme)};\n`;\n\nconst TopTimeline = styled.div`\n padding-top: ${({ theme }) => theme.spaces[2]};\n margin-top: ${({ theme }) => theme.spaces[2]};\n width: ${4 / 16}rem;\n background-color: ${({ theme }) => theme.colors.primary200};\n border-top-left-radius: 2px;\n border-top-right-radius: 2px;\n`;\n\nconst StyledBox = styled(Box)`\n transform: translate(-4px, -12px);\n\n &:before {\n content: '';\n width: ${4 / 16}rem;\n height: ${12 / 16}rem;\n background: ${({ theme }) => theme.colors.primary200};\n display: block;\n }\n`;\n\nconst Svg = styled.svg<{ color: keyof DefaultTheme['colors'] }>`\n position: relative;\n flex-shrink: 0;\n transform: translate(-0.5px, -1px);\n\n * {\n fill: ${({ theme, color }) => theme.colors[color]};\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * Header\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderProps {\n headers?: PropertyAction[];\n label: string;\n}\n\nconst Header = ({ headers = [], label }: HeaderProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex>\n <Flex width={firstRowWidth} height={rowHeight} shrink={0} alignItems=\"center\" paddingLeft={6}>\n <Typography variant=\"sigma\" textColor=\"neutral500\">\n {formatMessage(\n {\n id: 'Settings.roles.form.permission.property-label',\n defaultMessage: '{label} permissions',\n },\n { label }\n )}\n </Typography>\n </Flex>\n {headers.map((header) => {\n if (!header.isActionRelatedToCurrentProperty) {\n return <Flex width={cellWidth} shrink={0} key={header.label} />;\n }\n\n return (\n <Flex width={cellWidth} shrink={0} justifyContent=\"center\" key={header.label}>\n <Typography variant=\"sigma\" textColor=\"neutral500\">\n {formatMessage({\n id: `Settings.roles.form.permissions.${header.label.toLowerCase()}`,\n defaultMessage: header.label,\n })}\n </Typography>\n </Flex>\n );\n })}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * activeStyle (util)\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @internal\n */\nconst activeStyle = (theme: DefaultTheme) => css`\n ${Typography} {\n color: ${theme.colors.primary600};\n font-weight: ${theme.fontWeights.bold};\n }\n ${CarretIcon} {\n display: block;\n\n path {\n fill: ${theme.colors.primary600};\n }\n }\n`;\n\nexport { activeStyle as _internalActiveStyle };\nexport { CollapsePropertyMatrix };\n","import { Box, Button, ButtonProps } from '@strapi/design-system';\nimport { Cog } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\ninterface ConditionsButtonProps extends Pick<ButtonProps, 'className' | 'onClick' | 'variant'> {\n hasConditions?: boolean;\n}\n\nconst ConditionsButtonImpl = ({\n onClick,\n className,\n hasConditions = false,\n variant = 'tertiary',\n}: ConditionsButtonProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <ButtonContainer hasConditions={hasConditions} className={className}>\n <Button variant={variant} startIcon={<Cog />} onClick={onClick}>\n {formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n })}\n </Button>\n </ButtonContainer>\n );\n};\n\ninterface ButtonContainerProps extends Pick<ConditionsButtonProps, 'hasConditions'> {\n disabled?: boolean;\n}\n\nconst ButtonContainer = styled(Box)<ButtonContainerProps>`\n ${({ hasConditions, disabled, theme }) =>\n hasConditions &&\n `\n &:before {\n content: '';\n position: absolute;\n top: -3px;\n left: -10px;\n width: 6px;\n height: 6px;\n border-radius: ${20 / 16}rem;;\n background: ${disabled ? theme.colors.neutral100 : theme.colors.primary600};\n }\n `}\n`;\n\n/**\n * We reference the component directly in other styled-components\n * and as such we need it to have a className already assigned.\n * Therefore we wrapped the implementation in a styled function.\n */\nconst ConditionsButton = styled(ConditionsButtonImpl)``;\n\nexport { ConditionsButton };\nexport type { ConditionsButtonProps };\n","import * as React from 'react';\n\nimport {\n Box,\n Button,\n Flex,\n ModalBody,\n ModalFooter,\n ModalHeader,\n ModalLayout,\n ModalLayoutProps,\n MultiSelectNested,\n MultiSelectNestedProps,\n Typography,\n} from '@strapi/design-system';\nimport { Breadcrumbs, Crumb } from '@strapi/design-system/v2';\nimport produce from 'immer';\nimport get from 'lodash/get';\nimport groupBy from 'lodash/groupBy';\nimport upperFirst from 'lodash/upperFirst';\nimport { useIntl } from 'react-intl';\n\nimport { capitalise } from '../../../../../utils/strings';\nimport {\n PermissionsDataManagerContextValue,\n usePermissionsDataManager,\n} from '../hooks/usePermissionsDataManager';\n\nimport type { HiddenCheckboxAction, VisibleCheckboxAction } from './ContentTypeCollapses';\nimport type { ConditionForm } from '../utils/forms';\n\n/* -------------------------------------------------------------------------------------------------\n * ConditionsModal\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ConditionAction extends Pick<ActionRowProps, 'label'> {\n actionId: string;\n isDisplayed: boolean;\n hasSomeActionsSelected?: boolean;\n hasAllActionsSelected?: boolean;\n pathToConditionsObject: string[];\n}\n\ninterface ConditionsModalProps extends Pick<ActionRowProps, 'isFormDisabled'> {\n actions?: Array<ConditionAction | HiddenCheckboxAction | VisibleCheckboxAction>;\n headerBreadCrumbs?: string[];\n onClosed: ModalLayoutProps['onClose'];\n onToggle: () => void;\n}\n\nconst ConditionsModal = ({\n actions = [],\n headerBreadCrumbs = [],\n isFormDisabled,\n onClosed,\n onToggle,\n}: ConditionsModalProps) => {\n const { formatMessage } = useIntl();\n const { availableConditions, modifiedData, onChangeConditions } = usePermissionsDataManager();\n\n const arrayOfOptionsGroupedByCategory = React.useMemo(() => {\n return Object.entries(groupBy(availableConditions, 'category'));\n }, [availableConditions]);\n\n const actionsToDisplay = actions.filter<VisibleCheckboxAction | ConditionAction>(\n // @ts-expect-error – TODO: fix this type issue\n ({ isDisplayed, hasSomeActionsSelected, hasAllActionsSelected }) =>\n isDisplayed && Boolean(hasSomeActionsSelected || hasAllActionsSelected)\n );\n\n const [state, setState] = React.useState(\n createDefaultConditionsForm(actionsToDisplay, modifiedData, arrayOfOptionsGroupedByCategory)\n );\n\n const handleChange = (name: string, values: ConditionForm) => {\n setState(\n produce((draft) => {\n if (!draft[name]) {\n draft[name] = {};\n }\n\n if (!draft[name].default) {\n draft[name].default = {};\n }\n\n draft[name].default = values;\n })\n );\n };\n\n const handleSubmit = () => {\n const conditionsWithoutCategory = Object.entries(state).reduce<Record<string, ConditionForm>>(\n (acc, current) => {\n const [key, value] = current;\n\n const merged = Object.values(value).reduce((acc1, current1) => {\n return { ...acc1, ...current1 };\n }, {});\n\n acc[key] = merged;\n\n return acc;\n },\n {}\n );\n\n onChangeConditions(conditionsWithoutCategory);\n onToggle();\n };\n\n return (\n <ModalLayout labelledBy=\"condition-modal-breadcrumbs\" onClose={onClosed}>\n <ModalHeader>\n <Breadcrumbs id=\"condition-modal-breadcrumbs\" label={headerBreadCrumbs.join(', ')}>\n {headerBreadCrumbs.map((label, index, arr) => (\n <Crumb isCurrent={index === arr.length - 1} key={label}>\n {upperFirst(\n formatMessage({\n id: label,\n defaultMessage: label,\n })\n )}\n </Crumb>\n ))}\n </Breadcrumbs>\n </ModalHeader>\n <ModalBody>\n {actionsToDisplay.length === 0 && (\n <Typography>\n {formatMessage({\n id: 'Settings.permissions.conditions.no-actions',\n defaultMessage:\n 'You first need to select actions (create, read, update, ...) before defining conditions on them.',\n })}\n </Typography>\n )}\n <ul>\n {actionsToDisplay.map(({ actionId, label, pathToConditionsObject }, index) => {\n const name = pathToConditionsObject.join('..');\n\n return (\n <ActionRow\n key={actionId}\n arrayOfOptionsGroupedByCategory={arrayOfOptionsGroupedByCategory}\n label={label}\n isFormDisabled={isFormDisabled}\n isGrey={index % 2 === 0}\n name={name}\n onChange={handleChange}\n value={get(state, name, {})}\n />\n );\n })}\n </ul>\n </ModalBody>\n <ModalFooter\n startActions={\n <Button variant=\"tertiary\" onClick={onToggle}>\n {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'Cancel' })}\n </Button>\n }\n endActions={\n <Button onClick={handleSubmit}>\n {formatMessage({\n id: 'Settings.permissions.conditions.apply',\n defaultMessage: 'Apply',\n })}\n </Button>\n }\n />\n </ModalLayout>\n );\n};\n\nconst createDefaultConditionsForm = (\n actionsToDisplay: Array<ConditionAction | VisibleCheckboxAction>,\n modifiedData: PermissionsDataManagerContextValue['modifiedData'],\n arrayOfOptionsGroupedByCategory: ActionRowProps['arrayOfOptionsGroupedByCategory']\n) => {\n return actionsToDisplay.reduce<Record<string, Record<string, ConditionForm>>>((acc, current) => {\n const valueFromModifiedData: ConditionForm = get(\n modifiedData,\n [...current.pathToConditionsObject, 'conditions'],\n {}\n );\n\n const categoryDefaultForm = arrayOfOptionsGroupedByCategory.reduce<\n Record<string, ConditionForm>\n >((acc, current) => {\n const [categoryName, relatedConditions] = current;\n\n const conditionsForm = relatedConditions.reduce<ConditionForm>((acc, current) => {\n acc[current.id] = get(valueFromModifiedData, current.id, false);\n\n return acc;\n }, {});\n\n acc[categoryName] = conditionsForm;\n\n return acc;\n }, {});\n\n acc[current.pathToConditionsObject.join('..')] = categoryDefaultForm;\n\n return acc;\n }, {});\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ActionRow\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ActionRowProps {\n arrayOfOptionsGroupedByCategory: Array<\n [string, PermissionsDataManagerContextValue['availableConditions']]\n >;\n isFormDisabled?: boolean;\n isGrey?: boolean;\n label: string;\n name: string;\n onChange?: (name: string, values: Record<string, boolean>) => void;\n value: Record<string, ConditionForm>;\n}\n\nconst ActionRow = ({\n arrayOfOptionsGroupedByCategory,\n isFormDisabled = false,\n isGrey = false,\n label,\n name,\n onChange,\n value,\n}: ActionRowProps) => {\n const { formatMessage } = useIntl();\n\n const handleChange: MultiSelectNestedProps['onChange'] = (val) => {\n if (onChange) {\n onChange(name, getNewStateFromChangedValues(arrayOfOptionsGroupedByCategory, val));\n }\n };\n\n return (\n <Flex as=\"li\" background={isGrey ? 'neutral100' : 'neutral0'} paddingBottom={3} paddingTop={3}>\n <Flex paddingLeft={6} style={{ width: 180 }}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.permissions.conditions.can',\n defaultMessage: 'Can',\n })}\n &nbsp;\n </Typography>\n <Typography variant=\"sigma\" title={label} textColor=\"primary600\" ellipsis>\n {formatMessage({\n id: `Settings.roles.form.permissions.${label.toLowerCase()}`,\n defaultMessage: label,\n })}\n </Typography>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n &nbsp;\n {formatMessage({\n id: 'Settings.permissions.conditions.when',\n defaultMessage: 'When',\n })}\n </Typography>\n </Flex>\n <Box style={{ maxWidth: 430, width: '100%' }}>\n {/* @ts-expect-error – fix this label issue */}\n <MultiSelectNested\n id={name}\n customizeContent={(values = []) => `${values.length} currently selected`}\n onChange={handleChange}\n value={getSelectedValues(value)}\n options={getNestedOptions(arrayOfOptionsGroupedByCategory)}\n disabled={isFormDisabled}\n />\n </Box>\n </Flex>\n );\n};\n\nconst getSelectedValues = (rawValue: Record<string, ConditionForm>): string[] =>\n Object.values(rawValue)\n .map((x) =>\n Object.entries(x)\n .filter(([, value]) => value)\n .map(([key]) => key)\n )\n .flat();\n\nconst getNestedOptions = (options: ActionRowProps['arrayOfOptionsGroupedByCategory']) =>\n options.reduce<MultiSelectNestedProps['options']>((acc, [label, children]) => {\n acc.push({\n label: capitalise(label),\n children: children.map((child) => ({\n label: child.displayName,\n value: child.id,\n })),\n });\n\n return acc;\n }, []);\n\nconst getNewStateFromChangedValues = (\n options: ActionRowProps['arrayOfOptionsGroupedByCategory'],\n changedValues: string[]\n) =>\n options\n .map(([, values]) => values)\n .flat()\n .reduce<Record<string, boolean>>(\n (acc, curr) => ({ [curr.id]: changedValues.includes(curr.id), ...acc }),\n {}\n );\n\nexport { ConditionsModal };\nexport type { ConditionsModalProps };\n","import * as React from 'react';\n\nimport { BaseCheckbox, Box, Flex } from '@strapi/design-system';\nimport { ChevronDown, ChevronUp } from '@strapi/icons';\nimport get from 'lodash/get';\nimport isEmpty from 'lodash/isEmpty';\nimport omit from 'lodash/omit';\nimport { useIntl } from 'react-intl';\nimport styled, { DefaultTheme } from 'styled-components';\n\nimport { Action, Subject } from '../../../../../../../shared/contracts/permissions';\nimport {\n PermissionsDataManagerContextValue,\n usePermissionsDataManager,\n} from '../hooks/usePermissionsDataManager';\nimport { cellWidth, rowHeight } from '../utils/constants';\nimport { createArrayOfValues } from '../utils/createArrayOfValues';\nimport { ConditionForm } from '../utils/forms';\nimport { getCheckboxState } from '../utils/getCheckboxState';\n\nimport { CollapsePropertyMatrix, _internalActiveStyle } from './CollapsePropertyMatrix';\nimport { ConditionsButton } from './ConditionsButton';\nimport { ConditionsModal } from './ConditionsModal';\nimport { HiddenAction } from './HiddenAction';\nimport { RowLabelWithCheckbox, RowLabelWithCheckboxProps } from './RowLabelWithCheckbox';\n\n/* -------------------------------------------------------------------------------------------------\n * ContentTypeCollapses\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ContentTypeCollapsesProps extends Pick<CollapseProps, 'pathToData'> {\n actions?: Action[];\n isFormDisabled?: boolean;\n subjects?: Subject[];\n}\n\nconst ContentTypeCollapses = ({\n actions = [],\n isFormDisabled,\n pathToData,\n subjects = [],\n}: ContentTypeCollapsesProps) => {\n const [collapseToOpen, setCollapseToOpen] = React.useState<string | null>(null);\n\n const handleClickToggleCollapse = (collapseName: string) => () => {\n const nextCollapseToOpen = collapseToOpen === collapseName ? null : collapseName;\n\n setCollapseToOpen(nextCollapseToOpen);\n };\n\n return (\n <>\n {subjects.map(({ uid, label, properties }, index) => {\n const isActive = collapseToOpen === uid;\n const availableActions = actions.map((action) => ({\n ...action,\n isDisplayed: Array.isArray(action.subjects) && action.subjects.indexOf(uid) !== -1,\n }));\n return (\n <Flex\n key={uid}\n direction=\"column\"\n display=\"inline-flex\"\n minWidth=\"100%\"\n borderColor=\"primary600\"\n borderWidth={isActive ? 1 : 0}\n >\n <Collapse\n availableActions={availableActions}\n isActive={isActive}\n isGrey={index % 2 === 0}\n isFormDisabled={isFormDisabled}\n label={label}\n onClickToggle={handleClickToggleCollapse(uid)}\n pathToData={[pathToData, uid].join('..')}\n />\n {isActive &&\n properties.map(({ label: propertyLabel, value, children: childrenForm }) => {\n return (\n <CollapsePropertyMatrix\n availableActions={availableActions}\n childrenForm={childrenForm}\n isFormDisabled={isFormDisabled}\n label={propertyLabel}\n pathToData={[pathToData, uid].join('..')}\n propertyName={value}\n key={value}\n />\n );\n })}\n </Flex>\n );\n })}\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Collapse\n * -----------------------------------------------------------------------------------------------*/\n\ninterface CollapseProps\n extends Pick<RowLabelWithCheckboxProps, 'isActive' | 'isFormDisabled' | 'label'> {\n availableActions?: Array<Action & { isDisplayed: boolean }>;\n isGrey?: boolean;\n onClickToggle: RowLabelWithCheckboxProps['onClick'];\n pathToData: string;\n}\n\nconst Collapse = ({\n availableActions = [],\n isActive = false,\n isGrey = false,\n isFormDisabled = false,\n label,\n onClickToggle,\n pathToData,\n}: CollapseProps) => {\n const [isModalOpen, setModalOpen] = React.useState(false);\n const { formatMessage } = useIntl();\n const { modifiedData, onChangeParentCheckbox, onChangeSimpleCheckbox } =\n usePermissionsDataManager();\n\n const handleToggleModalIsOpen = () => {\n setModalOpen((s) => !s);\n };\n\n const handleModalClose = () => {\n setModalOpen(false);\n };\n\n // This corresponds to the data related to the CT left checkbox\n // modifiedData: { collectionTypes: { [ctuid]: {create: {properties: { fields: {f1: true} }, update: {}, ... } } } }\n const mainData = get(modifiedData, pathToData.split('..'), {});\n // The utils we are using: getCheckboxState, retrieves all the boolean leafs of an object in order\n // to return the state of checkbox. Since the conditions are not related to the property we need to remove the key from the object.\n const dataWithoutCondition = React.useMemo(() => {\n return Object.keys(mainData).reduce<Record<string, ConditionForm>>((acc, current) => {\n acc[current] = omit(mainData[current], 'conditions');\n\n return acc;\n }, {});\n }, [mainData]);\n\n const { hasAllActionsSelected, hasSomeActionsSelected } = getCheckboxState(dataWithoutCondition);\n\n // Here we create an array of <checkbox>, since the state of each one of them is used in\n // order to know if whether or not we need to display the associated action in\n // the <ConditionsModal />\n const checkboxesActions = React.useMemo(() => {\n return generateCheckboxesActions(availableActions, modifiedData, pathToData);\n }, [availableActions, modifiedData, pathToData]);\n\n // @ts-expect-error – hasConditions does not exist on all versions of checkboxesActions.\n const doesConditionButtonHasConditions = checkboxesActions.some((action) => action.hasConditions);\n\n return (\n <BoxWrapper isActive={isActive}>\n <Wrapper\n height={rowHeight}\n flex={1}\n alignItems=\"center\"\n background={isGrey ? 'neutral100' : 'neutral0'}\n >\n <RowLabelWithCheckbox\n isCollapsable\n isFormDisabled={isFormDisabled}\n label={label}\n checkboxName={pathToData}\n onChange={onChangeParentCheckbox}\n onClick={onClickToggle}\n someChecked={hasSomeActionsSelected}\n value={hasAllActionsSelected}\n isActive={isActive}\n >\n <Chevron paddingLeft={2}>{isActive ? <ChevronUp /> : <ChevronDown />}</Chevron>\n </RowLabelWithCheckbox>\n\n <Flex style={{ flex: 1 }}>\n {checkboxesActions.map(\n ({ actionId, hasSomeActionsSelected, isDisplayed, ...restAction }) => {\n if (!isDisplayed) {\n return <HiddenAction key={actionId} />;\n }\n\n const {\n hasConditions,\n hasAllActionsSelected,\n isParentCheckbox,\n checkboxName,\n label: permissionLabel,\n } = restAction as VisibleCheckboxAction;\n\n if (isParentCheckbox) {\n return (\n <Cell key={actionId} justifyContent=\"center\" alignItems=\"center\">\n {hasConditions && (\n <Box\n as=\"span\"\n position=\"absolute\"\n top=\"-6px\"\n left=\"37px\"\n width=\"6px\"\n height=\"6px\"\n borderRadius=\"20px\"\n background=\"primary600\"\n />\n )}\n <BaseCheckbox\n disabled={isFormDisabled}\n name={checkboxName}\n aria-label={formatMessage(\n {\n id: `Settings.permissions.select-by-permission`,\n defaultMessage: 'Select {label} permission',\n },\n { label: `${permissionLabel} ${label}` }\n )}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onValueChange={(value) => {\n onChangeParentCheckbox({\n target: {\n name: checkboxName,\n value,\n },\n });\n }}\n indeterminate={hasSomeActionsSelected}\n value={hasAllActionsSelected}\n />\n </Cell>\n );\n }\n\n return (\n <Cell key={actionId} justifyContent=\"center\" alignItems=\"center\">\n {hasConditions && (\n <Box\n as=\"span\"\n position=\"absolute\"\n top=\"-6px\"\n left=\"37px\"\n width=\"6px\"\n height=\"6px\"\n borderRadius=\"20px\"\n background=\"primary600\"\n />\n )}\n <BaseCheckbox\n disabled={isFormDisabled}\n indeterminate={hasConditions}\n name={checkboxName}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onValueChange={(value) => {\n onChangeSimpleCheckbox({\n target: {\n name: checkboxName,\n value,\n },\n });\n }}\n value={hasAllActionsSelected}\n />\n </Cell>\n );\n }\n )}\n </Flex>\n {isModalOpen && (\n <ConditionsModal\n headerBreadCrumbs={[label, 'Settings.permissions.conditions.conditions']}\n actions={checkboxesActions}\n isFormDisabled={isFormDisabled}\n onClosed={handleModalClose}\n onToggle={handleToggleModalIsOpen}\n />\n )}\n </Wrapper>\n <Box transform=\"translateY(10px)\" right=\"9px\" position=\"absolute\">\n <ConditionsButton\n onClick={handleToggleModalIsOpen}\n hasConditions={doesConditionButtonHasConditions}\n />\n </Box>\n </BoxWrapper>\n );\n};\n\ninterface VisibleCheckboxAction {\n actionId: string;\n hasAllActionsSelected: boolean;\n hasSomeActionsSelected: boolean;\n isDisplayed: true;\n isParentCheckbox: boolean;\n checkboxName: string;\n label: string;\n hasConditions: boolean;\n pathToConditionsObject: string[];\n}\n\ninterface HiddenCheckboxAction {\n actionId: string;\n isDisplayed: false;\n hasAllActionsSelected?: never;\n hasSomeActionsSelected: boolean;\n}\n\nconst generateCheckboxesActions = (\n availableActions: Array<Action & { isDisplayed: boolean }>,\n modifiedData: PermissionsDataManagerContextValue['modifiedData'],\n pathToData: string\n): Array<VisibleCheckboxAction | HiddenCheckboxAction> => {\n return availableActions.map(({ actionId, isDisplayed, applyToProperties, label }) => {\n if (!isDisplayed) {\n return { actionId, hasSomeActionsSelected: false, isDisplayed };\n }\n\n const baseCheckboxNameArray = [...pathToData.split('..'), actionId];\n const checkboxNameArray = isEmpty(applyToProperties)\n ? [...baseCheckboxNameArray, 'properties', 'enabled']\n : baseCheckboxNameArray;\n const conditionsValue = get(modifiedData, [...baseCheckboxNameArray, 'conditions'], null);\n\n const baseCheckboxAction = {\n actionId,\n checkboxName: checkboxNameArray.join('..'),\n hasConditions: createArrayOfValues(conditionsValue).some((val) => val),\n isDisplayed,\n label,\n pathToConditionsObject: baseCheckboxNameArray,\n };\n\n if (isEmpty(applyToProperties)) {\n const value = get(modifiedData, checkboxNameArray, false);\n\n // Since applyToProperties is empty it is not a parent checkbox, therefore hasAllActionsSelected is\n // equal to hasSomeActionsSelected\n return {\n ...baseCheckboxAction,\n hasAllActionsSelected: value,\n hasSomeActionsSelected: value,\n isParentCheckbox: false,\n };\n }\n\n const mainData = get(modifiedData, checkboxNameArray, null);\n\n const { hasAllActionsSelected, hasSomeActionsSelected } = getCheckboxState(mainData);\n\n return {\n ...baseCheckboxAction,\n hasAllActionsSelected,\n hasSomeActionsSelected,\n isParentCheckbox: true,\n };\n });\n};\n\nconst activeRowStyle = (theme: DefaultTheme, isActive?: boolean): string => `\n ${Wrapper} {\n background-color: ${theme.colors.primary100};\n color: ${theme.colors.primary600};\n border-radius: ${isActive ? '2px 2px 0 0' : '2px'};\n }\n ${Chevron} {\n display: flex;\n }\n ${ConditionsButton} {\n display: block;\n }\n &:hover {\n ${_internalActiveStyle(theme)}\n }\n\n &:focus-within {\n ${() => activeRowStyle(theme, isActive)}\n }\n`;\n\nconst Wrapper = styled(Flex)`\n border: 1px solid transparent;\n`;\n\nconst BoxWrapper = styled.div<{ isActive: boolean }>`\n display: inline-flex;\n min-width: 100%;\n\n ${ConditionsButton} {\n display: none;\n }\n ${({ isActive, theme }) => isActive && activeRowStyle(theme, isActive)}\n &:hover {\n ${({ theme, isActive }) => activeRowStyle(theme, isActive)}\n }\n`;\n\nconst Cell = styled(Flex)`\n width: ${cellWidth};\n position: relative;\n`;\n\nconst Chevron = styled(Box)`\n display: none;\n svg {\n width: 11px;\n }\n * {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n`;\n\nexport { ContentTypeCollapses };\nexport type { ContentTypeCollapsesProps, HiddenCheckboxAction, VisibleCheckboxAction };\n","import * as React from 'react';\n\nimport { BaseCheckbox, Box, Flex, Typography } from '@strapi/design-system';\nimport get from 'lodash/get';\nimport { useIntl } from 'react-intl';\n\nimport { Action } from '../../../../../../../shared/contracts/permissions';\nimport {\n PermissionsDataManagerContextValue,\n usePermissionsDataManager,\n} from '../hooks/usePermissionsDataManager';\nimport { cellWidth, firstRowWidth } from '../utils/constants';\nimport { RecursiveRecordOfBooleans, getCheckboxState } from '../utils/getCheckboxState';\nimport { removeConditionKeyFromData } from '../utils/removeConditionKeyFromData';\n\ninterface GlobalActionsProps {\n actions: Action[];\n isFormDisabled?: boolean;\n kind: Extract<keyof PermissionsDataManagerContextValue['modifiedData'], `${string}Types`>;\n}\n\nconst GlobalActions = ({ actions = [], isFormDisabled, kind }: GlobalActionsProps) => {\n const { formatMessage } = useIntl();\n const { modifiedData, onChangeCollectionTypeGlobalActionCheckbox } = usePermissionsDataManager();\n\n const displayedActions = actions.filter(({ subjects }) => subjects && subjects.length);\n\n const checkboxesState = React.useMemo(() => {\n const actionsIds = displayedActions.map(({ actionId }) => actionId);\n\n const data = modifiedData[kind];\n\n const relatedActionsData = actionsIds.reduce<Record<string, RecursiveRecordOfBooleans>>(\n (acc, actionId) => {\n Object.keys(data).forEach((ctUid) => {\n const actionIdData = get(data, [ctUid, actionId]);\n\n const actionIdState = { [ctUid]: removeConditionKeyFromData(actionIdData)! };\n\n if (!acc[actionId]) {\n acc[actionId] = actionIdState;\n } else {\n acc[actionId] = { ...acc[actionId], ...actionIdState };\n }\n });\n\n return acc;\n },\n {}\n );\n\n const checkboxesState = Object.keys(relatedActionsData).reduce<\n Record<\n string,\n {\n hasAllActionsSelected: boolean;\n hasSomeActionsSelected: boolean;\n }\n >\n >((acc, current) => {\n acc[current] = getCheckboxState(relatedActionsData[current]);\n\n return acc;\n }, {});\n\n return checkboxesState;\n }, [modifiedData, displayedActions, kind]);\n\n return (\n <Box paddingBottom={4} paddingTop={6} style={{ paddingLeft: firstRowWidth }}>\n <Flex gap={0}>\n {displayedActions.map(({ label, actionId }) => {\n return (\n <Flex\n shrink={0}\n width={cellWidth}\n direction=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n key={actionId}\n gap={3}\n >\n <Typography variant=\"sigma\" textColor=\"neutral500\">\n {formatMessage({\n id: `Settings.roles.form.permissions.${label.toLowerCase()}`,\n defaultMessage: label,\n })}\n </Typography>\n <BaseCheckbox\n disabled={isFormDisabled}\n onValueChange={(value) => {\n onChangeCollectionTypeGlobalActionCheckbox(kind, actionId, value);\n }}\n name={actionId}\n aria-label={formatMessage(\n {\n id: `Settings.permissions.select-all-by-permission`,\n defaultMessage: 'Select all {label} permissions',\n },\n {\n label: formatMessage({\n id: `Settings.roles.form.permissions.${label.toLowerCase()}`,\n defaultMessage: label,\n }),\n }\n )}\n value={get(checkboxesState, [actionId, 'hasAllActionsSelected'], false)}\n indeterminate={get(checkboxesState, [actionId, 'hasSomeActionsSelected'], false)}\n />\n </Flex>\n );\n })}\n </Flex>\n </Box>\n );\n};\n\nexport { GlobalActions };\nexport type { GlobalActionsProps };\n","import { Box } from '@strapi/design-system';\nimport styled from 'styled-components';\n\nimport { ContentPermission } from '../../../../../../../shared/contracts/permissions';\n\nimport { ContentTypeCollapses } from './ContentTypeCollapses';\nimport { GlobalActions, GlobalActionsProps } from './GlobalActions';\n\ninterface ContentTypesProps extends Pick<GlobalActionsProps, 'kind'> {\n isFormDisabled?: boolean;\n layout: ContentPermission;\n}\n\nconst ContentTypes = ({\n isFormDisabled,\n kind,\n layout: { actions, subjects },\n}: ContentTypesProps) => {\n const sortedSubjects = [...subjects].sort((a, b) => a.label.localeCompare(b.label));\n\n return (\n <StyledBox background=\"neutral0\">\n <GlobalActions actions={actions} kind={kind} isFormDisabled={isFormDisabled} />\n <ContentTypeCollapses\n actions={actions}\n isFormDisabled={isFormDisabled}\n pathToData={kind}\n subjects={sortedSubjects}\n />\n </StyledBox>\n );\n};\n\nconst StyledBox = styled(Box)`\n overflow-x: auto;\n`;\n\nexport { ContentTypes };\n","import * as React from 'react';\n\nimport {\n Accordion,\n AccordionContent,\n AccordionToggle,\n Box,\n Checkbox,\n Flex,\n Grid,\n GridItem,\n Typography,\n} from '@strapi/design-system';\nimport get from 'lodash/get';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport {\n SettingPermission,\n PluginPermission,\n} from '../../../../../../../shared/contracts/permissions';\nimport { capitalise } from '../../../../../utils/strings';\nimport {\n PermissionsDataManagerContextValue,\n usePermissionsDataManager,\n} from '../hooks/usePermissionsDataManager';\nimport { createArrayOfValues } from '../utils/createArrayOfValues';\nimport { ChildrenForm, ConditionForm } from '../utils/forms';\nimport { RecursiveRecordOfBooleans, getCheckboxState } from '../utils/getCheckboxState';\nimport { removeConditionKeyFromData } from '../utils/removeConditionKeyFromData';\n\nimport { ConditionsButton } from './ConditionsButton';\nimport { ConditionsModal } from './ConditionsModal';\n\nimport type { GenericLayout } from '../utils/layouts';\n\n/* -------------------------------------------------------------------------------------------------\n * PluginsAndSettingsPermissions\n * -----------------------------------------------------------------------------------------------*/\n\ntype Layout = GenericLayout<SettingPermission | PluginPermission>[];\n\ninterface PluginsAndSettingsPermissionsProps extends Pick<RowProps, 'kind' | 'isFormDisabled'> {\n layout: Layout;\n}\n\nconst PluginsAndSettingsPermissions = ({\n layout,\n ...restProps\n}: PluginsAndSettingsPermissionsProps) => {\n const [openedCategory, setOpenedCategory] = React.useState<string | null>(null);\n\n const handleOpenCategory = (categoryName: string) => {\n setOpenedCategory(categoryName === openedCategory ? null : categoryName);\n };\n\n return (\n <Box padding={6} background=\"neutral0\">\n {layout.map(({ category, categoryId, childrenForm }, index) => {\n return (\n <Row\n key={category}\n childrenForm={childrenForm}\n isOpen={openedCategory === category}\n isWhite={index % 2 === 1}\n name={category}\n onOpenCategory={handleOpenCategory}\n pathToData={[restProps.kind, categoryId]}\n {...restProps}\n />\n );\n })}\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Row\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RowProps extends Pick<Layout[number], 'childrenForm'> {\n kind: Exclude<keyof PermissionsDataManagerContextValue['modifiedData'], `${string}Types`>;\n name: string;\n isFormDisabled?: boolean;\n isOpen?: boolean;\n isWhite?: boolean;\n onOpenCategory: (categoryName: string) => void;\n pathToData: string[];\n}\n\nconst Row = ({\n childrenForm,\n kind,\n name,\n isOpen = false,\n isFormDisabled = false,\n isWhite,\n onOpenCategory,\n pathToData,\n}: RowProps) => {\n const { formatMessage } = useIntl();\n const handleClick = () => {\n onOpenCategory(name);\n };\n\n const categoryName = name.split('::').pop() ?? '';\n\n return (\n <Accordion\n expanded={isOpen}\n onToggle={handleClick}\n id={`accordion-${name}`}\n variant={isWhite ? 'primary' : 'secondary'}\n >\n <AccordionToggle\n title={capitalise(categoryName)}\n description={`${formatMessage(\n { id: 'Settings.permissions.category', defaultMessage: categoryName },\n { category: categoryName }\n )} ${kind === 'plugins' ? 'plugin' : kind}`}\n />\n\n <AccordionContent>\n <Box padding={6}>\n {childrenForm.map(({ actions, subCategoryName, subCategoryId }) => (\n <SubCategory\n key={subCategoryName}\n actions={actions}\n categoryName={categoryName}\n isFormDisabled={isFormDisabled}\n subCategoryName={subCategoryName}\n pathToData={[...pathToData, subCategoryId]}\n />\n ))}\n </Box>\n </AccordionContent>\n </Accordion>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * SubCategory\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SubCategoryProps {\n actions?: Array<SettingPermission | PluginPermission>;\n categoryName: string;\n isFormDisabled?: boolean;\n subCategoryName: string;\n pathToData: string[];\n}\n\nconst SubCategory = ({\n actions = [],\n categoryName,\n isFormDisabled,\n subCategoryName,\n pathToData,\n}: SubCategoryProps) => {\n const [isModalOpen, setModalOpen] = React.useState(false);\n const { modifiedData, onChangeParentCheckbox, onChangeSimpleCheckbox } =\n usePermissionsDataManager();\n const { formatMessage } = useIntl();\n\n const mainData = get(modifiedData, pathToData, {});\n\n const dataWithoutCondition = React.useMemo(() => {\n return Object.keys(mainData).reduce<RecursiveRecordOfBooleans>((acc, current) => {\n acc[current] = removeConditionKeyFromData(mainData[current])!;\n\n return acc;\n }, {});\n }, [mainData]);\n\n const { hasAllActionsSelected, hasSomeActionsSelected } = getCheckboxState(dataWithoutCondition);\n\n const handleToggleModalIsOpen = () => {\n setModalOpen((s) => !s);\n };\n\n const handleModalClose = () => {\n setModalOpen(false);\n };\n // We need to format the actions so it matches the shape of the ConditionsModal actions props\n const formattedActions = React.useMemo(() => {\n return actions.map((action) => {\n const checkboxName = [...pathToData, action.action, 'properties', 'enabled'];\n const checkboxValue = get(modifiedData, checkboxName, false);\n const conditionValue = get(modifiedData, [...pathToData, action.action, 'conditions'], {});\n const hasConditions = createArrayOfValues(conditionValue).some((val) => val);\n\n return {\n ...action,\n isDisplayed: checkboxValue,\n checkboxName: checkboxName.join('..'),\n hasSomeActionsSelected: checkboxValue,\n value: checkboxValue,\n hasConditions,\n label: action.displayName,\n actionId: action.action,\n pathToConditionsObject: [...pathToData, action.action],\n };\n });\n }, [actions, modifiedData, pathToData]);\n\n const datum: ChildrenForm = get(modifiedData, [...pathToData], {});\n\n const doesButtonHasCondition = createArrayOfValues(\n Object.entries(datum).reduce<Record<string, ConditionForm>>((acc, current) => {\n const [catName, { conditions }] = current;\n\n acc[catName] = conditions;\n\n return acc;\n }, {})\n ).some((val) => val);\n\n return (\n <>\n <Box>\n <Flex justifyContent=\"space-between\" alignItems=\"center\">\n <Box paddingRight={4}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {subCategoryName}\n </Typography>\n </Box>\n <Border flex={1} />\n <Box paddingLeft={4}>\n <Checkbox\n name={pathToData.join('..')}\n disabled={isFormDisabled}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onValueChange={(value) => {\n onChangeParentCheckbox({\n target: {\n name: pathToData.join('..'),\n value,\n },\n });\n }}\n indeterminate={hasSomeActionsSelected}\n value={hasAllActionsSelected}\n >\n {formatMessage({ id: 'app.utils.select-all', defaultMessage: 'Select all' })}\n </Checkbox>\n </Box>\n </Flex>\n <Flex paddingTop={6} paddingBottom={6}>\n <Grid gap={2} style={{ flex: 1 }}>\n {formattedActions.map(({ checkboxName, value, action, displayName, hasConditions }) => {\n return (\n <GridItem col={3} key={action}>\n <CheckboxWrapper disabled={isFormDisabled} hasConditions={hasConditions}>\n <Checkbox\n name={checkboxName}\n disabled={isFormDisabled}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onValueChange={(value) => {\n onChangeSimpleCheckbox({\n target: {\n name: checkboxName,\n value,\n },\n });\n }}\n value={value}\n >\n {displayName}\n </Checkbox>\n </CheckboxWrapper>\n </GridItem>\n );\n })}\n </Grid>\n <ConditionsButton\n hasConditions={doesButtonHasCondition}\n onClick={handleToggleModalIsOpen}\n />\n </Flex>\n </Box>\n {isModalOpen && (\n <ConditionsModal\n headerBreadCrumbs={[categoryName, subCategoryName]}\n actions={formattedActions}\n isFormDisabled={isFormDisabled}\n onClosed={handleModalClose}\n onToggle={handleToggleModalIsOpen}\n />\n )}\n </>\n );\n};\n\nconst Border = styled(Box)`\n align-self: center;\n border-top: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\nconst CheckboxWrapper = styled.div<{ hasConditions?: boolean; disabled?: boolean }>`\n position: relative;\n word-break: keep-all;\n ${({ hasConditions, disabled, theme }) =>\n hasConditions &&\n `\n &:before {\n content: '';\n position: absolute;\n top: ${-4 / 16}rem;\n left: ${-8 / 16}rem;\n width: ${6 / 16}rem;\n height: ${6 / 16}rem;\n border-radius: ${20 / 16}rem;\n background: ${disabled ? theme.colors.neutral100 : theme.colors.primary600};\n }\n `}\n`;\n\nexport { PluginsAndSettingsPermissions };\n","import * as React from 'react';\n\nimport { Tab, TabGroup, TabPanel, TabPanels, Tabs } from '@strapi/design-system';\nimport { difference } from '@strapi/helper-plugin';\nimport produce from 'immer';\nimport cloneDeep from 'lodash/cloneDeep';\nimport get from 'lodash/get';\nimport has from 'lodash/has';\nimport isEmpty from 'lodash/isEmpty';\nimport set from 'lodash/set';\nimport { useIntl } from 'react-intl';\n\nimport * as PermissonContracts from '../../../../../../../shared/contracts/permissions';\nimport { Permission } from '../../../../../../../shared/contracts/shared';\nimport { isObject } from '../../../../../utils/objects';\nimport {\n PermissionsDataManagerContextValue,\n PermissionsDataManagerProvider,\n} from '../hooks/usePermissionsDataManager';\nimport { ConditionForm, Form, createDefaultCTForm, createDefaultForm } from '../utils/forms';\nimport { GenericLayout, formatLayout } from '../utils/layouts';\nimport { formatPermissionsForAPI } from '../utils/permissions';\nimport { updateConditionsToFalse } from '../utils/updateConditionsToFalse';\nimport { updateValues } from '../utils/updateValues';\n\nimport { ContentTypes } from './ContentTypes';\nimport { PluginsAndSettingsPermissions } from './PluginsAndSettings';\n\nconst TAB_LABELS = [\n {\n labelId: 'app.components.LeftMenuLinkContainer.collectionTypes',\n defaultMessage: 'Collection Types',\n id: 'collectionTypes',\n },\n {\n labelId: 'app.components.LeftMenuLinkContainer.singleTypes',\n id: 'singleTypes',\n defaultMessage: 'Single Types',\n },\n {\n labelId: 'app.components.LeftMenuLinkContainer.plugins',\n defaultMessage: 'Plugins',\n id: 'plugins',\n },\n {\n labelId: 'app.components.LeftMenuLinkContainer.settings',\n defaultMessage: 'Settings',\n id: 'settings',\n },\n] as const;\n\n/* -------------------------------------------------------------------------------------------------\n * Permissions\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface PermissionsAPI {\n getPermissions: () => {\n didUpdateConditions: boolean;\n permissionsToSend: Omit<Permission, 'id' | 'createdAt' | 'updatedAt' | 'actionParameters'>[];\n };\n resetForm: () => void;\n setFormAfterSubmit: () => void;\n}\n\ninterface PermissionsProps {\n isFormDisabled?: boolean;\n permissions?: Permission[];\n layout: PermissonContracts.GetAll.Response['data'];\n}\n\nconst Permissions = React.forwardRef<PermissionsAPI, PermissionsProps>(\n ({ layout, isFormDisabled, permissions = [] }, api) => {\n const [{ initialData, layouts, modifiedData }, dispatch] = React.useReducer(\n reducer,\n initialState,\n () => init(layout, permissions)\n );\n const { formatMessage } = useIntl();\n\n React.useImperativeHandle(api, () => {\n return {\n getPermissions() {\n const collectionTypesDiff = difference(\n initialData.collectionTypes,\n modifiedData.collectionTypes\n );\n const singleTypesDiff = difference(initialData.singleTypes, modifiedData.singleTypes);\n\n const contentTypesDiff = { ...collectionTypesDiff, ...singleTypesDiff };\n\n let didUpdateConditions;\n\n if (isEmpty(contentTypesDiff)) {\n didUpdateConditions = false;\n } else {\n didUpdateConditions = Object.values(contentTypesDiff).some((permission = {}) => {\n return Object.values(permission).some((permissionValue) =>\n has(permissionValue, 'conditions')\n );\n });\n }\n\n return { permissionsToSend: formatPermissionsForAPI(modifiedData), didUpdateConditions };\n },\n resetForm() {\n dispatch({ type: 'RESET_FORM' });\n },\n setFormAfterSubmit() {\n dispatch({ type: 'SET_FORM_AFTER_SUBMIT' });\n },\n } satisfies PermissionsAPI;\n });\n\n const handleChangeCollectionTypeLeftActionRowCheckbox = (\n pathToCollectionType: OnChangeCollectionTypeRowLeftCheckboxAction['pathToCollectionType'],\n propertyName: OnChangeCollectionTypeRowLeftCheckboxAction['propertyName'],\n rowName: OnChangeCollectionTypeRowLeftCheckboxAction['rowName'],\n value: OnChangeCollectionTypeRowLeftCheckboxAction['value']\n ) => {\n dispatch({\n type: 'ON_CHANGE_COLLECTION_TYPE_ROW_LEFT_CHECKBOX',\n pathToCollectionType,\n propertyName,\n rowName,\n value,\n });\n };\n\n const handleChangeCollectionTypeGlobalActionCheckbox = (\n collectionTypeKind: OnChangeCollectionTypeGlobalActionCheckboxAction['collectionTypeKind'],\n actionId: OnChangeCollectionTypeGlobalActionCheckboxAction['actionId'],\n value: OnChangeCollectionTypeGlobalActionCheckboxAction['value']\n ) => {\n dispatch({\n type: 'ON_CHANGE_COLLECTION_TYPE_GLOBAL_ACTION_CHECKBOX',\n collectionTypeKind,\n actionId,\n value,\n });\n };\n\n const handleChangeConditions = (conditions: OnChangeConditionsAction['conditions']) => {\n dispatch({ type: 'ON_CHANGE_CONDITIONS', conditions });\n };\n\n const handleChangeSimpleCheckbox: PermissionsDataManagerContextValue['onChangeSimpleCheckbox'] =\n React.useCallback(({ target: { name, value } }) => {\n dispatch({\n type: 'ON_CHANGE_SIMPLE_CHECKBOX',\n keys: name,\n value,\n });\n }, []);\n\n const handleChangeParentCheckbox: PermissionsDataManagerContextValue['onChangeParentCheckbox'] =\n React.useCallback(({ target: { name, value } }) => {\n dispatch({\n type: 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX',\n keys: name,\n value,\n });\n }, []);\n\n return (\n <PermissionsDataManagerProvider\n availableConditions={layout.conditions}\n modifiedData={modifiedData}\n onChangeConditions={handleChangeConditions}\n onChangeSimpleCheckbox={handleChangeSimpleCheckbox}\n onChangeParentCheckbox={handleChangeParentCheckbox}\n onChangeCollectionTypeLeftActionRowCheckbox={\n handleChangeCollectionTypeLeftActionRowCheckbox\n }\n onChangeCollectionTypeGlobalActionCheckbox={handleChangeCollectionTypeGlobalActionCheckbox}\n >\n <TabGroup\n id=\"tabs\"\n label={formatMessage({\n id: 'Settings.permissions.users.tabs.label',\n defaultMessage: 'Tabs Permissions',\n })}\n >\n <Tabs>\n {TAB_LABELS.map((tabLabel) => (\n <Tab key={tabLabel.id}>\n {formatMessage({ id: tabLabel.labelId, defaultMessage: tabLabel.defaultMessage })}\n </Tab>\n ))}\n </Tabs>\n <TabPanels style={{ position: 'relative' }}>\n <TabPanel>\n <ContentTypes\n layout={layouts.collectionTypes}\n kind=\"collectionTypes\"\n isFormDisabled={isFormDisabled}\n />\n </TabPanel>\n <TabPanel>\n <ContentTypes\n layout={layouts.singleTypes}\n kind=\"singleTypes\"\n isFormDisabled={isFormDisabled}\n />\n </TabPanel>\n <TabPanel>\n <PluginsAndSettingsPermissions\n layout={layouts.plugins}\n kind=\"plugins\"\n isFormDisabled={isFormDisabled}\n />\n </TabPanel>\n <TabPanel>\n <PluginsAndSettingsPermissions\n layout={layouts.settings}\n kind=\"settings\"\n isFormDisabled={isFormDisabled}\n />\n </TabPanel>\n </TabPanels>\n </TabGroup>\n </PermissionsDataManagerProvider>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * reducer\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PermissionForms {\n collectionTypes: Form;\n plugins: Record<string, Form>;\n settings: Record<string, Form>;\n singleTypes: Form;\n}\n\ninterface State {\n initialData: PermissionForms;\n modifiedData: PermissionForms;\n layouts: {\n collectionTypes: PermissonContracts.ContentPermission;\n singleTypes: PermissonContracts.ContentPermission;\n plugins: GenericLayout<PermissonContracts.PluginPermission>[];\n settings: GenericLayout<PermissonContracts.SettingPermission>[];\n };\n}\n\nconst initialState = {\n initialData: {},\n modifiedData: {},\n layouts: {},\n};\n\ninterface OnChangeCollectionTypeGlobalActionCheckboxAction {\n type: 'ON_CHANGE_COLLECTION_TYPE_GLOBAL_ACTION_CHECKBOX';\n collectionTypeKind: keyof PermissionForms;\n actionId: string;\n value: boolean;\n}\n\ninterface OnChangeCollectionTypeRowLeftCheckboxAction {\n type: 'ON_CHANGE_COLLECTION_TYPE_ROW_LEFT_CHECKBOX';\n pathToCollectionType: string;\n propertyName: string;\n rowName: string;\n value: boolean;\n}\n\ninterface OnChangeConditionsAction {\n type: 'ON_CHANGE_CONDITIONS';\n conditions: Record<string, ConditionForm>;\n}\n\ninterface OnChangeSimpleCheckboxAction {\n type: 'ON_CHANGE_SIMPLE_CHECKBOX';\n keys: string;\n value: boolean;\n}\n\ninterface OnChangeToggleParentCheckbox {\n type: 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX';\n keys: string;\n value: boolean;\n}\n\ninterface ResetFormAction {\n type: 'RESET_FORM';\n}\n\ninterface SetFormAfterSubmitAction {\n type: 'SET_FORM_AFTER_SUBMIT';\n}\n\ntype Action =\n | OnChangeCollectionTypeGlobalActionCheckboxAction\n | OnChangeCollectionTypeRowLeftCheckboxAction\n | OnChangeConditionsAction\n | OnChangeSimpleCheckboxAction\n | OnChangeToggleParentCheckbox\n | ResetFormAction\n | SetFormAfterSubmitAction;\n\n/* eslint-disable consistent-return */\nconst reducer = (state: State, action: Action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n // This action is called when a checkbox in the <GlobalActions />\n // changes\n case 'ON_CHANGE_COLLECTION_TYPE_GLOBAL_ACTION_CHECKBOX': {\n const { collectionTypeKind, actionId, value } = action;\n const pathToData = ['modifiedData', collectionTypeKind];\n\n Object.keys(get(state, pathToData)).forEach((collectionType) => {\n const collectionTypeActionData = get(\n state,\n [...pathToData, collectionType, actionId],\n undefined\n );\n\n if (collectionTypeActionData) {\n let updatedValues = updateValues(collectionTypeActionData, value);\n\n // We need to remove the applied conditions\n // @ts-expect-error – TODO: type better\n if (!value && updatedValues.conditions) {\n // @ts-expect-error – TODO: type better\n const updatedConditions = updateValues(updatedValues.conditions, false);\n\n updatedValues = { ...updatedValues, conditions: updatedConditions };\n }\n\n set(draftState, [...pathToData, collectionType, actionId], updatedValues);\n }\n });\n\n break;\n }\n case 'ON_CHANGE_COLLECTION_TYPE_ROW_LEFT_CHECKBOX': {\n const { pathToCollectionType, propertyName, rowName, value } = action;\n let nextModifiedDataState = cloneDeep(state.modifiedData);\n const pathToModifiedDataCollectionType = pathToCollectionType.split('..');\n\n const objToUpdate = get(nextModifiedDataState, pathToModifiedDataCollectionType, {});\n\n Object.keys(objToUpdate).forEach((actionId) => {\n // When a ct has multiple properties (ex: locales, field)\n // We need to make sure that we add any new property to the modifiedData\n // object.\n if (has(objToUpdate[actionId], `properties.${propertyName}`)) {\n const objValue = get(objToUpdate, [actionId, 'properties', propertyName, rowName]);\n const pathToDataToSet = [\n ...pathToModifiedDataCollectionType,\n actionId,\n 'properties',\n propertyName,\n rowName,\n ];\n\n if (!isObject(objValue)) {\n set(nextModifiedDataState, pathToDataToSet, value);\n } else {\n const updatedValue = updateValues(objValue, value);\n\n set(nextModifiedDataState, pathToDataToSet, updatedValue);\n }\n }\n });\n\n // When we uncheck a row, we need to check if we also need to disable the conditions\n if (!value) {\n // @ts-expect-error – TODO: type better\n nextModifiedDataState = updateConditionsToFalse(nextModifiedDataState);\n }\n\n set(draftState, 'modifiedData', nextModifiedDataState);\n\n break;\n }\n case 'ON_CHANGE_CONDITIONS': {\n Object.entries(action.conditions).forEach((array) => {\n const [stringPathToData, conditionsToUpdate] = array;\n\n set(\n draftState,\n ['modifiedData', ...stringPathToData.split('..'), 'conditions'],\n conditionsToUpdate\n );\n });\n\n break;\n }\n case 'ON_CHANGE_SIMPLE_CHECKBOX': {\n let nextModifiedDataState = cloneDeep(state.modifiedData);\n\n set(nextModifiedDataState, [...action.keys.split('..')], action.value);\n\n // When we uncheck a single checkbox we need to remove the conditions from the parent\n if (!action.value) {\n // @ts-expect-error – TODO: type better\n nextModifiedDataState = updateConditionsToFalse(nextModifiedDataState);\n }\n\n set(draftState, 'modifiedData', nextModifiedDataState);\n\n break;\n }\n /*\n * Here the idea is to retrieve a specific value of the modifiedObject\n * then update all the boolean values of the retrieved one\n * and update the drafState.\n *\n * For instance in order to enable create action for all the fields and locales\n * of the restaurant content type we need to :\n * 1. Retrieve the modifiedData.collectionTypes.restaurant.create object\n * 2. Toggle all the end boolean values to the desired one\n * 3. Update the draftState\n *\n * Since the case works well in order to update what we called \"parent\" checkbox. We can\n * reuse the action when we need to toggle change all the values that depends on this one.\n * A parent checkbox is a checkbox which value is not a boolean but depends on its children ones, therefore,\n * a parent checkbox does not have a represented value in the draftState, they are just helpers.\n *\n * Given the following data:\n *\n * const data = {\n * restaurant: {\n * create: {\n * fields: { name: true },\n * locales: { en: false }\n * }\n * }\n * }\n *\n * The value of the create checkbox for the restaurant will be ƒalse since not all its children have\n * truthy values and in order to set its value to true when need to have all the values of its children set to true.\n *\n * Similarly, we can reuse the logic for the components attributes\n *\n */\n case 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX': {\n const { keys, value } = action;\n const pathToValue = [...keys.split('..')];\n let nextModifiedDataState = cloneDeep(state.modifiedData);\n const oldValues = get(nextModifiedDataState, pathToValue, {});\n\n const updatedValues = updateValues(oldValues, value);\n set(nextModifiedDataState, pathToValue, updatedValues);\n\n // When we uncheck a parent checkbox we need to remove the associated conditions\n if (!value) {\n // @ts-expect-error – TODO: type better\n nextModifiedDataState = updateConditionsToFalse(nextModifiedDataState);\n }\n\n set(draftState, ['modifiedData'], nextModifiedDataState);\n\n break;\n }\n case 'RESET_FORM': {\n draftState.modifiedData = state.initialData;\n break;\n }\n case 'SET_FORM_AFTER_SUBMIT': {\n draftState.initialData = state.modifiedData;\n break;\n }\n default:\n return draftState;\n }\n });\n\n/* -------------------------------------------------------------------------------------------------\n * init (reducer)\n * -----------------------------------------------------------------------------------------------*/\n\nconst init = (\n layout: PermissionsProps['layout'],\n permissions: PermissionsProps['permissions']\n): State => {\n const {\n conditions,\n sections: { collectionTypes, singleTypes, plugins, settings },\n } = layout;\n\n const layouts = {\n collectionTypes,\n singleTypes,\n plugins: formatLayout(plugins, 'plugin'),\n settings: formatLayout(settings, 'category'),\n };\n\n const defaultForm = {\n collectionTypes: createDefaultCTForm(collectionTypes, conditions, permissions),\n singleTypes: createDefaultCTForm(singleTypes, conditions, permissions),\n plugins: createDefaultForm(layouts.plugins, conditions, permissions),\n settings: createDefaultForm(layouts.settings, conditions, permissions),\n };\n\n return {\n initialData: defaultForm,\n modifiedData: defaultForm,\n layouts,\n };\n};\n\nexport { Permissions };\nexport type {\n State,\n OnChangeCollectionTypeRowLeftCheckboxAction,\n OnChangeConditionsAction,\n OnChangeCollectionTypeGlobalActionCheckboxAction,\n};\n"],"names":["createContext","isObject","permissions","current","acc","createDefaultConditionsForm","isEmpty","merge","groupBy","has","omit","styled","Flex","jsx","Box","useIntl","jsxs","BaseCheckbox","value","Typography","useMemo","childrenForm","label","ActionRow","React","Fragment","Wrapper","get","hasAllActionsSelected","hasSomeActionsSelected","CarretDown","index","StyledBox","css","Button","Cog","produce","ModalLayout","ModalHeader","Breadcrumbs","Crumb","upperFirst","ModalBody","ModalFooter","MultiSelectNested","ChevronUp","ChevronDown","_internalActiveStyle","checkboxesState","Accordion","AccordionToggle","AccordionContent","Checkbox","Grid","GridItem","difference","TabGroup","Tabs","Tab","TabPanels","TabPanel","set","cloneDeep"],"mappings":"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"}