@tesouro/embedded-components-react 0.5.186 → 0.5.188

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 (104) hide show
  1. package/README.md +19 -9
  2. package/dist/index.css +110 -0
  3. package/dist/index.d.ts +233 -60
  4. package/dist/index.js +6 -6
  5. package/dist/lib/ExpenseManagementWidget.d.ts +189 -11
  6. package/dist/lib/ExpenseManagementWidget.js +1 -1
  7. package/dist/lib/UploadReceiptWidget.js +1 -1
  8. package/dist/lib/WidgetSuite.d.ts +213 -16
  9. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/data-access/dist/index.js +17 -3
  10. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/data-access/dist/index10.js +36 -0
  11. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/data-access/dist/index11.js +71 -0
  12. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/data-access/dist/index12.js +39 -0
  13. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/data-access/dist/index13.js +32 -0
  14. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/data-access/dist/index14.js +110 -0
  15. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/data-access/dist/index15.js +33 -0
  16. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/data-access/dist/index16.js +19 -0
  17. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/data-access/dist/index17.js +33 -0
  18. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/data-access/dist/index18.js +28 -0
  19. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/data-access/dist/index19.js +35 -0
  20. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/data-access/dist/index20.js +28 -0
  21. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/data-access/dist/index21.js +164 -0
  22. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/data-access/dist/index4.js +25 -18
  23. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/data-access/dist/index5.js +20 -34
  24. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/data-access/dist/index6.js +16 -20
  25. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/data-access/dist/index7.js +16 -0
  26. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/data-access/dist/index8.js +32 -0
  27. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/data-access/dist/index9.js +26 -0
  28. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index.js +10 -7
  29. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index10.js +162 -59
  30. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index11.js +64 -16
  31. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index12.js +73 -2
  32. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index13.js +348 -42
  33. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index14.js +42 -1
  34. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index15.js +143 -0
  35. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index16.js +229 -0
  36. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index17.js +196 -0
  37. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index18.js +13 -0
  38. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index19.js +91 -0
  39. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index2.js +89 -2
  40. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index20.js +39 -0
  41. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index21.js +297 -0
  42. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index22.js +1 -0
  43. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index23.js +4 -0
  44. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index24.js +256 -0
  45. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index25.js +22 -0
  46. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index26.js +10 -0
  47. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index27.js +223 -0
  48. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index3.js +2 -254
  49. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index4.js +4 -20
  50. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index5.js +262 -8
  51. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index6.js +2 -221
  52. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index7.js +54 -80
  53. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index8.js +24 -254
  54. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index9.js +18 -2
  55. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/index.js +34 -13
  56. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/AccordionItemCard/AccordionItemCard.js +549 -0
  57. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/AccordionItemCard/labels.js +38 -0
  58. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/ActionItemsList/ActionItemsList.js +64 -0
  59. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/ActionItemsList/labels.js +7 -0
  60. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/ExpenseStatusBadge/ExpenseStatusBadge.js +18 -0
  61. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/ExpenseStatusBadge/badgeTones.js +16 -0
  62. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/ExpenseStatusBadge/labels.js +13 -0
  63. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/ExpensesHeader/ExpensesHeader.js +37 -0
  64. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/ExpensesHeader/labels.js +7 -0
  65. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/ExpensesScreen/ExpensesScreen.js +112 -0
  66. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/ExpensesScreen/labels.js +11 -0
  67. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/ExpensesTransactionsFilterBar/ExpensesTransactionsFilterBar.js +158 -0
  68. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/ExpensesTransactionsFilterBar/labels.js +18 -0
  69. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/ExpensesTransactionsTable/ExpensesTransactionsTable.js +148 -0
  70. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/ExpensesTransactionsTable/labels.js +18 -0
  71. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/FileViewer/FileViewer.js +107 -0
  72. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/FileViewer/PdfFileViewer.js +37 -0
  73. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/FileViewer/labels.js +11 -0
  74. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/ReceiptMatchWidget/lib/ReceiptMatchLauncher.js +2 -24
  75. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/ReceiptMatchWidget/lib/ReceiptMatchSidebar.js +1 -1
  76. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/ReceiptMatchWidget/lib/TransactionsMatchStep.js +62 -65
  77. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/ReceiptMatchWidget/lib/labels.js +1 -4
  78. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/TransactionDetails/DeleteReceiptDialog/DeleteReceiptDialog.js +31 -0
  79. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/TransactionDetails/DeleteReceiptDialog/labels.js +9 -0
  80. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/TransactionDetails/TransactionDetails.js +268 -0
  81. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/TransactionDetails/labels.js +21 -0
  82. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/TransactionDetailsActions/BulkProgress.js +26 -0
  83. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/TransactionDetailsActions/TransactionDetailsActions.js +142 -0
  84. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/TransactionDetailsActions/labels.js +20 -0
  85. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/isPdf.js +7 -0
  86. package/dist/libs/tesouro-embedded-components-react/settings-widget/feature/dist/index5.js +2 -2
  87. package/dist/libs/tesouro-embedded-components-react/settings-widget/team/data-access/dist/index7.js +116 -94
  88. package/dist/libs/tesouro-embedded-components-react/settings-widget/team/feature/dist/index12.js +76 -68
  89. package/dist/libs/tesouro-embedded-components-react/settings-widget/team/feature/dist/index17.js +181 -179
  90. package/dist/libs/tesouro-embedded-components-react/settings-widget/team/feature/dist/index3.js +2 -0
  91. package/dist/libs/tesouro-embedded-components-react/settings-widget/team/feature/dist/index7.js +16 -12
  92. package/dist/libs/tesouro-embedded-components-react/settings-widget/team/ui/dist/index8.js +66 -66
  93. package/dist/libs/tesouro-embedded-components-react/shared/data-access/dist/index.js +36 -35
  94. package/dist/libs/tesouro-embedded-components-react/shared/data-access/dist/lib/debit-card/useAllDebitCardsQuery.js +54 -0
  95. package/dist/libs/tesouro-embedded-components-react/shared/data-access/dist/lib/rest/@tanstack/react-query.gen.js +268 -206
  96. package/dist/libs/tesouro-embedded-components-react/shared/data-access/dist/lib/rest/sdk.gen.js +218 -113
  97. package/dist/libs/tesouro-embedded-components-react/shared/feature/dist/lib/analytics/build-info.js +1 -1
  98. package/dist/libs/tesouro-embedded-components-react/shared/util/dist/lib/formatCalendarDate.js +4 -4
  99. package/dist/libs/tesouro-embedded-components-react/widget-suite/feature/dist/index11.js +16 -14
  100. package/dist/libs/tesouro-embedded-components-react/widget-suite/feature/dist/index4.js +1 -2
  101. package/package.json +1 -1
  102. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/ExpenseManagementWidgetUi/ExpenseManagementWidgetUi.js +0 -71
  103. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/ExpenseManagementWidgetUi/index.js +0 -2
  104. package/dist/libs/tesouro-embedded-components-react/expense-management-widget/ui/dist/lib/ExpenseManagementWidgetUi/labels.js +0 -10
