From 61111bedb7f497dc096ae6cf62edf9bb6974239d Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Sat, 18 Apr 2026 02:02:11 +0000 Subject: [PATCH] Changes Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com> --- src/routes/documents.pleading.new.tsx | 53 +++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/src/routes/documents.pleading.new.tsx b/src/routes/documents.pleading.new.tsx index c1ac562..0a203a5 100644 --- a/src/routes/documents.pleading.new.tsx +++ b/src/routes/documents.pleading.new.tsx @@ -47,6 +47,59 @@ function PleadingNewPage() { const [docName, setDocName] = useState("Pleading"); const [saving, setSaving] = useState(false); + // Attorney signature (loaded from profile) + const [includeSignature, setIncludeSignature] = useState(true); + const [sigBlock, setSigBlock] = useState(""); + const [sigImagePath, setSigImagePath] = useState(""); + const [sigImageBytes, setSigImageBytes] = useState(null); + const [sigImageDataUrl, setSigImageDataUrl] = useState(""); + const [sigImageType, setSigImageType] = useState<"png" | "jpg" | "jpeg">("png"); + + useEffect(() => { + if (!user) return; + (async () => { + const { data } = await supabase + .from("profiles") + .select("*") + .eq("id", user.id) + .maybeSingle(); + if (!data) return; + const d = data as any; + setSigBlock(d.signature_block ?? ""); + setSigImagePath(d.signature_image_path ?? ""); + if (d.signature_image_path) { + try { + const url = supabase.storage + .from("avatars") + .getPublicUrl(d.signature_image_path).data.publicUrl; + const res = await fetch(url); + const blob = await res.blob(); + const buf = new Uint8Array(await blob.arrayBuffer()); + setSigImageBytes(buf); + // Build a data URL for the PDF generator + const reader = new FileReader(); + reader.onload = () => setSigImageDataUrl(String(reader.result || "")); + reader.readAsDataURL(blob); + const ext = (d.signature_image_path.split(".").pop() || "png").toLowerCase(); + setSigImageType(ext === "jpg" || ext === "jpeg" ? "jpg" : "png"); + } catch { + // Ignore – signature image is optional + } + } + })(); + }, [user?.id]); + + const buildSignature = (): PleadingSignature | undefined => { + if (!includeSignature) return undefined; + if (!sigBlock.trim() && !sigImageBytes) return undefined; + return { + block: sigBlock, + imageBytes: sigImageBytes ?? undefined, + imageDataUrl: sigImageDataUrl || undefined, + imageType: sigImageType, + }; + }; + useEffect(() => { if (!from) return; (async () => {