useUserPlan had its own module-level cache + fetch-once-on-mount, separate from useMe's invalidateMe(). So the __DEV__ tier-override toggle (which calls invalidateMe()) never reached useUserPlan consumers → the app didn't react to a plan switch. Now useUserPlan just reads me.plan from useMe → inherits its live-invalidation, the toggle propagates everywhere. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
19 lines
720 B
TypeScript
19 lines
720 B
TypeScript
import { useMe } from "./useMe";
|
|
import type { Plan } from "./useMe";
|
|
|
|
export type { Plan };
|
|
|
|
/**
|
|
* Plan des eingeloggten Users — abgeleitet aus useMe() (single source of truth,
|
|
* inkl. Live-Invalidierung via invalidateMe()).
|
|
*
|
|
* Vorher hatte useUserPlan einen eigenen Modul-Cache + fetch-once-on-mount —
|
|
* das war ein Bug: der __DEV__-Tier-Toggle (ruft invalidateMe() auf) erreichte
|
|
* die useUserPlan-Consumer NICHT, also reagierte die App nicht auf den Plan-Wechsel.
|
|
* Jetzt erbt useUserPlan die Invalidierung von useMe → Toggle propagiert überall.
|
|
*/
|
|
export function useUserPlan(): { plan: Plan; loading: boolean } {
|
|
const { me, loading } = useMe();
|
|
return { plan: me?.plan ?? "free", loading };
|
|
}
|