22141: Add details for more object types
[arvados.git] / services / workbench2 / src / views-components / sharing-dialog / permission-select.tsx
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 import React from 'react';
6 import { MenuItem, Select } from '@mui/material';
7 import RemoveRedEye from '@mui/icons-material/RemoveRedEye';
8 import Edit from '@mui/icons-material/Edit';
9 import Computer from '@mui/icons-material/Computer';
10 import { SelectProps } from '@mui/material/Select';
11 import { SelectItem } from './select-item';
12 import { PermissionLevel } from '../../models/permission';
13
14 export enum PermissionSelectValue {
15     READ = 'Read',
16     WRITE = 'Write',
17     MANAGE = 'Manage',
18 }
19
20 export const parsePermissionLevel = (value: PermissionSelectValue) => {
21     switch (value) {
22         case PermissionSelectValue.READ:
23             return PermissionLevel.CAN_READ;
24         case PermissionSelectValue.WRITE:
25             return PermissionLevel.CAN_WRITE;
26         case PermissionSelectValue.MANAGE:
27             return PermissionLevel.CAN_MANAGE;
28         default:
29             return PermissionLevel.NONE;
30     }
31 };
32
33 export const formatPermissionLevel = (value: PermissionLevel) => {
34     switch (value) {
35         case PermissionLevel.CAN_READ:
36             return PermissionSelectValue.READ;
37         case PermissionLevel.CAN_WRITE:
38             return PermissionSelectValue.WRITE;
39         case PermissionLevel.CAN_MANAGE:
40             return PermissionSelectValue.MANAGE;
41         default:
42             return PermissionSelectValue.READ;
43     }
44 };
45
46
47 export const PermissionSelect = (props: SelectProps) =>
48     <Select
49         variant="standard"
50         {...props}
51         disableUnderline
52         data-cy="permission-select"
53         renderValue={renderPermissionItem}>
54         <MenuItem value={PermissionSelectValue.READ}>
55             {renderPermissionItem(PermissionSelectValue.READ)}
56         </MenuItem>
57         <MenuItem value={PermissionSelectValue.WRITE}>
58             {renderPermissionItem(PermissionSelectValue.WRITE)}
59         </MenuItem>
60         <MenuItem value={PermissionSelectValue.MANAGE}>
61             {renderPermissionItem(PermissionSelectValue.MANAGE)}
62         </MenuItem>
63     </Select>;
64
65 const renderPermissionItem = (value: string) =>
66     <SelectItem {...{ value, icon: getIcon(value) }} />;
67
68 const getIcon = (value: string) => {
69     switch (value) {
70         case PermissionSelectValue.READ:
71             return RemoveRedEye;
72         case PermissionSelectValue.WRITE:
73             return Edit;
74         case PermissionSelectValue.MANAGE:
75             return Computer;
76         default:
77             return Computer;
78     }
79 };