@tesouro/embedded-components-react 0.5.225 → 0.5.226

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 (41) hide show
  1. package/README.md +21 -21
  2. package/dist/index.d.ts +23 -2
  3. package/dist/index.js +1 -1
  4. package/dist/lib/ReceivablesWidget.d.ts +23 -2
  5. package/dist/lib/ReceivablesWidget.js +1 -1
  6. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/data-access/dist/index.js +4 -4
  7. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/data-access/dist/index10.js +45 -31
  8. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/feature/dist/index.js +1 -1
  9. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/feature/dist/index12.js +51 -32
  10. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/feature/dist/index13.js +20 -1
  11. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/feature/dist/index15.js +17 -202
  12. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/feature/dist/index16.js +220 -31
  13. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/feature/dist/index17.js +32 -145
  14. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/feature/dist/index18.js +126 -44
  15. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/feature/dist/index19.js +145 -117
  16. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/feature/dist/index20.js +46 -58
  17. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/feature/dist/index21.js +113 -87
  18. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/feature/dist/index22.js +58 -116
  19. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/feature/dist/index23.js +98 -225
  20. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/feature/dist/index24.js +111 -27
  21. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/feature/dist/index25.js +225 -462
  22. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/feature/dist/index26.js +34 -41
  23. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/feature/dist/index27.js +627 -34
  24. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/feature/dist/index28.js +39 -77
  25. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/feature/dist/index29.js +34 -112
  26. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/feature/dist/index30.js +75 -310
  27. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/feature/dist/index31.js +124 -0
  28. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/feature/dist/index32.js +324 -0
  29. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/feature/dist/index6.js +20 -15
  30. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/feature/dist/index8.js +56 -53
  31. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/feature/dist/index9.js +33 -29
  32. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/ui/dist/index25.js +184 -162
  33. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/ui/dist/index4.js +1 -3
  34. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/ui/dist/index6.js +78 -69
  35. package/dist/libs/tesouro-embedded-components-react/shared/counterpart-management/feature/dist/lib/CounterpartSelector.js +7 -6
  36. package/dist/libs/tesouro-embedded-components-react/shared/counterpart-management/ui/dist/index15.js +20 -19
  37. package/dist/libs/tesouro-embedded-components-react/shared/data-access/dist/index.js +39 -39
  38. package/dist/libs/tesouro-embedded-components-react/shared/data-access/dist/lib/rest/@tanstack/react-query.gen.js +210 -199
  39. package/dist/libs/tesouro-embedded-components-react/shared/data-access/dist/lib/rest/sdk.gen.js +60 -52
  40. package/dist/libs/tesouro-embedded-components-react/shared/feature/dist/lib/analytics/build-info.js +1 -1
  41. package/package.json +1 -1
@@ -1,474 +1,237 @@
1
- "use client";
2
- "use client";
3
- "use client";
4
- "use client";
5
- import { getStateOptions as e } from "../../../shared/util/dist/lib/usStates.js";
6
- import { extractApiErrorMessage as t } from "../../../shared/util/dist/lib/apiErrors.js";
7
- import { COUNTERPART_MESSAGE_LABELS_EN as n } from "../../../shared/counterpart-management/feature/dist/lib/labels.js";
8
- import { useCounterpartAddressesQuery as r } from "../../../shared/counterpart-management/data-access/dist/index7.js";
9
- import { useCounterpartForm as i } from "../../../shared/counterpart-management/feature/dist/lib/useCounterpartForm.js";
10
- import "../../../shared/counterpart-management/feature/dist/index.js";
1
+ import { minorExponentForCurrency as e } from "../../../shared/util/dist/lib/amountOutputToMajorUnits.js";
11
2
  import "../../ui/dist/index10.js";
12
3
  import "../../ui/dist/index.js";
