@feedmepos/mf-payment 1.0.28 → 1.1.0-beta.1

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 (80) hide show
  1. package/dist/{PDFViewer-xrBtzrlR.js → PDFViewer-BQfgFexr.js} +2 -1
  2. package/dist/{PayoutAccount-QybE7meK.js → PayoutAccount-BHJpjUqD.js} +5 -5
  3. package/dist/{PayoutAccount-C53rv89t.js → PayoutAccount-DCkf_1yL.js} +5 -4
  4. package/dist/PayoutAccountSetting-Bk-g7ucZ.js +723 -0
  5. package/dist/{Restaurant-B1ed_oVp.js → Restaurant-D2qq84VL.js} +56 -54
  6. package/dist/{RestaurantSetting-CKG5jn2J.js → RestaurantSetting-DAtrtX6S.js} +3 -3
  7. package/dist/{Settlement-SeGVEdZj.js → Settlement-BVIsszEJ.js} +37 -34
  8. package/dist/{Settlement-Fh86ozFD.js → Settlement-Cx1tc5wt.js} +9 -8
  9. package/dist/{SettlementTransactions-BSF2Jw-L.js → SettlementTransactions-C82DyYlO.js} +14 -14
  10. package/dist/{SettlementTransactions-CHRsIcoh.js → SettlementTransactions-CeN4SRWa.js} +39 -39
  11. package/dist/{Terminal-BUBkiYYw.js → Terminal-Az2k8E6F.js} +323 -342
  12. package/dist/{TerminalSetting-CfCa-6pK.js → TerminalSetting-C-xlLYXa.js} +27 -27
  13. package/dist/Transaction-CC8hc8_r.js +250 -0
  14. package/dist/{Transaction-DWzZ31qR.js → Transaction-Y_mc0yQv.js} +123 -105
  15. package/dist/{TransactionOld-Pj412ujb.js → TransactionOld-BxhI-wwm.js} +7 -7
  16. package/dist/TransactionTable.vue_vue_type_script_setup_true_lang-dwwesT4_.js +304 -0
  17. package/dist/api/payout/index.d.ts +5 -1
  18. package/dist/api/terminal/index.d.ts +6 -10
  19. package/dist/api/transaction/index.d.ts +12 -11
  20. package/dist/{app-DC4HbItX.js → app-OBp4HaEY.js} +853 -791
  21. package/dist/app.js +1 -1
  22. package/dist/{assets-BySnqkmr.js → assets-pLBp82yE.js} +208 -56
  23. package/dist/components/SourceSelector.vue.d.ts +12 -0
  24. package/dist/{grafana-b2ht7XmY.js → grafana-hv7inD36.js} +2 -2
  25. package/dist/{index-d3nubgyT.js → index-1xF00w89.js} +1 -1
  26. package/dist/{index-CvJ2nft4.js → index-CFYD8Dv4.js} +1 -1
  27. package/dist/index-Cqq3p9PP.js +66 -0
  28. package/dist/{index-DXV5GQaF.js → index-DD5mEX0D.js} +1 -1
  29. package/dist/{index-iiG_kivD.js → index-DGKxdJVj.js} +8163 -8081
  30. package/dist/index-oM4Z9ffu.js +45 -0
  31. package/dist/{index.vue_vue_type_script_setup_true_lang-Du3twb8U.js → index.vue_vue_type_script_setup_true_lang-C9tnqgzY.js} +8 -7
  32. package/dist/model/payout-account.d.ts +1 -1
  33. package/dist/model/transaction.d.ts +13 -5
  34. package/dist/package.json +2 -2
  35. package/dist/{payout-account-DPdwKVTr.js → payout-account-DPaS3dIs.js} +2 -2
  36. package/dist/router/index.d.ts +1 -0
  37. package/dist/stores/payoutAccount.d.ts +4 -4
  38. package/dist/tsconfig.app.tsbuildinfo +1 -1
  39. package/dist/views/admin/payout-account/tabs/Information.vue.d.ts +4 -4
  40. package/dist/views/admin/payout-account/tabs/PaymentChannel.vue.d.ts +133 -0
  41. package/dist/views/admin/payout-account/tabs/PaymentGateway.vue.d.ts +133 -0
  42. package/dist/views/admin/payout-account/tabs/PaymentStatus.vue.d.ts +4 -4
  43. package/dist/views/admin/payout-account/tabs/Settlement.vue.d.ts +4 -4
  44. package/dist/views/admin/payout-account/tabs/cell/Actions.vue.d.ts +8 -0
  45. package/dist/views/admin/payout-account/tabs/gateway/FiuuGateway.vue.d.ts +10 -23
  46. package/dist/views/admin/{terminal-transaction/TerminalTransaction.vue.d.ts → payout-account/tabs/gateway/MacauPassGateway.vue.d.ts} +1 -1
  47. package/dist/views/admin/restaurant/tabs/gateway/FiuuGateway.vue.d.ts +6 -6
  48. package/dist/views/admin/restaurant/tabs/gateway/GhlGateway.vue.d.ts +6 -6
  49. package/dist/views/admin/restaurant/tabs/gateway/RevenueMonsterGateway.vue.d.ts +4 -4
  50. package/dist/views/admin/terminal/Terminal.vue.d.ts +4 -1
  51. package/dist/views/admin/terminal/TerminalDialog.vue.d.ts +2 -2
  52. package/dist/views/admin/terminal/tabs/FiuuGateway.vue.d.ts +2 -2
  53. package/dist/views/admin/terminal/tabs/GhlGateway.vue.d.ts +2 -2
  54. package/dist/views/admin/terminal/tabs/Information.vue.d.ts +2 -2
  55. package/dist/views/admin/terminal/tabs/TerminalGateway.vue.d.ts +2 -2
  56. package/dist/views/admin/transaction/cell/Actions.vue.d.ts +2 -0
  57. package/dist/views/payout-account/PayoutAccountTable.vue.d.ts +8 -8
  58. package/dist/views/settlement/FiuuSettlementTable.vue.d.ts +16 -16
  59. package/dist/views/settlement/FiuuSettlementTransactions.vue.d.ts +8 -8
  60. package/dist/views/{admin/terminal-transaction → transaction}/cell/Actions.vue.d.ts +3 -3
  61. package/package.json +2 -2
  62. package/dist/PayoutAccountSetting-Zhkm_GN8.js +0 -426
  63. package/dist/TerminalTransaction-DIM7WO_C.js +0 -589
  64. package/dist/TerminalTransaction-DQZnx7dy.js +0 -333
  65. package/dist/Transaction-DRYwBnHK.js +0 -247
  66. package/dist/TransactionTable.vue_vue_type_script_setup_true_lang-B3FGhKjA.js +0 -159
  67. package/dist/components/PayoutAccountSelector.vue.d.ts +0 -23
  68. package/dist/index-BJpE0YhF.js +0 -52
  69. package/dist/index-BqzuW2qa.js +0 -40
  70. package/dist/index-Dwv1hbHU.js +0 -77
  71. package/dist/transaction-CzLoSCVe.js +0 -136
  72. package/dist/views/admin/payout-account/tabs/gateway/GhlGateway.vue.d.ts +0 -50
  73. package/dist/views/admin/payout-account/tabs/gateway/RevenueMonsterGateway.vue.d.ts +0 -52
  74. package/dist/views/admin/terminal-transaction/cell/Gateway.vue.d.ts +0 -7
  75. package/dist/views/admin/terminal-transaction/cell/Method.vue.d.ts +0 -7
  76. package/dist/views/admin/terminal-transaction/cell/Status.vue.d.ts +0 -7
  77. package/dist/views/terminal-transaction/TerminalTransaction.vue.d.ts +0 -2
  78. package/dist/views/terminal-transaction/cell/Gateway.vue.d.ts +0 -7
  79. package/dist/views/terminal-transaction/cell/Method.vue.d.ts +0 -7
  80. package/dist/views/terminal-transaction/cell/Status.vue.d.ts +0 -7
