From a39cc426fdcde42210966da888eb11634e3a321a Mon Sep 17 00:00:00 2001 From: Peter Amstutz Date: Fri, 31 Mar 2023 17:24:23 -0400 Subject: [PATCH] 20085: Almost works, needs to save on change to share/public/private Arvados-DCO-1.1-Signed-off-by: Peter Amstutz --- .../sharing-dialog-component.tsx | 12 +--- .../sharing-invitation-form-component.tsx | 57 ++++++++++++++----- .../sharing-management-form-component.tsx | 17 +++--- .../sharing-management-form.tsx | 6 +- 4 files changed, 58 insertions(+), 34 deletions(-) diff --git a/src/views-components/sharing-dialog/sharing-dialog-component.tsx b/src/views-components/sharing-dialog/sharing-dialog-component.tsx index 74e44550..44824fe3 100644 --- a/src/views-components/sharing-dialog/sharing-dialog-component.tsx +++ b/src/views-components/sharing-dialog/sharing-dialog-component.tsx @@ -79,16 +79,6 @@ export default (props: SharingDialogComponentProps) => { setTabNr(SharingDialogTab.PERMISSIONS); } - React.useEffect(() => { - if (permissions && permissions.length !== permissionsCount) { - if (permissionsCount > permissions.length) { - setTimeout(onSave, 0); - } - - setPermissionsCount(permissions.length); - } - }, [permissions, onSave, setPermissionsCount, permissionsCount]) - React.useEffect(() => { if (!withExpiration) { setExpDate(undefined); @@ -127,7 +117,7 @@ export default (props: SharingDialogComponentProps) => { - + } diff --git a/src/views-components/sharing-dialog/sharing-invitation-form-component.tsx b/src/views-components/sharing-dialog/sharing-invitation-form-component.tsx index 201ddc7f..17f3250a 100644 --- a/src/views-components/sharing-dialog/sharing-invitation-form-component.tsx +++ b/src/views-components/sharing-dialog/sharing-invitation-form-component.tsx @@ -10,30 +10,57 @@ import { ParticipantSelect, Participant } from './participant-select'; import { AddIcon } from 'components/icon/icon'; import { WithStyles } from '@material-ui/core/styles'; import withStyles from '@material-ui/core/styles/withStyles'; +import { ArvadosTheme } from 'common/custom-theme'; -const permissionManagementRowStyles: StyleRulesCallback<'root'> = theme => ({ +type SharingStyles = 'root' | 'addButtonRoot' | 'addButtonPrimary' | 'addButtonDisabled'; + +const styles: StyleRulesCallback = (theme: ArvadosTheme) => ({ root: { padding: `${theme.spacing.unit}px 0`, + }, + addButtonRoot: { + height: "36px", + width: "36px", + marginRight: "6px", + marginLeft: "6px", + marginTop: "12px", + }, + addButtonPrimary: { + color: theme.palette.primary.contrastText, + background: theme.palette.primary.main, + "&:hover": { + background: theme.palette.primary.dark, + } + }, + addButtonDisabled: { + background: 'none', } }); -const SharingInvitationFormComponent = (props: { onSave: () => void, saveEnabled: boolean }) => - - - - - - - - - - - - - ; +const SharingInvitationFormComponent = (props: { onSave: () => void, saveEnabled: boolean }) => export default SharingInvitationFormComponent; +const StyledSharingInvitationFormComponent = withStyles(styles)( + ({ onSave, saveEnabled, classes }: { onSave: () => void, saveEnabled: boolean } & WithStyles) => + + + + + + + + + + + + + ); + const InvitedPeopleField = () => void; }) => + void }> name='permissions' component={SharingManagementFieldArray as any} props={props} />; -export default () => - ; +export default SharingManagementFormComponent; -const SharingManagementFieldArray = ({ fields }: WrappedFieldArrayProps<{ email: string }>) => +const SharingManagementFieldArray = ({ fields, onSave }: { onSave: () => void } & WrappedFieldArrayProps<{ email: string }>) =>
{fields.map((field, index, fields) => - )} + )}
; @@ -33,7 +34,7 @@ const permissionManagementRowStyles: StyleRulesCallback<'root'> = theme => ({ }); const PermissionManagementRow = withStyles(permissionManagementRowStyles)( - ({ field, index, fields, classes }: { field: string, index: number, fields: FieldArrayFieldsProps<{ email: string }> } & WithStyles<'root'>) => + ({ field, index, fields, classes, onSave }: { field: string, index: number, fields: FieldArrayFieldsProps<{ email: string }>, onSave: () => void; } & WithStyles<'root'>) => <> @@ -45,8 +46,10 @@ const PermissionManagementRow = withStyles(permissionManagementRowStyles)( name={`${field}.permissions` as string} component={PermissionSelectComponent} format={formatPermissionLevel} - parse={parsePermissionLevel} /> - fields.remove(index)}> + parse={parsePermissionLevel} + onChange={onSave} + /> + { fields.remove(index); onSave(); }}> diff --git a/src/views-components/sharing-dialog/sharing-management-form.tsx b/src/views-components/sharing-dialog/sharing-management-form.tsx index 7ecff329..6cbf0f41 100644 --- a/src/views-components/sharing-dialog/sharing-management-form.tsx +++ b/src/views-components/sharing-dialog/sharing-management-form.tsx @@ -6,6 +6,10 @@ import { reduxForm } from 'redux-form'; import SharingManagementFormComponent from './sharing-management-form-component'; import { SHARING_MANAGEMENT_FORM_NAME } from 'store/sharing-dialog/sharing-dialog-types'; -export const SharingManagementForm = reduxForm( +interface SaveProps { + onSave: () => void; +} + +export const SharingManagementForm = reduxForm<{}, SaveProps>( { form: SHARING_MANAGEMENT_FORM_NAME } )(SharingManagementFormComponent); -- 2.30.2