Откат мультисессии: возвращен один активный сеанс

This commit is contained in:
AidarKC
2026-05-14 17:11:24 +03:00
parent 94263a46bd
commit 0fdb5b245c
6 changed files with 3 additions and 231 deletions
-70
View File
@@ -9,7 +9,6 @@ const ITEMS = [
{ pageId: 'profile-view', label: 'Профиль', icon: '👤' },
];
const CHANNEL_HOLD_MS = 260;
const PROFILE_HOLD_MS = 320;
const CHANNEL_MODES = Object.freeze([
{ key: 'feed', label: 'Каналы' },
{ key: 'dialogs', label: 'Чаты' },
@@ -63,8 +62,6 @@ export function renderToolbar(currentPageId, navigate) {
}
if (item.pageId === 'channels-list') {
installChannelsHoldSwitcher(btn, navigate);
} else if (item.pageId === 'profile-view') {
installProfileHoldMenu(btn, navigate);
} else {
btn.addEventListener('click', () => navigate(item.pageId));
}
@@ -74,73 +71,6 @@ export function renderToolbar(currentPageId, navigate) {
return root;
}
function installProfileHoldMenu(button, navigate) {
let holdTimer = 0;
let pressed = false;
let holdActive = false;
let overlay = null;
const clearTimer = () => {
if (holdTimer) {
window.clearTimeout(holdTimer);
holdTimer = 0;
}
};
const closeOverlay = () => {
if (overlay) overlay.remove();
overlay = null;
holdActive = false;
};
const openOverlay = () => {
const rect = button.getBoundingClientRect();
overlay = document.createElement('div');
overlay.className = 'toolbar-channels-hold-overlay';
overlay.style.minWidth = '190px';
overlay.style.left = `${Math.round(rect.left + rect.width / 2)}px`;
overlay.style.top = `${Math.round(rect.top - 12)}px`;
overlay.innerHTML = `<button type="button" class="toolbar-channels-hold-item is-active" data-action="switch-profile">Сменить профиль</button>`;
overlay.querySelector('[data-action="switch-profile"]')?.addEventListener('click', (event) => {
event.preventDefault();
event.stopPropagation();
closeOverlay();
navigate('account-switcher-view');
});
document.body.append(overlay);
holdActive = true;
};
button.addEventListener('pointerdown', () => {
pressed = true;
holdActive = false;
clearTimer();
holdTimer = window.setTimeout(() => {
if (!pressed) return;
openOverlay();
}, PROFILE_HOLD_MS);
});
button.addEventListener('pointerup', () => {
clearTimer();
const wasHold = holdActive;
pressed = false;
if (wasHold) {
window.setTimeout(closeOverlay, 80);
return;
}
navigate('profile-view');
});
button.addEventListener('pointercancel', () => {
clearTimer();
pressed = false;
closeOverlay();
});
button.addEventListener('contextmenu', (event) => event.preventDefault());
}
function installChannelsHoldSwitcher(button, navigate) {
let holdTimer = 0;
let pressed = false;