import { Button } from "@heroui/react"; import React, { useCallback, useEffect, useState } from "react"; import type { ButtonProps } from "@/utils/props"; import type { ButtonColor } from "@/utils/types"; const CustomButton: React.FC = React.memo(({ label, link }) => { const [status, setStatus] = useState(); const [isLoading, setIsLoading] = useState(false); const checkLinkStatus = useCallback(async (): Promise => { if (link) { try { setIsLoading(true); const response = await fetch(`/api/validate?link=${encodeURI(link)}`); const data = (await response.json()) as { status: number }; setStatus(data.status); } catch (_error) { setStatus(500); } finally { setIsLoading(false); } } }, [link]); useEffect(() => { void checkLinkStatus(); }, [checkLinkStatus]); const getColor = useCallback((): ButtonColor => { switch (true) { case isLoading: return "default"; case status === 200: return "primary"; case status === 404: return "danger"; default: return "default"; } }, [isLoading, status]); const handleClick = useCallback(() => { if (status === 200 && link) { window.open(link); } else { console.error("A hivatkozás nem elérhető."); } }, [status, link]); return ( ); }); export const PdfButton: React.FC = React.memo( ({ label, link }) => , ); export const ZipButton: React.FC = React.memo( ({ label, link }) => , ); export const Mp3Button: React.FC = React.memo( ({ label, link }) => , );