@tesouro/embedded-components-react 0.5.219 → 0.5.222

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/index.css +87 -0
  2. package/dist/index.d.ts +26 -0
  3. package/dist/index.js +1 -1
  4. package/dist/lib/ReceivablesWidget.d.ts +26 -0
  5. package/dist/lib/ReceivablesWidget.js +1 -1
  6. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/data-access/dist/index.js +2 -2
  7. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/data-access/dist/index12.js +22 -1
  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/index13.js +18 -1
  10. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/feature/dist/index23.js +219 -453
  11. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/feature/dist/index24.js +29 -67
  12. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/feature/dist/index25.js +458 -99
  13. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/feature/dist/index26.js +40 -310
  14. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/feature/dist/index27.js +43 -0
  15. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/feature/dist/index28.js +82 -0
  16. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/feature/dist/index29.js +121 -0
  17. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/feature/dist/index30.js +317 -0
  18. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/feature/dist/index9.js +30 -27
  19. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/ui/dist/index.js +17 -15
  20. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/ui/dist/index13.js +6 -6
  21. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/ui/dist/index28.js +2 -28
  22. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/ui/dist/index29.js +4 -236
  23. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/ui/dist/index30.js +0 -2
  24. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/ui/dist/index31.js +90 -239
  25. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/ui/dist/index32.js +24 -89
  26. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/ui/dist/index33.js +223 -331
  27. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/ui/dist/index34.js +3 -0
  28. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/ui/dist/index35.js +249 -0
  29. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/ui/dist/index36.js +93 -0
  30. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/ui/dist/index37.js +59 -0
  31. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/ui/dist/index38.js +353 -0
  32. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/ui/dist/index4.js +8 -7
  33. package/dist/libs/tesouro-embedded-components-react/shared/data-access/dist/lib/useMyEntityQuery.js +8 -8
  34. package/dist/libs/tesouro-embedded-components-react/shared/feature/dist/lib/analytics/build-info.js +1 -1
  35. package/package.json +1 -1
  36. package/dist/libs/tesouro-embedded-components-react/invoicing-widget/ui/dist/index27.js +0 -100
@@ -2,74 +2,36 @@
2
2
  "use client";
3
3
  "use client";
4
4
  "use client";
5
- import { buildReceivableRows as e, statusFilterOptions as t, typeForTab as n } from "./index12.js";
6
- import { useReceivablesQuery as r } from "../../data-access/dist/index10.js";
5
+ import { useMyEntityQuery as e } from "../../../shared/data-access/dist/lib/useMyEntityQuery.js";
6
+ import { usePaymentTermsQuery as t } from "../../../shared/data-access/dist/lib/reference-data/usePaymentTermsQuery.js";
7
+ import "../../../shared/data-access/dist/index.js";
8
+ import { useCounterpartQuery as n } from "../../../shared/counterpart-management/data-access/dist/index3.js";
9
+ import "../../../shared/counterpart-management/feature/dist/index.js";
7
10
  import "../../data-access/dist/index.js";
8
- import { useCallback as i, useEffect as a, useMemo as o, useState as s } from "react";
11
+ import { buildReceivablePreviewView as r } from "./index23.js";
12
+ import { useMemo as i } from "react";
9
13
  //#region ../../libs/tesouro-embedded-components-react/invoicing-widget/feature/dist/index24.js
