/* eslint-disable unicorn/no-keyword-prefix */ import { closestCorners, DndContext, DragOverlay } from '@dnd-kit/core' import { restrictToParentElement, restrictToVerticalAxis } from '@dnd-kit/modifiers' import { arrayMove, SortableContext, useSortable, verticalListSortingStrategy } from '@dnd-kit/sortable' import { CSS } from '@dnd-kit/utilities' import { Bars3Icon } from '@heroicons/react/24/outline' import { useFetcher } from '@remix-run/react' import clsx from 'clsx' import { useEffect, useState } from 'react' type Properties = { readonly baseDomain?: string; readonly searchDomains: string[]; } export default function Domains({ baseDomain, searchDomains }: Properties) { // eslint-disable-next-line unicorn/no-null, @typescript-eslint/ban-types const [activeId, setActiveId] = useState(null) const [localDomains, setLocalDomains] = useState(searchDomains) const [newDomain, setNewDomain] = useState('') const fetcher = useFetcher({ key: 'search-domains' }) 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 => { // eslint-disable-next-line unicorn/no-null 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)) } }} >
{baseDomain ? (

{baseDomain}

) : undefined} {localDomains.map((sd, index) => ( // eslint-disable-next-line react/no-array-index-key ))} {activeId ? : undefined}
{ setNewDomain(event.target.value) }} />
) } type DomainProperties = { readonly domain: string; readonly id: number; readonly isDrag?: boolean; readonly localDomains: string[]; } function Domain({ domain, id, localDomains, isDrag }: DomainProperties) { const fetcher = useFetcher({ key: 'individual-domain' }) const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({ id }) return (

{domain}

{isDrag ? undefined : ( )}
) }