X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/0bd774be1714eb7bb815cef3d44803eac6c735ec..HEAD:/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 8cfc58f7..1c9e4d03 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, @@ -19,21 +20,42 @@ import SharingDialogComponent, { SharingDialogActionProps } from './sharing-dialog-component'; import { + getSharingPublicAccessFormData, hasChanges, - SHARING_DIALOG_NAME + 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 & 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, - saveEnabled: hasChanges(state), - loading: working, - sharedResourceUuid: dialog?.data.resourceUuid || '', + ...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, }) }; @@ -41,7 +63,7 @@ const mapDispatchToProps = (dispatch: Dispatch, { ...props }: Props): SharingDia ...props, onClose: props.closeDialog, onSave: () => { - dispatch(saveSharingDialogChanges); + setTimeout(() => dispatch(saveSharingDialogChanges), 0); }, onCreateSharingToken: (d: Date) => () => { dispatch(createSharingToken(d)); @@ -56,4 +78,3 @@ export const SharingDialog = compose( connectSharingDialogProgress, connect(mapStateToProps, mapDispatchToProps) )(SharingDialogComponent); -