"use client"; import { cn } from "@app/lib/cn"; import { ChevronsUpDown, ExternalLink } from "lucide-react"; import { useTranslations } from "next-intl"; import { useState } from "react"; import type { Control, FieldValues, Path } from "react-hook-form"; import { useWatch } from "react-hook-form"; import { MultiSitesSelector, formatMultiSitesSelectorLabel } from "./multi-site-selector"; import { SitesSelector, type Selectedsite } from "./site-selector"; import { Button } from "./ui/button"; import { FormControl, FormField, FormItem, FormLabel, FormMessage } from "./ui/form"; import { Input } from "./ui/input"; import { Popover, PopoverContent, PopoverTrigger } from "./ui/popover"; type BaseProps = { control: Control; orgId: string; destinationField: Path; destinationPortField: Path; learnMoreHref?: string; defaultPort: number; }; type MultiSiteFormProps = BaseProps & { multiSite: true; sitesField: Path; }; type SingleSiteFormProps = BaseProps & { multiSite?: false; siteField: Path; }; export type BrowserGatewayTargetFormProps = | MultiSiteFormProps | SingleSiteFormProps; export function BrowserGatewayTargetForm( props: BrowserGatewayTargetFormProps ) { const t = useTranslations(); const [siteOpen, setSiteOpen] = useState(false); const sitesFieldName = props.multiSite === true ? props.sitesField : props.siteField; const watchedSites = useWatch({ control: props.control, name: sitesFieldName }); const showMultiSiteDisclaimer = props.multiSite === true && ((watchedSites as Selectedsite[] | undefined)?.length ?? 0) > 1; return (
( {t("sites")} {props.multiSite === true ? ( ) : ( { field.onChange(site); setSiteOpen(false); }} /> )} )} /> ( {t("destination")} )} /> ( {t("port")} )} />
{showMultiSiteDisclaimer && (

{t("bgTargetMultiSiteDisclaimer")}{" "} {t("learnMore")}

)}
); }