@dragonmastery/dragoncore-vue 0.0.28 → 0.0.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/{CreateTeamForm-CmVZdqOQ.js → CreateTeamForm-CCfgSWUA.js} +2 -2
- package/dist/{CreateTeamForm-DRfZ74on.js → CreateTeamForm-DNkueBzR.js} +2 -2
- package/dist/{CreateTeamForm-DRfZ74on.js.map → CreateTeamForm-DNkueBzR.js.map} +1 -1
- package/dist/{CreditBalanceDashboard-BRY56-9w.js → CreditBalanceDashboard-CLQ8NZnY.js} +2 -2
- package/dist/{CreditBalanceDashboard-BRY56-9w.js.map → CreditBalanceDashboard-CLQ8NZnY.js.map} +1 -1
- package/dist/{CreditBalanceDashboard-CwXWREgJ.js → CreditBalanceDashboard-jdvZa-ZT.js} +4 -4
- package/dist/{CreditManagement-D-bsc1US.js → CreditManagement-Dus4O1BY.js} +2 -2
- package/dist/{CreditManagement-D-bsc1US.js.map → CreditManagement-Dus4O1BY.js.map} +1 -1
- package/dist/{CreditManagement-BAuzw-NE.js → CreditManagement-DvGikLLe.js} +4 -4
- package/dist/{CreditTransactionHistory-plIaRscn.js → CreditTransactionHistory-BZZGQxTV.js} +2 -2
- package/dist/{CreditTransactionHistory-plIaRscn.js.map → CreditTransactionHistory-BZZGQxTV.js.map} +1 -1
- package/dist/{CustomerCreateSupportTicketForm-D72blvMU.js → CustomerCreateSupportTicketForm-C3CgjqXg.js} +3 -3
- package/dist/{CustomerCreateSupportTicketForm-Co6C_P5o.js → CustomerCreateSupportTicketForm-CeG8IKA1.js} +2 -2
- package/dist/{CustomerCreateSupportTicketForm-Co6C_P5o.js.map → CustomerCreateSupportTicketForm-CeG8IKA1.js.map} +1 -1
- package/dist/{CustomerSupportTicketList-CB_Y1lVj.js → CustomerSupportTicketList-D1pcZzcX.js} +21 -21
- package/dist/{CustomerSupportTicketSuccess-DVqoR5-o.js → CustomerSupportTicketSuccess-Cc75m_p-.js} +2 -2
- package/dist/{CustomerSupportTicketSuccess-DVqoR5-o.js.map → CustomerSupportTicketSuccess-Cc75m_p-.js.map} +1 -1
- package/dist/{CustomerSupportTicketSuccess-B87Zth-g.js → CustomerSupportTicketSuccess-ca10puM-.js} +3 -3
- package/dist/{DefaultReferralTeamPage-BHail7YF.js → DefaultReferralTeamPage-fO3tmwOb.js} +102 -62
- package/dist/DefaultReferralTeamPage-fO3tmwOb.js.map +1 -0
- package/dist/{EditTeamForm-DhutyI9c.js → EditTeamForm-BzTAypZT.js} +2 -2
- package/dist/{EditTeamForm-BEOkUaKG.js → EditTeamForm-DdvKHlNj.js} +2 -2
- package/dist/{EditTeamForm-BEOkUaKG.js.map → EditTeamForm-DdvKHlNj.js.map} +1 -1
- package/dist/{LoginForm-p2fJiTtw.js → LoginForm-CFADKiln.js} +1 -1
- package/dist/{LoginForm-D1Mx2vAY.js → LoginForm-CSMHsZrq.js} +1 -1
- package/dist/{LoginForm-D1Mx2vAY.js.map → LoginForm-CSMHsZrq.js.map} +1 -1
- package/dist/{SavedFiltersPage-CvBKztlD.js → SavedFiltersPage-B9aQYpwf.js} +22 -22
- package/dist/{SavedFiltersPage-CvBKztlD.js.map → SavedFiltersPage-B9aQYpwf.js.map} +1 -1
- package/dist/{Signup-CJrY4IK-.js → Signup-Ceh7XSea.js} +2 -2
- package/dist/{Signup-BCVZZCR_.js → Signup-EykiX-bQ.js} +24 -6
- package/dist/Signup-EykiX-bQ.js.map +1 -0
- package/dist/{SignupConsentFlow-clxBjJlU.js → SignupConsentFlow-CRtiMpcS.js} +9 -4
- package/dist/SignupConsentFlow-CRtiMpcS.js.map +1 -0
- package/dist/{StaffCreateSupportTicketForm-Cm595v_4.js → StaffCreateSupportTicketForm-ANtaO4pe.js} +2 -2
- package/dist/{StaffCreateSupportTicketForm-Cm595v_4.js.map → StaffCreateSupportTicketForm-ANtaO4pe.js.map} +1 -1
- package/dist/{StaffCreateSupportTicketForm-DBhhJyXE.js → StaffCreateSupportTicketForm-CtU12OGq.js} +3 -3
- package/dist/{StaffSupportTicketList-2TbMweMK.js → StaffSupportTicketList-CqK8PVq4.js} +21 -21
- package/dist/{StaffSupportTicketSuccess-DKzJs74k.js → StaffSupportTicketSuccess-BMh5amWI.js} +3 -3
- package/dist/{StaffSupportTicketSuccess-DgULDGIj.js → StaffSupportTicketSuccess-CB4Oa_2J.js} +2 -2
- package/dist/{StaffSupportTicketSuccess-DgULDGIj.js.map → StaffSupportTicketSuccess-CB4Oa_2J.js.map} +1 -1
- package/dist/{TeamAttachmentsTab-D0SJplvU.js → TeamAttachmentsTab-BG_K7uwG.js} +21 -21
- package/dist/{TeamList-gppM0GOD.js → TeamList-B4gWPzce.js} +2 -2
- package/dist/{TeamList-gppM0GOD.js.map → TeamList-B4gWPzce.js.map} +1 -1
- package/dist/{TeamList-DU6CFPUY.js → TeamList-iAH9mOdd.js} +2 -2
- package/dist/{TeamParent-CuASTHKr.js → TeamParent-D_IbzH8B.js} +2 -2
- package/dist/{TeamParent-YPtenk3l.js → TeamParent-KQmJgJ9x.js} +2 -2
- package/dist/{TeamParent-YPtenk3l.js.map → TeamParent-KQmJgJ9x.js.map} +1 -1
- package/dist/{VerifyEmail-CWUhRA1o.js → VerifyEmail-BVwHQpbw.js} +2 -2
- package/dist/{VerifyEmail-CWUhRA1o.js.map → VerifyEmail-BVwHQpbw.js.map} +1 -1
- package/dist/{VerifyEmail-CLDngljq.js → VerifyEmail-BYYsE-M_.js} +2 -2
- package/dist/{ViewTeam-CRmIplCt.js → ViewTeam-BV7SjH8R.js} +129 -30
- package/dist/ViewTeam-BV7SjH8R.js.map +1 -0
- package/dist/{ViewTeam-Bvvfik4P.js → ViewTeam-BvLIv9Dd.js} +2 -2
- package/dist/{customerSupportTicketRoutes-Cy4fp4wx.js → customerSupportTicketRoutes-_HjQcEAD.js} +5 -5
- package/dist/{customerSupportTicketRoutes-Cy4fp4wx.js.map → customerSupportTicketRoutes-_HjQcEAD.js.map} +1 -1
- package/dist/index.d.ts +675 -663
- package/dist/index.js +22 -22
- package/dist/{saved_filter-jeZd2rlb.js → saved_filter-C6YHkEMV.js} +2 -2
- package/dist/{saved_filter-jeZd2rlb.js.map → saved_filter-C6YHkEMV.js.map} +1 -1
- package/dist/{signupConsentStorage-Ct4ZuKi-.js → signupConsentStorage-foqtLkIk.js} +1 -1
- package/dist/signupConsentStorage-foqtLkIk.js.map +1 -0
- package/dist/{src-zjaOyP9b.js → src-BIX3mMjo.js} +10 -10
- package/dist/{src-zjaOyP9b.js.map → src-BIX3mMjo.js.map} +1 -1
- package/dist/{staffSupportTicketRoutes-L4CU5dcu.js → staffSupportTicketRoutes-WPaItK5S.js} +5 -5
- package/dist/{staffSupportTicketRoutes-L4CU5dcu.js.map → staffSupportTicketRoutes-WPaItK5S.js.map} +1 -1
- package/dist/{teamRoutes-CtNcFZjR.js → teamRoutes-CQWRPy3J.js} +7 -7
- package/dist/{teamRoutes-CtNcFZjR.js.map → teamRoutes-CQWRPy3J.js.map} +1 -1
- package/dist/{useEmailVerificationChannel-QuMSgzzM.js → useEmailVerificationChannel-C4bvvG2b.js} +1 -1
- package/dist/{useEmailVerificationChannel-QuMSgzzM.js.map → useEmailVerificationChannel-C4bvvG2b.js.map} +1 -1
- package/package.json +2 -2
- package/dist/DefaultReferralTeamPage-BHail7YF.js.map +0 -1
- package/dist/Signup-BCVZZCR_.js.map +0 -1
- package/dist/SignupConsentFlow-clxBjJlU.js.map +0 -1
- package/dist/ViewTeam-CRmIplCt.js.map +0 -1
- package/dist/signupConsentStorage-Ct4ZuKi-.js.map +0 -1
|
@@ -4,9 +4,9 @@ import "./useQueryCache-alzaRWEb.js";
|
|
|
4
4
|
import { t as useMutation } from "./useMutation-BLNuJoYl.js";
|
|
5
5
|
import { t as useQuery } from "./useQuery-BzUGEOj0.js";
|
|
6
6
|
import { t as extractRpcErrorMessage } from "./extractRpcErrorMessage-CAaeVysa.js";
|
|
7
|
-
import { Fragment, computed, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, openBlock, reactive, ref, renderList, toDisplayString, unref, vModelText, watch, withCtx, withDirectives, withKeys, withModifiers } from "vue";
|
|
7
|
+
import { Fragment, computed, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, normalizeClass, openBlock, reactive, ref, renderList, toDisplayString, unref, vModelText, watch, withCtx, withDirectives, withKeys, withModifiers } from "vue";
|
|
8
8
|
import { toast } from "vue3-toastify";
|
|
9
|
-
import { DefaultReferralTeamFormSchema } from "@dragonmastery/dragoncore-shared";
|
|
9
|
+
import { DefaultReferralTeamFormSchema, ReferralTagValueSchema, normalizeToReferralTag } from "@dragonmastery/dragoncore-shared";
|
|
10
10
|
import { useForm, withMetadata } from "@dragonmastery/zinia-forms-core";
|
|
11
11
|
|
|
12
12
|
//#region src/slices/admin/features/default_referral_team/defaultReferralTeamSchema.ts
|
|
@@ -19,7 +19,7 @@ const defaultReferralTeamSchemaWithMetadata = withMetadata(DefaultReferralTeamFo
|
|
|
19
19
|
|
|
20
20
|
//#endregion
|
|
21
21
|
//#region src/slices/admin/features/default_referral_team/DefaultReferralTeamPage.vue
|
|
22
|
-
const _hoisted_1 = { class: "mt-2" };
|
|
22
|
+
const _hoisted_1 = { class: "mt-2 w-full max-w-2xl mx-auto px-4" };
|
|
23
23
|
const _hoisted_2 = {
|
|
24
24
|
key: 0,
|
|
25
25
|
class: "flex justify-center py-8"
|
|
@@ -29,23 +29,31 @@ const _hoisted_3 = {
|
|
|
29
29
|
class: "alert alert-error mt-2"
|
|
30
30
|
};
|
|
31
31
|
const _hoisted_4 = { class: "mt-4 flex justify-end" };
|
|
32
|
-
const _hoisted_5 = { class: "mt-12" };
|
|
32
|
+
const _hoisted_5 = { class: "mt-8 md:mt-12 w-full" };
|
|
33
33
|
const _hoisted_6 = {
|
|
34
34
|
key: 0,
|
|
35
|
-
class: "
|
|
35
|
+
class: "flex flex-col gap-4"
|
|
36
36
|
};
|
|
37
|
-
const _hoisted_7 = { class: "
|
|
38
|
-
const _hoisted_8 = { class: "
|
|
39
|
-
const _hoisted_9 =
|
|
40
|
-
const _hoisted_10 =
|
|
41
|
-
const _hoisted_11 = [
|
|
42
|
-
|
|
37
|
+
const _hoisted_7 = { class: "card-body p-4 md:p-5" };
|
|
38
|
+
const _hoisted_8 = { class: "card-title text-base md:text-lg mb-3" };
|
|
39
|
+
const _hoisted_9 = { class: "form-control w-full" };
|
|
40
|
+
const _hoisted_10 = { class: "flex flex-wrap gap-2" };
|
|
41
|
+
const _hoisted_11 = [
|
|
42
|
+
"onUpdate:modelValue",
|
|
43
|
+
"onKeydown",
|
|
44
|
+
"onInput"
|
|
45
|
+
];
|
|
46
|
+
const _hoisted_12 = ["onClick"];
|
|
47
|
+
const _hoisted_13 = { class: "h-5 text-xs text-error leading-tight mt-1" };
|
|
48
|
+
const _hoisted_14 = { class: "card-actions justify-end mt-2" };
|
|
49
|
+
const _hoisted_15 = ["disabled", "onClick"];
|
|
50
|
+
const _hoisted_16 = {
|
|
43
51
|
key: 0,
|
|
44
52
|
class: "loading loading-spinner loading-sm"
|
|
45
53
|
};
|
|
46
|
-
const
|
|
54
|
+
const _hoisted_17 = {
|
|
47
55
|
key: 1,
|
|
48
|
-
class: "text-base-content/60"
|
|
56
|
+
class: "text-base-content/60 text-sm"
|
|
49
57
|
};
|
|
50
58
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
51
59
|
__name: "DefaultReferralTeamPage",
|
|
@@ -59,9 +67,23 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
59
67
|
staleTime: 60 * 1e3
|
|
60
68
|
});
|
|
61
69
|
const referralTagInputs = reactive({});
|
|
70
|
+
const referralTagErrors = reactive({});
|
|
62
71
|
const savingTeamId = ref(null);
|
|
72
|
+
function validateReferralTagInput(teamId) {
|
|
73
|
+
const raw = referralTagInputs[teamId]?.trim() ?? "";
|
|
74
|
+
if (raw === "") {
|
|
75
|
+
delete referralTagErrors[teamId];
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const result = ReferralTagValueSchema.safeParse(raw);
|
|
79
|
+
if (result.success) delete referralTagErrors[teamId];
|
|
80
|
+
else referralTagErrors[teamId] = result.error.errors[0]?.message ?? "Invalid referral tag format";
|
|
81
|
+
}
|
|
63
82
|
watch(() => teamsData.value?.items ?? [], (teams) => {
|
|
64
|
-
for (const team of teams)
|
|
83
|
+
for (const team of teams) {
|
|
84
|
+
referralTagInputs[team.id] = team.referral_tag ?? "";
|
|
85
|
+
delete referralTagErrors[team.id];
|
|
86
|
+
}
|
|
65
87
|
}, { immediate: true });
|
|
66
88
|
const loadTeams = async () => {
|
|
67
89
|
while (teamsLoading.value) await new Promise((resolve) => setTimeout(resolve, 100));
|
|
@@ -83,22 +105,34 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
83
105
|
},
|
|
84
106
|
dataLoaders: { teams: loadTeams }
|
|
85
107
|
});
|
|
86
|
-
const isLoading = computed(() =>
|
|
108
|
+
const isLoading = computed(() => {
|
|
109
|
+
if (form.isLoading) return true;
|
|
110
|
+
if (defaultLoading.value && !defaultTeamIdData.value) return true;
|
|
111
|
+
if (teamsLoading.value && !teamsData.value?.items?.length) return true;
|
|
112
|
+
return false;
|
|
113
|
+
});
|
|
87
114
|
const { mutate: updateDefaultTeam } = useMutation((api, input) => api.appSettings.updateDefaultTeamIdForUnknownReferrals(input), { invalidate: /admin-default-referral-team/ });
|
|
88
115
|
const { mutate: setReferralTag } = useMutation((api, input) => api.teams.setReferralTag(input), { invalidate: /admin-teams-for-default-referral/ });
|
|
89
|
-
/** Normalize a team name to a URL-friendly referral tag (e.g. "Acme Corp & Co." → "acme-corp-co") */
|
|
90
|
-
function normalizeToReferralTag(name) {
|
|
91
|
-
return name.toLowerCase().trim().replace(/[^a-z0-9\s-]/g, "").replace(/\s+/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, "");
|
|
92
|
-
}
|
|
93
116
|
function normalizeReferralTag(team) {
|
|
94
117
|
const normalized = normalizeToReferralTag(team.display_name || team.unique_name || team.id);
|
|
95
|
-
if (normalized)
|
|
118
|
+
if (normalized) {
|
|
119
|
+
referralTagInputs[team.id] = normalized;
|
|
120
|
+
validateReferralTagInput(team.id);
|
|
121
|
+
}
|
|
96
122
|
}
|
|
97
123
|
async function saveReferralTag(teamId) {
|
|
98
124
|
const raw = referralTagInputs[teamId]?.trim() ?? "";
|
|
99
125
|
const referral_tag = raw === "" ? null : raw;
|
|
100
126
|
const team = teamsData.value?.items?.find((t) => t.id === teamId);
|
|
101
127
|
if (team && referral_tag === (team.referral_tag ?? null)) return;
|
|
128
|
+
if (referral_tag !== null) {
|
|
129
|
+
const result = ReferralTagValueSchema.safeParse(referral_tag);
|
|
130
|
+
if (!result.success) {
|
|
131
|
+
referralTagErrors[teamId] = result.error.errors[0]?.message ?? "Invalid referral tag format";
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
delete referralTagErrors[teamId];
|
|
102
136
|
savingTeamId.value = teamId;
|
|
103
137
|
try {
|
|
104
138
|
await setReferralTag({
|
|
@@ -109,7 +143,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
109
143
|
referralTagInputs[teamId] = referral_tag ?? "";
|
|
110
144
|
await refetchTeams();
|
|
111
145
|
} catch (err) {
|
|
112
|
-
|
|
146
|
+
referralTagErrors[teamId] = extractRpcErrorMessage(err, "Failed to save referral tag");
|
|
113
147
|
} finally {
|
|
114
148
|
savingTeamId.value = null;
|
|
115
149
|
}
|
|
@@ -129,8 +163,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
129
163
|
}
|
|
130
164
|
return (_ctx, _cache) => {
|
|
131
165
|
return openBlock(), createElementBlock("div", _hoisted_1, [
|
|
132
|
-
_cache[5] || (_cache[5] = createElementVNode("
|
|
133
|
-
_cache[6] || (_cache[6] = createElementVNode("p", { class: "text-base-content/70 mb-4" }, " When a referral event arrives with an unknown referral tag, it will be routed to this team. Select a team to use as the default, or clear to reject unknown tags. ", -1)),
|
|
166
|
+
_cache[5] || (_cache[5] = createElementVNode("h1", { class: "text-xl md:text-2xl font-bold mb-2" }, "Default Team for Unknown Referrals", -1)),
|
|
167
|
+
_cache[6] || (_cache[6] = createElementVNode("p", { class: "text-sm md:text-base text-base-content/70 mb-4" }, " When a referral event arrives with an unknown referral tag, it will be routed to this team. Select a team to use as the default, or clear to reject unknown tags. ", -1)),
|
|
134
168
|
isLoading.value ? (openBlock(), createElementBlock("div", _hoisted_2, [..._cache[0] || (_cache[0] = [createElementVNode("span", { class: "loading loading-spinner loading-lg" }, null, -1)])])) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
|
|
135
169
|
createVNode(unref(ZiniaForm), {
|
|
136
170
|
onHandleSubmit: handleSubmit,
|
|
@@ -152,48 +186,54 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
152
186
|
]),
|
|
153
187
|
_: 1
|
|
154
188
|
}),
|
|
155
|
-
createCommentVNode(" Referral tags per team "),
|
|
189
|
+
createCommentVNode(" Referral tags per team: mobile-first, DaisyUI "),
|
|
156
190
|
createElementVNode("div", _hoisted_5, [
|
|
157
|
-
_cache[3] || (_cache[3] = createElementVNode("h2", { class: "text-xl font-semibold mb-2" }, "Referral Tags per Team", -1)),
|
|
158
|
-
_cache[4] || (_cache[4] = createElementVNode("p", { class: "text-base-content/70 mb-4" }, " Set a referral tag for each team. Other apps use this tag when pushing events. If empty, the team's unique name or path is used as fallback. ", -1)),
|
|
159
|
-
unref(teamsData)?.items?.length ? (openBlock(), createElementBlock("div", _hoisted_6, [
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
createElementVNode("
|
|
166
|
-
|
|
167
|
-
"
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
191
|
+
_cache[3] || (_cache[3] = createElementVNode("h2", { class: "text-lg md:text-xl font-semibold mb-2" }, "Referral Tags per Team", -1)),
|
|
192
|
+
_cache[4] || (_cache[4] = createElementVNode("p", { class: "text-sm md:text-base text-base-content/70 mb-4" }, " Set a referral tag for each team. Other apps use this tag when pushing events. If empty, the team's unique name or path is used as fallback. ", -1)),
|
|
193
|
+
unref(teamsData)?.items?.length ? (openBlock(), createElementBlock("div", _hoisted_6, [createCommentVNode(" Mobile: stacked cards. md+: same, compact cards "), (openBlock(true), createElementBlock(Fragment, null, renderList(unref(teamsData).items, (team) => {
|
|
194
|
+
return openBlock(), createElementBlock("div", {
|
|
195
|
+
key: team.id,
|
|
196
|
+
class: "card bg-base-100 shadow-sm border border-base-300"
|
|
197
|
+
}, [createElementVNode("div", _hoisted_7, [
|
|
198
|
+
createElementVNode("h3", _hoisted_8, toDisplayString(team.display_name || team.unique_name || team.id), 1),
|
|
199
|
+
createElementVNode("div", _hoisted_9, [
|
|
200
|
+
_cache[2] || (_cache[2] = createElementVNode("label", { class: "label py-1" }, [createElementVNode("span", { class: "label-text text-sm" }, "Referral tag")], -1)),
|
|
201
|
+
createElementVNode("div", _hoisted_10, [withDirectives(createElementVNode("input", {
|
|
202
|
+
"onUpdate:modelValue": ($event) => referralTagInputs[team.id] = $event,
|
|
203
|
+
type: "text",
|
|
204
|
+
class: normalizeClass(["input input-bordered input-sm flex-1 min-w-0", referralTagErrors[team.id] && "input-error"]),
|
|
205
|
+
placeholder: "e.g. my-team",
|
|
206
|
+
onKeydown: withKeys(withModifiers(($event) => saveReferralTag(team.id), ["prevent"]), ["enter"]),
|
|
207
|
+
onInput: ($event) => validateReferralTagInput(team.id)
|
|
208
|
+
}, null, 42, _hoisted_11), [[vModelText, referralTagInputs[team.id]]]), createElementVNode("button", {
|
|
209
|
+
type: "button",
|
|
210
|
+
class: "btn btn-sm btn-ghost btn-square shrink-0",
|
|
211
|
+
title: "Normalize to URL-friendly tag from team name",
|
|
212
|
+
"aria-label": "Normalize tag",
|
|
213
|
+
onClick: ($event) => normalizeReferralTag(team)
|
|
214
|
+
}, [..._cache[1] || (_cache[1] = [createElementVNode("svg", {
|
|
215
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
216
|
+
class: "h-4 w-4",
|
|
217
|
+
fill: "none",
|
|
218
|
+
viewBox: "0 0 24 24",
|
|
219
|
+
stroke: "currentColor"
|
|
220
|
+
}, [createElementVNode("path", {
|
|
221
|
+
"stroke-linecap": "round",
|
|
222
|
+
"stroke-linejoin": "round",
|
|
223
|
+
"stroke-width": "2",
|
|
224
|
+
d: "M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"
|
|
225
|
+
})], -1)])], 8, _hoisted_12)]),
|
|
226
|
+
createCommentVNode(" Fixed-height error slot: no layout shift "),
|
|
227
|
+
createElementVNode("div", _hoisted_13, toDisplayString(referralTagErrors[team.id] ?? "\xA0"), 1)
|
|
228
|
+
]),
|
|
229
|
+
createElementVNode("div", _hoisted_14, [createElementVNode("button", {
|
|
190
230
|
type: "button",
|
|
191
|
-
class: "btn btn-
|
|
231
|
+
class: "btn btn-primary btn-sm",
|
|
192
232
|
disabled: savingTeamId.value === team.id || referralTagInputs[team.id] === (team.referral_tag ?? ""),
|
|
193
233
|
onClick: ($event) => saveReferralTag(team.id)
|
|
194
|
-
}, [savingTeamId.value === team.id ? (openBlock(), createElementBlock("span",
|
|
195
|
-
]);
|
|
196
|
-
}), 128))])
|
|
234
|
+
}, [savingTeamId.value === team.id ? (openBlock(), createElementBlock("span", _hoisted_16)) : createCommentVNode("v-if", true), createTextVNode(" " + toDisplayString(savingTeamId.value === team.id ? "Saving..." : "Save"), 1)], 8, _hoisted_15)])
|
|
235
|
+
])]);
|
|
236
|
+
}), 128))])) : (openBlock(), createElementBlock("p", _hoisted_17, "No teams found."))
|
|
197
237
|
])
|
|
198
238
|
], 64))
|
|
199
239
|
]);
|
|
@@ -204,4 +244,4 @@ var DefaultReferralTeamPage_default = _sfc_main;
|
|
|
204
244
|
|
|
205
245
|
//#endregion
|
|
206
246
|
export { DefaultReferralTeamPage_default as default };
|
|
207
|
-
//# sourceMappingURL=DefaultReferralTeamPage-
|
|
247
|
+
//# sourceMappingURL=DefaultReferralTeamPage-fO3tmwOb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DefaultReferralTeamPage-fO3tmwOb.js","names":[],"sources":["../src/slices/admin/features/default_referral_team/defaultReferralTeamSchema.ts","../src/slices/admin/features/default_referral_team/DefaultReferralTeamPage.vue"],"sourcesContent":["import type { DefaultReferralTeamFormDto } from '@dragonmastery/dragoncore-shared';\nimport { DefaultReferralTeamFormSchema } from '@dragonmastery/dragoncore-shared';\nimport { withMetadata } from '@dragonmastery/zinia-forms-core';\n\nexport type { DefaultReferralTeamFormDto };\n\nexport const defaultReferralTeamSchemaWithMetadata = withMetadata(\n DefaultReferralTeamFormSchema,\n 'defaultReferralTeamSchema',\n {\n default_team_id: {\n inputType: 'select',\n label: 'Default team',\n placeholder: 'Select team',\n helpText:\n 'When a referral event arrives with an unknown tag, it will be routed to this team. Select \"None\" to reject unknown tags.',\n },\n },\n);\n","<template>\n <div class=\"mt-2 w-full max-w-2xl mx-auto px-4\">\n <h1 class=\"text-xl md:text-2xl font-bold mb-2\">Default Team for Unknown Referrals</h1>\n <p class=\"text-sm md:text-base text-base-content/70 mb-4\">\n When a referral event arrives with an unknown referral tag, it will be routed to this team.\n Select a team to use as the default, or clear to reject unknown tags.\n </p>\n\n <div v-if=\"isLoading\" class=\"flex justify-center py-8\">\n <span class=\"loading loading-spinner loading-lg\"></span>\n </div>\n\n <template v-else>\n <ZiniaForm\n @handle-submit=\"handleSubmit\"\n @success=\"handleSuccess\"\n @error=\"handleError\"\n title=\"\"\n subtitle=\"\"\n >\n <zinia.DefaultTeamIdField\n :select-options=\"form.extraData.teams ?? []\"\n placeholder=\"Select team\"\n />\n\n <div v-if=\"form.submitError\" class=\"alert alert-error mt-2\">\n <span>{{ form.submitError }}</span>\n </div>\n\n <div class=\"mt-4 flex justify-end\">\n <ZiniaSubmitButton\n submitText=\"Save\"\n submittingText=\"Saving...\"\n />\n </div>\n </ZiniaForm>\n\n <!-- Referral tags per team: mobile-first, DaisyUI -->\n <div class=\"mt-8 md:mt-12 w-full\">\n <h2 class=\"text-lg md:text-xl font-semibold mb-2\">Referral Tags per Team</h2>\n <p class=\"text-sm md:text-base text-base-content/70 mb-4\">\n Set a referral tag for each team. Other apps use this tag when pushing events.\n If empty, the team's unique name or path is used as fallback.\n </p>\n\n <div v-if=\"teamsData?.items?.length\" class=\"flex flex-col gap-4\">\n <!-- Mobile: stacked cards. md+: same, compact cards -->\n <div\n v-for=\"team in teamsData.items\"\n :key=\"team.id\"\n class=\"card bg-base-100 shadow-sm border border-base-300\"\n >\n <div class=\"card-body p-4 md:p-5\">\n <h3 class=\"card-title text-base md:text-lg mb-3\">\n {{ team.display_name || team.unique_name || team.id }}\n </h3>\n\n <div class=\"form-control w-full\">\n <label class=\"label py-1\">\n <span class=\"label-text text-sm\">Referral tag</span>\n </label>\n <div class=\"flex flex-wrap gap-2\">\n <input\n v-model=\"referralTagInputs[team.id]\"\n type=\"text\"\n :class=\"[\n 'input input-bordered input-sm flex-1 min-w-0',\n referralTagErrors[team.id] && 'input-error',\n ]\"\n placeholder=\"e.g. my-team\"\n @keydown.enter.prevent=\"saveReferralTag(team.id)\"\n @input=\"validateReferralTagInput(team.id)\"\n />\n <button\n type=\"button\"\n class=\"btn btn-sm btn-ghost btn-square shrink-0\"\n title=\"Normalize to URL-friendly tag from team name\"\n aria-label=\"Normalize tag\"\n @click=\"normalizeReferralTag(team)\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\" />\n </svg>\n </button>\n </div>\n <!-- Fixed-height error slot: no layout shift -->\n <div class=\"h-5 text-xs text-error leading-tight mt-1\">\n {{ referralTagErrors[team.id] ?? '\\u00A0' }}\n </div>\n </div>\n\n <div class=\"card-actions justify-end mt-2\">\n <button\n type=\"button\"\n class=\"btn btn-primary btn-sm\"\n :disabled=\"savingTeamId === team.id || referralTagInputs[team.id] === (team.referral_tag ?? '')\"\n @click=\"saveReferralTag(team.id)\"\n >\n <span v-if=\"savingTeamId === team.id\" class=\"loading loading-spinner loading-sm\" />\n {{ savingTeamId === team.id ? 'Saving...' : 'Save' }}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <p v-else class=\"text-base-content/60 text-sm\">No teams found.</p>\n </div>\n </template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { normalizeToReferralTag, ReferralTagValueSchema } from '@dragonmastery/dragoncore-shared';\nimport type { DefaultReferralTeamFormDto } from './defaultReferralTeamSchema';\nimport { defaultReferralTeamSchemaWithMetadata } from './defaultReferralTeamSchema';\nimport { useForm } from '@dragonmastery/zinia-forms-core';\nimport { computed, reactive, ref, watch } from 'vue';\nimport { toast } from 'vue3-toastify';\nimport { useMutation } from '../../../../composables/useMutation';\nimport { useQuery } from '../../../../composables/useQuery';\nimport { extractRpcErrorMessage } from '../../../../utils/extractRpcErrorMessage';\n\nconst {\n data: defaultTeamIdData,\n loading: defaultLoading,\n refetch: refetchDefault,\n} = useQuery((api) => api.appSettings.getDefaultTeamIdForUnknownReferrals(), {\n cacheKey: 'admin-default-referral-team',\n staleTime: 30 * 1000,\n});\n\nconst {\n data: teamsData,\n loading: teamsLoading,\n refetch: refetchTeams,\n} = useQuery(\n (api) => api.teams.listTeams({ first: 100 }),\n {\n cacheKey: 'admin-teams-for-default-referral',\n staleTime: 60 * 1000,\n },\n);\n\nconst referralTagInputs = reactive<Record<string, string>>({});\nconst referralTagErrors = reactive<Record<string, string>>({});\nconst savingTeamId = ref<string | null>(null);\n\nfunction validateReferralTagInput(teamId: string) {\n const raw = referralTagInputs[teamId]?.trim() ?? '';\n if (raw === '') {\n delete referralTagErrors[teamId];\n return;\n }\n const result = ReferralTagValueSchema.safeParse(raw);\n if (result.success) {\n delete referralTagErrors[teamId];\n } else {\n referralTagErrors[teamId] =\n result.error.errors[0]?.message ?? 'Invalid referral tag format';\n }\n}\n\nwatch(\n () => teamsData.value?.items ?? [],\n (teams) => {\n for (const team of teams) {\n referralTagInputs[team.id] = team.referral_tag ?? '';\n delete referralTagErrors[team.id];\n }\n },\n { immediate: true },\n);\n\nconst loadTeams = async () => {\n while (teamsLoading.value) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n const teams = teamsData.value?.items ?? [];\n const options = [\n { value: '', label: 'None (reject unknown tags)' },\n ...teams.map((team) => ({\n value: team.id,\n label: `${team.display_name || team.unique_name || team.id}${team.referral_tag ? ` (${team.referral_tag})` : ''}`,\n })),\n ];\n return options;\n};\n\nconst {\n form,\n zinia,\n ZiniaForm,\n ZiniaSubmitButton,\n} = useForm(defaultReferralTeamSchemaWithMetadata, {\n storeName: 'admin-default-referral-team-form',\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n fetchData: async () => {\n while (defaultLoading.value) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n const data = defaultTeamIdData.value;\n return {\n default_team_id: data?.default_team_id ?? null,\n };\n },\n dataLoaders: {\n teams: loadTeams,\n },\n});\n\n// Only show full-page loading during initial load. When refetching teams after inline save,\n// we already have data—keep the table visible and show row-level \"Saving...\" instead.\nconst isLoading = computed(() => {\n if (form.isLoading) return true;\n if (defaultLoading.value && !defaultTeamIdData.value) return true;\n if (teamsLoading.value && !teamsData.value?.items?.length) return true;\n return false;\n});\n\nconst { mutate: updateDefaultTeam } = useMutation(\n (api, input: DefaultReferralTeamFormDto) =>\n api.appSettings.updateDefaultTeamIdForUnknownReferrals(input),\n { invalidate: /admin-default-referral-team/ },\n);\n\nconst { mutate: setReferralTag } = useMutation(\n (api, input: { team_id: string; referral_tag: string | null }) =>\n api.teams.setReferralTag(input),\n { invalidate: /admin-teams-for-default-referral/ },\n);\n\nfunction normalizeReferralTag(team: { id: string; display_name?: string | null; unique_name?: string | null }) {\n const name = team.display_name || team.unique_name || team.id;\n const normalized = normalizeToReferralTag(name);\n if (normalized) {\n referralTagInputs[team.id] = normalized;\n validateReferralTagInput(team.id);\n }\n}\n\nasync function saveReferralTag(teamId: string) {\n const raw = referralTagInputs[teamId]?.trim() ?? '';\n const referral_tag = raw === '' ? null : raw;\n const team = teamsData.value?.items?.find((t) => t.id === teamId);\n if (team && referral_tag === (team.referral_tag ?? null)) return;\n\n // Validate format before save—no transform, show error inline if invalid\n if (referral_tag !== null) {\n const result = ReferralTagValueSchema.safeParse(referral_tag);\n if (!result.success) {\n referralTagErrors[teamId] =\n result.error.errors[0]?.message ?? 'Invalid referral tag format';\n return;\n }\n }\n\n delete referralTagErrors[teamId];\n savingTeamId.value = teamId;\n try {\n await setReferralTag({ team_id: teamId, referral_tag });\n toast.success('Referral tag saved');\n referralTagInputs[teamId] = referral_tag ?? '';\n await refetchTeams();\n } catch (err) {\n referralTagErrors[teamId] = extractRpcErrorMessage(\n err,\n 'Failed to save referral tag',\n );\n } finally {\n savingTeamId.value = null;\n }\n}\n\nasync function handleSubmit(formData: DefaultReferralTeamFormDto) {\n const default_team_id = formData.default_team_id?.trim() || null;\n await updateDefaultTeam({ default_team_id });\n return { ok: true };\n}\n\nasync function handleSuccess() {\n toast.success('Default team saved');\n await refetchDefault();\n}\n\nfunction handleError(error: Error | unknown) {\n const message = error instanceof Error ? error.message : String(error);\n form.setSubmitError(extractRpcErrorMessage(error, message));\n toast.error(form.submitError ?? 'Failed to save');\n}\n</script>\n"],"mappings":";;;;;;;;;;;;AAMA,MAAa,wCAAwC,aACnD,+BACA,6BACA,EACE,iBAAiB;CACf,WAAW;CACX,OAAO;CACP,aAAa;CACb,UACE;CACH,EACF,CACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ECyGD,MAAM,EACJ,MAAM,mBACN,SAAS,gBACT,SAAS,mBACP,UAAU,QAAQ,IAAI,YAAY,qCAAqC,EAAE;GAC3E,UAAU;GACV,WAAW,KAAK;GACjB,CAAC;EAEF,MAAM,EACJ,MAAM,WACN,SAAS,cACT,SAAS,iBACP,UACD,QAAQ,IAAI,MAAM,UAAU,EAAE,OAAO,KAAK,CAAC,EAC5C;GACE,UAAU;GACV,WAAW,KAAK;GACjB,CACF;EAED,MAAM,oBAAoB,SAAiC,EAAE,CAAC;EAC9D,MAAM,oBAAoB,SAAiC,EAAE,CAAC;EAC9D,MAAM,eAAe,IAAmB,KAAK;EAE7C,SAAS,yBAAyB,QAAgB;GAChD,MAAM,MAAM,kBAAkB,SAAS,MAAM,IAAI;AACjD,OAAI,QAAQ,IAAI;AACd,WAAO,kBAAkB;AACzB;;GAEF,MAAM,SAAS,uBAAuB,UAAU,IAAI;AACpD,OAAI,OAAO,QACT,QAAO,kBAAkB;OAEzB,mBAAkB,UAChB,OAAO,MAAM,OAAO,IAAI,WAAW;;AAIzC,cACQ,UAAU,OAAO,SAAS,EAAE,GACjC,UAAU;AACT,QAAK,MAAM,QAAQ,OAAO;AACxB,sBAAkB,KAAK,MAAM,KAAK,gBAAgB;AAClD,WAAO,kBAAkB,KAAK;;KAGlC,EAAE,WAAW,MAAM,CACpB;EAED,MAAM,YAAY,YAAY;AAC5B,UAAO,aAAa,MAClB,OAAM,IAAI,SAAS,YAAY,WAAW,SAAS,IAAI,CAAC;AAU1D,UAPgB,CACd;IAAE,OAAO;IAAI,OAAO;IAA8B,EAClD,IAHY,UAAU,OAAO,SAAS,EAAE,EAG/B,KAAK,UAAU;IACtB,OAAO,KAAK;IACZ,OAAO,GAAG,KAAK,gBAAgB,KAAK,eAAe,KAAK,KAAK,KAAK,eAAe,KAAK,KAAK,aAAa,KAAK;IAC9G,EAAE,CACJ;;EAIH,MAAM,EACJ,MACA,OACA,WACA,sBACE,QAAQ,uCAAuC;GACjD,WAAW;GACX,uBAAuB;GACvB,aAAa;GACb,WAAW,YAAY;AACrB,WAAO,eAAe,MACpB,OAAM,IAAI,SAAS,YAAY,WAAW,SAAS,IAAI,CAAC;AAG1D,WAAO,EACL,iBAFW,kBAAkB,OAEN,mBAAmB,MAC3C;;GAEH,aAAa,EACX,OAAO,WACR;GACF,CAAC;EAIF,MAAM,YAAY,eAAe;AAC/B,OAAI,KAAK,UAAW,QAAO;AAC3B,OAAI,eAAe,SAAS,CAAC,kBAAkB,MAAO,QAAO;AAC7D,OAAI,aAAa,SAAS,CAAC,UAAU,OAAO,OAAO,OAAQ,QAAO;AAClE,UAAO;IACP;EAEF,MAAM,EAAE,QAAQ,sBAAsB,aACnC,KAAK,UACJ,IAAI,YAAY,uCAAuC,MAAM,EAC/D,EAAE,YAAY,+BAA+B,CAC9C;EAED,MAAM,EAAE,QAAQ,mBAAmB,aAChC,KAAK,UACJ,IAAI,MAAM,eAAe,MAAM,EACjC,EAAE,YAAY,oCAAoC,CACnD;EAED,SAAS,qBAAqB,MAAiF;GAE7G,MAAM,aAAa,uBADN,KAAK,gBAAgB,KAAK,eAAe,KAAK,GACZ;AAC/C,OAAI,YAAY;AACd,sBAAkB,KAAK,MAAM;AAC7B,6BAAyB,KAAK,GAAG;;;EAIrC,eAAe,gBAAgB,QAAgB;GAC7C,MAAM,MAAM,kBAAkB,SAAS,MAAM,IAAI;GACjD,MAAM,eAAe,QAAQ,KAAK,OAAO;GACzC,MAAM,OAAO,UAAU,OAAO,OAAO,MAAM,MAAM,EAAE,OAAO,OAAO;AACjE,OAAI,QAAQ,kBAAkB,KAAK,gBAAgB,MAAO;AAG1D,OAAI,iBAAiB,MAAM;IACzB,MAAM,SAAS,uBAAuB,UAAU,aAAa;AAC7D,QAAI,CAAC,OAAO,SAAS;AACnB,uBAAkB,UAChB,OAAO,MAAM,OAAO,IAAI,WAAW;AACrC;;;AAIJ,UAAO,kBAAkB;AACzB,gBAAa,QAAQ;AACrB,OAAI;AACF,UAAM,eAAe;KAAE,SAAS;KAAQ;KAAc,CAAC;AACvD,UAAM,QAAQ,qBAAqB;AACnC,sBAAkB,UAAU,gBAAgB;AAC5C,UAAM,cAAc;YACb,KAAK;AACZ,sBAAkB,UAAU,uBAC1B,KACA,8BACD;aACO;AACR,iBAAa,QAAQ;;;EAIzB,eAAe,aAAa,UAAsC;AAEhE,SAAM,kBAAkB,EAAE,iBADF,SAAS,iBAAiB,MAAM,IAAI,MACjB,CAAC;AAC5C,UAAO,EAAE,IAAI,MAAM;;EAGrB,eAAe,gBAAgB;AAC7B,SAAM,QAAQ,qBAAqB;AACnC,SAAM,gBAAgB;;EAGxB,SAAS,YAAY,OAAwB;GAC3C,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AACtE,QAAK,eAAe,uBAAuB,OAAO,QAAQ,CAAC;AAC3D,SAAM,MAAM,KAAK,eAAe,iBAAiB;;;uBAhSjD,mBA4GM,OA5GN,YA4GM;8BA3GJ,mBAAsF,MAAA,EAAlF,OAAM,sCAAoC,EAAC,sCAAkC,GAAA;8BACjF,mBAGI,KAAA,EAHD,OAAM,kDAAgD,EAAC,uKAG1D,GAAA;IAEW,UAAA,SAAA,WAAA,EAAX,mBAEM,OAFN,YAEM,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CADJ,mBAAwD,QAAA,EAAlD,OAAM,sCAAoC,EAAA,MAAA,GAAA,CAAA,EAAA,CAAA,KAAA,WAAA,EAGlD,mBAgGW,UAAA,EAAA,KAAA,GAAA,EAAA;KA/FT,YAsBY,MAAA,UAAA,EAAA;MArBT,gBAAe;MACf,WAAS;MACT,SAAO;MACR,OAAM;MACN,UAAS;;6BAKP;OAHF,YAGE,MAAA,MAAA,CAAA,oBAAA;QAFC,kBAAgB,MAAA,KAAI,CAAC,UAAU,SAAK,EAAA;QACrC,aAAY;;OAGH,MAAA,KAAI,CAAC,eAAA,WAAA,EAAhB,mBAEM,OAFN,YAEM,CADJ,mBAAmC,QAAA,MAAA,gBAA1B,MAAA,KAAI,CAAC,YAAW,EAAA,EAAA,CAAA,CAAA,IAAA,mBAAA,QAAA,KAAA;OAG3B,mBAKM,OALN,YAKM,CAJJ,YAGE,MAAA,kBAAA,EAAA;QAFA,YAAW;QACX,gBAAe;;;;;KAKrB,mBAAA,kDAAsD;KACtD,mBAqEM,OArEN,YAqEM;gCApEJ,mBAA6E,MAAA,EAAzE,OAAM,yCAAuC,EAAC,0BAAsB,GAAA;gCACxE,mBAGI,KAAA,EAHD,OAAM,kDAAgD,EAAC,kJAG1D,GAAA;MAEW,MAAA,UAAS,EAAE,OAAO,UAAA,WAAA,EAA7B,mBA2DM,OA3DN,YA2DM,CA1DJ,mBAAA,oDAAwD,GAAA,UAAA,KAAA,EACxD,mBAwDM,UAAA,MAAA,WAvDW,MAAA,UAAS,CAAC,QAAlB,SAAI;2BADb,mBAwDM,OAAA;QAtDH,KAAK,KAAK;QACX,OAAM;WAEN,mBAkDM,OAlDN,YAkDM;QAjDJ,mBAEK,MAFL,YAEK,gBADA,KAAK,gBAAgB,KAAK,eAAe,KAAK,GAAE,EAAA,EAAA;QAGrD,mBAgCM,OAhCN,YAgCM;mCA/BJ,mBAEQ,SAAA,EAFD,OAAM,cAAY,EAAA,CACvB,mBAAoD,QAAA,EAA9C,OAAM,sBAAoB,EAAC,eAAY,CAAA;SAE/C,mBAuBM,OAvBN,aAuBM,CAAA,eAtBJ,mBAUE,SAAA;6CATS,kBAAkB,KAAK,MAAE;UAClC,MAAK;UACJ,OAAK,eAAA,CAAA,gDAAgG,kBAAkB,KAAK,OAAE,cAAA,CAAA;UAI/H,aAAY;UACX,WAAO,SAAA,eAAA,WAAgB,gBAAgB,KAAK,GAAE,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,QAAA,CAAA;UAC9C,UAAK,WAAE,yBAAyB,KAAK,GAAE;kDAR/B,kBAAkB,KAAK,IAAE,CAAA,CAAA,EAUpC,mBAUS,UAAA;UATP,MAAK;UACL,OAAM;UACN,OAAM;UACN,cAAW;UACV,UAAK,WAAE,qBAAqB,KAAI;2CAEjC,mBAEM,OAAA;UAFD,OAAM;UAA6B,OAAM;UAAU,MAAK;UAAO,SAAQ;UAAY,QAAO;aAC7F,mBAAwL,QAAA;UAAlL,kBAAe;UAAQ,mBAAgB;UAAQ,gBAAa;UAAI,GAAE;;SAI9E,mBAAA,6CAAiD;SACjD,mBAEM,OAFN,aAEM,gBADD,kBAAkB,KAAK,OAAE,OAAA,EAAA,EAAA;;QAIhC,mBAUM,OAVN,aAUM,CATJ,mBAQS,UAAA;SAPP,MAAK;SACL,OAAM;SACL,UAAU,aAAA,UAAiB,KAAK,MAAM,kBAAkB,KAAK,SAAS,KAAK,gBAAY;SACvF,UAAK,WAAE,gBAAgB,KAAK,GAAE;YAEnB,aAAA,UAAiB,KAAK,MAAA,WAAA,EAAlC,mBAAmF,QAAnF,YAAmF,IAAA,mBAAA,QAAA,KAAA,EAAA,gBAAA,MACnF,gBAAG,aAAA,UAAiB,KAAK,KAAE,cAAA,OAAA,EAAA,EAAA,CAAA,EAAA,GAAA,YAAA,CAAA,CAAA;;mCAOrC,mBAAkE,KAAlE,aAA+C,kBAAe"}
|
|
@@ -6,7 +6,7 @@ import "./FieldsetSection-CH1jAwcc.js";
|
|
|
6
6
|
import "./userAuthorized-klLUHGxT.js";
|
|
7
7
|
import "./teamMetadata-26Mwjb2i.js";
|
|
8
8
|
import "./team_memberRoutes-Cxgte_vj.js";
|
|
9
|
-
import "./teamRoutes-
|
|
10
|
-
import { t as EditTeamForm_default } from "./EditTeamForm-
|
|
9
|
+
import "./teamRoutes-CQWRPy3J.js";
|
|
10
|
+
import { t as EditTeamForm_default } from "./EditTeamForm-DdvKHlNj.js";
|
|
11
11
|
|
|
12
12
|
export { EditTeamForm_default as default };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as useMutation } from "./useMutation-BLNuJoYl.js";
|
|
2
2
|
import { t as FieldsetSection_default } from "./FieldsetSection-CH1jAwcc.js";
|
|
3
3
|
import { n as teamUpdateSchemaWithMetadata } from "./teamMetadata-26Mwjb2i.js";
|
|
4
|
-
import { t as teamPaths } from "./teamRoutes-
|
|
4
|
+
import { t as teamPaths } from "./teamRoutes-CQWRPy3J.js";
|
|
5
5
|
import { createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, inject, openBlock, toDisplayString, unref, watch, withCtx } from "vue";
|
|
6
6
|
import { useRoute, useRouter } from "vue-router";
|
|
7
7
|
import { toast } from "vue3-toastify";
|
|
@@ -160,4 +160,4 @@ var EditTeamForm_default = _sfc_main;
|
|
|
160
160
|
|
|
161
161
|
//#endregion
|
|
162
162
|
export { EditTeamForm_default as t };
|
|
163
|
-
//# sourceMappingURL=EditTeamForm-
|
|
163
|
+
//# sourceMappingURL=EditTeamForm-DdvKHlNj.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditTeamForm-
|
|
1
|
+
{"version":3,"file":"EditTeamForm-DdvKHlNj.js","names":[],"sources":["../src/slices/team/EditTeamForm.vue"],"sourcesContent":["<template>\n <div v-if=\"form.isLoading\" class=\"flex justify-center items-center p-8\">\n <span class=\"loading loading-spinner loading-lg\"></span>\n </div>\n\n <div v-else-if=\"form.loadError\" class=\"alert alert-error mb-4\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"stroke-current shrink-0 h-6 w-6\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n <span>{{ form.loadError }}</span>\n </div>\n\n <ZiniaForm\n v-else\n @handle-submit=\"handleSubmit\"\n @success=\"handleSuccess\"\n @error=\"handleError\"\n title=\"Edit Team\"\n subtitle=\"Update team details\"\n >\n <!-- Basic Information -->\n <FieldsetSection title=\"Team Details\">\n <zinia.UniqueNameField placeholder=\"Enter unique name\" />\n <zinia.DisplayNameField placeholder=\"Enter display name\" />\n <zinia.LegalNameField placeholder=\"Enter legal name (optional)\" />\n </FieldsetSection>\n\n <FieldsetSection title=\"Description\">\n <zinia.DescriptionField placeholder=\"Enter team description\" />\n </FieldsetSection>\n\n <!-- Contact Information -->\n <FieldsetSection title=\"Contact Information\">\n <zinia.ContactNameField placeholder=\"Enter contact name\" />\n <zinia.ContactEmailField placeholder=\"Enter contact email\" />\n <zinia.ContactBusinessPhoneField placeholder=\"Enter business phone\" />\n <zinia.ContactMobilePhoneField placeholder=\"Enter mobile phone\" />\n <zinia.ContactTimeZoneField placeholder=\"Enter time zone\" />\n </FieldsetSection>\n\n <!-- Address Information -->\n <FieldsetSection title=\"Address\">\n <zinia.AddressFullField placeholder=\"Enter address\" />\n <zinia.AddressCityField placeholder=\"Enter city\" />\n <zinia.AddressZipField placeholder=\"Enter zip code\" />\n </FieldsetSection>\n\n <!-- Web Presence -->\n <FieldsetSection title=\"Web Presence\">\n <zinia.TwitterUsernameField placeholder=\"Enter Twitter username\" />\n <zinia.UrlField placeholder=\"Enter URL\" />\n </FieldsetSection>\n\n <!-- Branding -->\n <FieldsetSection title=\"Branding\">\n <zinia.LogoField placeholder=\"Enter logo URL\" />\n </FieldsetSection>\n\n <!-- Email Settings -->\n <FieldsetSection title=\"Email Settings\">\n <zinia.EmailSentFromField placeholder=\"Enter sent from email\" />\n <zinia.EmailReplyToField placeholder=\"Enter reply to email\" />\n </FieldsetSection>\n\n <!-- Form Status Messages -->\n <div v-if=\"form.submitError\" class=\"alert alert-error mb-4\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"stroke-current shrink-0 h-6 w-6\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n <span>{{ form.submitError }}</span>\n </div>\n\n <!-- Submit Button -->\n <div class=\"flex justify-center mt-6\">\n <ZiniaSubmitButton submitText=\"Update Team\" submittingText=\"Updating Team...\" />\n </div>\n <ZiniaFormErrorsSummary title=\"Please fix the following errors:\" />\n <ZiniaResetButton />\n </ZiniaForm>\n</template>\n\n<script setup lang=\"ts\">\nimport FieldsetSection from '../../components/ui/FieldsetSection.vue';\nimport { useMutation } from '../../composables/useMutation';\nimport { useForm } from '@dragonmastery/zinia-forms-core';\nimport type { TeamReadDto, TeamUpdateDto } from '@dragonmastery/dragoncore-shared';\nimport { inject, watch } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { toast } from 'vue3-toastify';\nimport { teamUpdateSchemaWithMetadata } from './teamMetadata';\nimport { teamPaths } from './teamRoutes';\n\ninterface Props {\n team: TeamReadDto | null;\n isLoading?: boolean;\n error?: Error | null;\n}\n\nconst props = defineProps<Props>();\n\nconst route = useRoute();\nconst router = useRouter();\nconst team_id = route.params.id as string;\n\nconst {\n form,\n zinia,\n ZiniaForm,\n ZiniaSubmitButton,\n ZiniaResetButton,\n ZiniaFormErrorsSummary,\n clearSavedFormState,\n} = useForm(teamUpdateSchemaWithMetadata, {\n storeName: `edit-team-${team_id}`,\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n fetchData: async () => {\n if (!props.team) {\n throw new Error('No team data found');\n }\n\n return props.team as TeamUpdateDto;\n },\n});\n\n// Get refresh function from parent\nconst refreshTeam = inject<(() => Promise<void>) | undefined>('refreshTeam');\n\n// Redirect to view if team is archived\nwatch(\n () => props.team,\n (team) => {\n if (team?.archived_at) {\n router.replace({\n name: teamPaths.view.name,\n params: { id: team_id },\n });\n }\n },\n);\n\n// Setup mutation for updating team\nconst { mutate: updateTeam } = useMutation(\n (api, input: TeamUpdateDto) => api.teams.updateTeam(input),\n { invalidate: /^teams?:/ },\n);\n\n// Handle form submission\nconst handleSubmit = async (formData: TeamUpdateDto) => {\n const updatedTeam = await updateTeam(formData);\n if (!updatedTeam) {\n throw new Error('Failed to update team');\n }\n return updatedTeam;\n};\n\n// Handle successful submission\nconst handleSuccess = async () => {\n clearSavedFormState();\n toast.success(`Team updated successfully!`);\n // Refresh team data via parent\n if (refreshTeam) {\n await refreshTeam();\n }\n};\n\n// Handle submission error\nconst handleError = (error: Error | unknown) => {\n form.setSubmitError(error instanceof Error ? error.message : 'An unknown error occurred');\n};\n</script>\n"],"mappings":"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"}
|
|
@@ -3,6 +3,6 @@ import "./EnhancedRefreshTokenHandler-C6tZCcfX.js";
|
|
|
3
3
|
import "./useQueryCache-alzaRWEb.js";
|
|
4
4
|
import "./useMutation-BLNuJoYl.js";
|
|
5
5
|
import "./AppLink-FcNGKgvG.js";
|
|
6
|
-
import { t as LoginForm_default } from "./LoginForm-
|
|
6
|
+
import { t as LoginForm_default } from "./LoginForm-CSMHsZrq.js";
|
|
7
7
|
|
|
8
8
|
export { LoginForm_default as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoginForm-
|
|
1
|
+
{"version":3,"file":"LoginForm-CSMHsZrq.js","names":[],"sources":["../src/slices/auth/features/login/loginSchema.ts","../src/slices/auth/features/login/LoginForm.vue"],"sourcesContent":["import { withMetadata } from '@dragonmastery/zinia-forms-core';\nimport { loginSchema } from '@dragonmastery/dragoncore-shared';\nimport { z } from 'zod';\n\n// Define the login form type\nexport type LoginForm = z.infer<typeof loginSchema>;\n\n// Enhance the schema with metadata\nexport const loginSchemaWithMetadata = withMetadata(loginSchema, 'loginSchema', {\n email: {\n inputType: 'email',\n placeholder: 'you@example.com',\n helpText: 'Enter the email address you used to register',\n autocomplete: 'username',\n className: 'login-field',\n autofocus: true,\n },\n\n password: {\n inputType: 'password',\n placeholder: '••••••••',\n helpText: 'Must be at least 8 characters',\n autocomplete: 'current-password',\n className: 'login-field',\n },\n});\n","<template>\n <div class=\"max-w-md mx-auto bg-base-200 p-6 rounded-xl shadow-md container\">\n <slot name=\"above-form\" />\n\n <h1 class=\"text-2xl font-bold mb-6 text-center\">Login</h1>\n\n <ZiniaForm\n @handle-submit=\"effectiveHandleSubmit\"\n @success=\"effectiveHandleSuccess\"\n @error=\"effectiveHandleError\"\n >\n <zinia.EmailField />\n <zinia.PasswordField />\n\n <ZiniaSubmitButton submitText=\"Login\" submittingText=\"Logging in...\" />\n\n <!-- Error banner - app can override via slot -->\n <slot name=\"error-banner\" :error=\"loginBannerMessage\" :clear=\"clearBanner\">\n <div\n v-if=\"loginBannerMessage\"\n class=\"mt-4 p-4 rounded-lg bg-error/15 text-error\"\n >\n <p class=\"text-sm\">{{ loginBannerMessage }}</p>\n </div>\n </slot>\n\n <div class=\"mt-2\">\n <AppLink :to=\"forgotPasswordLink\" class=\"link-accent link\">\n Forgot your password?\n </AppLink>\n </div>\n <div v-if=\"allowUserSignup\" class=\"text-center mt-2\">\n <p>\n Don't have an account?\n <AppLink class=\"link-accent link\" :to=\"signupLink\">Sign up</AppLink>\n </p>\n </div>\n </ZiniaForm>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type { LoginResponse } from '@dragonmastery/dragoncore-shared';\nimport AppLink from '../../../../components/AppLink.vue';\nimport { useMutation } from '../../../../composables/useMutation';\nimport { useEnv } from '../../../../composables/useEnv';\nimport { useUserSessionStore } from '../../../../composables/useUserSessionStore';\nimport { getValidReturnUrl, withReturnUrl } from '../../../../utils/useReturnUrl';\nimport { useForm } from '@dragonmastery/zinia-forms-core';\nimport { computed, ref } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { z } from 'zod';\nimport { loginSchemaWithMetadata } from './loginSchema';\n\ntype LoginInput = z.infer<typeof loginSchemaWithMetadata>;\n\nconst props = withDefaults(\n defineProps<{\n /** Override submit handler (e.g. for pre-submit validation). Return login response or throw. */\n onHandleSubmit?: (data: LoginInput) => Promise<LoginResponse>;\n /** Override success handler (e.g. for custom redirect). */\n onSuccess?: (data: LoginResponse) => void | Promise<void>;\n /** Override error handler. Call defaultHandler() to show default banner for non-custom errors. */\n onError?: (error: unknown, defaultHandler: () => void) => void;\n }>(),\n {},\n);\n\nconst { allowUserSignup, emailVerificationMode } = useEnv();\nconst route = useRoute();\nconst returnUrl = computed(() => route.query.returnUrl as string | undefined);\nconst forgotPasswordLink = computed(() => withReturnUrl('/auth/forgot-password', returnUrl.value));\nconst signupLink = computed(() => withReturnUrl('/auth/signup', returnUrl.value));\n\nconst loginBannerMessage = ref<string | null>(null);\n\n// Create a type-safe form using our schema with metadata\nconst { form, zinia, ZiniaForm, ZiniaSubmitButton } = useForm(loginSchemaWithMetadata, {\n storeName: 'login-form',\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n});\n\nconst sessionStore = useUserSessionStore();\nconst router = useRouter();\nconst { mutate: loginMutate } = useMutation(\n (api, input: LoginInput) => api.userSessions.login(input),\n { credentials: 'include' }, // Include credentials to allow cookies\n);\n\nconst clearBanner = () => {\n loginBannerMessage.value = null;\n};\n\n// Default handlers\nconst defaultHandleSubmit = async (data: LoginInput): Promise<LoginResponse> => {\n loginBannerMessage.value = null;\n\n const loginData = await loginMutate(data);\n if (!loginData) throw new Error('Login failed');\n const { access_token, user_details_token } = loginData;\n if (!access_token || !user_details_token) throw new Error('Invalid login response');\n\n return loginData;\n};\n\nconst defaultHandleSuccess = async (data: LoginResponse) => {\n sessionStore.setSession(data.user_details_token);\n sessionStore.setAccessToken(data.access_token);\n\n form.reset();\n loginBannerMessage.value = null;\n\n const emailVerified = data.frontend_session?.user?.email_verified ?? true;\n const needsVerification =\n emailVerificationMode === 'strict' && !emailVerified;\n\n const targetPath = needsVerification\n ? withReturnUrl('/auth/verify-email', returnUrl.value)\n : getValidReturnUrl(router.currentRoute.value, '/');\n\n await router.push(targetPath);\n};\n\nconst defaultHandleError = (error: unknown) => {\n loginBannerMessage.value =\n error instanceof Error ? error.message : 'Invalid username or password was entered.';\n};\n\n// Effective handlers: use prop override if provided, else default\nconst effectiveHandleSubmit = props.onHandleSubmit ?? defaultHandleSubmit;\nconst effectiveHandleSuccess = props.onSuccess ?? defaultHandleSuccess;\nconst effectiveHandleError = (error: unknown) => {\n if (props.onError) {\n props.onError(error, () => defaultHandleError(error));\n } else {\n defaultHandleError(error);\n }\n};\n</script>\n"],"mappings":"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"}
|
|
@@ -3,9 +3,9 @@ import "./EnhancedRefreshTokenHandler-C6tZCcfX.js";
|
|
|
3
3
|
import "./useQueryCache-alzaRWEb.js";
|
|
4
4
|
import { t as useMutation } from "./useMutation-BLNuJoYl.js";
|
|
5
5
|
import { t as useQuery } from "./useQuery-BzUGEOj0.js";
|
|
6
|
-
import "./src-
|
|
6
|
+
import "./src-BIX3mMjo.js";
|
|
7
7
|
import "./AppLink-FcNGKgvG.js";
|
|
8
|
-
import { p as useInjectedPinnedPresets } from "./saved_filter-
|
|
8
|
+
import { p as useInjectedPinnedPresets } from "./saved_filter-C6YHkEMV.js";
|
|
9
9
|
import { t as ConfirmDialog_default } from "./ConfirmDialog-DjthOYU6.js";
|
|
10
10
|
import "./InlineAttachments-DAn_QknY.js";
|
|
11
11
|
import "./TeamMembersTab-BigqpBDH.js";
|
|
@@ -20,46 +20,46 @@ import "./UserProfilePage-FNLYK9kj.js";
|
|
|
20
20
|
import "./ChangePasswordPage-nr0B06HB.js";
|
|
21
21
|
import "./teamMetadata-26Mwjb2i.js";
|
|
22
22
|
import "./team_memberRoutes-Cxgte_vj.js";
|
|
23
|
-
import "./teamRoutes-
|
|
24
|
-
import "./CreateTeamForm-
|
|
25
|
-
import "./EditTeamForm-
|
|
23
|
+
import "./teamRoutes-CQWRPy3J.js";
|
|
24
|
+
import "./CreateTeamForm-DNkueBzR.js";
|
|
25
|
+
import "./EditTeamForm-DdvKHlNj.js";
|
|
26
26
|
import "./TeamHistoryTab-p3hDxCc3.js";
|
|
27
|
-
import "./TeamList-
|
|
27
|
+
import "./TeamList-B4gWPzce.js";
|
|
28
28
|
import "./TeamNotesTab-DPw9YEwK.js";
|
|
29
|
-
import "./TeamParent-
|
|
30
|
-
import "./ViewTeam-
|
|
29
|
+
import "./TeamParent-KQmJgJ9x.js";
|
|
30
|
+
import "./ViewTeam-BV7SjH8R.js";
|
|
31
31
|
import "./teamMemberMetadata-DX0W-B7p.js";
|
|
32
32
|
import "./CreateTeamMemberForm-ITp4XFn9.js";
|
|
33
33
|
import "./EditTeamMemberForm-Fyf8Zxfh.js";
|
|
34
34
|
import "./TeamMemberList-D0-dM5kI.js";
|
|
35
35
|
import "./TeamMemberParent-CJGWXjuM.js";
|
|
36
36
|
import "./ViewTeamMember-Cf5yXdv6.js";
|
|
37
|
-
import "./customerSupportTicketRoutes-
|
|
38
|
-
import "./staffSupportTicketRoutes-
|
|
37
|
+
import "./customerSupportTicketRoutes-_HjQcEAD.js";
|
|
38
|
+
import "./staffSupportTicketRoutes-WPaItK5S.js";
|
|
39
39
|
import "./TimelineSystemEvent-Ch1sZiyO.js";
|
|
40
|
-
import "./CustomerCreateSupportTicketForm-
|
|
40
|
+
import "./CustomerCreateSupportTicketForm-CeG8IKA1.js";
|
|
41
41
|
import "./CustomerSupportTicketParent-BaKfkSlU.js";
|
|
42
|
-
import "./CustomerSupportTicketSuccess-
|
|
43
|
-
import "./StaffCreateSupportTicketForm-
|
|
42
|
+
import "./CustomerSupportTicketSuccess-Cc75m_p-.js";
|
|
43
|
+
import "./StaffCreateSupportTicketForm-ANtaO4pe.js";
|
|
44
44
|
import "./SupportTicketDevLifecycleBadge-BYKZjEv6.js";
|
|
45
45
|
import "./StaffSupportTicketParent-yoC-_Lku.js";
|
|
46
|
-
import "./StaffSupportTicketSuccess-
|
|
47
|
-
import "./
|
|
48
|
-
import "./
|
|
49
|
-
import "./
|
|
46
|
+
import "./StaffSupportTicketSuccess-CB4Oa_2J.js";
|
|
47
|
+
import "./Signup-EykiX-bQ.js";
|
|
48
|
+
import "./LoginForm-CSMHsZrq.js";
|
|
49
|
+
import "./useEmailVerificationChannel-C4bvvG2b.js";
|
|
50
50
|
import "./ForgotPassword-Dd-E3_o1.js";
|
|
51
51
|
import "./ResetPassword-CyizBRob.js";
|
|
52
52
|
import "./Logout-Bdktl4NZ.js";
|
|
53
53
|
import "./mfaSchema-C6PatIbY.js";
|
|
54
54
|
import "./MfaSetup-Bjc3v0hs.js";
|
|
55
55
|
import "./MfaVerify-uJlPz8xg.js";
|
|
56
|
-
import "./VerifyEmail-
|
|
56
|
+
import "./VerifyEmail-BVwHQpbw.js";
|
|
57
57
|
import "./UserListPage-A0_eNpQ1.js";
|
|
58
58
|
import "./CreateUserPage-1WiLNGr_.js";
|
|
59
59
|
import "./EditUserPage-BBzGmOrx.js";
|
|
60
|
-
import "./CreditTransactionHistory-
|
|
61
|
-
import "./CreditBalanceDashboard-
|
|
62
|
-
import "./CreditManagement-
|
|
60
|
+
import "./CreditTransactionHistory-BZZGQxTV.js";
|
|
61
|
+
import "./CreditBalanceDashboard-CLQ8NZnY.js";
|
|
62
|
+
import "./CreditManagement-Dus4O1BY.js";
|
|
63
63
|
import { Fragment, computed, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, nextTick, openBlock, ref, renderList, resolveComponent, toDisplayString, unref, vModelText, withCtx, withDirectives, withKeys } from "vue";
|
|
64
64
|
|
|
65
65
|
//#region src/slices/saved_filter/SavedFiltersPage.vue
|
|
@@ -453,4 +453,4 @@ var SavedFiltersPage_default = _sfc_main;
|
|
|
453
453
|
|
|
454
454
|
//#endregion
|
|
455
455
|
export { SavedFiltersPage_default as default };
|
|
456
|
-
//# sourceMappingURL=SavedFiltersPage-
|
|
456
|
+
//# sourceMappingURL=SavedFiltersPage-B9aQYpwf.js.map
|