@@ -0,0 +1,304 @@
1
+ import { defineComponent as m, resolveComponent as d, openBlock as l, createBlock as y, normalizeClass as M, withCtx as f, createElementVNode as x, toDisplayString as D, createElementBlock as A, unref as S, createVNode as I, Fragment as P, renderList as v, ref as R, h as p } from "vue";
2
+ import { useSnackbar as V, useDialog as B } from "@feedmepos/ui-library";
3
+ import { g as U, a as G, t as h, c as N } from "./assets-pLBp82yE.js";
4
+ import { e as b } from "./index-DGKxdJVj.js";
5
+ import { g as L } from "./grafana-hv7inD36.js";
6
+ import { w as k } from "./Modal-DB8M9o1T.js";
7
+ import { u as T } from "./error-K1CakhA9.js";
8
+ import { useCoreStore as $ } from "@feedmepos/mf-common";
9
+ const O = /* @__PURE__ */ m({
10
+ __name: "Status",
11
+ props: {
12
+ row: {},
13
+ data: {}
14
+ },
15
+ setup(r) {
16
+ const n = r;
17
+ function a() {
18
+ return n.data === b.F_PAYMENT_TRANSACTION_STATUS.Enum.PENDING ? "!w-[16px] !h-[16px] bg-yellow-400" : n.data === b.F_PAYMENT_TRANSACTION_STATUS.Enum.FAILED ? "!w-[16px] !h-[16px] bg-red-400" : n.data === b.F_PAYMENT_TRANSACTION_STATUS.Enum.REFUNDED ? "!w-[16px] !h-[16px] bg-blue-400" : "!w-[16px] !h-[16px] bg-green-400";
19
+ }
20
+ return (i, s) => {
21
+ const u = d("FmBadge");
22
+ return l(), y(u, {
23
+ inline: "",
24
+ class: M(a())
25
+ }, {
26
+ default: f(() => [
27
+ x("div", null, D(i.data), 1)
28
+ ]),
29
+ _: 1
30
+ }, 8, ["class"]);
31
+ };
32
+ }
33
+ }), Y = ["src"], j = /* @__PURE__ */ m({
34
+ __name: "Gateway",
35
+ props: {
36
+ row: {},
37
+ data: {}
38
+ },
39
+ setup(r) {
40
+ return (n, a) => (l(), A("img", {
41
+ class: "rounded-md m-auto border-transparent object-contain w-[32px] h-[32px]",
42
+ src: S(U)(n.row.original.gateway)
43
+ }, null, 8, Y));
44
+ }
45
+ }), z = ["src"], Q = /* @__PURE__ */ m({
46
+ __name: "Method",
47
+ props: {
48
+ row: {},
49
+ data: {}
50
+ },
51
+ setup(r) {
52
+ return (n, a) => {
53
+ const i = d("FmTooltip");
54
+ return l(), y(i, {
55
+ variant: "plain",
56
+ placement: "top",
57
+ content: n.row.original.method.issuer,
58
+ "hide-arrow": !0
59
+ }, {
60
+ default: f(() => [
61
+ x("img", {
62
+ class: "rounded-md m-auto border-transparent w-[32px] h-[32px]",
63
+ src: S(G)(n.row.original.method.issuer, n.row.original.method.variant)
64
+ }, null, 8, z)
65
+ ]),
66
+ _: 1
67
+ }, 8, ["content"]);
68
+ };
69
+ }
70
+ }), H = /* @__PURE__ */ m({
71
+ __name: "Actions",
72
+ props: {
73
+ onAction: { type: Function },
74
+ transaction: {}
75
+ },
76
+ setup(r) {
77
+ const n = [
78
+ r.transaction.flags.query && {
79
+ label: "Query",
80
+ sublabel: "Perform transaction status inquriy",
81
+ icon: "question_answer",
82
+ action: "query"
83
+ },
84
+ r.transaction.flags.refund && {
85
+ label: "Refund",
86
+ sublabel: "Perform transaction refund request",
87
+ icon: "request_page",
88
+ action: "refund"
89
+ },
90
+ r.transaction.flags.notify && {
91
+ label: "Notify",
92
+ sublabel: "Perform webhook notification for transaction",
93
+ icon: "webhook",
94
+ action: "notify"
95
+ },
96
+ {
97
+ label: "Log",
98
+ sublabel: "Inspect transaction historical actions, requests and responses.",
99
+ icon: "history",
100
+ action: "history"
101
+ }
102
+ ];
103
+ return (a, i) => {
104
+ const s = d("FmIcon"), u = d("FmMenuItem"), g = d("FmMenu");
105
+ return l(), A("div", {
106
+ onClick: i[0] || (i[0] = (o) => {
107
+ o.stopPropagation();
108
+ })
109
+ }, [
110
+ I(g, null, {
111
+ "menu-button": f(() => [
112
+ I(s, { name: "settings" })
113
+ ]),
114
+ default: f(() => [
115
+ (l(!0), A(P, null, v(n.filter((o) => !!o), (o) => (l(), y(u, {
116
+ selectable: !0,
117
+ key: o.label,
118
+ sublabel: o.sublabel,
119
+ label: o.label,
120
+ icon: o.icon,
121
+ onclick: () => a.onAction(o.action)
122
+ }, null, 8, ["sublabel", "label", "icon", "onclick"]))), 128))
123
+ ]),
124
+ _: 1
125
+ })
126
+ ]);
127
+ };
128
+ }
129
+ }), oe = /* @__PURE__ */ m({
130
+ __name: "TransactionTable",
131
+ props: {
132
+ data: {
133
+ type: Array,
134
+ required: !0
135
+ },
136
+ loading: {
137
+ type: Boolean,
138
+ required: !0
139
+ }
140
+ },
141
+ emits: ["row-click"],
142
+ setup(r, { emit: n }) {
143
+ var q;
144
+ const a = r, i = n, s = V(), u = B(), { sessionUser: g } = $();
145
+ async function o(t) {
146
+ try {
147
+ const e = await h.refetchTransaction({ transactionId: t.id });
148
+ a.data.map((c) => c.id === e._id ? N(e) : c), s.open({
149
+ type: "success",
150
+ title: "Transaction queried and updated successfully."
151
+ });
152
+ } catch (e) {
153
+ s.open({
154
+ type: "error",
155
+ title: "Fail to query transaction.",
156
+ message: T(e)
157
+ });
158
+ }
159
+ }
160
+ async function E(t) {
161
+ k(
162
+ u,
163
+ "Refund Transaction",
164
+ "Are you sure to refund transaction? This action cannot be revert!",
165
+ async () => {
166
+ try {
167
+ const e = await h.refundTransaction({
168
+ transactionId: t.id,
169
+ reason: "portal transaction refund",
170
+ amount: t.fdoAmount
171
+ });
172
+ a.data.map((c) => c.id === e._id ? N(e) : c), s.open({
173
+ type: "success",
174
+ title: "Transaction refund request initiated."
175
+ });
176
+ } catch (e) {
177
+ s.open({
178
+ type: "error",
179
+ title: "Fail to request refund transaction.",
180
+ message: T(e)
181
+ });
182
+ }
183
+ }
184
+ );
185
+ }
186
+ async function C(t) {
187
+ k(
188
+ u,
189
+ "Notify Transaction",
190
+ "Are you sure to perform notify transaction?",
191
+ async () => {
192
+ try {
193
+ await h.renotifyTransaction(t.id), s.open({
194
+ type: "success",
195
+ title: "Transaction notify successfully."
196
+ });
197
+ } catch (e) {
198
+ s.open({
199
+ type: "error",
200
+ title: "Fail to notify transaction.",
201
+ message: T(e)
202
+ });
203
+ }
204
+ }
205
+ );
206
+ }
207
+ async function K(t) {
208
+ const e = L([
209
+ {
210
+ type: "span",
211
+ queryKey: "transaction.id",
212
+ queryValue: t.id
213
+ }
214
+ ], t.transactionAt);
215
+ window.open(e, "_blank");
216
+ }
217
+ const w = R(""), F = [
218
+ {
219
+ header: () => "Transaction ID",
220
+ accessorKey: "id"
221
+ },
222
+ {
223
+ header: () => "Pay ID",
224
+ accessorKey: "payId"
225
+ },
226
+ {
227
+ header: () => "Bill Seq No",
228
+ accessorKey: "seqNumber"
229
+ },
230
+ {
231
+ header: () => "Gateway",
232
+ accessorKey: "gateway",
233
+ meta: {
234
+ textAlign: "center"
235
+ },
236
+ cell: ({ cell: t, row: e }) => e.original.method ? p(j, { row: e, data: t.getValue() }) : ""
237
+ },
238
+ {
239
+ header: () => "Method",
240
+ accessorKey: "method",
241
+ meta: {
242
+ textAlign: "center"
243
+ },
244
+ cell: ({ cell: t, row: e }) => e.original.method ? p(Q, { row: e, data: t.getValue() }) : ""
245
+ },
246
+ {
247
+ header: () => "Type",
248
+ accessorKey: "payFor",
249
+ meta: {
250
+ textAlign: "center"
251
+ }
252
+ },
253
+ {
254
+ header: () => "Status",
255
+ accessorKey: "status",
256
+ cell: ({ cell: t, row: e }) => p(O, { row: e, data: t.getValue() })
257
+ },
258
+ {
259
+ header: () => "Transaction At",
260
+ accessorKey: "transactionAt",
261
+ meta: {
262
+ width: "180px"
263
+ },
264
+ cell: ({ cell: t, row: e }) => e.original.status === "REFUNDED" ? e.original.refundedAt : e.original.transactionAt
265
+ },
266
+ {
267
+ header: () => "Sales Amount",
268
+ accessorKey: "amount"
269
+ }
270
+ ];
271
+ return (q = g.value) != null && q.isInternal && F.push({
272
+ header: () => "Actions",
273
+ accessorKey: "actions",
274
+ cell: ({ row: t }) => p(H, {
275
+ transaction: t.original,
276
+ onAction: (e) => {
277
+ switch (e) {
278
+ case "notify":
279
+ return C(t.original);
280
+ case "query":
281
+ return o(t.original);
282
+ case "refund":
283
+ return E(t.original);
284
+ case "history":
285
+ return K(t.original);
286
+ }
287
+ }
288
+ })
289
+ }), (t, e) => {
290
+ const c = d("FmTable");
291
+ return l(), y(c, {
292
+ modelValue: w.value,
293
+ "onUpdate:modelValue": e[0] || (e[0] = (_) => w.value = _),
294
+ "column-defs": F,
295
+ "row-data": a.data,
296
+ loading: a.loading,
297
+ onRowClick: e[1] || (e[1] = (_) => i("row-click", a.data.at(_.index)))
298
+ }, null, 8, ["modelValue", "row-data", "loading"]);
299
+ };
300
+ }
301
+ });
302
+ export {
303
+ oe as _
304
+ };
@@ -1,4 +1,4 @@
1
- import { PayoutAccountDto, PayoutAccountUpdateDto, PayoutAccountCreateDto, PayoutAccountWithRefDto, type PaginatedResult } from "@feedmepos/payment-entity";
1
+ import { PayoutAccountDto, PayoutAccountUpdateDto, PayoutAccountCreateDto, PayoutAccountWithRefDto, type PaginatedResult, FdoOnlinePaymentGateway, FdoPayoutAccountOnlineGatewayOverride } from "@feedmepos/payment-entity";
2
2
  import { F_PAYOUT_ACCOUNT_STATUS, F_PAYOUT_FOR } from "@feedmepos/payment-entity/common/enum";
