1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
5 import * as React from 'react';
6 import { MenuItem, Grid, 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';
13 export enum PermissionSelectValue {
19 type PermissionSelectClasses = 'value';
21 const PermissionSelectStyles: StyleRulesCallback<PermissionSelectClasses> = theme => ({
23 marginLeft: theme.spacing.unit,
27 export const PermissionSelect = withStyles(PermissionSelectStyles)(
28 ({ classes, ...props }: SelectProps & WithStyles<PermissionSelectClasses>) =>
31 renderValue={renderPermissionItem}
32 inputProps={{ classes }}>
33 <MenuItem value={PermissionSelectValue.READ}>
34 {renderPermissionItem(PermissionSelectValue.READ)}
36 <MenuItem value={PermissionSelectValue.WRITE}>
37 {renderPermissionItem(PermissionSelectValue.WRITE)}
39 <MenuItem value={PermissionSelectValue.MANAGE}>
40 {renderPermissionItem(PermissionSelectValue.MANAGE)}
44 const renderPermissionItem = (value: string) =>
45 <PermissionItem {...{ value }} />;
47 type PermissionItemClasses = 'value';
49 const permissionItemStyles: StyleRulesCallback<PermissionItemClasses> = theme => ({
51 marginLeft: theme.spacing.unit,
55 const PermissionItem = withStyles(permissionItemStyles)(
56 ({ value, classes }: { value: string } & WithStyles<PermissionItemClasses>) =>
57 <Grid container alignItems='center'>
58 {renderPermissionIcon(value)}
59 <span className={classes.value}>
64 const renderPermissionIcon = (value: string) => {
66 case PermissionSelectValue.READ:
67 return <RemoveRedEye />;
68 case PermissionSelectValue.WRITE:
70 case PermissionSelectValue.MANAGE: