forked from openedx/frontend-app-admin-console
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathindex.tsx
More file actions
68 lines (61 loc) · 1.88 KB
/
index.tsx
File metadata and controls
68 lines (61 loc) · 1.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import { useIntl } from '@edx/frontend-platform/i18n';
import {
Card, Collapsible, Container, Icon, IconButton,
} from '@openedx/paragon';
import { Delete, Person } from '@openedx/paragon/icons';
import PermissionRow from './PermissionsRow';
import messages from './messages';
interface CardTitleProps {
title: string;
userCounter?: number | null;
}
interface RoleCardProps extends CardTitleProps {
objectName?: string | null;
description: string;
showDelete?: boolean;
permissions: any[];
}
const CardTitle = ({ title, userCounter }: CardTitleProps) => (
<div className="d-flex align-items-center">
<span className="mr-4 text-primary">{title}</span>
{userCounter !== null && userCounter !== undefined && (
<span className="d-flex align-items-center font-weight-normal">
<Icon src={Person} className="mr-1" />
{userCounter}
</span>
)}
</div>
);
const RoleCard = ({
title, objectName, description, showDelete, permissions, userCounter,
}: RoleCardProps) => {
const intl = useIntl();
return (
<Card className="container-mw-lg mx-auto mb-4">
<Card.Header
title={<CardTitle title={title} userCounter={userCounter} />}
subtitle={(objectName && <span className="text-info-400 lead">{objectName}</span>) || ''}
actions={
showDelete && <IconButton variant="danger" alt="Delete role action" src={Delete} />
}
/>
<Card.Section>
{description}
</Card.Section>
<Collapsible
title={intl.formatMessage(messages['authz.permissions.title'])}
>
<Container>
{permissions.map(({ key, label, actions }) => (
<PermissionRow
key={`${title}-${key}`}
resourceLabel={label}
actions={actions}
/>
))}
</Container>
</Collapsible>
</Card>
);
};
export default RoleCard;