3
3
  export declare const payoutAccountApi: {
4
4
  read(payload: {
@@ -13,4 +13,8 @@ export declare const payoutAccountApi: {
13
13
  readBusinessPayoutAccounts(): Promise<PayoutAccountWithRefDto[]>;
14
14
  createBusinessPayoutAccounts(payload: PayoutAccountCreateDto): Promise<PayoutAccountWithRefDto>;
15
15
  updateBusinessPayoutAccounts(accountId: string, update: PayoutAccountUpdateDto): Promise<PayoutAccountWithRefDto>;
16
+ updateGateway(accountId: string, update: FdoOnlinePaymentGateway[]): Promise<import("axios").AxiosResponse<any, any>>;
17
+ getChannels(accountId: string): Promise<FdoPayoutAccountOnlineGatewayOverride[]>;
18
+ updateChannels(accountId: string, gatewayOverrides: FdoPayoutAccountOnlineGatewayOverride[]): Promise<any>;
19
+ resetChannels(accountId: string): Promise<any>;
16
20
  };
@@ -1,23 +1,19 @@
1
- import { FdoTerminalDeviceType, UpdateTerminalByIdDto, type PaginatedResult } from "@feedmepos/payment-entity";
2
- import { FdoTerminal } from "@feedmepos/payment-entity";
1
+ import { FdoPortalTerminal, FdoTerminalDeviceType, UpdateTerminalByIdDto, type PaginatedResult } from "@feedmepos/payment-entity";
3
2
  export declare const temrinalApi: {
4
3
  create(payload: {
5
4
  name: string;
6
5
  referenceId: string;
7
- }): Promise<PaginatedResult<FdoTerminal>>;
6
+ }): Promise<PaginatedResult<FdoPortalTerminal>>;
8
7
  read(payload: {
9
8
  searchKey: string;
10
9
  deviceType: FdoTerminalDeviceType | undefined;
11
10
  limit: number;
12
11
  cursor: string;
13
- }): Promise<PaginatedResult<FdoTerminal>>;
14
- readById(id: string): Promise<FdoTerminal>;
15
- updateById(id: string, payload: UpdateTerminalByIdDto): Promise<FdoTerminal>;
12
+ }): Promise<PaginatedResult<FdoPortalTerminal>>;
13
+ readById(id: string): Promise<FdoPortalTerminal>;
14
+ updateById(id: string, payload: UpdateTerminalByIdDto): Promise<FdoPortalTerminal>;
16
15
  getBindCode(id: string): Promise<string>;
