1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
5 import React from 'react';
16 } from '@material-ui/core';
21 } from '@material-ui/core/styles';
22 import { DialogActions } from 'components/dialog-actions/dialog-actions';
23 import { SharingURLsContent } from './sharing-urls';
25 extractUuidObjectType,
27 } from 'models/resource';
28 import { SharingInvitationForm } from './sharing-invitation-form';
29 import { SharingManagementForm } from './sharing-management-form';
31 export interface SharingDialogDataProps {
35 sharedResourceUuid: string;
37 export interface SharingDialogActionProps {
40 onCreateSharingToken: () => void;
41 refreshPermissions: () => void;
43 enum SharingDialogTab {
47 export default (props: SharingDialogDataProps & SharingDialogActionProps) => {
48 const { open, loading, saveEnabled, sharedResourceUuid,
49 onClose, onSave, onCreateSharingToken, refreshPermissions } = props;
50 const showTabs = extractUuidObjectType(sharedResourceUuid) === ResourceObjectType.COLLECTION;
51 const [tabNr, setTabNr] = React.useState<number>(SharingDialogTab.PERMISSIONS);
53 // Sets up the dialog depending on the resource type
54 if (!showTabs && tabNr !== SharingDialogTab.PERMISSIONS) {
55 setTabNr(SharingDialogTab.PERMISSIONS);
59 {...{ open, onClose }}
60 className="sharing-dialog"
63 disableBackdropClick={saveEnabled}
64 disableEscapeKeyDown={saveEnabled}>
70 onChange={(_, tb) => {
71 if (tb === SharingDialogTab.PERMISSIONS) {
76 <Tab label="With users/groups" />
77 <Tab label="Sharing URLs" disabled={saveEnabled} />
81 { tabNr === SharingDialogTab.PERMISSIONS &&
82 <Grid container direction='column' spacing={24}>
84 <SharingManagementForm />
88 { tabNr === SharingDialogTab.URLS &&
89 <SharingURLsContent uuid={sharedResourceUuid} />
93 <Grid container spacing={8}>
94 { tabNr === SharingDialogTab.PERMISSIONS &&
96 <SharingInvitationForm />
99 { tabNr === SharingDialogTab.URLS &&
104 onClick={onCreateSharingToken}>
109 { tabNr === SharingDialogTab.PERMISSIONS &&
115 disabled={!saveEnabled}>
121 <Button onClick={onClose}>
128 loading && <LoadingIndicator />
133 const loadingIndicatorStyles: StyleRulesCallback<'root'> = theme => ({
135 position: 'absolute',
141 alignItems: 'center',
142 justifyContent: 'center',
143 backgroundColor: 'rgba(255, 255, 255, 0.8)',
147 const LoadingIndicator = withStyles(loadingIndicatorStyles)(
148 (props: WithStyles<'root'>) =>
149 <Paper classes={props.classes}>