Files
LingvAI/utils/reducer.ts
David cf0b310918 Added hotkeys + updated dependencies & webpack5 + humanetech badge (#15)
* Added language & theme switch hotkeys

* Hotkeys testing

* Language switch when equal

* Shortcut keys changed

* Dependencies updated & upgraded to webpack5

* Added HumaneTech badge

* Disabled FLoC
2021-04-30 23:11:26 +02:00

66 lines
1.6 KiB
TypeScript

import { replaceBoth } from "./language";
export const initialState = {
source: "auto",
target: "en",
query: "",
delayedQuery: "",
translation: "",
isLoading: true
}
type State = typeof initialState;
export enum Actions {
SET_FIELD,
SET_ALL,
SWITCH_LANGS
}
type Action = {
type: Actions.SET_FIELD,
payload: {
key: string,
value: any
}
} | {
type: Actions.SET_ALL,
payload: {
state: State
}
} | {
type: Actions.SWITCH_LANGS
}
export default function reducer(state: State, action: Action) {
const { source, target } = replaceBoth("exception", {
source: state.target,
target: state.source
});
switch (action.type) {
case Actions.SET_FIELD:
const { key, value } = action.payload;
if (key === "source" && value === state.target)
return { ...state, [key]: value, target: target !== value ? target : "eo" };
if (key === "target" && value === state.source)
return { ...state, [key]: value, source };
return { ...state, [key]: value };
case Actions.SET_ALL:
return { ...state, ...action.payload.state };
case Actions.SWITCH_LANGS:
return {
...state,
source: source !== target
? source
: initialState.source,
target,
query: state.translation,
delayedQuery: state.translation,
translation: ""
};
default:
return state;
}
}