import { Card, CardContent, CardHeader, CardTitle, } from "@/src/components/ui/card"; import { cn } from "@/src/utils/tailwind"; import { useDraggable, useDroppable } from "@dnd-kit/core"; import { X } from "lucide-react"; import { type CsvColumnPreview, type FieldMapping, } from "@/src/features/datasets/lib/csv/types"; import { isSchemaField } from "@/src/features/datasets/lib/csv/helpers"; function SchemaKeyDropZone({ schemaKey, mappedColumns, parentId, onRemove, }: { schemaKey: string; mappedColumns: CsvColumnPreview[]; parentId: string; onRemove: (columnName: string) => void; }) { const dropId = `${parentId}:${schemaKey}`; const { setNodeRef, isOver } = useDroppable({ id: dropId }); return (
0 && "border-solid border-accent-dark-blue bg-light-blue/40", )} > {mappedColumns.length === 0 ? (
{schemaKey}
) : (
{schemaKey}
{mappedColumns.map((column) => ( ))}
)}
); } function FreeformDropZone({ id, columns, onRemove, }: { id: string; columns: CsvColumnPreview[]; onRemove: (columnName: string) => void; }) { const { setNodeRef, isOver } = useDroppable({ id }); return (
0 && "border-solid border-accent-dark-blue bg-light-blue/40", )} > {columns.length > 0 && (
{columns.map((column) => ( ))}
)}
); } function MappedColumnBadge({ column, onRemove, }: { column: CsvColumnPreview; onRemove: (columnName: string) => void; }) { const { attributes, listeners, setNodeRef, isDragging } = useDraggable({ id: `mapped-${column.name}`, data: { column, fromCardId: "mapped", }, }); return (
{column.name}
); } type MappingCardProps = { input: FieldMapping; expectedOutput: FieldMapping; metadata: CsvColumnPreview[]; onRemoveInputColumn: (columnName: string, key?: string) => void; onRemoveExpectedColumn: (columnName: string, key?: string) => void; onRemoveMetadataColumn: (columnName: string) => void; }; export function MappingCard({ input, expectedOutput, metadata, onRemoveInputColumn, onRemoveExpectedColumn, onRemoveMetadataColumn, }: MappingCardProps) { return ( Map to Dataset Items {/* INPUT SECTION */}

Input

{isSchemaField(input) ? (
{input.entries.map((entry) => ( onRemoveInputColumn(columnName, entry.key) } /> ))}
) : ( )}
{/* OUTPUT SECTION */}

Expected Output

{expectedOutput.type === "schema" ? (
{expectedOutput.entries.map((entry) => ( onRemoveExpectedColumn(columnName, entry.key) } /> ))}
) : ( )}
{/* METADATA SECTION */}

Metadata

); }