@flowselections/facturen-installatie-techniek 1.3.4 → 1.4.2

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.
Files changed (36) hide show
  1. package/dist-lib/components/FacturenForInstallatieTechniek.d.ts.map +1 -1
  2. package/dist-lib/components/FacturenForInstallatieTechniek.js +12 -2
  3. package/dist-lib/components/FactuurDetailPage.d.ts.map +1 -1
  4. package/dist-lib/components/FactuurDetailPage.js +18 -2
  5. package/dist-lib/components/InvoiceA4Preview.d.ts.map +1 -1
  6. package/dist-lib/components/InvoiceA4Preview.js +64 -23
  7. package/dist-lib/components/ModuleErrorView.d.ts +6 -0
  8. package/dist-lib/components/ModuleErrorView.d.ts.map +1 -0
  9. package/dist-lib/components/ModuleErrorView.js +11 -0
  10. package/dist-lib/components/settings/ModuleHealthSettingsCard.d.ts +3 -0
  11. package/dist-lib/components/settings/ModuleHealthSettingsCard.d.ts.map +1 -0
  12. package/dist-lib/components/settings/ModuleHealthSettingsCard.js +47 -0
  13. package/dist-lib/index.d.ts +3 -0
  14. package/dist-lib/index.d.ts.map +1 -1
  15. package/dist-lib/index.js +5 -1
  16. package/dist-lib/integrations/supabase/client.d.ts +2 -2
  17. package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
  18. package/dist-lib/integrations/supabase/client.js +3 -14
  19. package/dist-lib/integrations/supabase/types.d.ts +224 -0
  20. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  21. package/dist-lib/lib/articles.functions.d.ts +6 -1
  22. package/dist-lib/lib/articles.functions.d.ts.map +1 -1
  23. package/dist-lib/lib/articles.functions.js +43 -22
  24. package/dist-lib/lib/auth-attach.d.ts +6 -0
  25. package/dist-lib/lib/auth-attach.d.ts.map +1 -0
  26. package/dist-lib/lib/auth-attach.js +17 -0
  27. package/dist-lib/lib/config.d.ts +5 -0
  28. package/dist-lib/lib/config.d.ts.map +1 -1
  29. package/dist-lib/lib/config.js +5 -0
  30. package/dist-lib/lib/dependencies.d.ts +9 -0
  31. package/dist-lib/lib/dependencies.d.ts.map +1 -0
  32. package/dist-lib/lib/dependencies.js +43 -0
  33. package/dist-lib/lib/facturen.d.ts +4 -0
  34. package/dist-lib/lib/facturen.d.ts.map +1 -1
  35. package/dist-lib/lib/facturen.js +25 -1
  36. package/package.json +4 -4
@@ -1,5 +1,6 @@
1
1
  import { type SupabaseClient } from "@supabase/supabase-js";
2
2
  import { type Fetcher, type FunctionMiddlewareAfterServer } from "@tanstack/react-start";
3
+ import { attachShellAuth } from "./auth-attach";
3
4
  import type { Database } from "../integrations/supabase/types";
