1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
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';
16 type VisibilityLevelSelectClasses = 'root';
18 const VisibilityLevelSelectStyles: StyleRulesCallback<VisibilityLevelSelectClasses> = theme => ({
20 marginLeft: theme.spacing.unit,
23 export const VisibilityLevelSelect = withStyles(VisibilityLevelSelectStyles)(
24 ({ classes, includePublic, ...props }: { includePublic: boolean } & SelectProps & WithStyles<VisibilityLevelSelectClasses>) =>
27 renderValue={renderPermissionItem}
28 inputProps={{ classes }}>
29 {includePublic && <MenuItem value={VisibilityLevel.PUBLIC}>
30 {renderPermissionItem(VisibilityLevel.PUBLIC)}
32 <MenuItem value={VisibilityLevel.ALL_USERS}>
33 {renderPermissionItem(VisibilityLevel.ALL_USERS)}
35 <MenuItem value={VisibilityLevel.SHARED}>
36 {renderPermissionItem(VisibilityLevel.SHARED)}
38 <MenuItem value={VisibilityLevel.PRIVATE}>
39 {renderPermissionItem(VisibilityLevel.PRIVATE)}
43 const renderPermissionItem = (value: string) =>
44 <SelectItem {...{ value, icon: getIcon(value) }} />;
46 const getIcon = (value: string) => {
48 case VisibilityLevel.PUBLIC:
50 case VisibilityLevel.ALL_USERS:
52 case VisibilityLevel.SHARED:
54 case VisibilityLevel.PRIVATE: