import { useParams } from 'react-router-dom';
import TableForm from '../components/TableForm/TableForm';
import { useEffect, useRef, useState } from 'react';
import { TablesApi } from '../api/tables';
import { toast } from 'react-toastify';
import { createPortal } from 'react-dom';
import {
NameTask,
TaskInfoContainer,
} from '../components/common/SwitchFormTask/SwitchFormTask.style';
import { BackButton } from '../components/common/Buttons/BackButton';
import { useAuth } from '../app/context/AuthProvider';
import { connectToTable } from '../api/ws';
const TableInfo = ({ table }) => {
if (!table) {
return null;
}
const portalContent = (
{table.name}
);
const targetElement = document.getElementById('TableInfo');
if (targetElement) {
return createPortal(portalContent, targetElement);
}
};
export default function TablePage() {
const { tableId } = useParams();
const [table, setTable] = useState(null);
const [wsConnection, setWsConnection] = useState(null);
const { user } = useAuth();
const isUnmountingRef = useRef(false);
useEffect(() => {
if (!tableId) return;
TablesApi.getTableInfo(Number(tableId))
.then((data) => {
if (data.result) {
setTable(data.result);
}
})
.catch(() => {
toast.error('Ошибка получения информации о таблице');
});
}, [tableId]);
useEffect(() => {
if (!tableId || !user) return;
const connection = connectToTable(tableId, user?.id, {
onError: () => {
toast.error('Ошибка подключения к серверу');
},
onClose: (event) => {
if (isUnmountingRef.current) {
return;
}
if (event.code !== 1000) {
toast.warning(
'Соединение с сервером потеряно. Изменения не будут синхронизироваться в реальном времени.',
);
}
},
});
setWsConnection(connection);
return () => {
console.log('Отключение от WebSocket');
isUnmountingRef.current = true;
connection.disconnect();
};
}, [tableId, user]);
if (!table) {
return null;
}
return (
<>
>
);
}