Source

pages/Dashboard/ShareCertificate/Certificate.jsx

import React, { useMemo } from "react";
import { useParams } from "react-router";
import { useRef } from "react";
import domtoimage from "dom-to-image";
import "./Certificate.css";
import { useReactToPrint } from "react-to-print";
import { useGetShareCertificate } from "../../../apis/ShareCertificate";
import LoadingAnimation from "../Loading/LoadingAnimation";
import Rkd from "../../../component/Certificates/Rkd";
import Pagenotfound from "../../Pagenotfound";
import BandipurCableCar from "../../../component/Certificates/BandipurCableCar";
import Button from "../../../component/Button/Button";
import Tifl from "../../../component/Certificates/Tifl";
import Bizbazar from "../../../component/Certificates/Bizbazar";
import Panchase from "../../../component/Certificates/Panchase";

/**

 * Represents  Certificate page component
 * @module Certificate
 * @return {JSX.Element}
 */
const Certificate = () => {
  /**
   * React useParams for getting id
   * @name useParams
   * @memberof module:Certificate
   * @type {object}
   */
  const { id } = useParams();
  /**
   * React useRef for getting component ref
   * @name useRef
   * @memberof module:Certificate
   * @type {React.MutableRefObject<undefined>}
   */
  const componentRef = useRef();
  const {
    data: certificate,
    isLoading: certificateLoading,
    error,
    isError,
  } = useGetShareCertificate(id);

  /**
   * React useMemo for getting certificate data
   * @name certificateData
   * @memberof module:Certificate
   * @type {object}
   */
  const certificateData = useMemo(() => {
    return certificate?.data?.data || {};
  }, [certificate?.data]);
  const handlePrint = useReactToPrint({
    content: () => componentRef.current,
  });

  /**
   * Function for handle download
   * @name handleDownload
   * @memberof module:Certificate
   * @function handleDownload
   * @returns {void}
   */
  const handleDownload = () => {
    try {
      const element = document.getElementById("image_container_tag"); // Replace with your div's ID
      setTimeout(() => {
        domtoimage
          .toJpeg(element)
          .then(function (dataUrl) {
            const link = document.createElement("a");
            link.download = "certificate.jpg";
            link.href = dataUrl;
            link.click();
          })
          .catch(function (error) {
            console.error("Error capturing image:", error);
          });
      }, 1000);
    } catch (err) {
      console.log(err.message);
    }
  };

  if (certificateLoading) {
    return <LoadingAnimation />;
  }
  if (isError) {
    return <Pagenotfound />;
  }
  const getCompanyCertificate = (companySymbol) => {
    switch (String(companySymbol).toLowerCase()) {
      case "tifl":
        return (
          <Tifl certificateData={certificateData} componentRef={componentRef} />
        );
      case "rkd":
        return (
          <Rkd certificateData={certificateData} componentRef={componentRef} />
        );

      case "bizbazar":
        return (
          <Bizbazar
            certificateData={certificateData}
            componentRef={componentRef}
          />
        );
      case "bandipur":
        return (
          <BandipurCableCar
            certificateData={certificateData}
            componentRef={componentRef}
          />
        );
      case "panchase":
        return (
          <Panchase
            certificateData={certificateData}
            componentRef={componentRef}
          />
        );
      default:
        return <div>Unknown company </div>;
    }
  };
  return (
    <div className="certificate_wrapper">
      <div className="button_container flex justify-end gap-2">
        <Button onClick={handlePrint}>
          <ion-icon name="print"></ion-icon> Print
        </Button>
        <Button onClick={handleDownload}>
          <ion-icon name="download"></ion-icon> Download
        </Button>
      </div>
      <div className="certificate_container ">
        {getCompanyCertificate(certificateData?.share_details?.share?.symbol)}
      </div>
    </div>
  );
};

export default Certificate;