import { FormControl, FormField, FormItem, FormLabel, Input, Button, Popover, PopoverContent, PopoverTrigger, } from "@marzneshin/components"; import type { FieldErrors, FieldError } from "react-hook-form"; import { useWatch, useFormContext } from "react-hook-form"; import { useTranslation } from "react-i18next"; import { MailWarning, TrashIcon } from "lucide-react"; import type { FC } from "react"; interface FragmentForm { fragment: { packets: FieldError; length: FieldError; interval: FieldError; }; } const FragmentErrorPopover: FC = () => { const form = useFormContext(); const { t } = useTranslation(); const errors = form.formState.errors as FieldErrors; return (
    {errors.fragment?.length?.message && (
  • Length: {t(errors.fragment.length.message as string)}
  • )} {errors.fragment?.packets?.message && (
  • Packets: {t(errors.fragment.packets.message as string)}
  • )} {errors.fragment?.interval?.message && (
  • Interval: {t(errors.fragment.interval.message as string)}
  • )}
); }; export const FragmentField = () => { const { t } = useTranslation(); const form = useFormContext(); const errors = form.formState.errors as FieldErrors; const fragment = useWatch({ name: "fragment" }); const disabled = fragment === null || fragment === undefined; const enable = () => { form.setValue( "fragment", { length: "", packets: "", interval: "" }, { shouldTouch: true, shouldDirty: true, }, ); }; const disable = () => { form.setValue("fragment.length", ""); form.setValue("fragment.packets", ""); form.setValue("fragment.interval", ""); form.setValue("fragment", null, { shouldValidate: true, shouldTouch: false, shouldDirty: false, }); }; const hasFragmentErrors = (errors: FieldErrors) => errors.fragment?.packets || errors.fragment?.length || errors.fragment?.interval; return ( ( {t("fragment")}
{hasFragmentErrors(errors) && } {!disabled && ( )}
{!disabled ? ( <> (
{t("page.hosts.fragment.packets")}
)} /> (
{t("page.hosts.fragment.length")}
)} /> (
{t("page.hosts.fragment.interval")}
)} /> ) : ( )}
)} /> ); };