4
5
  export interface InvoiceArticleOption {
5
6
  id: string;
@@ -14,6 +15,10 @@ export interface InvoiceArticleOption {
14
15
  declare const requireInvoiceArticleAuth: FunctionMiddlewareAfterServer<{}, unknown, undefined, {
15
16
  supabase: SupabaseClient<Database>;
16
17
  }, undefined, undefined, undefined>;
17
- export declare const listInvoiceArticles: Fetcher<readonly [typeof requireInvoiceArticleAuth], undefined, Promise<InvoiceArticleOption[]>>;
18
+ export interface ArticleSearchInput {
19
+ query?: string;
20
+ ids?: string[];
21
+ }
22
+ export declare const listInvoiceArticles: Fetcher<readonly [typeof attachShellAuth, typeof requireInvoiceArticleAuth], (input: ArticleSearchInput) => ArticleSearchInput, Promise<InvoiceArticleOption[]>>;
18
23
  export {};
19
24
  //# sourceMappingURL=articles.functions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"articles.functions.d.ts","sourceRoot":"","sources":["../../src/lib/articles.functions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAoC,KAAK,OAAO,EAAE,KAAK,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AAE3H,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAG9D,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAID,QAAA,MAAM,yBAAyB,EAAE,6BAA6B,CAC5D,EAAE,EACF,OAAO,EACP,SAAS,EACT;IAAE,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAA;CAAE,EACtC,SAAS,EACT,SAAS,EACT,SAAS,CAmBT,CAAC;AAWH,eAAO,MAAM,mBAAmB,EAAE,OAAO,CACvC,SAAS,CAAC,OAAO,yBAAyB,CAAC,EAC3C,SAAS,EACT,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAuD7B,CAAC"}
1
+ {"version":3,"file":"articles.functions.d.ts","sourceRoot":"","sources":["../../src/lib/articles.functions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAoC,KAAK,OAAO,EAAE,KAAK,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AAE3H,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAG9D,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAID,QAAA,MAAM,yBAAyB,EAAE,6BAA6B,CAC5D,EAAE,EACF,OAAO,EACP,SAAS,EACT;IAAE,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAA;CAAE,EACtC,SAAS,EACT,SAAS,EACT,SAAS,CAoBT,CAAC;AAeH,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;CAChB;AAeD,eAAO,MAAM,mBAAmB,EAAE,OAAO,CACvC,SAAS,CAAC,OAAO,eAAe,EAAE,OAAO,yBAAyB,CAAC,EACnE,CAAC,KAAK,EAAE,kBAAkB,KAAK,kBAAkB,EACjD,OAAO,CAAC,oBAAoB,EAAE,CAAC,CA4D7B,CAAC"}
@@ -1,10 +1,12 @@
1
1
  import { createClient } from "@supabase/supabase-js";
2
2
  import { createMiddleware, createServerFn } from "@tanstack/react-start";
3
3
  import { getRequest } from "@tanstack/react-start/server";
4
- import { MAX_TOTAL_ROWS, QUERY_BATCH_SIZE, STORAGE_BUCKETS } from "./config";
4
+ import { attachShellAuth } from "./auth-attach";
5
+ import { ARTICLE_SEARCH_LIMIT, STORAGE_BUCKETS } from "./config";
5
6
  // Explicit annotation: the inferred middleware type exceeds the serialization
6
7
  // limit for declaration emit (TS7056).
7
- const requireInvoiceArticleAuth = createMiddleware({ type: "function" }).server(async ({ next }) => {
8
+ const requireInvoiceArticleAuth = createMiddleware({ type: "function" })
9
+ .server(async ({ next }) => {
8
10
  const url = process.env["SUPABASE_URL"];
9
11
  const publishableKey = process.env["SUPABASE_PUBLISHABLE_KEY"];
10
12
  if (!url || !publishableKey)
@@ -13,16 +15,21 @@ const requireInvoiceArticleAuth = createMiddleware({ type: "function" }).server(
13
15
  const header = request.headers.get("authorization") ?? "";
14
16
  const token = header.startsWith("Bearer ") ? header.slice(7) : "";
15
17
  if (!token)
16
- throw new Response("Niet ingelogd", { status: 401 });
18
+ throw new Error("Niet ingelogd");
17
19
  const client = createClient(url, publishableKey, {
18
20
  global: { headers: { Authorization: `Bearer ${token}` } },
19
21
  auth: { storage: undefined, persistSession: false, autoRefreshToken: false },
20
22
  });
21
23
  const { data, error } = await client.auth.getUser(token);
22
24
  if (error || !data.user)
23
- throw new Response("Niet ingelogd", { status: 401 });
25
+ throw new Error("Niet ingelogd");
24
26
  return next({ context: { supabase: client } });
25
27
  });
28
+ function articleError(error) {
29
+ const e = (error ?? {});
30
+ const missing = ["42P01", "PGRST205", "PGRST200"].includes(e.code ?? "") || /does not exist|schema cache/i.test(e.message ?? "");
31
+ return missing ? "MISSING_DEPENDENCY: module Artikelen ontbreekt in deze omgeving." : "Artikelen konden niet worden geladen.";
32
+ }
26
33
  function safePhotoPath(value) {
27
34
  if (typeof value !== "string")
28
35
  return null;
@@ -31,35 +38,49 @@ function safePhotoPath(value) {
31
38
  return null;
32
39
  return path;
33
40
  }
41
+ const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
42
+ function validateArticleSearch(input) {
43
+ const raw = (input && typeof input === "object" ? input : {});
44
+ const query = typeof raw.query === "string" ? raw.query.trim().slice(0, 100) : "";
45
+ const ids = Array.isArray(raw.ids)
46
+ ? [...new Set(raw.ids.filter((v) => typeof v === "string" && UUID_RE.test(v)))].slice(0, 500)
47
+ : [];
48
+ return { query, ids };
49
+ }
34
50
  // Explicit annotation: the inferred server-function type exceeds the
35
51
  // serialization limit for declaration emit (TS7056).
36
- export const listInvoiceArticles = createServerFn({ method: "GET" })
37
- .middleware([requireInvoiceArticleAuth])
38
- .handler(async ({ context }) => {
52
+ export const listInvoiceArticles = createServerFn({ method: "POST" })
53
+ .middleware([attachShellAuth, requireInvoiceArticleAuth])
54
+ .inputValidator(validateArticleSearch)
55
+ .handler(async ({ context, data: input }) => {
56
+ const columns = "id, artikelcode, gtin, naam, omschrijving, eenheid, bruto_prijs_cent, netto_prijs_cent, marge_procent, foto_pad";
39
57
  const loadArticles = async () => {
40
- const all = [];
41
- for (let from = 0; from < MAX_TOTAL_ROWS; from += QUERY_BATCH_SIZE) {
42
- const { data, error } = await context.supabase
43
- .from("artikelen_cache")
44
- .select("id, artikelcode, gtin, naam, omschrijving, eenheid, bruto_prijs_cent, netto_prijs_cent, marge_procent, foto_pad")
45
- .order("naam", { ascending: true })
46
- .order("id", { ascending: true })
47
- .range(from, from + QUERY_BATCH_SIZE - 1);
58
+ if (input.ids && input.ids.length > 0) {
59
+ const { data, error } = await context.supabase.from("artikelen_cache").select(columns).in("id", input.ids);
48
60
  if (error)
49
- throw error;
50
- const batch = Array.isArray(data) ? data : [];
51
- all.push(...batch);
52
- if (batch.length < QUERY_BATCH_SIZE)
53
- break;
61
+ throw new Error(articleError(error));
62
+ return Array.isArray(data) ? data : [];
63
+ }
64
+ let q = context.supabase.from("artikelen_cache").select(columns);
65
+ const term = (input.query ?? "").replace(/[%,()*\\]/g, " ").trim();
66
+ if (term) {
67
+ const like = `%${term}%`;
68
+ q = q.or(`naam.ilike.${like},artikelcode.ilike.${like},gtin.ilike.${like},omschrijving.ilike.${like}`);
54
69
  }
55
- return all;
70
+ const { data, error } = await q
71
+ .order("naam", { ascending: true })
72
+ .order("id", { ascending: true })
73
+ .limit(ARTICLE_SEARCH_LIMIT);
74
+ if (error)
75
+ throw new Error(articleError(error));
76
+ return Array.isArray(data) ? data : [];
56
77
  };
57
78
  const [rows, settingsResult] = await Promise.all([
58
79
  loadArticles(),
59
80
  context.supabase.from("artikelen_instellingen").select("marge_procent").order("id", { ascending: true }).limit(1).maybeSingle(),
60
81
  ]);
61
82
  if (settingsResult.error)
62
- throw settingsResult.error;
83
+ throw new Error(articleError(settingsResult.error));
63
84
  const generalMargin = Number(settingsResult.data?.marge_procent ?? 0);
64
85
  const paths = [...new Set(rows.map((row) => safePhotoPath(row.foto_pad)).filter((path) => Boolean(path)))];
65
86
  const photoUrls = new Map();
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Stuurt het inlogtoken van de shell (gedeelde client uit @flowselections/core)
3
+ * mee met serververzoeken. Zo werkt de module in elke shell met elke database.
4
+ */
5
+ export declare const attachShellAuth: import("@tanstack/start-client-core").FunctionMiddlewareAfterClient<{}, unknown, undefined, undefined, undefined>;
6
+ //# sourceMappingURL=auth-attach.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-attach.d.ts","sourceRoot":"","sources":["../../src/lib/auth-attach.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,eAAO,MAAM,eAAe,mHAS1B,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { createMiddleware } from "@tanstack/react-start";
2
+ import { supabase } from "@flowselections/core";
3
+ /**
4
+ * Stuurt het inlogtoken van de shell (gedeelde client uit @flowselections/core)
5
+ * mee met serververzoeken. Zo werkt de module in elke shell met elke database.
6
+ */
7
+ export const attachShellAuth = createMiddleware({ type: "function" }).client(async ({ next }) => {
8
+ let token;
9
+ try {
10
+ const { data } = await supabase.auth.getSession();
11
+ token = data.session?.access_token;
12
+ }
13
+ catch {
14
+ token = undefined;
15
+ }
16
+ return next({ headers: token ? { Authorization: `Bearer ${token}` } : {} });
17
+ });
@@ -13,4 +13,9 @@ export declare const INVOICE_PAGE_SIZE = 100;
13
13
  export declare const QUERY_BATCH_SIZE = 1000;
14
14
  /** Absolute bovengrens als vangnet tegen eindeloze lussen. */
15
15
  export declare const MAX_TOTAL_ROWS = 200000;
16
+ /** Maximaal aantal zoekresultaten per zoekopdracht (artikelen, klanten). */
17
+ export declare const ARTICLE_SEARCH_LIMIT = 60;
18
+ export declare const CUSTOMER_SEARCH_LIMIT = 50;
19
+ /** Wachttijd (ms) na typen voordat er gezocht wordt. */
20
+ export declare const SEARCH_DEBOUNCE_MS = 300;
16
21
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAGA,4EAA4E;AAC5E,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,gDAAgD;AAChD,eAAO,MAAM,WAAW,2BAA4B,CAAC;AAErD,mFAAmF;AACnF,eAAO,MAAM,eAAe;;;CAGlB,CAAC;AAEX,8EAA8E;AAC9E,eAAO,MAAM,iBAAiB,MAAM,CAAC;AACrC,uFAAuF;AACvF,eAAO,MAAM,gBAAgB,OAAO,CAAC;AACrC,8DAA8D;AAC9D,eAAO,MAAM,cAAc,SAAU,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAGA,4EAA4E;AAC5E,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,gDAAgD;AAChD,eAAO,MAAM,WAAW,2BAA4B,CAAC;AAErD,mFAAmF;AACnF,eAAO,MAAM,eAAe;;;CAGlB,CAAC;AAEX,8EAA8E;AAC9E,eAAO,MAAM,iBAAiB,MAAM,CAAC;AACrC,uFAAuF;AACvF,eAAO,MAAM,gBAAgB,OAAO,CAAC;AACrC,8DAA8D;AAC9D,eAAO,MAAM,cAAc,SAAU,CAAC;AACtC,4EAA4E;AAC5E,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,qBAAqB,KAAK,CAAC;AACxC,wDAAwD;AACxD,eAAO,MAAM,kBAAkB,MAAM,CAAC"}
@@ -15,3 +15,8 @@ export const INVOICE_PAGE_SIZE = 100;
15
15
  export const QUERY_BATCH_SIZE = 1000;
16
16
  /** Absolute bovengrens als vangnet tegen eindeloze lussen. */
17
17
  export const MAX_TOTAL_ROWS = 200000;
18
+ /** Maximaal aantal zoekresultaten per zoekopdracht (artikelen, klanten). */
19
+ export const ARTICLE_SEARCH_LIMIT = 60;
20
+ export const CUSTOMER_SEARCH_LIMIT = 50;
21
+ /** Wachttijd (ms) na typen voordat er gezocht wordt. */
22
+ export const SEARCH_DEBOUNCE_MS = 300;
@@ -0,0 +1,9 @@
1
+ export type ModuleDependency = "artikelen" | "klanten" | "werkbonnen" | "offertes" | "email" | "facturen";
2
+ export declare const DEPENDENCY_LABELS: Record<ModuleDependency, string>;
3
+ /** True als de fout betekent dat een tabel of databasefunctie niet bestaat. */
4
+ export declare function isMissingObjectError(error: unknown): boolean;
5
+ /** Gebruikersmelding voor een mislukte lading, met naam van de ontbrekende module. */
6
+ export declare function dependencyMessage(error: unknown, dep: ModuleDependency, what: string): string;
7
+ /** Voert een async actie maximaal één keer tegelijk uit (tegen dubbelklikken). */
8
+ export declare function createSingleFlight(): <T>(fn: () => Promise<T>) => Promise<T | undefined>;
9
+ //# sourceMappingURL=dependencies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../../src/lib/dependencies.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,SAAS,GAAG,YAAY,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU,CAAC;AAE1G,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAO9D,CAAC;AAIF,+EAA+E;AAC/E,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAM5D;AAED,sFAAsF;AACtF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAK7F;AAED,kFAAkF;AAClF,wBAAgB,kBAAkB,KAEN,CAAC,EAAE,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAS3E"}
@@ -0,0 +1,43 @@
1
+ // Herkent fouten die ontstaan omdat een andere module (tabel/functie) ontbreekt
2
+ // in de gekoppelde database, en zet ze om in een begrijpelijke melding.
3
+ export const DEPENDENCY_LABELS = {
4
+ artikelen: "Artikelen",
5
+ klanten: "Klanten",
6
+ werkbonnen: "Werkbonnen",
7
+ offertes: "Offertes",
8
+ email: "E-mail - Authenticatie",
9
+ facturen: "Facturen (database-onderdelen)",
10
+ };
11
+ const MISSING_CODES = new Set(["42P01", "42883", "PGRST202", "PGRST205", "PGRST200"]);
12
+ /** True als de fout betekent dat een tabel of databasefunctie niet bestaat. */
13
+ export function isMissingObjectError(error) {
14
+ if (!error || typeof error !== "object")
15
+ return false;
16
+ const e = error;
17
+ if (typeof e.code === "string" && MISSING_CODES.has(e.code))
18
+ return true;
19
+ const msg = typeof e.message === "string" ? e.message : "";
20
+ return /does not exist|could not find the (table|function)|schema cache/i.test(msg);
21
+ }
22
+ /** Gebruikersmelding voor een mislukte lading, met naam van de ontbrekende module. */
23
+ export function dependencyMessage(error, dep, what) {
24
+ if (isMissingObjectError(error)) {
25
+ return `${what} niet beschikbaar: module ${DEPENDENCY_LABELS[dep]} ontbreekt in deze omgeving.`;
26
+ }
27
+ return `${what} konden niet worden geladen. Probeer het opnieuw.`;
28
+ }
29
+ /** Voert een async actie maximaal één keer tegelijk uit (tegen dubbelklikken). */
30
+ export function createSingleFlight() {
31
+ let busy = false;
32
+ return async function run(fn) {
33
+ if (busy)
34
+ return undefined;
35
+ busy = true;
36
+ try {
37
+ return await fn();
38
+ }
39
+ finally {
40
+ busy = false;
41
+ }
42
+ };
43
+ }
@@ -84,6 +84,8 @@ export interface CustomerOption {
84
84
  billing_city: string | null;
85
85
  vat_number: string | null;
86
86
  }
87
+ /** Zoek klanten in de database (alleen lezen), beperkt aantal resultaten. */
88
+ export declare function searchCustomers(query: string): Promise<CustomerOption[]>;
87
89
  /** Klanten uit Klanten (Planner) — alleen lezen. */
88
90
  export declare function fetchCustomers(): Promise<CustomerOption[]>;
89
91
  /** Haalt alle rijen op in blokken, zodat er nooit stil rijen wegvallen door de 1000-rijenlimiet. */
@@ -256,6 +258,8 @@ export interface SenderConnection {
256
258
  status: string | null;
257
259
  }
258
260
  export declare function fetchSenderForPurpose(purpose: string | null): Promise<SenderConnection | null>;
261
+ /** Controleert vooraf of verzenden mogelijk is; geeft een melding terug of null. */
262
+ export declare function sendBlockReason(sender: SenderConnection | null, purpose: string | null): string | null;
259
263
  export declare function sendInvoiceEmail(p: {
260
264
  invoiceId: string;
261
265
  to: string;
@@ -1 +1 @@
1
- {"version":3,"file":"facturen.d.ts","sourceRoot":"","sources":["../../src/lib/facturen.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"facturen.d.ts","sourceRoot":"","sources":["../../src/lib/facturen.ts"],"names":[],"mappings":"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"}
@@ -28,7 +28,23 @@ export async function getInvoiceLogoUrl(path) {
28
28
  return data?.signedUrl ?? null;
29
29
  }
30
30
  const db = supabase;
31
- import { DEFAULT_VAT_RATE, STORAGE_BUCKETS, INVOICE_PAGE_SIZE, MAX_TOTAL_ROWS, QUERY_BATCH_SIZE } from "./config";
31
+ import { DEFAULT_VAT_RATE, STORAGE_BUCKETS, INVOICE_PAGE_SIZE, MAX_TOTAL_ROWS, QUERY_BATCH_SIZE, CUSTOMER_SEARCH_LIMIT } from "./config";
32
+ /** Zoek klanten in de database (alleen lezen), beperkt aantal resultaten. */
33
+ export async function searchCustomers(query) {
34
+ await ensureSession();
35
+ const term = query.replace(/[%,()*\\]/g, " ").trim().slice(0, 100);
36
+ let q = db
37
+ .from("itk_customers")
38
+ .select("id, name, customer_number, general_email, billing_street, billing_postcode, billing_city, vat_number");
39
+ if (term) {
40
+ const like = `%${term}%`;
41
+ q = q.or(`name.ilike.${like},customer_number.ilike.${like},billing_city.ilike.${like}`);
42
+ }
43
+ const { data, error } = await q.order("name", { ascending: true }).order("id", { ascending: true }).limit(CUSTOMER_SEARCH_LIMIT);
44
+ if (error)
45
+ throw error;
46
+ return Array.isArray(data) ? data : [];
47
+ }
32
48
  /** Klanten uit Klanten (Planner) — alleen lezen. */
33
49
  export async function fetchCustomers() {
34
50
  return fetchAllPages((from, to) => db
@@ -456,6 +472,14 @@ export async function fetchSenderForPurpose(purpose) {
456
472
  const list = Array.isArray(data) ? data : [];
457
473
  return list[0] ?? null;
458
474
  }
475
+ /** Controleert vooraf of verzenden mogelijk is; geeft een melding terug of null. */
476
+ export function sendBlockReason(sender, purpose) {
477
+ if (!purpose)
478
+ return "Kies eerst een e-maildoeleinde bij Instellingen → Factuur e-mail.";
479
+ if (!sender?.id)
480
+ return `Er is geen mailbox gekoppeld aan het doeleinde '${purpose}'. Koppel er een in de e-mailmodule.`;
481
+ return null;
482
+ }
459
483
  export async function sendInvoiceEmail(p) {
460
484
  assertValidPdfBase64(p.pdfBase64);
461
485
  const purpose = await fetchInvoiceEmailPurpose();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flowselections/facturen-installatie-techniek",
3
- "version": "1.3.4",
3
+ "version": "1.4.2",
4
4
  "flowselections": {
5
5
  "moduleId": "facturen-installatietechniek",
6
6
  "pages": [
@@ -117,9 +117,9 @@
117
117
  "@rsbuild/core": "^1.0.0",
118
118
  "@tailwindcss/vite": "^4.2.1",
119
119
  "@tanstack/react-query": "^5.83.0",
120
- "@tanstack/react-router": "^1.168.0",
121
- "@tanstack/react-start": "^1.167.14",
122
- "@tanstack/router-plugin": "^1.167.10",
120
+ "@tanstack/react-router": "1.169.1",
121
+ "@tanstack/react-start": "1.167.63",
122
+ "@tanstack/router-plugin": "1.167.33",
123
123
  "@types/node": "^22.16.5",
124
124
  "@types/react": "^19.2.0",
125
125
  "@types/react-dom": "^19.2.0",