1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
5 import * as React from 'react';
6 import { Grid, StyleRulesCallback, Divider, Switch, Typography } from '@material-ui/core';
7 import { Field, WrappedFieldProps, formValues, formValueSelector } from 'redux-form';
8 import { PermissionSelect } from './permission-select';
9 import { WithStyles } from '@material-ui/core/styles';
10 import withStyles from '@material-ui/core/styles/withStyles';
11 import { connect } from 'react-redux';
13 const sharingPublicAccessStyles: StyleRulesCallback<'root'> = theme => ({
15 padding: `${theme.spacing.unit}px 0`,
19 const SharingPublicAccessForm = withStyles(sharingPublicAccessStyles)(
20 ({ classes }: WithStyles<'root'>) =>
23 <Grid container alignItems='center' spacing={8} className={classes.root}>
25 <Typography variant='subheading'>Public access</Typography>
27 <Grid item xs={4} container wrap='nowrap'>
28 <Field name='permissions' component={PermissionSelectComponent} />
29 <Field name='enabled' component={PublicAccessSwitch} />
35 export default () => <SharingPublicAccessForm />;
37 const PublicAccessSwitch = (props: WrappedFieldProps) =>
38 <PublicAccessSwitchComponent {...props} />;
40 const publicAccessSwitchStyles: StyleRulesCallback<'root'> = theme => ({
46 const PublicAccessSwitchComponent = withStyles(publicAccessSwitchStyles)(
47 ({ input, classes }: WrappedFieldProps & WithStyles<'root'>) =>
48 <Switch checked={input.value} onChange={input.onChange} color='primary' classes={classes} />
51 const PermissionSelectComponent = connect(
52 (state: any, props: WrappedFieldProps) => ({
53 disabled: !formValueSelector(props.meta.form)(state, 'enabled'),
55 )(({ input, disabled }: WrappedFieldProps & { disabled: boolean }) => {
56 return <PermissionSelect disabled={disabled} fullWidth disableUnderline {...input} />;