From d3f3850e1d773f64323d4316b0cbb050917bd2a4 Mon Sep 17 00:00:00 2001 From: Tracewebstudio Dev Date: Wed, 29 Apr 2026 09:59:41 +0200 Subject: [PATCH] fix(wallet): fetch pricing by concrete role key --- src/components/DashboardLayout.tsx | 27 ++++++++++++++++++++++++++- src/routes/dashboard/wallet/buy.tsx | 26 +++++++++++++++++++++++++- 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/src/components/DashboardLayout.tsx b/src/components/DashboardLayout.tsx index 6838387..50892b2 100644 --- a/src/components/DashboardLayout.tsx +++ b/src/components/DashboardLayout.tsx @@ -52,12 +52,37 @@ export default function DashboardLayout(props: ParentProps) { if (target) navigate(target); }; + const roleKey = createMemo(() => { + if (typeof window === "undefined") return "DEVELOPER"; + const fromUrl = new URLSearchParams(window.location.search).get("role"); + if (fromUrl && fromUrl.trim()) return fromUrl.trim().toUpperCase(); + try { + const raw = + localStorage.getItem("nxtgauge_signup_profile_v1") || + localStorage.getItem("nxtgauge_auth_user") || + localStorage.getItem("nxtgauge_user") || + sessionStorage.getItem("nxtgauge_signup_profile_v1") || + sessionStorage.getItem("nxtgauge_auth_user") || + sessionStorage.getItem("nxtgauge_user"); + if (!raw) return "DEVELOPER"; + const parsed = JSON.parse(raw); + const candidate = String( + parsed?.selectedProfessionalRole || parsed?.active_role || parsed?.roleKey || parsed?.role || "" + ) + .trim() + .toUpperCase(); + return candidate && candidate !== "PROFESSIONAL" ? candidate : "DEVELOPER"; + } catch { + return "DEVELOPER"; + } + }); + return ( {props.children} diff --git a/src/routes/dashboard/wallet/buy.tsx b/src/routes/dashboard/wallet/buy.tsx index fa65e69..48dde05 100644 --- a/src/routes/dashboard/wallet/buy.tsx +++ b/src/routes/dashboard/wallet/buy.tsx @@ -18,8 +18,32 @@ export default function BuyTracecoinsPage() { const [error, setError] = createSignal(""); const [success, setSuccess] = createSignal(false); + const resolveRoleKey = () => { + if (typeof window === "undefined") return "DEVELOPER"; + const fromUrl = new URLSearchParams(window.location.search).get("role"); + if (fromUrl && fromUrl.trim()) return fromUrl.trim().toUpperCase(); + const keys = ["nxtgauge_signup_profile_v1", "nxtgauge_auth_user", "nxtgauge_user"]; + for (const key of keys) { + try { + const raw = window.localStorage.getItem(key) || window.sessionStorage.getItem(key); + if (!raw) continue; + const parsed = JSON.parse(raw); + const candidate = String( + parsed?.selectedProfessionalRole || parsed?.active_role || parsed?.roleKey || parsed?.role || "" + ) + .trim() + .toUpperCase(); + if (candidate && candidate !== "PROFESSIONAL") return candidate; + } catch { + // ignore malformed storage payloads + } + } + return "DEVELOPER"; + }; + const [packages] = createResource(async () => { - const res = await api.get("/pricing/packages?roleKey=PROFESSIONAL"); + const roleKey = resolveRoleKey(); + const res = await api.get(`/pricing/packages?role=${encodeURIComponent(roleKey)}&roleKey=${encodeURIComponent(roleKey)}`); return res.data?.packages || []; });