Newer
Older
taehui / qwilight-fe / src / hof / setHOFStore.ts
@Taehui Taehui on 19 Nov 9 KB v1.0.0
import { TFunction } from "i18next";
import { runInAction } from "mobx";
import { sprintf } from "sprintf-js";

import { formatText } from "src/Utility";
import { HOF } from "src/hof/HOF";
import { wwwAXIOS } from "src/Www";
import { GetHOFAPI } from "src/wwwAPI";

export default function setLevelStore() {
  const formatValue = (
    hofs: GetHOFAPI[],
    onValue: (value: number) => string,
  ): HOF[] =>
    hofs.map((hof) => ({
      ...hof,
      text: onValue(hof.value),
    }));

  return {
    isTotalTotalLoading: false,
    isTotalHighestLoading: false,
    isTotalStandLoading: false,
    isTotalBandLoading: false,
    isAtTotalLoading: false,
    isAtHighestLoading: false,
    isAtStandLoading: false,
    isAtBandLoading: false,
    isAbility5KLoading: false,
    isAbility7KLoading: false,
    isAbility9KLoading: false,
    isLevelLoading: false,
    totalTotalHOF: [] as HOF[],
    totalHighestHOF: [] as HOF[],
    totalStandHOF: [] as HOF[],
    totalBandHOF: [] as HOF[],
    atTotalHOF: [] as HOF[],
    atHighestHOF: [] as HOF[],
    atStandHOF: [] as HOF[],
    atBandHOF: [] as HOF[],
    ability5KHOFs0: [] as HOF[],
    ability5KHOFs1: [] as HOF[],
    ability5KHOFs2: [] as HOF[],
    ability5KHOFs3: [] as HOF[],
    ability5KHOFs4: [] as HOF[],
    ability7KHOFs0: [] as HOF[],
    ability7KHOFs1: [] as HOF[],
    ability7KHOFs2: [] as HOF[],
    ability7KHOFs3: [] as HOF[],
    ability7KHOFs4: [] as HOF[],
    ability9KHOFs0: [] as HOF[],
    ability9KHOFs1: [] as HOF[],
    ability9KHOFs2: [] as HOF[],
    ability9KHOFs3: [] as HOF[],
    ability9KHOFs4: [] as HOF[],
    levelHOFs0: [] as HOF[],
    levelHOFs1: [] as HOF[],
    levelHOFs2: [] as HOF[],
    levelHOFs3: [] as HOF[],
    levelHOFs4: [] as HOF[],

    get isLoading() {
      return (
        this.isTotalTotalLoading ||
        this.isTotalHighestLoading ||
        this.isTotalStandLoading ||
        this.isTotalBandLoading ||
        this.isAtTotalLoading ||
        this.isAtHighestLoading ||
        this.isAtStandLoading ||
        this.isAtBandLoading ||
        this.isAbility5KLoading ||
        this.isAbility7KLoading ||
        this.isAbility9KLoading ||
        this.isLevelLoading
      );
    },

    async getTotalTotalHOF(t: TFunction) {
      this.isTotalTotalLoading = true;
      const { status, data } =
        await wwwAXIOS.get<GetHOFAPI[]>("/hof/totalTotal");
      if (status === 200) {
        runInAction(() => {
          this.totalTotalHOF = formatValue(data, (value) =>
            sprintf(t("textHandled"), formatText(value)),
          );
          this.isTotalTotalLoading = false;
        });
      }
    },

    async getTotalHighestHOF(t: TFunction) {
      this.isTotalHighestLoading = true;
      const { status, data } =
        await wwwAXIOS.get<GetHOFAPI[]>("/hof/totalHighest");
      if (status === 200) {
        runInAction(() => {
          this.totalHighestHOF = formatValue(data, (value) =>
            sprintf(t("textCount"), formatText(value)),
          );
          this.isTotalHighestLoading = false;
        });
      }
    },

    async getTotalStandHOF(t: TFunction) {
      this.isTotalStandLoading = true;
      const { status, data } =
        await wwwAXIOS.get<GetHOFAPI[]>("/hof/totalStand");
      if (status === 200) {
        runInAction(() => {
          this.totalStandHOF = formatValue(data, (value) =>
            sprintf(t("textStand"), formatText(value)),
          );
          this.isTotalStandLoading = false;
        });
      }
    },

    async getTotalBandHOF(t: TFunction) {
      this.isTotalBandLoading = true;
      const { status, data } =
        await wwwAXIOS.get<GetHOFAPI[]>("/hof/totalBand");
      if (status === 200) {
        runInAction(() => {
          this.totalBandHOF = formatValue(data, (value) =>
            sprintf(t("textBand"), formatText(value)),
          );
          this.isTotalBandLoading = false;
        });
      }
    },

    async getAtTotalHOF(t: TFunction) {
      this.isAtTotalLoading = true;
      const { status, data } = await wwwAXIOS.get<GetHOFAPI[]>("/hof/atTotal");
      if (status === 200) {
        runInAction(() => {
          this.atTotalHOF = formatValue(data, (value) =>
            sprintf(t("textHandled"), formatText(value)),
          );
          this.isAtTotalLoading = false;
        });
      }
    },

    async getAtHighestHOF(t: TFunction) {
      this.isAtHighestLoading = true;
      const { status, data } =
        await wwwAXIOS.get<GetHOFAPI[]>("/hof/atHighest");
      if (status === 200) {
        runInAction(() => {
          this.atHighestHOF = formatValue(data, (value) =>
            sprintf(t("textCount"), formatText(value)),
          );
          this.isAtHighestLoading = false;
        });
      }
    },

    async getAtStandHOF(t: TFunction) {
      this.isAtStandLoading = true;
      const { status, data } = await wwwAXIOS.get<GetHOFAPI[]>("/hof/atStand");
      if (status === 200) {
        runInAction(() => {
          this.atStandHOF = formatValue(data, (value) =>
            sprintf(t("textStand"), formatText(value)),
          );
          this.isAtStandLoading = false;
        });
      }
    },

    async getAtBandHOF(t: TFunction) {
      this.isAtBandLoading = true;
      const { status, data } = await wwwAXIOS.get<GetHOFAPI[]>("/hof/atBand");
      if (status === 200) {
        runInAction(() => {
          this.atBandHOF = formatValue(data, (value) =>
            sprintf(t("textBand"), formatText(value)),
          );
          this.isAtBandLoading = false;
        });
      }
    },

    async getAbility5KHOF() {
      this.isAbility5KLoading = true;
      const { status, data } =
        await wwwAXIOS.get<GetHOFAPI[]>("/hof/ability5K");
      if (status === 200) {
        runInAction(() => {
          this.ability5KHOFs0 = formatValue(data.slice(0, 10), (value) =>
            sprintf("%s Point", formatText(value)),
          );
          this.ability5KHOFs1 = formatValue(data.slice(10, 20), (value) =>
            sprintf("%s Point", formatText(value)),
          );
          this.ability5KHOFs2 = formatValue(data.slice(20, 30), (value) =>
            sprintf("%s Point", formatText(value)),
          );
          this.ability5KHOFs3 = formatValue(data.slice(30, 40), (value) =>
            sprintf("%s Point", formatText(value)),
          );
          this.ability5KHOFs4 = formatValue(data.slice(40, 50), (value) =>
            sprintf("%s Point", formatText(value)),
          );
          this.isAbility5KLoading = false;
        });
      }
    },

    async getAbility7KHOF() {
      this.isAbility7KLoading = true;
      const { status, data } =
        await wwwAXIOS.get<GetHOFAPI[]>("/hof/ability7K");
      if (status === 200) {
        runInAction(() => {
          this.ability7KHOFs0 = formatValue(data.slice(0, 10), (value) =>
            sprintf("%s Point", formatText(value)),
          );
          this.ability7KHOFs1 = formatValue(data.slice(10, 20), (value) =>
            sprintf("%s Point", formatText(value)),
          );
          this.ability7KHOFs2 = formatValue(data.slice(20, 30), (value) =>
            sprintf("%s Point", formatText(value)),
          );
          this.ability7KHOFs3 = formatValue(data.slice(30, 40), (value) =>
            sprintf("%s Point", formatText(value)),
          );
          this.ability7KHOFs4 = formatValue(data.slice(40, 50), (value) =>
            sprintf("%s Point", formatText(value)),
          );
          this.isAbility7KLoading = false;
        });
      }
    },

    async getAbility9KHOF() {
      this.isAbility9KLoading = true;
      const { status, data } =
        await wwwAXIOS.get<GetHOFAPI[]>("/hof/ability9K");
      if (status === 200) {
        runInAction(() => {
          this.ability9KHOFs0 = formatValue(data.slice(0, 10), (value) =>
            sprintf("%s Point", formatText(value)),
          );
          this.ability9KHOFs1 = formatValue(data.slice(10, 20), (value) =>
            sprintf("%s Point", formatText(value)),
          );
          this.ability9KHOFs2 = formatValue(data.slice(20, 30), (value) =>
            sprintf("%s Point", formatText(value)),
          );
          this.ability9KHOFs3 = formatValue(data.slice(30, 40), (value) =>
            sprintf("%s Point", formatText(value)),
          );
          this.ability9KHOFs4 = formatValue(data.slice(40, 50), (value) =>
            sprintf("%s Point", formatText(value)),
          );
          this.isAbility9KLoading = false;
        });
      }
    },

    async getLevelHOF() {
      this.isLevelLoading = true;
      const { status, data } = await wwwAXIOS.get<GetHOFAPI[]>("/hof/level");
      if (status === 200) {
        runInAction(() => {
          this.levelHOFs0 = formatValue(data.slice(0, 10), (value) =>
            sprintf("LV. %d", value),
          );
          this.levelHOFs1 = formatValue(data.slice(10, 20), (value) =>
            sprintf("LV. %d", value),
          );
          this.levelHOFs2 = formatValue(data.slice(20, 30), (value) =>
            sprintf("LV. %d", value),
          );
          this.levelHOFs3 = formatValue(data.slice(30, 40), (value) =>
            sprintf("LV. %d", value),
          );
          this.levelHOFs4 = formatValue(data.slice(40, 50), (value) =>
            sprintf("LV. %d", value),
          );
          this.isLevelLoading = false;
        });
      }
    },
  };
}