From 2c36910885a79db0e0a88419a8efad1396273b28 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Sun, 19 Apr 2026 15:48:16 +0000 Subject: [PATCH 1/5] Changes Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com> --- src/routes/settings.import.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/routes/settings.import.tsx b/src/routes/settings.import.tsx index 9ad0ff9..6ec764c 100644 --- a/src/routes/settings.import.tsx +++ b/src/routes/settings.import.tsx @@ -8,7 +8,9 @@ import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { Alert, AlertDescription } from "@/components/ui/alert"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; -import { Upload, CheckCircle2, AlertCircle, Loader2, FileSpreadsheet } from "lucide-react"; +import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog"; +import { Textarea } from "@/components/ui/textarea"; +import { Upload, CheckCircle2, AlertCircle, Loader2, FileSpreadsheet, ClipboardPaste } from "lucide-react"; import { toast } from "sonner"; import { CONTACT_TYPES } from "@/components/contacts/contact-form-dialog"; From b933d0484724f6fe31a94d8eaa9637877183f102 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Sun, 19 Apr 2026 15:48:28 +0000 Subject: [PATCH 2/5] Changes Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com> --- src/routes/settings.import.tsx | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/routes/settings.import.tsx b/src/routes/settings.import.tsx index 6ec764c..8b3de40 100644 --- a/src/routes/settings.import.tsx +++ b/src/routes/settings.import.tsx @@ -678,7 +678,7 @@ function ImportPage() { console.info(`[import] lookups loaded: clients=${ctx.clientByExt.size}/${ctx.clientByName.size} cases=${ctx.caseByExt.size}/${ctx.caseByNumber.size}/${ctx.caseByTitle.size} users=${ctx.userByName.size}`); }; - const handleFile = async (cfg: ImporterConfig, file: File) => { + const handleFile = async (cfg: ImporterConfig, source: File | string) => { if (!user?.id) return; setResults((r) => ({ ...r, [cfg.key]: "running" })); ctx.defaultClientId = cfg.key === "locations" ? (defaultClientId || null) : null; @@ -686,12 +686,20 @@ function ImportPage() { await ensureLookupsLoaded(); const parsed = await new Promise>>((resolve, reject) => { - Papa.parse>(file, { - header: true, - skipEmptyLines: true, - complete: resolve, - error: reject, - }); + if (typeof source === "string") { + const result = Papa.parse>(source, { + header: true, + skipEmptyLines: true, + }); + resolve(result); + } else { + Papa.parse>(source, { + header: true, + skipEmptyLines: true, + complete: resolve, + error: reject, + }); + } }); const rawRows = parsed.data; From e8732f2f94f78eea7771390cf05f080c6db70c03 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Sun, 19 Apr 2026 15:48:39 +0000 Subject: [PATCH 3/5] Changes Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com> --- src/routes/settings.import.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/routes/settings.import.tsx b/src/routes/settings.import.tsx index 8b3de40..3f09d8a 100644 --- a/src/routes/settings.import.tsx +++ b/src/routes/settings.import.tsx @@ -574,6 +574,8 @@ function ImportPage() { const [clientList, setClientList] = useState<{ id: string; name: string }[]>([]); const [defaultClientId, setDefaultClientId] = useState(""); const [contactGroup, setContactGroup] = useState("client"); + const [pasteFor, setPasteFor] = useState(null); + const [pasteText, setPasteText] = useState(""); const ctx = useMemo(() => ({ userId: user?.id ?? "", clientByExt: new Map(), From 05008eff93d1844d88972c1effda2f8c163d0f55 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Sun, 19 Apr 2026 15:48:50 +0000 Subject: [PATCH 4/5] Changes Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com> --- src/routes/settings.import.tsx | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/routes/settings.import.tsx b/src/routes/settings.import.tsx index 3f09d8a..1d32632 100644 --- a/src/routes/settings.import.tsx +++ b/src/routes/settings.import.tsx @@ -1054,6 +1054,18 @@ function ImportPage() { {running ? "Importing…" : "Upload CSV"} + From 8be6ecf197a959a6cc34f938ffe5cf052c56c18d Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Sun, 19 Apr 2026 15:49:05 +0000 Subject: [PATCH 5/5] Changes Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com> --- src/routes/settings.import.tsx | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/src/routes/settings.import.tsx b/src/routes/settings.import.tsx index 1d32632..f076933 100644 --- a/src/routes/settings.import.tsx +++ b/src/routes/settings.import.tsx @@ -1105,6 +1105,39 @@ function ImportPage() { ); })} + + !o && setPasteFor(null)}> + + + Paste CSV — {pasteFor?.label} + + Paste CSV (or tab-separated) data including the header row. Same column rules as file upload apply. + + +