Files
clean-copy/app/src/reducer.ts
T

119 lines
2.8 KiB
TypeScript

import { AppAction, AppState } from "./types";
export const initialAppState: AppState = {
config: {
strip_utms: true,
fix_quotes: true,
fix_newlines: true,
play_sound: true,
autostart: false,
hotkey: "Alt+Shift+C",
custom_params: [],
},
hotkeyConflict: false,
hwid: "",
isLicensed: false,
tabState: { tab: "general", isRecording: false },
};
export function appReducer(state: AppState, action: AppAction): AppState {
switch (action.type) {
case "INITIALIZE":
return {
...state,
config: action.payload.config,
hotkeyConflict: action.payload.hotkeyConflict,
hwid: action.payload.hwid,
isLicensed: action.payload.isLicensed,
tabState: action.payload.isLicensed
? { tab: "general", isRecording: false }
: { tab: "license", keyInput: "", isActivating: false, error: "" },
};
case "SET_TAB": {
const nextTab = action.payload;
if (!state.isLicensed && nextTab !== "license") {
return state;
}
if (nextTab === "general") {
return { ...state, tabState: { tab: "general", isRecording: false } };
}
if (nextTab === "rules") {
return { ...state, tabState: { tab: "rules" } };
}
return {
...state,
tabState: {
tab: "license",
keyInput: "",
isActivating: false,
error: "",
},
};
}
case "SET_CONFIG":
return {
...state,
config: { ...state.config, ...action.payload },
};
case "SET_RECORDING":
if (state.tabState.tab === "general") {
return {
...state,
tabState: { ...state.tabState, isRecording: action.payload },
};
}
return state;
case "SET_LICENSE_KEY_INPUT":
if (state.tabState.tab === "license") {
return {
...state,
tabState: { ...state.tabState, keyInput: action.payload, error: "" },
};
}
return state;
case "START_ACTIVATION":
if (state.tabState.tab === "license") {
return {
...state,
tabState: { ...state.tabState, isActivating: true, error: "" },
};
}
return state;
case "ACTIVATION_SUCCESS":
return {
...state,
isLicensed: true,
tabState: {
tab: "license",
keyInput: "",
isActivating: false,
error: "",
},
};
case "ACTIVATION_FAILURE":
if (state.tabState.tab === "license") {
return {
...state,
tabState: {
...state.tabState,
isActivating: false,
error: action.payload,
},
};
}
return state;
case "SET_HOTKEY_CONFLICT":
return { ...state, hotkeyConflict: action.payload };
default:
return state;
}
}