@openedx/frontend-app-admin-console 1.0.0-alpha.0

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 (236) hide show
  1. package/LICENSE +661 -0
  2. package/README.rst +164 -0
  3. package/dist/Main.d.ts +3 -0
  4. package/dist/Main.js +15 -0
  5. package/dist/Main.js.map +1 -0
  6. package/dist/app.d.ts +3 -0
  7. package/dist/app.js +10 -0
  8. package/dist/app.js.map +1 -0
  9. package/dist/authz-module/audit-user/index.d.ts +2 -0
  10. package/dist/authz-module/audit-user/index.js +191 -0
  11. package/dist/authz-module/audit-user/index.js.map +1 -0
  12. package/dist/authz-module/audit-user/messages.d.ts +58 -0
  13. package/dist/authz-module/audit-user/messages.js +60 -0
  14. package/dist/authz-module/audit-user/messages.js.map +1 -0
  15. package/dist/authz-module/authz-home/index.d.ts +2 -0
  16. package/dist/authz-module/authz-home/index.js +23 -0
  17. package/dist/authz-module/authz-home/index.js.map +1 -0
  18. package/dist/authz-module/authz-home/messages.d.ts +23 -0
  19. package/dist/authz-module/authz-home/messages.js +25 -0
  20. package/dist/authz-module/authz-home/messages.js.map +1 -0
  21. package/dist/authz-module/components/AddRoleButton.d.ts +6 -0
  22. package/dist/authz-module/components/AddRoleButton.js +22 -0
  23. package/dist/authz-module/components/AddRoleButton.js.map +1 -0
  24. package/dist/authz-module/components/AnchorButton.d.ts +2 -0
  25. package/dist/authz-module/components/AnchorButton.js +35 -0
  26. package/dist/authz-module/components/AnchorButton.js.map +1 -0
  27. package/dist/authz-module/components/AuthZLayout.d.ts +12 -0
  28. package/dist/authz-module/components/AuthZLayout.js +19 -0
  29. package/dist/authz-module/components/AuthZLayout.js.map +1 -0
  30. package/dist/authz-module/components/AuthZTitle.d.ts +20 -0
  31. package/dist/authz-module/components/AuthZTitle.js +22 -0
  32. package/dist/authz-module/components/AuthZTitle.js.map +1 -0
  33. package/dist/authz-module/components/ConfirmDeletionModal.d.ts +15 -0
  34. package/dist/authz-module/components/ConfirmDeletionModal.js +21 -0
  35. package/dist/authz-module/components/ConfirmDeletionModal.js.map +1 -0
  36. package/dist/authz-module/components/ErrorPage/index.d.ts +3 -0
  37. package/dist/authz-module/components/ErrorPage/index.js +59 -0
  38. package/dist/authz-module/components/ErrorPage/index.js.map +1 -0
  39. package/dist/authz-module/components/ErrorPage/messages.d.ts +53 -0
  40. package/dist/authz-module/components/ErrorPage/messages.js +55 -0
  41. package/dist/authz-module/components/ErrorPage/messages.js.map +1 -0
  42. package/dist/authz-module/components/PermissionTable.d.ts +9 -0
  43. package/dist/authz-module/components/PermissionTable.js +24 -0
  44. package/dist/authz-module/components/PermissionTable.js.map +1 -0
  45. package/dist/authz-module/components/RenderAdminRole.d.ts +5 -0
  46. package/dist/authz-module/components/RenderAdminRole.js +13 -0
  47. package/dist/authz-module/components/RenderAdminRole.js.map +1 -0
  48. package/dist/authz-module/components/RenderPermissionColumn.d.ts +6 -0
  49. package/dist/authz-module/components/RenderPermissionColumn.js +8 -0
  50. package/dist/authz-module/components/RenderPermissionColumn.js.map +1 -0
  51. package/dist/authz-module/components/RenderPermissionInLine.d.ts +6 -0
  52. package/dist/authz-module/components/RenderPermissionInLine.js +8 -0
  53. package/dist/authz-module/components/RenderPermissionInLine.js.map +1 -0
  54. package/dist/authz-module/components/ResourceTooltip.d.ts +11 -0
  55. package/dist/authz-module/components/ResourceTooltip.js +9 -0
  56. package/dist/authz-module/components/ResourceTooltip.js.map +1 -0
  57. package/dist/authz-module/components/RoleCard/constants.d.ts +14 -0
  58. package/dist/authz-module/components/RoleCard/constants.js +15 -0
  59. package/dist/authz-module/components/RoleCard/constants.js.map +1 -0
  60. package/dist/authz-module/components/RoleCard/messages.d.ts +73 -0
  61. package/dist/authz-module/components/RoleCard/messages.js +75 -0
  62. package/dist/authz-module/components/RoleCard/messages.js.map +1 -0
  63. package/dist/authz-module/components/TableCells.d.ts +29 -0
  64. package/dist/authz-module/components/TableCells.js +137 -0
  65. package/dist/authz-module/components/TableCells.js.map +1 -0
  66. package/dist/authz-module/components/TableControlBar/MultipleChoiceFilter.d.ts +3 -0
  67. package/dist/authz-module/components/TableControlBar/MultipleChoiceFilter.js +47 -0
  68. package/dist/authz-module/components/TableControlBar/MultipleChoiceFilter.js.map +1 -0
  69. package/dist/authz-module/components/TableControlBar/OrgFilter.d.ts +5 -0
  70. package/dist/authz-module/components/TableControlBar/OrgFilter.js +36 -0
  71. package/dist/authz-module/components/TableControlBar/OrgFilter.js.map +1 -0
  72. package/dist/authz-module/components/TableControlBar/RolesFilter.d.ts +4 -0
  73. package/dist/authz-module/components/TableControlBar/RolesFilter.js +29 -0
  74. package/dist/authz-module/components/TableControlBar/RolesFilter.js.map +1 -0
  75. package/dist/authz-module/components/TableControlBar/ScopesFilter.d.ts +4 -0
  76. package/dist/authz-module/components/TableControlBar/ScopesFilter.js +45 -0
  77. package/dist/authz-module/components/TableControlBar/ScopesFilter.js.map +1 -0
  78. package/dist/authz-module/components/TableControlBar/SearchFilter.d.ts +7 -0
  79. package/dist/authz-module/components/TableControlBar/SearchFilter.js +8 -0
  80. package/dist/authz-module/components/TableControlBar/SearchFilter.js.map +1 -0
  81. package/dist/authz-module/components/TableControlBar/TableControlBar.d.ts +5 -0
  82. package/dist/authz-module/components/TableControlBar/TableControlBar.js +99 -0
  83. package/dist/authz-module/components/TableControlBar/TableControlBar.js.map +1 -0
  84. package/dist/authz-module/components/TableControlBar/types.d.ts +18 -0
  85. package/dist/authz-module/components/TableControlBar/types.js +2 -0
  86. package/dist/authz-module/components/TableControlBar/types.js.map +1 -0
  87. package/dist/authz-module/components/TableFooter/TableFooter.d.ts +2 -0
  88. package/dist/authz-module/components/TableFooter/TableFooter.js +15 -0
  89. package/dist/authz-module/components/TableFooter/TableFooter.js.map +1 -0
  90. package/dist/authz-module/components/UserPermissions.d.ts +9 -0
  91. package/dist/authz-module/components/UserPermissions.js +56 -0
  92. package/dist/authz-module/components/UserPermissions.js.map +1 -0
  93. package/dist/authz-module/components/ViewMoreLink.d.ts +8 -0
  94. package/dist/authz-module/components/ViewMoreLink.js +8 -0
  95. package/dist/authz-module/components/ViewMoreLink.js.map +1 -0
  96. package/dist/authz-module/components/constants.d.ts +13 -0
  97. package/dist/authz-module/components/constants.js +80 -0
  98. package/dist/authz-module/components/constants.js.map +1 -0
  99. package/dist/authz-module/components/messages.d.ts +183 -0
  100. package/dist/authz-module/components/messages.js +185 -0
  101. package/dist/authz-module/components/messages.js.map +1 -0
  102. package/dist/authz-module/constants.d.ts +38 -0
  103. package/dist/authz-module/constants.js +77 -0
  104. package/dist/authz-module/constants.js.map +1 -0
  105. package/dist/authz-module/data/api.d.ts +109 -0
  106. package/dist/authz-module/data/api.js +107 -0
  107. package/dist/authz-module/data/api.js.map +1 -0
  108. package/dist/authz-module/data/hooks.d.ts +94 -0
  109. package/dist/authz-module/data/hooks.js +191 -0
  110. package/dist/authz-module/data/hooks.js.map +1 -0
  111. package/dist/authz-module/hooks/useCourseAuthoringFlag.d.ts +26 -0
  112. package/dist/authz-module/hooks/useCourseAuthoringFlag.js +86 -0
  113. package/dist/authz-module/hooks/useCourseAuthoringFlag.js.map +1 -0
  114. package/dist/authz-module/hooks/useQuerySettings.d.ts +27 -0
  115. package/dist/authz-module/hooks/useQuerySettings.js +72 -0
  116. package/dist/authz-module/hooks/useQuerySettings.js.map +1 -0
  117. package/dist/authz-module/hooks/useViewTeamPermissions.d.ts +5 -0
  118. package/dist/authz-module/hooks/useViewTeamPermissions.js +13 -0
  119. package/dist/authz-module/hooks/useViewTeamPermissions.js.map +1 -0
  120. package/dist/authz-module/index.d.ts +3 -0
  121. package/dist/authz-module/index.js +20 -0
  122. package/dist/authz-module/index.js.map +1 -0
  123. package/dist/authz-module/index.scss +131 -0
  124. package/dist/authz-module/messages.d.ts +48 -0
  125. package/dist/authz-module/messages.js +50 -0
  126. package/dist/authz-module/messages.js.map +1 -0
  127. package/dist/authz-module/role-assignation-wizard/AssignRoleWizard.d.ts +8 -0
  128. package/dist/authz-module/role-assignation-wizard/AssignRoleWizard.js +154 -0
  129. package/dist/authz-module/role-assignation-wizard/AssignRoleWizard.js.map +1 -0
  130. package/dist/authz-module/role-assignation-wizard/AssignRoleWizardPage.d.ts +2 -0
  131. package/dist/authz-module/role-assignation-wizard/AssignRoleWizardPage.js +39 -0
  132. package/dist/authz-module/role-assignation-wizard/AssignRoleWizardPage.js.map +1 -0
  133. package/dist/authz-module/role-assignation-wizard/components/DefineApplicationScopeStep.d.ts +8 -0
  134. package/dist/authz-module/role-assignation-wizard/components/DefineApplicationScopeStep.js +39 -0
  135. package/dist/authz-module/role-assignation-wizard/components/DefineApplicationScopeStep.js.map +1 -0
  136. package/dist/authz-module/role-assignation-wizard/components/HighlightedUsersInput.d.ts +11 -0
  137. package/dist/authz-module/role-assignation-wizard/components/HighlightedUsersInput.js +36 -0
  138. package/dist/authz-module/role-assignation-wizard/components/HighlightedUsersInput.js.map +1 -0
  139. package/dist/authz-module/role-assignation-wizard/components/OrgSection.d.ts +10 -0
  140. package/dist/authz-module/role-assignation-wizard/components/OrgSection.js +14 -0
  141. package/dist/authz-module/role-assignation-wizard/components/OrgSection.js.map +1 -0
  142. package/dist/authz-module/role-assignation-wizard/components/ScopeCheckboxItem.d.ts +8 -0
  143. package/dist/authz-module/role-assignation-wizard/components/ScopeCheckboxItem.js +5 -0
  144. package/dist/authz-module/role-assignation-wizard/components/ScopeCheckboxItem.js.map +1 -0
  145. package/dist/authz-module/role-assignation-wizard/components/ScopeFilterBar.d.ts +12 -0
  146. package/dist/authz-module/role-assignation-wizard/components/ScopeFilterBar.js +12 -0
  147. package/dist/authz-module/role-assignation-wizard/components/ScopeFilterBar.js.map +1 -0
  148. package/dist/authz-module/role-assignation-wizard/components/ScopeList.d.ts +20 -0
  149. package/dist/authz-module/role-assignation-wizard/components/ScopeList.js +30 -0
  150. package/dist/authz-module/role-assignation-wizard/components/ScopeList.js.map +1 -0
  151. package/dist/authz-module/role-assignation-wizard/components/SelectUsersAndRoleStep.d.ts +12 -0
  152. package/dist/authz-module/role-assignation-wizard/components/SelectUsersAndRoleStep.js +34 -0
  153. package/dist/authz-module/role-assignation-wizard/components/SelectUsersAndRoleStep.js.map +1 -0
  154. package/dist/authz-module/role-assignation-wizard/constants.d.ts +5 -0
  155. package/dist/authz-module/role-assignation-wizard/constants.js +6 -0
  156. package/dist/authz-module/role-assignation-wizard/constants.js.map +1 -0
  157. package/dist/authz-module/role-assignation-wizard/hooks/useScopeListData.d.ts +23 -0
  158. package/dist/authz-module/role-assignation-wizard/hooks/useScopeListData.js +112 -0
  159. package/dist/authz-module/role-assignation-wizard/hooks/useScopeListData.js.map +1 -0
  160. package/dist/authz-module/role-assignation-wizard/hooks/useScopePermissions.d.ts +10 -0
  161. package/dist/authz-module/role-assignation-wizard/hooks/useScopePermissions.js +54 -0
  162. package/dist/authz-module/role-assignation-wizard/hooks/useScopePermissions.js.map +1 -0
  163. package/dist/authz-module/role-assignation-wizard/messages.d.ts +243 -0
  164. package/dist/authz-module/role-assignation-wizard/messages.js +258 -0
  165. package/dist/authz-module/role-assignation-wizard/messages.js.map +1 -0
  166. package/dist/authz-module/role-assignation-wizard/utils.d.ts +5 -0
  167. package/dist/authz-module/role-assignation-wizard/utils.js +16 -0
  168. package/dist/authz-module/role-assignation-wizard/utils.js.map +1 -0
  169. package/dist/authz-module/roles-permissions/RolesPermissions.d.ts +2 -0
  170. package/dist/authz-module/roles-permissions/RolesPermissions.js +35 -0
  171. package/dist/authz-module/roles-permissions/RolesPermissions.js.map +1 -0
  172. package/dist/authz-module/roles-permissions/course/constants.d.ts +39 -0
  173. package/dist/authz-module/roles-permissions/course/constants.js +474 -0
  174. package/dist/authz-module/roles-permissions/course/constants.js.map +1 -0
  175. package/dist/authz-module/roles-permissions/index.d.ts +10 -0
  176. package/dist/authz-module/roles-permissions/index.js +15 -0
  177. package/dist/authz-module/roles-permissions/index.js.map +1 -0
  178. package/dist/authz-module/roles-permissions/library/constants.d.ts +18 -0
  179. package/dist/authz-module/roles-permissions/library/constants.js +193 -0
  180. package/dist/authz-module/roles-permissions/library/constants.js.map +1 -0
  181. package/dist/authz-module/roles-permissions/messages.d.ts +63 -0
  182. package/dist/authz-module/roles-permissions/messages.js +65 -0
  183. package/dist/authz-module/roles-permissions/messages.js.map +1 -0
  184. package/dist/authz-module/roles-permissions/utils.d.ts +41 -0
  185. package/dist/authz-module/roles-permissions/utils.js +70 -0
  186. package/dist/authz-module/roles-permissions/utils.js.map +1 -0
  187. package/dist/authz-module/team-members/TeamMembersTable.d.ts +5 -0
  188. package/dist/authz-module/team-members/TeamMembersTable.js +107 -0
  189. package/dist/authz-module/team-members/TeamMembersTable.js.map +1 -0
  190. package/dist/authz-module/team-members/messages.d.ts +33 -0
  191. package/dist/authz-module/team-members/messages.js +35 -0
  192. package/dist/authz-module/team-members/messages.js.map +1 -0
  193. package/dist/authz-module/utils.d.ts +24 -0
  194. package/dist/authz-module/utils.js +45 -0
  195. package/dist/authz-module/utils.js.map +1 -0
  196. package/dist/components/LoadingPage.d.ts +2 -0
  197. package/dist/components/LoadingPage.js +5 -0
  198. package/dist/components/LoadingPage.js.map +1 -0
  199. package/dist/components/ToastManager/ToastManagerContext.d.ts +24 -0
  200. package/dist/components/ToastManager/ToastManagerContext.js +91 -0
  201. package/dist/components/ToastManager/ToastManagerContext.js.map +1 -0
  202. package/dist/constants.d.ts +11 -0
  203. package/dist/constants.js +15 -0
  204. package/dist/constants.js.map +1 -0
  205. package/dist/data/api.d.ts +4 -0
  206. package/dist/data/api.js +21 -0
  207. package/dist/data/api.js.map +1 -0
  208. package/dist/data/hooks.d.ts +38 -0
  209. package/dist/data/hooks.js +69 -0
  210. package/dist/data/hooks.js.map +1 -0
  211. package/dist/data/types.d.ts +38 -0
  212. package/dist/data/types.js +2 -0
  213. package/dist/data/types.js.map +1 -0
  214. package/dist/data/utils.d.ts +6 -0
  215. package/dist/data/utils.js +11 -0
  216. package/dist/data/utils.js.map +1 -0
  217. package/dist/i18n/index.d.ts +1 -0
  218. package/dist/i18n/index.js +2 -0
  219. package/dist/i18n/index.js.map +1 -0
  220. package/dist/index.d.ts +3 -0
  221. package/dist/index.js +4 -0
  222. package/dist/index.js.map +1 -0
  223. package/dist/messages.d.ts +8 -0
  224. package/dist/messages.js +10 -0
  225. package/dist/messages.js.map +1 -0
  226. package/dist/providers.d.ts +3 -0
  227. package/dist/providers.js +4 -0
  228. package/dist/providers.js.map +1 -0
  229. package/dist/routes.d.ts +11 -0
  230. package/dist/routes.js +16 -0
  231. package/dist/routes.js.map +1 -0
  232. package/dist/style.scss +15 -0
  233. package/dist/types.d.ts +93 -0
  234. package/dist/types.js +2 -0
  235. package/dist/types.js.map +1 -0
  236. package/package.json +88 -0
