9e0bd3f74e3b852cbeeaa6078f2e0a5b667b7213
[arvados-workbench2.git] / src / store / link-account-panel / link-account-panel-reducer.ts
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 import { linkAccountPanelActions, LinkAccountPanelAction } from "~/store/link-account-panel/link-account-panel-actions";
6 import { UserResource } from "~/models/user";
7
8 export enum LinkAccountPanelStatus {
9     INITIAL,
10     LINKING,
11     ERROR
12 }
13
14 export enum LinkAccountPanelError {
15     NONE,
16     NON_ADMIN,
17     SAME_USER
18 }
19
20 export enum OriginatingUser {
21     NONE,
22     TARGET_USER,
23     USER_TO_LINK
24 }
25
26 export interface LinkAccountPanelState {
27     originatingUser: OriginatingUser | undefined;
28     targetUser: UserResource | undefined;
29     targetUserToken: string | undefined;
30     userToLink: UserResource | undefined;
31     userToLinkToken: string | undefined;
32     status: LinkAccountPanelStatus;
33     error: LinkAccountPanelError;
34 }
35
36 const initialState = {
37     originatingUser: undefined,
38     targetUser: undefined,
39     targetUserToken: undefined,
40     userToLink: undefined,
41     userToLinkToken: undefined,
42     status: LinkAccountPanelStatus.INITIAL,
43     error: LinkAccountPanelError.NONE
44 };
45
46 export const linkAccountPanelReducer = (state: LinkAccountPanelState = initialState, action: LinkAccountPanelAction) =>
47     linkAccountPanelActions.match(action, {
48         default: () => state,
49         LINK_INIT: ({ targetUser }) => ({
50             ...state, targetUser, status: LinkAccountPanelStatus.INITIAL, error: LinkAccountPanelError.NONE, originatingUser: OriginatingUser.NONE
51         }),
52         LINK_LOAD: ({ originatingUser, userToLink, targetUser, targetUserToken, userToLinkToken}) => ({
53             ...state, originatingUser, targetUser, targetUserToken, userToLink, userToLinkToken, status: LinkAccountPanelStatus.LINKING, error: LinkAccountPanelError.NONE
54         }),
55         LINK_INVALID: ({originatingUser, targetUser, userToLink, error}) => ({
56             ...state, originatingUser, targetUser, userToLink, error, status: LinkAccountPanelStatus.ERROR
57         })
58     });