languageReducer.ts 874 Bytes
Newer Older
mayi's avatar
mayi committed
1
import i18n from "i18next";
2 3 4 5 6
import {
  CHANGE_LANGUAGE,
  ADD_LANGUAGE,
  languageActionTypes,
} from "./languageActions";
mayi's avatar
mayi committed
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

export interface LanguageState {
  language: "en" | "zh";
  languageList: { name: string; code: string }[];
}

const defaultState: LanguageState = {
  language: "zh",
  languageList: [
    { name: "中文", code: "zh" },
    { name: "English", code: "en" },
  ],
};

// eslint-disable-next-line import/no-anonymous-default-export
22
export default (state = defaultState, action: languageActionTypes) => {
mayi's avatar
mayi committed
23 24
  switch (action.type) {
    case CHANGE_LANGUAGE:
25
      i18n.changeLanguage(action.payload); //此处会导致不是纯函数
mayi's avatar
mayi committed
26 27 28 29 30 31 32 33 34 35
      return { ...state, language: action.payload };
    case ADD_LANGUAGE:
      return {
        ...state,
        languageList: [...state.languageList, action.payload],
      };
    default:
      return state;
  }
};