20377: Removed unused imports
[arvados-workbench2.git] / src / views-components / sharing-dialog / sharing-public-access-form-component.tsx
index 6f70c2df876ba43bebfc394a0be29202768fd68c..5fc3f4e38ecce5a0ac7adb24568ea16b5e956e2e 100644 (file)
@@ -2,61 +2,65 @@
 //
 // SPDX-License-Identifier: AGPL-3.0
 
-import * as React from 'react';
-import { Grid, StyleRulesCallback, Divider, Switch, Typography } from '@material-ui/core';
-import { Field, WrappedFieldProps, formValues, formValueSelector } from 'redux-form';
-import { PermissionSelect, formatPermissionLevel, parsePermissionLevel } from './permission-select';
+import React from 'react';
+import { Grid, StyleRulesCallback, Typography } from '@material-ui/core';
+import { Field, WrappedFieldProps } from 'redux-form';
 import { WithStyles } from '@material-ui/core/styles';
 import withStyles from '@material-ui/core/styles/withStyles';
-import { connect } from 'react-redux';
+import { VisibilityLevelSelect } from './visibility-level-select';
+import { VisibilityLevel } from 'store/sharing-dialog/sharing-dialog-types';
 
 const sharingPublicAccessStyles: StyleRulesCallback<'root'> = theme => ({
     root: {
-        padding: `${theme.spacing.unit}px 0`,
+        padding: `${theme.spacing.unit * 2}px 0`,
+    },
+    heading: {
+        fontSize: '1.25rem',
     }
 });
 
+interface AccessProps {
+    visibility: VisibilityLevel;
+    includePublic: boolean;
+    onSave: () => void;
+}
+
 const SharingPublicAccessForm = withStyles(sharingPublicAccessStyles)(
-    ({ classes }: WithStyles<'root'>) =>
+    ({ classes, visibility, includePublic, onSave }: WithStyles<'root' | 'heading'> & AccessProps) =>
         <>
-            <Divider />
+            <Typography className={classes.heading}>General access</Typography>
             <Grid container alignItems='center' spacing={8} className={classes.root}>
                 <Grid item xs={8}>
-                    <Typography variant='subheading'>Public access</Typography>
+                    <Typography variant='subtitle1'>
+                        {renderVisibilityInfo(visibility)}
+                    </Typography>
                 </Grid>
                 <Grid item xs={4} container wrap='nowrap'>
-                    <Field
-                        name='permissions'
-                        component={PermissionSelectComponent}
-                        format={formatPermissionLevel}
-                        parse={parsePermissionLevel}
-                    />
-                    <Field name='enabled' component={PublicAccessSwitch} />
+                    <Field<{ includePublic: boolean }> name='visibility' component={VisibilityLevelSelectComponent} includePublic={includePublic} onChange={onSave} />
                 </Grid>
             </Grid>
         </>
 );
 
-export default () => <SharingPublicAccessForm />;
-
-const PublicAccessSwitch = (props: WrappedFieldProps) =>
-    <PublicAccessSwitchComponent {...props} />;
-
-const publicAccessSwitchStyles: StyleRulesCallback<'root'> = theme => ({
-    root: {
-        margin: `0 -7px`,
+const renderVisibilityInfo = (visibility: VisibilityLevel) => {
+    switch (visibility) {
+        case VisibilityLevel.PUBLIC:
+            return 'Shared with anyone on the Internet';
+        case VisibilityLevel.ALL_USERS:
+            return 'Shared with all users on this cluster';
+        case VisibilityLevel.SHARED:
+            return 'Shared with specific people';
+        case VisibilityLevel.PRIVATE:
+            return 'Not shared';
+        default:
+            return '';
     }
-});
+};
 
-const PublicAccessSwitchComponent = withStyles(publicAccessSwitchStyles)(
-    ({ input, classes }: WrappedFieldProps & WithStyles<'root'>) =>
-        <Switch checked={input.value} onChange={input.onChange} color='primary' classes={classes} />
-);
+const SharingPublicAccessFormComponent = ({ visibility, includePublic, onSave }: AccessProps) =>
+    <SharingPublicAccessForm {...{ visibility, includePublic, onSave }} />;
 
-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} />;
-});
+export default SharingPublicAccessFormComponent;
+
+const VisibilityLevelSelectComponent = ({ input, includePublic }: { includePublic: boolean } & WrappedFieldProps) =>
+    <VisibilityLevelSelect fullWidth disableUnderline includePublic={includePublic} {...input} />;