Files
dezky/apps/portal/composables/usePartnerMode.ts
T
Ronni Baslund 7720e4be83 refactor(portal): partner-mode customer switcher on real tenants
Migrate the partner-mode customer switcher, in-customer banner, sidebar tile and the team invite/teammate panels off the data/customers fixture onto the real /api/partner/tenants list (shared key, gated to partner-staff so the global shell doesn't 403 for other users). Active customer resolves by tenant _id (the key the customers page already passes to partnerMode.enter); partner-identity labels now use the real partner name from useMe. Removes the now-unused customers + CustomerOrg-list fixture export and the dead setCustomer helper. Verified in UI: switcher + enter/exit show real Baslund Test / Baslund Research ApS.
2026-05-30 14:51:14 +02:00

38 lines
1.3 KiB
TypeScript

// Partner admin's "acting as a customer admin" state. When a partner clicks
// into a customer org, the sidebar reshapes to that customer's admin nav and
// a persistent banner indicates the partner context.
//
// In real use, every action while in this mode is logged with the partner's
// identity (not the customer's) — the design spec is explicit about this for
// trust. We hold the active customer's tenant _id (the same key the customers
// page passes to enter()); consumers resolve it against the real tenant list.
const activeCustomerId = ref<string | null>(null)
export const usePartnerMode = () => {
function enter(customerId: string) {
activeCustomerId.value = customerId
if (import.meta.client) {
sessionStorage.setItem('dezky-partner-active-customer', customerId)
}
}
function exit() {
activeCustomerId.value = null
if (import.meta.client) {
sessionStorage.removeItem('dezky-partner-active-customer')
}
}
function hydrate() {
if (!import.meta.client || activeCustomerId.value) return
const stored = sessionStorage.getItem('dezky-partner-active-customer')
if (stored) activeCustomerId.value = stored
}
return {
activeCustomerId,
isActive: computed(() => activeCustomerId.value !== null),
enter,
exit,
hydrate,
}
}