Create sharing management form
[arvados.git] / 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 * as React from 'react';
6 import { MenuItem, Select, withStyles, StyleRulesCallback } from '@material-ui/core';
7 import RemoveRedEye from '@material-ui/icons/RemoveRedEye';
8 import Edit from '@material-ui/icons/Edit';
9 import Computer from '@material-ui/icons/Computer';
10 import { WithStyles } from '@material-ui/core/styles';
11 import { SelectProps } from '@material-ui/core/Select';
12 import { SelectItem } from './select-item';
13
14 export enum PermissionSelectValue {
15     READ = 'Read',
16     WRITE = 'Write',
17     MANAGE = 'Manage',
18 }
19
20 type PermissionSelectClasses = 'value';
21
22 const PermissionSelectStyles: StyleRulesCallback<PermissionSelectClasses> = theme => ({
23     value: {
24         marginLeft: theme.spacing.unit,
25     }
26 });
27
28 export const PermissionSelect = withStyles(PermissionSelectStyles)(
29     ({ classes, ...props }: SelectProps & WithStyles<PermissionSelectClasses>) =>
30         <Select
31             {...props}
32             renderValue={renderPermissionItem}
33             inputProps={{ classes }}>
34             <MenuItem value={PermissionSelectValue.READ}>
35                 {renderPermissionItem(PermissionSelectValue.READ)}
36             </MenuItem>
37             <MenuItem value={PermissionSelectValue.WRITE}>
38                 {renderPermissionItem(PermissionSelectValue.WRITE)}
39             </MenuItem>
40             <MenuItem value={PermissionSelectValue.MANAGE}>
41                 {renderPermissionItem(PermissionSelectValue.MANAGE)}
42             </MenuItem>
43         </Select>);
44
45 const renderPermissionItem = (value: string) =>
46     <SelectItem {...{ value, icon: getIcon(value) }} />;
47
48 const getIcon = (value: string) => {
49     switch (value) {
50         case PermissionSelectValue.READ:
51             return RemoveRedEye;
52         case PermissionSelectValue.WRITE:
53             return Edit;
54         case PermissionSelectValue.MANAGE:
55             return Computer;
56         default:
57             return Computer;
58     }
59 };