@feedmepos/mf-connect 0.1.38-beta.53 → 0.1.38-beta.54

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 (130) hide show
  1. package/dist/Analytic-Dbr4mp_v.js +760 -0
  2. package/dist/App-NqBYADJf.js +4638 -0
  3. package/dist/AuditLogs-CO7e6FDn.js +1887 -0
  4. package/dist/Bin-8Rp4uPgo.js +166 -0
  5. package/dist/Broadcast-BtpVH1Za.js +232 -0
  6. package/dist/CampaignTypeDialog.vue_vue_type_script_setup_true_lang-BQtKKWEr.js +122 -0
  7. package/dist/Card-4Zn4BOS2.js +911 -0
  8. package/dist/ChipMenu.vue_vue_type_script_setup_true_lang-BPpZZNkr.js +97 -0
  9. package/dist/Collections-CID6ar3E.js +540 -0
  10. package/dist/Credit-ja5L50Xx.js +227 -0
  11. package/dist/CustomSelect.vue_vue_type_script_setup_true_lang-Du7fRSZC.js +128 -0
  12. package/dist/DateRangeChip.vue_vue_type_script_setup_true_lang-eIoPtgO5.js +58 -0
  13. package/dist/EditCampaignSheet.vue_vue_type_script_setup_true_lang-BrNpWK4H.js +3151 -0
  14. package/dist/EffectSheet.vue_vue_type_style_index_0_lang-CA966Y2m.js +347 -0
  15. package/dist/Experience-C62vsbo3.js +228 -0
  16. package/dist/FileSaver.min-NlMItPOc.js +74 -0
  17. package/dist/FilterChip.vue_vue_type_script_setup_true_lang-DaU-9GzO.js +129 -0
  18. package/dist/Game-B26wI3qX.js +297 -0
  19. package/dist/Grab-Bv8-00N7.js +300 -0
  20. package/dist/ImageInput.vue_vue_type_script_setup_true_lang-CZUCcX6P.js +145 -0
  21. package/dist/Index-Q9XmOv74.js +259 -0
  22. package/dist/JsonViewer-v8_C7l5N.js +87 -0
  23. package/dist/LottieAnimation.vue_vue_type_script_setup_true_lang-CyGJxUol.js +18737 -0
  24. package/dist/MainLayout-B1aJoR95.js +41 -0
  25. package/dist/Marketing-BDOwcAPt.js +21761 -0
  26. package/dist/Member-FW0W6G8k.js +281 -0
  27. package/dist/MemberList-CzHecbNC.js +1607 -0
  28. package/dist/MemberOverview-wL_ailso.js +58 -0
  29. package/dist/MemberTransactions-F0MdjjIf.js +45 -0
  30. package/dist/MessageInput.vue_vue_type_script_setup_true_lang-mGN8_HW3.js +60616 -0
  31. package/dist/Mission-BasA92jC.js +301 -0
  32. package/dist/Overview-BNOVz3Yu.js +1079 -0
  33. package/dist/Point-COXAJsM-.js +231 -0
  34. package/dist/Promotion-Bi6v20Gd.js +363 -0
  35. package/dist/Queue-hrZW6VpB.js +260 -0
  36. package/dist/Record-O3cyJ6QB.js +341 -0
  37. package/dist/Reward-SBbJhG9_.js +442 -0
  38. package/dist/RewardGroup.vue_vue_type_script_setup_true_lang-BtbIC3ed.js +150 -0
  39. package/dist/RuleGroup.vue_vue_type_script_setup_true_lang-BMLJFFVa.js +1767 -0
  40. package/dist/Segment-BpBTYskk.js +882 -0
  41. package/dist/SelectItems.vue_vue_type_script_setup_true_lang-DNgXvj4k.js +181 -0
  42. package/dist/SendCollectionSheet.vue_vue_type_script_setup_true_lang-DhfS69Ey.js +189 -0
  43. package/dist/SendVoucherSheet.vue_vue_type_script_setup_true_lang-D9DdkvQT.js +147 -0
  44. package/dist/Setting-CxVFZzjP.js +1993 -0
  45. package/dist/SettingAdvertisements-BZk3M_Hc.js +264 -0
  46. package/dist/Store-DP4lGFVW.js +1936 -0
  47. package/dist/StoreRewards-D1l2IRRe.js +535 -0
  48. package/dist/StoreTransactions.vue_vue_type_script_setup_true_lang-CU88Pm_w.js +1036 -0
  49. package/dist/TargetLocationInput.vue_vue_type_script_setup_true_lang-DSh00AGI.js +8093 -0
  50. package/dist/Tier-DoMCgePj.js +970 -0
  51. package/dist/Title-DLnuu_PJ.js +568 -0
  52. package/dist/Transaction-Buygg6Ph.js +39 -0
  53. package/dist/UserRuleGroup.vue_vue_type_script_setup_true_lang-BqcT-3qP.js +130 -0
  54. package/dist/Voucher-CvYN630q.js +399 -0
  55. package/dist/VoucherEditor.vue_vue_type_script_setup_true_lang-CiCqbC0H.js +421 -0
  56. package/dist/ZodTextField.vue_vue_type_script_setup_true_lang-u89D4fHt.js +56 -0
  57. package/dist/_commonjsHelpers-BkfeUUK-.js +28 -0
  58. package/dist/_plugin-vue_export-helper-CHgC5LLL.js +9 -0
  59. package/dist/app-DlMSf5YR.js +42566 -0
  60. package/dist/app-wDQR6dpb.js +39 -0
  61. package/dist/app.js +7 -0
  62. package/dist/business-d84mGYu6.js +82 -0
  63. package/dist/campaign-BhqGq2Wd.js +219 -0
  64. package/dist/campaign-CpzFl8Vr.js +4 -0
  65. package/dist/campaign-dxPnWblv.js +253 -0
  66. package/dist/campaign.enum-CIVvIQoe.js +21 -0
  67. package/dist/campaign.fn-kLYdI85A.js +776 -0
  68. package/dist/collectible.enum-CIDtQJib.js +19 -0
  69. package/dist/collection.fn-CNN2nNiN.js +26 -0
  70. package/dist/dto-CVYwtrEF.js +222 -0
  71. package/dist/effect-DRmea-gD.js +78 -0
  72. package/dist/email-addresses-TNR2TbqW.js +705 -0
  73. package/dist/export-iakwJdEw.js +97 -0
  74. package/dist/feedme.ico +0 -0
  75. package/dist/helper-BAqCFoJP.js +86 -0
  76. package/dist/index-BGQlQ-rH.js +3 -0
  77. package/dist/index-BiMLx9Jw.js +54 -0
  78. package/dist/index-Bq5ecjww.js +2407 -0
  79. package/dist/index-C0AccDrx.js +38 -0
  80. package/dist/index-CcDhyRpu.js +146 -0
  81. package/dist/index-CoIYCpu6.js +3412 -0
  82. package/dist/index-Cpl43ZrJ.js +30076 -0
  83. package/dist/index-CsaQJMAR.js +66 -0
  84. package/dist/index-D-i8lu6v.js +56 -0
  85. package/dist/index-D1-zAWo7.js +32456 -0
  86. package/dist/index-Dez93NG5.js +8884 -0
  87. package/dist/index-XUH_1QiE.js +31 -0
  88. package/dist/index-Zi8OJK5y.js +76 -0
  89. package/dist/index-mqoS0j9_.js +32 -0
  90. package/dist/index-vh86FiIQ.js +10 -0
  91. package/dist/index.esm2017-ubSVa1qw.js +3069 -0
  92. package/dist/loading-CEchzsWg.js +71 -0
  93. package/dist/lodash-B5I3zXaY.js +3678 -0
  94. package/dist/membership-tg9U6OSP.js +235 -0
  95. package/dist/moment-D7p2TMB-.js +2583 -0
  96. package/dist/money-Bg1OsP6q.js +15 -0
  97. package/dist/number-7KPLaOnN.js +12 -0
  98. package/dist/object-qECH92oz.js +26 -0
  99. package/dist/objectId-dwaoBfJX.js +7 -0
  100. package/dist/objectid-Dut3CHYZ.js +145 -0
  101. package/dist/plugins-DRntVUgl.js +1817 -0
  102. package/dist/reward-8LuLNpDH.js +36 -0
  103. package/dist/rule-CL5SVVMA.js +1951 -0
  104. package/dist/rule-builder-BlOXnmr3.js +102 -0
  105. package/dist/style.css +4 -0
  106. package/dist/template-DAuc1Xyo.js +188 -0
  107. package/dist/tier-BJDhpH6X.js +4 -0
  108. package/dist/tiers/tier=1.png +0 -0
  109. package/dist/tiers/tier=2.png +0 -0
  110. package/dist/tiers/tier=3.png +0 -0
  111. package/dist/tiers/tier=4.png +0 -0
  112. package/dist/timezone-BHgjrrzt.js +1151 -0
  113. package/dist/titles/type=diamond.png +0 -0
  114. package/dist/titles/type=drinks.png +0 -0
  115. package/dist/titles/type=food.png +0 -0
  116. package/dist/titles/type=heart.png +0 -0
  117. package/dist/titles/type=medal.png +0 -0
  118. package/dist/titles/type=spend.png +0 -0
  119. package/dist/titles/type=thank-you.png +0 -0
  120. package/dist/titles/type=thumbs-up.png +0 -0
  121. package/dist/titles/type=years.png +0 -0
  122. package/dist/trigger-DaP3iMr2.js +213 -0
  123. package/dist/tslib.es6-BCqqvLQ_.js +44 -0
  124. package/dist/type_drinks-D6jnpvwV.js +4 -0
  125. package/dist/usePagination-Ds-cuHop.js +223 -0
  126. package/dist/user-Cqmlt7ET.js +55 -0
  127. package/dist/vue-i18n-CcuN6GIY.js +2365 -0
  128. package/dist/xlsx-CCwmYrUx.js +15491 -0
  129. package/dist/zod-BJ5u7W-O.js +91 -0
  130. package/package.json +2 -2
