// Copyright (C) The Arvados Authors. All rights reserved. // // SPDX-License-Identifier: AGPL-3.0 import React from 'react'; import { Dialog, DialogTitle, Button, Grid, DialogContent, CircularProgress, Paper, Tabs, Tab, } from '@material-ui/core'; import { StyleRulesCallback, WithStyles, withStyles } from '@material-ui/core/styles'; import { DialogActions } from 'components/dialog-actions/dialog-actions'; import { SharingURLsContent } from './sharing-urls'; import { extractUuidObjectType, ResourceObjectType } from 'models/resource'; import { SharingInvitationForm } from './sharing-invitation-form'; import { SharingManagementForm } from './sharing-management-form'; export interface SharingDialogDataProps { open: boolean; loading: boolean; saveEnabled: boolean; sharedResourceUuid: string; } export interface SharingDialogActionProps { onClose: () => void; onSave: () => void; onCreateSharingToken: () => void; refreshPermissions: () => void; } enum SharingDialogTab { PERMISSIONS = 0, URLS = 1, } export default (props: SharingDialogDataProps & SharingDialogActionProps) => { const { open, loading, saveEnabled, sharedResourceUuid, onClose, onSave, onCreateSharingToken, refreshPermissions } = props; const showTabs = extractUuidObjectType(sharedResourceUuid) === ResourceObjectType.COLLECTION; const [tabNr, setTabNr] = React.useState(SharingDialogTab.PERMISSIONS); // Sets up the dialog depending on the resource type if (!showTabs && tabNr !== SharingDialogTab.PERMISSIONS) { setTabNr(SharingDialogTab.PERMISSIONS); } return Sharing settings { showTabs && { if (tb === SharingDialogTab.PERMISSIONS) { refreshPermissions(); } setTabNr(tb)} }> } { tabNr === SharingDialogTab.PERMISSIONS && } { tabNr === SharingDialogTab.URLS && } { tabNr === SharingDialogTab.PERMISSIONS && } { tabNr === SharingDialogTab.URLS && } { tabNr === SharingDialogTab.PERMISSIONS && } { loading && } ; }; const loadingIndicatorStyles: StyleRulesCallback<'root'> = theme => ({ root: { position: 'absolute', top: 0, right: 0, bottom: 0, left: 0, display: 'flex', alignItems: 'center', justifyContent: 'center', backgroundColor: 'rgba(255, 255, 255, 0.8)', }, }); const LoadingIndicator = withStyles(loadingIndicatorStyles)( (props: WithStyles<'root'>) => );