17
16
  unbind(id: string): Promise<any>;
18
17
  delete(id: string): Promise<any>;
19
- /**
20
- * Relying on the payout account so need pass in the restaurant id from the payout account
21
- */
22
- getTerminals(restaurantId: string): Promise<FdoTerminal[]>;
18
+ getTerminals(): Promise<FdoPortalTerminal[]>;
23
19
  };
@@ -1,32 +1,33 @@
1
1
  import type { PortalPaymentTransaction } from "@/model/transaction";
2
- import { PaymentRefundByTransactionIdDto, type PaymentTransactionDtoOutput } from "@feedmepos/payment-entity";
2
+ import { FdoPaymentTransactionV2Output, PaymentRefundByTransactionIdDto } from "@feedmepos/payment-entity";
3
3
  import type { F_PAYMENT_TRANSACTION_STATUS } from "@feedmepos/payment-entity/common/enum";
4
4
  export declare const transactionApi: {
5
- readBySettlementId(settlementId: string): Promise<PaymentTransactionDtoOutput[]>;
5
+ readBySettlementId(settlementId: string): Promise<FdoPaymentTransactionV2Output[]>;
6
6
  readTransactions(params: {
7
7
  start: string;
8
8
  end: string;
9
9
  limit: number;
10
10
  skip: number;
11
11
  search: string;
12
- }): Promise<PaymentTransactionDtoOutput[]>;
12
+ }): Promise<FdoPaymentTransactionV2Output[]>;
13
13
  removeTransactionFromSettlement(transactionId: string): Promise<any>;
