21700: Install Bundler system-wide in Rails postinst
[arvados.git] / services / workbench2 / src / views-components / sharing-dialog / visibility-level-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, withStyles, StyleRulesCallback } from '@material-ui/core';
7 import Lock from '@material-ui/icons/Lock';
8 import People from '@material-ui/icons/People';
9 import Public from '@material-ui/icons/Public';
10 import { WithStyles } from '@material-ui/core/styles';
11 import { SelectProps } from '@material-ui/core/Select';
12 import { SelectItem } from './select-item';
13 import { VisibilityLevel } from 'store/sharing-dialog/sharing-dialog-types';
14
15
16 type VisibilityLevelSelectClasses = 'root';
17
18 const VisibilityLevelSelectStyles: StyleRulesCallback<VisibilityLevelSelectClasses> = theme => ({
19     root: {
20     }
21 });
22 export const VisibilityLevelSelect = withStyles(VisibilityLevelSelectStyles)(
23     ({ classes, includePublic, ...props }: { includePublic: boolean } & SelectProps & WithStyles<VisibilityLevelSelectClasses>) =>
24         <Select
25             {...props}
26             renderValue={renderPermissionItem}
27             inputProps={{ classes }}>
28             {includePublic && <MenuItem value={VisibilityLevel.PUBLIC}>
29                 {renderPermissionItem(VisibilityLevel.PUBLIC)}
30             </MenuItem>}
31             <MenuItem value={VisibilityLevel.ALL_USERS}>
32                 {renderPermissionItem(VisibilityLevel.ALL_USERS)}
33             </MenuItem>
34             <MenuItem value={VisibilityLevel.SHARED}>
35                 {renderPermissionItem(VisibilityLevel.SHARED)}
36             </MenuItem>
37             <MenuItem value={VisibilityLevel.PRIVATE}>
38                 {renderPermissionItem(VisibilityLevel.PRIVATE)}
39             </MenuItem>
40         </Select>);
41
42 const renderPermissionItem = (value: string) =>
43     <SelectItem {...{ value, icon: getIcon(value) }} />;
44
45 const getIcon = (value: string) => {
46     switch (value) {
47         case VisibilityLevel.PUBLIC:
48             return Public;
49         case VisibilityLevel.ALL_USERS:
50             return Public;
51         case VisibilityLevel.SHARED:
52             return People;
53         case VisibilityLevel.PRIVATE:
54             return Lock;
55         default:
56             return Lock;
57     }
58 };