@@ -1,10 +1,264 @@
1
+ "use client";
2
+ "use client";
3
+ "use client";
4
+ "use client";
5
+ import { toast as e } from "../../../../../packages/shared-ui-shadcn/dist/index.js";
6
+ import "../../../shared/ui/dist/index.js";
7
+ import { useWidgetConfig as t, useWidgetLoading as n } from "../../../shared/feature/dist/lib/WidgetProvider/hooks.js";
8
+ import "../../../shared/feature/dist/index.js";
9
+ import { ReceiptMatchLabels as r } from "../../ui/dist/lib/ReceiptMatchWidget/lib/labels.js";
10
+ import "../../ui/dist/index.js";
11
+ import { useGetReceiptsQuery as i } from "../../data-access/dist/index2.js";
12
+ import { useGetTransactionsQuery as a } from "../../data-access/dist/index3.js";
13
+ import { usePatchReceiptMutation as o } from "../../data-access/dist/index11.js";
14
+ import { useDeleteReceiptMutation as ee } from "../../data-access/dist/index12.js";
15
+ import "../../data-access/dist/index.js";
16
+ import { useCallback as s, useEffect as te, useMemo as c, useState as l } from "react";
1
17
  //#region ../../libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index5.js
2
- var e = {
3
- ruleCard: "expense-approval-rule-card",
4
- ruleForm: "expense-approval-rule-form",
5
- ruleFormSaveButton: "expense-approval-rule-save-button",
6
- ruleFormMinAmountInput: "expense-approval-rule-min-amount-input",
7
- ruleFormMaxAmountInput: "expense-approval-rule-max-amount-input"
8
- };
18
+ function u(e, t) {
19
+ if (typeof e == "object" && e) {
20
+ let t = e.error;
21
+ if (typeof t == "object" && t) {
22
+ let e = t.message;
23
+ if (typeof e == "string") return e;
24
+ }
25
+ }
26
+ return e instanceof Error && e.message ? e.message : t;
27
+ }
28
+ function d(e, t) {
29
+ let n = e / 100;
30
+ try {
31
+ return new Intl.NumberFormat("en-US", {
32
+ style: "currency",
33
+ currency: t
34
+ }).format(n);
35
+ } catch {
36
+ return `${t} ${n.toFixed(2)}`;
37
+ }
38
+ }
39
+ function f(e) {
40
+ if (!e) return "";
41
+ let t = new Date(e);
42
+ return Number.isNaN(t.getTime()) ? "" : t.toLocaleDateString("en-US", {
43
+ month: "short",
44
+ day: "numeric",
45
+ year: "numeric"
46
+ });
47
+ }
48
+ function ne(e) {
49
+ if (!e) return "";
50
+ let t = new Date(e);
51
+ return Number.isNaN(t.getTime()) ? "" : t.toLocaleDateString("en-US", {
52
+ month: "long",
53
+ day: "numeric",
54
+ year: "numeric"
55
+ });
56
+ }
57
+ function p(e) {
58
+ if (!e) return "";
59
+ let t = new Date(e);
60
+ return Number.isNaN(t.getTime()) ? "" : t.toLocaleTimeString("en-US", {
61
+ hour: "numeric",
62
+ minute: "2-digit",
63
+ second: "2-digit",
64
+ hour12: !0
65
+ });
66
+ }
67
+ function re(e) {
68
+ let t = e.ocr_status === "processing";
69
+ return {
70
+ id: e.id,
71
+ primaryText: t ? r.ReceiptScanningTitle : e.merchant_name?.trim() || r.ReceiptScanningTitle,
72
+ secondaryText: t ? r.ReceiptScanningSubtitle : f(e.issued_at),
73
+ thumbnailUrl: e.file_url ?? void 0
74
+ };
75
+ }
76
+ function ie(e) {
77
+ return {
78
+ id: e.id,
79
+ merchantName: e.merchant_name,
80
+ date: f(e.started_at),
81
+ formattedAmount: d(e.amount, e.currency)
82
+ };
83
+ }
84
+ var m = .5, h = 3, g = .25, _ = 5e3, v = !1;
85
+ function y({ preSelectedIds: f, onClose: y, targetTransactionId: b, onSingleTransactionUpdate: x, enabled: ae = !0 }) {
86
+ let { initResponse: S } = t(), C = n(), w = S?.userId ?? void 0, oe = ae && !!w && !C, [T, E] = l(1), [D, O] = l(0), [k, A] = l([]), [j, M] = l(() => f), [N, P] = l(""), [F, I] = l([]), L = c(() => F.map((e) => e.id), [F]), [R, z] = l(1), B = i({
87
+ has_transaction: !1,
88
+ created_by_entity_user_id: w,
89
+ enabled: oe
90
+ }), V = a({
91
+ merchant_name__icontains: N || void 0,
92
+ has_receipt: !1,
93
+ enabled: T === 2
94
+ }), H = o(), U = ee(), W = B.data?.data ?? [], G = c(() => w ? W.filter((e) => e.created_by_entity_user_id == null || e.created_by_entity_user_id === w) : [], [W, w]);
95
+ te(() => {
96
+ if (!G.some((e) => e.ocr_status === "processing")) return;
97
+ let e = window.setInterval(() => {
98
+ B.isFetching || B.refetch();
99
+ }, _);
100
+ return () => window.clearInterval(e);
101
+ }, [
102
+ B.isFetching,
103
+ B.refetch,
104
+ G
105
+ ]);
106
+ let K = c(() => G.map(re), [G]), q = c(() => new Set(k.flatMap((e) => e.transactionIds)), [k]), se = c(() => (V.data?.data ?? []).filter((e) => !q.has(e.id)).map(ie), [V.data, q]), J = V.data?.data ?? [], Y = j[D], X = c(() => G.find((e) => e.id === Y), [G, Y]), ce = X?.file_url ?? void 0, le = X?.file_name ?? void 0, ue = c(() => {
107
+ if (b) return "Attach";
108
+ if (!(j.length <= 1)) return `Review (${D + 1}/${j.length})`;
109
+ }, [
110
+ b,
111
+ j.length,
112
+ D
113
+ ]), de = c(() => k.filter((e) => e.receiptId === Y).flatMap((e) => e.transactionDetails), [k, Y]), fe = D >= j.length - 1 ? r.Done : r.ReviewNextReceipt(D + 2, j.length), Z = s(() => {
114
+ P(""), I([]), z(1);
115
+ }, []), pe = s((e) => {
116
+ if (b) {
117
+ M((t) => t.includes(e) ? [] : [e]);
118
+ return;
119
+ }
120
+ M((t) => t.includes(e) ? t.filter((t) => t !== e) : [...t, e]);
121
+ }, [b]), me = s(() => {
122
+ M(K.map((e) => e.id));
123
+ }, [K]), he = s(() => {
124
+ M([]);
125
+ }, []), ge = s((e) => {
126
+ let t = G.find((t) => t.id === e);
127
+ t?.file_url && window.open(t.file_url, "_blank", "noopener,noreferrer");
128
+ }, [G]), Q = s(async (t) => {
129
+ try {
130
+ await U.mutateAsync({ path: { receipt_id: t } });
131
+ } catch (t) {
132
+ e.error(u(t, "Failed to delete receipt"));
133
+ return;
134
+ }
135
+ M((e) => e.filter((e) => e !== t));
136
+ }, [U]), _e = s(async () => {
137
+ if (j.length !== 0) {
138
+ if (b) {
139
+ try {
140
+ await H.mutateAsync({
141
+ path: { receipt_id: j[0] },
142
+ body: { transaction_id: b }
143
+ }), x?.(), y();
144
+ } catch (t) {
145
+ e.error(u(t, "Failed to attach receipt"));
146
+ }
147
+ return;
148
+ }
149
+ O(0), A([]), Z(), E(2);
150
+ }
151
+ }, [
152
+ j,
153
+ b,
154
+ H,
155
+ x,
156
+ y,
157
+ Z
158
+ ]), ve = s(() => {
159
+ B.refetch();
160
+ }, [B.refetch]), ye = s((e) => {
161
+ P(e);
162
+ }, []), be = s((e) => {
163
+ I((t) => {
164
+ let n = t.find((t) => t.id === e), r = J.find((t) => t.id === e);
165
+ return n ? [] : r ? [r] : [];
166
+ });
167
+ }, [J]), xe = s(async () => {
168
+ if (F.length === 0 || !Y) return;
169
+ let t = F, n = (e) => ({
170
+ merchant: e.merchant_name,
171
+ location: e.merchant_location,
172
+ date: ne(e.started_at),
173
+ time: p(e.started_at),
174
+ formattedAmount: d(e.amount, e.currency)
175
+ }), r = [], i = [];
176
+ for (let a of t) try {
177
+ await H.mutateAsync({
178
+ path: { receipt_id: Y },
179
+ body: { transaction_id: a.id }
180
+ }), r.push(a.id), i.push(n(a));
181
+ } catch (t) {
182
+ r.length > 0 && A((e) => [...e, {
183
+ receiptId: Y,
184
+ transactionIds: r,
185
+ transactionDetails: i
186
+ }]), I((e) => e.filter((e) => !r.includes(e.id))), e.error(u(t, "Failed to match receipt"));
187
+ return;
188
+ }
189
+ A((e) => [...e, {
190
+ receiptId: Y,
191
+ transactionIds: r,
192
+ transactionDetails: i
193
+ }]), E(3);
194
+ }, [
195
+ F,
196
+ Y,
197
+ H
198
+ ]), Se = s(() => {
199
+ V.refetch();
200
+ }, [V.refetch]), Ce = s(() => {
201
+ z((e) => Math.min(e + g, h));
202
+ }, []), we = s(() => {
203
+ z((e) => Math.max(e - g, m));
204
+ }, []), $ = s(() => {
205
+ if (k.length > 0) {
206
+ let e = new Set(k.map((e) => e.receiptId));
207
+ M((t) => t.filter((t) => !e.has(t)));
208
+ }
209
+ Z(), O(0), A([]), E(1);
210
+ }, [Z, k]), Te = s(() => {
211
+ let e = D + 1;
212
+ if (e < j.length) {
213
+ O(e), Z(), E(2);
214
+ return;
215
+ }
216
+ $(), y();
217
+ }, [
218
+ D,
219
+ j.length,
220
+ Z,
221
+ $,
222
+ y
223
+ ]);
224
+ return {
225
+ step: T,
226
+ receipts: K,
227
+ selectedReceiptIds: j,
228
+ onSelectAll: me,
229
+ onReset: he,
230
+ onReceiptToggle: pe,
231
+ onViewAttachment: ge,
232
+ onDeleteReceipt: Q,
233
+ onReview: _e,
234
+ isReceiptsLoading: B.isLoading || C && !S,
235
+ isReceiptsError: B.isError,
236
+ onRetryReceipts: ve,
237
+ showSelectAllButton: !b,
238
+ receiptPreviewUrl: ce,
239
+ receiptFileName: le,
240
+ transactions: se,
241
+ isTransactionsLoading: V.isLoading,
242
+ isTransactionsError: V.isError,
243
+ onRetryTransactions: Se,
244
+ selectedTransactionIds: L,
245
+ allowMultipleTransactions: v,
246
+ searchValue: N,
247
+ onSearchChange: ye,
248
+ onTransactionSelect: be,
249
+ onConfirmMatch: xe,
250
+ isConfirming: H.isPending,
251
+ zoom: R,
252
+ onZoomIn: Ce,
253
+ onZoomOut: we,
254
+ canZoomIn: R < h,
255
+ canZoomOut: R > m,
256
+ matchedTransactions: de,
257
+ primaryLabel: fe,
258
+ onPrimary: Te,
259
+ onCancel: $,
260
+ reviewLabel: ue
261
+ };
262
+ }
9
263
  //#endregion
