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 originatingUser: OriginatingUser | undefined;
31 targetUser: UserResource | undefined;
32 targetUserToken: string | undefined;
33 userToLink: UserResource | undefined;
34 userToLinkToken: string | undefined;
35 status: LinkAccountPanelStatus;
36 error: LinkAccountPanelError;
39 const initialState = {
40 originatingUser: OriginatingUser.NONE,
41 targetUser: undefined,
42 targetUserToken: undefined,
43 userToLink: undefined,
44 userToLinkToken: undefined,
45 status: LinkAccountPanelStatus.NONE,
46 error: LinkAccountPanelError.NONE
49 export const linkAccountPanelReducer = (state: LinkAccountPanelState = initialState, action: LinkAccountPanelAction) =>
50 linkAccountPanelActions.match(action, {
52 LINK_INIT: ({ targetUser }) => ({
53 targetUser, targetUserToken: undefined,
54 userToLink: undefined, userToLinkToken: undefined,
55 status: LinkAccountPanelStatus.INITIAL, error: LinkAccountPanelError.NONE, originatingUser: OriginatingUser.NONE
57 LINK_LOAD: ({ originatingUser, userToLink, targetUser, targetUserToken, userToLinkToken}) => ({
59 targetUser, targetUserToken,
60 userToLink, userToLinkToken,
61 status: LinkAccountPanelStatus.LINKING, error: LinkAccountPanelError.NONE
63 LINK_INVALID: ({originatingUser, targetUser, userToLink, error}) => ({
65 targetUser, targetUserToken: undefined,
66 userToLink, userToLinkToken: undefined,
67 error, status: LinkAccountPanelStatus.ERROR
69 HAS_SESSION_DATA: () => ({
70 ...state, status: LinkAccountPanelStatus.HAS_SESSION_DATA