@@ -0,0 +1,760 @@
1
+ import { defineComponent as B, openBlock as i, createElementBlock as k, Fragment as T, renderList as P, createElementVNode as a, toDisplayString as $, createCommentVNode as I, resolveComponent as _, createBlock as V, withCtx as R, createVNode as d, unref as e, ref as h, computed as L, onMounted as q, watch as ee, isRef as K, createSlots as te, createTextVNode as ae, reactive as ne, onBeforeMount as oe, normalizeClass as se } from "vue";
2
+ import { _ as le } from "./campaign-CpzFl8Vr.js";
3
+ import { f as ie } from "./number-7KPLaOnN.js";
4
+ import { C as re } from "./campaign-dxPnWblv.js";
5
+ import { useRouter as Q } from "vue-router";
6
+ import { c as G, u as ce } from "./campaign-BhqGq2Wd.js";
7
+ import { _ as ue } from "./ZodTextField.vue_vue_type_script_setup_true_lang-u89D4fHt.js";
8
+ import { Z as me } from "./zod-BJ5u7W-O.js";
9
+ import { F as de } from "./dto-CVYwtrEF.js";
10
+ import { J as pe } from "./JsonViewer-v8_C7l5N.js";
11
+ import "./index-D1-zAWo7.js";
12
+ import { useSnackbar as fe } from "@feedmepos/ui-library";
13
+ import { u as ye } from "./app-wDQR6dpb.js";
14
+ import { u as ve } from "./loading-CEchzsWg.js";
15
+ import { C as _e } from "./campaign.fn-kLYdI85A.js";
16
+ import { g as ge } from "./object-qECH92oz.js";
17
+ import { u as he } from "./membership-tg9U6OSP.js";
18
+ import { u as be } from "./vue-i18n-CcuN6GIY.js";
19
+ import { c as xe } from "./index-Cpl43ZrJ.js";
20
+ import { h as Ce } from "./moment-D7p2TMB-.js";
21
+ import { m as X } from "./index-Zi8OJK5y.js";
22
+ const ke = { class: "divide-x flex flex-wrap" }, Fe = { class: "fm-typo-en-body-md-400 mb-2 text-fm-color-typo-secondary" }, Se = { class: "fm-typo-en-title-sm-800" }, we = /* @__PURE__ */ B({
23
+ __name: "CampaignStat",
24
+ props: {
25
+ data: {
26
+ type: Object,
27
+ required: !0
28
+ }
29
+ },
30
+ setup(y) {
31
+ const r = y, c = [
32
+ { label: "Credit Received", key: "CREDIT" },
33
+ { label: "EXP Received", key: "POINT" },
34
+ { label: "Points Received", key: "COIN" },
35
+ { label: "Message Sent", key: "BROADCAST" },
36
+ { label: "Vouchers Claimed", key: "VOUCHER" },
37
+ { label: "Users Joined", key: "UNIQUE_USER" }
38
+ ];
39
+ function u(g) {
40
+ var p;
41
+ return ie((p = r.data) == null ? void 0 : p[g], 2, !0) || 0;
42
+ }
43
+ return (g, p) => (i(), k("div", ke, [
44
+ (i(), k(T, null, P(c, (s) => (i(), k(T, null, [
45
+ s.key in y.data ? (i(), k("div", {
46
+ key: s.key,
47
+ class: "px-16"
48
+ }, [
49
+ a("div", Fe, $(s.label), 1),
50
+ a("div", Se, $(u(s.key)), 1)
51
+ ])) : I("", !0)
52
+ ], 64))), 64))
53
+ ]));
54
+ }
55
+ }), $e = { class: "bg-fm-color-neutral-gray-100 gap-4 h-[30px] inline-flex items-center justify-center max-w-[250px] px-8 py-4 rounded-md" }, Ve = { class: "fm-typo-en-body-md-600 overflow-hidden select-none text-ellipsis text-fm-color-typo-secondary whitespace-nowrap" }, Te = /* @__PURE__ */ B({
56
+ __name: "CampaignChip",
57
+ props: {
58
+ type: { type: String, required: !0 },
59
+ icon: {
60
+ type: Object,
61
+ default: () => ({ icon: "circle", color: "typo-sucess" })
62
+ },
63
+ label: {
64
+ type: String,
65
+ default: ""
66
+ }
67
+ },
68
+ setup(y) {
69
+ const c = re[y.type];
70
+ return (u, g) => {
71
+ const p = _("FmIcon"), s = _("FmTooltip");
72
+ return i(), V(s, {
73
+ variant: "plain",
74
+ placement: "top",
75
+ content: y.label
76
+ }, {
77
+ default: R(() => [
78
+ a("div", $e, [
79
+ d(p, {
80
+ name: e(c).icon,
81
+ outline: "",
82
+ size: "sm"
83
+ }, null, 8, ["name"]),
84
+ a("div", Ve, $(y.label), 1),
85
+ d(p, {
86
+ name: y.icon.name,
87
+ color: y.icon.color,
88
+ size: "sm"
89
+ }, null, 8, ["name", "color"])
90
+ ])
91
+ ]),
92
+ _: 1
93
+ }, 8, ["content"]);
94
+ };
95
+ }
96
+ }), Ae = { class: "flex flex-col" }, Re = { class: "flex flex-nowrap items-center justify-between mb-12" }, Ee = { class: "flex gap-4 items-center justify-start" }, Oe = { class: "fm-typo-en-title-sm-800" }, Me = { class: "flex flex-wrap gap-4 items-center mb-16 overflow-y-hidden" }, Pe = /* @__PURE__ */ B({
97
+ __name: "CampaignGroup",
98
+ props: {
99
+ group: {
100
+ type: Object,
101
+ required: !0
102
+ },
103
+ onEdit: {
104
+ type: Function,
105
+ required: !0
106
+ }
107
+ },
108
+ emits: ["changed"],
109
+ setup(y, { emit: r }) {
110
+ Q(), h(!1);
111
+ const c = y, u = h([]), g = L(
112
+ () => u.value.reduce(
113
+ (s, l) => ({ ...s, [l.type]: l.totalAmount }),
114
+ {}
115
+ )
116
+ ), p = L(() => {
117
+ var s;
118
+ return ((s = c.group.pf_campaigns) == null ? void 0 : s.map((l) => ({
119
+ campaign: l,
120
+ label: l.name
121
+ }))) || [];
122
+ });
123
+ return q(async () => {
124
+ u.value = await G.readStats({
125
+ groupId: c.group._id.toString()
126
+ });
127
+ }), (s, l) => {
128
+ const m = _("FmButton"), o = _("FmCard");
129
+ return i(), V(o, {
130
+ class: "mb-24 p-24",
131
+ variant: "outlined"
132
+ }, {
133
+ default: R(() => [
134
+ a("div", Ae, [
135
+ a("div", Re, [
136
+ a("div", Ee, [
137
+ a("div", Oe, $(y.group.name), 1),
138
+ d(m, {
139
+ icon: "edit",
140
+ variant: "tertiary",
141
+ onClick: l[0] || (l[0] = (b) => y.onEdit(y.group))
142
+ })
143
+ ])
144
+ ]),
145
+ a("div", Me, [
146
+ (i(!0), k(T, null, P(e(p), (b) => (i(), V(Te, {
147
+ key: s.index,
148
+ type: b.campaign.type,
149
+ label: b.label
150
+ }, null, 8, ["type", "label"]))), 128))
151
+ ]),
152
+ d(we, { data: e(g) }, null, 8, ["data"])
153
+ ])
154
+ ]),
155
+ _: 1
156
+ });
157
+ };
158
+ }
159
+ }), Be = { class: "ml-32 flex flex-col" }, Ue = /* @__PURE__ */ B({
160
+ __name: "CampaignCard",
161
+ props: {
162
+ title: {},
163
+ items: {},
164
+ modelValue: {}
165
+ },
166
+ emits: ["update:model-value"],
167
+ setup(y, { emit: r }) {
168
+ const c = y, u = r, g = (m) => {
169
+ m ? l.value = c.items.map((o) => o.value) : l.value = [], s.value = m, u("update:model-value", l.value);
170
+ }, p = (m) => {
171
+ l.value = m, s.value = m.length === c.items.length, u("update:model-value", m);
172
+ }, s = h(!1), l = h([]);
173
+ return ee(
174
+ () => c.modelValue,
175
+ () => {
176
+ l.value = c.modelValue.filter(
177
+ (m) => c.items.find((o) => o.value === m)
178
+ );
179
+ }
180
+ ), q(() => {
181
+ l.value = c.modelValue.filter(
182
+ (m) => c.items.find((o) => o.value === m)
183
+ );
184
+ }), (m, o) => {
185
+ const b = _("FmCheckbox"), S = _("FmCard");
186
+ return i(), V(S, {
187
+ variant: "outlined",
188
+ class: "p-16 space-y-8 h-full cursor-pointer select-none xs:col-span-3"
189
+ }, {
190
+ default: R(() => [
191
+ d(b, {
192
+ "model-value": e(s),
193
+ value: "1",
194
+ label: c.title,
195
+ indeterminate: e(l).length > 0,
196
+ "onUpdate:modelValue": g
197
+ }, null, 8, ["model-value", "label", "indeterminate"]),
198
+ a("div", Be, [
199
+ (i(!0), k(T, null, P(c.items, (x, D) => (i(), V(b, {
200
+ key: D,
201
+ "model-value": e(l),
202
+ label: x.label,
203
+ value: x.value,
204
+ "onUpdate:modelValue": p
205
+ }, null, 8, ["model-value", "label", "value"]))), 128))
206
+ ])
207
+ ]),
208
+ _: 1
209
+ });
210
+ };
211
+ }
212
+ }), Ie = { class: "space-y-16" }, Le = { class: "flex items-center" }, De = { class: "fm-typo-en-body-lg-400 text-fm-color-typo-secondary w-[300px]" }, Ge = { class: "space-y-[40px]" }, Ne = /* @__PURE__ */ B({
213
+ __name: "LinkCampaign",
214
+ props: {
215
+ modelValue: {
216
+ type: Array,
217
+ required: !0
218
+ },
219
+ campaigns: {
220
+ type: Object,
221
+ required: !0
222
+ }
223
+ },
224
+ emits: ["update:model-value"],
225
+ setup(y, { emit: r }) {
226
+ const c = h(""), u = h([]), g = y, p = r, s = L(() => Object.entries(g.campaigns).reduce((m, [o, b]) => {
227
+ const S = b.filter(
228
+ (x) => x.label.toLowerCase().includes(c.value.toLowerCase())
229
+ );
230
+ return S.length > 0 && (m[o] = S), m;
231
+ }, {}));
232
+ function l(m, o) {
233
+ u.value = u.value.filter(
234
+ (b) => !o.map((S) => S.value).includes(b)
235
+ ), u.value = [.../* @__PURE__ */ new Set([...u.value, ...m])], p("update:model-value", u.value);
236
+ }
237
+ return q(() => {
238
+ u.value = g.modelValue;
239
+ }), (m, o) => {
240
+ const b = _("FmTextField");
241
+ return i(), k(T, null, [
242
+ d(pe, { json: y.campaigns }, null, 8, ["json"]),
243
+ a("div", Ie, [
244
+ a("div", Le, [
245
+ a("div", De, $(e(u).length) + " campaign(s) linked ", 1),
246
+ d(b, {
247
+ modelValue: e(c),
248
+ "onUpdate:modelValue": o[0] || (o[0] = (S) => K(c) ? c.value = S : null),
249
+ "prepend-icon": "search",
250
+ placeholder: "Search",
251
+ class: "w-full"
252
+ }, null, 8, ["modelValue"])
253
+ ]),
254
+ a("div", Ge, [
255
+ (i(!0), k(T, null, P(e(s), (S, x) => (i(), V(Ue, {
256
+ "model-value": e(u),
257
+ title: x,
258
+ items: S,
259
+ "onUpdate:modelValue": (D) => l(D, S)
260
+ }, null, 8, ["model-value", "title", "items", "onUpdate:modelValue"]))), 256))
261
+ ])
262
+ ])
263
+ ], 64);
264
+ };
265
+ }
266
+ }), je = { class: "flex items-center gap-x-8" }, He = {
267
+ key: 0,
268
+ class: "space-y-16 pr-12"
269
+ }, qe = { class: "flex items-center gap-x-16" }, ze = { class: "fm-typo-en-body-lg-400 text-fm-color-typo-secondary" }, Je = { class: "mt-16" }, Ke = { class: "text-fm-color-typo-secondary fm-typo-en-body-md-600 py-8 px-16 bg-gray-100" }, We = { class: "flex justify-between items-center py-8 px-16 border-b-1" }, Ze = { class: "flex items-center gap-8" }, Qe = /* @__PURE__ */ B({
270
+ __name: "AnalyticSheet",
271
+ emits: ["success"],
272
+ setup(y, { expose: r, emit: c }) {
273
+ const u = c, g = ye();
274
+ fe();
275
+ const p = h(!1), s = h(!1), l = {
276
+ name: "",
277
+ campaigns: []
278
+ }, m = h(""), o = h({ ...l }), b = de.superRefine((n, t) => {
279
+ }), S = h([]), x = h(null), { global: D, minor: z } = ve, W = L(() => {
280
+ const n = b.safeParse(o.value);
281
+ return n.success ? [] : n.error.errors;
282
+ });
283
+ function A(n) {
284
+ var t;
285
+ p.value = !0, n ? (x.value = { ...n }, o.value = { ...n, campaigns: (t = n.pf_campaigns) == null ? void 0 : t.map((F) => F._id) }) : (x.value = null, o.value = { ...l });
286
+ }
287
+ function N() {
288
+ p.value = !1, x.value = null;
289
+ }
290
+ function C() {
291
+ s.value = !0;
292
+ }
293
+ async function f() {
294
+ const n = await G.readAll({
295
+ limit: 1e3,
296
+ skip: 0,
297
+ sortBy: "_id",
298
+ search: "",
299
+ descending: !0
300
+ });
301
+ S.value = n.resources.filter(
302
+ (t) => !["MEMBERSHIP", "REWARD_POOL"].includes(t.type) && !["ISSUE_REWARD"].includes("event" in t ? t == null ? void 0 : t.event.type : "")
303
+ );
304
+ }
305
+ const v = L(() => {
306
+ const n = (F) => F.map((O) => ({
307
+ label: O.name,
308
+ value: O._id
309
+ }));
310
+ return ge(
311
+ S.value,
312
+ (F) => _e.formattedType(F.type),
313
+ n
314
+ );
315
+ }), M = L(() => Object.entries(v.value).reduce(
316
+ (n, [t, F]) => {
317
+ const O = F.filter((H) => {
318
+ var J, w;
319
+ return (w = (J = o.value) == null ? void 0 : J.campaigns) == null ? void 0 : w.includes(H.value);
320
+ }).filter(
321
+ (H) => H.label.toLowerCase().includes(m.value.toLowerCase())
322
+ );
323
+ return O.length > 0 && (n[t] = O), n;
324
+ },
325
+ {}
326
+ ));
327
+ function E(n) {
328
+ var F, O;
329
+ const t = (F = o.value.campaigns) == null ? void 0 : F.indexOf(n);
330
+ t != null && t > -1 && ((O = o.value.campaigns) == null || O.splice(t, 1));
331
+ }
332
+ async function U() {
333
+ b.safeParse(o.value).success && await z(
334
+ async () => {
335
+ var t;
336
+ x.value ? await G.updateGroup(
337
+ (t = x.value) == null ? void 0 : t._id,
338
+ o.value
339
+ ) : await G.createGroup(o.value), u("success"), N();
340
+ },
341
+ {
342
+ message: "Saving group",
343
+ successMessage: "Group saved"
344
+ }
345
+ );
346
+ }
347
+ async function j() {
348
+ await z(
349
+ async () => {
350
+ var n;
351
+ await G.deleteGroup((n = x.value) == null ? void 0 : n._id), u("success"), N();
352
+ },
353
+ {
354
+ message: "Deleting group",
355
+ successMessage: "Group deleted"
356
+ }
357
+ );
358
+ }
359
+ return q(async () => {
360
+ await f();
361
+ }), r({
362
+ showSheet: A,
363
+ hideSheet: N
364
+ }), (n, t) => {
365
+ const F = _("FmButton"), O = _("FmTextField"), H = _("FmList"), J = _("FmSideSheet");
366
+ return i(), V(J, {
367
+ modelValue: e(p),
368
+ "onUpdate:modelValue": t[7] || (t[7] = (w) => K(p) ? p.value = w : null),
369
+ header: e(x) ? "Edit group" : "Add group",
370
+ "dismiss-away": "",
371
+ "close-button": !0,
372
+ "max-width": 550
373
+ }, te({
374
+ "side-sheet-footer": R(() => [
375
+ a("div", Ze, [
376
+ e(s) ? I("", !0) : (i(), k(T, { key: 0 }, [
377
+ d(F, {
378
+ label: "Submit",
379
+ onClick: U,
380
+ disabled: e(W).length > 0 || e(g).isLoading
381
+ }, null, 8, ["disabled"]),
382
+ d(F, {
383
+ label: "Cancel",
384
+ onClick: t[4] || (t[4] = (w) => N()),
385
+ variant: "tertiary"
386
+ }),
387
+ e(x) ? (i(), V(F, {
388
+ key: 0,
389
+ label: "Delete",
390
+ variant: "plain",
391
+ class: "ml-auto fm-color-system-error-300",
392
+ onClick: t[5] || (t[5] = (w) => j())
393
+ })) : I("", !0)
394
+ ], 64)),
395
+ e(s) ? (i(), V(F, {
396
+ key: 1,
397
+ label: "Confirm",
398
+ onClick: t[6] || (t[6] = (w) => s.value = !1)
399
+ })) : I("", !0)
400
+ ])
401
+ ]),
402
+ default: R(() => [
403
+ e(s) ? I("", !0) : (i(), k("div", He, [
404
+ t[9] || (t[9] = a("div", { class: "fm-typo-en-title-sm-800" }, "Group detail", -1)),
405
+ d(ue, {
406
+ modelValue: e(o).name,
407
+ "onUpdate:modelValue": t[1] || (t[1] = (w) => e(o).name = w),
408
+ label: "Name",
409
+ schema: e(me).typeAtPath(e(b), "name")
410
+ }, null, 8, ["modelValue", "schema"]),
411
+ t[10] || (t[10] = a("div", { class: "fm-typo-en-title-sm-800" }, "Link campaign", -1)),
412
+ a("div", qe, [
413
+ a("div", ze, $(e(o).campaigns.length) + " campaign(s) linked ", 1),
414
+ d(O, {
415
+ modelValue: e(m),
416
+ "onUpdate:modelValue": t[2] || (t[2] = (w) => K(m) ? m.value = w : null),
417
+ "prepend-icon": "search",
418
+ placeholder: "Search",
419
+ class: "w-auto"
420
+ }, null, 8, ["modelValue"])
421
+ ]),
422
+ d(F, {
423
+ variant: "plain",
424
+ icon: "link",
425
+ label: "Link Campaign",
426
+ onClick: C
427
+ })
428
+ ])),
429
+ e(s) ? (i(), V(Ne, {
430
+ key: 1,
431
+ modelValue: e(o).campaigns,
432
+ "onUpdate:modelValue": t[3] || (t[3] = (w) => e(o).campaigns = w),
433
+ campaigns: e(v)
434
+ }, null, 8, ["modelValue", "campaigns"])) : I("", !0),
435
+ a("div", Je, [
436
+ e(s) ? I("", !0) : (i(!0), k(T, { key: 0 }, P(e(M), (w, Y) => (i(), k("div", null, [
437
+ a("div", Ke, $(Y), 1),
438
+ d(H, { separator: !0 }, {
439
+ default: R(() => [
440
+ (i(!0), k(T, null, P(w, (Z) => (i(), k("div", We, [
441
+ a("div", null, $(Z.label), 1),
442
+ a("div", null, [
443
+ d(F, {
444
+ icon: "delete",
445
+ onClick: (yt) => E(Z.value),
446
+ variant: "tertiary"
447
+ }, null, 8, ["onClick"])
448
+ ])
449
+ ]))), 256))
450
+ ]),
451
+ _: 2
452
+ }, 1024)
453
+ ]))), 256))
454
+ ])
455
+ ]),
456
+ _: 2
457
+ }, [
458
+ e(s) ? {
459
+ name: "side-sheet-header",
460
+ fn: R(() => [
461
+ a("div", je, [
462
+ d(F, {
463
+ icon: "arrow_back",
464
+ variant: "tertiary",
465
+ onClick: t[0] || (t[0] = (w) => s.value = !1)
466
+ }),
467
+ t[8] || (t[8] = ae("Link campaign ", -1))
468
+ ])
469
+ ]),
470
+ key: "0"
471
+ } : void 0
472
+ ]), 1032, ["modelValue", "header"]);
473
+ };
474
+ }
475
+ }), Xe = {
476
+ class: "flex justify-center",
477
+ style: { height: "400px" }
478
+ }, Ye = /* @__PURE__ */ B({
479
+ __name: "TierDistribution",
480
+ props: {
481
+ data: {},
482
+ metrics: {}
483
+ },
484
+ setup(y) {
485
+ const r = y;
486
+ return (c, u) => {
487
+ const g = _("JsonViewer"), p = _("FmPieChart");
488
+ return i(), k(T, null, [
489
+ d(g, {
490
+ json: r.data
491
+ }, null, 8, ["json"]),
492
+ a("div", Xe, [
493
+ d(p, {
494
+ paragraph: "",
495
+ variant: "doughnut",
496
+ datasets: r.data,
497
+ metrics: r.metrics,
498
+ legend: !1,
499
+ "text-color": "#1C1C1E",
500
+ "text-style": "bold 50px sans-serif",
501
+ height: 400,
502
+ "maintain-aspect-ratio": !1
503
+ }, null, 8, ["datasets", "metrics"])
504
+ ])
505
+ ], 64);
506
+ };
507
+ }
508
+ }), et = { class: "grow" }, tt = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-secondary" }, at = { class: "flex flex-col items-end" }, nt = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-secondary" }, ot = /* @__PURE__ */ B({
509
+ __name: "TopSpentMemberList",
510
+ setup(y) {
511
+ const r = h([]);
512
+ async function c(u) {
513
+ const g = await X.read({
514
+ limit: u,
515
+ skip: 0,
516
+ sortBy: "stats.avgBillSize",
517
+ search: "",
518
+ descending: !0
519
+ });
520
+ r.value = g.resources, console.log(`top ${u} members:`, g.resources);
521
+ }
522
+ return q(async () => {
523
+ await c(3);
524
+ }), (u, g) => {
525
+ const p = _("FmCardHeader"), s = _("FmListItem"), l = _("FmList"), m = _("FmCard");
526
+ return i(), V(m, {
527
+ variant: "outlined",
528
+ class: "p-16"
529
+ }, {
530
+ default: R(() => [
531
+ d(p, { title: "Top spent members" }),
532
+ d(l, { class: "w-full" }, {
533
+ default: R(() => [
534
+ (i(!0), k(T, null, P(e(r), (o) => (i(), V(s, null, {
535
+ default: R(() => [
536
+ a("div", et, [
537
+ a("div", null, $(o.name), 1),
538
+ a("div", tt, $(o.phoneNumber), 1)
539
+ ]),
540
+ a("div", at, [
541
+ a("div", null, $(e(xe.Dinero).fromNumber({
542
+ number: Number(
543
+ o.stats.avgBillSize * o.stats.visitCount || 0
544
+ )
545
+ }).toFormat(!0)), 1),
546
+ a("div", nt, " Last visit " + $(e(Ce)(o.stats.lastVisit).fromNow()), 1)
547
+ ])
548
+ ]),
549
+ _: 2
550
+ }, 1024))), 256))
551
+ ]),
552
+ _: 1
553
+ })
554
+ ]),
555
+ _: 1
556
+ });
557
+ };
558
+ }
559
+ }), st = { class: "px-24 space-y-32 pb-24" }, lt = { class: "space-y-16" }, it = { class: "flex items-center justify-end" }, rt = { class: "fm-typo-en-body-lg-600" }, ct = { class: "grid grid-cols-6 xs:grid-cols-2 gap-4 divide-x xs:divide-x-0" }, ut = { class: "fm-typo-body-md-400 fm-typo-en-body-md-400 mb-2 text-fm-color-typo-secondary" }, mt = { class: "fm-typo-en-title-sm-800" }, dt = { class: "grid grid-cols-3 xs:grid-cols-1 gap-16" }, pt = { class: "fm-typo-body-en-md-400 text-center text-fm-color-typo-secondary" }, ft = { class: "flex gap-16 items-center" }, Ut = /* @__PURE__ */ B({
560
+ __name: "Analytic",
561
+ setup(y) {
562
+ const { t: r } = be(), c = {
563
+ label: r("connect.analytic.addGroup"),
564
+ value: "create",
565
+ isPrimary: !0,
566
+ prependIcon: "add"
567
+ }, u = ce(), g = h(), p = h([]), s = h(""), l = ne({
568
+ totalCampaign: 0,
569
+ totalProgram: 0,
570
+ totalMember: 0,
571
+ totalTier: 0,
572
+ totalTitle: 0
573
+ }), m = h("1"), o = h([]), b = h([]), S = [
574
+ {
575
+ key: r("connect.analytic.summary.totalCampaign"),
576
+ value: () => l.totalCampaign
577
+ },
578
+ {
579
+ key: r("connect.analytic.summary.totalProgram"),
580
+ value: () => l.totalProgram
581
+ },
582
+ {
583
+ key: r("connect.analytic.summary.totalMember"),
584
+ value: () => l.totalMember
585
+ },
586
+ {
587
+ key: r("connect.analytic.summary.totalTitle"),
588
+ value: () => l.totalTitle
589
+ },
590
+ {
591
+ key: r("connect.analytic.summary.totalTier"),
592
+ value: () => l.totalTier
593
+ }
594
+ ];
595
+ function x(C) {
596
+ var f;
597
+ m.value = (/* @__PURE__ */ new Date()).toISOString(), (f = g.value) == null || f.showSheet(C);
598
+ }
599
+ async function D() {
600
+ await u.readGroups();
601
+ const C = await G.readAllGrouped({
602
+ limit: 100,
603
+ skip: 0,
604
+ sortBy: "_id",
605
+ search: "",
606
+ descending: !0
607
+ });
608
+ p.value = C.resources;
609
+ }
610
+ async function z() {
611
+ var M, E, U, j;
612
+ const C = await X.read({
613
+ limit: 1,
614
+ skip: 0,
615
+ sortBy: "_id",
616
+ search: "",
617
+ descending: !1
618
+ }), f = await G.readAll({
619
+ limit: 1e3,
620
+ skip: 0,
621
+ sortBy: "_id",
622
+ search: "",
623
+ descending: !1
624
+ });
625
+ l.totalCampaign = ((M = f.resources) == null ? void 0 : M.filter(
626
+ (n) => ["PROMOTION", "VOUCHER", "BROADCAST"].includes(n.type) && !["ISSUE_REWARD"].includes("event" in n ? n == null ? void 0 : n.event.type : "")
627
+ ).length) ?? 0, l.totalProgram = ((E = f.resources) == null ? void 0 : E.filter(
628
+ (n) => ["POINT", "COIN", "CREDIT", "GAME", "MISSION"].includes(n.type)
629
+ ).length) ?? 0, l.totalMember = C.meta.totalResources ?? 0;
630
+ const v = f.resources.find(
631
+ (n) => n.type === "MEMBERSHIP"
632
+ );
633
+ l.totalTier = ((U = v == null ? void 0 : v.tiers) == null ? void 0 : U.length) ?? 0, l.totalTitle = ((j = v == null ? void 0 : v.titles) == null ? void 0 : j.length) ?? 0;
634
+ }
635
+ const W = L(() => p.value.filter((C) => {
636
+ var f;
637
+ return C.name.includes(s.value) || ((f = C.pf_campaigns) == null ? void 0 : f.filter((v) => v.name.includes(s.value)).length);
638
+ })), A = he();
639
+ Q(), h(!0), L(() => {
640
+ var C, f, v, M;
641
+ return !A.storeOption || !A.storeOption.company ? -1 : !A.payoutAccount || !A.payoutAccount.enable || A.payoutAccount.status != "APPROVED" ? 0 : (f = (C = A.store) == null ? void 0 : C.categories) != null && f.length ? (M = (v = A.store) == null ? void 0 : v.categories) != null && M.some(
642
+ (E) => E.bundles.some((U) => U.isFeedvibe)
643
+ ) ? 3 : 2 : 1;
644
+ });
645
+ function N() {
646
+ const C = A.sortedTiers;
647
+ b.value = (C == null ? void 0 : C.map((v) => v.name)) || [];
648
+ const f = C.map((v) => (v == null ? void 0 : v.member_count) || 0) || [];
649
+ o.value = [
650
+ {
651
+ label: "Total Members",
652
+ data: f,
653
+ backgroundColor: [
654
+ "#FF5D53",
655
+ "#007BA7",
656
+ "#FCA23E",
657
+ "#8CE6D7",
658
+ "#73C8E6",
659
+ "#F2F2F7"
660
+ ],
661
+ hoverOffset: 5
662
+ }
663
+ ];
664
+ }
665
+ return oe(async () => {
666
+ await u.read(), await D(), await z(), await A.readMemberStore(), await A.readMembership(), await N(), await A.readPayoutAccount();
667
+ }), (C, f) => {
668
+ const v = _("FmPageHead"), M = _("FmSearch"), E = _("FmCard"), U = _("FmCardHeader"), j = _("FmButton");
669
+ return i(), k(T, null, [
670
+ d(v, {
671
+ title: e(r)("connect.analytic.title"),
672
+ actions: e(p).length > 0 ? [c] : [],
673
+ "onClick:action": f[0] || (f[0] = (n) => x())
674
+ }, null, 8, ["title", "actions"]),
675
+ a("div", st, [
676
+ a("div", lt, [
677
+ a("div", it, [
678
+ d(M, {
679
+ class: "xs:hidden",
680
+ modelValue: e(s),
681
+ "onUpdate:modelValue": f[1] || (f[1] = (n) => K(s) ? s.value = n : null),
682
+ placeholder: e(r)("connect.analytic.search"),
683
+ collapsible: ""
684
+ }, null, 8, ["modelValue", "placeholder"])
685
+ ]),
686
+ d(E, {
687
+ variant: "outlined",
688
+ class: "flex flex-col gap-16 p-16"
689
+ }, {
690
+ default: R(() => [
691
+ a("div", rt, $(e(r)("connect.analytic.summary.title")), 1),
692
+ a("div", ct, [
693
+ (i(), k(T, null, P(S, (n, t) => a("div", {
694
+ key: n.key,
695
+ class: se(["px-8", { "xs:!border-r": t % 2 == 0 }])
696
+ }, [
697
+ a("div", ut, $(n.key), 1),
698
+ a("div", mt, $(n.value()), 1)
699
+ ], 2)), 64))
700
+ ])
701
+ ]),
702
+ _: 1
703
+ })
704
+ ]),
705
+ a("div", dt, [
706
+ d(E, {
707
+ variant: "outlined",
708
+ class: "p-16"
709
+ }, {
710
+ default: R(() => [
711
+ d(U, { title: "Tier Distribution" }),
712
+ d(Ye, {
713
+ data: e(o),
714
+ metrics: e(b)
715
+ }, null, 8, ["data", "metrics"])
716
+ ]),
717
+ _: 1
718
+ }),
719
+ d(ot)
720
+ ]),
721
+ e(p).length ? I("", !0) : (i(), V(E, {
722
+ key: 0,
723
+ variant: "outlined",
724
+ class: "flex flex-col gap-y-24 items-center p-16"
725
+ }, {
726
+ default: R(() => [
727
+ f[3] || (f[3] = a("img", {
728
+ src: le,
729
+ class: "w-[150px]"
730
+ }, null, -1)),
731
+ f[4] || (f[4] = a("div", { class: "fm-typo-en-title-sm-800 text-center" }, " Create campaign group to track performance ", -1)),
732
+ a("div", pt, $(e(r)("connect.analytic.emptyState.description")), 1),
733
+ a("div", ft, [
734
+ d(j, {
735
+ label: e(r)("connect.analytic.emptyState.action"),
736
+ icon: "add",
737
+ onClick: f[2] || (f[2] = (n) => x())
738
+ }, null, 8, ["label"])
739
+ ])
740
+ ]),
741
+ _: 1
742
+ })),
743
+ (i(!0), k(T, null, P(e(W), (n) => (i(), V(Pe, {
744
+ key: n._id.toString(),
745
+ group: n,
746
+ "on-edit": x
747
+ }, null, 8, ["group"]))), 128)),
748
+ d(Qe, {
749
+ ref_key: "sheetRef",
750
+ ref: g,
751
+ onSuccess: D
752
+ }, null, 512)
753
+ ])
754
+ ], 64);
755
+ };
756
+ }
757
+ });
758
+ export {
759
+ Ut as default
760
+ };