@flowselections/mailbox-orders 1.0.47 → 1.0.49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-lib/components/MailboxProposalsPage.d.ts.map +1 -1
- package/dist-lib/components/MailboxProposalsPage.js +4 -3
- package/dist-lib/components/MailboxSkippedPage.d.ts.map +1 -1
- package/dist-lib/components/MailboxSkippedPage.js +5 -3
- package/dist-lib/components/MailboxStatusLine.d.ts +5 -0
- package/dist-lib/components/MailboxStatusLine.d.ts.map +1 -0
- package/dist-lib/components/MailboxStatusLine.js +23 -0
- package/dist-lib/integrations/supabase/types.d.ts +3364 -122
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/types.js +1 -0
- package/dist-lib/lib/mailbox-filter-settings.functions.d.ts.map +1 -1
- package/dist-lib/lib/mailbox-filter-settings.functions.js +3 -0
- package/dist-lib/lib/mailbox-folders.d.ts +25 -0
- package/dist-lib/lib/mailbox-folders.d.ts.map +1 -0
- package/dist-lib/lib/mailbox-folders.js +73 -0
- package/dist-lib/lib/mailbox-ingest.server.d.ts +5 -0
- package/dist-lib/lib/mailbox-ingest.server.d.ts.map +1 -1
- package/dist-lib/lib/mailbox-ingest.server.js +338 -109
- package/dist-lib/lib/mailbox.functions.d.ts +29 -0
- package/dist-lib/lib/mailbox.functions.d.ts.map +1 -1
- package/dist-lib/lib/mailbox.functions.js +106 -2
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MailboxProposalsPage.d.ts","sourceRoot":"","sources":["../../src/components/MailboxProposalsPage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MailboxProposalsPage.d.ts","sourceRoot":"","sources":["../../src/components/MailboxProposalsPage.tsx"],"names":[],"mappings":"AAiHA,6EAA6E;AAC7E,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AA2CD,wBAAgB,oBAAoB,gCAycnC"}
|
|
@@ -10,6 +10,7 @@ import { enabledLoadCarriers, normalizeAllowedLoadCarriers, EMPTY_LOAD_CARRIERS
|
|
|
10
10
|
import { listTemplateFields, listPlantTypesForPicker, listSuppliersForPicker, } from "../lib/mailbox-template.functions.js";
|
|
11
11
|
import { SearchableSelect } from "./SearchableSelect.js";
|
|
12
12
|
import { MailboxAuthBanner } from "./MailboxAuthBanner.js";
|
|
13
|
+
import { MailboxStatusLine, AI_AUTH_PATH } from "./MailboxStatusLine.js";
|
|
13
14
|
import { EmailPreview } from "./EmailPreview.js";
|
|
14
15
|
import { TablePagination } from "./TablePagination.js";
|
|
15
16
|
import { MailboxFilterBar, usePersistedState, normalizeText, matchesPeriod } from "./MailboxFilterBar.js";
|
|
@@ -308,9 +309,9 @@ export function MailboxProposalsPage() {
|
|
|
308
309
|
const pageCount = Math.max(1, Math.ceil(filteredItems.length / pageSize));
|
|
309
310
|
const currentPage = Math.min(page, pageCount);
|
|
310
311
|
const pagedItems = filteredItems.slice((currentPage - 1) * pageSize, currentPage * pageSize);
|
|
311
|
-
return (_jsxs("div", { className: "flex h-[calc(100dvh-var(--app-header-height)-var(--core-topbar-h,0px))] max-h-[calc(100dvh-var(--app-header-height)-var(--core-topbar-h,0px))] min-h-0 w-full flex-col gap-4 overflow-hidden p-6", children: [_jsx(MailboxAuthBanner, { active: activeMailbox }), _jsx("div", { className: "flex items-center justify-between shrink-0", children: _jsxs("div", { children: [_jsx("h1", { className: "text-2xl font-semibold", children: "Bestelvoorstellen" }), _jsx("p", { className: "text-sm text-muted-foreground", children: "Nieuw binnengekomen bestellingen die nog handmatig gecontroleerd moeten worden." })] }) }), outdatedCount > 0 && (_jsxs("div", { className: "shrink-0 flex items-center justify-between gap-3 rounded-md border border-amber-200 bg-amber-50 px-3 py-2 text-sm text-amber-800", children: [_jsxs("span", { children: ["De AI-instelling is gewijzigd. ", outdatedCount, " voorstel(len) zijn nog met de vorige instelling gelezen."] }), _jsx(Button, { size: "sm", variant: "outline", disabled: agentRefreshMut.isPending, onClick: () => agentRefreshMut.mutate(), children: agentRefreshMut.isPending ? "Bezig…" : "Opnieuw analyseren" })] })), items.length > 0 && (_jsx(MailboxFilterBar, { search: search, onSearchChange: setSearch, period: period, onPeriodChange: setPeriod, sortOrder: sortOrder, onSortOrderChange: setSortOrder, filteredCount: filteredItems.length, totalCount: items.length, countLabel: "voorstellen", onClear: clearFilters, hasActiveFilters: hasActiveFilters })), _jsx("div", { className: "flex-1 min-h-0 overflow-y-auto overscroll-contain [scrollbar-gutter:stable]", children: isLoading ? (_jsx("div", { className: "text-muted-foreground", children: "Laden..." })) : listError ? (_jsxs("div", { className: "rounded-md border border-destructive/40 bg-destructive/5 p-4 text-sm", children: [_jsx("p", { className: "font-medium text-destructive", children: "Bestellingen konden niet worden opgehaald." }), _jsxs("p", { className: "text-muted-foreground mt-1", children: [listError?.message ?? "Onbekende fout", " \u2014 de lijst is niet leeg, alleen niet geladen."] }), _jsx(Button, { size: "sm", variant: "outline", className: "mt-3", onClick: () => void refetchList(), children: "Opnieuw proberen" })] })) : items.length === 0 ? (_jsx("p", { className: "text-muted-foreground", children: "Geen bestellingen te controleren." })) : filteredItems.length === 0 ? (_jsx("p", { className: "text-muted-foreground", children: "Geen voorstellen gevonden voor deze zoekopdracht." })) : (_jsx(Card, { children: _jsxs(CardContent, { className: "p-0", children: [_jsxs(Table, { children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { children: "Klantnaam" }), _jsx(TableHead, { children: "Bericht" }), _jsx(TableHead, { children: "Orderdatum" }), _jsx(TableHead, { children: "Status" })] }) }), _jsx(TableBody, { children: pagedItems.map((p) => {
|
|
312
|
+
return (_jsxs("div", { className: "flex h-[calc(100dvh-var(--app-header-height)-var(--core-topbar-h,0px))] max-h-[calc(100dvh-var(--app-header-height)-var(--core-topbar-h,0px))] min-h-0 w-full flex-col gap-4 overflow-hidden p-6", children: [_jsx(MailboxAuthBanner, { active: activeMailbox }), _jsx(MailboxStatusLine, {}), _jsx("div", { className: "flex items-center justify-between shrink-0", children: _jsxs("div", { children: [_jsx("h1", { className: "text-2xl font-semibold", children: "Bestelvoorstellen" }), _jsx("p", { className: "text-sm text-muted-foreground", children: "Nieuw binnengekomen bestellingen die nog handmatig gecontroleerd moeten worden." })] }) }), outdatedCount > 0 && (_jsxs("div", { className: "shrink-0 flex items-center justify-between gap-3 rounded-md border border-amber-200 bg-amber-50 px-3 py-2 text-sm text-amber-800", children: [_jsxs("span", { children: ["De AI-instelling is gewijzigd. ", outdatedCount, " voorstel(len) zijn nog met de vorige instelling gelezen."] }), _jsx(Button, { size: "sm", variant: "outline", disabled: agentRefreshMut.isPending, onClick: () => agentRefreshMut.mutate(), children: agentRefreshMut.isPending ? "Bezig…" : "Opnieuw analyseren" })] })), items.length > 0 && (_jsx(MailboxFilterBar, { search: search, onSearchChange: setSearch, period: period, onPeriodChange: setPeriod, sortOrder: sortOrder, onSortOrderChange: setSortOrder, filteredCount: filteredItems.length, totalCount: items.length, countLabel: "voorstellen", onClear: clearFilters, hasActiveFilters: hasActiveFilters })), _jsx("div", { className: "flex-1 min-h-0 overflow-y-auto overscroll-contain [scrollbar-gutter:stable]", children: isLoading ? (_jsx("div", { className: "text-muted-foreground", children: "Laden..." })) : listError ? (_jsxs("div", { className: "rounded-md border border-destructive/40 bg-destructive/5 p-4 text-sm", children: [_jsx("p", { className: "font-medium text-destructive", children: "Bestellingen konden niet worden opgehaald." }), _jsxs("p", { className: "text-muted-foreground mt-1", children: [listError?.message ?? "Onbekende fout", " \u2014 de lijst is niet leeg, alleen niet geladen."] }), _jsx(Button, { size: "sm", variant: "outline", className: "mt-3", onClick: () => void refetchList(), children: "Opnieuw proberen" })] })) : items.length === 0 ? (_jsx("p", { className: "text-muted-foreground", children: "Geen bestellingen te controleren." })) : filteredItems.length === 0 ? (_jsx("p", { className: "text-muted-foreground", children: "Geen voorstellen gevonden voor deze zoekopdracht." })) : (_jsx(Card, { children: _jsxs(CardContent, { className: "p-0", children: [_jsxs(Table, { children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { children: "Klantnaam" }), _jsx(TableHead, { children: "Bericht" }), _jsx(TableHead, { children: "Orderdatum" }), _jsx(TableHead, { children: "Status" })] }) }), _jsx(TableBody, { children: pagedItems.map((p) => {
|
|
312
313
|
const date = p.mailbox_messages?.received_at ?? p.created_at;
|
|
313
|
-
return (_jsxs(TableRow, { className: "cursor-pointer hover:bg-muted/50", onClick: () => setActiveId(p.id), children: [_jsx(TableCell, { className: "font-medium", children: customerNameFor(p) }), _jsxs(TableCell, { className: "max-w-sm", children: [_jsx("div", { className: "truncate text-sm font-medium", children: p.mailbox_messages?.subject || "(geen onderwerp)" }), _jsx("div", { className: "truncate text-xs text-muted-foreground", children: p.mailbox_messages?.preview || "Geen voorbeeldtekst" })] }), _jsx(TableCell, { className: "text-sm text-muted-foreground", children: date ? new Date(date).toLocaleDateString("nl-NL") : "-" }), _jsx(TableCell, { children: _jsxs("div", { className: "flex flex-wrap gap-1", children: [p.readiness === "klaar" ? (_jsx(Badge, { variant: "outline", className: "border-emerald-300 bg-emerald-50 text-emerald-800", children: "Klaar om te bevestigen" })) : (_jsx(Badge, { variant: "secondary", children: "Controleren" })), p.duplicate && _jsx(Badge, { variant: "outline", className: "border-amber-300 bg-amber-50 text-amber-800", children: "Mogelijk dubbel" })] }) })] }, p.id));
|
|
314
|
+
return (_jsxs(TableRow, { className: "cursor-pointer hover:bg-muted/50", onClick: () => setActiveId(p.id), children: [_jsx(TableCell, { className: "font-medium", children: customerNameFor(p) }), _jsxs(TableCell, { className: "max-w-sm", children: [_jsx("div", { className: "truncate text-sm font-medium", children: p.mailbox_messages?.subject || "(geen onderwerp)" }), _jsx("div", { className: "truncate text-xs text-muted-foreground", children: p.mailbox_messages?.preview || "Geen voorbeeldtekst" }), p.mailbox_messages?.account_email && (_jsxs("div", { className: "truncate text-xs text-muted-foreground", children: ["Ontvangen op: ", p.mailbox_messages.account_email] }))] }), _jsx(TableCell, { className: "text-sm text-muted-foreground", children: date ? new Date(date).toLocaleDateString("nl-NL") : "-" }), _jsx(TableCell, { children: _jsxs("div", { className: "flex flex-wrap gap-1", children: [p.readiness === "klaar" ? (_jsx(Badge, { variant: "outline", className: "border-emerald-300 bg-emerald-50 text-emerald-800", children: "Klaar om te bevestigen" })) : (_jsx(Badge, { variant: "secondary", children: "Controleren" })), p.duplicate && _jsx(Badge, { variant: "outline", className: "border-amber-300 bg-amber-50 text-amber-800", children: "Mogelijk dubbel" })] }) })] }, p.id));
|
|
314
315
|
}) })] }), _jsx(TablePagination, { total: filteredItems.length, page: currentPage, pageSize: pageSize, onPageChange: setPage, onPageSizeChange: setPageSize })] }) })) }), _jsx(Dialog, { open: !!activeId, onOpenChange: (o) => { if (!o) {
|
|
315
316
|
setActiveId(null);
|
|
316
317
|
setReparseError(null);
|
|
@@ -772,7 +773,7 @@ function ProposalEditor({ proposal, template, customers, products, allowBackorde
|
|
|
772
773
|
setSubmitting(false);
|
|
773
774
|
}
|
|
774
775
|
};
|
|
775
|
-
return (_jsxs("div", { className: "grid grid-cols-2 gap-4 h-full min-h-0", children: [_jsx(Card, { className: "flex flex-col min-h-0 overflow-hidden", children:
|
|
776
|
+
return (_jsxs("div", { className: "grid grid-cols-2 gap-4 h-full min-h-0", children: [_jsx(Card, { className: "flex flex-col min-h-0 overflow-hidden", children: _jsxs(CardContent, { className: "flex-1 min-h-0 p-4 flex flex-col gap-2", children: [msg.account_email && (_jsxs("div", { className: "shrink-0 text-xs text-muted-foreground", children: ["Ontvangen op: ", msg.account_email] })), proposal.parsed_payload?.reason === "geen_ai_agent" && (_jsxs("div", { className: "shrink-0 rounded-md border border-amber-200 bg-amber-50 px-3 py-2 text-xs text-amber-800", children: ["Automatisch uitlezen staat uit: koppel een AI-agent bij Instellingen \u203A AI-Authenticatie.", " ", _jsx("a", { href: AI_AUTH_PATH, className: "underline font-medium", children: "Naar AI-Authenticatie" })] })), _jsx(EmailPreview, { subject: msg.subject, fromName: msg.from_name, fromEmail: msg.from_email, receivedAt: msg.received_at, to: Array.isArray(msg.to_recipients) ? msg.to_recipients : [], cc: Array.isArray(msg.cc_recipients) ? msg.cc_recipients : [], bodyHtml: msg.body_html, bodyText: msg.body_text, attachments: Array.isArray(msg.attachments) ? msg.attachments : [], hasAttachments: msg.has_attachments === true })] }) }), _jsxs(Card, { className: "flex flex-col min-h-0 overflow-hidden", children: [_jsx(CardHeader, { className: "shrink-0", children: _jsx(CardTitle, { className: "text-base", children: "Bestelvoorstel" }) }), _jsxs(CardContent, { className: "space-y-4 flex-1 min-h-0 overflow-y-auto overscroll-contain", children: [(() => {
|
|
776
777
|
// Klantveld staat altijd bovenaan, ook als het template (nog) leeg is.
|
|
777
778
|
const customerField = visibleFields.find((f) => f.key === "customer") ?? {
|
|
778
779
|
id: "customer",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MailboxSkippedPage.d.ts","sourceRoot":"","sources":["../../src/components/MailboxSkippedPage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MailboxSkippedPage.d.ts","sourceRoot":"","sources":["../../src/components/MailboxSkippedPage.tsx"],"names":[],"mappings":"AAoBA,wBAAgB,kBAAkB,gCAoJjC"}
|
|
@@ -8,9 +8,11 @@ import { TablePagination } from "./TablePagination.js";
|
|
|
8
8
|
import { MailboxFilterBar, usePersistedState, normalizeText, matchesPeriod } from "./MailboxFilterBar.js";
|
|
9
9
|
const statusOf = (m) => m.analysis_state === "wacht"
|
|
10
10
|
? { label: "Wacht op analyse", tone: "amber" }
|
|
11
|
-
: m.filter_outcome === "
|
|
12
|
-
? { label: "
|
|
13
|
-
:
|
|
11
|
+
: m.filter_outcome === "te_oud"
|
|
12
|
+
? { label: "Te oud", tone: "grey" }
|
|
13
|
+
: m.filter_outcome === "geen_bestelling"
|
|
14
|
+
? { label: "Geen bestelling", tone: "grey" }
|
|
15
|
+
: { label: "Overgeslagen", tone: "grey" };
|
|
14
16
|
export function MailboxSkippedPage() {
|
|
15
17
|
const qc = useQueryClient();
|
|
16
18
|
const fetchList = useServerFn(listSkippedMessages);
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Pad naar de AI-koppelingen in de shell (Instellingen › AI-Authenticatie). */
|
|
2
|
+
export declare const AI_AUTH_PATH = "/ai-authenticatie";
|
|
3
|
+
/** Kleine statusregel: laatste geslaagde ronde, wachtende mails, problemen in gewone taal. */
|
|
4
|
+
export declare function MailboxStatusLine(): import("react").JSX.Element | null;
|
|
5
|
+
//# sourceMappingURL=MailboxStatusLine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MailboxStatusLine.d.ts","sourceRoot":"","sources":["../../src/components/MailboxStatusLine.tsx"],"names":[],"mappings":"AAKA,gFAAgF;AAChF,eAAO,MAAM,YAAY,sBAAsB,CAAC;AAKhD,8FAA8F;AAC9F,wBAAgB,iBAAiB,uCAuChC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useQuery } from "@tanstack/react-query";
|
|
3
|
+
import { useServerFn } from "@tanstack/react-start";
|
|
4
|
+
import { AlertTriangle } from "lucide-react";
|
|
5
|
+
import { getMailboxStatus } from "../lib/mailbox.functions.js";
|
|
6
|
+
/** Pad naar de AI-koppelingen in de shell (Instellingen › AI-Authenticatie). */
|
|
7
|
+
export const AI_AUTH_PATH = "/ai-authenticatie";
|
|
8
|
+
const fmt = (iso) => iso ? new Date(iso).toLocaleString("nl-NL", { day: "2-digit", month: "2-digit", hour: "2-digit", minute: "2-digit" }) : "nog geen";
|
|
9
|
+
/** Kleine statusregel: laatste geslaagde ronde, wachtende mails, problemen in gewone taal. */
|
|
10
|
+
export function MailboxStatusLine() {
|
|
11
|
+
const fetchStatus = useServerFn(getMailboxStatus);
|
|
12
|
+
const { data } = useQuery({
|
|
13
|
+
queryKey: ["mailbox-status"],
|
|
14
|
+
queryFn: () => fetchStatus(),
|
|
15
|
+
refetchInterval: 60000,
|
|
16
|
+
});
|
|
17
|
+
const s = (data ?? null);
|
|
18
|
+
if (!s)
|
|
19
|
+
return null;
|
|
20
|
+
const disconnected = Array.isArray(s.disconnected) ? s.disconnected : [];
|
|
21
|
+
const addresses = Array.isArray(s.addresses) ? s.addresses : [];
|
|
22
|
+
return (_jsxs("div", { className: "shrink-0 space-y-2", children: [_jsxs("div", { className: "text-xs text-muted-foreground", children: ["Laatste ronde ", fmt(s.lastOkAt), " \u00B7 ", s.waiting, " wachtend", addresses.length > 0 ? ` · ${addresses.join(", ")}` : "", s.ignoredNotFollowed > 0 ? ` · ${s.ignoredNotFollowed} mails buiten de gevolgde mappen genegeerd` : "", s.ignoredUnknown > 0 ? ` · ${s.ignoredUnknown} mails overgeslagen (map onbekend)` : ""] }), disconnected.map((d) => (_jsxs("div", { className: "text-xs text-muted-foreground", children: [d.count, " mails van ", d.email, " niet verwerkt (adres ontkoppeld)"] }, d.email))), s.problem && (_jsxs("div", { className: "flex items-start gap-2 rounded-md border border-destructive/40 bg-destructive/5 p-2 text-sm text-destructive", children: [_jsx(AlertTriangle, { className: "h-4 w-4 mt-0.5 shrink-0" }), _jsx("span", { children: s.problem })] })), !s.aiAgent && (_jsxs("div", { className: "flex items-center justify-between gap-3 rounded-md border border-amber-200 bg-amber-50 px-3 py-2 text-sm text-amber-800", children: [_jsx("span", { children: "Automatisch uitlezen staat uit: koppel een AI-agent bij Instellingen \u203A AI-Authenticatie" }), _jsx("a", { href: AI_AUTH_PATH, className: "shrink-0 underline font-medium", children: "Naar AI-Authenticatie" })] }))] }));
|
|
23
|
+
}
|