13
- import { buildLineItemControls as a, commitLineItemField as ee, commitTaxRateInput as te, convertPriceInput as ne, createLineItem as re, getCurrencySymbol as ie, lineItemFromProduct as ae, reconcileLineItemIds as oe, reconcileMeasureUnits as se, sanitizeLineItemPatch as ce, sanitizeTaxRateInput as le, stepLineItemQuantity as ue, stripBlankLineItems as de, summarizeLineItemErrors as fe, toSheetLineItem as pe, validateLineItems as me } from "./index6.js";
14
- import { buildReceivableAttachmentsView as he } from "./index7.js";
15
- import { buildCreateRecurrencePayload as ge, buildUpdateRecurrencePayload as _e, clearRecurrenceRecipients as ve, countIssuedIterations as ye, isRecurring as o, recurrenceToFormFields as be, validateRecurrence as xe } from "./index8.js";
16
- import { convertDiscountInput as Se, decorateDiscountInput as Ce, discountInputToMinorUnits as we, sanitizeDiscountInput as Te } from "./index10.js";
17
- import { buildFormTotalsView as Ee, calculateFormTotals as De, validateDiscount as Oe, validateInvoiceTotals as ke } from "./index11.js";
18
- import { createEmptyReceivableFormValues as Ae, hasReceivableFormErrors as je, receivableFormValuesToCreatePayload as Me, receivableFormValuesToLineItemChanges as Ne, receivableFormValuesToUpdatePayload as Pe, receivableToFormValues as Fe, validateReceivableForm as Ie } from "./index12.js";
19
- import { shouldShowRemindersInitially as Le } from "./index14.js";
20
- import { useCreateReceivableMutation as Re, useUpdateReceivableMutation as ze } from "../../data-access/dist/index7.js";
21
- import { useCreateRecurrenceMutation as Be, useRecurrenceQuery as Ve, useUpdateRecurrenceMutation as He } from "../../data-access/dist/index11.js";
22
- import "../../data-access/dist/index.js";
23
- import { useReceivableAttachmentUploads as Ue } from "./index17.js";
24
- import { useReceivablePaymentTerms as We } from "./index18.js";
25
- import { useReceivableRecurrence as Ge } from "./index19.js";
26
- import { useReceivableBankAccount as Ke } from "./index21.js";
27
- import { useReceivableReminders as qe } from "./index22.js";
28
- import { useReceivablePreview as Je } from "./index24.js";
29
- import { getCurrencyOptions as Ye } from "../../../shared/product-catalog/feature/dist/lib/helpers.js";
30
- import { useMeasureUnitsQuery as Xe } from "../../../shared/product-catalog/data-access/dist/index9.js";
31
- import { useMeasureUnits as Ze } from "../../../shared/product-catalog/feature/dist/lib/useMeasureUnits.js";
32
- import "../../../shared/product-catalog/feature/dist/index.js";
33
- import { useCallback as s, useEffect as c, useMemo as l, useRef as u, useState as d } from "react";
4
+ import { isBlankLineItem as t, keepsSavedTaxRates as n, lineItemTaxRateMinorUnits as r, parseQuantity as i, priceInputToMinorUnits as a, taxRateToMinorUnits as o } from "./index6.js";
5
+ import { formatTermDate as s, resolveIssueDate as c, termDueDate as l } from "./index9.js";
6
+ import { formatMoney as u } from "./index12.js";
7
+ import { differenceInCalendarDays as d, parseISO as f } from "date-fns";
34
8
  //#region ../../libs/tesouro-embedded-components-react/invoicing-widget/feature/dist/index25.js
