@strapi/admin 4.17.0 → 4.17.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 (169) hide show
  1. package/dist/_chunks/{AdminSeatInfo-a10d232f.js → AdminSeatInfo-390d8989.js} +3 -3
  2. package/dist/_chunks/{AdminSeatInfo-a10d232f.js.map → AdminSeatInfo-390d8989.js.map} +1 -1
  3. package/dist/_chunks/{AdminSeatInfo-6e7bbb97.mjs → AdminSeatInfo-bb59ad1f.mjs} +3 -3
  4. package/dist/_chunks/{AdminSeatInfo-6e7bbb97.mjs.map → AdminSeatInfo-bb59ad1f.mjs.map} +1 -1
  5. package/dist/_chunks/{AuthenticatedApp-47219c52.js → AuthenticatedApp-b186733c.js} +21 -21
  6. package/dist/_chunks/{AuthenticatedApp-47219c52.js.map → AuthenticatedApp-b186733c.js.map} +1 -1
  7. package/dist/_chunks/{AuthenticatedApp-7d1fdf0c.mjs → AuthenticatedApp-b723bf94.mjs} +21 -21
  8. package/dist/_chunks/{AuthenticatedApp-7d1fdf0c.mjs.map → AuthenticatedApp-b723bf94.mjs.map} +1 -1
  9. package/dist/_chunks/{CreatePage-d2a061b5.js → CreatePage-16d53bda.js} +4 -4
  10. package/dist/_chunks/{CreatePage-d2a061b5.js.map → CreatePage-16d53bda.js.map} +1 -1
  11. package/dist/_chunks/{CreatePage-32977ee7.mjs → CreatePage-34ad9bdd.mjs} +4 -4
  12. package/dist/_chunks/{CreatePage-32977ee7.mjs.map → CreatePage-34ad9bdd.mjs.map} +1 -1
  13. package/dist/_chunks/{CreatePage-eeb81776.js → CreatePage-92f708fa.js} +4 -4
  14. package/dist/_chunks/{CreatePage-eeb81776.js.map → CreatePage-92f708fa.js.map} +1 -1
  15. package/dist/_chunks/{CreatePage-17c8a6e4.mjs → CreatePage-e5d16f0e.mjs} +4 -4
  16. package/dist/_chunks/{CreatePage-17c8a6e4.mjs.map → CreatePage-e5d16f0e.mjs.map} +1 -1
  17. package/dist/_chunks/{CreatePage-4ba4bd0d.mjs → CreatePage-f321dfbc.mjs} +4 -4
  18. package/dist/_chunks/{CreatePage-4ba4bd0d.mjs.map → CreatePage-f321dfbc.mjs.map} +1 -1
  19. package/dist/_chunks/{CreatePage-3c0b9dd5.js → CreatePage-f63362cf.js} +4 -4
  20. package/dist/_chunks/{CreatePage-3c0b9dd5.js.map → CreatePage-f63362cf.js.map} +1 -1
  21. package/dist/_chunks/{CreateView-5a0b0eca.js → CreateView-0da060c0.js} +4 -4
  22. package/dist/_chunks/{CreateView-5a0b0eca.js.map → CreateView-0da060c0.js.map} +1 -1
  23. package/dist/_chunks/{CreateView-fc328787.js → CreateView-69c834ba.js} +4 -4
  24. package/dist/_chunks/{CreateView-fc328787.js.map → CreateView-69c834ba.js.map} +1 -1
  25. package/dist/_chunks/{CreateView-8b6412c9.mjs → CreateView-a5345794.mjs} +4 -4
  26. package/dist/_chunks/{CreateView-8b6412c9.mjs.map → CreateView-a5345794.mjs.map} +1 -1
  27. package/dist/_chunks/{CreateView-2bc998f1.mjs → CreateView-df9f9bf0.mjs} +4 -4
  28. package/dist/_chunks/{CreateView-2bc998f1.mjs.map → CreateView-df9f9bf0.mjs.map} +1 -1
  29. package/dist/_chunks/{EditPage-0b1a48f7.js → EditPage-39a7cd2d.js} +5 -5
  30. package/dist/_chunks/{EditPage-0b1a48f7.js.map → EditPage-39a7cd2d.js.map} +1 -1
  31. package/dist/_chunks/{EditPage-89052393.js → EditPage-48cdd744.js} +4 -4
  32. package/dist/_chunks/{EditPage-89052393.js.map → EditPage-48cdd744.js.map} +1 -1
  33. package/dist/_chunks/{EditPage-efc987d7.js → EditPage-493ac83a.js} +5 -5
  34. package/dist/_chunks/{EditPage-efc987d7.js.map → EditPage-493ac83a.js.map} +1 -1
  35. package/dist/_chunks/{EditPage-6d3fe437.mjs → EditPage-a5a18e61.mjs} +4 -4
  36. package/dist/_chunks/{EditPage-6d3fe437.mjs.map → EditPage-a5a18e61.mjs.map} +1 -1
  37. package/dist/_chunks/{EditPage-2b051ea8.mjs → EditPage-a6578110.mjs} +5 -5
  38. package/dist/_chunks/{EditPage-2b051ea8.mjs.map → EditPage-a6578110.mjs.map} +1 -1
  39. package/dist/_chunks/{EditPage-7b9355e4.mjs → EditPage-e710a231.mjs} +4 -4
  40. package/dist/_chunks/{EditPage-7b9355e4.mjs.map → EditPage-e710a231.mjs.map} +1 -1
  41. package/dist/_chunks/{EditPage-faee9ac1.mjs → EditPage-f5caa375.mjs} +5 -5
  42. package/dist/_chunks/{EditPage-faee9ac1.mjs.map → EditPage-f5caa375.mjs.map} +1 -1
  43. package/dist/_chunks/{EditPage-de127112.js → EditPage-f75f04b9.js} +4 -4
  44. package/dist/_chunks/{EditPage-de127112.js.map → EditPage-f75f04b9.js.map} +1 -1
  45. package/dist/_chunks/{EditView-e480d09f.js → EditView-0c216c35.js} +3 -3
  46. package/dist/_chunks/{EditView-e480d09f.js.map → EditView-0c216c35.js.map} +1 -1
  47. package/dist/_chunks/{EditView-0e4d7c80.mjs → EditView-d3ccb532.mjs} +3 -3
  48. package/dist/_chunks/{EditView-0e4d7c80.mjs.map → EditView-d3ccb532.mjs.map} +1 -1
  49. package/dist/_chunks/{EditViewPage-ef0292a9.js → EditViewPage-57b6e71a.js} +3 -3
  50. package/dist/_chunks/{EditViewPage-ef0292a9.js.map → EditViewPage-57b6e71a.js.map} +1 -1
  51. package/dist/_chunks/{EditViewPage-3e638ea4.mjs → EditViewPage-77e95780.mjs} +3 -3
  52. package/dist/_chunks/{EditViewPage-3e638ea4.mjs.map → EditViewPage-77e95780.mjs.map} +1 -1
  53. package/dist/_chunks/{EventsTable-c8ea750e.js → EventsTable-8e2b0bd9.js} +4 -4
  54. package/dist/_chunks/{EventsTable-c8ea750e.js.map → EventsTable-8e2b0bd9.js.map} +1 -1
  55. package/dist/_chunks/{EventsTable-21c9c326.mjs → EventsTable-d472e89d.mjs} +4 -4
  56. package/dist/_chunks/{EventsTable-21c9c326.mjs.map → EventsTable-d472e89d.mjs.map} +1 -1
  57. package/dist/_chunks/{HomePage-28c2fc09.mjs → HomePage-22d90f51.mjs} +4 -4
  58. package/dist/_chunks/{HomePage-28c2fc09.mjs.map → HomePage-22d90f51.mjs.map} +1 -1
  59. package/dist/_chunks/{HomePage-ef17de6c.js → HomePage-7bd6070c.js} +4 -4
  60. package/dist/_chunks/{HomePage-ef17de6c.js.map → HomePage-7bd6070c.js.map} +1 -1
  61. package/dist/_chunks/{HomePage-d9e5bcf6.js → HomePage-bb29ced3.js} +4 -4
  62. package/dist/_chunks/{HomePage-d9e5bcf6.js.map → HomePage-bb29ced3.js.map} +1 -1
  63. package/dist/_chunks/{HomePage-bfeba10a.mjs → HomePage-e94a37b9.mjs} +4 -4
  64. package/dist/_chunks/{HomePage-bfeba10a.mjs.map → HomePage-e94a37b9.mjs.map} +1 -1
  65. package/dist/_chunks/{InformationBoxEE-bd1d2894.mjs → InformationBoxEE-302228b9.mjs} +2 -2
  66. package/dist/_chunks/{InformationBoxEE-bd1d2894.mjs.map → InformationBoxEE-302228b9.mjs.map} +1 -1
  67. package/dist/_chunks/{InformationBoxEE-2d2b6c4a.js → InformationBoxEE-7d383cec.js} +2 -2
  68. package/dist/_chunks/{InformationBoxEE-2d2b6c4a.js.map → InformationBoxEE-7d383cec.js.map} +1 -1
  69. package/dist/_chunks/{InstalledPluginsPage-39a094a5.js → InstalledPluginsPage-73eabc0b.js} +3 -3
  70. package/dist/_chunks/{InstalledPluginsPage-39a094a5.js.map → InstalledPluginsPage-73eabc0b.js.map} +1 -1
  71. package/dist/_chunks/{InstalledPluginsPage-8e9b0b64.mjs → InstalledPluginsPage-ff15831e.mjs} +3 -3
  72. package/dist/_chunks/{InstalledPluginsPage-8e9b0b64.mjs.map → InstalledPluginsPage-ff15831e.mjs.map} +1 -1
  73. package/dist/_chunks/{Layout-caf718bb.mjs → Layout-1dd77bbb.mjs} +2 -2
  74. package/dist/_chunks/{Layout-caf718bb.mjs.map → Layout-1dd77bbb.mjs.map} +1 -1
  75. package/dist/_chunks/{Layout-cc5413b2.js → Layout-ef2fc31f.js} +2 -2
  76. package/dist/_chunks/{Layout-cc5413b2.js.map → Layout-ef2fc31f.js.map} +1 -1
  77. package/dist/_chunks/{ListPage-cc823a6a.js → ListPage-10bf0ce5.js} +3 -3
  78. package/dist/_chunks/{ListPage-cc823a6a.js.map → ListPage-10bf0ce5.js.map} +1 -1
  79. package/dist/_chunks/{ListPage-5ed3e9d2.mjs → ListPage-1de5fb9e.mjs} +5 -5
  80. package/dist/_chunks/{ListPage-5ed3e9d2.mjs.map → ListPage-1de5fb9e.mjs.map} +1 -1
  81. package/dist/_chunks/{ListPage-db17e758.js → ListPage-354a539f.js} +5 -5
  82. package/dist/_chunks/{ListPage-db17e758.js.map → ListPage-354a539f.js.map} +1 -1
  83. package/dist/_chunks/{ListPage-800398cd.mjs → ListPage-57f5028e.mjs} +6 -6
  84. package/dist/_chunks/{ListPage-800398cd.mjs.map → ListPage-57f5028e.mjs.map} +1 -1
  85. package/dist/_chunks/{ListPage-338d8ca5.js → ListPage-7304822d.js} +6 -6
  86. package/dist/_chunks/{ListPage-338d8ca5.js.map → ListPage-7304822d.js.map} +1 -1
  87. package/dist/_chunks/{ListPage-f43782c4.mjs → ListPage-887f0f02.mjs} +3 -3
  88. package/dist/_chunks/{ListPage-f43782c4.mjs.map → ListPage-887f0f02.mjs.map} +1 -1
  89. package/dist/_chunks/{ListPage-05df9b86.mjs → ListPage-96026788.mjs} +3 -3
  90. package/dist/_chunks/{ListPage-05df9b86.mjs.map → ListPage-96026788.mjs.map} +1 -1
  91. package/dist/_chunks/{ListPage-17fb477a.js → ListPage-ac287db9.js} +3 -3
  92. package/dist/_chunks/{ListPage-17fb477a.js.map → ListPage-ac287db9.js.map} +1 -1
  93. package/dist/_chunks/{ListPage-5e5ad2aa.js → ListPage-ba1aec01.js} +3 -3
  94. package/dist/_chunks/{ListPage-5e5ad2aa.js.map → ListPage-ba1aec01.js.map} +1 -1
  95. package/dist/_chunks/{ListPage-7d5baee5.mjs → ListPage-c878fda8.mjs} +4 -4
  96. package/dist/_chunks/{ListPage-7d5baee5.mjs.map → ListPage-c878fda8.mjs.map} +1 -1
  97. package/dist/_chunks/{ListPage-de4b7131.mjs → ListPage-f256fcb7.mjs} +3 -3
  98. package/dist/_chunks/{ListPage-de4b7131.mjs.map → ListPage-f256fcb7.mjs.map} +1 -1
  99. package/dist/_chunks/{ListPage-56d94335.js → ListPage-f582ff65.js} +4 -4
  100. package/dist/_chunks/{ListPage-56d94335.js.map → ListPage-f582ff65.js.map} +1 -1
  101. package/dist/_chunks/{ListView-b91a8da7.mjs → ListView-1b370206.mjs} +3 -3
  102. package/dist/_chunks/{ListView-b91a8da7.mjs.map → ListView-1b370206.mjs.map} +1 -1
  103. package/dist/_chunks/{ListView-80855396.js → ListView-1fb891a4.js} +3 -3
  104. package/dist/_chunks/{ListView-80855396.js.map → ListView-1fb891a4.js.map} +1 -1
  105. package/dist/_chunks/{ListView-a33ebe77.js → ListView-96fe1016.js} +3 -3
  106. package/dist/_chunks/{ListView-a33ebe77.js.map → ListView-96fe1016.js.map} +1 -1
  107. package/dist/_chunks/{ListView-521e309f.mjs → ListView-bf4ccdba.mjs} +3 -3
  108. package/dist/_chunks/{ListView-521e309f.mjs.map → ListView-bf4ccdba.mjs.map} +1 -1
  109. package/dist/_chunks/{Login-906ebde5.js → Login-09040dec.js} +2 -2
  110. package/dist/_chunks/{Login-906ebde5.js.map → Login-09040dec.js.map} +1 -1
  111. package/dist/_chunks/{Login-4eb1fb78.mjs → Login-6670c9b9.mjs} +2 -2
  112. package/dist/_chunks/{Login-4eb1fb78.mjs.map → Login-6670c9b9.mjs.map} +1 -1
  113. package/dist/_chunks/{MagicLinkEE-03128309.mjs → MagicLinkEE-6d9ed1b1.mjs} +3 -3
  114. package/dist/_chunks/{MagicLinkEE-03128309.mjs.map → MagicLinkEE-6d9ed1b1.mjs.map} +1 -1
  115. package/dist/_chunks/{MagicLinkEE-ab36ee0f.js → MagicLinkEE-79ab8b22.js} +3 -3
  116. package/dist/_chunks/{MagicLinkEE-ab36ee0f.js.map → MagicLinkEE-79ab8b22.js.map} +1 -1
  117. package/dist/_chunks/{MarketplacePage-62e70483.mjs → MarketplacePage-54a925f9.mjs} +3 -3
  118. package/dist/_chunks/{MarketplacePage-62e70483.mjs.map → MarketplacePage-54a925f9.mjs.map} +1 -1
  119. package/dist/_chunks/{MarketplacePage-fe1f2c6e.js → MarketplacePage-ec91b073.js} +3 -3
  120. package/dist/_chunks/{MarketplacePage-fe1f2c6e.js.map → MarketplacePage-ec91b073.js.map} +1 -1
  121. package/dist/_chunks/{ProfilePage-5359ee40.mjs → ProfilePage-091a4db8.mjs} +3 -3
  122. package/dist/_chunks/{ProfilePage-5359ee40.mjs.map → ProfilePage-091a4db8.mjs.map} +1 -1
  123. package/dist/_chunks/{ProfilePage-5bf5e2ed.js → ProfilePage-a28fc7c8.js} +3 -3
  124. package/dist/_chunks/{ProfilePage-5bf5e2ed.js.map → ProfilePage-a28fc7c8.js.map} +1 -1
  125. package/dist/_chunks/{ReviewWorkflowsColumn-65518684.mjs → ReviewWorkflowsColumn-5a3ca279.mjs} +2 -2
  126. package/dist/_chunks/{ReviewWorkflowsColumn-65518684.mjs.map → ReviewWorkflowsColumn-5a3ca279.mjs.map} +1 -1
  127. package/dist/_chunks/{ReviewWorkflowsColumn-b36965fe.js → ReviewWorkflowsColumn-b2d53622.js} +2 -2
  128. package/dist/_chunks/{ReviewWorkflowsColumn-b36965fe.js.map → ReviewWorkflowsColumn-b2d53622.js.map} +1 -1
  129. package/dist/_chunks/{SelectRoles-e83f2dee.js → SelectRoles-b55e6376.js} +2 -2
  130. package/dist/_chunks/{SelectRoles-e83f2dee.js.map → SelectRoles-b55e6376.js.map} +1 -1
  131. package/dist/_chunks/{SelectRoles-3d810b00.mjs → SelectRoles-f0565968.mjs} +2 -2
  132. package/dist/_chunks/{SelectRoles-3d810b00.mjs.map → SelectRoles-f0565968.mjs.map} +1 -1
  133. package/dist/_chunks/{SettingsPage-571f777c.mjs → SettingsPage-7567e138.mjs} +20 -20
  134. package/dist/_chunks/{SettingsPage-571f777c.mjs.map → SettingsPage-7567e138.mjs.map} +1 -1
  135. package/dist/_chunks/{SettingsPage-a558ffda.js → SettingsPage-b5d5dd0b.js} +20 -20
  136. package/dist/_chunks/{SettingsPage-a558ffda.js.map → SettingsPage-b5d5dd0b.js.map} +1 -1
  137. package/dist/_chunks/{SingleSignOnPage-19f2e16f.mjs → SingleSignOnPage-4d1d2448.mjs} +3 -3
  138. package/dist/_chunks/{SingleSignOnPage-19f2e16f.mjs.map → SingleSignOnPage-4d1d2448.mjs.map} +1 -1
  139. package/dist/_chunks/{SingleSignOnPage-b63f4c0f.js → SingleSignOnPage-51dfde4b.js} +3 -3
  140. package/dist/_chunks/{SingleSignOnPage-b63f4c0f.js.map → SingleSignOnPage-51dfde4b.js.map} +1 -1
  141. package/dist/_chunks/{constants-b3c9cbbf.mjs → constants-2ccf2787.mjs} +2 -2
  142. package/dist/_chunks/{constants-b3c9cbbf.mjs.map → constants-2ccf2787.mjs.map} +1 -1
  143. package/dist/_chunks/{constants-5345058d.js → constants-54043280.js} +2 -2
  144. package/dist/_chunks/{constants-5345058d.js.map → constants-54043280.js.map} +1 -1
  145. package/dist/_chunks/{constants-73ebce66.js → constants-74ce2d53.js} +2 -2
  146. package/dist/_chunks/{constants-73ebce66.js.map → constants-74ce2d53.js.map} +1 -1
  147. package/dist/_chunks/{constants-71ebbb75.mjs → constants-81c376c5.mjs} +2 -2
  148. package/dist/_chunks/{constants-71ebbb75.mjs.map → constants-81c376c5.mjs.map} +1 -1
  149. package/dist/_chunks/{constants-d80f19f3.js → constants-a5b1e9d4.js} +6 -6
  150. package/dist/_chunks/{constants-d80f19f3.js.map → constants-a5b1e9d4.js.map} +1 -1
  151. package/dist/_chunks/{constants-7e57b453.mjs → constants-b156a1b6.mjs} +6 -6
  152. package/dist/_chunks/{constants-7e57b453.mjs.map → constants-b156a1b6.mjs.map} +1 -1
  153. package/dist/_chunks/{index-3f8cf4d5.js → index-3956d072.js} +36 -33
  154. package/dist/_chunks/index-3956d072.js.map +1 -0
  155. package/dist/_chunks/{index-95e8649d.mjs → index-3bbbb14c.mjs} +36 -33
  156. package/dist/_chunks/index-3bbbb14c.mjs.map +1 -0
  157. package/dist/_chunks/{useAdminRolePermissions-fccd0884.mjs → useAdminRolePermissions-9f9361e7.mjs} +2 -2
  158. package/dist/_chunks/{useAdminRolePermissions-fccd0884.mjs.map → useAdminRolePermissions-9f9361e7.mjs.map} +1 -1
  159. package/dist/_chunks/{useAdminRolePermissions-122fa43a.js → useAdminRolePermissions-c97323e2.js} +2 -2
  160. package/dist/_chunks/{useAdminRolePermissions-122fa43a.js.map → useAdminRolePermissions-c97323e2.js.map} +1 -1
  161. package/dist/_chunks/{validateWorkflow-8a63abd6.mjs → validateWorkflow-5208ca73.mjs} +2 -2
  162. package/dist/_chunks/{validateWorkflow-8a63abd6.mjs.map → validateWorkflow-5208ca73.mjs.map} +1 -1
  163. package/dist/_chunks/{validateWorkflow-1f89db67.js → validateWorkflow-f6947b4c.js} +2 -2
  164. package/dist/_chunks/{validateWorkflow-1f89db67.js.map → validateWorkflow-f6947b4c.js.map} +1 -1
  165. package/dist/admin/index.js +1 -1
  166. package/dist/admin/index.mjs +1 -1
  167. package/package.json +13 -13
  168. package/dist/_chunks/index-3f8cf4d5.js.map +0 -1
  169. package/dist/_chunks/index-95e8649d.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"useAdminRolePermissions-fccd0884.mjs","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","../../admin/src/pages/Settings/pages/Roles/hooks/useAdminRolePermissions.ts"],"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","import { useFetchClient } from '@strapi/helper-plugin';\nimport { Entity } from '@strapi/types';\nimport { UseQueryOptions, useQuery } from 'react-query';\n\nimport { GetOwnPermissions } from '../../../../../../../shared/contracts/users';\n\nexport interface APIRolePermissionsQueryParams {\n id: null | Entity.ID;\n}\n\nexport const useAdminRolePermissions = (\n params: APIRolePermissionsQueryParams = { id: null },\n queryOptions: Omit<\n UseQueryOptions<GetOwnPermissions.Response['data']>,\n 'queryKey' | 'queryFn'\n > = {}\n) => {\n const { id, ...queryParams } = params;\n\n const { get } = useFetchClient();\n\n const {\n data: permissions,\n error,\n isError,\n isLoading,\n refetch,\n } = useQuery(\n ['roles', id, 'permissions', queryParams],\n async () => {\n const {\n data: { data },\n } = await get<GetOwnPermissions.Response>(`/admin/roles/${id}/permissions`, {\n params: queryParams,\n });\n\n return data;\n },\n queryOptions\n );\n\n return { permissions, error, isError, isLoading, refetch };\n};\n"],"names":["permissions","current","acc","createDefaultConditionsForm","value","childrenForm","label","ActionRow","React","Wrapper","hasAllActionsSelected","hasSomeActionsSelected","StyledBox","_internalActiveStyle","checkboxesState","get"],"mappings":"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"}
