@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.
- package/LICENSE +661 -0
- package/README.rst +164 -0
- package/dist/Main.d.ts +3 -0
- package/dist/Main.js +15 -0
- package/dist/Main.js.map +1 -0
- package/dist/app.d.ts +3 -0
- package/dist/app.js +10 -0
- package/dist/app.js.map +1 -0
- package/dist/authz-module/audit-user/index.d.ts +2 -0
- package/dist/authz-module/audit-user/index.js +191 -0
- package/dist/authz-module/audit-user/index.js.map +1 -0
- package/dist/authz-module/audit-user/messages.d.ts +58 -0
- package/dist/authz-module/audit-user/messages.js +60 -0
- package/dist/authz-module/audit-user/messages.js.map +1 -0
- package/dist/authz-module/authz-home/index.d.ts +2 -0
- package/dist/authz-module/authz-home/index.js +23 -0
- package/dist/authz-module/authz-home/index.js.map +1 -0
- package/dist/authz-module/authz-home/messages.d.ts +23 -0
- package/dist/authz-module/authz-home/messages.js +25 -0
- package/dist/authz-module/authz-home/messages.js.map +1 -0
- package/dist/authz-module/components/AddRoleButton.d.ts +6 -0
- package/dist/authz-module/components/AddRoleButton.js +22 -0
- package/dist/authz-module/components/AddRoleButton.js.map +1 -0
- package/dist/authz-module/components/AnchorButton.d.ts +2 -0
- package/dist/authz-module/components/AnchorButton.js +35 -0
- package/dist/authz-module/components/AnchorButton.js.map +1 -0
- package/dist/authz-module/components/AuthZLayout.d.ts +12 -0
- package/dist/authz-module/components/AuthZLayout.js +19 -0
- package/dist/authz-module/components/AuthZLayout.js.map +1 -0
- package/dist/authz-module/components/AuthZTitle.d.ts +20 -0
- package/dist/authz-module/components/AuthZTitle.js +22 -0
- package/dist/authz-module/components/AuthZTitle.js.map +1 -0
- package/dist/authz-module/components/ConfirmDeletionModal.d.ts +15 -0
- package/dist/authz-module/components/ConfirmDeletionModal.js +21 -0
- package/dist/authz-module/components/ConfirmDeletionModal.js.map +1 -0
- package/dist/authz-module/components/ErrorPage/index.d.ts +3 -0
- package/dist/authz-module/components/ErrorPage/index.js +59 -0
- package/dist/authz-module/components/ErrorPage/index.js.map +1 -0
- package/dist/authz-module/components/ErrorPage/messages.d.ts +53 -0
- package/dist/authz-module/components/ErrorPage/messages.js +55 -0
- package/dist/authz-module/components/ErrorPage/messages.js.map +1 -0
- package/dist/authz-module/components/PermissionTable.d.ts +9 -0
- package/dist/authz-module/components/PermissionTable.js +24 -0
- package/dist/authz-module/components/PermissionTable.js.map +1 -0
- package/dist/authz-module/components/RenderAdminRole.d.ts +5 -0
- package/dist/authz-module/components/RenderAdminRole.js +13 -0
- package/dist/authz-module/components/RenderAdminRole.js.map +1 -0
- package/dist/authz-module/components/RenderPermissionColumn.d.ts +6 -0
- package/dist/authz-module/components/RenderPermissionColumn.js +8 -0
- package/dist/authz-module/components/RenderPermissionColumn.js.map +1 -0
- package/dist/authz-module/components/RenderPermissionInLine.d.ts +6 -0
- package/dist/authz-module/components/RenderPermissionInLine.js +8 -0
- package/dist/authz-module/components/RenderPermissionInLine.js.map +1 -0
- package/dist/authz-module/components/ResourceTooltip.d.ts +11 -0
- package/dist/authz-module/components/ResourceTooltip.js +9 -0
- package/dist/authz-module/components/ResourceTooltip.js.map +1 -0
- package/dist/authz-module/components/RoleCard/constants.d.ts +14 -0
- package/dist/authz-module/components/RoleCard/constants.js +15 -0
- package/dist/authz-module/components/RoleCard/constants.js.map +1 -0
- package/dist/authz-module/components/RoleCard/messages.d.ts +73 -0
- package/dist/authz-module/components/RoleCard/messages.js +75 -0
- package/dist/authz-module/components/RoleCard/messages.js.map +1 -0
- package/dist/authz-module/components/TableCells.d.ts +29 -0
- package/dist/authz-module/components/TableCells.js +137 -0
- package/dist/authz-module/components/TableCells.js.map +1 -0
- package/dist/authz-module/components/TableControlBar/MultipleChoiceFilter.d.ts +3 -0
- package/dist/authz-module/components/TableControlBar/MultipleChoiceFilter.js +47 -0
- package/dist/authz-module/components/TableControlBar/MultipleChoiceFilter.js.map +1 -0
- package/dist/authz-module/components/TableControlBar/OrgFilter.d.ts +5 -0
- package/dist/authz-module/components/TableControlBar/OrgFilter.js +36 -0
- package/dist/authz-module/components/TableControlBar/OrgFilter.js.map +1 -0
- package/dist/authz-module/components/TableControlBar/RolesFilter.d.ts +4 -0
- package/dist/authz-module/components/TableControlBar/RolesFilter.js +29 -0
- package/dist/authz-module/components/TableControlBar/RolesFilter.js.map +1 -0
- package/dist/authz-module/components/TableControlBar/ScopesFilter.d.ts +4 -0
- package/dist/authz-module/components/TableControlBar/ScopesFilter.js +45 -0
- package/dist/authz-module/components/TableControlBar/ScopesFilter.js.map +1 -0
- package/dist/authz-module/components/TableControlBar/SearchFilter.d.ts +7 -0
- package/dist/authz-module/components/TableControlBar/SearchFilter.js +8 -0
- package/dist/authz-module/components/TableControlBar/SearchFilter.js.map +1 -0
- package/dist/authz-module/components/TableControlBar/TableControlBar.d.ts +5 -0
- package/dist/authz-module/components/TableControlBar/TableControlBar.js +99 -0
- package/dist/authz-module/components/TableControlBar/TableControlBar.js.map +1 -0
- package/dist/authz-module/components/TableControlBar/types.d.ts +18 -0
- package/dist/authz-module/components/TableControlBar/types.js +2 -0
- package/dist/authz-module/components/TableControlBar/types.js.map +1 -0
- package/dist/authz-module/components/TableFooter/TableFooter.d.ts +2 -0
- package/dist/authz-module/components/TableFooter/TableFooter.js +15 -0
- package/dist/authz-module/components/TableFooter/TableFooter.js.map +1 -0
- package/dist/authz-module/components/UserPermissions.d.ts +9 -0
- package/dist/authz-module/components/UserPermissions.js +56 -0
- package/dist/authz-module/components/UserPermissions.js.map +1 -0
- package/dist/authz-module/components/ViewMoreLink.d.ts +8 -0
- package/dist/authz-module/components/ViewMoreLink.js +8 -0
- package/dist/authz-module/components/ViewMoreLink.js.map +1 -0
- package/dist/authz-module/components/constants.d.ts +13 -0
- package/dist/authz-module/components/constants.js +80 -0
- package/dist/authz-module/components/constants.js.map +1 -0
- package/dist/authz-module/components/messages.d.ts +183 -0
- package/dist/authz-module/components/messages.js +185 -0
- package/dist/authz-module/components/messages.js.map +1 -0
- package/dist/authz-module/constants.d.ts +38 -0
- package/dist/authz-module/constants.js +77 -0
- package/dist/authz-module/constants.js.map +1 -0
- package/dist/authz-module/data/api.d.ts +109 -0
- package/dist/authz-module/data/api.js +107 -0
- package/dist/authz-module/data/api.js.map +1 -0
- package/dist/authz-module/data/hooks.d.ts +94 -0
- package/dist/authz-module/data/hooks.js +191 -0
- package/dist/authz-module/data/hooks.js.map +1 -0
- package/dist/authz-module/hooks/useCourseAuthoringFlag.d.ts +26 -0
- package/dist/authz-module/hooks/useCourseAuthoringFlag.js +86 -0
- package/dist/authz-module/hooks/useCourseAuthoringFlag.js.map +1 -0
- package/dist/authz-module/hooks/useQuerySettings.d.ts +27 -0
- package/dist/authz-module/hooks/useQuerySettings.js +72 -0
- package/dist/authz-module/hooks/useQuerySettings.js.map +1 -0
- package/dist/authz-module/hooks/useViewTeamPermissions.d.ts +5 -0
- package/dist/authz-module/hooks/useViewTeamPermissions.js +13 -0
- package/dist/authz-module/hooks/useViewTeamPermissions.js.map +1 -0
- package/dist/authz-module/index.d.ts +3 -0
- package/dist/authz-module/index.js +20 -0
- package/dist/authz-module/index.js.map +1 -0
- package/dist/authz-module/index.scss +131 -0
- package/dist/authz-module/messages.d.ts +48 -0
- package/dist/authz-module/messages.js +50 -0
- package/dist/authz-module/messages.js.map +1 -0
- package/dist/authz-module/role-assignation-wizard/AssignRoleWizard.d.ts +8 -0
- package/dist/authz-module/role-assignation-wizard/AssignRoleWizard.js +154 -0
- package/dist/authz-module/role-assignation-wizard/AssignRoleWizard.js.map +1 -0
- package/dist/authz-module/role-assignation-wizard/AssignRoleWizardPage.d.ts +2 -0
- package/dist/authz-module/role-assignation-wizard/AssignRoleWizardPage.js +39 -0
- package/dist/authz-module/role-assignation-wizard/AssignRoleWizardPage.js.map +1 -0
- package/dist/authz-module/role-assignation-wizard/components/DefineApplicationScopeStep.d.ts +8 -0
- package/dist/authz-module/role-assignation-wizard/components/DefineApplicationScopeStep.js +39 -0
- package/dist/authz-module/role-assignation-wizard/components/DefineApplicationScopeStep.js.map +1 -0
- package/dist/authz-module/role-assignation-wizard/components/HighlightedUsersInput.d.ts +11 -0
- package/dist/authz-module/role-assignation-wizard/components/HighlightedUsersInput.js +36 -0
- package/dist/authz-module/role-assignation-wizard/components/HighlightedUsersInput.js.map +1 -0
- package/dist/authz-module/role-assignation-wizard/components/OrgSection.d.ts +10 -0
- package/dist/authz-module/role-assignation-wizard/components/OrgSection.js +14 -0
- package/dist/authz-module/role-assignation-wizard/components/OrgSection.js.map +1 -0
- package/dist/authz-module/role-assignation-wizard/components/ScopeCheckboxItem.d.ts +8 -0
- package/dist/authz-module/role-assignation-wizard/components/ScopeCheckboxItem.js +5 -0
- package/dist/authz-module/role-assignation-wizard/components/ScopeCheckboxItem.js.map +1 -0
- package/dist/authz-module/role-assignation-wizard/components/ScopeFilterBar.d.ts +12 -0
- package/dist/authz-module/role-assignation-wizard/components/ScopeFilterBar.js +12 -0
- package/dist/authz-module/role-assignation-wizard/components/ScopeFilterBar.js.map +1 -0
- package/dist/authz-module/role-assignation-wizard/components/ScopeList.d.ts +20 -0
- package/dist/authz-module/role-assignation-wizard/components/ScopeList.js +30 -0
- package/dist/authz-module/role-assignation-wizard/components/ScopeList.js.map +1 -0
- package/dist/authz-module/role-assignation-wizard/components/SelectUsersAndRoleStep.d.ts +12 -0
- package/dist/authz-module/role-assignation-wizard/components/SelectUsersAndRoleStep.js +34 -0
- package/dist/authz-module/role-assignation-wizard/components/SelectUsersAndRoleStep.js.map +1 -0
- package/dist/authz-module/role-assignation-wizard/constants.d.ts +5 -0
- package/dist/authz-module/role-assignation-wizard/constants.js +6 -0
- package/dist/authz-module/role-assignation-wizard/constants.js.map +1 -0
- package/dist/authz-module/role-assignation-wizard/hooks/useScopeListData.d.ts +23 -0
- package/dist/authz-module/role-assignation-wizard/hooks/useScopeListData.js +112 -0
- package/dist/authz-module/role-assignation-wizard/hooks/useScopeListData.js.map +1 -0
- package/dist/authz-module/role-assignation-wizard/hooks/useScopePermissions.d.ts +10 -0
- package/dist/authz-module/role-assignation-wizard/hooks/useScopePermissions.js +54 -0
- package/dist/authz-module/role-assignation-wizard/hooks/useScopePermissions.js.map +1 -0
- package/dist/authz-module/role-assignation-wizard/messages.d.ts +243 -0
- package/dist/authz-module/role-assignation-wizard/messages.js +258 -0
- package/dist/authz-module/role-assignation-wizard/messages.js.map +1 -0
- package/dist/authz-module/role-assignation-wizard/utils.d.ts +5 -0
- package/dist/authz-module/role-assignation-wizard/utils.js +16 -0
- package/dist/authz-module/role-assignation-wizard/utils.js.map +1 -0
- package/dist/authz-module/roles-permissions/RolesPermissions.d.ts +2 -0
- package/dist/authz-module/roles-permissions/RolesPermissions.js +35 -0
- package/dist/authz-module/roles-permissions/RolesPermissions.js.map +1 -0
- package/dist/authz-module/roles-permissions/course/constants.d.ts +39 -0
- package/dist/authz-module/roles-permissions/course/constants.js +474 -0
- package/dist/authz-module/roles-permissions/course/constants.js.map +1 -0
- package/dist/authz-module/roles-permissions/index.d.ts +10 -0
- package/dist/authz-module/roles-permissions/index.js +15 -0
- package/dist/authz-module/roles-permissions/index.js.map +1 -0
- package/dist/authz-module/roles-permissions/library/constants.d.ts +18 -0
- package/dist/authz-module/roles-permissions/library/constants.js +193 -0
- package/dist/authz-module/roles-permissions/library/constants.js.map +1 -0
- package/dist/authz-module/roles-permissions/messages.d.ts +63 -0
- package/dist/authz-module/roles-permissions/messages.js +65 -0
- package/dist/authz-module/roles-permissions/messages.js.map +1 -0
- package/dist/authz-module/roles-permissions/utils.d.ts +41 -0
- package/dist/authz-module/roles-permissions/utils.js +70 -0
- package/dist/authz-module/roles-permissions/utils.js.map +1 -0
- package/dist/authz-module/team-members/TeamMembersTable.d.ts +5 -0
- package/dist/authz-module/team-members/TeamMembersTable.js +107 -0
- package/dist/authz-module/team-members/TeamMembersTable.js.map +1 -0
- package/dist/authz-module/team-members/messages.d.ts +33 -0
- package/dist/authz-module/team-members/messages.js +35 -0
- package/dist/authz-module/team-members/messages.js.map +1 -0
- package/dist/authz-module/utils.d.ts +24 -0
- package/dist/authz-module/utils.js +45 -0
- package/dist/authz-module/utils.js.map +1 -0
- package/dist/components/LoadingPage.d.ts +2 -0
- package/dist/components/LoadingPage.js +5 -0
- package/dist/components/LoadingPage.js.map +1 -0
- package/dist/components/ToastManager/ToastManagerContext.d.ts +24 -0
- package/dist/components/ToastManager/ToastManagerContext.js +91 -0
- package/dist/components/ToastManager/ToastManagerContext.js.map +1 -0
- package/dist/constants.d.ts +11 -0
- package/dist/constants.js +15 -0
- package/dist/constants.js.map +1 -0
- package/dist/data/api.d.ts +4 -0
- package/dist/data/api.js +21 -0
- package/dist/data/api.js.map +1 -0
- package/dist/data/hooks.d.ts +38 -0
- package/dist/data/hooks.js +69 -0
- package/dist/data/hooks.js.map +1 -0
- package/dist/data/types.d.ts +38 -0
- package/dist/data/types.js +2 -0
- package/dist/data/types.js.map +1 -0
- package/dist/data/utils.d.ts +6 -0
- package/dist/data/utils.js +11 -0
- package/dist/data/utils.js.map +1 -0
- package/dist/i18n/index.d.ts +1 -0
- package/dist/i18n/index.js +2 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/messages.d.ts +8 -0
- package/dist/messages.js +10 -0
- package/dist/messages.js.map +1 -0
- package/dist/providers.d.ts +3 -0
- package/dist/providers.js +4 -0
- package/dist/providers.js.map +1 -0
- package/dist/routes.d.ts +11 -0
- package/dist/routes.js +16 -0
- package/dist/routes.js.map +1 -0
- package/dist/style.scss +15 -0
- package/dist/types.d.ts +93 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +88 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
declare const messages: {
|
|
2
|
+
'authz.manage.page.title': {
|
|
3
|
+
id: string;
|
|
4
|
+
defaultMessage: string;
|
|
5
|
+
description: string;
|
|
6
|
+
};
|
|
7
|
+
'authz.breadcrumb.root': {
|
|
8
|
+
id: string;
|
|
9
|
+
defaultMessage: string;
|
|
10
|
+
description: string;
|
|
11
|
+
};
|
|
12
|
+
'authz.tabs.team': {
|
|
13
|
+
id: string;
|
|
14
|
+
defaultMessage: string;
|
|
15
|
+
description: string;
|
|
16
|
+
};
|
|
17
|
+
'authz.tabs.permissionsRoles': {
|
|
18
|
+
id: string;
|
|
19
|
+
defaultMessage: string;
|
|
20
|
+
description: string;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
export default messages;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { defineMessages } from '@openedx/frontend-base';
|
|
2
|
+
const messages = defineMessages({
|
|
3
|
+
'authz.manage.page.title': {
|
|
4
|
+
id: 'authz.manage.page.title',
|
|
5
|
+
defaultMessage: 'Roles and Permissions Management',
|
|
6
|
+
description: 'AuthZ home page title',
|
|
7
|
+
},
|
|
8
|
+
'authz.breadcrumb.root': {
|
|
9
|
+
id: 'authz.breadcrumb.root',
|
|
10
|
+
defaultMessage: 'Manage Access',
|
|
11
|
+
description: 'AuthZ root breadcrumb',
|
|
12
|
+
},
|
|
13
|
+
'authz.tabs.team': {
|
|
14
|
+
id: 'authz.tabs.team',
|
|
15
|
+
defaultMessage: 'Team Members',
|
|
16
|
+
description: 'AuthZ title for the team management tab',
|
|
17
|
+
},
|
|
18
|
+
'authz.tabs.permissionsRoles': {
|
|
19
|
+
id: 'authz.tabs.permissionsRoles',
|
|
20
|
+
defaultMessage: 'Roles and Permissions',
|
|
21
|
+
description: 'AuthZ title for the roles tab',
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
export default messages;
|
|
25
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/authz-module/authz-home/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,yBAAyB,EAAE;QACzB,EAAE,EAAE,yBAAyB;QAC7B,cAAc,EAAE,kCAAkC;QAClD,WAAW,EAAE,uBAAuB;KACrC;IACD,uBAAuB,EAAE;QACvB,EAAE,EAAE,uBAAuB;QAC3B,cAAc,EAAE,eAAe;QAC/B,WAAW,EAAE,uBAAuB;KACrC;IACD,iBAAiB,EAAE;QACjB,EAAE,EAAE,iBAAiB;QACrB,cAAc,EAAE,cAAc;QAC9B,WAAW,EAAE,yCAAyC;KACvD;IACD,6BAA6B,EAAE;QAC7B,EAAE,EAAE,6BAA6B;QACjC,cAAc,EAAE,uBAAuB;QACvC,WAAW,EAAE,+BAA+B;KAC7C;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n 'authz.manage.page.title': {\n id: 'authz.manage.page.title',\n defaultMessage: 'Roles and Permissions Management',\n description: 'AuthZ home page title',\n },\n 'authz.breadcrumb.root': {\n id: 'authz.breadcrumb.root',\n defaultMessage: 'Manage Access',\n description: 'AuthZ root breadcrumb',\n },\n 'authz.tabs.team': {\n id: 'authz.tabs.team',\n defaultMessage: 'Team Members',\n description: 'AuthZ title for the team management tab',\n },\n 'authz.tabs.permissionsRoles': {\n id: 'authz.tabs.permissionsRoles',\n defaultMessage: 'Roles and Permissions',\n description: 'AuthZ title for the roles tab',\n },\n});\n\nexport default messages;\n"]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useIntl } from '@openedx/frontend-base';
|
|
3
|
+
import { Button } from '@openedx/paragon';
|
|
4
|
+
import { Plus } from '@openedx/paragon/icons';
|
|
5
|
+
import { useNavigate } from 'react-router-dom';
|
|
6
|
+
import baseMessages from '../messages';
|
|
7
|
+
import { buildWizardPath } from '../constants';
|
|
8
|
+
import { useValidateUserPermissionsNonSuspense } from '../../data/hooks';
|
|
9
|
+
import { MANAGE_TEAM_PERMISSIONS } from '../roles-permissions';
|
|
10
|
+
const AddRoleButton = ({ presetUsername, from }) => {
|
|
11
|
+
const intl = useIntl();
|
|
12
|
+
const navigate = useNavigate();
|
|
13
|
+
const { data: permissionValidationResponse } = useValidateUserPermissionsNonSuspense(MANAGE_TEAM_PERMISSIONS);
|
|
14
|
+
const canAssignRole = permissionValidationResponse === null || permissionValidationResponse === void 0 ? void 0 : permissionValidationResponse.some((permission) => permission.allowed);
|
|
15
|
+
const handleClick = () => {
|
|
16
|
+
const path = buildWizardPath({ from, users: presetUsername });
|
|
17
|
+
navigate(path);
|
|
18
|
+
};
|
|
19
|
+
return (canAssignRole ? (_jsx(Button, { iconBefore: Plus, onClick: handleClick, children: intl.formatMessage(baseMessages['authz.management.assign.role.title']) })) : null);
|
|
20
|
+
};
|
|
21
|
+
export default AddRoleButton;
|
|
22
|
+
//# sourceMappingURL=AddRoleButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AddRoleButton.js","sourceRoot":"","sources":["../../../src/authz-module/components/AddRoleButton.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,YAAY,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,qCAAqC,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAO9E,MAAM,aAAa,GAAG,CAAC,EAAE,cAAc,EAAE,IAAI,EAAsB,EAAE,EAAE;IACrE,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAE/B,MAAM,EAAE,IAAI,EAAE,4BAA4B,EAAE,GAAG,qCAAqC,CAAC,uBAAuB,CAAC,CAAC;IAC9G,MAAM,aAAa,GAAG,4BAA4B,aAA5B,4BAA4B,uBAA5B,4BAA4B,CAAE,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAE7F,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,MAAM,IAAI,GAAG,eAAe,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QAC9D,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC,CAAC;IAEF,OAAO,CACL,aAAa,CAAC,CAAC,CAAC,CACd,KAAC,MAAM,IACL,UAAU,EAAE,IAAI,EAChB,OAAO,EAAE,WAAW,YAEnB,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,oCAAoC,CAAC,CAAC,GAChE,CACV,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACd,CAAC,CAAC;AAEF,eAAe,aAAa,CAAC","sourcesContent":["import { useIntl } from '@openedx/frontend-base';\nimport { Button } from '@openedx/paragon';\nimport { Plus } from '@openedx/paragon/icons';\nimport { useNavigate } from 'react-router-dom';\n\nimport baseMessages from '@src/authz-module/messages';\nimport { buildWizardPath } from '@src/authz-module/constants';\nimport { useValidateUserPermissionsNonSuspense } from '@src/data/hooks';\nimport { MANAGE_TEAM_PERMISSIONS } from '@src/authz-module/roles-permissions';\n\ninterface AddRoleButtonProps {\n presetUsername?: string;\n from?: string;\n}\n\nconst AddRoleButton = ({ presetUsername, from }: AddRoleButtonProps) => {\n const intl = useIntl();\n const navigate = useNavigate();\n\n const { data: permissionValidationResponse } = useValidateUserPermissionsNonSuspense(MANAGE_TEAM_PERMISSIONS);\n const canAssignRole = permissionValidationResponse?.some((permission) => permission.allowed);\n\n const handleClick = () => {\n const path = buildWizardPath({ from, users: presetUsername });\n navigate(path);\n };\n\n return (\n canAssignRole ? (\n <Button\n iconBefore={Plus}\n onClick={handleClick}\n >\n {intl.formatMessage(baseMessages['authz.management.assign.role.title'])}\n </Button>\n ) : null);\n};\n\nexport default AddRoleButton;\n"]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useIntl } from '@openedx/frontend-base';
|
|
3
|
+
import { ArrowUpward } from '@openedx/paragon/icons';
|
|
4
|
+
import { IconButton } from '@openedx/paragon';
|
|
5
|
+
import { useState, useEffect } from 'react';
|
|
6
|
+
import messages from './messages';
|
|
7
|
+
const AnchorButton = () => {
|
|
8
|
+
const [isVisible, setIsVisible] = useState(false);
|
|
9
|
+
const intl = useIntl();
|
|
10
|
+
const scrollToTopButton = () => {
|
|
11
|
+
window.scrollTo({
|
|
12
|
+
top: 0,
|
|
13
|
+
behavior: 'smooth',
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
const handleScroll = () => {
|
|
18
|
+
const scrollTop = window.scrollY;
|
|
19
|
+
setIsVisible(scrollTop > 300);
|
|
20
|
+
};
|
|
21
|
+
window.addEventListener('scroll', handleScroll);
|
|
22
|
+
return () => {
|
|
23
|
+
window.removeEventListener('scroll', handleScroll);
|
|
24
|
+
};
|
|
25
|
+
}, []);
|
|
26
|
+
if (!isVisible) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
return (_jsx(IconButton, { isActive: true, src: ArrowUpward, alt: intl.formatMessage(messages['authz.anchor.button.alt']), onClick: scrollToTopButton, variant: "primary", className: "mr-2 mb-2 fixed-bottom float-right", style: {
|
|
30
|
+
bottom: '20px',
|
|
31
|
+
left: 'calc(100% - 70px)',
|
|
32
|
+
} }));
|
|
33
|
+
};
|
|
34
|
+
export default AnchorButton;
|
|
35
|
+
//# sourceMappingURL=AnchorButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AnchorButton.js","sourceRoot":"","sources":["../../../src/authz-module/components/AnchorButton.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,YAAY,GAAG,GAAG,EAAE;IACxB,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,iBAAiB,GAAG,GAAG,EAAE;QAC7B,MAAM,CAAC,QAAQ,CAAC;YACd,GAAG,EAAE,CAAC;YACN,QAAQ,EAAE,QAAQ;SACnB,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,YAAY,GAAG,GAAG,EAAE;YACxB,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC;YACjC,YAAY,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC;QAChC,CAAC,CAAC;QAEF,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAChD,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACrD,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,KAAC,UAAU,IACT,QAAQ,QACR,GAAG,EAAE,WAAW,EAChB,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,EAC5D,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAC,SAAS,EACjB,SAAS,EAAC,oCAAoC,EAC9C,KAAK,EAAE;YACL,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,mBAAmB;SAC1B,GACD,CACH,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,YAAY,CAAC","sourcesContent":["import { useIntl } from '@openedx/frontend-base';\nimport { ArrowUpward } from '@openedx/paragon/icons';\nimport { IconButton } from '@openedx/paragon';\nimport { useState, useEffect } from 'react';\nimport messages from './messages';\n\nconst AnchorButton = () => {\n const [isVisible, setIsVisible] = useState(false);\n const intl = useIntl();\n const scrollToTopButton = () => {\n window.scrollTo({\n top: 0,\n behavior: 'smooth',\n });\n };\n\n useEffect(() => {\n const handleScroll = () => {\n const scrollTop = window.scrollY;\n setIsVisible(scrollTop > 300);\n };\n\n window.addEventListener('scroll', handleScroll);\n return () => {\n window.removeEventListener('scroll', handleScroll);\n };\n }, []);\n\n if (!isVisible) {\n return null;\n }\n\n return (\n <IconButton\n isActive\n src={ArrowUpward}\n alt={intl.formatMessage(messages['authz.anchor.button.alt'])}\n onClick={scrollToTopButton}\n variant=\"primary\"\n className=\"mr-2 mb-2 fixed-bottom float-right\"\n style={{\n bottom: '20px',\n left: 'calc(100% - 70px)',\n }}\n />\n );\n};\n\nexport default AnchorButton;\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { AuthZTitleProps } from './AuthZTitle';
|
|
3
|
+
interface AuthZLayoutProps extends AuthZTitleProps {
|
|
4
|
+
children: ReactNode;
|
|
5
|
+
context: {
|
|
6
|
+
id: string;
|
|
7
|
+
org: string;
|
|
8
|
+
title: string;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
declare const AuthZLayout: ({ children, ...props }: AuthZLayoutProps) => import("react").JSX.Element;
|
|
12
|
+
export default AuthZLayout;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
2
|
+
var t = {};
|
|
3
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
4
|
+
t[p] = s[p];
|
|
5
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
6
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
7
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
8
|
+
t[p[i]] = s[p[i]];
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
12
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
|
+
import AuthZTitle from './AuthZTitle';
|
|
14
|
+
const AuthZLayout = (_a) => {
|
|
15
|
+
var { children } = _a, props = __rest(_a, ["children"]);
|
|
16
|
+
return (_jsxs(_Fragment, { children: [_jsx(AuthZTitle, Object.assign({}, props)), children] }));
|
|
17
|
+
};
|
|
18
|
+
export default AuthZLayout;
|
|
19
|
+
//# sourceMappingURL=AuthZLayout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthZLayout.js","sourceRoot":"","sources":["../../../src/authz-module/components/AuthZLayout.tsx"],"names":[],"mappings":";;;;;;;;;;;;AACA,OAAO,UAA+B,MAAM,cAAc,CAAC;AAW3D,MAAM,WAAW,GAAG,CAAC,EAAwC,EAAE,EAAE;QAA5C,EAAE,QAAQ,OAA8B,EAAzB,KAAK,cAApB,YAAsB,CAAF;IAAyB,OAAA,CAChE,8BACE,KAAC,UAAU,oBAAK,KAAK,EAAI,EACxB,QAAQ,IACR,CAEJ,CAAA;CAAA,CAAC;AAEF,eAAe,WAAW,CAAC","sourcesContent":["import { ReactNode } from 'react';\nimport AuthZTitle, { AuthZTitleProps } from './AuthZTitle';\n\ninterface AuthZLayoutProps extends AuthZTitleProps {\n children: ReactNode;\n context: {\n id: string;\n org: string;\n title: string;\n };\n}\n\nconst AuthZLayout = ({ children, ...props }: AuthZLayoutProps) => (\n <>\n <AuthZTitle {...props} />\n {children}\n </>\n\n);\n\nexport default AuthZLayout;\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ComponentType, ReactNode } from 'react';
|
|
2
|
+
interface BreadcrumbLink {
|
|
3
|
+
label: string;
|
|
4
|
+
to?: string;
|
|
5
|
+
}
|
|
6
|
+
interface Action {
|
|
7
|
+
label: string;
|
|
8
|
+
icon?: ComponentType;
|
|
9
|
+
onClick: () => void;
|
|
10
|
+
}
|
|
11
|
+
export interface AuthZTitleProps {
|
|
12
|
+
activeLabel?: string;
|
|
13
|
+
pageTitle: string;
|
|
14
|
+
pageSubtitle: string | ReactNode;
|
|
15
|
+
navLinks?: BreadcrumbLink[];
|
|
16
|
+
actions?: (Action | ReactNode)[];
|
|
17
|
+
}
|
|
18
|
+
export declare const ActionButton: ({ label, icon, onClick }: Action) => import("react").JSX.Element;
|
|
19
|
+
declare const AuthZTitle: ({ activeLabel, navLinks, pageTitle, pageSubtitle, actions, }: AuthZTitleProps) => import("react").JSX.Element;
|
|
20
|
+
export default AuthZTitle;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { isValidElement, Fragment, } from 'react';
|
|
3
|
+
import { Link } from 'react-router-dom';
|
|
4
|
+
import { Breadcrumb, Col, Container, Row, Button, Stack, useMediaQuery, breakpoints, } from '@openedx/paragon';
|
|
5
|
+
export const ActionButton = ({ label, icon, onClick }) => (_jsx(Button, { iconBefore: icon, onClick: onClick, children: label }));
|
|
6
|
+
const AuthZTitle = ({ activeLabel, navLinks = [], pageTitle, pageSubtitle, actions = [], }) => {
|
|
7
|
+
const isDesktop = useMediaQuery({ minWidth: breakpoints.large.minWidth });
|
|
8
|
+
return (_jsxs(Container, { className: "p-5 bg-light-100", children: [_jsx(Breadcrumb, { linkAs: Link, links: navLinks, activeLabel: activeLabel }), _jsxs(Row, { className: "mt-4", children: [_jsx(Col, { xs: 12, md: 7, className: "mb-4", children: _jsxs("div", { className: "d-flex align-items-center flex-column-sm", children: [_jsx("h2", { className: "text-primary mb-0", children: pageTitle }), typeof pageSubtitle === 'string'
|
|
9
|
+
? _jsxs(_Fragment, { children: [" ", pageSubtitle !== '' && _jsx("hr", { className: "mx-lg-3" }), _jsx("h3", { className: "mb-0 py-2 font-weight-light text-gray-700", children: pageSubtitle })] })
|
|
10
|
+
: _jsxs(_Fragment, { children: [pageSubtitle !== '' && _jsx("hr", { className: "mx-lg-3" }), " ", _jsx("div", { className: "mb-0", children: pageSubtitle })] })] }) }), _jsx(Col, { xs: 12, md: 5, children: _jsx(Stack, { className: "justify-content-end", direction: isDesktop ? 'horizontal' : 'vertical', children: actions.map((action, index) => {
|
|
11
|
+
const content = isValidElement(action)
|
|
12
|
+
? action
|
|
13
|
+
: _jsx(ActionButton, Object.assign({}, action));
|
|
14
|
+
const key = isValidElement(action)
|
|
15
|
+
? action.key
|
|
16
|
+
: action.label;
|
|
17
|
+
return (_jsxs(Fragment, { children: [content, (index === actions.length - 1) ? null
|
|
18
|
+
: (_jsx("hr", { className: "mx-lg-5" }))] }, `authz-header-action-${key}`));
|
|
19
|
+
}) }) })] })] }));
|
|
20
|
+
};
|
|
21
|
+
export default AuthZTitle;
|
|
22
|
+
//# sourceMappingURL=AuthZTitle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthZTitle.js","sourceRoot":"","sources":["../../../src/authz-module/components/AuthZTitle.tsx"],"names":[],"mappings":";AAAA,OAAO,EACU,cAAc,EAAa,QAAQ,GACnD,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EACL,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EACvC,KAAK,EACL,aAAa,EACb,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAqB1B,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAU,EAAE,EAAE,CAAC,CAChE,KAAC,MAAM,IACL,UAAU,EAAE,IAAI,EAChB,OAAO,EAAE,OAAO,YAEf,KAAK,GACC,CACV,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,EAClB,WAAW,EAAE,QAAQ,GAAG,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,GAAG,EAAE,GACjD,EAAE,EAAE;IACpB,MAAM,SAAS,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC1E,OAAO,CACL,MAAC,SAAS,IAAC,SAAS,EAAC,kBAAkB,aACrC,KAAC,UAAU,IACT,MAAM,EAAE,IAAI,EACZ,KAAK,EAAE,QAAQ,EACf,WAAW,EAAE,WAAW,GACxB,EACF,MAAC,GAAG,IAAC,SAAS,EAAC,MAAM,aACnB,KAAC,GAAG,IAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,SAAS,EAAC,MAAM,YAClC,eAAK,SAAS,EAAC,0CAA0C,aACvD,aAAI,SAAS,EAAC,mBAAmB,YAAE,SAAS,GAAM,EACjD,OAAO,YAAY,KAAK,QAAQ;oCAC/B,CAAC,CAAC,mCAAK,YAAY,KAAK,EAAE,IAAI,aAAI,SAAS,EAAC,SAAS,GAAG,EAAE,aAAI,SAAS,EAAC,2CAA2C,YAAE,YAAY,GAAM,IAAG;oCAC1I,CAAC,CAAC,8BAAI,YAAY,KAAK,EAAE,IAAI,aAAI,SAAS,EAAC,SAAS,GAAG,OAAG,cAAK,SAAS,EAAC,MAAM,YAAE,YAAY,GAAO,IAAG,IAErG,GACF,EACN,KAAC,GAAG,IAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,YAChB,KAAC,KAAK,IAAC,SAAS,EAAC,qBAAqB,EAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,YAEnF,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gCAC5B,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC;oCACpC,CAAC,CAAC,MAAM;oCACR,CAAC,CAAC,KAAC,YAAY,oBAAK,MAAgB,EAAI,CAAC;gCAC3C,MAAM,GAAG,GAAG,cAAc,CAAC,MAAM,CAAC;oCAChC,CAAC,CAAC,MAAM,CAAC,GAAG;oCACZ,CAAC,CAAE,MAAiB,CAAC,KAAK,CAAC;gCAC7B,OAAO,CACL,MAAC,QAAQ,eACN,OAAO,EACP,CAAC,KAAK,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;4CACpC,CAAC,CAAC,CAAC,aAAI,SAAS,EAAC,SAAS,GAAG,CAAC,KAHnB,uBAAuB,GAAG,EAAE,CAIhC,CACZ,CAAC;4BACJ,CAAC,CAAC,GAEE,GACJ,IACF,IACI,CACb,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,UAAU,CAAC","sourcesContent":["import {\n ComponentType, isValidElement, ReactNode, Fragment,\n} from 'react';\nimport { Link } from 'react-router-dom';\nimport {\n Breadcrumb, Col, Container, Row, Button,\n Stack,\n useMediaQuery,\n breakpoints,\n} from '@openedx/paragon';\n\ninterface BreadcrumbLink {\n label: string;\n to?: string;\n}\n\ninterface Action {\n label: string;\n icon?: ComponentType;\n onClick: () => void;\n}\n\nexport interface AuthZTitleProps {\n activeLabel?: string;\n pageTitle: string;\n pageSubtitle: string | ReactNode;\n navLinks?: BreadcrumbLink[];\n actions?: (Action | ReactNode)[];\n}\n\nexport const ActionButton = ({ label, icon, onClick }: Action) => (\n <Button\n iconBefore={icon}\n onClick={onClick}\n >\n {label}\n </Button>\n);\n\nconst AuthZTitle = ({\n activeLabel, navLinks = [], pageTitle, pageSubtitle, actions = [],\n}: AuthZTitleProps) => {\n const isDesktop = useMediaQuery({ minWidth: breakpoints.large.minWidth });\n return (\n <Container className=\"p-5 bg-light-100\">\n <Breadcrumb\n linkAs={Link}\n links={navLinks}\n activeLabel={activeLabel}\n />\n <Row className=\"mt-4\">\n <Col xs={12} md={7} className=\"mb-4\">\n <div className=\"d-flex align-items-center flex-column-sm\">\n <h2 className=\"text-primary mb-0\">{pageTitle}</h2>\n {typeof pageSubtitle === 'string'\n ? <> { pageSubtitle !== '' && <hr className=\"mx-lg-3\" /> }<h3 className=\"mb-0 py-2 font-weight-light text-gray-700\">{pageSubtitle}</h3></>\n : <>{ pageSubtitle !== '' && <hr className=\"mx-lg-3\" /> } <div className=\"mb-0\">{pageSubtitle}</div></>}\n\n </div>\n </Col>\n <Col xs={12} md={5}>\n <Stack className=\"justify-content-end\" direction={isDesktop ? 'horizontal' : 'vertical'}>\n {\n actions.map((action, index) => {\n const content = isValidElement(action)\n ? action\n : <ActionButton {...action as Action} />;\n const key = isValidElement(action)\n ? action.key\n : (action as Action).label;\n return (\n <Fragment key={`authz-header-action-${key}`}>\n {content}\n {(index === actions.length - 1) ? null\n : (<hr className=\"mx-lg-5\" />)}\n </Fragment>\n );\n })\n }\n </Stack>\n </Col>\n </Row>\n </Container>\n );\n};\n\nexport default AuthZTitle;\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
interface ConfirmDeletionModalProps {
|
|
2
|
+
isOpen: boolean;
|
|
3
|
+
close: () => void;
|
|
4
|
+
onSave: () => void;
|
|
5
|
+
isDeleting?: boolean;
|
|
6
|
+
context: {
|
|
7
|
+
userName: string;
|
|
8
|
+
scope: string;
|
|
9
|
+
role: string;
|
|
10
|
+
name?: string;
|
|
11
|
+
rolesCount: number;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
declare const ConfirmDeletionModal: ({ isOpen, close, onSave, isDeleting, context, }: ConfirmDeletionModalProps) => import("react").JSX.Element;
|
|
15
|
+
export default ConfirmDeletionModal;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { ActionRow, AlertModal, Icon, ModalDialog, Stack, StatefulButton, } from '@openedx/paragon';
|
|
3
|
+
import { useIntl } from '@openedx/frontend-base';
|
|
4
|
+
import { SpinnerSimple } from '@openedx/paragon/icons';
|
|
5
|
+
import messages from './messages';
|
|
6
|
+
const ConfirmDeletionModal = ({ isOpen, close, onSave, isDeleting, context, }) => {
|
|
7
|
+
var _a;
|
|
8
|
+
const intl = useIntl();
|
|
9
|
+
return (_jsx(AlertModal, { title: intl.formatMessage(messages['authz.team.remove.user.modal.title']), isOpen: isOpen, onClose: close, size: "lg", footerNode: (_jsxs(ActionRow, { children: [_jsx(ModalDialog.CloseButton, { variant: "tertiary", children: intl.formatMessage(messages['authz.manage.cancel.button']) }), _jsx(StatefulButton, { className: "px-4", variant: "danger", labels: {
|
|
10
|
+
default: intl.formatMessage(messages['authz.manage.remove.button']),
|
|
11
|
+
pending: intl.formatMessage(messages['authz.manage.removing.button']),
|
|
12
|
+
}, icons: {
|
|
13
|
+
pending: _jsx(Icon, { src: SpinnerSimple }),
|
|
14
|
+
}, state: isDeleting ? 'pending' : 'default', onClick: () => onSave(), disabledStates: ['pending'] })] })), isOverflowVisible: false, children: _jsxs(Stack, { gap: 3, children: [_jsx("p", { children: intl.formatMessage(messages['authz.team.remove.user.modal.body.1'], {
|
|
15
|
+
userName: context.userName,
|
|
16
|
+
scope: context.scope,
|
|
17
|
+
role: (_a = context.name) !== null && _a !== void 0 ? _a : context.role,
|
|
18
|
+
}) }), context.rolesCount === 1 && (_jsx("p", { children: intl.formatMessage(messages['authz.team.remove.user.modal.body.2']) })), _jsx("p", { children: intl.formatMessage(messages['authz.team.remove.user.modal.body.3']) })] }) }));
|
|
19
|
+
};
|
|
20
|
+
export default ConfirmDeletionModal;
|
|
21
|
+
//# sourceMappingURL=ConfirmDeletionModal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfirmDeletionModal.js","sourceRoot":"","sources":["../../../src/authz-module/components/ConfirmDeletionModal.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAC/C,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAgBlC,MAAM,oBAAoB,GAAG,CAAC,EAC5B,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAChB,EAAE,EAAE;;IAC9B,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,OAAO,CACL,KAAC,UAAU,IACT,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,oCAAoC,CAAC,CAAC,EACzE,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,KAAK,EACd,IAAI,EAAC,IAAI,EACT,UAAU,EAAE,CACV,MAAC,SAAS,eACR,KAAC,WAAW,CAAC,WAAW,IAAC,OAAO,EAAC,UAAU,YACxC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,4BAA4B,CAAC,CAAC,GACnC,EAC1B,KAAC,cAAc,IACb,SAAS,EAAC,MAAM,EAChB,OAAO,EAAC,QAAQ,EAChB,MAAM,EAAE;wBACN,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,4BAA4B,CAAC,CAAC;wBACnE,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,8BAA8B,CAAC,CAAC;qBACtE,EACD,KAAK,EAAE;wBACL,OAAO,EAAE,KAAC,IAAI,IAAC,GAAG,EAAE,aAAa,GAAI;qBACtC,EACD,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EACzC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,EACvB,cAAc,EAAE,CAAC,SAAS,CAAC,GAC3B,IACQ,CACb,EACD,iBAAiB,EAAE,KAAK,YAExB,MAAC,KAAK,IAAC,GAAG,EAAE,CAAC,aACX,sBAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,qCAAqC,CAAC,EAAE;wBACtE,QAAQ,EAAE,OAAO,CAAC,QAAQ;wBAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;wBACpB,IAAI,EAAE,MAAA,OAAO,CAAC,IAAI,mCAAI,OAAO,CAAC,IAAI;qBACnC,CAAC,GACE,EACH,OAAO,CAAC,UAAU,KAAK,CAAC,IAAI,CAC3B,sBAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,qCAAqC,CAAC,CAAC,GAAK,CAC7E,EACD,sBAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,qCAAqC,CAAC,CAAC,GAAK,IACtE,GAEG,CACd,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,oBAAoB,CAAC","sourcesContent":["import {\n ActionRow, AlertModal, Icon, ModalDialog, Stack,\n StatefulButton,\n} from '@openedx/paragon';\nimport { useIntl } from '@openedx/frontend-base';\n\nimport { SpinnerSimple } from '@openedx/paragon/icons';\nimport messages from './messages';\n\ninterface ConfirmDeletionModalProps {\n isOpen: boolean;\n close: () => void;\n onSave: () => void;\n isDeleting?: boolean;\n context: {\n userName: string;\n scope: string;\n role: string;\n name?: string;\n rolesCount: number;\n };\n}\n\nconst ConfirmDeletionModal = ({\n isOpen, close, onSave, isDeleting, context,\n}: ConfirmDeletionModalProps) => {\n const intl = useIntl();\n return (\n <AlertModal\n title={intl.formatMessage(messages['authz.team.remove.user.modal.title'])}\n isOpen={isOpen}\n onClose={close}\n size=\"lg\"\n footerNode={(\n <ActionRow>\n <ModalDialog.CloseButton variant=\"tertiary\">\n {intl.formatMessage(messages['authz.manage.cancel.button'])}\n </ModalDialog.CloseButton>\n <StatefulButton\n className=\"px-4\"\n variant=\"danger\"\n labels={{\n default: intl.formatMessage(messages['authz.manage.remove.button']),\n pending: intl.formatMessage(messages['authz.manage.removing.button']),\n }}\n icons={{\n pending: <Icon src={SpinnerSimple} />,\n }}\n state={isDeleting ? 'pending' : 'default'}\n onClick={() => onSave()}\n disabledStates={['pending']}\n />\n </ActionRow>\n )}\n isOverflowVisible={false}\n >\n <Stack gap={3}>\n <p>{intl.formatMessage(messages['authz.team.remove.user.modal.body.1'], {\n userName: context.userName,\n scope: context.scope,\n role: context.name ?? context.role,\n })}\n </p>\n {context.rolesCount === 1 && (\n <p>{intl.formatMessage(messages['authz.team.remove.user.modal.body.2'])}</p>\n )}\n <p>{intl.formatMessage(messages['authz.team.remove.user.modal.body.3'])}</p>\n </Stack>\n\n </AlertModal>\n );\n};\n\nexport default ConfirmDeletionModal;\n"]}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { getUrlByRouteRole, useIntl } from '@openedx/frontend-base';
|
|
4
|
+
import { Button, Container, Hyperlink, Row, } from '@openedx/paragon';
|
|
5
|
+
import { CustomErrors, ERROR_STATUS, STATUS_400, STATUS_404, } from '../../../constants';
|
|
6
|
+
import { getHttpErrorStatus } from '../../../data/utils';
|
|
7
|
+
import messages from './messages';
|
|
8
|
+
const getErrorConfig = ({ errorMessage, errorStatus }) => {
|
|
9
|
+
if (errorMessage === CustomErrors.NO_ACCESS || ERROR_STATUS.NO_ACCESS.includes(errorStatus)) {
|
|
10
|
+
return ({
|
|
11
|
+
title: messages['error.page.title.noAccess'],
|
|
12
|
+
description: messages['error.page.message.noAccess'],
|
|
13
|
+
statusCode: errorStatus || ERROR_STATUS.NO_ACCESS[0],
|
|
14
|
+
showBackButton: true,
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
// 400 errors are handled as 404 Not Found to avoid exposing potential sensitive information
|
|
18
|
+
// about the existence of resources and handling malformed library ids in the URL
|
|
19
|
+
if (errorMessage === CustomErrors.NOT_FOUND || ERROR_STATUS.NOT_FOUND.includes(errorStatus)) {
|
|
20
|
+
const statusCode = errorStatus === STATUS_400 ? STATUS_404 : errorStatus;
|
|
21
|
+
return ({
|
|
22
|
+
title: messages['error.page.title.notFound'],
|
|
23
|
+
description: messages['error.page.message.notFound'],
|
|
24
|
+
statusCode: statusCode || STATUS_404,
|
|
25
|
+
showBackButton: true,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
if (errorMessage === CustomErrors.SERVER_ERROR || ERROR_STATUS.SERVER_ERROR.includes(errorStatus)) {
|
|
29
|
+
return ({
|
|
30
|
+
title: messages['error.page.title.server'],
|
|
31
|
+
description: messages['error.page.message.server'],
|
|
32
|
+
statusCode: errorStatus || ERROR_STATUS.SERVER_ERROR[0],
|
|
33
|
+
showBackButton: true,
|
|
34
|
+
showReloadButton: true,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
return ({
|
|
38
|
+
title: messages['error.page.title.generic'],
|
|
39
|
+
description: messages['error.page.message.generic'],
|
|
40
|
+
showBackButton: true,
|
|
41
|
+
showReloadButton: true,
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
const ErrorPage = ({ error, resetErrorBoundary }) => {
|
|
45
|
+
var _a;
|
|
46
|
+
const intl = useIntl();
|
|
47
|
+
const [reloading, setReloading] = useState(false);
|
|
48
|
+
const errorStatus = getHttpErrorStatus(error);
|
|
49
|
+
const errorMessage = error === null || error === void 0 ? void 0 : error.message;
|
|
50
|
+
const { title, description, statusCode, showBackButton, showReloadButton, } = getErrorConfig({ errorMessage, errorStatus });
|
|
51
|
+
const handleReload = () => {
|
|
52
|
+
setReloading(true);
|
|
53
|
+
resetErrorBoundary();
|
|
54
|
+
};
|
|
55
|
+
return (_jsxs(Container, { className: "d-flex flex-column align-items-center justify-content-center min-vh-100 bg-light-200", children: [_jsx("h1", { className: "display-4 text-primary-200", children: statusCode }), _jsx("h1", { className: "text-primary", children: intl.formatMessage(title) }), _jsx("p", { children: intl.formatMessage(description) }), _jsxs(Row, { children: [showReloadButton && (_jsx(Button, { className: "m-2", disabled: reloading, onClick: handleReload, children: intl.formatMessage(messages['error.page.action.reload']) })), showBackButton && (_jsx(Button, { as: Hyperlink, destination: (_a = getUrlByRouteRole('org.openedx.frontend.role.courseAuthoring')) !== null && _a !== void 0 ? _a : undefined, className: "m-2", variant: showReloadButton ? 'outline-primary' : 'primary', children: intl.formatMessage(messages['error.page.action.back']) }))] })] }));
|
|
56
|
+
};
|
|
57
|
+
const ErrorFallback = (props) => _jsx(ErrorPage, Object.assign({}, props));
|
|
58
|
+
export default ErrorFallback;
|
|
59
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/authz-module/components/ErrorPage/index.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useState } from 'react';\nimport { FallbackProps } from 'react-error-boundary';\nimport { getUrlByRouteRole, useIntl } from '@openedx/frontend-base';\nimport {\n Button, Container, Hyperlink, Row,\n} from '@openedx/paragon';\nimport {\n CustomErrors, ERROR_STATUS, STATUS_400, STATUS_404,\n} from '@src/constants';\nimport { getHttpErrorStatus } from '@src/data/utils';\n\nimport messages from './messages';\n\nconst getErrorConfig = ({ errorMessage, errorStatus }) => {\n if (errorMessage === CustomErrors.NO_ACCESS || ERROR_STATUS.NO_ACCESS.includes(errorStatus)) {\n return ({\n title: messages['error.page.title.noAccess'],\n description: messages['error.page.message.noAccess'],\n statusCode: errorStatus || ERROR_STATUS.NO_ACCESS[0],\n showBackButton: true,\n });\n }\n // 400 errors are handled as 404 Not Found to avoid exposing potential sensitive information\n // about the existence of resources and handling malformed library ids in the URL\n if (errorMessage === CustomErrors.NOT_FOUND || ERROR_STATUS.NOT_FOUND.includes(errorStatus)) {\n const statusCode = errorStatus === STATUS_400 ? STATUS_404 : errorStatus;\n return ({\n title: messages['error.page.title.notFound'],\n description: messages['error.page.message.notFound'],\n statusCode: statusCode || STATUS_404,\n showBackButton: true,\n });\n }\n if (errorMessage === CustomErrors.SERVER_ERROR || ERROR_STATUS.SERVER_ERROR.includes(errorStatus)) {\n return ({\n title: messages['error.page.title.server'],\n description: messages['error.page.message.server'],\n statusCode: errorStatus || ERROR_STATUS.SERVER_ERROR[0],\n showBackButton: true,\n showReloadButton: true,\n });\n }\n return ({\n title: messages['error.page.title.generic'],\n description: messages['error.page.message.generic'],\n showBackButton: true,\n showReloadButton: true,\n });\n};\n\nconst ErrorPage = ({ error, resetErrorBoundary }: FallbackProps) => {\n const intl = useIntl();\n const [reloading, setReloading] = useState(false);\n\n const errorStatus = getHttpErrorStatus(error);\n const errorMessage: string = error?.message;\n const {\n title, description, statusCode, showBackButton, showReloadButton,\n } = getErrorConfig({ errorMessage, errorStatus });\n\n const handleReload = () => {\n setReloading(true);\n resetErrorBoundary();\n };\n return (\n <Container className=\"d-flex flex-column align-items-center justify-content-center min-vh-100 bg-light-200\">\n <h1 className=\"display-4 text-primary-200\">{statusCode}</h1>\n <h1 className=\"text-primary\">{intl.formatMessage(title)}</h1>\n <p>{intl.formatMessage(description)}</p>\n <Row>\n {showReloadButton && (\n <Button\n className=\"m-2\"\n disabled={reloading}\n onClick={handleReload}\n >\n {intl.formatMessage(messages['error.page.action.reload'])}\n </Button>\n )}\n {showBackButton && (\n <Button\n as={Hyperlink}\n destination={getUrlByRouteRole('org.openedx.frontend.role.courseAuthoring') ?? undefined}\n className=\"m-2\"\n variant={showReloadButton ? 'outline-primary' : 'primary'}\n >\n {intl.formatMessage(messages['error.page.action.back'])}\n </Button>\n )}\n\n </Row>\n </Container>\n );\n};\n\nconst ErrorFallback = (props: FallbackProps) => <ErrorPage {...props} />;\nexport default ErrorFallback;\n"]}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
declare const messages: {
|
|
2
|
+
'error.page.title.noAccess': {
|
|
3
|
+
id: string;
|
|
4
|
+
defaultMessage: string;
|
|
5
|
+
description: string;
|
|
6
|
+
};
|
|
7
|
+
'error.page.message.noAccess': {
|
|
8
|
+
id: string;
|
|
9
|
+
defaultMessage: string;
|
|
10
|
+
description: string;
|
|
11
|
+
};
|
|
12
|
+
'error.page.title.notFound': {
|
|
13
|
+
id: string;
|
|
14
|
+
defaultMessage: string;
|
|
15
|
+
description: string;
|
|
16
|
+
};
|
|
17
|
+
'error.page.message.notFound': {
|
|
18
|
+
id: string;
|
|
19
|
+
defaultMessage: string;
|
|
20
|
+
description: string;
|
|
21
|
+
};
|
|
22
|
+
'error.page.title.server': {
|
|
23
|
+
id: string;
|
|
24
|
+
defaultMessage: string;
|
|
25
|
+
description: string;
|
|
26
|
+
};
|
|
27
|
+
'error.page.message.server': {
|
|
28
|
+
id: string;
|
|
29
|
+
defaultMessage: string;
|
|
30
|
+
description: string;
|
|
31
|
+
};
|
|
32
|
+
'error.page.title.generic': {
|
|
33
|
+
id: string;
|
|
34
|
+
defaultMessage: string;
|
|
35
|
+
description: string;
|
|
36
|
+
};
|
|
37
|
+
'error.page.message.generic': {
|
|
38
|
+
id: string;
|
|
39
|
+
defaultMessage: string;
|
|
40
|
+
description: string;
|
|
41
|
+
};
|
|
42
|
+
'error.page.action.reload': {
|
|
43
|
+
id: string;
|
|
44
|
+
defaultMessage: string;
|
|
45
|
+
description: string;
|
|
46
|
+
};
|
|
47
|
+
'error.page.action.back': {
|
|
48
|
+
id: string;
|
|
49
|
+
defaultMessage: string;
|
|
50
|
+
description: string;
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
export default messages;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { defineMessages } from '@openedx/frontend-base';
|
|
2
|
+
const messages = defineMessages({
|
|
3
|
+
'error.page.title.noAccess': {
|
|
4
|
+
id: 'error.page.tile.noAccess',
|
|
5
|
+
defaultMessage: 'Access Denied',
|
|
6
|
+
description: 'Title error when user does not have access to view',
|
|
7
|
+
},
|
|
8
|
+
'error.page.message.noAccess': {
|
|
9
|
+
id: 'error.page.message.noAccess',
|
|
10
|
+
defaultMessage: 'You do not have permission to view this page.',
|
|
11
|
+
description: 'Error message when user does not have access to view',
|
|
12
|
+
},
|
|
13
|
+
'error.page.title.notFound': {
|
|
14
|
+
id: 'error.page.tile.notFound',
|
|
15
|
+
defaultMessage: 'Page Not Found',
|
|
16
|
+
description: 'Error the resource is not found',
|
|
17
|
+
},
|
|
18
|
+
'error.page.message.notFound': {
|
|
19
|
+
id: 'error.page.message.notFound',
|
|
20
|
+
defaultMessage: 'The resource you are looking for could not be found.',
|
|
21
|
+
description: 'Error message when the resource is not found',
|
|
22
|
+
},
|
|
23
|
+
'error.page.title.server': {
|
|
24
|
+
id: 'error.page.tile.server',
|
|
25
|
+
defaultMessage: 'Something went wrong',
|
|
26
|
+
description: 'Title for server error',
|
|
27
|
+
},
|
|
28
|
+
'error.page.message.server': {
|
|
29
|
+
id: 'error.page.message.server.error',
|
|
30
|
+
defaultMessage: 'We\'re experiencing an internal server problem. Please try again later',
|
|
31
|
+
description: 'Server error message for unexpected errors',
|
|
32
|
+
},
|
|
33
|
+
'error.page.title.generic': {
|
|
34
|
+
id: 'error.page.tile.generic',
|
|
35
|
+
defaultMessage: 'Something went wrong',
|
|
36
|
+
description: 'Title for unexpected error',
|
|
37
|
+
},
|
|
38
|
+
'error.page.message.generic': {
|
|
39
|
+
id: 'error.page.message.server',
|
|
40
|
+
defaultMessage: 'An unexpected error occurred. Please click the button below to refresh the page.',
|
|
41
|
+
description: 'Error message for unexpected errors',
|
|
42
|
+
},
|
|
43
|
+
'error.page.action.reload': {
|
|
44
|
+
id: 'error.page.action.reload',
|
|
45
|
+
defaultMessage: 'Reload Page',
|
|
46
|
+
description: 'Label for reload action',
|
|
47
|
+
},
|
|
48
|
+
'error.page.action.back': {
|
|
49
|
+
id: 'error.page.action.back',
|
|
50
|
+
defaultMessage: 'Back to Studio',
|
|
51
|
+
description: 'Label for return to Studio action',
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
export default messages;
|
|
55
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../src/authz-module/components/ErrorPage/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,2BAA2B,EAAE;QAC3B,EAAE,EAAE,0BAA0B;QAC9B,cAAc,EAAE,eAAe;QAC/B,WAAW,EAAE,oDAAoD;KAClE;IACD,6BAA6B,EAAE;QAC7B,EAAE,EAAE,6BAA6B;QACjC,cAAc,EAAE,+CAA+C;QAC/D,WAAW,EAAE,sDAAsD;KACpE;IACD,2BAA2B,EAAE;QAC3B,EAAE,EAAE,0BAA0B;QAC9B,cAAc,EAAE,gBAAgB;QAChC,WAAW,EAAE,iCAAiC;KAC/C;IACD,6BAA6B,EAAE;QAC7B,EAAE,EAAE,6BAA6B;QACjC,cAAc,EAAE,sDAAsD;QACtE,WAAW,EAAE,8CAA8C;KAC5D;IACD,yBAAyB,EAAE;QACzB,EAAE,EAAE,wBAAwB;QAC5B,cAAc,EAAE,sBAAsB;QACtC,WAAW,EAAE,wBAAwB;KACtC;IACD,2BAA2B,EAAE;QAC3B,EAAE,EAAE,iCAAiC;QACrC,cAAc,EAAE,wEAAwE;QACxF,WAAW,EAAE,4CAA4C;KAC1D;IACD,0BAA0B,EAAE;QAC1B,EAAE,EAAE,yBAAyB;QAC7B,cAAc,EAAE,sBAAsB;QACtC,WAAW,EAAE,4BAA4B;KAC1C;IACD,4BAA4B,EAAE;QAC5B,EAAE,EAAE,2BAA2B;QAC/B,cAAc,EAAE,kFAAkF;QAClG,WAAW,EAAE,qCAAqC;KACnD;IACD,0BAA0B,EAAE;QAC1B,EAAE,EAAE,0BAA0B;QAC9B,cAAc,EAAE,aAAa;QAC7B,WAAW,EAAE,yBAAyB;KACvC;IACD,wBAAwB,EAAE;QACxB,EAAE,EAAE,wBAAwB;QAC5B,cAAc,EAAE,gBAAgB;QAChC,WAAW,EAAE,mCAAmC;KACjD;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n 'error.page.title.noAccess': {\n id: 'error.page.tile.noAccess',\n defaultMessage: 'Access Denied',\n description: 'Title error when user does not have access to view',\n },\n 'error.page.message.noAccess': {\n id: 'error.page.message.noAccess',\n defaultMessage: 'You do not have permission to view this page.',\n description: 'Error message when user does not have access to view',\n },\n 'error.page.title.notFound': {\n id: 'error.page.tile.notFound',\n defaultMessage: 'Page Not Found',\n description: 'Error the resource is not found',\n },\n 'error.page.message.notFound': {\n id: 'error.page.message.notFound',\n defaultMessage: 'The resource you are looking for could not be found.',\n description: 'Error message when the resource is not found',\n },\n 'error.page.title.server': {\n id: 'error.page.tile.server',\n defaultMessage: 'Something went wrong',\n description: 'Title for server error',\n },\n 'error.page.message.server': {\n id: 'error.page.message.server.error',\n defaultMessage: 'We\\'re experiencing an internal server problem. Please try again later',\n description: 'Server error message for unexpected errors',\n },\n 'error.page.title.generic': {\n id: 'error.page.tile.generic',\n defaultMessage: 'Something went wrong',\n description: 'Title for unexpected error',\n },\n 'error.page.message.generic': {\n id: 'error.page.message.server',\n defaultMessage: 'An unexpected error occurred. Please click the button below to refresh the page.',\n description: 'Error message for unexpected errors',\n },\n 'error.page.action.reload': {\n id: 'error.page.action.reload',\n defaultMessage: 'Reload Page',\n description: 'Label for reload action',\n },\n 'error.page.action.back': {\n id: 'error.page.action.back',\n defaultMessage: 'Back to Studio',\n description: 'Label for return to Studio action',\n },\n});\n\nexport default messages;\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { PermissionsResourceGrouped, Role } from '../../types';
|
|
3
|
+
interface PermissionTableProps {
|
|
4
|
+
roles: Role[];
|
|
5
|
+
permissionsTable: PermissionsResourceGrouped[];
|
|
6
|
+
title?: string;
|
|
7
|
+
}
|
|
8
|
+
declare const PermissionTable: ({ permissionsTable, roles, title }: PermissionTableProps) => React.JSX.Element;
|
|
9
|
+
export default PermissionTable;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { useIntl } from '@openedx/frontend-base';
|
|
4
|
+
import { Check, Close } from '@openedx/paragon/icons';
|
|
5
|
+
import { Card, Icon, OverlayTrigger, Tooltip, } from '@openedx/paragon';
|
|
6
|
+
import { actionsDictionary } from './RoleCard/constants';
|
|
7
|
+
import ResourceTooltip from './ResourceTooltip';
|
|
8
|
+
import messages from './messages';
|
|
9
|
+
const PermissionTable = ({ permissionsTable, roles, title }) => {
|
|
10
|
+
const { formatMessage } = useIntl();
|
|
11
|
+
return (_jsx(Card, { children: _jsxs("table", { className: "permission-table w-100", children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { className: "sticky-top bg-white px-4 py-3", children: title }), roles.map(role => (_jsx("th", { className: `text-center py-3 sticky-top bg-white ${role.disabled ? 'text-gray-200' : ''}`, children: role.disabled ? (_jsx(OverlayTrigger, { placement: "top", overlay: (_jsx(Tooltip, { id: `tooltip-${role.name}`, variant: "light", children: formatMessage(messages['authz.role.card.permission.for.role.status.disabled']) })), children: _jsx("span", { style: { cursor: 'help' }, children: role.name }) })) : (role.name) }, role.name)))] }) }), _jsx("tbody", { children: permissionsTable.map(resourceGroup => (_jsxs(React.Fragment, { children: [_jsx("tr", { className: "bg-info-100 text-primary", children: _jsx("td", { colSpan: roles.length + 1, className: "text-start py-3 px-4", children: _jsxs("div", { className: "d-flex align-items-center", children: [resourceGroup.icon && _jsx(Icon, { className: "d-inline-block mr-2", size: "xs", src: resourceGroup.icon }), _jsx("strong", { children: resourceGroup.label }), _jsx(ResourceTooltip, { resourceGroup: resourceGroup })] }) }) }), resourceGroup.permissions.map(permission => (_jsxs("tr", { className: "border-top", children: [_jsxs("td", { className: "text-start d-flex align-items-center small px-4 py-3", children: [_jsx(Icon, { className: "d-inline-block mr-2", size: "sm", src: actionsDictionary[permission.actionKey] }), permission.label] }), roles.map(role => (_jsx("td", { className: `text-center ${role.disabled ? 'text-gray-200' : ''}`, children: permission.roles[role.name]
|
|
12
|
+
? (_jsx(Icon, { className: `d-inline-block ${role.disabled ? 'text-gray-200' : 'text-success'}`, src: Check, "aria-label": formatMessage(messages['authz.role.card.permission.for.role.status.granted'], {
|
|
13
|
+
roleName: role.name,
|
|
14
|
+
}), screenReaderText: formatMessage(messages['authz.role.card.permission.for.role.status.granted'], {
|
|
15
|
+
roleName: role.name,
|
|
16
|
+
}) }))
|
|
17
|
+
: (_jsx(Icon, { className: `d-inline-block ${role.disabled ? 'text-gray-200' : 'text-danger'}`, src: Close, "aria-label": formatMessage(messages['authz.role.card.permission.for.role.status.not.granted'], {
|
|
18
|
+
roleName: role.name,
|
|
19
|
+
}), screenReaderText: formatMessage(messages['authz.role.card.permission.for.role.status.not.granted'], {
|
|
20
|
+
roleName: role.name,
|
|
21
|
+
}) })) }, role.name)))] }, permission.key)))] }, resourceGroup.key))) })] }) }));
|
|
22
|
+
};
|
|
23
|
+
export default PermissionTable;
|
|
24
|
+
//# sourceMappingURL=PermissionTable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PermissionTable.js","sourceRoot":"","sources":["../../../src/authz-module/components/PermissionTable.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport { useIntl } from '@openedx/frontend-base';\nimport { Check, Close } from '@openedx/paragon/icons';\nimport {\n Card, Icon, OverlayTrigger, Tooltip,\n} from '@openedx/paragon';\nimport { PermissionsResourceGrouped, Role } from '@src/types';\nimport { actionsDictionary } from './RoleCard/constants';\nimport ResourceTooltip from './ResourceTooltip';\nimport messages from './messages';\n\ninterface PermissionTableProps {\n roles: Role[];\n permissionsTable: PermissionsResourceGrouped[];\n title?: string;\n}\n\nconst PermissionTable = ({ permissionsTable, roles, title }: PermissionTableProps) => {\n const { formatMessage } = useIntl();\n return (\n <Card>\n <table className=\"permission-table w-100\">\n <thead>\n <tr>\n <th className=\"sticky-top bg-white px-4 py-3\">\n {title}\n </th>\n {roles.map(role => (\n <th\n key={role.name}\n className={`text-center py-3 sticky-top bg-white ${role.disabled ? 'text-gray-200' : ''}`}\n >\n {role.disabled ? (\n <OverlayTrigger\n placement=\"top\"\n overlay={(\n <Tooltip\n id={`tooltip-${role.name}`}\n variant=\"light\"\n >\n {formatMessage(messages['authz.role.card.permission.for.role.status.disabled'])}\n </Tooltip>\n )}\n >\n <span style={{ cursor: 'help' }}>{role.name}</span>\n </OverlayTrigger>\n ) : (\n role.name\n )}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {permissionsTable.map(resourceGroup => (\n <React.Fragment key={resourceGroup.key}>\n <tr className=\"bg-info-100 text-primary\">\n <td colSpan={roles.length + 1} className=\"text-start py-3 px-4\">\n <div className=\"d-flex align-items-center\">\n {resourceGroup.icon && <Icon className=\"d-inline-block mr-2\" size=\"xs\" src={resourceGroup.icon} />}\n <strong>{resourceGroup.label}</strong>\n <ResourceTooltip resourceGroup={resourceGroup} />\n </div>\n </td>\n </tr>\n {resourceGroup.permissions.map(permission => (\n <tr key={permission.key} className=\"border-top\">\n <td className=\"text-start d-flex align-items-center small px-4 py-3\">\n <Icon className=\"d-inline-block mr-2\" size=\"sm\" src={actionsDictionary[permission.actionKey]} />\n {permission.label}\n </td>\n {roles.map(role => (\n <td key={role.name} className={`text-center ${role.disabled ? 'text-gray-200' : ''}`}>\n {\n permission.roles[role.name]\n ? (\n <Icon\n className={`d-inline-block ${role.disabled ? 'text-gray-200' : 'text-success'}`}\n src={Check}\n aria-label={formatMessage(messages['authz.role.card.permission.for.role.status.granted'], {\n roleName: role.name,\n })}\n screenReaderText={formatMessage(messages['authz.role.card.permission.for.role.status.granted'], {\n roleName: role.name,\n })}\n />\n )\n : (\n <Icon\n className={`d-inline-block ${role.disabled ? 'text-gray-200' : 'text-danger'}`}\n src={Close}\n aria-label={formatMessage(messages['authz.role.card.permission.for.role.status.not.granted'], {\n roleName: role.name,\n })}\n screenReaderText={formatMessage(messages['authz.role.card.permission.for.role.status.not.granted'], {\n roleName: role.name,\n })}\n />\n )\n }\n </td>\n ))}\n </tr>\n ))}\n </React.Fragment>\n ))}\n </tbody>\n </table>\n </Card>\n );\n};\n\nexport default PermissionTable;\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useIntl } from '@openedx/frontend-base';
|
|
3
|
+
import messages from '../audit-user/messages';
|
|
4
|
+
const RenderAdminRole = ({ role }) => {
|
|
5
|
+
const intl = useIntl();
|
|
6
|
+
// Determine which message to show based on role
|
|
7
|
+
const messageKey = (role === null || role === void 0 ? void 0 : role.toLowerCase().includes('admin'))
|
|
8
|
+
? 'authz.user.table.permissions.role.admin'
|
|
9
|
+
: 'authz.user.table.permissions.role.staff';
|
|
10
|
+
return (_jsx("p", { className: "mb-0 text-primary-300 font-weight-light", children: intl.formatMessage(messages[messageKey]) }));
|
|
11
|
+
};
|
|
12
|
+
export default RenderAdminRole;
|
|
13
|
+
//# sourceMappingURL=RenderAdminRole.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RenderAdminRole.js","sourceRoot":"","sources":["../../../src/authz-module/components/RenderAdminRole.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,QAAQ,MAAM,uCAAuC,CAAC;AAM7D,MAAM,eAAe,GAAG,CAAC,EAAE,IAAI,EAAwB,EAAE,EAAE;IACzD,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,gDAAgD;IAChD,MAAM,UAAU,GAAG,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC;QACtD,CAAC,CAAC,yCAAyC;QAC3C,CAAC,CAAC,yCAAyC,CAAC;IAE9C,OAAO,CACL,YAAG,SAAS,EAAC,yCAAyC,YACnD,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,GACvC,CACL,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,eAAe,CAAC","sourcesContent":["import { useIntl } from '@openedx/frontend-base';\nimport messages from '@src/authz-module/audit-user/messages';\n\ninterface RenderAdminRoleProps {\n role: string;\n}\n\nconst RenderAdminRole = ({ role }: RenderAdminRoleProps) => {\n const intl = useIntl();\n // Determine which message to show based on role\n const messageKey = role?.toLowerCase().includes('admin')\n ? 'authz.user.table.permissions.role.admin'\n : 'authz.user.table.permissions.role.staff';\n\n return (\n <p className=\"mb-0 text-primary-300 font-weight-light\">\n {intl.formatMessage(messages[messageKey])}\n </p>\n );\n};\n\nexport default RenderAdminRole;\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { PermissionItem } from '../../types';
|
|
2
|
+
interface RenderPermissionColumnProps {
|
|
3
|
+
items: PermissionItem[];
|
|
4
|
+
}
|
|
5
|
+
declare const RenderPermissionColumn: ({ items }: RenderPermissionColumnProps) => import("react").JSX.Element;
|
|
6
|
+
export default RenderPermissionColumn;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { Icon } from '@openedx/paragon';
|
|
3
|
+
import ResourceTooltip from './ResourceTooltip';
|
|
4
|
+
const RenderPermissionColumn = ({ items }) => (_jsx(_Fragment, { children: items.map(({ key, icon, label, description, perms, }) => (_jsxs("div", { className: "mb-4 col-12", children: [_jsxs("div", { className: "d-flex align-items-center mb-2", children: [_jsx(Icon, { src: icon, className: "mr-2 text-primary", size: "xs" }), _jsx("h5", { className: "text-primary m-0", children: label }), _jsx(ResourceTooltip, { resourceGroup: {
|
|
5
|
+
key, label, description, permissions: perms,
|
|
6
|
+
} })] }), _jsx("ul", { className: "mb-0 list-unstyled d-flex align-items-center", children: perms.map((perm, index) => (_jsxs("li", { className: `d-flex align-items-center text-primary-400 ${index !== perms.length - 1 ? 'border-right pr-2' : ''} ${index !== 0 ? 'pl-2' : ''}`, children: [_jsx(Icon, { src: perm.icon, className: "mr-2", size: "xs" }), _jsx("span", { className: "text-primary small font-weight-light", children: perm.label })] }, perm.key))) })] }, key))) }));
|
|
7
|
+
export default RenderPermissionColumn;
|
|
8
|
+
//# sourceMappingURL=RenderPermissionColumn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RenderPermissionColumn.js","sourceRoot":"","sources":["../../../src/authz-module/components/RenderPermissionColumn.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAMhD,MAAM,sBAAsB,GAAG,CAAC,EAAE,KAAK,EAA+B,EAAE,EAAE,CAAC,CACzE,4BACG,KAAK,CAAC,GAAG,CAAC,CAAC,EACV,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,GACrC,EAAE,EAAE,CAAC,CACJ,eAAe,SAAS,EAAC,aAAa,aACpC,eAAK,SAAS,EAAC,gCAAgC,aAC7C,KAAC,IAAI,IAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAC,mBAAmB,EAAC,IAAI,EAAC,IAAI,GAAG,EAC3D,aAAI,SAAS,EAAC,kBAAkB,YAAE,KAAK,GAAM,EAC7C,KAAC,eAAe,IACd,aAAa,EAAE;4BACb,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK;yBAC5C,GACD,IACE,EACN,aAAI,SAAS,EAAC,8CAA8C,YACzD,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAC1B,cAEE,SAAS,EAAE,8CAA8C,KAAK,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAC5G,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,aAE/B,KAAC,IAAI,IAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,GAAG,EACnD,eAAM,SAAS,EAAC,sCAAsC,YACnD,IAAI,CAAC,KAAK,GACN,KAPF,IAAI,CAAC,GAAG,CAQV,CACN,CAAC,GACC,KAvBG,GAAG,CAwBP,CACP,CAAC,GACD,CACJ,CAAC;AAEF,eAAe,sBAAsB,CAAC","sourcesContent":["import { Icon } from '@openedx/paragon';\nimport { PermissionItem } from '@src/types';\nimport ResourceTooltip from './ResourceTooltip';\n\ninterface RenderPermissionColumnProps {\n items: PermissionItem[];\n}\n\nconst RenderPermissionColumn = ({ items }: RenderPermissionColumnProps) => (\n <>\n {items.map(({\n key, icon, label, description, perms,\n }) => (\n <div key={key} className=\"mb-4 col-12\">\n <div className=\"d-flex align-items-center mb-2\">\n <Icon src={icon} className=\"mr-2 text-primary\" size=\"xs\" />\n <h5 className=\"text-primary m-0\">{label}</h5>\n <ResourceTooltip\n resourceGroup={{\n key, label, description, permissions: perms,\n }}\n />\n </div>\n <ul className=\"mb-0 list-unstyled d-flex align-items-center\">\n {perms.map((perm, index) => (\n <li\n key={perm.key}\n className={`d-flex align-items-center text-primary-400 ${index !== perms.length - 1 ? 'border-right pr-2' : ''\n } ${index !== 0 ? 'pl-2' : ''}`}\n >\n <Icon src={perm.icon} className=\"mr-2\" size=\"xs\" />\n <span className=\"text-primary small font-weight-light\">\n {perm.label}\n </span>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </>\n);\n\nexport default RenderPermissionColumn;\n"]}
|