X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/3f809e0be2a712d1e576f1b2acf4aff73e0f16b0..95f1dba808337fed91cbcba656f94b68fc421e41:/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 b6c956e3..283f1a67 100644 --- a/src/views-components/sharing-dialog/sharing-dialog.tsx +++ b/src/views-components/sharing-dialog/sharing-dialog.tsx @@ -4,37 +4,78 @@ import { compose, Dispatch } from 'redux'; import { connect } from 'react-redux'; +import { RootState } from 'store/store'; +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'; -import * as React from 'react'; -import { connectSharingDialog } from '~/store/sharing-dialog/sharing-dialog-actions'; -import { WithDialogProps } from '~/store/dialog/with-dialog'; -import { RootState } from '~/store/store'; +type Props = WithDialogProps & WithProgressStateProps; -import SharingDialogComponent, { SharingDialogDataProps, SharingDialogActionProps } from './sharing-dialog-component'; -import { SharingDialogContent } from './sharing-dialog-content'; -import { connectAdvancedViewSwitch, AdvancedViewSwitchInjectedProps } from './advanced-view-switch'; -import { isDirty } from 'redux-form'; +const sharingManagementFormSelector = formValueSelector(SHARING_MANAGEMENT_FORM_NAME); -const mapStateToProps = (state: RootState, { advancedViewOpen, ...props }: WithDialogProps & AdvancedViewSwitchInjectedProps): SharingDialogDataProps => ({ +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: isDirty('SHARING_PUBLIC_ACCESS_FORM')(state) || - isDirty('SHARING_MANAGEMENT_FORM')(state) || - isDirty('SHARING_INVITATION_FORM')(state), - advancedEnabled: !advancedViewOpen, - children: , -}); + 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, { toggleAdvancedView, ...props }: WithDialogProps & AdvancedViewSwitchInjectedProps): SharingDialogActionProps => ({ +const mapDispatchToProps = (dispatch: Dispatch, { ...props }: Props): SharingDialogActionProps => ({ ...props, onClose: props.closeDialog, - onExited: toggleAdvancedView, - onSave: () => { console.log('save'); }, - onAdvanced: toggleAdvancedView, + onSave: () => { + dispatch(saveSharingDialogChanges); + }, + onCreateSharingToken: (d: Date) => () => { + dispatch(createSharingToken(d)); + }, + refreshPermissions: () => { + dispatch(initializeManagementForm); + } }); export const SharingDialog = compose( - connectAdvancedViewSwitch, connectSharingDialog, + connectSharingDialogProgress, connect(mapStateToProps, mapDispatchToProps) )(SharingDialogComponent);