"use client"; import { useTranslation } from "react-i18next"; import { zodResolver } from "@hookform/resolvers/zod"; import { useForm } from "react-hook-form"; import { z } from "zod"; import { toast } from "sonner"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Form, FormControl, FormField, FormItem } from "@/components/ui/form"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import useKnowledge from "@/hooks/useKnowledge"; import { useSettingStore } from "@/store/setting"; type Props = { open: boolean; onClose: () => void; }; const BUILD_MODE = process.env.NEXT_PUBLIC_BUILD_MODE; const URLRegExp = /^https?:\/\/.+/; const formSchema = z.object({ url: z.string(), crawler: z.string(), }); function Crawler({ open, onClose }: Props) { const { t } = useTranslation(); const { getKnowledgeFromUrl } = useKnowledge(); const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: async () => { const { crawler } = useSettingStore.getState(); return { url: "", crawler }; }, }); async function onSubmit(values: z.infer) { const settingStore = useSettingStore.getState(); const { url, crawler } = values; if (URLRegExp.test(url)) { onClose(); settingStore.update({ crawler }); await getKnowledgeFromUrl(url, crawler); form.reset(); } else { toast.error(t("knowledge.urlError")); } } function handleClose(open: boolean) { if (!open) onClose(); } return ( {t("knowledge.webCrawler")} {t("knowledge.webCrawlerTip")}
( )} /> ( )} />
); } export default Crawler;