import { Button } from "@workspace/ui/components/button"; import { Input } from "@workspace/ui/components/input"; import { Icon } from "@workspace/ui/composed/icon"; import { adminGenerateCaptcha } from "@workspace/ui/services/admin/auth"; import { useEffect, useImperativeHandle, useState } from "react"; import { useTranslation } from "react-i18next"; export interface LocalCaptchaRef { reset: () => void; } interface LocalCaptchaProps { value?: string | null; onChange?: (value: string) => void; onCaptchaIdChange?: (id: string) => void; } const LocalCaptcha = ({ value, onChange, onCaptchaIdChange, ref, }: LocalCaptchaProps & { ref?: RefObject }) => { const { t } = useTranslation("auth"); const [captchaImage, setCaptchaImage] = useState(""); const [loading, setLoading] = useState(false); const fetchCaptcha = async () => { setLoading(true); try { const res = await adminGenerateCaptcha(); const captchaData = res.data?.data; if (captchaData) { setCaptchaImage(captchaData.image); onCaptchaIdChange?.(captchaData.id); } } catch (error) { console.error("Failed to generate captcha:", error); } finally { setLoading(false); } }; useEffect(() => { fetchCaptcha(); }, []); useImperativeHandle(ref, () => ({ reset: () => { onChange?.(""); fetchCaptcha(); }, })); return (
onChange?.(e.target.value)} placeholder={t("captcha.placeholder", "Enter captcha code...")} value={value || ""} />
{loading ? (
) : captchaImage ? ( captcha ) : (
{t("captcha.noImage", "No Image")}
)}
); }; LocalCaptcha.displayName = "LocalCaptcha"; export default LocalCaptcha;