import { renderHeader } from '../components/header.js'; import { isSessionInvalidError, refreshSessions, setAuthError, setAuthInfo, state, terminateCurrentSession, } from '../state.js'; export const pageMeta = { id: 'device-view', title: 'Устройства' }; function formatSessionType(sessionType) { if (Number(sessionType) === 100) return 'Homeserver'; if (Number(sessionType) === 50) return 'Wallet'; if (Number(sessionType) === 1) return 'Client'; return `Type ${Number(sessionType) || 0}`; } function formatSessionTime(ms) { return new Date(ms).toLocaleString('ru-RU', { day: '2-digit', month: '2-digit', year: 'numeric', hour: '2-digit', minute: '2-digit', }); } function formatOnlineStatus(onlineOnThisServer) { return onlineOnThisServer ? 'Online now' : 'Offline'; } function sortSessionsByOnline(sessions = []) { return [...sessions].sort((a, b) => { const aOnline = a?.onlineOnThisServer ? 1 : 0; const bOnline = b?.onlineOnThisServer ? 1 : 0; if (aOnline !== bOnline) return bOnline - aOnline; return Number(b?.lastAuthenticatedAtMs || 0) - Number(a?.lastAuthenticatedAtMs || 0); }); } export function render({ navigate }) { const screen = document.createElement('section'); screen.className = 'stack'; screen.append( renderHeader({ title: 'Устройства', leftAction: { label: '←', onClick: () => navigate('settings-view') }, }), ); const actions = document.createElement('div'); actions.className = 'card stack'; actions.innerHTML = ` `; actions.querySelector('#connect-device-btn').addEventListener('click', () => navigate('connect-device-view')); actions.querySelector('#show-keys-btn').addEventListener('click', () => navigate('show-keys-view')); const sessionsBlock = document.createElement('div'); sessionsBlock.className = 'card stack'; const buildList = () => { sessionsBlock.innerHTML = ''; const sessions = sortSessionsByOnline(state.sessions || []); const current = sessions.find((s) => s.sessionId === state.session.sessionId) || sessions[0]; const others = sortSessionsByOnline(sessions.filter((s) => s.sessionId !== current?.sessionId)); const createSessionItem = (session, isCurrent) => { const item = document.createElement('button'); item.className = 'session-item'; item.type = 'button'; const sessionTypeText = formatSessionType(session.sessionType); const sessionPlatformText = session.clientPlatform ? ` · ${session.clientPlatform}` : ''; const onlineStatusText = formatOnlineStatus(!!session.onlineOnThisServer); const onlineStatusClass = session.onlineOnThisServer ? 'session-status session-status--online' : 'session-status'; item.innerHTML = `