8cfc58f756dbd97c55ba338a5ca057bfc1851795
[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     initializeManagementForm
15 } from 'store/sharing-dialog/sharing-dialog-actions';
16 import { WithDialogProps } from 'store/dialog/with-dialog';
17 import SharingDialogComponent, {
18     SharingDialogDataProps,
19     SharingDialogActionProps
20 } from './sharing-dialog-component';
21 import {
22     hasChanges,
23     SHARING_DIALOG_NAME
24 } from 'store/sharing-dialog/sharing-dialog-types';
25 import { WithProgressStateProps } from 'store/progress-indicator/with-progress';
26 import { getDialog } from 'store/dialog/dialog-reducer';
27
28 type Props = WithDialogProps<string> & WithProgressStateProps;
29
30 const mapStateToProps = (state: RootState, { working, ...props }: Props): SharingDialogDataProps => {
31     const dialog = getDialog<SharingDialogData>(state.dialog, SHARING_DIALOG_NAME);
32     return ({
33     ...props,
34     saveEnabled: hasChanges(state),
35     loading: working,
36     sharedResourceUuid: dialog?.data.resourceUuid || '',
37     })
38 };
39
40 const mapDispatchToProps = (dispatch: Dispatch, { ...props }: Props): SharingDialogActionProps => ({
41     ...props,
42     onClose: props.closeDialog,
43     onSave: () => {
44         dispatch<any>(saveSharingDialogChanges);
45     },
46     onCreateSharingToken: (d: Date) => () => {
47         dispatch<any>(createSharingToken(d));
48     },
49     refreshPermissions: () => {
50         dispatch<any>(initializeManagementForm);
51     }
52 });
53
54 export const SharingDialog = compose(
55     connectSharingDialog,
56     connectSharingDialogProgress,
57     connect(mapStateToProps, mapDispatchToProps)
58 )(SharingDialogComponent);
59