14
14
  refetchTransaction({ transactionId, }: {
15
15
  transactionId: string;
16
- }): Promise<PaymentTransactionDtoOutput>;
17
- refundTransaction(req: PaymentRefundByTransactionIdDto): Promise<PaymentTransactionDtoOutput>;
18
- renotifyTransaction(transactionId: string): Promise<PaymentTransactionDtoOutput>;
16
+ }): Promise<FdoPaymentTransactionV2Output>;
17
+ refundTransaction(req: PaymentRefundByTransactionIdDto): Promise<FdoPaymentTransactionV2Output>;
18
+ renotifyTransaction(transactionId: string): Promise<FdoPaymentTransactionV2Output>;
19
19
  readRestaurantTransactions(dateRange: {
20
20
  start: string;
21
21
  end: string;
22
- }): Promise<PaymentTransactionDtoOutput[]>;
23
- readAccountTransactions(params: {
22
+ }): Promise<FdoPaymentTransactionV2Output[]>;
23
+ readTransactionsV2(params: {
24
24
  status: F_PAYMENT_TRANSACTION_STATUS[];
25
- accountId: string;
25
+ id: string;
26
+ by: string;
26
27
  start: string;
27
28
  end: string;
28
- }): Promise<PaymentTransactionDtoOutput[]>;
29
- readRestaurantTransactionsBySettlementId(settlementId: string): Promise<PaymentTransactionDtoOutput[]>;
29
+ }): Promise<FdoPaymentTransactionV2Output[]>;
30
+ readRestaurantTransactionsBySettlementId(settlementId: string): Promise<FdoPaymentTransactionV2Output[]>;
30
31
  downloadPortalTransactionReport(dateRange: {
31
32
  startDate: string;
32
33
  endDate: string;