Newer
Older
taehui / qwilight-fe / src / app / [language] / avatar / query / useGetAvatar.ts
@Taehui Taehui on 26 Mar 2 KB v1.0.0
import { AvatarAPIAvatar, AvatarAPIWantAvatar } from "@/type/wwwAPI";
import { formatText } from "@/utilities/Utility";
import { wwwAPI } from "@/utilities/wwwAPI";
import { useQuery } from "@tanstack/react-query";
import { useTranslations } from "next-intl";
import { useParams } from "next/navigation";
import { useMemo } from "react";
import { getDatetime } from "taehui-ts/date";
import { useIsPath } from "taehui-ts/fe-utilities";

export type GetAvatar = {
  avatarID: string;
  avatarName: string;
  avatarIntro: string;
  totalCount: string;
  totalLength: string;
  topCount: string;
  date: string;
  avatarLevels: number[];
  avatarAbility5K: number;
  avatarAbility5KText: string;
  avatarAbility5KPlace: number;
  avatarAbility5KCount: number;
  avatarAbility7K: number;
  avatarAbility7KText: string;
  avatarAbility7KPlace: number;
  avatarAbility7KCount: number;
  avatarAbility9K: number;
  avatarAbility9KText: string;
  avatarAbility9KPlace: number;
  avatarAbility9KCount: number;
  dateSet: number[];
  dateValues: number[];
  quitStatusValues: number[];
};

export default function useGetAvatar() {
  let { want: [want] = [""] } = useParams<{ want: string[] }>();
  want = useMemo(() => decodeURIComponent(want), [want]);

  const t = useTranslations();

  const isPath = useIsPath();

  return useQuery<AvatarAPIWantAvatar[] | GetAvatar>({
    enabled: !!want && isPath("/avatar"),
    queryKey: ["avatar", want],
    queryFn: async () => {
      const { data } = await wwwAPI.get<
        AvatarAPIWantAvatar[] | AvatarAPIAvatar
      >("/avatar", {
        params: { want },
      });

      if (!data) {
        return [];
      }

      if (Array.isArray(data)) {
        return data;
      } else {
        return {
          ...data,
          totalCount: formatText(data.totalCount),
          totalLength: t("totalLengthText", {
            h: Math.floor(data.totalLength / 1000 / 60 / 60),
            m: Math.floor((data.totalLength / 1000 / 60) % 60),
            s: Math.floor((data.totalLength / 1000) % 60),
          }),
          topCount: formatText(data.topCount),
          date: getDatetime(data.date),
          avatarAbility5K: data.avatarAbility5K,
          avatarAbility5KText: formatText(data.avatarAbility5K),
          avatarAbility5KCount: data.avatarAbility5KCount,
          avatarAbility7K: data.avatarAbility7K,
          avatarAbility7KText: formatText(data.avatarAbility7K),
          avatarAbility7KCount: data.avatarAbility7KCount,
          avatarAbility9K: data.avatarAbility9K,
          avatarAbility9KText: formatText(data.avatarAbility9K),
          avatarAbility9KCount: data.avatarAbility9KCount,
        };
      }
    },
    initialData: [],
  });
}