16115: Further sharing dialog cleanup.
[arvados-workbench2.git] / src / store / sharing-dialog / sharing-dialog-types.ts
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 import { PermissionLevel } from 'models/permission';
6 import { getFormValues, isDirty } from 'redux-form';
7 import { RootState } from 'store/store';
8
9 export const SHARING_DIALOG_NAME = 'SHARING_DIALOG_NAME';
10 export const SHARING_MANAGEMENT_FORM_NAME = 'SHARING_MANAGEMENT_FORM_NAME';
11 export const SHARING_INVITATION_FORM_NAME = 'SHARING_INVITATION_FORM_NAME';
12
13 export interface SharingManagementFormData {
14     permissions: SharingManagementFormDataRow[];
15     initialPermissions: SharingManagementFormDataRow[];
16 }
17
18 export interface SharingManagementFormDataRow {
19     email: string;
20     permissions: PermissionLevel;
21     permissionUuid: string;
22 }
23
24 export interface SharingInvitationFormData {
25     permissions: PermissionLevel;
26     invitedPeople: SharingInvitationFormPersonData[];
27 }
28
29 export interface SharingInvitationFormPersonData {
30     email: string;
31     name: string;
32     uuid: string;
33 }
34
35 export const getSharingMangementFormData = (state: any) =>
36     getFormValues(SHARING_MANAGEMENT_FORM_NAME)(state) as SharingManagementFormData;
37
38 export const hasChanges = (state: RootState) =>
39     isDirty(SHARING_MANAGEMENT_FORM_NAME)(state) ||
40     isDirty(SHARING_INVITATION_FORM_NAME)(state);