@@ -0,0 +1,15 @@
1
+ import { CONTENT_COURSE_PERMISSIONS } from './course/constants';
2
+ import { CONTENT_LIBRARY_PERMISSIONS, libraryRolesMetadata as _libraryRolesMetadata } from './library/constants';
3
+ export { CONTENT_LIBRARY_PERMISSIONS, libraryResourceTypes, libraryPermissions, libraryRolesMetadata, libraryRolesWithPermissions, } from './library/constants';
4
+ export const LIBRARY_ROLE_KEYS = _libraryRolesMetadata.map((r) => r.role).join(',');
5
+ export { CONTENT_COURSE_PERMISSIONS, courseResourceTypes, coursePermissions, courseRolesWithPermissions, courseRolesMetadata, } from './course/constants';
6
+ export const MANAGE_TEAM_PERMISSIONS = [
7
+ { action: CONTENT_LIBRARY_PERMISSIONS.MANAGE_LIBRARY_TEAM },
8
+ { action: CONTENT_COURSE_PERMISSIONS.MANAGE_COURSE_TEAM },
9
+ ];
10
+ export const VIEW_TEAM_PERMISSIONS = [
11
+ { action: CONTENT_LIBRARY_PERMISSIONS.VIEW_LIBRARY_TEAM },
12
+ { action: CONTENT_COURSE_PERMISSIONS.VIEW_COURSE_TEAM },
13
+ ];
14
+ export { buildPermissionMatrixByResource, getPermissionMetadata } from './utils';
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/authz-module/roles-permissions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,2BAA2B,EAAE,oBAAoB,IAAI,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEjH,OAAO,EACL,2BAA2B,EAC3B,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,2BAA2B,GAC5B,MAAM,qBAAqB,CAAC;AAE7B,MAAM,CAAC,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEpF,OAAO,EACL,0BAA0B,EAC1B,mBAAmB,EACnB,iBAAiB,EACjB,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,CAAC,MAAM,uBAAuB,GAAyB;IAC3D,EAAE,MAAM,EAAE,2BAA2B,CAAC,mBAAmB,EAAE;IAC3D,EAAE,MAAM,EAAE,0BAA0B,CAAC,kBAAkB,EAAE;CAC1D,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAyB;IACzD,EAAE,MAAM,EAAE,2BAA2B,CAAC,iBAAiB,EAAE;IACzD,EAAE,MAAM,EAAE,0BAA0B,CAAC,gBAAgB,EAAE;CACxD,CAAC;AACF,OAAO,EAAE,+BAA+B,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC","sourcesContent":["import { CONTENT_COURSE_PERMISSIONS } from './course/constants';\nimport { CONTENT_LIBRARY_PERMISSIONS, libraryRolesMetadata as _libraryRolesMetadata } from './library/constants';\n\nexport {\n CONTENT_LIBRARY_PERMISSIONS,\n libraryResourceTypes,\n libraryPermissions,\n libraryRolesMetadata,\n libraryRolesWithPermissions,\n} from './library/constants';\n\nexport const LIBRARY_ROLE_KEYS = _libraryRolesMetadata.map((r) => r.role).join(',');\n\nexport {\n CONTENT_COURSE_PERMISSIONS,\n courseResourceTypes,\n coursePermissions,\n courseRolesWithPermissions,\n courseRolesMetadata,\n} from './course/constants';\n\nexport const MANAGE_TEAM_PERMISSIONS: { action: string }[] = [\n { action: CONTENT_LIBRARY_PERMISSIONS.MANAGE_LIBRARY_TEAM },\n { action: CONTENT_COURSE_PERMISSIONS.MANAGE_COURSE_TEAM },\n];\n\nexport const VIEW_TEAM_PERMISSIONS: { action: string }[] = [\n { action: CONTENT_LIBRARY_PERMISSIONS.VIEW_LIBRARY_TEAM },\n { action: CONTENT_COURSE_PERMISSIONS.VIEW_COURSE_TEAM },\n];\nexport { buildPermissionMatrixByResource, getPermissionMetadata } from './utils';\n"]}
@@ -0,0 +1,18 @@
1
+ import { PermissionMetadata, ResourceMetadata, Role, RoleMetadata } from '../../../types';
2
+ export declare const CONTENT_LIBRARY_PERMISSIONS: {
3
+ DELETE_LIBRARY: string;
4
+ MANAGE_LIBRARY_TAGS: string;
5
+ VIEW_LIBRARY: string;
6
+ EDIT_LIBRARY_CONTENT: string;
7
+ PUBLISH_LIBRARY_CONTENT: string;
8
+ REUSE_LIBRARY_CONTENT: string;
9
+ MANAGE_LIBRARY_TEAM: string;
10
+ VIEW_LIBRARY_TEAM: string;
11
+ CREATE_LIBRARY_COLLECTION: string;
12
+ EDIT_LIBRARY_COLLECTION: string;
13
+ DELETE_LIBRARY_COLLECTION: string;
14
+ };
15
+ export declare const libraryRolesMetadata: RoleMetadata[];
16
+ export declare const libraryResourceTypes: ResourceMetadata[];
17
+ export declare const libraryPermissions: PermissionMetadata[];
18
+ export declare const libraryRolesWithPermissions: Role[];
@@ -0,0 +1,193 @@
1
+ import { Group, CollectionsBookmark, Notes, AutoAwesomeMosaic, RemoveRedEye, Settings, DownloadDone, Plus, EditOutline, Delete, SpinnerIcon, } from '@openedx/paragon/icons';
2
+ export const CONTENT_LIBRARY_PERMISSIONS = {
3
+ DELETE_LIBRARY: 'content_libraries.delete_library',
4
+ MANAGE_LIBRARY_TAGS: 'content_libraries.manage_library_tags',
5
+ VIEW_LIBRARY: 'content_libraries.view_library',
6
+ EDIT_LIBRARY_CONTENT: 'content_libraries.edit_library_content',
7
+ PUBLISH_LIBRARY_CONTENT: 'content_libraries.publish_library_content',
8
+ REUSE_LIBRARY_CONTENT: 'content_libraries.reuse_library_content',
9
+ MANAGE_LIBRARY_TEAM: 'content_libraries.manage_library_team',
10
+ VIEW_LIBRARY_TEAM: 'content_libraries.view_library_team',
11
+ CREATE_LIBRARY_COLLECTION: 'content_libraries.create_library_collection',
12
+ EDIT_LIBRARY_COLLECTION: 'content_libraries.edit_library_collection',
13
+ DELETE_LIBRARY_COLLECTION: 'content_libraries.delete_library_collection',
14
+ };
15
+ // Note: this information will eventually come from the backend API
16
+ // but for the MVP we decided to manage it in the frontend
17
+ export const libraryRolesMetadata = [
18
+ {
19
+ role: 'library_admin',
20
+ name: 'Library Admin',
21
+ description: 'The Library Admin has full control over the library, including managing users, modifying content, and handling publishing workflows. They ensure content is properly maintained and accessible as needed.',
22
+ contextType: 'library',
23
+ },
24
+ {
25
+ role: 'library_author',
26
+ name: 'Library Author',
27
+ description: 'The Library Author is responsible for creating, editing, and publishing content within a library. They can manage tags and collections but cannot delete libraries or manage users.',
28
+ contextType: 'library',
29
+ },
30
+ {
31
+ role: 'library_contributor',
32
+ name: 'Library Contributor',
33
+ description: 'The Library Contributor can create and edit content within a library but cannot publish it. They support the authoring process while leaving final publishing to Authors or Admins.',
34
+ contextType: 'library',
35
+ },
36
+ {
37
+ role: 'library_user',
38
+ name: 'Library User',
39
+ description: 'The Library User can view and reuse content but cannot edit or delete any resource.',
40
+ contextType: 'library',
41
+ },
42
+ ];
43
+ export const libraryResourceTypes = [
44
+ {
45
+ key: 'library',
46
+ label: 'Library',
47
+ description: 'Permissions related to viewing, managing, and publishing the library structure and metadata.',
48
+ icon: CollectionsBookmark,
49
+ },
50
+ {
51
+ key: 'library_content',
52
+ label: 'Content',
53
+ description: 'Permissions for editing, publishing, and reusing content within the library.',
54
+ icon: Notes,
55
+ },
56
+ {
57
+ key: 'library_team',
58
+ label: 'Team',
59
+ description: 'Permissions for viewing and managing users who have access to the library.',
60
+ icon: Group,
61
+ },
62
+ {
63
+ key: 'library_collection',
64
+ label: 'Collection',
65
+ description: 'Permissions for creating and managing content collections within the library.',
66
+ icon: AutoAwesomeMosaic,
67
+ },
68
+ ];
69
+ export const libraryPermissions = [
70
+ {
71
+ key: CONTENT_LIBRARY_PERMISSIONS.VIEW_LIBRARY,
72
+ resource: 'library',
73
+ label: 'View',
74
+ description: 'See the library in Studio and access its content in read-only mode.',
75
+ icon: RemoveRedEye,
76
+ },
77
+ {
78
+ key: CONTENT_LIBRARY_PERMISSIONS.MANAGE_LIBRARY_TAGS,
79
+ resource: 'library',
80
+ label: 'Manage tags',
81
+ description: 'Create, edit, and delete tags on this library.',
82
+ icon: Settings,
83
+ },
84
+ {
85
+ key: CONTENT_LIBRARY_PERMISSIONS.DELETE_LIBRARY,
86
+ resource: 'library',
87
+ label: 'Delete',
88
+ description: 'Allows users to delete the entire content library.',
89
+ icon: Delete,
90
+ },
91
+ {
92
+ key: CONTENT_LIBRARY_PERMISSIONS.EDIT_LIBRARY_CONTENT,
93
+ resource: 'library_content',
94
+ label: 'Edit',
95
+ description: 'Create, edit, and delete content items in the library.',
96
+ icon: EditOutline,
97
+ },
98
+ {
99
+ key: CONTENT_LIBRARY_PERMISSIONS.PUBLISH_LIBRARY_CONTENT,
100
+ resource: 'library_content',
101
+ label: 'Publish',
102
+ description: 'Publish individual content items to make them available for reuse in courses.',
103
+ icon: DownloadDone,
104
+ },
105
+ {
106
+ key: CONTENT_LIBRARY_PERMISSIONS.REUSE_LIBRARY_CONTENT,
107
+ resource: 'library_content',
108
+ label: 'Reuse',
109
+ description: 'Add published content from this library to a course.',
110
+ icon: SpinnerIcon,
111
+ },
112
+ {
113
+ key: CONTENT_LIBRARY_PERMISSIONS.VIEW_LIBRARY_TEAM,
114
+ resource: 'library_team',
115
+ label: 'View',
116
+ description: 'See the list of users with a role assigned to this library.',
117
+ icon: RemoveRedEye,
118
+ },
119
+ {
120
+ key: CONTENT_LIBRARY_PERMISSIONS.MANAGE_LIBRARY_TEAM,
121
+ resource: 'library_team',
122
+ label: 'Manage',
123
+ description: 'Add, change, or remove role assignments for this library from the Roles and Permissions console.',
124
+ icon: Settings,
125
+ },
126
+ {
127
+ key: CONTENT_LIBRARY_PERMISSIONS.CREATE_LIBRARY_COLLECTION,
128
+ resource: 'library_collection',
129
+ label: 'Create',
130
+ description: 'Create new collections to organize content within the library.',
131
+ icon: Plus,
132
+ },
133
+ {
134
+ key: CONTENT_LIBRARY_PERMISSIONS.EDIT_LIBRARY_COLLECTION,
135
+ resource: 'library_collection',
136
+ label: 'Edit',
137
+ description: 'Update the name and contents of existing collections.',
138
+ icon: EditOutline,
139
+ },
140
+ {
141
+ key: CONTENT_LIBRARY_PERMISSIONS.DELETE_LIBRARY_COLLECTION,
142
+ resource: 'library_collection',
143
+ label: 'Delete',
144
+ description: 'Permanently remove collections from the library.',
145
+ icon: Delete,
146
+ },
147
+ ];
148
+ const LIBRARY_ROLE_PERMISSIONS = {
149
+ library_admin: [
150
+ CONTENT_LIBRARY_PERMISSIONS.VIEW_LIBRARY,
151
+ CONTENT_LIBRARY_PERMISSIONS.MANAGE_LIBRARY_TAGS,
152
+ CONTENT_LIBRARY_PERMISSIONS.DELETE_LIBRARY,
153
+ CONTENT_LIBRARY_PERMISSIONS.EDIT_LIBRARY_CONTENT,
154
+ CONTENT_LIBRARY_PERMISSIONS.PUBLISH_LIBRARY_CONTENT,
155
+ CONTENT_LIBRARY_PERMISSIONS.VIEW_LIBRARY_TEAM,
156
+ CONTENT_LIBRARY_PERMISSIONS.MANAGE_LIBRARY_TEAM,
157
+ CONTENT_LIBRARY_PERMISSIONS.CREATE_LIBRARY_COLLECTION,
158
+ CONTENT_LIBRARY_PERMISSIONS.EDIT_LIBRARY_COLLECTION,
159
+ CONTENT_LIBRARY_PERMISSIONS.DELETE_LIBRARY_COLLECTION,
160
+ CONTENT_LIBRARY_PERMISSIONS.REUSE_LIBRARY_CONTENT,
161
+ ],
162
+ library_author: [
163
+ CONTENT_LIBRARY_PERMISSIONS.VIEW_LIBRARY,
164
+ CONTENT_LIBRARY_PERMISSIONS.MANAGE_LIBRARY_TAGS,
165
+ CONTENT_LIBRARY_PERMISSIONS.EDIT_LIBRARY_CONTENT,
166
+ CONTENT_LIBRARY_PERMISSIONS.PUBLISH_LIBRARY_CONTENT,
167
+ CONTENT_LIBRARY_PERMISSIONS.REUSE_LIBRARY_CONTENT,
168
+ CONTENT_LIBRARY_PERMISSIONS.VIEW_LIBRARY_TEAM,
169
+ CONTENT_LIBRARY_PERMISSIONS.CREATE_LIBRARY_COLLECTION,
170
+ CONTENT_LIBRARY_PERMISSIONS.EDIT_LIBRARY_COLLECTION,
171
+ CONTENT_LIBRARY_PERMISSIONS.DELETE_LIBRARY_COLLECTION,
172
+ ],
173
+ library_contributor: [
174
+ CONTENT_LIBRARY_PERMISSIONS.VIEW_LIBRARY,
175
+ CONTENT_LIBRARY_PERMISSIONS.MANAGE_LIBRARY_TAGS,
176
+ CONTENT_LIBRARY_PERMISSIONS.EDIT_LIBRARY_CONTENT,
177
+ CONTENT_LIBRARY_PERMISSIONS.REUSE_LIBRARY_CONTENT,
178
+ CONTENT_LIBRARY_PERMISSIONS.VIEW_LIBRARY_TEAM,
179
+ CONTENT_LIBRARY_PERMISSIONS.CREATE_LIBRARY_COLLECTION,
180
+ CONTENT_LIBRARY_PERMISSIONS.EDIT_LIBRARY_COLLECTION,
181
+ CONTENT_LIBRARY_PERMISSIONS.DELETE_LIBRARY_COLLECTION,
182
+ ],
183
+ library_user: [
184
+ CONTENT_LIBRARY_PERMISSIONS.VIEW_LIBRARY,
185
+ CONTENT_LIBRARY_PERMISSIONS.REUSE_LIBRARY_CONTENT,
186
+ CONTENT_LIBRARY_PERMISSIONS.VIEW_LIBRARY_TEAM,
187
+ ],
188
+ };
189
+ export const libraryRolesWithPermissions = libraryRolesMetadata.map((meta) => {
190
+ var _a;
191
+ return (Object.assign(Object.assign({}, meta), { scope: '', userCount: 1, permissions: (_a = LIBRARY_ROLE_PERMISSIONS[meta.role]) !== null && _a !== void 0 ? _a : [] }));
192
+ });
193
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/authz-module/roles-permissions/library/constants.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n PermissionMetadata, ResourceMetadata, Role, RoleMetadata,\n} from '@src/types';\nimport {\n Group, CollectionsBookmark, Notes, AutoAwesomeMosaic,\n RemoveRedEye,\n Settings,\n DownloadDone,\n Plus,\n EditOutline,\n Delete,\n SpinnerIcon,\n} from '@openedx/paragon/icons';\n\nexport const CONTENT_LIBRARY_PERMISSIONS = {\n DELETE_LIBRARY: 'content_libraries.delete_library',\n MANAGE_LIBRARY_TAGS: 'content_libraries.manage_library_tags',\n VIEW_LIBRARY: 'content_libraries.view_library',\n\n EDIT_LIBRARY_CONTENT: 'content_libraries.edit_library_content',\n PUBLISH_LIBRARY_CONTENT: 'content_libraries.publish_library_content',\n REUSE_LIBRARY_CONTENT: 'content_libraries.reuse_library_content',\n\n MANAGE_LIBRARY_TEAM: 'content_libraries.manage_library_team',\n VIEW_LIBRARY_TEAM: 'content_libraries.view_library_team',\n\n CREATE_LIBRARY_COLLECTION: 'content_libraries.create_library_collection',\n EDIT_LIBRARY_COLLECTION: 'content_libraries.edit_library_collection',\n DELETE_LIBRARY_COLLECTION: 'content_libraries.delete_library_collection',\n};\n\n// Note: this information will eventually come from the backend API\n// but for the MVP we decided to manage it in the frontend\nexport const libraryRolesMetadata: RoleMetadata[] = [\n {\n role: 'library_admin',\n name: 'Library Admin',\n description: 'The Library Admin has full control over the library, including managing users, modifying content, and handling publishing workflows. They ensure content is properly maintained and accessible as needed.',\n contextType: 'library',\n },\n {\n role: 'library_author',\n name: 'Library Author',\n description: 'The Library Author is responsible for creating, editing, and publishing content within a library. They can manage tags and collections but cannot delete libraries or manage users.',\n contextType: 'library',\n },\n {\n role: 'library_contributor',\n name: 'Library Contributor',\n description: 'The Library Contributor can create and edit content within a library but cannot publish it. They support the authoring process while leaving final publishing to Authors or Admins.',\n contextType: 'library',\n },\n {\n role: 'library_user',\n name: 'Library User',\n description: 'The Library User can view and reuse content but cannot edit or delete any resource.',\n contextType: 'library',\n },\n];\n\nexport const libraryResourceTypes: ResourceMetadata[] = [\n {\n key: 'library',\n label: 'Library',\n description: 'Permissions related to viewing, managing, and publishing the library structure and metadata.',\n icon: CollectionsBookmark,\n },\n {\n key: 'library_content',\n label: 'Content',\n description: 'Permissions for editing, publishing, and reusing content within the library.',\n icon: Notes,\n },\n {\n key: 'library_team',\n label: 'Team',\n description: 'Permissions for viewing and managing users who have access to the library.',\n icon: Group,\n },\n {\n key: 'library_collection',\n label: 'Collection',\n description: 'Permissions for creating and managing content collections within the library.',\n icon: AutoAwesomeMosaic,\n },\n];\n\nexport const libraryPermissions: PermissionMetadata[] = [\n {\n key: CONTENT_LIBRARY_PERMISSIONS.VIEW_LIBRARY,\n resource: 'library',\n label: 'View',\n description: 'See the library in Studio and access its content in read-only mode.',\n icon: RemoveRedEye,\n },\n {\n key: CONTENT_LIBRARY_PERMISSIONS.MANAGE_LIBRARY_TAGS,\n resource: 'library',\n label: 'Manage tags',\n description: 'Create, edit, and delete tags on this library.',\n icon: Settings,\n },\n {\n key: CONTENT_LIBRARY_PERMISSIONS.DELETE_LIBRARY,\n resource: 'library',\n label: 'Delete',\n description: 'Allows users to delete the entire content library.',\n icon: Delete,\n },\n {\n key: CONTENT_LIBRARY_PERMISSIONS.EDIT_LIBRARY_CONTENT,\n resource: 'library_content',\n label: 'Edit',\n description: 'Create, edit, and delete content items in the library.',\n icon: EditOutline,\n },\n {\n key: CONTENT_LIBRARY_PERMISSIONS.PUBLISH_LIBRARY_CONTENT,\n resource: 'library_content',\n label: 'Publish',\n description: 'Publish individual content items to make them available for reuse in courses.',\n icon: DownloadDone,\n },\n {\n key: CONTENT_LIBRARY_PERMISSIONS.REUSE_LIBRARY_CONTENT,\n resource: 'library_content',\n label: 'Reuse',\n description: 'Add published content from this library to a course.',\n icon: SpinnerIcon,\n },\n {\n key: CONTENT_LIBRARY_PERMISSIONS.VIEW_LIBRARY_TEAM,\n resource: 'library_team',\n label: 'View',\n description: 'See the list of users with a role assigned to this library.',\n icon: RemoveRedEye,\n },\n {\n key: CONTENT_LIBRARY_PERMISSIONS.MANAGE_LIBRARY_TEAM,\n resource: 'library_team',\n label: 'Manage',\n description: 'Add, change, or remove role assignments for this library from the Roles and Permissions console.',\n icon: Settings,\n },\n {\n key: CONTENT_LIBRARY_PERMISSIONS.CREATE_LIBRARY_COLLECTION,\n resource: 'library_collection',\n label: 'Create',\n description: 'Create new collections to organize content within the library.',\n icon: Plus,\n },\n {\n key: CONTENT_LIBRARY_PERMISSIONS.EDIT_LIBRARY_COLLECTION,\n resource: 'library_collection',\n label: 'Edit',\n description: 'Update the name and contents of existing collections.',\n icon: EditOutline,\n },\n {\n key: CONTENT_LIBRARY_PERMISSIONS.DELETE_LIBRARY_COLLECTION,\n resource: 'library_collection',\n label: 'Delete',\n description: 'Permanently remove collections from the library.',\n icon: Delete,\n },\n];\n\nconst LIBRARY_ROLE_PERMISSIONS: Record<string, string[]> = {\n library_admin: [\n CONTENT_LIBRARY_PERMISSIONS.VIEW_LIBRARY,\n CONTENT_LIBRARY_PERMISSIONS.MANAGE_LIBRARY_TAGS,\n CONTENT_LIBRARY_PERMISSIONS.DELETE_LIBRARY,\n CONTENT_LIBRARY_PERMISSIONS.EDIT_LIBRARY_CONTENT,\n CONTENT_LIBRARY_PERMISSIONS.PUBLISH_LIBRARY_CONTENT,\n CONTENT_LIBRARY_PERMISSIONS.VIEW_LIBRARY_TEAM,\n CONTENT_LIBRARY_PERMISSIONS.MANAGE_LIBRARY_TEAM,\n CONTENT_LIBRARY_PERMISSIONS.CREATE_LIBRARY_COLLECTION,\n CONTENT_LIBRARY_PERMISSIONS.EDIT_LIBRARY_COLLECTION,\n CONTENT_LIBRARY_PERMISSIONS.DELETE_LIBRARY_COLLECTION,\n CONTENT_LIBRARY_PERMISSIONS.REUSE_LIBRARY_CONTENT,\n ],\n library_author: [\n CONTENT_LIBRARY_PERMISSIONS.VIEW_LIBRARY,\n CONTENT_LIBRARY_PERMISSIONS.MANAGE_LIBRARY_TAGS,\n CONTENT_LIBRARY_PERMISSIONS.EDIT_LIBRARY_CONTENT,\n CONTENT_LIBRARY_PERMISSIONS.PUBLISH_LIBRARY_CONTENT,\n CONTENT_LIBRARY_PERMISSIONS.REUSE_LIBRARY_CONTENT,\n CONTENT_LIBRARY_PERMISSIONS.VIEW_LIBRARY_TEAM,\n CONTENT_LIBRARY_PERMISSIONS.CREATE_LIBRARY_COLLECTION,\n CONTENT_LIBRARY_PERMISSIONS.EDIT_LIBRARY_COLLECTION,\n CONTENT_LIBRARY_PERMISSIONS.DELETE_LIBRARY_COLLECTION,\n ],\n library_contributor: [\n CONTENT_LIBRARY_PERMISSIONS.VIEW_LIBRARY,\n CONTENT_LIBRARY_PERMISSIONS.MANAGE_LIBRARY_TAGS,\n CONTENT_LIBRARY_PERMISSIONS.EDIT_LIBRARY_CONTENT,\n CONTENT_LIBRARY_PERMISSIONS.REUSE_LIBRARY_CONTENT,\n CONTENT_LIBRARY_PERMISSIONS.VIEW_LIBRARY_TEAM,\n CONTENT_LIBRARY_PERMISSIONS.CREATE_LIBRARY_COLLECTION,\n CONTENT_LIBRARY_PERMISSIONS.EDIT_LIBRARY_COLLECTION,\n CONTENT_LIBRARY_PERMISSIONS.DELETE_LIBRARY_COLLECTION,\n ],\n library_user: [\n CONTENT_LIBRARY_PERMISSIONS.VIEW_LIBRARY,\n CONTENT_LIBRARY_PERMISSIONS.REUSE_LIBRARY_CONTENT,\n CONTENT_LIBRARY_PERMISSIONS.VIEW_LIBRARY_TEAM,\n ],\n};\n\nexport const libraryRolesWithPermissions: Role[] = libraryRolesMetadata.map((meta) => ({\n ...meta,\n scope: '',\n userCount: 1,\n permissions: LIBRARY_ROLE_PERMISSIONS[meta.role] ?? [],\n}));\n"]}
@@ -0,0 +1,63 @@
1
+ declare const messages: {
2
+ 'authz.tabs.permissions': {
3
+ id: string;
4
+ defaultMessage: string;
5
+ description: string;
6
+ };
7
+ 'authz.tabs.permissionsRoles': {
8
+ id: string;
9
+ defaultMessage: string;
10
+ description: string;
11
+ };
12
+ 'authz.tabs.permissionsRoles.courses.alert.title': {
13
+ id: string;
14
+ defaultMessage: string;
15
+ description: string;
16
+ };
17
+ 'authz.tabs.permissionsRoles.courses.tab': {
18
+ id: string;
19
+ defaultMessage: string;
20
+ description: string;
21
+ };
22
+ 'authz.tabs.permissionsRoles.libraries.tab': {
23
+ id: string;
24
+ defaultMessage: string;
25
+ description: string;
26
+ };
27
+ 'authz.tabs.permissionsRoles.libraries.tab.title': {
28
+ id: string;
29
+ defaultMessage: string;
30
+ description: string;
31
+ };
32
+ 'authz.tabs.permissionsRoles.courses.tab.title': {
33
+ id: string;
34
+ defaultMessage: string;
35
+ description: string;
36
+ };
37
+ 'authz.tabs.permissionsRoles.courses.alert.note': {
38
+ id: string;
39
+ defaultMessage: string;
40
+ description: string;
41
+ };
42
+ 'authz.tabs.permissionsRoles.courses.alert.description': {
43
+ id: string;
44
+ defaultMessage: string;
45
+ description: string;
46
+ };
47
+ 'authz.tabs.permissionsRoles.courses.alert.link': {
48
+ id: string;
49
+ defaultMessage: string;
50
+ description: string;
51
+ };
52
+ 'authz.team.remove.user.toast.success.description': {
53
+ id: string;
54
+ defaultMessage: string;
55
+ description: string;
56
+ };
57
+ 'authz.team.toast.default.error.message': {
58
+ id: string;
59
+ defaultMessage: string;
60
+ description: string;
61
+ };
62
+ };
63
+ export default messages;
@@ -0,0 +1,65 @@
1
+ import { defineMessages } from '@openedx/frontend-base';
2
+ const messages = defineMessages({
3
+ 'authz.tabs.permissions': {
4
+ id: 'authz.tabs.permissions',
5
+ defaultMessage: 'Permissions',
6
+ description: 'Libraries AuthZ title for the permissions tab',
7
+ },
8
+ 'authz.tabs.permissionsRoles': {
9
+ id: 'authz.tabs.permissionsRoles',
10
+ defaultMessage: 'Roles and Permissions',
11
+ description: 'Libraries AuthZ title for the permissions and roles tab',
12
+ },
13
+ 'authz.tabs.permissionsRoles.courses.alert.title': {
14
+ id: 'authz.tabs.permissionsRoles.courses.alert.title',
15
+ defaultMessage: 'Course Roles',
16
+ description: 'Libraries AuthZ title for the course roles alert',
17
+ },
18
+ 'authz.tabs.permissionsRoles.courses.tab': {
19
+ id: 'authz.tabs.permissionsRoles.courses.tab',
20
+ defaultMessage: 'Courses',
21
+ description: 'Libraries AuthZ title for the course roles tab',
22
+ },
23
+ 'authz.tabs.permissionsRoles.libraries.tab': {
24
+ id: 'authz.tabs.permissionsRoles.libraries.tab',
25
+ defaultMessage: 'Libraries',
26
+ description: 'Libraries AuthZ title for the libraries roles tab',
27
+ },
28
+ 'authz.tabs.permissionsRoles.libraries.tab.title': {
29
+ id: 'authz.tabs.permissionsRoles.libraries.tab.title',
30
+ defaultMessage: 'Library Roles',
31
+ description: 'Libraries AuthZ title for the library roles table',
32
+ },
33
+ 'authz.tabs.permissionsRoles.courses.tab.title': {
34
+ id: 'authz.tabs.permissionsRoles.courses.tab.title',
35
+ defaultMessage: 'Course Roles',
36
+ description: 'Libraries AuthZ title for the course roles table',
37
+ },
38
+ 'authz.tabs.permissionsRoles.courses.alert.note': {
39
+ id: 'authz.tabs.permissionsRoles.courses.alert.note',
40
+ defaultMessage: 'Note:',
41
+ description: 'Libraries AuthZ note for the course roles alert',
42
+ },
43
+ 'authz.tabs.permissionsRoles.courses.alert.description': {
44
+ id: 'authz.tabs.permissionsRoles.courses.alert.description',
45
+ defaultMessage: 'This list shows the permissions currently available in Authoring Studio. Some roles may grant additional permissions managed outside this interface.',
46
+ description: 'Libraries AuthZ description for the course roles alert',
47
+ },
48
+ 'authz.tabs.permissionsRoles.courses.alert.link': {
49
+ id: 'authz.tabs.permissionsRoles.courses.alert.link',
50
+ defaultMessage: 'See full documentation',
51
+ description: 'Libraries AuthZ link for the course roles alert',
52
+ },
53
+ 'authz.team.remove.user.toast.success.description': {
54
+ id: 'authz.team.remove.user.toast.success.description',
55
+ defaultMessage: 'The {role} role has been successfully removed.{rolesCount, plural, =0 { The user no longer has access to this library and has been removed from the member list.} other {}}',
56
+ description: 'Libraries team management remove user toast success',
57
+ },
58
+ 'authz.team.toast.default.error.message': {
59
+ id: 'authz.team.toast.default.error.message',
60
+ defaultMessage: '<Bold>Something went wrong on our end.</Bold> <Br></Br>Please try again later.',
61
+ description: 'Libraries default error message',
62
+ },
63
+ });
64
+ export default messages;
65
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/authz-module/roles-permissions/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,wBAAwB,EAAE;QACxB,EAAE,EAAE,wBAAwB;QAC5B,cAAc,EAAE,aAAa;QAC7B,WAAW,EAAE,+CAA+C;KAC7D;IACD,6BAA6B,EAAE;QAC7B,EAAE,EAAE,6BAA6B;QACjC,cAAc,EAAE,uBAAuB;QACvC,WAAW,EAAE,yDAAyD;KACvE;IACD,iDAAiD,EAAE;QACjD,EAAE,EAAE,iDAAiD;QACrD,cAAc,EAAE,cAAc;QAC9B,WAAW,EAAE,kDAAkD;KAChE;IACD,yCAAyC,EAAE;QACzC,EAAE,EAAE,yCAAyC;QAC7C,cAAc,EAAE,SAAS;QACzB,WAAW,EAAE,gDAAgD;KAC9D;IACD,2CAA2C,EAAE;QAC3C,EAAE,EAAE,2CAA2C;QAC/C,cAAc,EAAE,WAAW;QAC3B,WAAW,EAAE,mDAAmD;KACjE;IACD,iDAAiD,EAAE;QACjD,EAAE,EAAE,iDAAiD;QACrD,cAAc,EAAE,eAAe;QAC/B,WAAW,EAAE,mDAAmD;KACjE;IACD,+CAA+C,EAAE;QAC/C,EAAE,EAAE,+CAA+C;QACnD,cAAc,EAAE,cAAc;QAC9B,WAAW,EAAE,kDAAkD;KAChE;IACD,gDAAgD,EAAE;QAChD,EAAE,EAAE,gDAAgD;QACpD,cAAc,EAAE,OAAO;QACvB,WAAW,EAAE,iDAAiD;KAC/D;IACD,uDAAuD,EAAE;QACvD,EAAE,EAAE,uDAAuD;QAC3D,cAAc,EAAE,sJAAsJ;QACtK,WAAW,EAAE,wDAAwD;KACtE;IACD,gDAAgD,EAAE;QAChD,EAAE,EAAE,gDAAgD;QACpD,cAAc,EAAE,wBAAwB;QACxC,WAAW,EAAE,iDAAiD;KAC/D;IACD,kDAAkD,EAAE;QAClD,EAAE,EAAE,kDAAkD;QACtD,cAAc,EAAE,6KAA6K;QAC7L,WAAW,EAAE,qDAAqD;KACnE;IACD,wCAAwC,EAAE;QACxC,EAAE,EAAE,wCAAwC;QAC5C,cAAc,EAAE,gFAAgF;QAChG,WAAW,EAAE,iCAAiC;KAC/C;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n 'authz.tabs.permissions': {\n id: 'authz.tabs.permissions',\n defaultMessage: 'Permissions',\n description: 'Libraries AuthZ title for the permissions tab',\n },\n 'authz.tabs.permissionsRoles': {\n id: 'authz.tabs.permissionsRoles',\n defaultMessage: 'Roles and Permissions',\n description: 'Libraries AuthZ title for the permissions and roles tab',\n },\n 'authz.tabs.permissionsRoles.courses.alert.title': {\n id: 'authz.tabs.permissionsRoles.courses.alert.title',\n defaultMessage: 'Course Roles',\n description: 'Libraries AuthZ title for the course roles alert',\n },\n 'authz.tabs.permissionsRoles.courses.tab': {\n id: 'authz.tabs.permissionsRoles.courses.tab',\n defaultMessage: 'Courses',\n description: 'Libraries AuthZ title for the course roles tab',\n },\n 'authz.tabs.permissionsRoles.libraries.tab': {\n id: 'authz.tabs.permissionsRoles.libraries.tab',\n defaultMessage: 'Libraries',\n description: 'Libraries AuthZ title for the libraries roles tab',\n },\n 'authz.tabs.permissionsRoles.libraries.tab.title': {\n id: 'authz.tabs.permissionsRoles.libraries.tab.title',\n defaultMessage: 'Library Roles',\n description: 'Libraries AuthZ title for the library roles table',\n },\n 'authz.tabs.permissionsRoles.courses.tab.title': {\n id: 'authz.tabs.permissionsRoles.courses.tab.title',\n defaultMessage: 'Course Roles',\n description: 'Libraries AuthZ title for the course roles table',\n },\n 'authz.tabs.permissionsRoles.courses.alert.note': {\n id: 'authz.tabs.permissionsRoles.courses.alert.note',\n defaultMessage: 'Note:',\n description: 'Libraries AuthZ note for the course roles alert',\n },\n 'authz.tabs.permissionsRoles.courses.alert.description': {\n id: 'authz.tabs.permissionsRoles.courses.alert.description',\n defaultMessage: 'This list shows the permissions currently available in Authoring Studio. Some roles may grant additional permissions managed outside this interface.',\n description: 'Libraries AuthZ description for the course roles alert',\n },\n 'authz.tabs.permissionsRoles.courses.alert.link': {\n id: 'authz.tabs.permissionsRoles.courses.alert.link',\n defaultMessage: 'See full documentation',\n description: 'Libraries AuthZ link for the course roles alert',\n },\n 'authz.team.remove.user.toast.success.description': {\n id: 'authz.team.remove.user.toast.success.description',\n defaultMessage: 'The {role} role has been successfully removed.{rolesCount, plural, =0 { The user no longer has access to this library and has been removed from the member list.} other {}}',\n description: 'Libraries team management remove user toast success',\n },\n 'authz.team.toast.default.error.message': {\n id: 'authz.team.toast.default.error.message',\n defaultMessage: '<Bold>Something went wrong on our end.</Bold> <Br></Br>Please try again later.',\n description: 'Libraries default error message',\n },\n});\n\nexport default messages;\n"]}
@@ -0,0 +1,41 @@
1
+ import type { IntlShape } from '@openedx/frontend-base';
2
+ import { EnrichedPermission, PermissionMetadata, PermissionsResourceGrouped, ResourceMetadata, Role } from '../../types';
3
+ /**
4
+ * Derives the localized label and action key for a given permission.
5
+ *
6
+ * This function enhance the permissions metadata mapping the key to a list of prefefined actions
7
+ * to add visual elemments (icons) and a localized label.
8
+ * If a label is already defined in the permission metadata, that is returned as-is.
9
+ *
10
+ * Special handling is applied for action keys like `'tag'` and `'team'`, which are
11
+ * normalized to `'manage'` and given a custom resource string for translation.
12
+ *
13
+ * @param permission - The permission metadata, typically containing a key and optional label.
14
+ * @param intl - The `IntlShape` object used to generate localized labels.
15
+ *
16
+ * @returns An object containing:
17
+ * - `label`: The human-readable, localized label for the permission.
18
+ * - `actionKey`: A string representing icon to be displayed (e.g., `'Read'`, `'Edit'`), or '' if not matched.
19
+ */
20
+ declare const getPermissionMetadata: (permission: PermissionMetadata, intl: IntlShape) => EnrichedPermission;
21
+ interface BuildPermissionsMatrixProps {
22
+ roles: Role[];
23
+ permissions: PermissionMetadata[];
24
+ resources: ResourceMetadata[];
25
+ intl: IntlShape;
26
+ }
27
+ /**
28
+ * Builds a permission matrix from the given roles, permissions, and resources.
29
+ *
30
+ * The matrix groups permissions under their respective resources and maps
31
+ * each permission to which roles have access to it.
32
+ *
33
+ * @param roles - List of roles, each containing a list of granted permission keys.
34
+ * @param permissions - Metadata describing each permission, including its associated resource.
35
+ * @param resources - List of resource metadata used to group permissions.
36
+ * @param intl - The internationalization object used to localize permission labels.
37
+ *
38
+ * @returns A permission matrix grouped by resource, with role mappings per permission.
39
+ */
40
+ declare const buildPermissionMatrixByResource: ({ roles, permissions, resources, intl, }: BuildPermissionsMatrixProps) => PermissionsResourceGrouped[];
41
+ export { buildPermissionMatrixByResource, getPermissionMetadata };
@@ -0,0 +1,70 @@
1
+ import { actionKeys } from '../components/RoleCard/constants';
2
+ import actionMessages from '../components/RoleCard/messages';
3
+ /**
4
+ * Derives the localized label and action key for a given permission.
5
+ *
6
+ * This function enhance the permissions metadata mapping the key to a list of prefefined actions
7
+ * to add visual elemments (icons) and a localized label.
8
+ * If a label is already defined in the permission metadata, that is returned as-is.
9
+ *
10
+ * Special handling is applied for action keys like `'tag'` and `'team'`, which are
11
+ * normalized to `'manage'` and given a custom resource string for translation.
12
+ *
13
+ * @param permission - The permission metadata, typically containing a key and optional label.
14
+ * @param intl - The `IntlShape` object used to generate localized labels.
15
+ *
16
+ * @returns An object containing:
17
+ * - `label`: The human-readable, localized label for the permission.
18
+ * - `actionKey`: A string representing icon to be displayed (e.g., `'Read'`, `'Edit'`), or '' if not matched.
19
+ */
20
+ const getPermissionMetadata = (permission, intl) => {
21
+ const actionKey = actionKeys.find(action => permission.key.includes(action)) || '';
22
+ let messageKey = `authz.permissions.actions.${actionKey}`;
23
+ if (actionKey === 'team') {
24
+ messageKey = 'authz.permissions.actions.manage';
25
+ }
26
+ const messageDescriptor = actionMessages[messageKey];
27
+ const label = permission.label || (messageDescriptor
28
+ ? intl.formatMessage(messageDescriptor, { resource: '' })
29
+ : permission.key);
30
+ return Object.assign(Object.assign({}, permission), { label, actionKey });
31
+ };
32
+ /**
33
+ * Builds a permission matrix from the given roles, permissions, and resources.
34
+ *
35
+ * The matrix groups permissions under their respective resources and maps
36
+ * each permission to which roles have access to it.
37
+ *
38
+ * @param roles - List of roles, each containing a list of granted permission keys.
39
+ * @param permissions - Metadata describing each permission, including its associated resource.
40
+ * @param resources - List of resource metadata used to group permissions.
41
+ * @param intl - The internationalization object used to localize permission labels.
42
+ *
43
+ * @returns A permission matrix grouped by resource, with role mappings per permission.
44
+ */
45
+ const buildPermissionMatrixByResource = ({ roles, permissions, resources, intl, }) => {
46
+ const enrichedPermissions = permissions.reduce((acc, perm) => {
47
+ acc[perm.key] = getPermissionMetadata(perm, intl);
48
+ return acc;
49
+ }, {});
50
+ const permissionsByResource = permissions.reduce((acc, perm) => {
51
+ if (!acc[perm.resource])
52
+ acc[perm.resource] = [];
53
+ acc[perm.resource].push(perm);
54
+ return acc;
55
+ }, {});
56
+ return resources.map(resource => {
57
+ const perms = permissionsByResource[resource.key] || [];
58
+ const permissionRows = perms.map(permission => {
59
+ const enriched = enrichedPermissions[permission.key];
60
+ const rolesMap = roles.reduce((acc, role) => {
61
+ acc[role.name] = role.permissions.includes(permission.key);
62
+ return acc;
63
+ }, {});
64
+ return Object.assign(Object.assign({}, enriched), { roles: rolesMap });
65
+ });
66
+ return Object.assign(Object.assign({}, resource), { permissions: permissionRows });
67
+ });
68
+ };
69
+ export { buildPermissionMatrixByResource, getPermissionMetadata };
70
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/authz-module/roles-permissions/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iDAAiD,CAAC;AAK7E,OAAO,cAAc,MAAM,gDAAgD,CAAC;AAE5E;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,qBAAqB,GAAG,CAAC,UAA8B,EAAE,IAAe,EAAsB,EAAE;IACpG,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IACnF,IAAI,UAAU,GAAG,6BAA6B,SAAS,EAAE,CAAC;IAE1D,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,UAAU,GAAG,kCAAkC,CAAC;IAClD,CAAC;IAED,MAAM,iBAAiB,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,IAAI,CAAC,iBAAiB;QAClD,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QACzD,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAEpB,uCAAY,UAAU,KAAE,KAAK,EAAE,SAAS,IAAG;AAC7C,CAAC,CAAC;AASF;;;;;;;;;;;;GAYG;AACH,MAAM,+BAA+B,GAAG,CAAC,EACvC,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,GACP,EAAgC,EAAE;IAC9D,MAAM,mBAAmB,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3D,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAClD,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAwC,CAAC,CAAC;IAE7C,MAAM,qBAAqB,GAAG,WAAW,CAAC,MAAM,CAAuC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;QACnG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;QACjD,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;QAC9B,MAAM,KAAK,GAAG,qBAAqB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAExD,MAAM,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;YAC5C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACrD,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;gBAC1C,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;gBAC3D,OAAO,GAAG,CAAC;YACb,CAAC,EAAE,EAA6B,CAAC,CAAC;YAElC,uCACK,QAAQ,KACX,KAAK,EAAE,QAAQ,IACf;QACJ,CAAC,CAAC,CAAC;QAEH,uCACK,QAAQ,KACX,WAAW,EAAE,cAAc,IAC3B;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,OAAO,EAAE,+BAA+B,EAAE,qBAAqB,EAAE,CAAC","sourcesContent":["import type { IntlShape } from '@openedx/frontend-base';\nimport { actionKeys } from '@src/authz-module/components/RoleCard/constants';\nimport {\n EnrichedPermission, PermissionMetadata, PermissionsResourceGrouped,\n ResourceMetadata, Role,\n} from '@src/types';\nimport actionMessages from '@src/authz-module/components/RoleCard/messages';\n\n/**\n * Derives the localized label and action key for a given permission.\n *\n * This function enhance the permissions metadata mapping the key to a list of prefefined actions\n * to add visual elemments (icons) and a localized label.\n * If a label is already defined in the permission metadata, that is returned as-is.\n *\n * Special handling is applied for action keys like `'tag'` and `'team'`, which are\n * normalized to `'manage'` and given a custom resource string for translation.\n *\n * @param permission - The permission metadata, typically containing a key and optional label.\n * @param intl - The `IntlShape` object used to generate localized labels.\n *\n * @returns An object containing:\n * - `label`: The human-readable, localized label for the permission.\n * - `actionKey`: A string representing icon to be displayed (e.g., `'Read'`, `'Edit'`), or '' if not matched.\n */\nconst getPermissionMetadata = (permission: PermissionMetadata, intl: IntlShape): EnrichedPermission => {\n const actionKey = actionKeys.find(action => permission.key.includes(action)) || '';\n let messageKey = `authz.permissions.actions.${actionKey}`;\n\n if (actionKey === 'team') {\n messageKey = 'authz.permissions.actions.manage';\n }\n\n const messageDescriptor = actionMessages[messageKey];\n const label = permission.label || (messageDescriptor\n ? intl.formatMessage(messageDescriptor, { resource: '' })\n : permission.key);\n\n return { ...permission, label, actionKey };\n};\n\ninterface BuildPermissionsMatrixProps {\n roles: Role[];\n permissions: PermissionMetadata[];\n resources: ResourceMetadata[];\n intl: IntlShape;\n}\n\n/**\n * Builds a permission matrix from the given roles, permissions, and resources.\n *\n * The matrix groups permissions under their respective resources and maps\n * each permission to which roles have access to it.\n *\n * @param roles - List of roles, each containing a list of granted permission keys.\n * @param permissions - Metadata describing each permission, including its associated resource.\n * @param resources - List of resource metadata used to group permissions.\n * @param intl - The internationalization object used to localize permission labels.\n *\n * @returns A permission matrix grouped by resource, with role mappings per permission.\n */\nconst buildPermissionMatrixByResource = ({\n roles, permissions, resources, intl,\n}: BuildPermissionsMatrixProps): PermissionsResourceGrouped[] => {\n const enrichedPermissions = permissions.reduce((acc, perm) => {\n acc[perm.key] = getPermissionMetadata(perm, intl);\n return acc;\n }, {} as Record<string, EnrichedPermission>);\n\n const permissionsByResource = permissions.reduce<Record<string, PermissionMetadata[]>>((acc, perm) => {\n if (!acc[perm.resource]) acc[perm.resource] = [];\n acc[perm.resource].push(perm);\n return acc;\n }, {});\n\n return resources.map(resource => {\n const perms = permissionsByResource[resource.key] || [];\n\n const permissionRows = perms.map(permission => {\n const enriched = enrichedPermissions[permission.key];\n const rolesMap = roles.reduce((acc, role) => {\n acc[role.name] = role.permissions.includes(permission.key);\n return acc;\n }, {} as Record<string, boolean>);\n\n return {\n ...enriched,\n roles: rolesMap,\n };\n });\n\n return {\n ...resource,\n permissions: permissionRows,\n };\n });\n};\n\nexport { buildPermissionMatrixByResource, getPermissionMetadata };\n"]}
@@ -0,0 +1,5 @@
1
+ interface TeamMembersTableProps {
2
+ presetScope?: string;
3
+ }
4
+ declare const TeamMembersTable: ({ presetScope }: TeamMembersTableProps) => import("react").JSX.Element;
5
+ export default TeamMembersTable;
@@ -0,0 +1,107 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useMemo, useState } from 'react';
3
+ import debounce from 'lodash.debounce';
4
+ import { useIntl } from '@openedx/frontend-base';
5
+ import { DataTable, TextFilter, } from '@openedx/paragon';
6
+ import { useToastManager } from '../../components/ToastManager/ToastManagerContext';
7
+ import { LIBRARY_ROLE_KEYS } from '../roles-permissions';
8
+ import { useViewTeamPermissions } from '../hooks/useViewTeamPermissions';
9
+ import { useCourseAuthoringFlag } from '../hooks/useCourseAuthoringFlag';
10
+ import { useQuerySettings } from '../hooks/useQuerySettings';
11
+ import OrgFilter from '../components/TableControlBar/OrgFilter';
12
+ import RolesFilter from '../components/TableControlBar/RolesFilter';
13
+ import ScopesFilter from '../components/TableControlBar/ScopesFilter';
14
+ import TableControlBar from '../components/TableControlBar/TableControlBar';
15
+ import { getCellHeader } from '../utils';
16
+ import { createViewActionCell, NameCell, OrgCell, RoleCell, ScopeCell, } from '../components/TableCells';
17
+ import { useAllRoleAssignments } from '../data/hooks';
18
+ import { TABLE_DEFAULT_PAGE_SIZE } from '../constants';
19
+ import messages from './messages';
20
+ import TableFooter from '../components/TableFooter/TableFooter';
21
+ const TeamMembersTable = ({ presetScope }) => {
22
+ const intl = useIntl();
23
+ const { showErrorToast } = useToastManager();
24
+ const [columnsWithFiltersApplied, setColumnsWithFiltersApplied] = useState([]);
25
+ const initialQuerySettings = presetScope ? {
26
+ scopes: presetScope,
27
+ pageSize: TABLE_DEFAULT_PAGE_SIZE,
28
+ pageIndex: 0,
29
+ roles: null,
30
+ organizations: null,
31
+ search: null,
32
+ order: null,
33
+ sortBy: null,
34
+ } : undefined;
35
+ const { querySettings, handleTableFetch } = useQuerySettings(initialQuerySettings);
36
+ const { isCourseViewAllowed } = useViewTeamPermissions();
37
+ const { isCourseEnabled } = useCourseAuthoringFlag();
38
+ const effectiveQuerySettings = useMemo(() => {
39
+ if (isCourseViewAllowed || querySettings.roles)
40
+ return querySettings;
41
+ return Object.assign(Object.assign({}, querySettings), { roles: LIBRARY_ROLE_KEYS });
42
+ }, [isCourseViewAllowed, querySettings]);
43
+ const { data: { results: roleAssignments, count } = { results: [], count: 0 }, isLoading: isLoadingAllRoleAssignments, error, refetch, } = useAllRoleAssignments(effectiveQuerySettings);
44
+ const viewActionCell = useMemo(() => createViewActionCell({ isCourseEnabled }), [isCourseEnabled]);
45
+ const initialFilters = presetScope ? [{ id: 'scope', value: [presetScope] }] : [];
46
+ useEffect(() => {
47
+ if (error) {
48
+ showErrorToast(error, refetch);
49
+ }
50
+ }, [error, showErrorToast, refetch]);
51
+ const pageCount = Math.ceil(count / TABLE_DEFAULT_PAGE_SIZE);
52
+ const fetchData = useMemo(() => debounce(handleTableFetch, 500), [handleTableFetch]);
53
+ useEffect(() => () => fetchData.cancel(), [fetchData]);
54
+ return (_jsx("div", { className: "authz-module", children: _jsxs(DataTable, { isFilterable: true, isPaginated: true, isSortable: true, manualFilters: true, manualPagination: true, manualSortBy: true, numBreakoutFilters: 4, fetchData: fetchData, data: roleAssignments, itemCount: count, pageCount: pageCount, initialState: { pageSize: TABLE_DEFAULT_PAGE_SIZE, filters: initialFilters }, isLoading: isLoadingAllRoleAssignments, additionalColumns: [
55
+ {
56
+ id: 'action',
57
+ Header: intl.formatMessage(messages['authz.team.members.table.column.actions.title']),
58
+ Cell: viewActionCell,
59
+ },
60
+ ], columns: [
61
+ {
62
+ id: 'username',
63
+ Header: intl.formatMessage(messages['authz.team.members.table.column.name.title']),
64
+ accessor: 'username',
65
+ Cell: NameCell,
66
+ filter: 'text',
67
+ Filter: TextFilter,
68
+ filterOrder: 1,
69
+ },
70
+ {
71
+ Header: intl.formatMessage(messages['authz.team.members.table.column.email.title']),
72
+ accessor: 'email',
73
+ disableFilters: true,
74
+ filter: 'text',
75
+ Filter: TextFilter,
76
+ },
77
+ {
78
+ Header: getCellHeader('org', intl.formatMessage(messages['authz.team.members.table.column.organization.title']), columnsWithFiltersApplied),
79
+ accessor: 'org',
80
+ Cell: OrgCell,
81
+ filter: 'includesValue',
82
+ Filter: OrgFilter,
83
+ filterButtonText: intl.formatMessage(messages['authz.team.members.table.column.organization.title']),
84
+ filterOrder: 2,
85
+ },
86
+ {
87
+ Header: getCellHeader('scope', intl.formatMessage(messages['authz.team.members.table.column.scope.title']), columnsWithFiltersApplied),
88
+ accessor: 'scope',
89
+ Cell: ScopeCell,
90
+ filter: 'includesValue',
91
+ Filter: ScopesFilter,
92
+ filterButtonText: intl.formatMessage(messages['authz.team.members.table.column.scope.title']),
93
+ filterOrder: 4,
94
+ },
95
+ {
96
+ Header: getCellHeader('role', intl.formatMessage(messages['authz.team.members.table.column.role.title']), columnsWithFiltersApplied),
97
+ accessor: 'role',
98
+ filter: 'includesValue',
99
+ Cell: RoleCell,
100
+ Filter: RolesFilter,
101
+ filterButtonText: intl.formatMessage(messages['authz.team.members.table.column.role.title']),
102
+ filterOrder: 3,
103
+ },
104
+ ], children: [_jsx(TableControlBar, { onFilterChange: setColumnsWithFiltersApplied }), _jsx(DataTable.Table, {}), _jsx(TableFooter, {})] }) }));
105
+ };
106
+ export default TeamMembersTable;
107
+ //# sourceMappingURL=TeamMembersTable.js.map