SHA256
Откат мультисессии: возвращен один активный сеанс
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user