From 0a4c31fb3606243f439164399843cb0c24edb70c9782c8cf9ff29ebe535cf336 Mon Sep 17 00:00:00 2001 From: AidarKC Date: Fri, 21 Aug 2026 15:04:29 +0400 Subject: [PATCH] Refine unread marker and reset registration flow --- shine-UI/js/pages/channel-view.js | 4 ++-- shine-UI/js/pages/register-view.js | 10 ++++++++-- shine-UI/js/pages/registration-keys-view.js | 14 ++++++++++++-- shine-UI/js/pages/registration-payment-view.js | 3 +++ shine-UI/js/state.js | 8 ++++++++ 5 files changed, 33 insertions(+), 6 deletions(-) diff --git a/shine-UI/js/pages/channel-view.js b/shine-UI/js/pages/channel-view.js index bac96577..83dc6ef1 100644 --- a/shine-UI/js/pages/channel-view.js +++ b/shine-UI/js/pages/channel-view.js @@ -268,7 +268,7 @@ function scrollElementToViewportFraction(element, fraction = 1 / 3, smooth = fal } function scrollChannelToUnreadLine(screen, smooth = false) { - return scrollElementToViewportFraction(screen.querySelector('.channel-unread-line'), 1 / 3, smooth); + return scrollElementToViewportFraction(screen.querySelector('.channel-unread-line'), 0.42, smooth); } function createChannelReadTracker({ @@ -2150,7 +2150,7 @@ function renderBody(screen, navigate, routeKey, channelData, handlers) { if (!unreadLineInserted && item.type === 'post' && Number(item?.post?.localNumber || 0) > readCount) { const unreadLine = document.createElement('div'); unreadLine.className = 'card channel-unread-line'; - unreadLine.textContent = `Не прочитано: ${unreadCount}`; + unreadLine.textContent = 'Не прочитанные сообщения'; feed.append(unreadLine); unreadLineInserted = true; } diff --git a/shine-UI/js/pages/register-view.js b/shine-UI/js/pages/register-view.js index edf8dd3f..11c336a0 100644 --- a/shine-UI/js/pages/register-view.js +++ b/shine-UI/js/pages/register-view.js @@ -1,5 +1,5 @@ import { renderHeader } from '../components/header.js'; -import { authService, clearAuthMessages, state } from '../state.js'; +import { authService, clearAuthMessages, resetRegistrationFlow, state } from '../state.js'; import { toUserMessage } from '../services/ui-error-texts.js'; import { checkLoginExistsOnSolana, @@ -426,7 +426,13 @@ export function render({ navigate }) { screen.append( renderHeader({ title: 'Зарегистрироваться', - leftAction: { label: '←', onClick: () => navigate('start-view') }, + leftAction: { + label: '←', + onClick: () => { + resetRegistrationFlow(); + navigate('start-view'); + }, + }, }), form, actions, diff --git a/shine-UI/js/pages/registration-keys-view.js b/shine-UI/js/pages/registration-keys-view.js index 7189a89f..1ae305d2 100644 --- a/shine-UI/js/pages/registration-keys-view.js +++ b/shine-UI/js/pages/registration-keys-view.js @@ -3,6 +3,7 @@ import { authService, authorizeSession, refreshSessions, + resetRegistrationFlow, setAuthError, setAuthInfo, state, @@ -102,7 +103,10 @@ export function render({ navigate }) { cancelButton.className = 'ghost-btn'; cancelButton.type = 'button'; cancelButton.textContent = 'Отмена'; - cancelButton.addEventListener('click', () => navigate('start-view')); + cancelButton.addEventListener('click', () => { + resetRegistrationFlow(); + navigate('start-view'); + }); const okButton = document.createElement('button'); okButton.className = 'primary-btn'; @@ -190,7 +194,13 @@ export function render({ navigate }) { screen.append( renderHeader({ title: 'Сохранение ключей', - leftAction: { label: '←', onClick: () => navigate('start-view') }, + leftAction: { + label: '←', + onClick: () => { + resetRegistrationFlow(); + navigate('start-view'); + }, + }, }), card, actions, diff --git a/shine-UI/js/pages/registration-payment-view.js b/shine-UI/js/pages/registration-payment-view.js index 4e54e206..29087031 100644 --- a/shine-UI/js/pages/registration-payment-view.js +++ b/shine-UI/js/pages/registration-payment-view.js @@ -3,6 +3,7 @@ import { authService, authorizeSession, refreshSessions, + resetRegistrationFlow, setAuthError, setAuthInfo, state, @@ -553,6 +554,7 @@ function renderSolanaRegistrationStage({ navigate, status, keyBundle, registrati replacement.addEventListener('click', () => { stageClosed = true; stopTimers(); + resetRegistrationFlow(); navigate('start-view'); }); headerBackButton.replaceWith(replacement); @@ -657,6 +659,7 @@ function renderSolanaDoneStage({ navigate, status, keyBundle, registrationTxId = replacement.addEventListener('click', () => { loginCompleted = true; stopAutoLogin(); + resetRegistrationFlow(); navigate('start-view'); }); headerBackButton.replaceWith(replacement); diff --git a/shine-UI/js/state.js b/shine-UI/js/state.js index bcbab5ab..46259365 100644 --- a/shine-UI/js/state.js +++ b/shine-UI/js/state.js @@ -925,6 +925,14 @@ export async function refreshSessions() { return state.sessions; } +export function resetRegistrationFlow() { + const next = createInitialState(); + state.registrationDraft = next.registrationDraft; + state.registrationHelp = next.registrationHelp; + state.registrationPayment = next.registrationPayment; + state.keyStorage = next.keyStorage; +} + function resetStateForSignedOut() { const next = createInitialState({ withStoredSession: false }); state.chats = next.chats;