Add visibility info text
authorMichal Klobukowski <michal.klobukowski@contractors.roche.com>
Tue, 30 Oct 2018 11:46:01 +0000 (12:46 +0100)
committerMichal Klobukowski <michal.klobukowski@contractors.roche.com>
Tue, 30 Oct 2018 11:46:01 +0000 (12:46 +0100)
Feature #14365

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

src/store/sharing-dialog/sharing-dialog-actions.ts
src/views-components/sharing-dialog/sharing-dialog-content.tsx
src/views-components/sharing-dialog/sharing-public-access-form-component.tsx
src/views-components/sharing-dialog/sharing-public-access-form.tsx

index c2108aea26e4274d463d909d51e409e264f3b694..586ab66443bc29e7c15700a08da88fe2e57a3f9d 100644 (file)
@@ -176,19 +176,16 @@ const sendInvitations = async (_: Dispatch, getState: () => RootState, { permiss
     if (dialog && user) {
 
         const invitations = getFormValues(SHARING_INVITATION_FORM_NAME)(state) as SharingInvitationFormData;
-        const { visibility } = getSharingPublicAccessFormData(state);
 
-        if (visibility !== VisibilityLevel.PRIVATE) {
-            const promises = invitations.invitedPeople
-                .map(person => ({
-                    ownerUuid: user.uuid,
-                    headUuid: dialog.data,
-                    tailUuid: person.uuid,
-                    name: invitations.permissions
-                }))
-                .map(data => permissionService.create(data));
-
-            await Promise.all(promises);
-        }
+        const promises = invitations.invitedPeople
+            .map(person => ({
+                ownerUuid: user.uuid,
+                headUuid: dialog.data,
+                tailUuid: person.uuid,
+                name: invitations.permissions
+            }))
+            .map(data => permissionService.create(data));
+
+        await Promise.all(promises);
     }
 };
index 3be69762219621dd1ae9604d28afbd2727fe3577..7347c664787b19d7c036d905ace99165aff2b25b 100644 (file)
@@ -3,7 +3,7 @@
 // SPDX-License-Identifier: AGPL-3.0
 
 import * as React from 'react';
-import { Grid } from '@material-ui/core';
+import { Grid, Typography } from '@material-ui/core';
 
 import { SharingInvitationForm } from './sharing-invitation-form';
 import { SharingManagementForm } from './sharing-management-form';
@@ -14,6 +14,9 @@ export const SharingDialogContent = (props: { advancedViewOpen: boolean }) =>
         {props.advancedViewOpen &&
             <>
                 <Grid item>
+                    <Typography variant='subheading'>
+                        Who can access
+                    </Typography>
                     <SharingPublicAccessForm />
                     <SharingManagementForm />
                 </Grid>
index 5f57a927d68b33d5f330e62b10982a3f31609b2a..7f3c4b7b4f833bc1b045615c125b115a51774f03 100644 (file)
@@ -8,6 +8,7 @@ import { Field, WrappedFieldProps } from 'redux-form';
 import { WithStyles } from '@material-ui/core/styles';
 import withStyles from '@material-ui/core/styles/withStyles';
 import { VisibilityLevelSelect } from './visibility-level-select';
+import { VisibilityLevel } from '~/store/sharing-dialog/sharing-dialog-types';
 
 const sharingPublicAccessStyles: StyleRulesCallback<'root'> = theme => ({
     root: {
@@ -16,12 +17,14 @@ const sharingPublicAccessStyles: StyleRulesCallback<'root'> = theme => ({
 });
 
 const SharingPublicAccessForm = withStyles(sharingPublicAccessStyles)(
-    ({ classes }: WithStyles<'root'>) =>
+    ({ classes, visibility }: WithStyles<'root'> & { visibility: VisibilityLevel }) =>
         <>
             <Divider />
             <Grid container alignItems='center' spacing={8} className={classes.root}>
                 <Grid item xs={8}>
-                    <Typography variant='subheading'>Public visibility</Typography>
+                    <Typography variant='subheading'>
+                        {renderVisibilityInfo(visibility)}
+                    </Typography>
                 </Grid>
                 <Grid item xs={4} container wrap='nowrap'>
                     <Field name='visibility' component={VisibilityLevelSelectComponent} />
@@ -30,7 +33,21 @@ const SharingPublicAccessForm = withStyles(sharingPublicAccessStyles)(
         </>
 );
 
-export default () => <SharingPublicAccessForm />;
+const renderVisibilityInfo = (visibility: VisibilityLevel) => {
+    switch (visibility) {
+        case VisibilityLevel.PUBLIC:
+            return 'Anyone can access';
+        case VisibilityLevel.SHARED:
+            return 'Specific people can access';
+        case VisibilityLevel.PRIVATE:
+            return 'Only you can access';
+        default:
+            return '';
+    }
+};
+
+export default ({ visibility }: { visibility: VisibilityLevel }) =>
+    <SharingPublicAccessForm {...{ visibility }} />;
 
 const VisibilityLevelSelectComponent = ({ input }: WrappedFieldProps) =>
     <VisibilityLevelSelect fullWidth disableUnderline {...input} />;
index 1b39a654de8a66f0d66b9e6316da809540528469..1d787d3e01e068ed69be1a79ca4093cfc5e8e427 100644 (file)
@@ -3,9 +3,21 @@
 // SPDX-License-Identifier: AGPL-3.0
 
 import { reduxForm } from 'redux-form';
+import { compose } from 'redux';
+import { connect } from 'react-redux';
 import SharingPublicAccessFormComponent from './sharing-public-access-form-component';
 import { SHARING_PUBLIC_ACCESS_FORM_NAME } from '~/store/sharing-dialog/sharing-dialog-types';
+import { RootState } from '~/store/store';
+import { getSharingPublicAccessFormData } from '../../store/sharing-dialog/sharing-dialog-types';
 
-export const SharingPublicAccessForm = reduxForm(
-    { form: SHARING_PUBLIC_ACCESS_FORM_NAME }
+export const SharingPublicAccessForm = compose(
+    reduxForm(
+        { form: SHARING_PUBLIC_ACCESS_FORM_NAME }
+    ),
+    connect(
+        (state: RootState) => {
+            const { visibility } = getSharingPublicAccessFormData(state);
+            return { visibility };
+        }
+    )
 )(SharingPublicAccessFormComponent);