10
- var c = [];
11
- function l({ activeTab: l, messages: d }) {
12
- let [f, p] = s([]), [m, h] = s(10), [g, _] = s(), [v, y] = s(""), [b, x] = s(""), [S, C] = s("all");
13
- a(() => {
14
- _(void 0), C("all");
15
- }, [l]), a(() => {
16
- let e = setTimeout(() => {
17
- x(v), _(void 0);
18
- }, 300);
19
- return () => clearTimeout(e);
20
- }, [v]);
21
- let w = f[0]?.id, T = w ? u[w] : void 0, E = f[0] ? f[0].desc ? "desc" : "asc" : void 0, D = r({
22
- type: n(l),
23
- limit: m,
24
- pagination_token: g,
25
- search_text: b || void 0,
26
- status: S === "all" ? void 0 : S,
27
- ...T ? {
28
- sort: T,
29
- order: E
30
- } : {}
31
- }), O = D.data?.data ?? c, k = o(() => new Map(O.map((e) => [e.id, e])), [O]), A = i((e) => k.get(e), [k]), j = o(() => e({
32
- receivables: O,
33
- messages: d
34
- }), [d, O]), M = !!b || S !== "all", N = i((e) => {
35
- let t = typeof e == "function" ? e(f) : e;
36
- p(t), _(void 0);
37
- }, [f]), P = i((e) => {
38
- h(e), _(void 0);
39
- }, []), F = i((e) => {
40
- C(e), _(void 0);
41
- }, []), I = i(() => _(D.data?.next_pagination_token ?? void 0), [D.data?.next_pagination_token]), L = i(() => _(D.data?.prev_pagination_token ?? void 0), [D.data?.prev_pagination_token]), R = i(() => {
42
- D.refetch();
43
- }, [D]);
44
- return {
45
- rows: j,
46
- isLoading: D.isLoading,
47
- isError: D.isError,
48
- sorting: f,
49
- onSortingChange: N,
50
- pageSize: m,
51
- onPageSizeChange: P,
52
- hasNextPage: !!D.data?.next_pagination_token,
53
- hasPrevPage: !!D.data?.prev_pagination_token,
54
- onNextPage: I,
55
- onPrevPage: L,
56
- searchValue: v,
57
- onSearchChange: y,
58
- statusFilter: S,
59
- statusOptions: t(),
60
- onStatusFilterChange: F,
61
- isFiltering: M,
62
- onRetry: R,
63
- getReceivableById: A
64
- };
14
+ function a({ values: a, totals: o, billingAddress: s, unitNamesById: c, messages: l, enabled: u = !0 }) {
15
+ let d = e({ enabled: u }), f = n(u && a.customerId || void 0), p = t({ enabled: u }), m = d.data, h = f.data, g = p.data?.data;
16
+ return i(() => r({
17
+ values: a,
18
+ totals: o,
19
+ entity: m,
20
+ counterpart: h,
21
+ billingAddress: s,
22
+ paymentTerms: g,
23
+ unitNamesById: c,
24
+ messages: l
25
+ }), [
26
+ s,
27
+ h,
28
+ m,
29
+ l,
30
+ g,
31
+ o,
32
+ c,
33
+ a
34
+ ]);
65
35
  }
66
- var u = {
67
- documentLabel: "document_id",
68
- customerLabel: "counterpart_name",
69
- status: "status",
70
- issueDateLabel: "issue_date",
71
- dueDateLabel: "due_date",
72
- totalLabel: "total_amount"
73
- };
74
36
  //#endregion
75
- export { l as useReceivablesTable };
37
+ export { a as useReceivablePreview };
@@ -2,114 +2,473 @@
2
2
  "use client";
3
3
  "use client";
4
4
  "use client";
5
- import { useAnalyticsTrack as e } from "../../../shared/feature/dist/lib/analytics/hooks.js";
6
- import "../../../shared/feature/dist/index.js";
7
- import { ReceivablesWidgetAnalyticsEvent as t } from "./index2.js";
8
- import { coerceEnabledTabs as n, resolveInitialTab as r, tabForType as i, typeForTab as a } from "./index12.js";
9
- import { RECEIVABLE_MESSAGE_LABELS_EN as o } from "./index13.js";
10
- import { useReceivableActions as s } from "./index15.js";
11
- import { useReceivableDetails as c } from "./index16.js";
12
- import { hasSelectedText as l } from "../../../shared/product-catalog/feature/dist/lib/helpers.js";
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";
11
+ import "../../ui/dist/index10.js";
12
+ 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";
13
32
  import "../../../shared/product-catalog/feature/dist/index.js";
14
- import { useReceivableForm as u } from "./index23.js";
15
- import { useReceivablesTable as d } from "./index24.js";
16
- import { useCallback as f, useEffect as p, useMemo as m, useState as h } from "react";
33
+ import { useCallback as s, useEffect as c, useMemo as l, useRef as u, useState as d } from "react";
17
34
  //#region ../../libs/tesouro-embedded-components-react/invoicing-widget/feature/dist/index25.js
18
- function g({ counterpartMessageLabels: g, defaultTab: _, embeddedBankName: v, enabledTabs: y, messageLabels: b, onReceivableCreated: x, onReceivableOpened: S }) {
19
- let C = e();
20
- p(() => {
21
- C(t.Mounted);
22
- }, [C]);
23
- let w = m(() => ({
24
- ...o,
25
- ...b
26
- }), [b]), T = m(() => n(y), [y]), [E, D] = h(() => r({
27
- defaultTab: _,
28
- enabledTabs: T
29
- })), [O, k] = h(), [A, j] = h(!1);
30
- p(() => {
31
- T.includes(E) || D(r({
32
- defaultTab: _,
33
- enabledTabs: T
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)
34
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
+ });
79
+ return {
80
+ ...t,
81
+ ...n,
82
+ ...n.paymentTermsId === "receipt_due" ? { paymentReminderId: "" } : {}
83
+ };
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
+ });
35
132
  }, [
36
- E,
37
- _,
38
- T
133
+ G,
134
+ f,
135
+ C
39
136
  ]);