10
- export { e as expenseApprovalPoliciesTestIds };
264
+ export { y as useReceiptMatch };
@@ -1,223 +1,4 @@
1
- "use client";
2
- "use client";
3
- "use client";
4
- "use client";
5
- import { toast as e } from "../../../../../packages/shared-ui-shadcn/dist/index.js";
6
- import { Scope as t } from "../../../shared/data-access/dist/lib/scopes.js";
7
- import { useAllOrganizationRolesQuery as n } from "../../../shared/data-access/dist/lib/role/useAllOrganizationRolesQuery.js";
8
- import "../../../shared/data-access/dist/index.js";
9
- import { EmbeddedToaster as r } from "../../../shared/ui/dist/lib/EmbeddedToaster.js";
10
- import { ErrorState as i } from "../../../shared/ui/dist/lib/ErrorState/ErrorState.js";
11
- import "../../../shared/ui/dist/index.js";
12
- import { useAnalyticsTrack as a } from "../../../shared/feature/dist/lib/analytics/hooks.js";
13
- import { WidgetProvider as o } from "../../../shared/feature/dist/lib/WidgetProvider/WidgetProvider.js";
14
- import { useWidgetConfig as s, useWidgetLoading as c } from "../../../shared/feature/dist/lib/WidgetProvider/hooks.js";
15
- import "../../../shared/feature/dist/index.js";
16
- import { ApproverOptionLabels as l, PermissionErrorLabels as u, ValidationErrorLabels as d } from "./index4.js";
17
- import { ExpenseApprovalPoliciesAnalyticsEvent as f, WIDGET_NAME as p } from "./index2.js";
18
- import { AmountConditionType as m, ApprovalOutcomeType as h } from "../../ui/dist/lib/ExpenseApprovalPoliciesWidget/lib/types.js";
19
- import { ApprovalRuleToastLabels as g } from "../../ui/dist/lib/ExpenseApprovalPoliciesWidget/lib/labels.js";
20
- import { ExpenseApprovalsPage as _ } from "../../ui/dist/lib/ExpenseApprovalPoliciesWidget/lib/ExpenseApprovalsPage.js";
21
- import "../../ui/dist/index.js";
22
- import { useApprovalPolicies as v } from "./index3.js";
23
- import { expenseApprovalPoliciesTestIds as y } from "./index5.js";
24
- import { useEffect as b, useMemo as x, useState as S } from "react";
25
- import { Fragment as C, jsx as w, jsxs as T } from "react/jsx-runtime";
26
1
  //#region ../../libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index6.js
