186 lines
5.5 KiB
JavaScript
186 lines
5.5 KiB
JavaScript
let rooms = {};
|
||
let roomToDelete = null;
|
||
let currentRoom = null;
|
||
let currentHistoryId = 0;
|
||
|
||
function openRoom(currentRoom) {
|
||
alert('Вы вошли в комнату: ' + currentRoom);
|
||
}
|
||
|
||
function closeAdd() {
|
||
document.getElementById('add_members').style.display = 'none';
|
||
}
|
||
|
||
function openAdd() {
|
||
document.getElementById('add_members').style.display = 'flex';
|
||
}
|
||
|
||
function openConfirm(roomNickname) {
|
||
roomToDelete = roomNickname;
|
||
document.getElementById("delete-chat").style.display = "flex";
|
||
}
|
||
|
||
function closeConfirm() {
|
||
roomToDelete = null;
|
||
document.getElementById("delete-chat").style.display = "none";
|
||
}
|
||
|
||
function deleteChat() {
|
||
if (roomToDelete && rooms[roomToDelete]) {
|
||
delete rooms[roomToDelete];
|
||
removeRoomFromList(roomToDelete);
|
||
closeConfirm();
|
||
} else {
|
||
alert("Не удалось найти выбранную комнату.");
|
||
}
|
||
}
|
||
|
||
function addMember() {
|
||
const login = document.getElementById('newMemberLogin').value;
|
||
if (login) {
|
||
alert(`Участник с никнеймом '${login}' добавлен`);
|
||
closeAdd();
|
||
} else {
|
||
alert('Пожалуйста, введите логин участника');
|
||
}
|
||
}
|
||
|
||
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);
|
||
rooms[roomNickname] = true;
|
||
closeCreateRoomModal();
|
||
currentHistoryId = res.update.LocalHistoryId;
|
||
window.location.href = '/chat/' + roomNickname;
|
||
} else {
|
||
throw new Error(res.error || 'Ошибка');
|
||
}
|
||
} catch (error) {
|
||
alert('Ошибка создания чата: ' + error.message);
|
||
}
|
||
}
|
||
|
||
function addRoomToList(roomName) {
|
||
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="delete-chat-button" onclick="openConfirm('${roomNickname}')">Удалить чат</button>
|
||
<button class="add-members-button" onclick="openAdd()">Добавить участников</button>
|
||
<button class="join-button" onclick="window.location.href = '/chat/${roomNickname}'">Войти</button>
|
||
`;
|
||
|
||
roomList.appendChild(roomItem);
|
||
}
|
||
|
||
function removeRoomFromList(roomName, roomNickname) {
|
||
const roomList = document.querySelector('.room-list');
|
||
const roomItem = Array.from(roomList.children).find(item => item.querySelector('.room-name').textContent === roomName);
|
||
if (roomItem) {
|
||
roomList.removeChild(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;
|
||
}
|
||
window.onclick = function(event) {
|
||
if (event.target === document.getElementById('createRoomModal')) {
|
||
closeCreateRoomModal();
|
||
}
|
||
}
|
||
|
||
document.getElementById('newRoomName').addEventListener('keydown', function(event) {
|
||
if (event.key === 'Enter') {
|
||
createRoom();
|
||
}
|
||
});
|
||
document.addEventListener('DOMContentLoaded', initializeRoomList); |