"use client"; import { ChevronDown } from "lucide-react"; import { Button } from "@/components/ui/button"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { api } from "@/lib/trpc"; import { cn } from "@/lib/utils"; const BUILTIN = [ { value: "title", label: "Task title" }, { value: "description", label: "Description" }, { value: "status", label: "Status" }, ] as const; export function FormMappingPicker({ workspaceHandle, value, onChange, disabled, className, }: { workspaceHandle: string; value: string | null; onChange: (next: string | null) => void; disabled?: boolean; className?: string; }) { const { data, isLoading } = api.properties.listDefinitions.useQuery( { workspace: workspaceHandle }, { enabled: Boolean(workspaceHandle) }, ); const definitions = data?.definitions ?? []; const labelFor = (v: string | null) => { if (v === null || v === "") return "No mapping"; const builtin = BUILTIN.find((b) => b.value === v); if (builtin) return builtin.label; const def = definitions.find((d) => d.id === v); return def?.name ?? v; }; return ( Task fields onChange(null)}> No mapping {BUILTIN.map((b) => ( onChange(b.value)}> {b.label} ))} Custom properties {definitions.length === 0 ? ( No custom properties ) : ( definitions.map((d) => ( onChange(d.id)}> {d.name} )) )} ); }