35
- function f({ messages: f, counterpartMessageLabels: Qe, embeddedBankName: $e, onCreated: et }) {
36
- let p = Re(), m = ze(), tt = Be(), nt = He(), h = u(void 0), g = u([]), _ = u(""), [v, y] = d(!1), [b, rt] = d("create"), [it, at] = d(), [x, S] = d(), [C, w] = d(() => Ae()), [ot, T] = d({}), [st, ct] = d("none"), E = Ze(), D = Xe(), O = D.data?.data, { unitNamesById: k } = E, [lt, A] = d(), [j, M] = d(!1), N = u(!1), P = u(!1), F = u(!1), I = u({
37
- lines: !1,
38
- discount: !1
39
- }), [ut, L] = d(!1), dt = l(() => e(), []), ft = l(() => ({
40
- ...n,
41
- ...Qe
42
- }), [Qe]), pt = r(C.customerId), mt = pt.data?.data?.[0], R = pt.data?.data?.[0]?.id, ht = s((e) => {
43
- w((t) => ({
44
- ...t,
45
- attachments: e(t.attachments)
46
- }));
47
- }, []), z = Ue({
48
- attachments: C.attachments,
49
- setAttachments: ht,
50
- receivableId: it
51
- }), { reset: B, discardUploads: V, commitRemovals: gt } = z, _t = C.type === "invoice" ? he({
52
- attachments: C.attachments,
53
- pendingUploads: z.pendingUploads,
54
- isCountLimitReached: z.isCountLimitReached,
55
- isRecurring: o(C),
56
- messages: f
57
- }) : void 0, vt = s((e) => {
58
- w((t) => {
59
- let n = e ?? "";
60
- return n === t.customerId ? t : ve({
61
- ...t,
62
- customerId: n
63
- });
64
- });
65
- }, []), yt = i({
66
- view: st,
67
- setView: ct,
68
- selectedId: C.customerId || void 0,
69
- setSelectedId: vt,
70
- messages: ft,
71
- counterpartType: "customer",
72
- counterpart: void 0,
73
- primaryAddress: mt
74
- }), bt = s((e) => w((t) => {
75
- let n = e({
76
- paymentTermsId: t.paymentTermsId,
77
- paymentTermsCustomDate: t.paymentTermsCustomDate
78
- });
9
+ var p = "US", m = 100;
10
+ function h(e) {
11
+ try {
12
+ return new Intl.DisplayNames(void 0, { type: "region" }).of(e) ?? e;
13
+ } catch {
14
+ return e;
15
+ }
16
+ }
17
+ function g({ address: e, issuerCountry: t, formatCountry: n = h }) {
18
+ if (!e) return [];
19
+ let r = [e.city, e.state].filter(Boolean).join(", "), i = e.country === p && t === p;
20
+ return [
21
+ [e.line1, e.line2].filter(Boolean).join(" "),
22
+ [r, e.postal_code].filter(Boolean).join(" "),
23
+ e.country && !i ? n(e.country) : ""
24
+ ].filter(Boolean);
25
+ }
26
+ var _ = { kind: "pending" }, v = (e) => ({
27
+ kind: "text",
28
+ lines: e
29
+ });
30
+ function y(e, t) {
31
+ return e.previewNetDays.replace("{days}", String(t));
32
+ }
33
+ function b(e, t) {
34
+ let n = e.previewEarlyPaymentDays.replace("{days}", String(t.number_of_days));
35
+ return t.discount ? `${n}, ${e.previewEarlyPaymentDiscount.replace("{rate}", String(t.discount / m))}` : n;
36
+ }
37
+ function x({ paymentTermsId: e, paymentTermsCustomDate: t, paymentTerms: n, issueDate: r, messages: i }) {
38
+ let a = {
39
+ dueDate: _,
40
+ paymentTerms: _
41
+ };
42
+ if (e === "custom") {
43
+ if (!t) return a;
44
+ let e = f(t), n = Math.max(0, d(e, r));
79
45
  return {
80
- ...t,
81
- ...n,
82
- ...n.paymentTermsId === "receipt_due" ? { paymentReminderId: "" } : {}
46
+ dueDate: v([s(e)]),
47
+ paymentTerms: v([y(i, n)])
83
48
  };
84
- }), []), xt = We({
85
- paymentTermsId: C.paymentTermsId,
86
- paymentTermsCustomDate: C.paymentTermsCustomDate,
87
- isRecurring: C.type === "invoice" && o(C),
88
- messages: f,
89
- onChange: bt
90
- }), H = xt.reset, St = s((e) => w((t) => ({
91
- ...t,
92
- ...e
93
- })), []), Ct = Ke({
94
- open: v,
95
- bankAccountId: C.bankAccountId,
96
- embeddedBankName: $e,
97
- messages: f,
98
- onSelect: St
99
- }), U = Ct.reset, wt = Ve(x), W = x ? wt.data : void 0, G = ye(W), Tt = G > 0, K = !!x && wt.isLoading, q = u(void 0);
100
- c(() => {
101
- W && q.current !== W.id && (q.current = W.id, w((e) => ({
102
- ...e,
103
- ...be(W)
104
- })));
105
- }, [W]);
106
- let Et = s((e) => w(e), []), Dt = s((e) => T((t) => {
107
- if (!e.some((e) => e in t)) return t;
108
- let n = { ...t };
109
- return e.forEach((e) => delete n[e]), n;
110
- }), []), Ot = u([]), kt = s((e) => {
111
- if (!j) {
112
- Dt(e);
113
- return;
114
- }
115
- Ot.current.push(...e);
116
- }, [Dt, j]);
117
- c(() => {
118
- let e = Ot.current;
119
- if (!e.length) return;
120
- Ot.current = [];
121
- let t = xe({
122
- fields: C,
123
- issuedCount: G,
124
- messages: f
125
- });
126
- T((n) => {
127
- let r = { ...n };
128
- return e.forEach((e) => {
129
- t[e] ? r[e] = t[e] : delete r[e];
130
- }), r;
131
- });
132
- }, [
133
- G,
134
- f,
135
- C
136
- ]);
137
- let At = Ge({
138
- values: C,
139
- errors: ot,
140
- lockSchedule: Tt,
141
- messages: f,
142
- onChange: Et,
143
- onClearErrors: Dt,
144
- onRevalidateErrors: kt
145
- }), J = At.reset, jt = s((e) => w((t) => ({
146
- ...t,
147
- ...e
148
- })), []), Mt = p.isPending || m.isPending || tt.isPending || nt.isPending, Nt = qe({
149
- open: v,
150
- isInvoice: C.type === "invoice",
151
- disabled: Mt,
152
- paymentTermsId: C.paymentTermsId,
153
- paymentTermsCustomDate: C.paymentTermsCustomDate,
154
- paymentReminderId: C.paymentReminderId,
155
- overdueReminderId: C.overdueReminderId,
156
- messages: f,
157
- onSelect: jt
158
- }), Y = Nt.reset, Pt = s(() => {
159
- g.current = [], A(void 0), rt("create"), at(void 0), S(void 0), q.current = void 0, h.current = void 0, w(Ae()), T({}), M(!1), L(!1), I.current = {
160
- lines: !1,
161
- discount: !1
162
- }, B(), J();
163
- }, [B, J]), Ft = s((e = "invoice") => {
164
- H(), U(), J();
165
- let t = {
166
- ...Ae(),
167
- type: e
168
- };
169
- Y(Le(t)), g.current = [], h.current = void 0, q.current = void 0, A(void 0), rt("create"), at(void 0), S(void 0), w(t), T({}), B(), M(!1), L(!1), I.current = {
170
- lines: !1,
171
- discount: !1
172
- }, y(!0);
173
- }, [
174
- B,
175
- H,
176
- U,
177
- J,
178
- Y
179
- ]), It = s((e) => {
180
- if (e.type === "credit_note") return;
181
- H(), U(), J();
182
- let t = Fe(e, O);
183
- Y(Le(t)), g.current = e.line_items, _.current = e.currency, h.current = void 0, q.current = void 0, A(void 0), rt("edit"), at(e.id), S(e.type === "invoice" ? e.recurrence_id ?? void 0 : void 0), w(t), T({}), M(!1), L(!1), I.current = {
184
- lines: !1,
185
- discount: !1
186
- }, B(), y(!0);
187
- }, [
188
- B,
189
- H,
190
- U,
191
- J,
192
- Y,
193
- O
194
- ]);
195
- c(() => {
196
- O?.length && w((e) => {
197
- let t = se(e.lineItems, O);
198
- return t === e.lineItems ? e : {
199
- ...e,
200
- lineItems: t
201
- };
202
- });
203
- }, [O]);
204
- let X = z.isUploading, Lt = s(() => {
205
- X || (V(), y(!1), T({}));
206
- }, [V, X]), Rt = s((e) => {
207
- let t = { ...e };
208
- t.taxRate !== void 0 && (t.taxRate = le(t.taxRate), F.current = !0), t.type !== void 0 && t.type !== "invoice" && V(), t.discount !== void 0 && j && (P.current = !0), t.discountType !== void 0 && (P.current = !0), t.currency !== void 0 && (N.current = !0), w((e) => {
209
- let n = {
210
- ...e,
211
- ...t
212
- };
213
- return t.discount !== void 0 && (n.discount = Te(t.discount, n.discountType, n.currency)), n.currency !== e.currency && (n.lineItems = e.lineItems.map((t) => ({
214
- ...t,
215
- price: ne(t.price, e.currency, n.currency)
216
- }))), (n.currency !== e.currency || n.discountType !== e.discountType) && (n.discount = Se({
217
- value: n.discount,
218
- type: n.discountType,
219
- currency: n.currency
220
- })), n;
221
- });
222
- }, [V, j]), zt = s(() => L(!0), []), Bt = s(() => {
223
- L(!1), P.current = !0, w((e) => ({
224
- ...e,
225
- discount: Se({
226
- value: e.discount,
227
- type: e.discountType,
228
- currency: e.currency
229
- })
230
- }));
231
- }, []), Vt = s(() => {
232
- F.current = !0, w((e) => {
233
- let t = te(e.taxRate);
234
- return t === e.taxRate ? e : {
235
- ...e,
236
- taxRate: t
237
- };
238
- });
239
- }, []), Z = s((e, { validate: t }) => {
240
- t && (N.current = !0), w((t) => ({
241
- ...t,
242
- lineItems: e(t.lineItems)
243
- }));
244
- }, []);
245
- c(() => {
246
- let e = N.current, t = P.current;
247
- if (!e && !t && !F.current) return;
248
- N.current = !1, P.current = !1, F.current = !1, e && (I.current.lines = !0), t && (I.current.discount = !0);
249
- let n = e ? me(C.lineItems, {
250
- currency: C.currency,
251
- messages: f
252
- }) : void 0;
253
- T((t) => {
254
- let r = { ...t };
255
- return I.current.lines && (r.lineItems = e ? n : t.lineItems, r.lineItemsSummary = fe(r.lineItems, ke(C, f))), I.current.discount && (r.discount = Oe(C, f)), r;
256
- });
257
- }, [f, C]);
258
- let Ht = s((e, t) => {
259
- let { unit: n, ...r } = t, i = ce(r);
260
- i.name !== void 0 && (i.productId = ""), n !== void 0 && (i.measureUnitId = n, i.measureUnitName = ""), i.taxable !== void 0 && (F.current = !0), Z((t) => t.map((t) => t.id === e ? {
261
- ...t,
262
- ...i
263
- } : t), { validate: j });
264
- }, [Z, j]), Ut = s((e, t) => {
265
- Z((n) => n.map((n) => n.id === e ? {
266
- ...n,
267
- ...ae({
268
- product: t,
269
- currency: C.currency,
270
- unitNamesById: k
271
- })
272
- } : n), { validate: !0 });
273
- }, [
274
- Z,
275
- k,
276
- C.currency
277
- ]), Q = s((e, t) => {
278
- t && Z((n) => t.kind === "remove" ? n.filter((t) => t.id !== e) : n.map((n) => n.id === e ? {
279
- ...n,
280
- ...t.patch
281
- } : n), { validate: !0 });
282
- }, [Z]), Wt = s((e, t) => {
283
- let n = C.lineItems.find((t) => t.id === e);
284
- n && Q(e, ee({
285
- lineItem: n,
286
- field: t,
287
- rowCount: C.lineItems.length,
288
- currency: C.currency
289
- }));
290
- }, [
291
- Q,
292
- C.currency,
293
- C.lineItems
294
- ]), Gt = s((e, t) => {
295
- let n = C.lineItems.find((t) => t.id === e);
296
- n && Q(e, ue({
297
- lineItem: n,
298
- step: t,
299
- rowCount: C.lineItems.length
300
- }));
301
- }, [Q, C.lineItems]), Kt = s(() => {
302
- let e = re(C.currency);
303
- A(e.id), w((t) => ({
304
- ...t,
305
- lineItems: [...t.lineItems, e]
306
- }));
307
- }, [C.currency]), qt = s((e) => {
308
- Z((t) => t.length <= 1 ? t : t.filter((t) => t.id !== e), { validate: !0 });
309
- }, [Z]), Jt = s(async () => {
310
- if (X || K) return;
311
- if (D.isLoading) {
312
- T({ form: f.lineItemsLoading });
313
- return;
314
- }
315
- let e = de(C.lineItems), n = e.length === C.lineItems.length ? C : {
316
- ...C,
317
- lineItems: e
318
- };
319
- n !== C && w(n);
320
- let r = n.type === "invoice" && o(n), i = {
321
- ...Ie({
322
- values: n,
323
- billingAddressId: R,
324
- messages: f
49
+ }
50
+ if (e === "receipt_due") return {
51
+ dueDate: v([s(r)]),
52
+ paymentTerms: v([i.previewDueOnReceipt])
53
+ };
54
+ let o = n?.find((t) => t.id === e);
55
+ if (!o) return a;
56
+ let c = l(o, r), u = [
57
+ o.term_1 && b(i, o.term_1),
58
+ o.term_2 && b(i, o.term_2),
59
+ o.term_final && y(i, o.term_final.number_of_days)
60
+ ].filter((e) => !!e);
61
+ return {
62
+ dueDate: c ? v([s(c)]) : _,
63
+ paymentTerms: u.length > 0 ? v(u) : _
64
+ };
65
+ }
66
+ function S(e, t) {
67
+ return t ? e.previewTaxId.replace("{taxId}", t) : void 0;
68
+ }
69
+ function C(e) {
70
+ return e.length > 0 ? e : void 0;
71
+ }
72
+ function w(e, t) {
73
+ return e ? {
74
+ name: e.type === "organization" ? e.organization.legal_name : void 0,
75
+ addressLines: C(g({
76
+ address: e.address,
77
+ issuerCountry: e.address?.country
78
+ })),
79
+ taxIdLine: S(t, e.tax_id),
80
+ email: e.email ?? void 0,
81
+ phone: e.phone ?? void 0
82
+ } : {};
83
+ }
84
+ function T(e) {
85
+ let t = "organization" in e ? e.organization : e.individual;
86
+ return {
87
+ name: "organization" in e ? e.organization.legal_name : [e.individual.first_name, e.individual.last_name].filter(Boolean).join(" "),
88
+ email: t.email,
89
+ phone: t.phone
90
+ };
91
+ }
92
+ function E({ counterpart: e, billingAddress: t, issuerCountry: n, messages: r }) {
93
+ if (!e) return { kind: "pending" };
94
+ let { name: i, email: a, phone: o } = T(e);
95
+ return i ? {
96
+ kind: "party",
97
+ name: i,
98
+ addressLines: C(g({
99
+ address: t,
100
+ issuerCountry: n
101
+ })),
102
+ taxIdLine: S(r, e.tax_id),
103
+ email: a || void 0,
104
+ phone: o || void 0
105
+ } : { kind: "pending" };
106
+ }
107
+ function D({ lineItems: e, currency: n, unitNamesById: r, messages: o }) {
108
+ return e.filter((e) => !t(e)).map((e) => {
109
+ let t = a(e.price, n), s = i(e.quantity), c = r[e.measureUnitId] || e.measureUnitName;
110
+ return {
111
+ id: e.id,
112
+ name: e.name,
113
+ quantity: String(s),
114
+ price: u({
115
+ amount: t,
116
+ currency: n,
117
+ fallback: ""
325
118
  }),
326
- ...r ? xe({
327
- fields: n,
328
- issuedCount: G,
329
- messages: f
330
- }) : {}
119
+ ...c ? { unit: c } : {},
120
+ taxable: e.taxable ? o.previewTaxableYes : o.previewTaxableNo,
121
+ amount: u({
122
+ amount: Math.round(t * s),
123
+ currency: n,
124
+ fallback: ""
125
+ })
331
126
  };
332
- if (je(i)) {
333
- T(i), M(!0), I.current = {
334
- lines: !0,
335
- discount: !0
336
- };
337
- return;
338
- }
339
- T({});
340
- let a = b === "edit" ? it : h.current;
341
- try {
342
- let e, t;
343
- if (a) {
344
- let i = await m.mutateAsync({
345
- path: { receivable_id: a },
346
- body: Pe({
347
- values: n,
348
- billingAddressId: R ?? "",
349
- lineItemChanges: Ne({
350
- values: n,
351
- originalLineItems: g.current,
352
- originalCurrency: _.current,
353
- unitNamesById: k,
354
- units: O
355
- })
356
- })
357
- });
358
- gt(), e = a, t = i?.type ?? n.type, r && i && (g.current = i.line_items, _.current = i.currency, n = {
359
- ...n,
360
- lineItems: oe(n.lineItems, i.line_items)
361
- }, w(n));
362
- } else {
363
- let i = await p.mutateAsync({ body: Me({
364
- values: n,
365
- billingAddressId: R ?? "",
366
- unitNamesById: k
367
- }) });
368
- if (!i?.id) {
369
- y(!1), Pt();
370
- return;
371
- }
372
- e = i.id, t = i.type, r && (h.current = i.id, g.current = i.line_items, _.current = i.currency, n = {
373
- ...n,
374
- lineItems: oe(n.lineItems, i.line_items)
375
- }, w(n));
376
- }
377
- r && (W ? await nt.mutateAsync({
378
- path: { recurrence_id: W.id },
379
- body: _e(n, { lockSchedule: Tt })
380
- }) : await tt.mutateAsync({ body: ge(n, e) }));
381
- let i = b === "create";
382
- y(!1), Pt(), i && et?.(e, t);
383
- } catch (e) {
384
- T({ form: t(e) ?? f.genericError });
385
- }
386
- }, [
387
- R,
388
- gt,
389
- p,
390
- tt,
391
- it,
392
- W,
393
- X,
394
- G,
395
- Tt,
396
- f,
397
- b,
398
- et,
399
- K,
400
- Pt,
401
- O,
402
- k,
403
- D.isLoading,
404
- m,
405
- nt,
406
- C
407
- ]), Yt = l(() => ({
408
- ...C,
409
- discount: ut ? C.discount : Ce(we(C.discount, C.discountType, C.currency), C.discountType, C.currency),
410
- lineItems: C.lineItems.map(pe)
411
- }), [ut, C]), Xt = l(() => a(C.lineItems), [C.lineItems]), $ = l(() => De(C), [C]), Zt = l(() => Ee($, C.currency), [$, C.currency]), Qt = Je({
412
- values: C,
413
- totals: $,
414
- billingAddress: mt,
415
- unitNamesById: k,
416
- messages: f,
417
- enabled: v
418
127
  });
128
+ }
129
+ function O(t, n) {
130
+ return n ? new Intl.NumberFormat(void 0, {
131
+ style: "currency",
132
+ currency: n,
133
+ currencySign: "accounting"
134
+ }).format(-t / 10 ** e(n)) : "";
135
+ }
136
+ function k(e, i) {
137
+ if (!e.taxRate) return i.previewTax;
138
+ let a = o(e.taxRate), s = n(e.taxRate, e.savedTaxRate);
139
+ return new Set(e.lineItems.filter((e) => e.taxable && !t(e)).map((e) => r(e, a, s))).size > 1 ? i.previewTax : i.previewTaxWithRate.replace("{rate}", String(a / m));
140
+ }
141
+ function A({ totals: e, currency: t, taxLabel: n, messages: r }) {
142
+ let i = (e) => u({
143
+ amount: e,
144
+ currency: t,
145
+ fallback: ""
146
+ }), a = e.discountAmount > 0, o = e.taxableItemsSubtotal > 0, s = e.nonTaxableItemsSubtotal > 0, c = [{
147
+ id: "subtotal",
148
+ label: r.previewSubtotal,
149
+ value: i(e.subtotal)
150
+ }];
151
+ return a && c.push({
152
+ id: "discount",
153
+ label: r.previewDiscount,
154
+ value: O(e.discountAmount, t)
155
+ }), s && (o || a) && c.push({
156
+ id: "nonTaxableSubtotal",
157
+ label: r.previewNonTaxableSubtotal,
158
+ value: i(e.nonTaxableSubtotal),
159
+ muted: !0
160
+ }), o && (s || a) && c.push({
161
+ id: "taxableSubtotal",
162
+ label: r.previewTaxableSubtotal,
163
+ value: i(e.taxableSubtotal),
164
+ muted: !0
165
+ }), c.push({
166
+ id: "tax",
167
+ label: n,
168
+ value: i(e.totalTaxes)
169
+ }), {
170
+ rows: c,
171
+ total: {
172
+ label: r.previewTotal,
173
+ value: i(e.total)
174
+ }
175
+ };
176
+ }
177
+ function j({ bankDetails: e, canReceivePayments: t, messages: n }) {
178
+ let r = e ? [
179
+ [n.previewAccountHolderName, e.accountHolderName],
180
+ [n.previewRoutingNumber, e.routingNumber],
181
+ [n.previewAccountNumber, e.accountNumber]
182
+ ].filter((e) => !!e[1]).map(([e, t]) => e.replace("{value}", t)) : [];
183
+ if (t || r.length !== 0) return {
184
+ showPayOnline: t,
185
+ bankLines: r
186
+ };
187
+ }
188
+ function M({ values: e, totals: t, entity: n, counterpart: r, billingAddress: i, paymentTerms: a, unitNamesById: o, bankDetails: l, canReceivePayments: u = !1, messages: d, today: f = /* @__PURE__ */ new Date() }) {
189
+ let p = D({
190
+ lineItems: e.lineItems,
191
+ currency: e.currency,
192
+ unitNamesById: o,
193
+ messages: d
194
+ }), m = n?.logo?.url, h = w(n, d), g = c(e.issueDate, f);
419
195
  return {
420
- open: v,
421
- setOpen: y,
422
- mode: b,
423
- values: C,
424
- sheetValues: Yt,
425
- errors: ot,
426
- setValues: w,
427
- updateValues: Rt,
428
- commitTaxRate: Vt,
429
- focusDiscount: zt,
430
- commitDiscount: Bt,
431
- updateLineItem: Ht,
432
- selectProduct: Ut,
433
- commitLineItem: Wt,
434
- stepLineItem: Gt,
435
- addLineItem: Kt,
436
- removeLineItem: qt,
437
- attachmentsView: _t,
438
- attachmentsUploading: z.isUploading,
439
- saveDisabled: D.isLoading || z.isUploading || K,
440
- selectAttachmentFiles: z.selectFiles,
441
- setAttachmentIncludeInEmail: z.setIncludeInEmail,
442
- removeAttachment: z.remove,
443
- autoFocusLineItemId: lt,
444
- lineItemUnitOptions: E.unitOptions,
445
- lineItemsLoading: D.isLoading,
446
- lineItemControls: Xt,
447
- totals: $,
448
- preview: Qt,
449
- totalsView: Zt,
450
- currencySymbol: ie(C.currency),
451
- isSubmitting: Mt,
452
- currencyOptions: Ye(C.currency),
453
- paymentTerms: xt,
454
- showBillingSection: C.type === "invoice" || b === "edit",
455
- recurrence: At,
456
- showRecurrenceSection: C.type === "invoice",
457
- recurrenceLoading: K,
458
- submitLabel: C.type === "invoice" && o(C) ? W ? f.recurrenceUpdateButton : f.recurrenceActivateButton : void 0,
459
- showDueDateField: C.type === "quote",
460
- openCreate: Ft,
461
- openEdit: It,
462
- close: Lt,
463
- submit: Jt,
464
- units: E,
465
- counterpartView: st,
466
- counterpartForm: yt,
467
- stateOptions: dt,
468
- openCounterpartCreate: yt.openCreate,
469
- bankAccount: Ct,
470
- reminders: Nt
196
+ issuer: h,
197
+ logo: m ? {
198
+ kind: "image",
199
+ src: m,
200
+ alt: h.name ? d.previewLogoAlt.replace("{name}", h.name) : d.previewLogoAltNoName
201
+ } : { kind: "placeholder" },
202
+ billTo: E({
203
+ counterpart: r,
204
+ billingAddress: i,
205
+ issuerCountry: n?.address?.country,
206
+ messages: d
207
+ }),
208
+ invoiceNumber: _,
209
+ issueDate: s(g),
210
+ ...x({
211
+ paymentTermsId: e.paymentTermsId,
212
+ paymentTermsCustomDate: e.paymentTermsCustomDate,
213
+ paymentTerms: a,
214
+ issueDate: g,
215
+ messages: d
216
+ }),
217
+ openingNote: e.openingNote || void 0,
218
+ lineItems: p.length > 0 ? {
219
+ kind: "rows",
220
+ rows: p
221
+ } : { kind: "empty" },
222
+ totals: p.length > 0 ? A({
223
+ totals: t,
224
+ currency: e.currency,
225
+ taxLabel: k(e, d),
226
+ messages: d
227
+ }) : void 0,
228
+ closingNote: e.closingNote || void 0,
229
+ payment: j({
230
+ bankDetails: l,
231
+ canReceivePayments: u,
232
+ messages: d
233
+ })
471
234
  };
472
235
  }
473
236
  //#endregion
474
- export { f as useReceivableForm };
237
+ export { g as buildPreviewAddressLines, x as buildPreviewPaymentTerms, M as buildReceivablePreviewView, h as formatCountryName };