Changes
Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com>
This commit is contained in:
co-authored by
renee-png
parent
f204f9c33e
commit
e219a8cd69
@@ -10,12 +10,14 @@ import {
|
||||
fetchFirm,
|
||||
fmtCurrency,
|
||||
ownerFullName,
|
||||
savePdfToDocuments,
|
||||
type ClientLite,
|
||||
type HomeownerLite,
|
||||
type FirmInfo,
|
||||
} from "@/lib/forms-shared";
|
||||
import { buildLetterTokens, loadFormTemplate, renderLetterPdf, type FormTemplateConfig } from "@/lib/form-templates";
|
||||
import { promptFilename } from "@/lib/prompt-filename";
|
||||
import { SaveToCaseDialog } from "./save-to-case-dialog";
|
||||
import { toast } from "sonner";
|
||||
|
||||
interface Item {
|
||||
@@ -30,6 +32,7 @@ export function NolaForm() {
|
||||
const [homeownerId, setHomeownerId] = useState("");
|
||||
const [firm, setFirm] = useState<FirmInfo | null>(null);
|
||||
const [template, setTemplate] = useState<FormTemplateConfig | null>(null);
|
||||
const [saveToCaseOpen, setSaveToCaseOpen] = useState(false);
|
||||
|
||||
const [date, setDate] = useState(new Date().toISOString().slice(0, 10));
|
||||
const [dueDate, setDueDate] = useState(() => {
|
||||
@@ -61,10 +64,10 @@ export function NolaForm() {
|
||||
const addItem = () => setItems((p) => [...p, { description: "", amount: "0.00" }]);
|
||||
const removeItem = (i: number) => setItems((p) => p.filter((_, idx) => idx !== i));
|
||||
|
||||
const handleExport = () => {
|
||||
const buildPdf = () => {
|
||||
if (!client || !template) {
|
||||
toast.error("Select a client first");
|
||||
return;
|
||||
return null;
|
||||
}
|
||||
|
||||
const returnAddress = [client.name];
|
||||
@@ -83,7 +86,7 @@ export function NolaForm() {
|
||||
total,
|
||||
});
|
||||
|
||||
const doc = renderLetterPdf({
|
||||
return renderLetterPdf({
|
||||
template,
|
||||
returnAddress,
|
||||
topRightLine: tokens.date as string,
|
||||
@@ -94,13 +97,33 @@ export function NolaForm() {
|
||||
total: { label: template.itemLabels?.totalDue ?? "TOTAL DUE", amount: total },
|
||||
filename: `NOLA_${ownerFullName(homeowner) || "draft"}_${date}`,
|
||||
});
|
||||
};
|
||||
|
||||
const name = promptFilename(`NOLA_${ownerFullName(homeowner) || "draft"}_${date}`, "pdf");
|
||||
const defaultName = `NOLA_${ownerFullName(homeowner) || "draft"}_${date}`;
|
||||
|
||||
const handleExport = () => {
|
||||
const doc = buildPdf();
|
||||
if (!doc) return;
|
||||
const name = promptFilename(defaultName, "pdf");
|
||||
if (!name) return;
|
||||
doc.save(`${name}.pdf`);
|
||||
toast.success("NOLA PDF downloaded");
|
||||
};
|
||||
|
||||
const handleSaveToCase = async ({ caseId, name, folder }: { caseId: string; name: string; folder: string }) => {
|
||||
const doc = buildPdf();
|
||||
if (!doc) return;
|
||||
const filename = name.endsWith(".pdf") ? name : `${name}.pdf`;
|
||||
await savePdfToDocuments({
|
||||
blob: doc.output("blob"),
|
||||
caseId,
|
||||
name: filename,
|
||||
folder,
|
||||
mimeType: "application/pdf",
|
||||
});
|
||||
toast.success("Saved to case files");
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="space-y-4">
|
||||
<Card>
|
||||
|
||||
Reference in New Issue
Block a user