Newer
Older
taehui / qwilight-fe / src / avatar / DateView.tsx
@Taehui Taehui on 16 Mar 1 KB 2024-03-17 오전 1:28
"use client";

import { useEffect, useRef } from "react";
import {
  BarController,
  BarElement,
  CategoryScale,
  Chart,
  LinearScale,
} from "chart.js";
import { Badge, ListGroup, ListGroupItem } from "reactstrap";

import { GetAvatar } from "@/avatar/useGetAvatar";
import { useTranslations } from "next-intl";

export default function DateView({
  avatar: { dateSet, dateValues },
}: {
  avatar: GetAvatar;
}) {
  const dateView = useRef<HTMLCanvasElement>(null);

  const t = useTranslations();

  useEffect(() => {
    const dateView2D = dateView.current?.getContext("2d");
    if (dateView2D) {
      Chart.register(BarController, BarElement, CategoryScale, LinearScale);

      const view = new Chart(dateView2D, {
        type: "bar",
        data: {
          labels: dateSet,
          datasets: [
            {
              data: dateValues,
              backgroundColor: "white",
            },
          ],
        },
        options: {
          scales: {
            x: {
              display: false,
            },
            y: {
              display: false,
            },
          },
        },
      });

      return () => {
        view.destroy();
        Chart.unregister(BarController, BarElement, CategoryScale, LinearScale);
      };
    }
  }, [dateSet, dateValues]);

  return (
    <ListGroup>
      <Badge>{t("avatarDateText")}</Badge>
      <ListGroupItem>
        <canvas ref={dateView} />
      </ListGroupItem>
    </ListGroup>
  );
}