1
+ {"version":3,"file":"useAdminRolePermissions-9f9361e7.mjs","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","../../admin/src/pages/Settings/pages/Roles/hooks/useAdminRolePermissions.ts"],"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","import { useFetchClient } from '@strapi/helper-plugin';\nimport { Entity } from '@strapi/types';\nimport { UseQueryOptions, useQuery } from 'react-query';\n\nimport { GetOwnPermissions } from '../../../../../../../shared/contracts/users';\n\nexport interface APIRolePermissionsQueryParams {\n id: null | Entity.ID;\n}\n\nexport const useAdminRolePermissions = (\n params: APIRolePermissionsQueryParams = { id: null },\n queryOptions: Omit<\n UseQueryOptions<GetOwnPermissions.Response['data']>,\n 'queryKey' | 'queryFn'\n > = {}\n) => {\n const { id, ...queryParams } = params;\n\n const { get } = useFetchClient();\n\n const {\n data: permissions,\n error,\n isError,\n isLoading,\n refetch,\n } = useQuery(\n ['roles', id, 'permissions', queryParams],\n async () => {\n const {\n data: { data },\n } = await get<GetOwnPermissions.Response>(`/admin/roles/${id}/permissions`, {\n params: queryParams,\n });\n\n return data;\n },\n queryOptions\n );\n\n return { permissions, error, isError, isLoading, refetch };\n};\n"],"names":["permissions","current","acc","createDefaultConditionsForm","value","childrenForm","label","ActionRow","React","Wrapper","hasAllActionsSelected","hasSomeActionsSelected","StyledBox","_internalActiveStyle","checkboxesState","get"],"mappings":"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"}