27
- var E = {
28
- minAmount: "",
29
- maxAmount: "",
30
- outcome: h.AutoApprove,
31
- approvers: []
32
- };
33
- function D(e, t) {
34
- let n = (e ?? "").trim().toLowerCase();
35
- return n === t || n === `embedded:${t}`;
36
- }
37
- function O(e, t) {
38
- return (e ?? "").toLowerCase().split(":").map((e) => e.trim()).filter(Boolean).some((e) => e === t);
39
- }
40
- function k(e) {
41
- return D(e, "cfo") || D(e, "finance_admin") || D(e, "finance-admin");
42
- }
43
- function A(e) {
44
- let t = e.find((e) => e.isSystemRole === !0 && D(e.key, "admin")), n = e.find((e) => e.isSystemRole === !0 && k(e.key)), r = e.filter((e) => e.isSystemRole === !0 && e !== t && e !== n && !O(e.key, "employee") && !O(e.key, "bookkeeper")).map((e) => ({
45
- id: e.id,
46
- label: e.name
47
- })), i = e.filter((e) => !e.isSystemRole && e.status?.toLowerCase() === "active").map((e) => ({
48
- id: e.id,
49
- label: e.name
50
- }));
51
- return [
52
- ...t ? [{
53
- id: t.id,
54
- label: l.AdminLabel,
55
- sublabel: l.AdminSublabel
56
- }] : [],
57
- {
58
- id: "reporting_manager",
59
- label: l.ReportingManagerLabel,
60
- sublabel: l.ReportingManagerSublabel
61
- },
62
- ...n ? [{
63
- id: n.id,
64
- label: l.CfoLabel,
65
- sublabel: l.CfoSublabel
66
- }] : [],
67
- ...r,
68
- ...i
69
- ];
70
- }
71
- function j(e) {
72
- let t = e.minAmount.trim() !== "", n = e.maxAmount.trim() !== "";
73
- return t && n ? m.InRange : t ? m.GreaterThanOrEqual : n ? m.LessThan : m.All;
74
- }
75
- function M(e) {
76
- return [e.conditionType === m.LessThan || e.conditionType === m.All ? 0 : e.minAmount ?? 0, e.conditionType === m.GreaterThanOrEqual || e.conditionType === m.All ? Infinity : e.maxAmount ?? 0];
77
- }
78
- function N(e) {
79
- if (e.length === 0) return !1;
80
- let t = e.map(M).sort((e, t) => e[0] - t[0]);
81
- if (t[0][0] > 0) return !1;
82
- let n = 0;
83
- for (let [e, r] of t) {
84
- if (e > n) return !1;
85
- n = Math.max(n, r);
86
- }
87
- return n === Infinity;
88
- }
89
- function P(e) {
90
- if (e.length === 0) return [];
91
- let t = e.map(M).sort((e, t) => e[0] - t[0]), n = [], r = 0;
92
- for (let [e, i] of t) e > r && n.push({
93
- from: r,
94
- to: e
95
- }), r = Math.max(r, i);
96
- return r !== Infinity && n.push({
97
- from: r,
98
- to: null
99
- }), n;
100
- }
101
- function F(e) {
102
- let t = Number(e.minAmount) || 0, n = Number(e.maxAmount) || 0, r = j(e);
103
- return [r === m.LessThan || r === m.All ? 0 : t, r === m.GreaterThanOrEqual || r === m.All ? Infinity : n];
104
- }
105
- function I(e, t, n) {
106
- let [r, i] = F(e);
107
- return t.filter((e) => e.id !== n).some((e) => {
108
- let [t, n] = M(e);
109
- return r < n && t < i;
110
- });
111
- }
112
- function L(e, t, n) {
113
- let r = {}, i = e.minAmount.trim() !== "", a = e.maxAmount.trim() !== "", o = Number(e.minAmount.trim()), s = Number(e.maxAmount.trim());
114
- return i && (!Number.isFinite(o) || o < 0) && (r.minAmount = d.InvalidMinAmount), a && (!Number.isFinite(s) || s <= 0) && (r.maxAmount = d.InvalidMaxAmount), i && a && !r.minAmount && !r.maxAmount && o >= s && (r.maxAmount = d.MaxLessThanOrEqualToMin), e.outcome === h.RequireApproval && e.approvers.length === 0 && (r.approvers = d.ApproversRequired), !r.minAmount && !r.maxAmount && I(e, t, n) && (a ? r.maxAmount = d.ConflictsWithAnotherRule : r.minAmount = d.ConflictsWithAnotherRule), r;
115
- }
116
- function R(e, t) {
117
- let n = j(t);
118
- return {
119
- id: e,
120
- conditionType: n,
121
- minAmount: n === m.InRange || n === m.GreaterThanOrEqual ? Number(t.minAmount) : void 0,
122
- maxAmount: n === m.LessThan || n === m.InRange ? Number(t.maxAmount) : void 0,
123
- outcome: t.outcome,
124
- approvers: t.outcome === h.RequireApproval ? t.approvers : []
125
- };
126
- }
127
- function z(e) {
128
- return {
129
- minAmount: e.minAmount == null ? "" : String(e.minAmount),
130
- maxAmount: e.maxAmount == null ? "" : String(e.maxAmount),
131
- outcome: e.outcome,
132
- approvers: e.approvers
133
- };
134
- }
135
- function B() {
136
- let o = a();
137
- b(() => {
138
- o(f.Mounted);
139
- }, [o]);
140
- let { initResponse: d } = s(), p = c(), m = d?.scopes?.includes(t.RoleReadOrg) ?? !1, { data: h, isResolving: O, isError: j } = n({ enabled: m }), M = x(() => A(h?.data ?? []), [h]), F = x(() => {
141
- let e = h?.data ?? [], t = e.find((e) => e.isSystemRole === !0 && D(e.key, "admin")), n = e.find((e) => e.isSystemRole === !0 && k(e.key)), r = { reporting_manager: l.ReportingManagerLabel };
142
- t && (r[t.id] = l.AdminLabel), n && (r[n.id] = l.CfoLabel);
143
- for (let t of e) r[t.id] || (r[t.id] = t.name);
144
- return r;
145
- }, [h]), { rules: I, isLoading: B, saveStatus: V, createRule: ee, updateRule: te, deleteRule: H } = v(F), [U, W] = S(!1), [G, K] = S(E), [q, J] = S(null), [Y, X] = S(null);
146
- b(() => {
147
- V === "success" && e.success(g.Saved), V === "error" && e.error(g.FailedToSave);
148
- }, [V]);
149
- let Z = B || p && !d, ne = N(I), re = P(I), Q = Z || O || V === "saving", ie = U ? L(G, I) : {}, ae = Y && q ? L(Y, I, q) : {}, oe = () => {
150
- W(!0), K(E);
151
- }, se = () => {
152
- W(!1);
153
- }, $ = async () => {
154
- let e = L(G, I);
155
- if (Object.keys(e).length > 0) return;
156
- let t = crypto.randomUUID();
157
- await ee(R(t, G)) && (W(!1), K(E));
158
- }, ce = (e) => {
159
- K(e);
160
- }, le = (e) => {
161
- let t = I.find((t) => t.id === e);
162
- t && (W(!1), K(E), J(e), X(z(t)));
163
- }, ue = () => {
164
- J(null), X(null);
165
- }, de = async () => {
166
- if (!q || !Y) return;
167
- let e = L(Y, I, q);
168
- Object.keys(e).length > 0 || await te(q, R(q, Y)) && (J(null), X(null));
169
- }, fe = (e) => {
170
- X(e);
171
- }, pe = async (e) => {
172
- await H(e), q === e && (J(null), X(null));
173
- };
174
- return d !== void 0 && !m ? /* @__PURE__ */ w(i, {
175
- title: u.MissingRolePermissionTitle,
176
- description: u.MissingRolePermissionDescription
177
- }) : j ? /* @__PURE__ */ w(i, {
178
- title: u.RolesUnavailableTitle,
179
- description: u.RolesUnavailableDescription
180
- }) : /* @__PURE__ */ T(C, { children: [/* @__PURE__ */ w(r, {}), /* @__PURE__ */ w(_, {
181
- rules: I,
182
- isBusy: Q,
183
- isLoading: Z,
184
- isAddingRule: U,
185
- newRuleFormValues: G,
186
- newRuleValidationErrors: ie,
187
- editingRuleId: q,
188
- editingRuleFormValues: Y,
189
- editingRuleValidationErrors: ae,
190
- approverOptions: Q ? [] : M,
191
- allExpensesAreCovered: ne,
192
- gapIntervals: re,
193
- onAddRuleClick: oe,
194
- onCancelAddRule: se,
195
- onSaveNewRule: () => void $(),
196
- onNewRuleFormChange: ce,
197
- onEditRule: le,
198
- onCancelEditRule: ue,
199
- onSaveEditRule: () => void de(),
200
- onEditRuleFormChange: fe,
201
- onDeleteRule: (e) => void pe(e),
202
- testIds: {
203
- ruleCard: { root: y.ruleCard },
204
- ruleForm: {
205
- root: y.ruleForm,
206
- saveButton: y.ruleFormSaveButton,
207
- minAmountInput: y.ruleFormMinAmountInput,
208
- maxAmountInput: y.ruleFormMaxAmountInput
209
- }
210
- }
211
- })] });
212
- }
213
- function V({ token: e, orgId: t, widgetToken: n, organizationId: r, ...i } = {}) {
214
- return /* @__PURE__ */ w(o, {
215
- ...i,
216
- widgetName: p,
217
- widgetToken: n === void 0 ? e : n,
218
- organizationId: r === void 0 ? t : r,
219
- children: /* @__PURE__ */ w(B, {})
220
- });
221
- }
2
+ var e = { Mounted: "receipt_match.mounted" }, t = "receipt_match";
222
3
  //#endregion
