Add files via upload
This commit is contained in:
parent
9fb037a648
commit
2a8ba7eeba
14 changed files with 478 additions and 387 deletions
|
|
@ -1,7 +1,21 @@
|
|||
import { useEffect } from 'react';
|
||||
import { getAccessToken, getMe, clearTokens } from '../services/api';
|
||||
import AsyncStorage from '@react-native-async-storage/async-storage';
|
||||
import { getAccessToken, getMe, clearTokens, User } from '../services/api';
|
||||
import { useAuth } from '../store';
|
||||
|
||||
const USER_KEY = 'ns-music-user';
|
||||
|
||||
export async function saveUser(user: User): Promise<void> {
|
||||
await AsyncStorage.setItem(USER_KEY, JSON.stringify(user));
|
||||
}
|
||||
|
||||
export async function loadCachedUser(): Promise<User | null> {
|
||||
try {
|
||||
const raw = await AsyncStorage.getItem(USER_KEY);
|
||||
return raw ? JSON.parse(raw) : null;
|
||||
} catch { return null; }
|
||||
}
|
||||
|
||||
export function useBootAuth() {
|
||||
const { setUser, setReady } = useAuth();
|
||||
|
||||
|
|
@ -10,10 +24,26 @@ export function useBootAuth() {
|
|||
try {
|
||||
const token = await getAccessToken();
|
||||
if (!token) { setReady(true); return; }
|
||||
|
||||
// Use cached user for immediate display while validating
|
||||
const cached = await loadCachedUser();
|
||||
if (cached) setUser(cached);
|
||||
|
||||
// Validate token and get fresh data
|
||||
const me = await getMe();
|
||||
if (me) setUser(me);
|
||||
if (me) {
|
||||
// Preserve plan from initial login since no endpoint exposes it
|
||||
const merged: User = { ...me, plan: cached?.plan || me.plan };
|
||||
setUser(merged);
|
||||
saveUser(merged).catch(() => {});
|
||||
} else {
|
||||
// Token invalid — clear everything
|
||||
await clearTokens();
|
||||
await AsyncStorage.removeItem(USER_KEY);
|
||||
setUser(null);
|
||||
}
|
||||
} catch {
|
||||
// ignore
|
||||
// Network error — cached user already set above, just mark ready
|
||||
} finally {
|
||||
setReady(true);
|
||||
}
|
||||
|
|
@ -23,5 +53,6 @@ export function useBootAuth() {
|
|||
|
||||
export async function logout() {
|
||||
await clearTokens();
|
||||
await AsyncStorage.removeItem(USER_KEY).catch(() => {});
|
||||
useAuth.getState().setUser(null);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue