@feedmepos/mf-connect 0.1.98-beta.28 → 0.1.98-beta.29
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.
- package/dist/{App-vdoxvLFM.js → App-C6SKcn3e.js} +8 -8
- package/dist/{AuditLogs-Dd671Ml7.js → AuditLogs-DLanmOme.js} +9 -9
- package/dist/{Bin-DCSouVzT.js → Bin-BwPh6VEN.js} +8 -8
- package/dist/{Broadcast-DLwey15I.js → Broadcast-Bb8A3hT8.js} +11 -11
- package/dist/{CampaignAnalytic-BZdvJVIC.js → CampaignAnalytic-DJdsyWVq.js} +7 -7
- package/dist/{CampaignTypeDialog.vue_vue_type_script_setup_true_lang-Btdm4D7p.js → CampaignTypeDialog.vue_vue_type_script_setup_true_lang-CJBuv8_e.js} +6 -6
- package/dist/{Card-BdSNr4Tp.js → Card-T39UgpKq.js} +18 -18
- package/dist/{Collections-C7LD07as.js → Collections-BgXdN67W.js} +8 -8
- package/dist/{Credit-K-PhmWE7.js → Credit-CAXuk9IA.js} +12 -12
- package/dist/{EditCampaignSheet.vue_vue_type_script_setup_true_lang-FNHOOVZ_.js → EditCampaignSheet.vue_vue_type_script_setup_true_lang-CtjUO-w-.js} +31 -31
- package/dist/{EffectSheet.vue_vue_type_style_index_0_lang-BWLcw_KR.js → EffectSheet.vue_vue_type_style_index_0_lang-DbIFBcTv.js} +6 -6
- package/dist/{Experience-8Gq0NycZ.js → Experience-a7VoQ3sI.js} +12 -12
- package/dist/{FileSaver.min-CnXhZKnQ.js → FileSaver.min-DRM39Joc.js} +1 -1
- package/dist/{Game-CXhFxtzj.js → Game-Jnl9GQUL.js} +13 -13
- package/dist/{Grab-BCSMdfBr.js → Grab-BVElbSqe.js} +9 -9
- package/dist/{ImageInput.vue_vue_type_script_setup_true_lang-CAYpf1jU.js → ImageInput.vue_vue_type_script_setup_true_lang-Bwe_y-ko.js} +1 -1
- package/dist/{Index-0yJ1TIGO.js → Index-CuJAHnS_.js} +10 -10
- package/dist/{LocationPicker.vue_vue_type_script_setup_true_lang-BodcWHEk.js → LocationPicker.vue_vue_type_script_setup_true_lang-rO5tkpq-.js} +1 -1
- package/dist/{LottieAnimation.vue_vue_type_script_setup_true_lang-DGh5fUNE.js → LottieAnimation.vue_vue_type_script_setup_true_lang-BJ1RH8SV.js} +1 -1
- package/dist/{LoyaltyDashboard-DUKvt3sY.js → LoyaltyDashboard-CoqplSHE.js} +292 -286
- package/dist/{MainLayout-DQyAxKMU.js → MainLayout-BzSsNqGq.js} +1 -1
- package/dist/{Marketing-C0RikpQ7.js → Marketing-DKYR_3sp.js} +4 -4
- package/dist/{MarketingMaterialEdit-Di_11eIh.js → MarketingMaterialEdit-B_G6n15A.js} +6 -6
- package/dist/{Member-Bl-AuJIa.js → Member-CKlY8zlf.js} +11 -11
- package/dist/{MemberList-Bu1vZp5s.js → MemberList-BTUR8O72.js} +25 -25
- package/dist/{MemberTransactions-Bp7EPQNo.js → MemberTransactions-DzIE_P1B.js} +1 -1
- package/dist/{MessageInput.vue_vue_type_script_setup_true_lang-DeaT_Xm4.js → MessageInput.vue_vue_type_script_setup_true_lang-DcMfsgZ1.js} +9 -9
- package/dist/{MetricInfoTooltip.vue_vue_type_script_setup_true_lang-B1Yj3odA.js → MetricInfoTooltip.vue_vue_type_script_setup_true_lang-Bg_0YlwG.js} +1 -1
- package/dist/{Mission-B3u3Lx_w.js → Mission-1ncWxSdf.js} +13 -13
- package/dist/{Overview-Bgzfp_Tl.js → Overview-D5sIMjvk.js} +18 -18
- package/dist/{Overview-BXLInkPv.js → Overview-DrxddDK9.js} +3 -3
- package/dist/{Point-BoctHcSe.js → Point-DC52lE-_.js} +12 -12
- package/dist/{Promotion-msvxUuSW.js → Promotion-CRZPLyp7.js} +13 -13
- package/dist/{Queue-BuxPR4lh.js → Queue-CxdUed2v.js} +10 -10
- package/dist/{Record-Cs-hiWHr.js → Record-DlTP_5Lz.js} +9 -9
- package/dist/{Review-BcEj-NeT.js → Review-BEa_KPNl.js} +2 -2
- package/dist/{ReviewFacebookCallback-Baq3lYDf.js → ReviewFacebookCallback-Ei_2galU.js} +5 -5
- package/dist/{ReviewGoogleCallback-DpiWSyzD.js → ReviewGoogleCallback-BlnsJGH_.js} +5 -5
- package/dist/{Reward-BIhCVUH-.js → Reward-kGTnxDld.js} +16 -16
- package/dist/{RewardGroup.vue_vue_type_script_setup_true_lang-UrbsUOQb.js → RewardGroup.vue_vue_type_script_setup_true_lang-tLd1yQ-w.js} +11 -11
- package/dist/{RuleGroup.vue_vue_type_script_setup_true_lang-D-gNi6X7.js → RuleGroup.vue_vue_type_script_setup_true_lang-CaCtUBR-.js} +14 -14
- package/dist/{Segment-CJ3dp0Du.js → Segment-BY6wtjrW.js} +24 -24
- package/dist/{SelectItems.vue_vue_type_script_setup_true_lang-BQ2EMgUP.js → SelectItems.vue_vue_type_script_setup_true_lang-DJHRvEFh.js} +2 -2
- package/dist/{SendCollectionSheet.vue_vue_type_script_setup_true_lang-C1d1lpqt.js → SendCollectionSheet.vue_vue_type_script_setup_true_lang-Q1UBGIUL.js} +12 -12
- package/dist/{SendVoucherSheet.vue_vue_type_script_setup_true_lang-DqEVDhK3.js → SendVoucherSheet.vue_vue_type_script_setup_true_lang-BNIIdyGx.js} +4 -4
- package/dist/{Setting-DVhYvXVE.js → Setting-JLxmUT-3.js} +14 -14
- package/dist/{SettingAdvertisements-CHydQ7ng.js → SettingAdvertisements-fnPJSM_M.js} +12 -12
- package/dist/{Settings-DHzLLa4K.js → Settings-DBfHai7E.js} +5 -5
- package/dist/{Store-_Y3hBXzK.js → Store-BImPOOCu.js} +21 -21
- package/dist/{StoreRewards-BWn2BU0m.js → StoreRewards-CzQrnnKE.js} +15 -15
- package/dist/{StoreTransactions.vue_vue_type_script_setup_true_lang-C63tzKMN.js → StoreTransactions.vue_vue_type_script_setup_true_lang-DE644ZhH.js} +20 -20
- package/dist/{TargetLocationInput.vue_vue_type_script_setup_true_lang-Doa4H9JC.js → TargetLocationInput.vue_vue_type_script_setup_true_lang-yO4a7kHx.js} +2 -2
- package/dist/{Tier-DViMtkCl.js → Tier-DnfoT21r.js} +24 -24
- package/dist/{Title-BGYaz7my.js → Title-C01c9r9E.js} +21 -21
- package/dist/{Transaction-BCGhRDl0.js → Transaction-E2WtTU1S.js} +2 -2
- package/dist/{UserRuleGroup.vue_vue_type_script_setup_true_lang-DpH5YWXm.js → UserRuleGroup.vue_vue_type_script_setup_true_lang-B_b_EwJ4.js} +6 -6
- package/dist/{Voucher-BrTTNc6r.js → Voucher-DHbSKWBZ.js} +14 -14
- package/dist/{VoucherEditor.vue_vue_type_script_setup_true_lang-Dpq4WzIc.js → VoucherEditor.vue_vue_type_script_setup_true_lang-Vg5CUiP1.js} +12 -12
- package/dist/{ZodTextField.vue_vue_type_script_setup_true_lang-BGo58q5X.js → ZodTextField.vue_vue_type_script_setup_true_lang-CMaT0y_u.js} +2 -2
- package/dist/{app-DNraegzu.js → app-CM5BqaSH.js} +236 -236
- package/dist/app.js +1 -1
- package/dist/{business-cXZbJF8S.js → business-BvnASP7F.js} +1 -1
- package/dist/{campaign-C1doH_1s.js → campaign-5Lx-yf4V.js} +7 -7
- package/dist/{campaign-wqMNOU6b.js → campaign-C6v_uFcy.js} +2 -2
- package/dist/{campaign.fn-DXio3P61.js → campaign.fn-zKWtYRyl.js} +36 -36
- package/dist/{collection.fn-BsC8rIYd.js → collection.fn-Dt2pbVyc.js} +2 -2
- package/dist/{duplicateCampaign-f_tJs2tH.js → duplicateCampaign-CLhjopho.js} +2 -2
- package/dist/{effect-CACluJcx.js → effect-WmiqUsqx.js} +1 -1
- package/dist/{email-addresses-COkYUh_g.js → email-addresses-Bp4P9l1W.js} +2 -2
- package/dist/{export-CHXEKtZZ.js → export-BUeNaYcV.js} +3 -3
- package/dist/{helper-HHjY-Adt.js → helper-DT4JOYil.js} +1 -1
- package/dist/{index-CfZFUdYT.js → index-50OcBlYJ.js} +6 -6
- package/dist/{index-B73E2SKv.js → index-9_3ZVwqb.js} +1 -1
- package/dist/{index-AvL0-p38.js → index-B9vP8FgY.js} +1 -1
- package/dist/{index-B0u8xoHU.js → index-CHXZRu1p.js} +1 -1
- package/dist/{index-De2lsQfK.js → index-CLpsbDWv.js} +1 -1
- package/dist/{index-ElYwTq9E.js → index-CQwWjtRW.js} +3 -3
- package/dist/{index-DrAvYOCk.js → index-CSpG45P_.js} +1 -1
- package/dist/{index-CsRq9ddQ.js → index-CdOtbg_y.js} +1 -1
- package/dist/{index-CMbVv73b.js → index-Cif2BYaH.js} +1 -1
- package/dist/{index-BmVOesYC.js → index-DFdzcoYH.js} +2 -2
- package/dist/{index-CQwQH7qe.js → index-DqosJEqz.js} +2 -2
- package/dist/{index-B4-1LpXk.js → index-FuKsDUKZ.js} +6 -6
- package/dist/{index-BDXxszsL.js → index-OmxC3X1w.js} +2 -2
- package/dist/{index-C6GCIyfP.js → index-VZ-Z0Zrl.js} +2 -2
- package/dist/{index-UEVu7oHd.js → index-c6Rje4su.js} +1 -1
- package/dist/{index.esm2017-BXOcPILo.js → index.esm2017-DUMZURZY.js} +1 -1
- package/dist/{loading-BZ7Ck-yY.js → loading-CBV3B-Wr.js} +1 -1
- package/dist/{lodash-DSnGIIDb.js → lodash-I1sCbRfp.js} +1 -1
- package/dist/{membership-Vq5JO6zX.js → membership-BM9sayIX.js} +2 -2
- package/dist/{money-CgbXuf2f.js → money-xHXXFSJq.js} +1 -1
- package/dist/{number-wzsMi27N.js → number-Bh-Ef6_V.js} +1 -1
- package/dist/{objectid-BHJpiO-t.js → objectid-BeEZ-H9e.js} +10 -10
- package/dist/{plugins-KCQ7NW4T.js → plugins-CxKwYiFZ.js} +3 -3
- package/dist/{reward-BLJMexZT.js → reward-d1AoIumo.js} +1 -1
- package/dist/{rule-DfpV-nKb.js → rule-CthdjBtY.js} +3 -3
- package/dist/{rule-builder-B7afa19M.js → rule-builder-4aJCfmNr.js} +1 -1
- package/dist/{template-B_pkV7b2.js → template-DG0K5ImH.js} +6 -6
- package/dist/{timezone-ImDJv5tQ.js → timezone-CL5ViijC.js} +1 -1
- package/dist/{trigger-BDJgP_o_.js → trigger-CNIRXSVD.js} +5 -5
- package/dist/{useMarketingMaterialActions-DJ5uFa8A.js → useMarketingMaterialActions-BCiSyQIs.js} +3 -3
- package/dist/{usePagination-D7bVPh5n.js → usePagination-Dg7LLsT6.js} +1 -1
- package/dist/{user-Cs2mVyti.js → user-tT7haw6s.js} +1 -1
- package/dist/{vue-i18n-BAXWivDJ.js → vue-i18n-DJ7dtCU4.js} +333 -333
- package/dist/{xlsx-bLou7qsN.js → xlsx-DLWH8mFg.js} +1 -1
- package/dist/{zod-BCeE9I0g.js → zod-BxXuySeD.js} +1 -1
- package/package.json +1 -1
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { defineComponent as
|
|
1
|
+
import { defineComponent as I, resolveComponent as _, openBlock as l, createBlock as L, withCtx as D, createElementVNode as t, createVNode as u, unref as f, createTextVNode as te, createElementBlock as p, Fragment as F, renderList as B, normalizeClass as A, toDisplayString as d, createCommentVNode as U, normalizeStyle as He, computed as w, ref as x, watch as ge, onMounted as ze, nextTick as Ye } from "vue";
|
|
2
2
|
import { h as he } from "./moment-D7p2TMB-.js";
|
|
3
|
-
import { g as R, S as je, b as Ge, c as Je } from "./index-
|
|
3
|
+
import { g as R, S as je, b as Ge, c as Je } from "./index-DFdzcoYH.js";
|
|
4
4
|
import { RouterLink as Me, useRouter as Ke } from "vue-router";
|
|
5
|
-
import { c as We } from "./index-
|
|
6
|
-
import { _ as T } from "./MetricInfoTooltip.vue_vue_type_script_setup_true_lang-
|
|
5
|
+
import { c as We } from "./index-Cif2BYaH.js";
|
|
6
|
+
import { _ as T } from "./MetricInfoTooltip.vue_vue_type_script_setup_true_lang-Bg_0YlwG.js";
|
|
7
7
|
import { _ as Qe } from "./FilterChip.vue_vue_type_script_setup_true_lang-DaU-9GzO.js";
|
|
8
8
|
import { _ as xe } from "./DateRangeChip.vue_vue_type_script_setup_true_lang-eIoPtgO5.js";
|
|
9
|
-
import { u as Xe } from "./loading-
|
|
10
|
-
import { u as Ze } from "./business-
|
|
11
|
-
import { C as _e } from "./timezone-
|
|
9
|
+
import { u as Xe } from "./loading-CBV3B-Wr.js";
|
|
10
|
+
import { u as Ze } from "./business-BvnASP7F.js";
|
|
11
|
+
import { C as _e } from "./timezone-CL5ViijC.js";
|
|
12
12
|
import { useCoreStore as et } from "@feedmepos/mf-common";
|
|
13
|
-
import { m as V } from "./index-
|
|
14
|
-
import { t as tt } from "./money-
|
|
13
|
+
import { m as V } from "./index-B9vP8FgY.js";
|
|
14
|
+
import { t as tt } from "./money-xHXXFSJq.js";
|
|
15
15
|
const rt = { class: "flex items-center mb-14" }, st = {
|
|
16
16
|
key: 0,
|
|
17
17
|
class: "fm-typo-en-body-sm-400 text-fm-color-typo-secondary py-10"
|
|
@@ -21,10 +21,10 @@ const rt = { class: "flex items-center mb-14" }, st = {
|
|
|
21
21
|
}, at = {
|
|
22
22
|
key: 2,
|
|
23
23
|
class: "flex flex-col"
|
|
24
|
-
}, nt = { class: "flex-1 min-w-0" }, it = { class: "fm-typo-en-body-sm-600 whitespace-nowrap overflow-hidden text-ellipsis" }, lt = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary mt-2" }, dt = { class: "text-right flex-shrink-0" }, ct = { class: "fm-typo-en-body-lg-600" }, mt = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary mt-2" },
|
|
24
|
+
}, nt = { class: "flex-1 min-w-0" }, it = { class: "fm-typo-en-body-sm-600 whitespace-nowrap overflow-hidden text-ellipsis" }, lt = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary mt-2" }, dt = { class: "text-right flex-shrink-0" }, ct = { class: "fm-typo-en-body-lg-600" }, mt = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary mt-2" }, pt = {
|
|
25
25
|
key: 3,
|
|
26
26
|
class: "fm-typo-en-body-sm-400 text-fm-color-typo-secondary py-10"
|
|
27
|
-
},
|
|
27
|
+
}, ut = /* @__PURE__ */ I({
|
|
28
28
|
__name: "CampaignActivityList",
|
|
29
29
|
props: {
|
|
30
30
|
campaigns: {},
|
|
@@ -32,16 +32,16 @@ const rt = { class: "flex items-center mb-14" }, st = {
|
|
|
32
32
|
error: { type: Boolean }
|
|
33
33
|
},
|
|
34
34
|
setup(e) {
|
|
35
|
-
return (
|
|
35
|
+
return (s, r) => {
|
|
36
36
|
const n = _("FmCard");
|
|
37
|
-
return l(),
|
|
37
|
+
return l(), L(n, {
|
|
38
38
|
variant: "outlined",
|
|
39
39
|
class: "p-24"
|
|
40
40
|
}, {
|
|
41
41
|
default: D(() => [
|
|
42
42
|
t("div", rt, [
|
|
43
43
|
r[1] || (r[1] = t("div", { class: "flex-1 fm-typo-en-body-md-600" }, "Recent campaigns", -1)),
|
|
44
|
-
|
|
44
|
+
u(f(Me), {
|
|
45
45
|
to: "/campaign",
|
|
46
46
|
class: "fm-typo-en-body-sm-600 text-fm-color-primary no-underline"
|
|
47
47
|
}, {
|
|
@@ -51,24 +51,24 @@ const rt = { class: "flex items-center mb-14" }, st = {
|
|
|
51
51
|
_: 1
|
|
52
52
|
})
|
|
53
53
|
]),
|
|
54
|
-
e.loading ? (l(),
|
|
55
|
-
(l(!0),
|
|
56
|
-
key:
|
|
54
|
+
e.loading ? (l(), p("div", st, " Loading campaigns. ")) : e.error ? (l(), p("div", ot, " Unable to load campaigns. ")) : e.campaigns.length ? (l(), p("div", at, [
|
|
55
|
+
(l(!0), p(F, null, B(e.campaigns, (o) => (l(), p("div", {
|
|
56
|
+
key: o.id,
|
|
57
57
|
class: "flex items-start gap-10 py-10 border-b border-fm-color-neutral-gray-100 last:border-b-0"
|
|
58
58
|
}, [
|
|
59
59
|
t("div", {
|
|
60
|
-
class:
|
|
60
|
+
class: A(["w-7 h-7 rounded-full bg-current flex-shrink-0 mt-5", o.statusClass])
|
|
61
61
|
}, null, 2),
|
|
62
62
|
t("div", nt, [
|
|
63
|
-
t("div", it, d(
|
|
64
|
-
t("div", lt, d(
|
|
63
|
+
t("div", it, d(o.name), 1),
|
|
64
|
+
t("div", lt, d(o.type), 1)
|
|
65
65
|
]),
|
|
66
66
|
t("div", dt, [
|
|
67
|
-
t("div", ct, d(
|
|
68
|
-
t("div", mt, d(
|
|
67
|
+
t("div", ct, d(o.metric), 1),
|
|
68
|
+
t("div", mt, d(o.metricLabel), 1)
|
|
69
69
|
])
|
|
70
70
|
]))), 128))
|
|
71
|
-
])) : (l(),
|
|
71
|
+
])) : (l(), p("div", pt, " No campaigns are available for this location. "))
|
|
72
72
|
]),
|
|
73
73
|
_: 1
|
|
74
74
|
});
|
|
@@ -77,56 +77,56 @@ const rt = { class: "flex items-center mb-14" }, st = {
|
|
|
77
77
|
}), ft = { class: "flex items-center gap-8" }, bt = { class: "w-[30px] h-[30px] bg-fm-color-primary-oats flex items-center justify-center flex-shrink-0 fm-corner-radius-md" }, yt = { class: "bg-fm-color-primary-oats p-14 fm-corner-radius-md" }, vt = { class: "fm-typo-en-body-md-600 mb-6" }, gt = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-secondary" }, ht = { class: "flex flex-col gap-6" }, xt = { class: "border-t border-fm-color-neutral-gray-100 pt-12 flex flex-col gap-3" }, _t = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-secondary" }, wt = {
|
|
78
78
|
key: 1,
|
|
79
79
|
class: "bg-fm-color-neutral-gray-100 rounded-10 p-14 fm-typo-en-body-sm-400 text-fm-color-typo-secondary"
|
|
80
|
-
}, Mt = /* @__PURE__ */
|
|
80
|
+
}, Mt = /* @__PURE__ */ I({
|
|
81
81
|
__name: "InsightPanel",
|
|
82
82
|
props: {
|
|
83
83
|
insight: {}
|
|
84
84
|
},
|
|
85
85
|
emits: ["navigate"],
|
|
86
|
-
setup(e, { emit:
|
|
87
|
-
const r =
|
|
88
|
-
return (n,
|
|
86
|
+
setup(e, { emit: s }) {
|
|
87
|
+
const r = s;
|
|
88
|
+
return (n, o) => {
|
|
89
89
|
const i = _("FmIcon"), m = _("FmButton"), b = _("FmCard");
|
|
90
|
-
return l(),
|
|
90
|
+
return l(), L(b, {
|
|
91
91
|
variant: "outlined",
|
|
92
92
|
class: "p-24 flex flex-col gap-14"
|
|
93
93
|
}, {
|
|
94
94
|
default: D(() => [
|
|
95
95
|
t("div", ft, [
|
|
96
96
|
t("div", bt, [
|
|
97
|
-
|
|
97
|
+
u(i, {
|
|
98
98
|
name: "info",
|
|
99
99
|
outline: "",
|
|
100
100
|
size: "sm",
|
|
101
101
|
class: "!text-fm-color-primary"
|
|
102
102
|
})
|
|
103
103
|
]),
|
|
104
|
-
|
|
104
|
+
o[1] || (o[1] = t("div", { class: "fm-typo-en-body-md-600" }, "Action insight", -1))
|
|
105
105
|
]),
|
|
106
|
-
e.insight ? (l(),
|
|
106
|
+
e.insight ? (l(), p(F, { key: 0 }, [
|
|
107
107
|
t("div", yt, [
|
|
108
108
|
t("div", vt, d(e.insight.title), 1),
|
|
109
109
|
t("div", gt, d(e.insight.body), 1)
|
|
110
110
|
]),
|
|
111
111
|
t("div", ht, [
|
|
112
|
-
|
|
113
|
-
|
|
112
|
+
o[2] || (o[2] = t("div", { class: "fm-typo-en-body-sm-600 text-fm-color-typo-tertiary uppercase tracking-wide mb-1" }, " Suggested action ", -1)),
|
|
113
|
+
u(m, {
|
|
114
114
|
label: e.insight.action.label,
|
|
115
115
|
"append-icon": "arrow_forward",
|
|
116
116
|
class: "!justify-between",
|
|
117
|
-
onClick:
|
|
117
|
+
onClick: o[0] || (o[0] = (y) => r("navigate", e.insight.action.path))
|
|
118
118
|
}, null, 8, ["label"])
|
|
119
119
|
]),
|
|
120
120
|
t("div", xt, [
|
|
121
|
-
|
|
122
|
-
(l(!0),
|
|
121
|
+
o[3] || (o[3] = t("div", { class: "fm-typo-en-body-sm-600 text-fm-color-typo-tertiary uppercase tracking-wide mb-1" }, " Supporting signal ", -1)),
|
|
122
|
+
(l(!0), p(F, null, B(e.insight.signals, (y) => (l(), p("li", {
|
|
123
123
|
key: y.text,
|
|
124
124
|
class: "flex items-start gap-7"
|
|
125
125
|
}, [
|
|
126
126
|
t("ul", _t, d(y.text), 1)
|
|
127
127
|
]))), 128))
|
|
128
128
|
])
|
|
129
|
-
], 64)) : (l(),
|
|
129
|
+
], 64)) : (l(), p("div", wt, " More member activity is needed before a clear action can be suggested. "))
|
|
130
130
|
]),
|
|
131
131
|
_: 1
|
|
132
132
|
});
|
|
@@ -135,16 +135,16 @@ const rt = { class: "flex items-center mb-14" }, st = {
|
|
|
135
135
|
}), St = { class: "grid grid-cols-5 xs:grid-cols-2 gap-12" }, Rt = { class: "flex items-center gap-8" }, Ct = { class: "w-[30px] h-[30px] rounded-8 bg-[#FFF6EE] flex items-center justify-center flex-shrink-0" }, $t = { class: "fm-typo-en-body-sm-600 text-fm-color-typo-secondary flex-1 min-w-0" }, Ft = { class: "fm-typo-en-title-sm-800 text-fm-color-typo-primary whitespace-nowrap overflow-hidden text-ellipsis" }, Dt = {
|
|
136
136
|
key: 0,
|
|
137
137
|
class: "text-fm-color-typo-success fm-typo-en-body-sm-600 -mt-4"
|
|
138
|
-
}, kt = { class: "flex items-center gap-4 flex-wrap" }, Pt = /* @__PURE__ */
|
|
138
|
+
}, kt = { class: "flex items-center gap-4 flex-wrap" }, Pt = /* @__PURE__ */ I({
|
|
139
139
|
__name: "KpiStrip",
|
|
140
140
|
props: {
|
|
141
141
|
kpis: {}
|
|
142
142
|
},
|
|
143
143
|
setup(e) {
|
|
144
|
-
return (
|
|
145
|
-
const n = _("FmIcon"),
|
|
146
|
-
return l(),
|
|
147
|
-
(l(!0),
|
|
144
|
+
return (s, r) => {
|
|
145
|
+
const n = _("FmIcon"), o = _("FmCard");
|
|
146
|
+
return l(), p("section", St, [
|
|
147
|
+
(l(!0), p(F, null, B(e.kpis, (i) => (l(), L(o, {
|
|
148
148
|
key: i.label,
|
|
149
149
|
variant: "outlined",
|
|
150
150
|
class: "flex flex-col gap-8 p-16 min-w-0 overflow-hidden"
|
|
@@ -152,7 +152,7 @@ const rt = { class: "flex items-center mb-14" }, st = {
|
|
|
152
152
|
default: D(() => [
|
|
153
153
|
t("div", Rt, [
|
|
154
154
|
t("div", Ct, [
|
|
155
|
-
|
|
155
|
+
u(n, {
|
|
156
156
|
name: i.icon,
|
|
157
157
|
outline: "",
|
|
158
158
|
size: "sm",
|
|
@@ -160,21 +160,21 @@ const rt = { class: "flex items-center mb-14" }, st = {
|
|
|
160
160
|
}, null, 8, ["name"])
|
|
161
161
|
]),
|
|
162
162
|
t("span", $t, d(i.label), 1),
|
|
163
|
-
|
|
163
|
+
u(T, {
|
|
164
164
|
description: i.description
|
|
165
165
|
}, null, 8, ["description"])
|
|
166
166
|
]),
|
|
167
167
|
t("div", Ft, d(i.value), 1),
|
|
168
|
-
i.sub ? (l(),
|
|
168
|
+
i.sub ? (l(), p("div", Dt, d(i.sub), 1)) : U("", !0),
|
|
169
169
|
t("div", kt, [
|
|
170
|
-
i.delta !== "0%" && i.delta !== "0pp" ? (l(),
|
|
170
|
+
i.delta !== "0%" && i.delta !== "0pp" ? (l(), L(n, {
|
|
171
171
|
key: 0,
|
|
172
172
|
name: i.trendUp ? "trending_up" : "trending_down",
|
|
173
173
|
size: "xs",
|
|
174
|
-
class:
|
|
174
|
+
class: A(i.deltaClass)
|
|
175
175
|
}, null, 8, ["name", "class"])) : U("", !0),
|
|
176
176
|
t("span", {
|
|
177
|
-
class:
|
|
177
|
+
class: A(["fm-typo-en-body-sm-600", i.deltaClass])
|
|
178
178
|
}, d(i.delta), 3),
|
|
179
179
|
r[0] || (r[0] = t("span", { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary" }, "vs prev", -1))
|
|
180
180
|
])
|
|
@@ -184,7 +184,7 @@ const rt = { class: "flex items-center mb-14" }, st = {
|
|
|
184
184
|
]);
|
|
185
185
|
};
|
|
186
186
|
}
|
|
187
|
-
}),
|
|
187
|
+
}), Lt = { class: "flex flex-col gap-4" }, At = ["onClick"], It = { class: "fm-typo-en-body-sm-600" }, Ot = { class: "fm-typo-en-body-md-600 min-w-[38px] text-right" }, Bt = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary min-w-[34px] text-right" }, Tt = { class: "mt-14 pt-12 border-t border-fm-color-neutral-gray-100 fm-typo-en-body-sm-400 text-fm-color-typo-secondary" }, Et = /* @__PURE__ */ I({
|
|
188
188
|
__name: "LifecycleSegments",
|
|
189
189
|
props: {
|
|
190
190
|
segments: {},
|
|
@@ -192,11 +192,11 @@ const rt = { class: "flex items-center mb-14" }, st = {
|
|
|
192
192
|
interactive: { type: Boolean, default: !0 }
|
|
193
193
|
},
|
|
194
194
|
emits: ["select"],
|
|
195
|
-
setup(e, { emit:
|
|
196
|
-
const r = e, n =
|
|
197
|
-
return (
|
|
195
|
+
setup(e, { emit: s }) {
|
|
196
|
+
const r = e, n = s;
|
|
197
|
+
return (o, i) => {
|
|
198
198
|
const m = _("FmProgressBar"), b = _("FmCard");
|
|
199
|
-
return l(),
|
|
199
|
+
return l(), L(b, {
|
|
200
200
|
variant: "outlined",
|
|
201
201
|
class: "p-24"
|
|
202
202
|
}, {
|
|
@@ -204,24 +204,24 @@ const rt = { class: "flex items-center mb-14" }, st = {
|
|
|
204
204
|
i[0] || (i[0] = t("div", { class: "flex items-center mb-16" }, [
|
|
205
205
|
t("div", { class: "flex-1 fm-typo-en-body-md-600" }, "Member lifecycle")
|
|
206
206
|
], -1)),
|
|
207
|
-
t("div",
|
|
208
|
-
(l(!0),
|
|
207
|
+
t("div", Lt, [
|
|
208
|
+
(l(!0), p(F, null, B(r.segments, (y) => (l(), p("div", {
|
|
209
209
|
key: y.id,
|
|
210
|
-
class:
|
|
210
|
+
class: A([
|
|
211
211
|
"flex items-center gap-9 px-6 py-3 -mx-6 rounded-8",
|
|
212
212
|
r.interactive ? "cursor-pointer hover:bg-fm-color-neutral-gray-100/50" : "cursor-default"
|
|
213
213
|
]),
|
|
214
214
|
onClick: (v) => r.interactive && n("select", y.id)
|
|
215
215
|
}, [
|
|
216
216
|
t("div", {
|
|
217
|
-
class:
|
|
217
|
+
class: A(["flex w-[90px] flex-shrink-0 items-center gap-3", y.labelClass])
|
|
218
218
|
}, [
|
|
219
|
-
t("span",
|
|
220
|
-
|
|
219
|
+
t("span", It, d(y.label), 1),
|
|
220
|
+
u(T, {
|
|
221
221
|
description: y.description
|
|
222
222
|
}, null, 8, ["description"])
|
|
223
223
|
], 2),
|
|
224
|
-
|
|
224
|
+
u(m, {
|
|
225
225
|
class: "flex-1",
|
|
226
226
|
value: y.barPct,
|
|
227
227
|
color: y.barColor,
|
|
@@ -229,7 +229,7 @@ const rt = { class: "flex items-center mb-14" }, st = {
|
|
|
229
229
|
}, null, 8, ["value", "color"]),
|
|
230
230
|
t("span", Ot, d(y.countStr), 1),
|
|
231
231
|
t("span", Bt, d(y.pctStr), 1)
|
|
232
|
-
], 10,
|
|
232
|
+
], 10, At))), 128))
|
|
233
233
|
]),
|
|
234
234
|
t("div", Tt, d(r.summary), 1)
|
|
235
235
|
]),
|
|
@@ -237,16 +237,16 @@ const rt = { class: "flex items-center mb-14" }, st = {
|
|
|
237
237
|
});
|
|
238
238
|
};
|
|
239
239
|
}
|
|
240
|
-
}),
|
|
240
|
+
}), Nt = { class: "flex items-start gap-8 mb-12" }, Ut = { class: "flex-1" }, Vt = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary mt-4" }, qt = {
|
|
241
241
|
key: 0,
|
|
242
242
|
class: "flex items-start pl-[152px] xs:pl-0 xs:justify-center"
|
|
243
|
-
},
|
|
243
|
+
}, Ht = { class: "flex flex-col items-start" }, zt = { class: "flex items-center gap-8" }, Yt = {
|
|
244
244
|
key: 0,
|
|
245
245
|
class: "fm-typo-en-body-sm-600 text-fm-color-typo-warning bg-fm-color-system-warning-100 px-8 py-[2px] rounded-xxxl whitespace-nowrap"
|
|
246
246
|
}, jt = ["onClick"], Gt = { class: "min-w-0" }, Jt = { class: "flex items-center gap-3 fm-typo-en-body-sm-600" }, Kt = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-secondary mt-4" }, Wt = { class: "min-w-0 text-right" }, Qt = { class: "fm-typo-en-body-lg-600" }, Xt = {
|
|
247
247
|
key: 0,
|
|
248
248
|
class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary"
|
|
249
|
-
}, Zt = { class: "mt-12 pt-12 border-t border-fm-color-neutral-gray-100" }, er = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary text-right" }, tr = /* @__PURE__ */
|
|
249
|
+
}, Zt = { class: "mt-12 pt-12 border-t border-fm-color-neutral-gray-100" }, er = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary text-right" }, tr = /* @__PURE__ */ I({
|
|
250
250
|
__name: "MemberFunnel",
|
|
251
251
|
props: {
|
|
252
252
|
stages: {},
|
|
@@ -254,56 +254,56 @@ const rt = { class: "flex items-center mb-14" }, st = {
|
|
|
254
254
|
interactive: { type: Boolean, default: !0 }
|
|
255
255
|
},
|
|
256
256
|
emits: ["select"],
|
|
257
|
-
setup(e, { emit:
|
|
258
|
-
const r = e, n =
|
|
259
|
-
function
|
|
257
|
+
setup(e, { emit: s }) {
|
|
258
|
+
const r = e, n = s;
|
|
259
|
+
function o(i) {
|
|
260
260
|
r.interactive && n("select", i);
|
|
261
261
|
}
|
|
262
262
|
return (i, m) => {
|
|
263
263
|
const b = _("FmProgressBar"), y = _("FmCard");
|
|
264
|
-
return l(),
|
|
264
|
+
return l(), L(y, {
|
|
265
265
|
variant: "outlined",
|
|
266
266
|
class: "p-24"
|
|
267
267
|
}, {
|
|
268
268
|
default: D(() => [
|
|
269
|
-
t("div",
|
|
269
|
+
t("div", Nt, [
|
|
270
270
|
t("div", Ut, [
|
|
271
271
|
m[0] || (m[0] = t("div", { class: "fm-typo-en-body-md-600" }, "Member funnel", -1)),
|
|
272
272
|
t("div", Vt, d(r.interactive ? "Strict member-only · visitors excluded · click any stage to drill down" : "Strict member-only · visitors excluded"), 1)
|
|
273
273
|
])
|
|
274
274
|
]),
|
|
275
|
-
(l(!0),
|
|
275
|
+
(l(!0), p(F, null, B(e.stages, (v, M) => (l(), p("div", {
|
|
276
276
|
key: v.id
|
|
277
277
|
}, [
|
|
278
|
-
v.hasDropLine ? (l(),
|
|
279
|
-
t("div",
|
|
278
|
+
v.hasDropLine ? (l(), p("div", qt, [
|
|
279
|
+
t("div", Ht, [
|
|
280
280
|
m[1] || (m[1] = t("div", { class: "w-[1px] h-[4px] bg-fm-color-neutral-gray-100 ml-[9px]" }, null, -1)),
|
|
281
|
-
t("div",
|
|
281
|
+
t("div", zt, [
|
|
282
282
|
t("span", {
|
|
283
|
-
class:
|
|
283
|
+
class: A(["fm-typo-en-body-sm-600 px-8 py-[2px] rounded-xxxl whitespace-nowrap", v.dropClass])
|
|
284
284
|
}, d(v.conversionStr), 3),
|
|
285
|
-
v.isBiggestDrop ? (l(),
|
|
285
|
+
v.isBiggestDrop ? (l(), p("span", Yt, " biggest drop ")) : U("", !0)
|
|
286
286
|
]),
|
|
287
287
|
m[2] || (m[2] = t("div", { class: "w-[1px] h-[4px] bg-fm-color-neutral-gray-100 ml-[9px]" }, null, -1))
|
|
288
288
|
])
|
|
289
289
|
])) : U("", !0),
|
|
290
290
|
t("div", {
|
|
291
|
-
class:
|
|
291
|
+
class: A([
|
|
292
292
|
"grid grid-cols-[140px_minmax(0,1fr)_72px] xs:grid-cols-[minmax(0,1fr)_auto] items-center gap-x-12 gap-y-8 py-4 px-8 -mx-8 rounded-md",
|
|
293
293
|
r.interactive ? "cursor-pointer hover:bg-fm-color-neutral-gray-100/50" : ""
|
|
294
294
|
]),
|
|
295
|
-
onClick: (S) =>
|
|
295
|
+
onClick: (S) => o(v.id)
|
|
296
296
|
}, [
|
|
297
297
|
t("div", Gt, [
|
|
298
298
|
t("div", Jt, [
|
|
299
299
|
t("span", null, d(v.label), 1),
|
|
300
|
-
|
|
300
|
+
u(T, {
|
|
301
301
|
description: v.description
|
|
302
302
|
}, null, 8, ["description"])
|
|
303
303
|
]),
|
|
304
304
|
t("div", Kt, d(v.desc), 1)
|
|
305
305
|
]),
|
|
306
|
-
|
|
306
|
+
u(b, {
|
|
307
307
|
class: "min-w-0 xs:col-span-2 xs:row-start-2",
|
|
308
308
|
value: v.barWidthPct,
|
|
309
309
|
color: v.barColor,
|
|
@@ -311,7 +311,7 @@ const rt = { class: "flex items-center mb-14" }, st = {
|
|
|
311
311
|
}, null, 8, ["value", "color"]),
|
|
312
312
|
t("div", Wt, [
|
|
313
313
|
t("div", Qt, d(v.countStr), 1),
|
|
314
|
-
v.hasConvRate ? (l(),
|
|
314
|
+
v.hasConvRate ? (l(), p("div", Xt, d(v.convRateLabel), 1)) : U("", !0)
|
|
315
315
|
])
|
|
316
316
|
], 10, jt)
|
|
317
317
|
]))), 128)),
|
|
@@ -323,22 +323,22 @@ const rt = { class: "flex items-center mb-14" }, st = {
|
|
|
323
323
|
});
|
|
324
324
|
};
|
|
325
325
|
}
|
|
326
|
-
}), rr = { class: "flex items-center gap-3 fm-typo-en-body-md-600 mb-4" }, sr = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary mb-16" }, or = { class: "grid grid-cols-2 xs:grid-cols-1 gap-16" }, ar = { class: "fm-typo-en-title-sm-800" }, nr = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary mt-4" }, ir = { class: "fm-typo-en-title-sm-800" }, lr = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary mt-4" }, dr = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary mt-8" }, cr = { class: "mt-16 pt-12 border-t border-fm-color-neutral-gray-100 fm-typo-en-body-sm-400" }, mr = /* @__PURE__ */
|
|
326
|
+
}), rr = { class: "flex items-center gap-3 fm-typo-en-body-md-600 mb-4" }, sr = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary mb-16" }, or = { class: "grid grid-cols-2 xs:grid-cols-1 gap-16" }, ar = { class: "fm-typo-en-title-sm-800" }, nr = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary mt-4" }, ir = { class: "fm-typo-en-title-sm-800" }, lr = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary mt-4" }, dr = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary mt-8" }, cr = { class: "mt-16 pt-12 border-t border-fm-color-neutral-gray-100 fm-typo-en-body-sm-400" }, mr = /* @__PURE__ */ I({
|
|
327
327
|
__name: "MemberSpendComparison",
|
|
328
328
|
props: {
|
|
329
329
|
spend: {}
|
|
330
330
|
},
|
|
331
331
|
setup(e) {
|
|
332
|
-
return (
|
|
333
|
-
const n = _("FmProgressBar"),
|
|
334
|
-
return l(),
|
|
332
|
+
return (s, r) => {
|
|
333
|
+
const n = _("FmProgressBar"), o = _("FmCard");
|
|
334
|
+
return l(), L(o, {
|
|
335
335
|
variant: "outlined",
|
|
336
336
|
class: "p-24"
|
|
337
337
|
}, {
|
|
338
338
|
default: D(() => [
|
|
339
339
|
t("div", rr, [
|
|
340
340
|
r[0] || (r[0] = t("span", null, "Member vs. non-member spend", -1)),
|
|
341
|
-
|
|
341
|
+
u(T, {
|
|
342
342
|
description: e.spend.description
|
|
343
343
|
}, null, 8, ["description"])
|
|
344
344
|
]),
|
|
@@ -361,7 +361,7 @@ const rt = { class: "flex items-center mb-14" }, st = {
|
|
|
361
361
|
t("div", lr, " avg " + d(e.spend.avgNonMemberSaleFmt) + " / order ", 1)
|
|
362
362
|
])
|
|
363
363
|
]),
|
|
364
|
-
|
|
364
|
+
u(n, {
|
|
365
365
|
class: "mt-16",
|
|
366
366
|
value: e.spend.memberSharePct,
|
|
367
367
|
color: "primary",
|
|
@@ -374,7 +374,7 @@ const rt = { class: "flex items-center mb-14" }, st = {
|
|
|
374
374
|
});
|
|
375
375
|
};
|
|
376
376
|
}
|
|
377
|
-
}),
|
|
377
|
+
}), pr = { class: "flex items-center mb-16" }, ur = {
|
|
378
378
|
key: 0,
|
|
379
379
|
class: "fm-typo-en-body-sm-400 text-fm-color-typo-secondary"
|
|
380
380
|
}, fr = {
|
|
@@ -383,7 +383,7 @@ const rt = { class: "flex items-center mb-14" }, st = {
|
|
|
383
383
|
}, br = { class: "grid grid-cols-3 gap-10 mb-16" }, yr = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-secondary mb-4 flex items-center gap-3" }, vr = { class: "fm-typo-en-title-sm-800" }, gr = { class: "flex flex-col gap-9" }, hr = { class: "flex-1 fm-typo-en-body-sm-400 whitespace-nowrap overflow-hidden text-ellipsis" }, xr = { class: "flex flex-shrink-0 items-center gap-3 fm-typo-en-body-sm-600 text-fm-color-typo-secondary" }, _r = { class: "w-[48px] h-4 bg-fm-color-neutral-gray-100 rounded-2 overflow-hidden flex-shrink-0" }, wr = {
|
|
384
384
|
key: 3,
|
|
385
385
|
class: "fm-typo-en-body-sm-400 text-fm-color-typo-secondary"
|
|
386
|
-
}, Mr = /* @__PURE__ */
|
|
386
|
+
}, Mr = /* @__PURE__ */ I({
|
|
387
387
|
__name: "RewardPerformance",
|
|
388
388
|
props: {
|
|
389
389
|
kpis: {},
|
|
@@ -393,16 +393,16 @@ const rt = { class: "flex items-center mb-14" }, st = {
|
|
|
393
393
|
error: { type: Boolean }
|
|
394
394
|
},
|
|
395
395
|
setup(e) {
|
|
396
|
-
return (
|
|
396
|
+
return (s, r) => {
|
|
397
397
|
const n = _("FmCard");
|
|
398
|
-
return l(),
|
|
398
|
+
return l(), L(n, {
|
|
399
399
|
variant: "outlined",
|
|
400
400
|
class: "p-24"
|
|
401
401
|
}, {
|
|
402
402
|
default: D(() => [
|
|
403
|
-
t("div",
|
|
403
|
+
t("div", pr, [
|
|
404
404
|
r[1] || (r[1] = t("div", { class: "flex-1 fm-typo-en-body-md-600" }, "Reward usage health", -1)),
|
|
405
|
-
|
|
405
|
+
u(f(Me), {
|
|
406
406
|
to: "/reward",
|
|
407
407
|
class: "fm-typo-en-body-sm-600 text-fm-color-primary no-underline"
|
|
408
408
|
}, {
|
|
@@ -412,94 +412,94 @@ const rt = { class: "flex items-center mb-14" }, st = {
|
|
|
412
412
|
_: 1
|
|
413
413
|
})
|
|
414
414
|
]),
|
|
415
|
-
e.loading ? (l(),
|
|
415
|
+
e.loading ? (l(), p("div", ur, " Loading reward usage data. ")) : e.error ? (l(), p("div", fr, " Unable to load reward usage data. ")) : e.hasData ? (l(), p(F, { key: 2 }, [
|
|
416
416
|
t("div", br, [
|
|
417
|
-
(l(!0),
|
|
418
|
-
key:
|
|
417
|
+
(l(!0), p(F, null, B(e.kpis, (o) => (l(), p("div", {
|
|
418
|
+
key: o.label,
|
|
419
419
|
class: "bg-[#FAFAFA] rounded-10 p-12"
|
|
420
420
|
}, [
|
|
421
421
|
t("div", yr, [
|
|
422
|
-
t("span", null, d(
|
|
423
|
-
|
|
424
|
-
description:
|
|
422
|
+
t("span", null, d(o.label), 1),
|
|
423
|
+
u(T, {
|
|
424
|
+
description: o.description
|
|
425
425
|
}, null, 8, ["description"])
|
|
426
426
|
]),
|
|
427
|
-
t("div", vr, d(
|
|
428
|
-
|
|
427
|
+
t("div", vr, d(o.value), 1),
|
|
428
|
+
o.delta ? (l(), p("div", {
|
|
429
429
|
key: 0,
|
|
430
|
-
class:
|
|
431
|
-
}, d(
|
|
430
|
+
class: A(["fm-typo-en-body-sm-600 mt-3", o.deltaClass])
|
|
431
|
+
}, d(o.delta), 3)) : U("", !0)
|
|
432
432
|
]))), 128))
|
|
433
433
|
]),
|
|
434
434
|
r[3] || (r[3] = t("div", { class: "fm-typo-en-body-sm-600 text-fm-color-typo-tertiary uppercase tracking-wide mb-10" }, " Top used rewards ", -1)),
|
|
435
435
|
t("div", gr, [
|
|
436
|
-
(l(!0),
|
|
437
|
-
key:
|
|
436
|
+
(l(!0), p(F, null, B(e.topRewards, (o) => (l(), p("div", {
|
|
437
|
+
key: o.name,
|
|
438
438
|
class: "flex items-center gap-9"
|
|
439
439
|
}, [
|
|
440
440
|
r[2] || (r[2] = t("div", { class: "w-6 h-6 rounded-2 bg-fm-color-primary flex-shrink-0" }, null, -1)),
|
|
441
|
-
t("span", hr, d(
|
|
441
|
+
t("span", hr, d(o.name), 1),
|
|
442
442
|
t("span", xr, [
|
|
443
|
-
te(d(
|
|
444
|
-
|
|
445
|
-
description:
|
|
443
|
+
te(d(o.count) + " ", 1),
|
|
444
|
+
u(T, {
|
|
445
|
+
description: o.description
|
|
446
446
|
}, null, 8, ["description"])
|
|
447
447
|
]),
|
|
448
448
|
t("div", _r, [
|
|
449
449
|
t("div", {
|
|
450
450
|
class: "h-full bg-fm-color-primary rounded-2",
|
|
451
|
-
style:
|
|
451
|
+
style: He({ width: o.barPct + "%" })
|
|
452
452
|
}, null, 4)
|
|
453
453
|
])
|
|
454
454
|
]))), 128))
|
|
455
455
|
])
|
|
456
|
-
], 64)) : (l(),
|
|
456
|
+
], 64)) : (l(), p("div", wr, " No reward usage data is available for this period. "))
|
|
457
457
|
]),
|
|
458
458
|
_: 1
|
|
459
459
|
});
|
|
460
460
|
};
|
|
461
461
|
}
|
|
462
|
-
}), Sr = { class: "mb-6 flex items-center gap-3 fm-typo-en-body-md-600" }, Rr = { class: "flex items-baseline gap-10 mb-14 flex-wrap" }, Cr = { class: "fm-typo-en-title-lg-800" }, $r = /* @__PURE__ */
|
|
462
|
+
}), Sr = { class: "mb-6 flex items-center gap-3 fm-typo-en-body-md-600" }, Rr = { class: "flex items-baseline gap-10 mb-14 flex-wrap" }, Cr = { class: "fm-typo-en-title-lg-800" }, $r = /* @__PURE__ */ I({
|
|
463
463
|
__name: "SalesTrendChart",
|
|
464
464
|
props: {
|
|
465
465
|
sales: {}
|
|
466
466
|
},
|
|
467
467
|
setup(e) {
|
|
468
|
-
const
|
|
468
|
+
const s = e, r = w(() => [
|
|
469
469
|
{
|
|
470
470
|
label: "This period",
|
|
471
|
-
data:
|
|
471
|
+
data: s.sales.series,
|
|
472
472
|
color: "#FF7823",
|
|
473
473
|
fill: !0
|
|
474
474
|
},
|
|
475
475
|
{
|
|
476
476
|
label: "Prev. period",
|
|
477
|
-
data:
|
|
477
|
+
data: s.sales.prevSeries,
|
|
478
478
|
color: "#B2B3B6",
|
|
479
479
|
dash: !0
|
|
480
480
|
}
|
|
481
481
|
]), n = { display: !1 };
|
|
482
|
-
return (
|
|
482
|
+
return (o, i) => {
|
|
483
483
|
const m = _("FmLineChart"), b = _("FmCard");
|
|
484
|
-
return l(),
|
|
484
|
+
return l(), L(b, {
|
|
485
485
|
variant: "outlined",
|
|
486
486
|
class: "p-24"
|
|
487
487
|
}, {
|
|
488
488
|
default: D(() => [
|
|
489
489
|
t("div", Sr, [
|
|
490
490
|
i[0] || (i[0] = t("span", null, "Member sales trend", -1)),
|
|
491
|
-
|
|
491
|
+
u(T, {
|
|
492
492
|
description: e.sales.description
|
|
493
493
|
}, null, 8, ["description"])
|
|
494
494
|
]),
|
|
495
495
|
t("div", Rr, [
|
|
496
496
|
t("span", Cr, d(e.sales.totalFmt), 1),
|
|
497
497
|
t("span", {
|
|
498
|
-
class:
|
|
498
|
+
class: A(["fm-typo-en-body-sm-600 px-9 py-3 rounded-full whitespace-nowrap", e.sales.deltaClass])
|
|
499
499
|
}, d(e.sales.deltaStr), 3),
|
|
500
500
|
i[1] || (i[1] = t("span", { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary" }, "vs prev. period", -1))
|
|
501
501
|
]),
|
|
502
|
-
|
|
502
|
+
u(m, {
|
|
503
503
|
datasets: f(r),
|
|
504
504
|
"x-axis": { categories: e.sales.comparisonCategories },
|
|
505
505
|
"x-cfg": n,
|
|
@@ -603,7 +603,7 @@ const rt = { class: "flex items-center mb-14" }, st = {
|
|
|
603
603
|
)
|
|
604
604
|
);
|
|
605
605
|
}
|
|
606
|
-
},
|
|
606
|
+
}, h = {
|
|
607
607
|
totalMembers: "Distinct members recorded through the end of the selected period; the start date does not reduce this total.",
|
|
608
608
|
activeMembers: "Distinct members with a completed member purchase or voucher redemption during the selected period.",
|
|
609
609
|
memberSales: "Sum of nettTotal from member-linked bills included in the selected period.",
|
|
@@ -613,22 +613,22 @@ const rt = { class: "flex items-center mb-14" }, st = {
|
|
|
613
613
|
repeatMembers: "Purchase members who also had purchase history before the selected period.",
|
|
614
614
|
funnelRewardRedeemers: "Repeat members with counted reward activity in the selected period.",
|
|
615
615
|
newlyJoined: "Members whose join date falls within the selected period.",
|
|
616
|
-
frequent: "Existing members with
|
|
617
|
-
infrequent: "Existing members with
|
|
618
|
-
atRisk: "Existing members with no selected-period purchase but a completed purchase
|
|
619
|
-
dormant: "Existing members with no selected-period purchase and no completed purchase
|
|
616
|
+
frequent: "Existing members with repeated completed member bills in the selected period.",
|
|
617
|
+
infrequent: "Existing members with limited completed member bills in the selected period.",
|
|
618
|
+
atRisk: "Existing members with no selected-period purchase but a recent completed purchase.",
|
|
619
|
+
dormant: "Existing members with no selected-period purchase and no recent completed purchase.",
|
|
620
620
|
memberSalesTrend: "Daily member nett sales for the selected period compared with the selected comparison period.",
|
|
621
|
-
rewardRedeemers: "Distinct members who used a counted VOUCHER, CREDIT, or
|
|
621
|
+
rewardRedeemers: "Distinct members who used a counted VOUCHER, CREDIT, or POINT reward during the selected period; anonymous usage is excluded from the member count.",
|
|
622
622
|
redemptionRate: "Reward redeemers divided by active members, where active members are members with purchase or reward activity during the selected period.",
|
|
623
623
|
averageRewardUses: "Counted reward-use transactions divided by distinct reward redeemers.",
|
|
624
624
|
memberSpendComparison: "Shows the value members bring — use it to make the case for growing membership"
|
|
625
625
|
};
|
|
626
|
-
function Fr(e,
|
|
627
|
-
const n = V.tz(r,
|
|
628
|
-
return
|
|
626
|
+
function Fr(e, s, r = /* @__PURE__ */ new Date()) {
|
|
627
|
+
const n = V.tz(r, s).endOf("day"), o = n.clone().startOf("day");
|
|
628
|
+
return o.startOf("month"), [o.toISOString(), n.toISOString()];
|
|
629
629
|
}
|
|
630
|
-
function Dr(e,
|
|
631
|
-
return e.length ? e :
|
|
630
|
+
function Dr(e, s) {
|
|
631
|
+
return e.length ? e : s;
|
|
632
632
|
}
|
|
633
633
|
function kr(e) {
|
|
634
634
|
return {
|
|
@@ -642,8 +642,8 @@ function kr(e) {
|
|
|
642
642
|
};
|
|
643
643
|
}
|
|
644
644
|
function we(e) {
|
|
645
|
-
const [
|
|
646
|
-
return [
|
|
645
|
+
const [s, r] = e, n = V(r).diff(V(s)), o = V(s).subtract(1, "millisecond");
|
|
646
|
+
return [o.clone().subtract(n, "milliseconds").toISOString(), o.toISOString()];
|
|
647
647
|
}
|
|
648
648
|
const J = (e) => ({
|
|
649
649
|
total: 0,
|
|
@@ -663,7 +663,7 @@ const J = (e) => ({
|
|
|
663
663
|
prev: Array(e).fill(0)
|
|
664
664
|
});
|
|
665
665
|
J(20), J(7), J(30), J(12);
|
|
666
|
-
const re = (e,
|
|
666
|
+
const re = (e, s) => s ? Math.round(e / s * 1e3) / 10 : 0, Pr = (e, s) => s ? Math.round((e - s) / s * 1e3) / 10 : 0, q = (e) => e >= 1e3 ? (e / 1e3).toFixed(1).replace(/\.0$/, "") + "k" : String(e), O = (e, s) => tt(e).set({ currency: s }).toFormat(!0), Lr = [
|
|
667
667
|
"neutral-black",
|
|
668
668
|
"primary",
|
|
669
669
|
"#FF9C52",
|
|
@@ -679,17 +679,17 @@ const re = (e, o) => o ? Math.round(e / o * 1e3) / 10 : 0, Pr = (e, o) => o ? Ma
|
|
|
679
679
|
text: "text-fm-color-typo-warning",
|
|
680
680
|
bg: "bg-fm-color-system-warning-100"
|
|
681
681
|
};
|
|
682
|
-
function
|
|
682
|
+
function Ar(e) {
|
|
683
683
|
return e === 0 ? "text-fm-color-typo-secondary" : e > 0 ? se.text : Se.text;
|
|
684
684
|
}
|
|
685
|
-
function
|
|
686
|
-
const
|
|
685
|
+
function Ir(e) {
|
|
686
|
+
const s = [
|
|
687
687
|
{
|
|
688
688
|
id: "total",
|
|
689
689
|
label: "Total members",
|
|
690
690
|
count: e.totalMembers,
|
|
691
691
|
desc: "All members through period end",
|
|
692
|
-
description:
|
|
692
|
+
description: h.totalMembers,
|
|
693
693
|
denom: null
|
|
694
694
|
},
|
|
695
695
|
{
|
|
@@ -697,7 +697,7 @@ function Lr(e) {
|
|
|
697
697
|
label: "Active members",
|
|
698
698
|
count: e.activeMembers,
|
|
699
699
|
desc: "Purchase or reward activity",
|
|
700
|
-
description:
|
|
700
|
+
description: h.activeMembers,
|
|
701
701
|
denom: e.totalMembers
|
|
702
702
|
},
|
|
703
703
|
{
|
|
@@ -705,7 +705,7 @@ function Lr(e) {
|
|
|
705
705
|
label: "Purchase members",
|
|
706
706
|
count: e.purchasingMembers,
|
|
707
707
|
desc: "At least 1 completed order",
|
|
708
|
-
description:
|
|
708
|
+
description: h.purchasingMembers,
|
|
709
709
|
denom: e.activeMembers
|
|
710
710
|
},
|
|
711
711
|
{
|
|
@@ -713,7 +713,7 @@ function Lr(e) {
|
|
|
713
713
|
label: "Repeat members",
|
|
714
714
|
count: e.repeatMembers,
|
|
715
715
|
desc: "Had prior order history",
|
|
716
|
-
description:
|
|
716
|
+
description: h.repeatMembers,
|
|
717
717
|
denom: e.purchasingMembers
|
|
718
718
|
},
|
|
719
719
|
{
|
|
@@ -721,30 +721,30 @@ function Lr(e) {
|
|
|
721
721
|
label: "Reward redeemers",
|
|
722
722
|
count: e.rewardRedeemers,
|
|
723
723
|
desc: "Repeat member used reward",
|
|
724
|
-
description:
|
|
724
|
+
description: h.funnelRewardRedeemers,
|
|
725
725
|
denom: e.repeatMembers
|
|
726
726
|
}
|
|
727
|
-
], r =
|
|
727
|
+
], r = s.map(
|
|
728
728
|
(m, b) => b === 0 || !m.denom ? null : re(m.count, m.denom)
|
|
729
729
|
);
|
|
730
|
-
let n = null,
|
|
730
|
+
let n = null, o = 100;
|
|
731
731
|
return e.totalMembers > 0 && r.forEach((m, b) => {
|
|
732
|
-
b > 0 && m !== null && m <
|
|
732
|
+
b > 0 && m !== null && m < o && (o = m, n = b);
|
|
733
733
|
}), {
|
|
734
|
-
funnelStages:
|
|
734
|
+
funnelStages: s.map((m, b) => {
|
|
735
735
|
const y = r[b], v = b === n;
|
|
736
736
|
return {
|
|
737
737
|
id: m.id,
|
|
738
738
|
label: m.label,
|
|
739
739
|
desc: m.desc,
|
|
740
740
|
description: m.description,
|
|
741
|
-
countStr:
|
|
741
|
+
countStr: q(m.count),
|
|
742
742
|
conversionStr: y != null ? `${y}% convert` : "",
|
|
743
743
|
convRateLabel: y != null ? `${y}% of prev` : "",
|
|
744
744
|
hasConvRate: b > 0,
|
|
745
745
|
hasDropLine: b > 0,
|
|
746
746
|
isBiggestDrop: v,
|
|
747
|
-
barColor:
|
|
747
|
+
barColor: Lr[b] ?? "#FFD0A3",
|
|
748
748
|
barWidthPct: e.totalMembers > 0 && m.count > 0 ? Math.max(re(m.count, e.totalMembers), 1) : 0,
|
|
749
749
|
dropClass: v ? `${oe.text} bg-[#FFF0E2]` : "text-fm-color-typo-secondary bg-fm-color-neutral-gray-100"
|
|
750
750
|
};
|
|
@@ -755,12 +755,12 @@ function Lr(e) {
|
|
|
755
755
|
};
|
|
756
756
|
}
|
|
757
757
|
function Or(e) {
|
|
758
|
-
const { funnelStages:
|
|
759
|
-
return { funnelStages:
|
|
758
|
+
const { funnelStages: s, funnelFootnote: r } = Ir(e);
|
|
759
|
+
return { funnelStages: s, funnelFootnote: r };
|
|
760
760
|
}
|
|
761
761
|
const Br = 10;
|
|
762
762
|
function Tr(e) {
|
|
763
|
-
const
|
|
763
|
+
const s = [
|
|
764
764
|
{
|
|
765
765
|
source: e.totalMembers,
|
|
766
766
|
target: e.activeMembers,
|
|
@@ -803,8 +803,8 @@ function Tr(e) {
|
|
|
803
803
|
}
|
|
804
804
|
];
|
|
805
805
|
let r = null;
|
|
806
|
-
for (const
|
|
807
|
-
|
|
806
|
+
for (const o of s)
|
|
807
|
+
o.source < Br || o.target >= o.source || (!r || o.target / o.source < r.target / r.source) && (r = o);
|
|
808
808
|
if (!r) return null;
|
|
809
809
|
const n = Math.round(r.target / r.source * 1e3) / 10;
|
|
810
810
|
return {
|
|
@@ -818,7 +818,7 @@ function Tr(e) {
|
|
|
818
818
|
]
|
|
819
819
|
};
|
|
820
820
|
}
|
|
821
|
-
const
|
|
821
|
+
const Er = {
|
|
822
822
|
VOUCHER: "Voucher",
|
|
823
823
|
PROMOTION: "Promotion",
|
|
824
824
|
POINT: "Experience",
|
|
@@ -828,7 +828,7 @@ const Nr = {
|
|
|
828
828
|
REWARD_POOL: "Reward pool",
|
|
829
829
|
GAME: "Game",
|
|
830
830
|
MISSION: "Mission"
|
|
831
|
-
},
|
|
831
|
+
}, Nr = {
|
|
832
832
|
active: { label: "Active", class: se.text },
|
|
833
833
|
expired: { label: "Ended", class: "text-fm-color-typo-tertiary" },
|
|
834
834
|
upcoming: { label: "Upcoming", class: oe.text }
|
|
@@ -836,15 +836,15 @@ const Nr = {
|
|
|
836
836
|
function Ur(e) {
|
|
837
837
|
return e.type !== "MEMBERSHIP";
|
|
838
838
|
}
|
|
839
|
-
function Vr(e,
|
|
839
|
+
function Vr(e, s) {
|
|
840
840
|
var r;
|
|
841
|
-
return !
|
|
842
|
-
(n) =>
|
|
841
|
+
return !s.length || !((r = e.targetLocation) != null && r.length) ? !0 : e.targetLocation.some(
|
|
842
|
+
(n) => s.includes(n.toString())
|
|
843
843
|
);
|
|
844
844
|
}
|
|
845
|
-
function
|
|
846
|
-
var
|
|
847
|
-
if (((
|
|
845
|
+
function qr(e) {
|
|
846
|
+
var s;
|
|
847
|
+
if (((s = e.timeframeOptions) == null ? void 0 : s.type) === "timeframe") {
|
|
848
848
|
const r = V();
|
|
849
849
|
return r.isBetween(
|
|
850
850
|
e.timeframeOptions.start ?? r.clone().subtract(1, "d"),
|
|
@@ -853,51 +853,51 @@ function Hr(e) {
|
|
|
853
853
|
}
|
|
854
854
|
return "active";
|
|
855
855
|
}
|
|
856
|
-
function
|
|
856
|
+
function Hr(e, s) {
|
|
857
857
|
return e.filter(Ur).filter(
|
|
858
|
-
(r) => Vr(r,
|
|
858
|
+
(r) => Vr(r, s)
|
|
859
859
|
).map((r) => {
|
|
860
|
-
const n =
|
|
860
|
+
const n = qr(r), o = Nr[n], i = r.type === "BROADCAST";
|
|
861
861
|
return {
|
|
862
862
|
id: r._id.toString(),
|
|
863
863
|
name: r.name,
|
|
864
|
-
type:
|
|
865
|
-
status:
|
|
866
|
-
metric: i ? String(r.currentReceive ?? 0) :
|
|
864
|
+
type: Er[r.type] ?? r.type,
|
|
865
|
+
status: o.label,
|
|
866
|
+
metric: i ? String(r.currentReceive ?? 0) : o.label,
|
|
867
867
|
metricLabel: i ? "Messages sent" : "Status",
|
|
868
|
-
statusClass:
|
|
868
|
+
statusClass: o.class
|
|
869
869
|
};
|
|
870
870
|
}).sort(
|
|
871
871
|
(r, n) => +(n.status === "Active") - +(r.status === "Active")
|
|
872
872
|
).slice(0, 4);
|
|
873
873
|
}
|
|
874
|
-
function
|
|
874
|
+
function zr(e, s) {
|
|
875
875
|
return {
|
|
876
876
|
categories: e.categories,
|
|
877
877
|
prevCategories: e.prevCategories,
|
|
878
878
|
comparisonCategories: e.categories.map(
|
|
879
|
-
(r, n) => [r, e.prevCategories[n]].filter(Boolean).map((
|
|
879
|
+
(r, n) => [r, e.prevCategories[n]].filter(Boolean).map((o) => V(o).format("DD/MM/YYYY")).join(" vs ")
|
|
880
880
|
),
|
|
881
881
|
series: e.series,
|
|
882
882
|
prevSeries: e.prevSeries,
|
|
883
|
-
description:
|
|
884
|
-
totalFmt: O(e.memberSales,
|
|
883
|
+
description: h.memberSalesTrend,
|
|
884
|
+
totalFmt: O(e.memberSales, s),
|
|
885
885
|
deltaStr: `${e.deltaPct > 0 ? "+" : ""}${e.deltaPct}%`,
|
|
886
|
-
deltaClass:
|
|
886
|
+
deltaClass: Ar(e.deltaPct)
|
|
887
887
|
};
|
|
888
888
|
}
|
|
889
|
-
function Yr(e,
|
|
890
|
-
return !e.memberOrders && !e.nonMemberOrders ? "No completed orders were recorded in this period." : r === 0 &&
|
|
889
|
+
function Yr(e, s, r, n) {
|
|
890
|
+
return !e.memberOrders && !e.nonMemberOrders ? "No completed orders were recorded in this period." : r === 0 && s > 0 ? "Members account for all tracked spend in this period." : s === 0 && r > 0 ? "Non-members account for all tracked spend in this period." : n > 0 ? `Members spend ${n}% more per order than non-members. Converting more walk-ins to members is a direct lever on sales.` : n < 0 ? `Non-members spend ${Math.abs(n)}% more per order than members. Converting more walk-ins to members can increase member-linked sales.` : "Members and non-members have the same average order value in this period.";
|
|
891
891
|
}
|
|
892
|
-
function jr(e,
|
|
893
|
-
const r = e.memberOrders ? e.memberSales / e.memberOrders : 0, n = e.nonMemberOrders ? e.nonMemberSales / e.nonMemberOrders : 0,
|
|
892
|
+
function jr(e, s) {
|
|
893
|
+
const r = e.memberOrders ? e.memberSales / e.memberOrders : 0, n = e.nonMemberOrders ? e.nonMemberSales / e.nonMemberOrders : 0, o = e.memberSales + e.nonMemberSales, i = Pr(r, n);
|
|
894
894
|
return {
|
|
895
|
-
description:
|
|
896
|
-
memberSalesFmt: O(e.memberSales,
|
|
897
|
-
nonMemberSalesFmt: O(e.nonMemberSales,
|
|
898
|
-
avgMemberSaleFmt: O(r,
|
|
899
|
-
avgNonMemberSaleFmt: O(n,
|
|
900
|
-
memberSharePct: re(e.memberSales,
|
|
895
|
+
description: h.memberSpendComparison,
|
|
896
|
+
memberSalesFmt: O(e.memberSales, s),
|
|
897
|
+
nonMemberSalesFmt: O(e.nonMemberSales, s),
|
|
898
|
+
avgMemberSaleFmt: O(r, s),
|
|
899
|
+
avgNonMemberSaleFmt: O(n, s),
|
|
900
|
+
memberSharePct: re(e.memberSales, o),
|
|
901
901
|
avgGapPct: i,
|
|
902
902
|
summary: Yr(
|
|
903
903
|
e,
|
|
@@ -908,12 +908,18 @@ function jr(e, o) {
|
|
|
908
908
|
};
|
|
909
909
|
}
|
|
910
910
|
function Gr(e) {
|
|
911
|
-
const
|
|
911
|
+
const s = e.criteria ? {
|
|
912
|
+
...h,
|
|
913
|
+
frequent: `Existing members with at least ${e.criteria.frequentMinBills} completed member bills in the selected period.`,
|
|
914
|
+
infrequent: `Existing members with 1 to ${e.criteria.frequentMinBills - 1} completed member bills in the selected period.`,
|
|
915
|
+
atRisk: `Existing members with no selected-period purchase but a completed purchase in the prior ${e.criteria.atRiskLookbackDays} calendar days.`,
|
|
916
|
+
dormant: `Existing members with no selected-period purchase and no completed purchase in the prior ${e.criteria.atRiskLookbackDays} calendar days.`
|
|
917
|
+
} : h, r = [
|
|
912
918
|
{
|
|
913
919
|
id: "new",
|
|
914
920
|
label: "Newly joined",
|
|
915
921
|
count: e.newlyJoined,
|
|
916
|
-
description:
|
|
922
|
+
description: h.newlyJoined,
|
|
917
923
|
labelClass: se.text,
|
|
918
924
|
barColor: "typo-success"
|
|
919
925
|
},
|
|
@@ -921,7 +927,7 @@ function Gr(e) {
|
|
|
921
927
|
id: "frequent",
|
|
922
928
|
label: "Frequent",
|
|
923
929
|
count: e.frequent,
|
|
924
|
-
description:
|
|
930
|
+
description: s.frequent,
|
|
925
931
|
labelClass: "text-fm-color-primary",
|
|
926
932
|
barColor: "primary"
|
|
927
933
|
},
|
|
@@ -929,7 +935,7 @@ function Gr(e) {
|
|
|
929
935
|
id: "infrequent",
|
|
930
936
|
label: "Infrequent",
|
|
931
937
|
count: e.infrequent,
|
|
932
|
-
description:
|
|
938
|
+
description: s.infrequent,
|
|
933
939
|
labelClass: "text-fm-color-typo-secondary",
|
|
934
940
|
barColor: "neutral-gray-300"
|
|
935
941
|
},
|
|
@@ -937,7 +943,7 @@ function Gr(e) {
|
|
|
937
943
|
id: "at-risk",
|
|
938
944
|
label: "At-risk",
|
|
939
945
|
count: e.atRisk,
|
|
940
|
-
description:
|
|
946
|
+
description: s.atRisk,
|
|
941
947
|
labelClass: oe.text,
|
|
942
948
|
barColor: "#FFC746"
|
|
943
949
|
},
|
|
@@ -945,19 +951,19 @@ function Gr(e) {
|
|
|
945
951
|
id: "dormant",
|
|
946
952
|
label: "Dormant",
|
|
947
953
|
count: e.dormant,
|
|
948
|
-
description:
|
|
954
|
+
description: s.dormant,
|
|
949
955
|
labelClass: Se.text,
|
|
950
956
|
barColor: "#FFCFCC"
|
|
951
957
|
}
|
|
952
|
-
],
|
|
958
|
+
], n = Math.max(...r.map((i) => i.count), 1);
|
|
953
959
|
return {
|
|
954
|
-
lifecycleSegs:
|
|
955
|
-
...
|
|
956
|
-
barPct: Math.round(
|
|
957
|
-
pctStr: `${e.totalMembers ? Math.round(
|
|
958
|
-
countStr:
|
|
960
|
+
lifecycleSegs: r.map((i) => ({
|
|
961
|
+
...i,
|
|
962
|
+
barPct: Math.round(i.count / n * 100),
|
|
963
|
+
pctStr: `${e.totalMembers ? Math.round(i.count / e.totalMembers * 100) : 0}%`,
|
|
964
|
+
countStr: q(i.count)
|
|
959
965
|
})),
|
|
960
|
-
lifecycleSummary: `${
|
|
966
|
+
lifecycleSummary: `${q(
|
|
961
967
|
e.atRisk + e.dormant
|
|
962
968
|
)} members are at-risk or dormant`
|
|
963
969
|
};
|
|
@@ -965,13 +971,13 @@ function Gr(e) {
|
|
|
965
971
|
function Jr(e) {
|
|
966
972
|
return Gr(e);
|
|
967
973
|
}
|
|
968
|
-
function Kr(e,
|
|
969
|
-
return e.displayUnit === "uses" ? `${
|
|
974
|
+
function Kr(e, s) {
|
|
975
|
+
return e.displayUnit === "uses" ? `${q(e.displayValue)} ${e.displayValue === 1 ? "use" : "uses"}` : e.type === "COIN" ? `${q(e.displayValue)} pts` : O(e.displayValue, s);
|
|
970
976
|
}
|
|
971
977
|
function Wr(e) {
|
|
972
|
-
return e.displayUnit === "uses" ? "Counted voucher-use transactions for this reward during the selected period." : `Total ${e.type.toLowerCase()} amount used for this reward during the selected period.`;
|
|
978
|
+
return e.displayUnit === "uses" ? "Counted voucher-use transactions for this reward during the selected period." : `Total ${e.type === "COIN" ? "point" : e.type.toLowerCase()} amount used for this reward during the selected period.`;
|
|
973
979
|
}
|
|
974
|
-
function Qr(e,
|
|
980
|
+
function Qr(e, s) {
|
|
975
981
|
const r = Math.max(
|
|
976
982
|
...e.topRewards.map((n) => n.usageCount),
|
|
977
983
|
1
|
|
@@ -980,32 +986,32 @@ function Qr(e, o) {
|
|
|
980
986
|
rewardKpis: [
|
|
981
987
|
{
|
|
982
988
|
label: "Reward redeemers",
|
|
983
|
-
value:
|
|
984
|
-
description:
|
|
989
|
+
value: q(e.rewardRedeemers),
|
|
990
|
+
description: h.rewardRedeemers
|
|
985
991
|
},
|
|
986
992
|
{
|
|
987
993
|
label: "Redemption rate",
|
|
988
994
|
value: `${e.redemptionRatePct}%`,
|
|
989
|
-
description:
|
|
995
|
+
description: h.redemptionRate
|
|
990
996
|
},
|
|
991
997
|
{
|
|
992
998
|
label: "Avg reward uses",
|
|
993
999
|
value: `${e.averageRewardUsesPerRedeemer}x`,
|
|
994
|
-
description:
|
|
1000
|
+
description: h.averageRewardUses
|
|
995
1001
|
}
|
|
996
1002
|
],
|
|
997
1003
|
topRewards: e.topRewards.map((n) => ({
|
|
998
1004
|
name: n.name,
|
|
999
|
-
count: Kr(n,
|
|
1005
|
+
count: Kr(n, s),
|
|
1000
1006
|
description: Wr(n),
|
|
1001
1007
|
barPct: n.usageCount ? Math.round(n.usageCount / r * 100) : 0
|
|
1002
1008
|
}))
|
|
1003
1009
|
};
|
|
1004
1010
|
}
|
|
1005
|
-
const Xr = { class: "px-24 flex flex-col gap-16 pb-24" }, Zr = { class: "flex items-center justify-between gap-8 flex-wrap" }, es = { class: "flex items-center gap-8 flex-wrap" }, ts = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary -mt-8 text-right" }, rs = { class: "grid grid-cols-[3fr_2fr] xs:grid-cols-1 gap-16 items-start" }, ss = { class: "grid grid-cols-2 xs:grid-cols-1 gap-16" }, gs = /* @__PURE__ */
|
|
1011
|
+
const Xr = { class: "px-24 flex flex-col gap-16 pb-24" }, Zr = { class: "flex items-center justify-between gap-8 flex-wrap" }, es = { class: "flex items-center gap-8 flex-wrap" }, ts = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary -mt-8 text-right" }, rs = { class: "grid grid-cols-[3fr_2fr] xs:grid-cols-1 gap-16 items-start" }, ss = { class: "grid grid-cols-2 xs:grid-cols-1 gap-16" }, gs = /* @__PURE__ */ I({
|
|
1006
1012
|
__name: "LoyaltyDashboard",
|
|
1007
1013
|
setup(e) {
|
|
1008
|
-
const
|
|
1014
|
+
const s = Ze(), r = et(), n = Ke(), { global: o, minor: i } = Xe, m = w(
|
|
1009
1015
|
() => _e[r.currentCountry.value || "MY"] ?? _e.MY
|
|
1010
1016
|
), b = w(
|
|
1011
1017
|
() => Je.Country.getCountry(r.currentCountry.value || "MY").currency.code
|
|
@@ -1017,7 +1023,7 @@ const Xr = { class: "px-24 flex flex-col gap-16 pb-24" }, Zr = { class: "flex it
|
|
|
1017
1023
|
endDate: v
|
|
1018
1024
|
}), S = x(
|
|
1019
1025
|
me(we([y, v]))
|
|
1020
|
-
),
|
|
1026
|
+
), H = x({ location: [] }), K = x(s.locations.length > 0), ae = x(!1), ne = x(0), ie = x({}), z = x(null), le = x(null), de = x(null), ce = x(null), W = x(null), Y = x(!1), j = x(!1), Q = x([]), X = x(!1), Z = x(!1);
|
|
1021
1027
|
function me([a, c]) {
|
|
1022
1028
|
return { startDate: a, endDate: c };
|
|
1023
1029
|
}
|
|
@@ -1026,9 +1032,9 @@ const Xr = { class: "px-24 flex flex-col gap-16 pb-24" }, Zr = { class: "flex it
|
|
|
1026
1032
|
we([a.startDate, a.endDate])
|
|
1027
1033
|
));
|
|
1028
1034
|
});
|
|
1029
|
-
const
|
|
1035
|
+
const pe = w(
|
|
1030
1036
|
() => Or(
|
|
1031
|
-
|
|
1037
|
+
z.value ?? {
|
|
1032
1038
|
totalMembers: 0,
|
|
1033
1039
|
activeMembers: 0,
|
|
1034
1040
|
purchasingMembers: 0,
|
|
@@ -1036,7 +1042,7 @@ const Xr = { class: "px-24 flex flex-col gap-16 pb-24" }, Zr = { class: "flex it
|
|
|
1036
1042
|
rewardRedeemers: 0
|
|
1037
1043
|
}
|
|
1038
1044
|
)
|
|
1039
|
-
),
|
|
1045
|
+
), ue = w(
|
|
1040
1046
|
() => Jr(
|
|
1041
1047
|
le.value ?? {
|
|
1042
1048
|
totalMembers: 0,
|
|
@@ -1048,20 +1054,20 @@ const Xr = { class: "px-24 flex flex-col gap-16 pb-24" }, Zr = { class: "flex it
|
|
|
1048
1054
|
}
|
|
1049
1055
|
)
|
|
1050
1056
|
), Re = w(
|
|
1051
|
-
() =>
|
|
1057
|
+
() => zr(
|
|
1052
1058
|
de.value ?? {
|
|
1053
1059
|
categories: [""],
|
|
1054
1060
|
prevCategories: [""],
|
|
1055
1061
|
series: [0],
|
|
1056
1062
|
prevSeries: [0],
|
|
1057
|
-
description:
|
|
1063
|
+
description: h.memberSalesTrend,
|
|
1058
1064
|
memberSales: 0,
|
|
1059
1065
|
deltaPct: 0
|
|
1060
1066
|
},
|
|
1061
1067
|
b.value
|
|
1062
1068
|
)
|
|
1063
1069
|
), Ce = w(
|
|
1064
|
-
() =>
|
|
1070
|
+
() => z.value ? Tr(z.value) : null
|
|
1065
1071
|
), ee = w(
|
|
1066
1072
|
() => W.value ? Qr(W.value, b.value) : null
|
|
1067
1073
|
), $e = w(
|
|
@@ -1075,60 +1081,60 @@ const Xr = { class: "px-24 flex flex-col gap-16 pb-24" }, Zr = { class: "flex it
|
|
|
1075
1081
|
b.value
|
|
1076
1082
|
)
|
|
1077
1083
|
), Fe = w(
|
|
1078
|
-
() =>
|
|
1084
|
+
() => Hr(Q.value, H.value.location)
|
|
1079
1085
|
), De = w(() => {
|
|
1080
1086
|
const a = ie.value;
|
|
1081
1087
|
return [
|
|
1082
1088
|
{
|
|
1083
1089
|
label: "Total members",
|
|
1084
1090
|
value: be(a.totalMembers ?? 0),
|
|
1085
|
-
description:
|
|
1091
|
+
description: h.totalMembers,
|
|
1086
1092
|
icon: "group",
|
|
1087
1093
|
delta: "0%"
|
|
1088
1094
|
},
|
|
1089
1095
|
{
|
|
1090
1096
|
label: "Active members",
|
|
1091
1097
|
value: be(a.activeMembers ?? 0),
|
|
1092
|
-
description:
|
|
1098
|
+
description: h.activeMembers,
|
|
1093
1099
|
icon: "bolt",
|
|
1094
1100
|
delta: "0%"
|
|
1095
1101
|
},
|
|
1096
1102
|
{
|
|
1097
1103
|
label: "Member sales",
|
|
1098
1104
|
value: O(a.memberSales ?? 0, b.value),
|
|
1099
|
-
description:
|
|
1105
|
+
description: h.memberSales,
|
|
1100
1106
|
icon: "payments",
|
|
1101
1107
|
delta: "0%"
|
|
1102
1108
|
},
|
|
1103
1109
|
{
|
|
1104
1110
|
label: "Repeat rate",
|
|
1105
1111
|
value: ye(a.repeatRatePct ?? 0),
|
|
1106
|
-
description:
|
|
1112
|
+
description: h.repeatRate,
|
|
1107
1113
|
icon: "repeat",
|
|
1108
1114
|
delta: "0pp"
|
|
1109
1115
|
},
|
|
1110
1116
|
{
|
|
1111
1117
|
label: "Voucher redemption rate",
|
|
1112
1118
|
value: ye(a.voucherRedemptionRatePct ?? 0),
|
|
1113
|
-
description:
|
|
1119
|
+
description: h.voucherRedemptionRate,
|
|
1114
1120
|
icon: "redeem",
|
|
1115
1121
|
delta: "0pp"
|
|
1116
1122
|
}
|
|
1117
1123
|
].map(
|
|
1118
|
-
(
|
|
1119
|
-
...
|
|
1124
|
+
(g) => ({
|
|
1125
|
+
...g,
|
|
1120
1126
|
sub: null,
|
|
1121
1127
|
deltaClass: "text-fm-color-typo-secondary",
|
|
1122
1128
|
trendUp: !0
|
|
1123
1129
|
})
|
|
1124
1130
|
);
|
|
1125
1131
|
}), ke = w(
|
|
1126
|
-
() =>
|
|
1132
|
+
() => s.locations.map((a) => a._id.toString())
|
|
1127
1133
|
);
|
|
1128
1134
|
function fe(a) {
|
|
1129
1135
|
return !a.startDate || !a.endDate ? "" : `${he(a.startDate).format("D MMM")} – ${he(a.endDate).format("D MMM YYYY")}`;
|
|
1130
1136
|
}
|
|
1131
|
-
const Pe = w(() => fe(M.value)),
|
|
1137
|
+
const Pe = w(() => fe(M.value)), Le = w(
|
|
1132
1138
|
() => fe(S.value)
|
|
1133
1139
|
);
|
|
1134
1140
|
function be(a) {
|
|
@@ -1137,18 +1143,18 @@ const Xr = { class: "px-24 flex flex-col gap-16 pb-24" }, Zr = { class: "flex it
|
|
|
1137
1143
|
function ye(a) {
|
|
1138
1144
|
return `${Math.round(a * 10) / 10}%`;
|
|
1139
1145
|
}
|
|
1140
|
-
function
|
|
1146
|
+
function Ae(a) {
|
|
1141
1147
|
if (a && typeof a == "object" && "value" in a && Number.isFinite(Number(a.value)))
|
|
1142
1148
|
return Number(a.value);
|
|
1143
1149
|
}
|
|
1144
|
-
function
|
|
1150
|
+
function Ie() {
|
|
1145
1151
|
return !M.value.startDate || !M.value.endDate || !S.value.startDate || !S.value.endDate || !K.value ? null : kr({
|
|
1146
1152
|
dateRange: [M.value.startDate, M.value.endDate],
|
|
1147
1153
|
compareDateRange: [
|
|
1148
1154
|
S.value.startDate,
|
|
1149
1155
|
S.value.endDate
|
|
1150
1156
|
],
|
|
1151
|
-
selectedLocationIds:
|
|
1157
|
+
selectedLocationIds: H.value.location,
|
|
1152
1158
|
locationIds: ke.value,
|
|
1153
1159
|
timezone: m.value
|
|
1154
1160
|
});
|
|
@@ -1156,20 +1162,20 @@ const Xr = { class: "px-24 flex flex-col gap-16 pb-24" }, Zr = { class: "flex it
|
|
|
1156
1162
|
function k(a) {
|
|
1157
1163
|
return a === ne.value;
|
|
1158
1164
|
}
|
|
1159
|
-
async function
|
|
1165
|
+
async function E(a, c, g) {
|
|
1160
1166
|
try {
|
|
1161
|
-
await a(c,
|
|
1162
|
-
} catch (
|
|
1163
|
-
if (k(
|
|
1167
|
+
await a(c, g);
|
|
1168
|
+
} catch (N) {
|
|
1169
|
+
if (k(g)) throw N;
|
|
1164
1170
|
}
|
|
1165
1171
|
}
|
|
1166
1172
|
async function Oe(a, c) {
|
|
1167
1173
|
const [
|
|
1168
|
-
|
|
1169
|
-
|
|
1174
|
+
g,
|
|
1175
|
+
N,
|
|
1170
1176
|
G,
|
|
1171
1177
|
P,
|
|
1172
|
-
|
|
1178
|
+
qe
|
|
1173
1179
|
] = await Promise.all([
|
|
1174
1180
|
$.readTotalMembers(a),
|
|
1175
1181
|
$.readActiveMembers(a),
|
|
@@ -1178,37 +1184,37 @@ const Xr = { class: "px-24 flex flex-col gap-16 pb-24" }, Zr = { class: "flex it
|
|
|
1178
1184
|
$.readVoucherRedemptionRate(a)
|
|
1179
1185
|
]);
|
|
1180
1186
|
k(c) && (ie.value = {
|
|
1181
|
-
totalMembers:
|
|
1182
|
-
activeMembers:
|
|
1187
|
+
totalMembers: Ae(g),
|
|
1188
|
+
activeMembers: N.activeMembers,
|
|
1183
1189
|
memberSales: G.memberSales,
|
|
1184
1190
|
repeatRatePct: P.repeatRatePct,
|
|
1185
|
-
voucherRedemptionRatePct:
|
|
1191
|
+
voucherRedemptionRatePct: qe.voucherRedemptionRatePct
|
|
1186
1192
|
});
|
|
1187
1193
|
}
|
|
1188
1194
|
async function Be(a, c) {
|
|
1189
|
-
const
|
|
1190
|
-
k(c) && (
|
|
1195
|
+
const g = await $.readMemberFunnel(a);
|
|
1196
|
+
k(c) && (z.value = g);
|
|
1191
1197
|
}
|
|
1192
1198
|
async function Te(a, c) {
|
|
1193
|
-
const
|
|
1194
|
-
k(c) && (le.value =
|
|
1195
|
-
}
|
|
1196
|
-
async function Ne(a, c) {
|
|
1197
|
-
const h = await $.readMemberSalesTrend(a);
|
|
1198
|
-
k(c) && (de.value = h);
|
|
1199
|
+
const g = await $.readMemberLifecycle(a);
|
|
1200
|
+
k(c) && (le.value = g);
|
|
1199
1201
|
}
|
|
1200
1202
|
async function Ee(a, c) {
|
|
1201
|
-
const
|
|
1202
|
-
k(c) && (
|
|
1203
|
+
const g = await $.readMemberSalesTrend(a);
|
|
1204
|
+
k(c) && (de.value = g);
|
|
1205
|
+
}
|
|
1206
|
+
async function Ne(a, c) {
|
|
1207
|
+
const g = await $.readMemberSpendComparison(a);
|
|
1208
|
+
k(c) && (ce.value = g);
|
|
1203
1209
|
}
|
|
1204
1210
|
async function Ue(a, c) {
|
|
1205
1211
|
Y.value = !0, j.value = !1;
|
|
1206
1212
|
try {
|
|
1207
|
-
const
|
|
1213
|
+
const g = await $.readRewardUsageHealth(a);
|
|
1208
1214
|
if (!k(c)) return;
|
|
1209
|
-
W.value =
|
|
1210
|
-
} catch (
|
|
1211
|
-
throw k(c) && (j.value = !0),
|
|
1215
|
+
W.value = g;
|
|
1216
|
+
} catch (g) {
|
|
1217
|
+
throw k(c) && (j.value = !0), g;
|
|
1212
1218
|
} finally {
|
|
1213
1219
|
k(c) && (Y.value = !1);
|
|
1214
1220
|
}
|
|
@@ -1230,104 +1236,104 @@ const Xr = { class: "px-24 flex flex-col gap-16 pb-24" }, Zr = { class: "flex it
|
|
|
1230
1236
|
}
|
|
1231
1237
|
}
|
|
1232
1238
|
function ve() {
|
|
1233
|
-
const a = ++ne.value, c =
|
|
1239
|
+
const a = ++ne.value, c = Ie();
|
|
1234
1240
|
if (!c) {
|
|
1235
1241
|
Y.value = !1, j.value = !1;
|
|
1236
1242
|
return;
|
|
1237
1243
|
}
|
|
1238
1244
|
i(
|
|
1239
|
-
() =>
|
|
1245
|
+
() => E(Oe, c, a)
|
|
1240
1246
|
).catch(() => {
|
|
1241
1247
|
}), i(
|
|
1242
|
-
() =>
|
|
1248
|
+
() => E(Be, c, a)
|
|
1243
1249
|
).catch(() => {
|
|
1244
1250
|
}), i(
|
|
1245
|
-
() =>
|
|
1251
|
+
() => E(Te, c, a)
|
|
1246
1252
|
).catch(() => {
|
|
1247
1253
|
}), i(
|
|
1248
|
-
() =>
|
|
1254
|
+
() => E(Ee, c, a)
|
|
1249
1255
|
).catch(() => {
|
|
1250
1256
|
}), i(
|
|
1251
|
-
() =>
|
|
1252
|
-
|
|
1257
|
+
() => E(
|
|
1258
|
+
Ne,
|
|
1253
1259
|
c,
|
|
1254
1260
|
a
|
|
1255
1261
|
)
|
|
1256
1262
|
).catch(() => {
|
|
1257
1263
|
}), i(
|
|
1258
|
-
() =>
|
|
1264
|
+
() => E(Ue, c, a)
|
|
1259
1265
|
).catch(() => {
|
|
1260
1266
|
});
|
|
1261
1267
|
}
|
|
1262
|
-
return ge([M, S, () =>
|
|
1268
|
+
return ge([M, S, () => H.value.location], () => {
|
|
1263
1269
|
ae.value && ve();
|
|
1264
|
-
}),
|
|
1265
|
-
await
|
|
1266
|
-
K.value || await
|
|
1270
|
+
}), ze(async () => {
|
|
1271
|
+
await o(async () => {
|
|
1272
|
+
K.value || await s.readLocations(), K.value = !0;
|
|
1267
1273
|
}), await Ye(), ae.value = !0, ve(), Ve().catch(() => {
|
|
1268
1274
|
Q.value = [];
|
|
1269
1275
|
});
|
|
1270
1276
|
}), (a, c) => {
|
|
1271
|
-
var
|
|
1272
|
-
const
|
|
1273
|
-
return l(),
|
|
1274
|
-
|
|
1277
|
+
var N, G;
|
|
1278
|
+
const g = _("FmPageHead");
|
|
1279
|
+
return l(), p(F, null, [
|
|
1280
|
+
u(g, { title: "Analytic" }),
|
|
1275
1281
|
t("div", Xr, [
|
|
1276
1282
|
t("div", Zr, [
|
|
1277
|
-
|
|
1283
|
+
u(Qe, {
|
|
1278
1284
|
label: "Location: ",
|
|
1279
1285
|
"right-icon": "keyboard_arrow_down",
|
|
1280
|
-
modelValue: f(
|
|
1281
|
-
"onUpdate:modelValue": c[0] || (c[0] = (P) => f(
|
|
1286
|
+
modelValue: f(H).location,
|
|
1287
|
+
"onUpdate:modelValue": c[0] || (c[0] = (P) => f(H).location = P),
|
|
1282
1288
|
icon: "storefront",
|
|
1283
1289
|
"show-item-label": !0,
|
|
1284
|
-
items: f(
|
|
1290
|
+
items: f(s).locationOptions
|
|
1285
1291
|
}, null, 8, ["modelValue", "items"]),
|
|
1286
1292
|
t("div", es, [
|
|
1287
|
-
|
|
1293
|
+
u(xe, {
|
|
1288
1294
|
"model-value": f(M),
|
|
1289
1295
|
"onUpdate:modelValue": c[1] || (c[1] = (P) => M.value = P)
|
|
1290
1296
|
}, null, 8, ["model-value"]),
|
|
1291
1297
|
c[4] || (c[4] = t("span", { class: "fm-typo-en-body-sm-600 text-fm-color-typo-tertiary" }, "vs", -1)),
|
|
1292
|
-
|
|
1298
|
+
u(xe, {
|
|
1293
1299
|
"model-value": f(S),
|
|
1294
1300
|
"onUpdate:modelValue": c[2] || (c[2] = (P) => S.value = P)
|
|
1295
1301
|
}, null, 8, ["model-value"])
|
|
1296
1302
|
])
|
|
1297
1303
|
]),
|
|
1298
|
-
t("div", ts, d(f(Pe)) + " · vs. " + d(f(
|
|
1299
|
-
|
|
1304
|
+
t("div", ts, d(f(Pe)) + " · vs. " + d(f(Le)), 1),
|
|
1305
|
+
u(Pt, { kpis: f(De) }, null, 8, ["kpis"]),
|
|
1300
1306
|
t("section", rs, [
|
|
1301
|
-
|
|
1302
|
-
stages: f(
|
|
1303
|
-
footnote: f(
|
|
1307
|
+
u(tr, {
|
|
1308
|
+
stages: f(pe).funnelStages,
|
|
1309
|
+
footnote: f(pe).funnelFootnote,
|
|
1304
1310
|
interactive: !1
|
|
1305
1311
|
}, null, 8, ["stages", "footnote"]),
|
|
1306
|
-
|
|
1312
|
+
u(Mt, {
|
|
1307
1313
|
insight: f(Ce),
|
|
1308
1314
|
onNavigate: c[3] || (c[3] = (P) => f(n).push(P))
|
|
1309
1315
|
}, null, 8, ["insight"])
|
|
1310
1316
|
]),
|
|
1311
1317
|
t("section", ss, [
|
|
1312
|
-
|
|
1313
|
-
segments: f(
|
|
1314
|
-
summary: f(
|
|
1318
|
+
u(Et, {
|
|
1319
|
+
segments: f(ue).lifecycleSegs,
|
|
1320
|
+
summary: f(ue).lifecycleSummary,
|
|
1315
1321
|
interactive: !1
|
|
1316
1322
|
}, null, 8, ["segments", "summary"]),
|
|
1317
|
-
|
|
1318
|
-
kpis: ((
|
|
1323
|
+
u(Mr, {
|
|
1324
|
+
kpis: ((N = f(ee)) == null ? void 0 : N.rewardKpis) ?? [],
|
|
1319
1325
|
"top-rewards": ((G = f(ee)) == null ? void 0 : G.topRewards) ?? [],
|
|
1320
1326
|
"has-data": !!f(ee),
|
|
1321
1327
|
loading: f(Y),
|
|
1322
1328
|
error: f(j)
|
|
1323
1329
|
}, null, 8, ["kpis", "top-rewards", "has-data", "loading", "error"]),
|
|
1324
|
-
|
|
1325
|
-
|
|
1330
|
+
u($r, { sales: f(Re) }, null, 8, ["sales"]),
|
|
1331
|
+
u(ut, {
|
|
1326
1332
|
campaigns: f(Fe),
|
|
1327
1333
|
loading: f(X),
|
|
1328
1334
|
error: f(Z)
|
|
1329
1335
|
}, null, 8, ["campaigns", "loading", "error"]),
|
|
1330
|
-
|
|
1336
|
+
u(mr, { spend: f($e) }, null, 8, ["spend"])
|
|
1331
1337
|
])
|
|
1332
1338
|
])
|
|
1333
1339
|
], 64);
|