X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/f55d7e31aa315de4eece3139c4fa1df7d6eb929e..6fbb4eca48ea5907887e61d60b60987cf2d1c8ca:/src/views-components/sharing-dialog/sharing-dialog-component.tsx diff --git a/src/views-components/sharing-dialog/sharing-dialog-component.tsx b/src/views-components/sharing-dialog/sharing-dialog-component.tsx index 259390aa..cd7ea9bb 100644 --- a/src/views-components/sharing-dialog/sharing-dialog-component.tsx +++ b/src/views-components/sharing-dialog/sharing-dialog-component.tsx @@ -13,6 +13,9 @@ import { Paper, Tabs, Tab, + Checkbox, + FormControlLabel, + Typography, } from '@material-ui/core'; import { StyleRulesCallback, @@ -27,6 +30,15 @@ import { } from 'models/resource'; import { SharingInvitationForm } from './sharing-invitation-form'; import { SharingManagementForm } from './sharing-management-form'; +import { + BasePicker, + Calendar, + MuiPickersUtilsProvider, + TimePickerView +} from 'material-ui-pickers'; +import DateFnsUtils from "@date-io/date-fns"; +import moment from 'moment'; +import { SharingPublicAccessForm } from './sharing-public-access-form'; export interface SharingDialogDataProps { open: boolean; @@ -37,7 +49,7 @@ export interface SharingDialogDataProps { export interface SharingDialogActionProps { onClose: () => void; onSave: () => void; - onCreateSharingToken: () => void; + onCreateSharingToken: (d: Date | undefined) => () => void; refreshPermissions: () => void; } enum SharingDialogTab { @@ -49,12 +61,22 @@ export default (props: SharingDialogDataProps & SharingDialogActionProps) => { onClose, onSave, onCreateSharingToken, refreshPermissions } = props; const showTabs = extractUuidObjectType(sharedResourceUuid) === ResourceObjectType.COLLECTION; const [tabNr, setTabNr] = React.useState(SharingDialogTab.PERMISSIONS); + const [expDate, setExpDate] = React.useState(); + const [withExpiration, setWithExpiration] = React.useState(false); // Sets up the dialog depending on the resource type if (!showTabs && tabNr !== SharingDialogTab.PERMISSIONS) { setTabNr(SharingDialogTab.PERMISSIONS); } + React.useEffect(() => { + if (!withExpiration) { + setExpDate(undefined); + } else { + setExpDate(moment().add(1, 'hour').toDate()); + } + }, [withExpiration]); + return { { tabNr === SharingDialogTab.PERMISSIONS && - - - + + + + + + } { tabNr === SharingDialogTab.URLS && @@ -95,30 +120,59 @@ export default (props: SharingDialogDataProps & SharingDialogActionProps) => { } + { tabNr === SharingDialogTab.URLS && withExpiration && <> + + + + {({ date, handleChange }) => (<> + + + + + {}} + onSecondsChange={() => {}} + onHourChange={handleChange} + /> + + )} + + + + + + Maximum expiration date may be limited by the cluster configuration. + + + } - { tabNr === SharingDialogTab.URLS && + { tabNr === SharingDialogTab.URLS && <> + setWithExpiration(e.target.checked)} />} + label="With expiration" /> + - - } + } { tabNr === SharingDialogTab.PERMISSIONS && - } -