/
viktorphp
/
front-socket
Обзор
Документация
Войти
/
viktorphp
/
front-socket
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/app/_providers/diarySocketProvider/client/DiarySocketProvider.tsx
45 строк
2 KB
Иванов Виктор Евгеньевич
[feature-diadry]: добавить страницу дневника
11 апр 2026, 16:02
11 апр 2026, 16:02
e2d184b
Код
Авторство
О чём код?
'use client'; import { ReactNode, useEffect } from 'react'; import { useDiaryStore } from '@entities/diary'; import { useUserStore } from '@entities/user'; import { diarySocketService } from '@shared/api/socket'; import { EOcrStatus } from '@shared/types'; /** * Провайдер WebSocket-подключения к namespace /diary. * Подключается при наличии авторизованного пользователя и слушает * событие ocrComplete для обновления статуса OCR файлов в сторе. */ export const DiarySocketProvider = ({ children }: { children: ReactNode }) => { const { user } = useUserStore((state) => state); const { updateFileOcrResult } = useDiaryStore((state) => state); useEffect(() => { if (!user?.id) { // Пользователь вышел — отключаемся diarySocketService.disconnect(); return; } // Подключаемся к namespace /diary diarySocketService.connect(); // Подписываемся на результат OCR: сервер присылает fileId и результат распознавания const unsubscribeOcr = diarySocketService.onOcrComplete((data) => { updateFileOcrResult(data.fileId, { ocrStatus: data.ocrStatus as EOcrStatus, ocrText: data.ocrText, ocrError: data.ocrError, }); }); return () => { unsubscribeOcr(); diarySocketService.disconnect(); }; }, [user?.id]); return <>{children}</>; };