UNPKG

dry-react

Version:

Initialiseur de structure React Native typée et modulaire

80 lines (69 loc) 2.18 kB
const fs = require('fs'); const path = require('path'); module.exports = function generateAuthHook() { const hooksPath = path.join(__dirname, '..', 'src', 'hooks'); fs.mkdirSync(hooksPath, { recursive: true }); const content = `import { useEffect } from 'react'; import AsyncStorage from '@react-native-async-storage/async-storage'; import { useAppDispatch, useAppSelector } from '../store/hooks.tsx'; import { logout, setToken, setUser } from '../store/slices/auth.slice.tsx'; interface StorageUser { token: string; data: { id: string; name: string; email: string; avatar?: string; bio?: string; friendsCount?: number; postsCount?: number; }; } export const useAuthUser = () => { const dispatch = useAppDispatch(); const { user, token, isAuthenticated } = useAppSelector((state: any) => state.auth); useEffect(() => { const loadUserFromStorage = async () => { try { const userData: any = await getUserFromStorage(); if (userData) { dispatch(setToken(userData.token)); dispatch(setUser(userData.data)); } } catch (error) { console.error('❌ Erreur lors du chargement utilisateur:', error); } }; loadUserFromStorage().then(); }, [dispatch]); const handleLogout = () => { dispatch(logout()); clearUserFromStorage().then(); }; return { user, token, isAuthenticated, logout: handleLogout, }; }; const getUserFromStorage = async (): Promise<StorageUser | null> => { try { const userString = await AsyncStorage.getItem('currentUser'); return userString ? JSON.parse(userString) : null; } catch (error) { console.error('Erreur lecture storage:', error); return null; } }; const clearUserFromStorage = async () => { try { await AsyncStorage.removeItem('currentUser'); } catch (error) { console.error('Erreur nettoyage storage:', error); } }; `; fs.writeFileSync(path.join(hooksPath, 'useAuthUser.ts'), content); console.log(`🔐 Hook useAuthUser généré dans src/hooks/useAuthUser.ts`); };