1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
5 import React from 'react';
6 import { Grid, StyleRulesCallback, Divider, IconButton, Typography } from '@material-ui/core';
10 WrappedFieldArrayProps,
14 import { PermissionSelect, formatPermissionLevel, parsePermissionLevel } from './permission-select';
15 import { WithStyles } from '@material-ui/core/styles';
16 import withStyles from '@material-ui/core/styles/withStyles';
17 import { CloseIcon } from 'components/icon/icon';
21 <FieldArray name='permissions' component={SharingManagementFieldArray as any} />;
23 const SharingManagementFieldArray = ({ fields }: WrappedFieldArrayProps<{ email: string }>) =>
27 ? fields.map((field, index, fields) =>
28 <PermissionManagementRow key={field} {...{ field, index, fields }} />)
29 : <Typography>No permissions set</Typography>
34 const permissionManagementRowStyles: StyleRulesCallback<'root'> = theme => ({
36 padding: `${theme.spacing.unit}px 0`,
39 const PermissionManagementRow = withStyles(permissionManagementRowStyles)(
40 ({ field, index, fields, classes }: { field: string, index: number, fields: FieldArrayFieldsProps<{ email: string }> } & WithStyles<'root'>) =>
43 <Grid container alignItems='center' spacing={8} wrap='nowrap' className={classes.root}>
45 <Typography noWrap variant='subtitle1'>{fields.get(index).email}</Typography>
47 <Grid item xs={4} container wrap='nowrap'>
49 name={`${field}.permissions` as string}
50 component={PermissionSelectComponent}
51 format={formatPermissionLevel}
52 parse={parsePermissionLevel} />
53 <IconButton onClick={() => fields.remove(index)}>
61 const PermissionSelectComponent = ({ input }: WrappedFieldProps) =>
62 <PermissionSelect fullWidth disableUnderline {...input} />;