16115: Updates the sharing dialog to support sharing URLs.
[arvados-workbench2.git] / src / views-components / sharing-dialog / sharing-dialog.tsx
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 import { compose, Dispatch } from 'redux';
6 import { connect } from 'react-redux';
7 import { RootState } from 'store/store';
8 import {
9     connectSharingDialog,
10     saveSharingDialogChanges,
11     connectSharingDialogProgress,
12     SharingDialogData,
13     createSharingToken
14 } from 'store/sharing-dialog/sharing-dialog-actions';
15 import { WithDialogProps } from 'store/dialog/with-dialog';
16 import SharingDialogComponent, {
17     SharingDialogDataProps,
18     SharingDialogActionProps
19 } from './sharing-dialog-component';
20 import {
21     hasChanges,
22     SHARING_DIALOG_NAME
23 } from 'store/sharing-dialog/sharing-dialog-types';
24 import { WithProgressStateProps } from 'store/progress-indicator/with-progress';
25 import { getDialog } from 'store/dialog/dialog-reducer';
26
27 type Props = WithDialogProps<string> & WithProgressStateProps;
28
29 const mapStateToProps = (state: RootState, { working, ...props }: Props): SharingDialogDataProps => {
30     const dialog = getDialog<SharingDialogData>(state.dialog, SHARING_DIALOG_NAME);
31     return ({
32     ...props,
33     saveEnabled: hasChanges(state),
34     loading: working,
35     sharedResourceUuid: dialog?.data.resourceUuid || '',
36     })
37 };
38
39 const mapDispatchToProps = (dispatch: Dispatch, { ...props }: Props): SharingDialogActionProps => ({
40     ...props,
41     onClose: props.closeDialog,
42     onSave: () => {
43         dispatch<any>(saveSharingDialogChanges);
44     },
45     onCreateSharingToken: () => {
46         dispatch<any>(createSharingToken);
47     }
48 });
49
50 export const SharingDialog = compose(
51     connectSharingDialog,
52     connectSharingDialogProgress,
53     connect(mapStateToProps, mapDispatchToProps)
54 )(SharingDialogComponent);
55