40
- let M = f((e, t) => {
41
- D(i(t)), k(e), j(!0), x?.(e, t);
42
- }, [x]), N = d({
43
- activeTab: E,
44
- messages: w
45
- }), P = c({
46
- selectedReceivableId: O,
47
- enabled: A,
48
- messages: w
49
- }), F = u({
50
- messages: w,
51
- counterpartMessageLabels: g,
52
- embeddedBankName: v,
53
- onCreated: M
54
- }), I = f(() => {
55
- let e = a(E);
56
- F.openCreate(e === "quote" ? "quote" : "invoice");
57
- }, [E, F.openCreate]), L = s({
58
- selectedReceivable: P.receivable,
59
- messages: w,
60
- onCreated: M,
61
- onDeleted: (e) => {
62
- e === O && (k(void 0), j(!1));
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;
63
314
  }
64
- }), R = f((e) => {
65
- l() || (k(e.id), j(!0), S?.(e.id, e.type));
66
- }, [S]);
67
- return {
68
- activeTab: E,
69
- enabledTabs: T,
70
- setActiveTab: D,
71
- table: N,
72
- details: P,
73
- detailsOpen: A,
74
- closeDetails: f(() => {
75
- j(!1), k(void 0);
76
- }, []),
77
- form: F,
78
- openCreate: I,
79
- actions: L,
80
- handleRowClick: R,
81
- handleActionClick: f((e, t) => {
82
- let n = N.getReceivableById(t.id);
83
- if (e === "edit") {
84
- if (n) {
85
- F.openEdit(n);
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
325
+ }),
326
+ ...r ? xe({
327
+ fields: n,
328
+ issuedCount: G,
329
+ messages: f
330
+ }) : {}
331
+ };
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();
86
370
  return;
87
371
  }
88
- k(t.id), j(!0);
89
- return;
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));
90
376
  }
91
- k(t.id), L.openAction(e, t, n ?? null);
92
- }, [
93
- L,
94
- F.openEdit,
95
- N.getReceivableById
96
- ]),
97
- handleDetailsActionClick: f((e, t) => {
98
- if (e === "edit") {
99
- P.receivable && (F.openEdit(P.receivable), j(!1));
100
- return;
101
- }
102
- L.openAction(e, {
103
- id: t.id,
104
- title: t.title,
105
- type: t.type
106
- }, P.receivable ?? null);
107
- }, [
108
- L,
109
- P.receivable,
110
- F.openEdit
111
- ])
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
+ });
419
+ 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
112
471
  };
113
472
  }
114
473
  //#endregion
115
- export { g as useReceivablesWidget };
474
+ export { f as useReceivableForm };