import { DndContext, DragOverlay, closestCorners } from '@dnd-kit/core'; import { restrictToParentElement, restrictToVerticalAxis, } from '@dnd-kit/modifiers'; import { SortableContext, arrayMove, useSortable, verticalListSortingStrategy, } from '@dnd-kit/sortable'; import { CSS } from '@dnd-kit/utilities'; import { GripVertical, Lock } from 'lucide-react'; import { useEffect, useState } from 'react'; import { type FetcherWithComponents, Form, useFetcher } from 'react-router'; import Button from '~/components/Button'; import Input from '~/components/Input'; import TableList from '~/components/TableList'; import cn from '~/utils/cn'; interface Props { searchDomains: string[]; isDisabled: boolean; magic?: string; } export default function ManageDomains({ searchDomains, isDisabled, magic, }: Props) { const [activeId, setActiveId] = useState(null); const [localDomains, setLocalDomains] = useState(searchDomains); useEffect(() => { setLocalDomains(searchDomains); }, [searchDomains]); return (

Search Domains

Set custom DNS search domains for your Tailnet. When using Magic DNS, your tailnet domain is used as the first search domain.

{ setActiveId(event.active.id); }} onDragEnd={(event) => { setActiveId(null); const { active, over } = event; if (!over) { return; } const activeItem = localDomains[(active.id as number) - 1]; const overItem = localDomains[(over.id as number) - 1]; if (!activeItem || !overItem) { return; } const oldIndex = localDomains.indexOf(activeItem); const newIndex = localDomains.indexOf(overItem); if (oldIndex !== newIndex) { setLocalDomains(arrayMove(localDomains, oldIndex, newIndex)); } }} > {magic ? (

{magic}

) : undefined} {localDomains.map((sd, index) => ( ))} {activeId ? ( ) : undefined} {isDisabled ? undefined : (
)}
); } interface DomainProps { domain: string; id: number; isDragging?: boolean; isDisabled: boolean; } function Domain({ domain, id, isDragging, isDisabled }: DomainProps) { const { attributes, listeners, setNodeRef, transform, transition, isDragging: isSortableDragging, } = useSortable({ id }); return (

{isDisabled ? undefined : ( )} {domain}

{isDragging ? undefined : (
)}
); }