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: OriginatingUser.NONE,
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 targetUser, targetUserToken: undefined,
53 userToLink: undefined, userToLinkToken: undefined,
54 status: LinkAccountPanelStatus.INITIAL, error: LinkAccountPanelError.NONE, originatingUser: OriginatingUser.NONE
56 LINK_LOAD: ({ originatingUser, userToLink, targetUser, targetUserToken, userToLinkToken}) => ({
58 targetUser, targetUserToken,
59 userToLink, userToLinkToken,
60 status: LinkAccountPanelStatus.LINKING, error: LinkAccountPanelError.NONE
62 LINK_INVALID: ({originatingUser, targetUser, userToLink, error}) => ({
64 targetUser, targetUserToken: undefined,
65 userToLink, userToLinkToken: undefined,
66 error, status: LinkAccountPanelStatus.ERROR
68 HAS_SESSION_DATA: () => ({
69 ...state, status: LinkAccountPanelStatus.HAS_SESSION_DATA