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 {
15 export enum LinkAccountPanelError {
22 export enum OriginatingUser {
28 export interface LinkAccountPanelState {
29 originatingUser: OriginatingUser | undefined;
30 targetUser: UserResource | undefined;
31 targetUserToken: string | undefined;
32 userToLink: UserResource | undefined;
33 userToLinkToken: string | undefined;
34 status: LinkAccountPanelStatus;
35 error: LinkAccountPanelError;
38 const initialState = {
39 originatingUser: undefined,
40 targetUser: undefined,
41 targetUserToken: undefined,
42 userToLink: undefined,
43 userToLinkToken: undefined,
44 status: LinkAccountPanelStatus.INITIAL,
45 error: LinkAccountPanelError.NONE
48 export const linkAccountPanelReducer = (state: LinkAccountPanelState = initialState, action: LinkAccountPanelAction) =>
49 linkAccountPanelActions.match(action, {
51 LINK_INIT: ({ targetUser }) => ({
52 ...state, targetUser, status: LinkAccountPanelStatus.INITIAL, error: LinkAccountPanelError.NONE, originatingUser: OriginatingUser.NONE
54 LINK_LOAD: ({ originatingUser, userToLink, targetUser, targetUserToken, userToLinkToken}) => ({
55 ...state, originatingUser, targetUser, targetUserToken, userToLink, userToLinkToken, status: LinkAccountPanelStatus.LINKING, error: LinkAccountPanelError.NONE
57 LINK_INVALID: ({originatingUser, targetUser, userToLink, error}) => ({
58 ...state, originatingUser, targetUser, userToLink, error, status: LinkAccountPanelStatus.ERROR
60 HAS_SESSION_DATA: () => ({
61 ...state, status: LinkAccountPanelStatus.HAS_SESSION_DATA