Add Mollie checkout flow, billing UI, and payment UX polish #71

Merged
uz1mani merged 73 commits from staging into main 2026-03-28 10:28:03 +00:00
16 changed files with 939 additions and 115 deletions
Showing only changes of commit 5cff767e32 - Show all commits

View File

@@ -81,12 +81,10 @@ function LayoutInner({ children }: { children: React.ReactNode }) {
setIsSwitchingOrg(true) setIsSwitchingOrg(true)
const { access_token } = await switchContext(orgId) const { access_token } = await switchContext(orgId)
await setSessionAction(access_token) await setSessionAction(access_token)
router.refresh() // Refresh auth context (re-fetches /auth/user/me with new JWT, updates org_id + SWR cache)
// Allow time for server components to re-fetch with new auth await auth.refresh()
setTimeout(() => { router.push('/')
setIsSwitchingOrg(false) setTimeout(() => setIsSwitchingOrg(false), 300)
router.push('/')
}, 600)
} catch (err) { } catch (err) {
setIsSwitchingOrg(false) setIsSwitchingOrg(false)
logger.error('Failed to switch organization', err) logger.error('Failed to switch organization', err)

View File

@@ -112,14 +112,9 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
try { try {
const userData = await apiRequest<User>('/auth/user/me') const userData = await apiRequest<User>('/auth/user/me')
setUser(prev => { setUser(() => {
const merged = { localStorage.setItem('user', JSON.stringify(userData))
...userData, return userData
org_id: prev?.org_id,
role: prev?.role
}
localStorage.setItem('user', JSON.stringify(merged))
return merged
}) })
} catch (e) { } catch (e) {
logger.error('Failed to refresh user data', e) logger.error('Failed to refresh user data', e)