// Copyright (c) 2020-2021 Drew Lemmy // This file is part of KristWeb 2 under GPL-3.0. // Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt import { createReducer, ActionType } from "typesafe-actions"; import { KristWorkDetailed, KristCurrency, DEFAULT_CURRENCY, KristConstants, DEFAULT_CONSTANTS } from "../../krist/api/types"; import { setSyncNode, setLastBlockID, setDetailedWork, setCurrency, setConstants } from "../actions/NodeActions"; import packageJson from "../../../package.json"; export interface State { readonly lastBlockID: number; readonly detailedWork?: KristWorkDetailed; readonly syncNode: string; readonly currency: KristCurrency; readonly constants: KristConstants; } export function getInitialNodeState(): State { return { lastBlockID: 0, syncNode: localStorage.getItem("syncNode") || packageJson.defaultSyncNode, currency: DEFAULT_CURRENCY, constants: DEFAULT_CONSTANTS }; } export const NodeReducer = createReducer({} as State) .handleAction(setSyncNode, (state: State, action: ActionType<typeof setSyncNode>) => ({ ...state, syncNode: action.payload })) .handleAction(setLastBlockID, (state: State, action: ActionType<typeof setLastBlockID>) => ({ ...state, lastBlockID: action.payload })) .handleAction(setDetailedWork, (state: State, action: ActionType<typeof setDetailedWork>) => ({ ...state, detailedWork: action.payload })) .handleAction(setCurrency, (state: State, action: ActionType<typeof setCurrency>) => ({ ...state, currency: action.payload })) .handleAction(setConstants, (state: State, action: ActionType<typeof setConstants>) => ({ ...state, constants: action.payload }));