@openedx/frontend-app-admin-console 1.0.0-alpha.1 → 1.0.0-alpha.11

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 (112) hide show
  1. package/dist/authz-module/audit-user/index.js +6 -13
  2. package/dist/authz-module/audit-user/index.js.map +1 -1
  3. package/dist/authz-module/authz-home/index.js +21 -2
  4. package/dist/authz-module/authz-home/index.js.map +1 -1
  5. package/dist/authz-module/components/AddRoleButton.js +1 -1
  6. package/dist/authz-module/components/AddRoleButton.js.map +1 -1
  7. package/dist/authz-module/components/AuthZLayout.d.ts +7 -6
  8. package/dist/authz-module/components/AuthZLayout.js +9 -3
  9. package/dist/authz-module/components/AuthZLayout.js.map +1 -1
  10. package/dist/authz-module/components/AuthZTitle.d.ts +3 -2
  11. package/dist/authz-module/components/AuthZTitle.js +9 -7
  12. package/dist/authz-module/components/AuthZTitle.js.map +1 -1
  13. package/dist/authz-module/components/ExpandableButton.d.ts +17 -0
  14. package/dist/authz-module/components/ExpandableButton.js +16 -0
  15. package/dist/authz-module/components/ExpandableButton.js.map +1 -0
  16. package/dist/authz-module/components/PermissionTable.js +5 -1
  17. package/dist/authz-module/components/PermissionTable.js.map +1 -1
  18. package/dist/authz-module/components/TableCells.d.ts +5 -9
  19. package/dist/authz-module/components/TableCells.js +35 -65
  20. package/dist/authz-module/components/TableCells.js.map +1 -1
  21. package/dist/authz-module/components/TableControlBar/MultipleChoiceFilter.d.ts +1 -1
  22. package/dist/authz-module/components/TableControlBar/MultipleChoiceFilter.js +4 -3
  23. package/dist/authz-module/components/TableControlBar/MultipleChoiceFilter.js.map +1 -1
  24. package/dist/authz-module/components/TableControlBar/OrgFilter.js +2 -2
  25. package/dist/authz-module/components/TableControlBar/OrgFilter.js.map +1 -1
  26. package/dist/authz-module/components/TableControlBar/SearchFilter.d.ts +2 -1
  27. package/dist/authz-module/components/TableControlBar/SearchFilter.js +2 -1
  28. package/dist/authz-module/components/TableControlBar/SearchFilter.js.map +1 -1
  29. package/dist/authz-module/components/TableControlBar/TableControlBar.d.ts +4 -1
  30. package/dist/authz-module/components/TableControlBar/TableControlBar.js +24 -24
  31. package/dist/authz-module/components/TableControlBar/TableControlBar.js.map +1 -1
  32. package/dist/authz-module/components/TableControlBar/types.d.ts +1 -0
  33. package/dist/authz-module/components/TableControlBar/types.js.map +1 -1
  34. package/dist/authz-module/components/TableFooter/TableFooter.d.ts +14 -1
  35. package/dist/authz-module/components/TableFooter/TableFooter.js +3 -2
  36. package/dist/authz-module/components/TableFooter/TableFooter.js.map +1 -1
  37. package/dist/authz-module/components/constants.d.ts +1 -0
  38. package/dist/authz-module/components/constants.js +2 -1
  39. package/dist/authz-module/components/constants.js.map +1 -1
  40. package/dist/authz-module/components/messages.d.ts +0 -5
  41. package/dist/authz-module/components/messages.js +2 -7
  42. package/dist/authz-module/components/messages.js.map +1 -1
  43. package/dist/authz-module/constants.d.ts +18 -8
  44. package/dist/authz-module/constants.js +30 -11
  45. package/dist/authz-module/constants.js.map +1 -1
  46. package/dist/authz-module/data/api.d.ts +12 -4
  47. package/dist/authz-module/data/api.js +11 -2
  48. package/dist/authz-module/data/api.js.map +1 -1
  49. package/dist/authz-module/data/hooks.d.ts +8 -8
  50. package/dist/authz-module/data/hooks.js +15 -20
  51. package/dist/authz-module/data/hooks.js.map +1 -1
  52. package/dist/authz-module/hooks/useExclusiveRowExpansion.d.ts +7 -0
  53. package/dist/authz-module/hooks/useExclusiveRowExpansion.js +24 -0
  54. package/dist/authz-module/hooks/useExclusiveRowExpansion.js.map +1 -0
  55. package/dist/authz-module/index.scss +150 -13
  56. package/dist/authz-module/messages.d.ts +23 -0
  57. package/dist/authz-module/messages.js +18 -0
  58. package/dist/authz-module/messages.js.map +1 -1
  59. package/dist/authz-module/role-assignation-wizard/AssignRoleWizard.js +1 -1
  60. package/dist/authz-module/role-assignation-wizard/AssignRoleWizard.js.map +1 -1
  61. package/dist/authz-module/role-assignation-wizard/AssignRoleWizardPage.js +4 -4
  62. package/dist/authz-module/role-assignation-wizard/AssignRoleWizardPage.js.map +1 -1
  63. package/dist/authz-module/role-assignation-wizard/components/ScopeFilterBar.js +1 -1
  64. package/dist/authz-module/role-assignation-wizard/components/ScopeFilterBar.js.map +1 -1
  65. package/dist/authz-module/role-assignation-wizard/hooks/useScopeListData.js.map +1 -1
  66. package/dist/authz-module/roles-permissions/RolesPermissions.js +3 -3
  67. package/dist/authz-module/roles-permissions/RolesPermissions.js.map +1 -1
  68. package/dist/authz-module/team-members/TeamMembersTable.js +102 -58
  69. package/dist/authz-module/team-members/TeamMembersTable.js.map +1 -1
  70. package/dist/authz-module/team-members/components/AssignedRolesCell.d.ts +20 -0
  71. package/dist/authz-module/team-members/components/AssignedRolesCell.js +54 -0
  72. package/dist/authz-module/team-members/components/AssignedRolesCell.js.map +1 -0
  73. package/dist/authz-module/team-members/components/MoreRolesToggle.d.ts +14 -0
  74. package/dist/authz-module/team-members/components/MoreRolesToggle.js +25 -0
  75. package/dist/authz-module/team-members/components/MoreRolesToggle.js.map +1 -0
  76. package/dist/authz-module/team-members/components/TeamMemberCells.d.ts +17 -0
  77. package/dist/authz-module/team-members/components/TeamMemberCells.js +21 -0
  78. package/dist/authz-module/team-members/components/TeamMemberCells.js.map +1 -0
  79. package/dist/authz-module/team-members/components/TeamMemberViewActionCell.d.ts +18 -0
  80. package/dist/authz-module/team-members/components/TeamMemberViewActionCell.js +42 -0
  81. package/dist/authz-module/team-members/components/TeamMemberViewActionCell.js.map +1 -0
  82. package/dist/authz-module/team-members/components/UserAssignmentsSubTable.d.ts +16 -0
  83. package/dist/authz-module/team-members/components/UserAssignmentsSubTable.js +74 -0
  84. package/dist/authz-module/team-members/components/UserAssignmentsSubTable.js.map +1 -0
  85. package/dist/authz-module/team-members/index.d.ts +1 -0
  86. package/dist/authz-module/team-members/index.js +2 -0
  87. package/dist/authz-module/team-members/index.js.map +1 -0
  88. package/dist/authz-module/team-members/messages.d.ts +56 -1
  89. package/dist/authz-module/team-members/messages.js +59 -4
  90. package/dist/authz-module/team-members/messages.js.map +1 -1
  91. package/dist/authz-module/utils.d.ts +6 -0
  92. package/dist/authz-module/utils.js +12 -10
  93. package/dist/authz-module/utils.js.map +1 -1
  94. package/dist/components/LoadingPage.d.ts +3 -0
  95. package/dist/components/LoadingPage.js +9 -1
  96. package/dist/components/LoadingPage.js.map +1 -1
  97. package/dist/components/messages.d.ts +8 -0
  98. package/dist/components/messages.js +10 -0
  99. package/dist/components/messages.js.map +1 -0
  100. package/dist/index.d.ts +0 -1
  101. package/dist/index.js +0 -1
  102. package/dist/index.js.map +1 -1
  103. package/dist/routes.d.ts +3 -1
  104. package/dist/routes.js +17 -4
  105. package/dist/routes.js.map +1 -1
  106. package/dist/style.scss +19 -2
  107. package/dist/types.d.ts +29 -20
  108. package/dist/types.js.map +1 -1
  109. package/package.json +6 -3
  110. package/dist/authz-module/components/ViewMoreLink.d.ts +0 -8
  111. package/dist/authz-module/components/ViewMoreLink.js +0 -8
  112. package/dist/authz-module/components/ViewMoreLink.js.map +0 -1
