// SPDX-License-Identifier: AGPL-3.0
import * as React from 'react';
+import { Grid } from '@material-ui/core';
import { SharingInvitationForm } from './sharing-invitation-form';
import { SharingManagementForm } from './sharing-management-form';
-import { Grid } from '@material-ui/core';
+import { SharingPublicAccessForm } from './sharing-public-access-form';
export const SharingDialogContent = (props: { advancedViewOpen: boolean }) =>
<Grid container direction='column' spacing={24}>
{props.advancedViewOpen &&
<>
<Grid item>
+ <SharingPublicAccessForm />
<SharingManagementForm />
</Grid>
</>
--- /dev/null
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+import * as React from 'react';
+import { Grid, StyleRulesCallback, Divider, Switch } from '@material-ui/core';
+import { Field, WrappedFieldProps, formValues, formValueSelector } from 'redux-form';
+import { PermissionSelect } from './permission-select';
+import { WithStyles } from '@material-ui/core/styles';
+import withStyles from '@material-ui/core/styles/withStyles';
+import { connect } from 'react-redux';
+
+const sharingPublicAccessStyles: StyleRulesCallback<'root'> = theme => ({
+ root: {
+ padding: `${theme.spacing.unit}px 0`,
+ }
+});
+
+const SharingPublicAccessForm = withStyles(sharingPublicAccessStyles)(
+ ({ classes }: WithStyles<'root'>) =>
+ <>
+ <Divider />
+ <Grid container alignItems='center' spacing={8} className={classes.root}>
+ <Grid item xs={6}>
+ Public access
+ </Grid>
+ <Grid item xs={2}>
+ <Field name='enabled' component={PublicAccessSwitch} />
+ </Grid>
+ <Grid item xs={4}>
+ <Field name='permissions' component={PermissionSelectComponent} />
+ </Grid>
+ </Grid>
+ </>
+);
+
+export default () => <SharingPublicAccessForm />;
+
+const PublicAccessSwitch = (props: WrappedFieldProps) =>
+ <PublicAccessSwitchComponent {...props} />;
+
+const publicAccessSwitchStyles: StyleRulesCallback<'root'> = theme => ({
+ root: {
+ margin: `-${theme.spacing.unit * 2}px auto`,
+ }
+});
+
+const PublicAccessSwitchComponent = withStyles(publicAccessSwitchStyles)(
+ ({ input, classes }: WrappedFieldProps & WithStyles<'root'>) =>
+ <Switch checked={input.value} onChange={input.onChange} color='primary' classes={classes} />
+);
+
+const PermissionSelectComponent = connect(
+ (state: any, props: WrappedFieldProps) => ({
+ disabled: !formValueSelector(props.meta.form)(state, 'enabled'),
+ })
+)(({ input, disabled }: WrappedFieldProps & { disabled: boolean }) => {
+ return <PermissionSelect disabled={disabled} fullWidth disableUnderline {...input} />;
+});
--- /dev/null
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+import { reduxForm } from 'redux-form';
+import { connect } from 'react-redux';
+import { compose } from 'redux';
+import SharingPublicAccessFormComponent from './sharing-public-access-form-component';
+export const SharingPublicAccessForm = compose(
+ connect(() => ({
+ initialValues: {
+ enabled: false,
+ permissions: 'Read',
+ }
+ })),
+ reduxForm({ form: 'SHARING_PUBLIC_ACCESS_FORM' })
+)(SharingPublicAccessFormComponent);
\ No newline at end of file