223
- export { V as ExpenseApprovalPoliciesWidget, V as default, A as buildApproverOptions, D as isEmbeddedSystemRoleKey, O as roleKeyHasSegment };
4
+ export { e as ReceiptMatchAnalyticsEvent, t as WIDGET_NAME };
@@ -2,90 +2,64 @@
2
2
  "use client";
3
3
  "use client";
4
4
  "use client";
5
- import { toast as e } from "../../../../../packages/shared-ui-shadcn/dist/index.js";
6
- import { EmbeddedToaster as t } from "../../../shared/ui/dist/lib/EmbeddedToaster.js";
5
+ import { EmbeddedToaster as e } from "../../../shared/ui/dist/lib/EmbeddedToaster.js";
7
6
  import "../../../shared/ui/dist/index.js";
8
- import { UploadReceiptToastLabels as n } from "../../ui/dist/lib/UploadReceiptWidget/labels.js";
9
- import { UploadReceiptButton as r } from "../../ui/dist/lib/UploadReceiptWidget/UploadReceiptButton.js";
10
- import { UploadReceiptModal as i } from "../../ui/dist/lib/UploadReceiptWidget/UploadReceiptModal.js";
7
+ import { useAnalyticsTrack as t } from "../../../shared/feature/dist/lib/analytics/hooks.js";
8
+ import { WidgetProvider as n } from "../../../shared/feature/dist/lib/WidgetProvider/WidgetProvider.js";
9
+ import "../../../shared/feature/dist/index.js";
10
+ import { ReceiptMatchSidebar as r } from "../../ui/dist/lib/ReceiptMatchWidget/lib/ReceiptMatchSidebar.js";
11
11
  import "../../ui/dist/index.js";
