129 lines
4.2 KiB
JavaScript
129 lines
4.2 KiB
JavaScript
let currentRoom = null;
|
|
let currentHistoryId = 0;
|
|
|
|
function openModal(roomName) {
|
|
currentRoom = roomName;
|
|
document.getElementById('passwordModal').style.display = 'block';
|
|
}
|
|
|
|
function closeModal() {
|
|
document.getElementById('passwordModal').style.display = 'none';
|
|
}
|
|
|
|
function openCreateRoomModal() {
|
|
document.getElementById('createRoomModal').style.display = 'block';
|
|
}
|
|
|
|
function closeCreateRoomModal() {
|
|
document.getElementById('createRoomModal').style.display = 'none';
|
|
}
|
|
|
|
async function createRoom() {
|
|
const errorElement = document.getElementById('error');
|
|
const roomName = document.getElementById('newRoomName').value.trim();
|
|
const roomNickname = document.getElementById('newRoomNickname').value.trim();
|
|
|
|
|
|
errorElement.style.display = 'none';
|
|
errorElement.textContent = '';
|
|
|
|
if (roomName === '' || roomNickname === '') {
|
|
errorElement.textContent = 'Пожалуйста, заполните все поля';
|
|
errorElement.style.display = 'block';
|
|
return;
|
|
}
|
|
|
|
const request = {
|
|
LocalHistoryId: currentHistoryId,
|
|
content: {
|
|
name: roomName,
|
|
nickname: roomNickname
|
|
}
|
|
};
|
|
|
|
try {
|
|
const response = await fetch('/internalapi/createChat', {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json'
|
|
},
|
|
body: JSON.stringify(request)
|
|
});
|
|
|
|
const res = await response.json();
|
|
|
|
if (res.status === 0) {
|
|
addRoomToList(roomName, roomNickname);
|
|
closeCreateRoomModal();
|
|
currentHistoryId = res.update.LocalHistoryId;
|
|
window.location.href = '/chat/' + roomNickname;
|
|
} else {
|
|
throw new Error(res.error || 'Ошибка');
|
|
}
|
|
} catch (error) {
|
|
alert('Ошибка создания чата: ' + error.message);
|
|
}
|
|
}
|
|
|
|
function addRoomToList(roomName, roomNickname) {
|
|
const roomList = document.querySelector('.room-list');
|
|
|
|
const existingRoomItem = Array.from(roomList.children).find(item => item.querySelector('.room-name').textContent === roomName);
|
|
if (existingRoomItem) {
|
|
existingRoomItem.remove();
|
|
}
|
|
|
|
const roomItem = document.createElement('li');
|
|
roomItem.classList.add('room-item');
|
|
roomItem.innerHTML = `
|
|
<span class="room-name">${roomName}</span>
|
|
<button class="join-button" onclick="window.location.href = '/chat/${roomNickname}'">Войти</button>
|
|
`;
|
|
roomList.appendChild(roomItem);
|
|
}
|
|
|
|
async function initializeRoomList() {
|
|
try {
|
|
const response = await fetch('/internalapi/getChatList', {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json'
|
|
},
|
|
body: JSON.stringify({})
|
|
});
|
|
|
|
const res = await response.json();
|
|
|
|
if (res.status === 0) {
|
|
res.chats.forEach(chat => {
|
|
addRoomToList(chat.content.name, chat.content.nickname);
|
|
});
|
|
} else {
|
|
throw new Error(res.error || 'Неизвестная ошибка');
|
|
}
|
|
} catch (error) {
|
|
alert('Ошибка загрузки списка чатов: ' + error.message);
|
|
}
|
|
}
|
|
|
|
async function getChatID() {
|
|
const chatNickname = window.location.pathname.split('/').pop();
|
|
const response = await fetch('/internalapi/getChatList', {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json'
|
|
},
|
|
body: JSON.stringify({})
|
|
});
|
|
|
|
const res = await response.json();
|
|
for (const chat of res.chats) {
|
|
if (chat.content.nickname === chatNickname) {
|
|
return chat.id;
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
document.addEventListener('DOMContentLoaded', initializeRoomList);
|