From 95f1dba808337fed91cbcba656f94b68fc421e41 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Daniel=20Kuty=C5=82a?= Date: Fri, 31 Mar 2023 01:24:18 +0200 Subject: [PATCH] 200085: Added changes to share dialog layout MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Arvados-DCO-1.1-Signed-off-by: Daniel Kutyła --- .../sharing-dialog-component.tsx | 26 +++++++++++++++---- .../sharing-dialog/sharing-dialog.tsx | 5 ++++ 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/src/views-components/sharing-dialog/sharing-dialog-component.tsx b/src/views-components/sharing-dialog/sharing-dialog-component.tsx index b2f31397..6c4d4f02 100644 --- a/src/views-components/sharing-dialog/sharing-dialog-component.tsx +++ b/src/views-components/sharing-dialog/sharing-dialog-component.tsx @@ -16,6 +16,7 @@ import { Checkbox, FormControlLabel, Typography, + Tooltip, } from '@material-ui/core'; import { StyleRulesCallback, @@ -39,6 +40,7 @@ import { import DateFnsUtils from "@date-io/date-fns"; import moment from 'moment'; import { SharingPublicAccessForm } from './sharing-public-access-form'; +import { AddIcon } from 'components/icon/icon'; export interface SharingDialogDataProps { open: boolean; @@ -48,6 +50,7 @@ export interface SharingDialogDataProps { sharingURLsNr: number; privateAccess: boolean; sharingURLsDisabled: boolean; + permissions: any[]; } export interface SharingDialogActionProps { onClose: () => void; @@ -63,18 +66,29 @@ export type SharingDialogComponentProps = SharingDialogDataProps & SharingDialog export default (props: SharingDialogComponentProps) => { const { open, loading, saveEnabled, sharedResourceUuid, - sharingURLsNr, privateAccess, sharingURLsDisabled, + sharingURLsNr, privateAccess, sharingURLsDisabled, permissions, onClose, onSave, onCreateSharingToken, refreshPermissions } = props; const showTabs = !sharingURLsDisabled && extractUuidObjectType(sharedResourceUuid) === ResourceObjectType.COLLECTION; const [tabNr, setTabNr] = React.useState(SharingDialogTab.PERMISSIONS); const [expDate, setExpDate] = React.useState(); const [withExpiration, setWithExpiration] = React.useState(false); + const [permissionsCount, setPermissionsCount] = React.useState(0); // Sets up the dialog depending on the resource type if (!showTabs && tabNr !== SharingDialogTab.PERMISSIONS) { 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); @@ -180,10 +194,12 @@ export default (props: SharingDialogComponentProps) => { } { tabNr === SharingDialogTab.PERMISSIONS && - + + + } diff --git a/src/views-components/sharing-dialog/sharing-dialog.tsx b/src/views-components/sharing-dialog/sharing-dialog.tsx index 01cd390b..283f1a67 100644 --- a/src/views-components/sharing-dialog/sharing-dialog.tsx +++ b/src/views-components/sharing-dialog/sharing-dialog.tsx @@ -5,6 +5,7 @@ import { compose, Dispatch } from 'redux'; import { connect } from 'react-redux'; import { RootState } from 'store/store'; +import { formValueSelector } from 'redux-form' import { connectSharingDialog, saveSharingDialogChanges, @@ -22,6 +23,7 @@ import { getSharingPublicAccessFormData, hasChanges, SHARING_DIALOG_NAME, + SHARING_MANAGEMENT_FORM_NAME, VisibilityLevel } from 'store/sharing-dialog/sharing-dialog-types'; import { WithProgressStateProps } from 'store/progress-indicator/with-progress'; @@ -32,12 +34,15 @@ import { ResourceKind } from 'models/resource'; type Props = WithDialogProps & WithProgressStateProps; +const sharingManagementFormSelector = formValueSelector(SHARING_MANAGEMENT_FORM_NAME); + const mapStateToProps = (state: RootState, { working, ...props }: Props): SharingDialogDataProps => { const dialog = getDialog(state.dialog, SHARING_DIALOG_NAME); const sharedResourceUuid = dialog?.data.resourceUuid || ''; const sharingURLsDisabled = state.auth.config.clusterConfig.Workbench.DisableSharingURLsUI; return ({ ...props, + permissions: sharingManagementFormSelector(state, 'permissions'), saveEnabled: hasChanges(state), loading: working, sharedResourceUuid, -- 2.30.2