X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/3c7e3cdc547ad5468421e1c049daa94b0d4b8bc0..2a7fd99c212c33a1ec9911f8529fa5afc59a7bb2:/src/views-components/sharing-dialog/sharing-dialog.tsx diff --git a/src/views-components/sharing-dialog/sharing-dialog.tsx b/src/views-components/sharing-dialog/sharing-dialog.tsx index fe3b8396aa..1c9e4d0393 100644 --- a/src/views-components/sharing-dialog/sharing-dialog.tsx +++ b/src/views-components/sharing-dialog/sharing-dialog.tsx @@ -4,50 +4,77 @@ import { compose, Dispatch } from 'redux'; import { connect } from 'react-redux'; - -import React from 'react'; -import { connectSharingDialog, saveSharingDialogChanges, connectSharingDialogProgress, sendSharingInvitations } from 'store/sharing-dialog/sharing-dialog-actions'; -import { WithDialogProps } from 'store/dialog/with-dialog'; import { RootState } from 'store/store'; - -import SharingDialogComponent, { SharingDialogDataProps, SharingDialogActionProps } from './sharing-dialog-component'; -import { SharingDialogContent } from './sharing-dialog-content'; -import { connectAdvancedViewSwitch, AdvancedViewSwitchInjectedProps } from './advanced-view-switch'; -import { hasChanges } from 'store/sharing-dialog/sharing-dialog-types'; +import { formValueSelector } from 'redux-form' +import { + connectSharingDialog, + saveSharingDialogChanges, + connectSharingDialogProgress, + SharingDialogData, + createSharingToken, + initializeManagementForm +} from 'store/sharing-dialog/sharing-dialog-actions'; +import { WithDialogProps } from 'store/dialog/with-dialog'; +import SharingDialogComponent, { + SharingDialogDataProps, + SharingDialogActionProps +} from './sharing-dialog-component'; +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'; +import { getDialog } from 'store/dialog/dialog-reducer'; +import { filterResources } from 'store/resources/resources'; +import { ApiClientAuthorization } from 'models/api-client-authorization'; +import { ResourceKind } from 'models/resource'; -type Props = WithDialogProps & AdvancedViewSwitchInjectedProps & WithProgressStateProps; +type Props = WithDialogProps & WithProgressStateProps; -const mapStateToProps = (state: RootState, { advancedViewOpen, working, ...props }: Props): SharingDialogDataProps => ({ - ...props, - saveEnabled: hasChanges(state), - loading: working, - advancedEnabled: !advancedViewOpen, - children: , -}); +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, + sharingURLsDisabled, + sharingURLsNr: !sharingURLsDisabled + ? (filterResources((resource: ApiClientAuthorization) => + resource.kind === ResourceKind.API_CLIENT_AUTHORIZATION && + resource.scopes.includes(`GET /arvados/v1/collections/${sharedResourceUuid}`) && + resource.scopes.includes(`GET /arvados/v1/collections/${sharedResourceUuid}/`) && + resource.scopes.includes('GET /arvados/v1/keep_services/accessible') + )(state.resources) as ApiClientAuthorization[]).length + : 0, + privateAccess: getSharingPublicAccessFormData(state)?.visibility === VisibilityLevel.PRIVATE, + }) +}; -const mapDispatchToProps = (dispatch: Dispatch, { toggleAdvancedView, advancedViewOpen, ...props }: Props): SharingDialogActionProps => ({ +const mapDispatchToProps = (dispatch: Dispatch, { ...props }: Props): SharingDialogActionProps => ({ ...props, onClose: props.closeDialog, - onExited: () => { - if (advancedViewOpen) { - toggleAdvancedView(); - } - }, onSave: () => { - if (advancedViewOpen) { - dispatch(saveSharingDialogChanges); - } else { - dispatch(sendSharingInvitations); - } + setTimeout(() => dispatch(saveSharingDialogChanges), 0); + }, + onCreateSharingToken: (d: Date) => () => { + dispatch(createSharingToken(d)); }, - onAdvanced: toggleAdvancedView, + refreshPermissions: () => { + dispatch(initializeManagementForm); + } }); export const SharingDialog = compose( - connectAdvancedViewSwitch, connectSharingDialog, connectSharingDialogProgress, connect(mapStateToProps, mapDispatchToProps) )(SharingDialogComponent); -