/
viktorphp
/
front-socket
Обзор
Документация
Войти
/
viktorphp
/
front-socket
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/app/_providers/userProvider/client/UserProvider.tsx
55 строк
2 KB
Иванов Виктор Евгеньевич
feature-socket: bring web socket up
14 май 2025, 16:58
14 май 2025, 16:58
bf79bb9
Код
Авторство
О чём код?
'use client'; import { ReactNode, useEffect, useState } from 'react'; import { usePathname } from 'next/navigation'; import { useUserStore } from '@entities/user'; /** * Серверный компонент для начальной загрузки пользователя * @returns {JSX.Element} - Компонент JSX */ export const UserProvider = ({ children }: { children: ReactNode }) => { const { setUser } = useUserStore((state) => state); const [error, setError] = useState<string | null>(null); const pathname = usePathname(); useEffect(() => { // Получаем данные из cookies при первой загрузке const getUserFromCookie = (): void => { const userStr = document.cookie .split('; ') .find((row) => row.startsWith('auth_user=')) ?.split('=')[1]; if (userStr) { try { setUser(JSON.parse(decodeURIComponent(decodeURIComponent(userStr)))); } catch (error) { console.error('Ошибка парсинга пользователя из куков: ', error); } } const errorStr = document.cookie .split('; ') .find((row) => row.startsWith('auth_error=')) ?.split('=')[1]; if (errorStr) { setError(decodeURIComponent(errorStr)); } }; getUserFromCookie(); return () => { // Очистка состояний при размонтировании setError(null); setUser(null); }; }, [pathname]); return <>{children}</>; };