package/dist/types.d.ts CHANGED
@@ -5,26 +5,6 @@ export interface PermissionValidationRequest {
5
5
  export interface PermissionValidationResponse extends PermissionValidationRequest {
6
6
  allowed: boolean;
7
7
  }
8
- export interface TeamMember {
9
- username: string;
10
- fullName: string;
11
- email: string;
12
- roles: string[];
13
- createdAt: string;
14
- scope: {
15
- resource: string;
16
- type: 'COURSE' | 'LIBRARY' | 'GLOBAL';
17
- };
18
- organization: string;
19
- role: string;
20
- }
21
- export interface LibraryMetadata {
22
- id: string;
23
- org: string;
24
- title: string;
25
- slug: string;
26
- allowPublicRead: boolean;
27
- }
28
8
  export interface RoleMetadata {
29
9
  role: string;
30
10
  name: string;
@@ -91,3 +71,32 @@ export interface RoleToDelete {
91
71
  export type UserRoleWithPermissions = UserRole & {
92
72
  canManageScope?: boolean;
93
73
  };
74
+ /**
75
+ * A single role assignment nested under a team member in the user-grouped listing.
76
+ * Mirrors `results[].assignments[]` of `GET /api/authz/v1/users/`.
77
+ */
78
+ export interface TeamMemberAssignment {
79
+ role: string;
80
+ org: string;
81
+ /** Scope external key (e.g. `course-v1:Org+Course+Run`). Identifies the scope and is
82
+ * what the scope filter sends back to the API — not shown to the user. */
83
+ scope: string;
84
+ /** Human-readable scope name shown in the table. The API returns an empty string for
85
+ * glob scopes and for scopes whose backing course or library no longer exists, so
86
+ * callers fall back to `scope`. */
87
+ scopeDisplayName: string;
88
+ permissionCount: number;
89
+ }
90
+ /**
91
+ * A team member as returned by the user-grouped assignments endpoint: one entry per
92
+ * user, carrying the first few of their assignments. `assignmentCount` counts every
93
+ * assignment behind that slice, so it can exceed `assignments.length`. Both are scoped
94
+ * to the active role, org and scope filters and to what the caller may view.
95
+ */
96
+ export interface TeamMember {
97
+ username: string;
98
+ fullName: string;
99
+ email: string;
100
+ assignmentCount: number;
101
+ assignments: TeamMemberAssignment[];
102
+ }
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["export interface PermissionValidationRequest {\n action: string;\n scope?: string;\n}\n\nexport interface PermissionValidationResponse extends PermissionValidationRequest {\n allowed: boolean;\n}\n\n// Libraries AuthZ types\nexport interface TeamMember {\n username: string;\n fullName: string;\n email: string;\n roles: string[];\n createdAt: string;\n scope: { resource: string; type: 'COURSE' | 'LIBRARY' | 'GLOBAL' };\n organization: string;\n role: string;\n}\n\nexport interface LibraryMetadata {\n id: string;\n org: string;\n title: string;\n slug: string;\n allowPublicRead: boolean;\n}\n\nexport interface RoleMetadata {\n role: string;\n name: string;\n description: string;\n contextType: string;\n disabled?: boolean;\n}\n// TODO: remove unnecessary fields when libraries gets removed\nexport interface Role extends RoleMetadata {\n scope: string;\n userCount: number;\n permissions: string[];\n}\n\nexport interface ResourceMetadata {\n key: string;\n label: string;\n description: string;\n icon?: React.ComponentType<React.SVGProps<SVGSVGElement>>;\n}\n\nexport interface PermissionMetadata {\n key: string;\n resource: string;\n label?: string;\n description?: string;\n icon?: React.ComponentType<React.SVGProps<SVGSVGElement>>;\n}\n\nexport type PermissionItem = ResourceMetadata & {\n perms: PermissionMetadata[];\n};\n\nexport interface Org {\n id: string;\n name: string;\n shortName: string;\n}\n\nexport interface Scope {\n externalKey: string;\n displayName: string;\n description?: string;\n org: Org | null;\n}\n\n// Permissions Matrix\n\nexport type EnrichedPermission = PermissionMetadata & {\n actionKey: string;\n};\n\nexport type PermissionWithRoles = EnrichedPermission & {\n roles: Record<string, boolean>;\n};\n\nexport type PermissionsResourceGrouped = ResourceMetadata & {\n permissions: PermissionWithRoles[];\n};\n\nexport interface UserRole {\n isSuperadmin?: boolean;\n role: string;\n org: string;\n scope: string;\n permissionCount: number;\n fullName?: string;\n username?: string;\n email?: string;\n}\n\nexport interface RoleToDelete {\n role: string;\n name?: string;\n scope: string;\n}\n\nexport type UserRoleWithPermissions = UserRole & {\n canManageScope?: boolean;\n};\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["export interface PermissionValidationRequest {\n action: string;\n scope?: string;\n}\n\nexport interface PermissionValidationResponse extends PermissionValidationRequest {\n allowed: boolean;\n}\n\nexport interface RoleMetadata {\n role: string;\n name: string;\n description: string;\n contextType: string;\n disabled?: boolean;\n}\n// TODO: remove unnecessary fields when libraries gets removed\nexport interface Role extends RoleMetadata {\n scope: string;\n userCount: number;\n permissions: string[];\n}\n\nexport interface ResourceMetadata {\n key: string;\n label: string;\n description: string;\n icon?: React.ComponentType<React.SVGProps<SVGSVGElement>>;\n}\n\nexport interface PermissionMetadata {\n key: string;\n resource: string;\n label?: string;\n description?: string;\n icon?: React.ComponentType<React.SVGProps<SVGSVGElement>>;\n}\n\nexport type PermissionItem = ResourceMetadata & {\n perms: PermissionMetadata[];\n};\n\nexport interface Org {\n id: string;\n name: string;\n shortName: string;\n}\n\nexport interface Scope {\n externalKey: string;\n displayName: string;\n description?: string;\n org: Org | null;\n}\n\n// Permissions Matrix\n\nexport type EnrichedPermission = PermissionMetadata & {\n actionKey: string;\n};\n\nexport type PermissionWithRoles = EnrichedPermission & {\n roles: Record<string, boolean>;\n};\n\nexport type PermissionsResourceGrouped = ResourceMetadata & {\n permissions: PermissionWithRoles[];\n};\n\nexport interface UserRole {\n isSuperadmin?: boolean;\n role: string;\n org: string;\n scope: string;\n permissionCount: number;\n fullName?: string;\n username?: string;\n email?: string;\n}\n\nexport interface RoleToDelete {\n role: string;\n name?: string;\n scope: string;\n}\n\nexport type UserRoleWithPermissions = UserRole & {\n canManageScope?: boolean;\n};\n\n/**\n * A single role assignment nested under a team member in the user-grouped listing.\n * Mirrors `results[].assignments[]` of `GET /api/authz/v1/users/`.\n */\nexport interface TeamMemberAssignment {\n role: string;\n org: string;\n /** Scope external key (e.g. `course-v1:Org+Course+Run`). Identifies the scope and is\n * what the scope filter sends back to the API — not shown to the user. */\n scope: string;\n /** Human-readable scope name shown in the table. The API returns an empty string for\n * glob scopes and for scopes whose backing course or library no longer exists, so\n * callers fall back to `scope`. */\n scopeDisplayName: string;\n permissionCount: number;\n}\n\n/**\n * A team member as returned by the user-grouped assignments endpoint: one entry per\n * user, carrying the first few of their assignments. `assignmentCount` counts every\n * assignment behind that slice, so it can exceed `assignments.length`. Both are scoped\n * to the active role, org and scope filters and to what the caller may view.\n */\nexport interface TeamMember {\n username: string;\n fullName: string;\n email: string;\n assignmentCount: number;\n assignments: TeamMemberAssignment[];\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openedx/frontend-app-admin-console",
3
- "version": "1.0.0-alpha.1",
3
+ "version": "1.0.0-alpha.11",
4
4
  "description": "Frontend Admin Console",
5
5
  "packageManager": "npm@11.12.1",
6
6
  "repository": {
@@ -59,7 +59,7 @@
59
59
  },
60
60
  "peerDependencies": {
61
61
  "@openedx/frontend-base": "^2.0.0-alpha.2 || 0.0.0-dev",
62
- "@openedx/paragon": "^23",
62
+ "@openedx/paragon": "^23 || 0.0.0-dev",
63
63
  "@tanstack/react-query": "^5",
64
64
  "react": "^18.3.1",
65
65
  "react-dom": "^18.3.1",
@@ -67,6 +67,8 @@
67
67
  },
68
68
  "devDependencies": {
69
69
  "@edx/browserslist-config": "^1.1.1",
70
+ "@openedx/frontend-base": "^2.0.0-alpha.2 || 0.0.0-dev",
71
+ "@openedx/paragon": "^23 || 0.0.0-dev",
70
72
  "@testing-library/dom": "^10.4.1",
71
73
  "@testing-library/jest-dom": "^6.6.4",
72
74
  "@testing-library/react": "^16.3.0",
@@ -77,7 +79,8 @@
77
79
  "@types/react-helmet": "^6.1.11",
78
80
  "nodemon": "^3.1.14",
79
81
  "tsc-alias": "^1.9.1",
80
- "turbo": "^2.10.11"
82
+ "turbo": "^2.10.11",
83
+ "typescript": "^5.9.3"
81
84
  },
82
85
  "dependencies": {
83
86
  "@edx/openedx-atlas": "^0.7.0",
@@ -1,8 +0,0 @@
1
- import React from 'react';
2
- interface ViewMoreLinkProps {
3
- label: string;
4
- onClick: () => void;
5
- iconSrc?: React.ComponentType | undefined;
6
- }
7
- declare const ViewMoreLink: ({ label, onClick, iconSrc }: ViewMoreLinkProps) => React.JSX.Element;
8
- export default ViewMoreLink;
@@ -1,8 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Hyperlink, Icon } from '@openedx/paragon';
3
- const ViewMoreLink = ({ label, onClick, iconSrc }) => (_jsxs(Hyperlink, { destination: undefined, onClick: e => {
4
- e.preventDefault();
5
- onClick();
6
- }, children: [label, iconSrc && (_jsx(Icon, { src: iconSrc }))] }));
7
- export default ViewMoreLink;
8
- //# sourceMappingURL=ViewMoreLink.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ViewMoreLink.js","sourceRoot":"","sources":["../../../src/authz-module/components/ViewMoreLink.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAQnD,MAAM,YAAY,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAqB,EAAE,EAAE,CAAC,CACvE,MAAC,SAAS,IACR,WAAW,EAAE,SAAS,EACtB,OAAO,EAAE,CAAC,CAAC,EAAE;QACX,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;IACZ,CAAC,aAEA,KAAK,EACL,OAAO,IAAI,CACV,KAAC,IAAI,IACH,GAAG,EAAE,OAAO,GACZ,CACH,IACS,CACb,CAAC;AAEF,eAAe,YAAY,CAAC","sourcesContent":["import React from 'react';\nimport { Hyperlink, Icon } from '@openedx/paragon';\n\ninterface ViewMoreLinkProps {\n label: string;\n onClick: () => void;\n iconSrc?: React.ComponentType | undefined;\n}\n\nconst ViewMoreLink = ({ label, onClick, iconSrc }: ViewMoreLinkProps) => (\n <Hyperlink\n destination={undefined}\n onClick={e => {\n e.preventDefault();\n onClick();\n }}\n >\n {label}\n {iconSrc && (\n <Icon\n src={iconSrc}\n />\n )}\n </Hyperlink>\n);\n\nexport default ViewMoreLink;\n"]}