12
- import { useEffect as a, useRef as o, useState as s } from "react";
13
- import { jsx as c, jsxs as l } from "react/jsx-runtime";
12
+ import { useReceiptMatch as i } from "./index5.js";
13
+ import { ReceiptMatchAnalyticsEvent as a, WIDGET_NAME as o } from "./index6.js";
14
+ import { useCallback as s, useEffect as c, useState as l } from "react";
15
+ import { Fragment as u, jsx as d, jsxs as f } from "react/jsx-runtime";
14
16
  //#region ../../libs/tesouro-embedded-components-react/expense-management-widget/feature/dist/index7.js
15
- var u = 3e3, d = 5e3, f = 10;
16
- function p(e, t) {
17
- return e ? e.stillProcessing > 0 ? n.MatchingUnfinished(e.stillProcessing) : e.total === 0 ? n.UploadedAll(t) : e.matched === e.total ? n.MatchedAll(e.matched) : n.MatchedPartial(e.matched, e.total) : n.UploadedAll(t);
17
+ function p({ isOpen: n = !1, preSelectedReceiptIds: o = [], onClose: l, targetTransactionId: p, onSingleTransactionUpdate: m }) {
18
+ let h = t();
19
+ c(() => {
20
+ h(a.Mounted);
21
+ }, [h]);
22
+ let g = i({
23
+ preSelectedIds: o,
24
+ onClose: l,
25
+ targetTransactionId: p,
26
+ onSingleTransactionUpdate: m,
27
+ enabled: n
28
+ }), _ = s(() => {
29
+ g.onCancel(), l();
30
+ }, [g.onCancel, l]);
31
+ return /* @__PURE__ */ f(u, { children: [/* @__PURE__ */ d(e, {}), /* @__PURE__ */ d(r, {
32
+ open: n,
33
+ onClose: _,
34
+ ...g
35
+ })] });
18
36
  }
19
- function m({ emailAddress: m, onFileUpload: h, onAwaitMatching: g, isUploading: _ = !1 }) {
20
- let [v, y] = s(!1), [b, x] = s(!1), S = o(!0);
21
- return a(() => (S.current = !0, () => {
22
- S.current = !1;
23
- }), []), /* @__PURE__ */ l("div", {
24
- className: "ttw:relative",
25
- children: [
26
- /* @__PURE__ */ c(t, {}),
27
- /* @__PURE__ */ c(r, {
28
- onClick: () => y((e) => !e),
29
- open: v
30
- }),
31
- /* @__PURE__ */ c(i, {
32
- open: v,
33
- onClose: () => y(!1),
34
- emailAddress: m,
35
- onFilesSelected: async (t) => {
36
- if (!h || _ || b || t.length === 0) return;
37
- if (t.length > f) {
38
- e.error(n.TooManyFiles(f), { duration: d });
39
- return;
40
- }
41
- x(!0), y(!1);
42
- let r = e.loading(n.Uploading(t.length)), i = 0, a = 0;
43
- for (let e of t) try {
44
- await h(e), i++;
45
- } catch {
46
- a++;
47
- }
48
- let o;
49
- try {
50
- o = g?.(i);
51
- } catch {
52
- o = void 0;
53
- }
54
- if (a > 0 || i === 0) {
55
- if (o?.catch(() => void 0), !S.current) {
56
- e.dismiss(r);
57
- return;
58
- }
59
- e.error(i === 0 ? t.length === 1 ? n.UploadFailedSingle : n.UploadFailedAll(a) : n.UploadedPartial(i, t.length), {
60
- id: r,
61
- duration: d
62
- }), x(!1);
63
- return;
64
- }
65
- if (x(!1), !S.current) {
66
- o?.catch(() => void 0), e.dismiss(r);
67
- return;
68
- }
69
- let s = null;
70
- if (o) {
71
- e.loading(n.Matching(i), { id: r });
72
- try {
73
- s = await o;
74
- } catch {}
75
- }
76
- if (!S.current) {
77
- e.dismiss(r);
78
- return;
79
- }
80
- e.success(p(s, i), {
81
- id: r,
82
- duration: u
83
- });
84
- },
85
- isUploading: _ || b
86
- })
87
- ]
37
+ function m({ isOpen: e, onClose: t, ...n }) {
38
+ let [r, i] = l(!!e);
39
+ c(() => {
40
+ i(!!e);
41
+ }, [e]);
42
+ let a = s(() => {
43
+ i(!1), t?.();
44
+ }, [t]);
45
+ return /* @__PURE__ */ d(p, {
46
+ isOpen: r,
47
+ onClose: a,
48
+ ...n
49
+ });
50
+ }
51
+ function h({ isOpen: e, preSelectedReceiptIds: t, onClose: r, targetTransactionId: i, onSingleTransactionUpdate: a, ...s }) {
52
+ return /* @__PURE__ */ d(n, {
53
+ ...s,
54
+ widgetName: o,
55
+ children: /* @__PURE__ */ d(m, {
56
+ isOpen: e,
57
+ preSelectedReceiptIds: t,
58
+ onClose: r,
59
+ targetTransactionId: i,
60
+ onSingleTransactionUpdate: a
61
+ })
88
62
  });
89
63
  }
90
64
  //#endregion
91
- export { m as UploadReceiptWidget };
65
+ export { h as ReceiptMatchWidget };