Create sharing public access form
authorMichal Klobukowski <michal.klobukowski@contractors.roche.com>
Sun, 28 Oct 2018 22:42:17 +0000 (23:42 +0100)
committerMichal Klobukowski <michal.klobukowski@contractors.roche.com>
Sun, 28 Oct 2018 22:42:17 +0000 (23:42 +0100)
Feature #14365

Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski <michal.klobukowski@contractors.roche.com>

src/views-components/sharing-dialog/sharing-dialog-content.tsx
src/views-components/sharing-dialog/sharing-public-access-form-component.tsx [new file with mode: 0644]
src/views-components/sharing-dialog/sharing-public-access-form.tsx [new file with mode: 0644]

index b74306b8ad3479eec66bc8fd3aeb2862a79b9448..3be69762219621dd1ae9604d28afbd2727fe3577 100644 (file)
@@ -3,16 +3,18 @@
 // 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>
             </>
diff --git a/src/views-components/sharing-dialog/sharing-public-access-form-component.tsx b/src/views-components/sharing-dialog/sharing-public-access-form-component.tsx
new file mode 100644 (file)
index 0000000..bb902d5
--- /dev/null
@@ -0,0 +1,59 @@
+// 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} />;
+});
diff --git a/src/views-components/sharing-dialog/sharing-public-access-form.tsx b/src/views-components/sharing-dialog/sharing-public-access-form.tsx
new file mode 100644 (file)
index 0000000..42a2dec
--- /dev/null
@@ -0,0 +1,17 @@
+// 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