18123: Add edit permission level dialog for group members and outgoing permissions.
[arvados-workbench2.git] / src / views-components / dialog-forms / edit-permission-level-dialog.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 { compose } from "redux";
7 import { reduxForm, InjectedFormProps, WrappedFieldProps, Field } from 'redux-form';
8 import { withDialog, WithDialogProps } from "store/dialog/with-dialog";
9 import { FormDialog } from 'components/form-dialog/form-dialog';
10 import { EDIT_PERMISSION_LEVEL_DIALOG, EDIT_PERMISSION_LEVEL_FORM, EditPermissionLevelFormData, EDIT_PERMISSION_LEVEL_FIELD_NAME, editPermissionLevel } from 'store/group-details-panel/group-details-panel-actions';
11 import { require } from 'validators/require';
12 import { PermissionSelect } from 'views-components/sharing-dialog/permission-select';
13 import { Grid } from '@material-ui/core';
14 import { Resource } from 'models/resource';
15 import { ResourceLabel } from 'views-components/data-explorer/renderers';
16
17 export const EditPermissionLevelDialog = compose(
18     withDialog(EDIT_PERMISSION_LEVEL_DIALOG),
19     reduxForm<EditPermissionLevelFormData>({
20         form: EDIT_PERMISSION_LEVEL_FORM,
21         onSubmit: (data, dispatch) => {
22             dispatch(editPermissionLevel(data));
23         },
24     })
25 )(
26     (props: EditPermissionLevelDialogProps) =>
27         <FormDialog
28             dialogTitle='Edit permission'
29             formFields={PermissionField}
30             submitLabel='Update'
31             {...props}
32         />
33 );
34
35 interface EditPermissionLevelDataProps {
36     data: Resource;
37 }
38
39 type EditPermissionLevelDialogProps = EditPermissionLevelDataProps & WithDialogProps<{}> & InjectedFormProps<EditPermissionLevelFormData>;
40
41 const PermissionField = (props: EditPermissionLevelDialogProps) =>
42     <Grid container spacing={8}>
43         <Grid item xs={8}>
44             <ResourceLabel uuid={props.data.uuid} />
45         </Grid>
46         <Grid item xs={4} container wrap='nowrap'>
47         <Field
48             name={EDIT_PERMISSION_LEVEL_FIELD_NAME}
49             component={PermissionSelectComponent as any}
50             validate={require} />
51         </Grid>
52     </Grid>;
53
54 const PermissionSelectComponent = ({ input }: WrappedFieldProps) =>
55     <PermissionSelect fullWidth disableUnderline {...input} />;