import { DeepPartial, useForm, useWatch } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { websiteConfigSchema, WebsiteConfigSchema } from "../schema"; import { useEffect } from "react"; import { useDebounce } from "@/hooks/useDebounce"; import { useUpdateBucket } from "../hooks"; import { useConfig } from "@/hooks/useConfig"; import { Info, LinkIcon } from "lucide-react"; import Button from "@/components/ui/button"; import { InputField } from "@/components/ui/input"; import { ToggleField } from "@/components/ui/toggle"; import { useBucketContext } from "../context"; const WebsiteAccessSection = () => { const { bucket: data, bucketName } = useBucketContext(); const { data: config } = useConfig(); const form = useForm({ resolver: zodResolver(websiteConfigSchema), }); const isEnabled = useWatch({ control: form.control, name: "websiteAccess" }); const websitePort = config?.s3_web?.bind_addr?.split(":").pop() || "80"; const rootDomain = config?.s3_web?.root_domain; const updateMutation = useUpdateBucket(data?.id); const onChange = useDebounce((values: DeepPartial) => { const data = { enabled: values.websiteAccess, indexDocument: values.websiteAccess ? values.websiteConfig?.indexDocument : undefined, errorDocument: values.websiteAccess ? values.websiteConfig?.errorDocument : undefined, }; updateMutation.mutate({ websiteAccess: data, }); }); useEffect(() => { form.reset({ websiteAccess: data?.websiteAccess, websiteConfig: { indexDocument: data?.websiteConfig?.indexDocument || "index.html", errorDocument: data?.websiteConfig?.errorDocument || "error/400.html", }, }); const { unsubscribe } = form.watch((values) => onChange(values)); return unsubscribe; }, [data]); return (

Website Access

{isEnabled && ( <>
{bucketName} {rootDomain ? ( <> {bucketName + rootDomain} {bucketName + rootDomain + ":" + websitePort} ) : null}
)}
); }; export default WebsiteAccessSection;