1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
5 import { linkAccountPanelActions, LinkAccountPanelAction } from "~/store/link-account-panel/link-account-panel-actions";
6 import { UserResource } from "~/models/user";
8 export enum LinkAccountPanelStatus {
16 export enum LinkAccountPanelError {
23 export enum OriginatingUser {
29 export interface LinkAccountPanelState {
30 selectedCluster: string | undefined;
31 originatingUser: OriginatingUser | undefined;
32 targetUser: UserResource | undefined;
33 targetUserToken: string | undefined;
34 userToLink: UserResource | undefined;
35 userToLinkToken: string | undefined;
36 status: LinkAccountPanelStatus;
37 error: LinkAccountPanelError;
40 const initialState = {
41 selectedCluster: undefined,
42 originatingUser: OriginatingUser.NONE,
43 targetUser: undefined,
44 targetUserToken: undefined,
45 userToLink: undefined,
46 userToLinkToken: undefined,
47 status: LinkAccountPanelStatus.NONE,
48 error: LinkAccountPanelError.NONE
51 export const linkAccountPanelReducer = (state: LinkAccountPanelState = initialState, action: LinkAccountPanelAction) =>
52 linkAccountPanelActions.match(action, {
54 LINK_INIT: ({ targetUser }) => ({
56 targetUser, targetUserToken: undefined,
57 userToLink: undefined, userToLinkToken: undefined,
58 status: LinkAccountPanelStatus.INITIAL, error: LinkAccountPanelError.NONE, originatingUser: OriginatingUser.NONE
60 LINK_LOAD: ({ originatingUser, userToLink, targetUser, targetUserToken, userToLinkToken}) => ({
63 targetUser, targetUserToken,
64 userToLink, userToLinkToken,
65 status: LinkAccountPanelStatus.LINKING, error: LinkAccountPanelError.NONE
67 LINK_INVALID: ({ originatingUser, targetUser, userToLink, error }) => ({
70 targetUser, targetUserToken: undefined,
71 userToLink, userToLinkToken: undefined,
72 error, status: LinkAccountPanelStatus.ERROR
74 SET_SELECTED_CLUSTER: ({ selectedCluster }) => ({
75 ...state, selectedCluster
77 HAS_SESSION_DATA: () => ({
78 ...state, status: LinkAccountPanelStatus.HAS_SESSION_DATA