UI: отключение вкладки чатов и исправление загрузки каналов
This commit is contained in:
parent
ab31ccf6d8
commit
a332ddc828
@ -1,2 +1,2 @@
|
|||||||
client.version=1.2.57
|
client.version=1.2.58
|
||||||
server.version=1.2.51
|
server.version=1.2.52
|
||||||
|
|||||||
@ -49,6 +49,11 @@ function toSafeInt(value) {
|
|||||||
return Number.isFinite(parsed) ? parsed : null;
|
return Number.isFinite(parsed) ? parsed : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function looksLikeBlockchainName(value) {
|
||||||
|
const raw = String(value || '').trim();
|
||||||
|
return /^[^-]+-\d+$/.test(raw);
|
||||||
|
}
|
||||||
|
|
||||||
function makeReactionActionKey(messageRef) {
|
function makeReactionActionKey(messageRef) {
|
||||||
const login = String(state.session.login || '').trim().toLowerCase();
|
const login = String(state.session.login || '').trim().toLowerCase();
|
||||||
const blockchainName = String(messageRef?.blockchainName || '').trim();
|
const blockchainName = String(messageRef?.blockchainName || '').trim();
|
||||||
@ -581,10 +586,33 @@ export function render({ navigate, route }) {
|
|||||||
...(Array.isArray(ownFeed?.followedUsersChannels) ? ownFeed.followedUsersChannels : []),
|
...(Array.isArray(ownFeed?.followedUsersChannels) ? ownFeed.followedUsersChannels : []),
|
||||||
...(Array.isArray(ownFeed?.followedChannels) ? ownFeed.followedChannels : []),
|
...(Array.isArray(ownFeed?.followedChannels) ? ownFeed.followedChannels : []),
|
||||||
];
|
];
|
||||||
const channel = allRows.find((item) => (
|
const ownerRaw = String(selector.short.ownerBlockchainName || '').trim();
|
||||||
String(item?.channel?.ownerBlockchainName || '').trim() === selector.short.ownerBlockchainName
|
const ownerNormalized = ownerRaw.toLowerCase();
|
||||||
&& String(item?.channel?.channelName || '').trim().toLowerCase() === selector.short.channelName.toLowerCase()
|
const channelNameNormalized = String(selector.short.channelName || '').trim().toLowerCase();
|
||||||
|
let channel = allRows.find((item) => (
|
||||||
|
String(item?.channel?.ownerBlockchainName || '').trim().toLowerCase() === ownerNormalized
|
||||||
|
&& String(item?.channel?.channelName || '').trim().toLowerCase() === channelNameNormalized
|
||||||
));
|
));
|
||||||
|
if (!channel) {
|
||||||
|
channel = allRows.find((item) => (
|
||||||
|
String(item?.channel?.ownerLogin || '').trim().toLowerCase() === ownerNormalized
|
||||||
|
&& String(item?.channel?.channelName || '').trim().toLowerCase() === channelNameNormalized
|
||||||
|
));
|
||||||
|
}
|
||||||
|
if (!channel && !looksLikeBlockchainName(ownerRaw)) {
|
||||||
|
try {
|
||||||
|
const ownerUser = await authService.getUser(ownerRaw);
|
||||||
|
const ownerBch = String(ownerUser?.blockchainName || '').trim().toLowerCase();
|
||||||
|
if (ownerBch) {
|
||||||
|
channel = allRows.find((item) => (
|
||||||
|
String(item?.channel?.ownerBlockchainName || '').trim().toLowerCase() === ownerBch
|
||||||
|
&& String(item?.channel?.channelName || '').trim().toLowerCase() === channelNameNormalized
|
||||||
|
));
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
// ignore fallback lookup errors
|
||||||
|
}
|
||||||
|
}
|
||||||
const ownerBch = String(channel?.channel?.ownerBlockchainName || '').trim();
|
const ownerBch = String(channel?.channel?.ownerBlockchainName || '').trim();
|
||||||
const rootNo = Number(channel?.channel?.channelRoot?.blockNumber);
|
const rootNo = Number(channel?.channel?.channelRoot?.blockNumber);
|
||||||
const rootHash = normalizeRouteHash(channel?.channel?.channelRoot?.blockHash);
|
const rootHash = normalizeRouteHash(channel?.channel?.channelRoot?.blockHash);
|
||||||
|
|||||||
@ -55,6 +55,11 @@ function toSafeInt(value) {
|
|||||||
return Number.isFinite(parsed) ? parsed : null;
|
return Number.isFinite(parsed) ? parsed : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function looksLikeBlockchainName(value) {
|
||||||
|
const raw = String(value || '').trim();
|
||||||
|
return /^[^-]+-\d+$/.test(raw);
|
||||||
|
}
|
||||||
|
|
||||||
function makeReactionActionKey(messageRef) {
|
function makeReactionActionKey(messageRef) {
|
||||||
const login = String(state.session.login || '').trim().toLowerCase();
|
const login = String(state.session.login || '').trim().toLowerCase();
|
||||||
const blockchainName = String(messageRef?.blockchainName || '').trim();
|
const blockchainName = String(messageRef?.blockchainName || '').trim();
|
||||||
@ -439,7 +444,7 @@ async function loadFromApi(route, channelId) {
|
|||||||
&& String(item?.channel?.channelName || '').trim().toLowerCase() === selector.channelName.toLowerCase()
|
&& String(item?.channel?.channelName || '').trim().toLowerCase() === selector.channelName.toLowerCase()
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
if (!channel) {
|
if (!channel && !looksLikeBlockchainName(routeOwnerRaw)) {
|
||||||
try {
|
try {
|
||||||
const ownerUser = await authService.getUser(routeOwnerRaw);
|
const ownerUser = await authService.getUser(routeOwnerRaw);
|
||||||
const ownerBch = String(ownerUser?.blockchainName || '').trim().toLowerCase();
|
const ownerBch = String(ownerUser?.blockchainName || '').trim().toLowerCase();
|
||||||
|
|||||||
@ -692,7 +692,7 @@ function renderEmptyState(activeTab, navigate) {
|
|||||||
if (activeTab === 'feed') {
|
if (activeTab === 'feed') {
|
||||||
text.textContent = 'Нет подписок и найденных каналов.';
|
text.textContent = 'Нет подписок и найденных каналов.';
|
||||||
} else if (activeTab === 'dialogs') {
|
} else if (activeTab === 'dialogs') {
|
||||||
text.textContent = 'У вас пока нет персональных каналов.';
|
text.textContent = 'Чаты пока не работают.';
|
||||||
} else if (activeTab === 'my') {
|
} else if (activeTab === 'my') {
|
||||||
text.textContent = 'У вас пока нет каналов.';
|
text.textContent = 'У вас пока нет каналов.';
|
||||||
} else {
|
} else {
|
||||||
@ -1148,6 +1148,10 @@ export function render({ navigate, route }) {
|
|||||||
tabBtn.type = 'button';
|
tabBtn.type = 'button';
|
||||||
tabBtn.className = `channels-tab-btn${listState.activeTab === tabKey ? ' is-active' : ''}`;
|
tabBtn.className = `channels-tab-btn${listState.activeTab === tabKey ? ' is-active' : ''}`;
|
||||||
tabBtn.textContent = tabLabels[tabKey] || tabKey;
|
tabBtn.textContent = tabLabels[tabKey] || tabKey;
|
||||||
|
if (tabKey === 'dialogs') {
|
||||||
|
tabBtn.classList.add('is-disabled');
|
||||||
|
tabBtn.title = 'Чаты пока не работают';
|
||||||
|
}
|
||||||
tabBtn.addEventListener('click', () => {
|
tabBtn.addEventListener('click', () => {
|
||||||
if (listState.activeTab === tabKey) return;
|
if (listState.activeTab === tabKey) return;
|
||||||
listState.activeTab = tabKey;
|
listState.activeTab = tabKey;
|
||||||
|
|||||||
@ -1234,10 +1234,15 @@ export class AuthService {
|
|||||||
const latestMessage = Array.isArray(latestPayload?.messages) ? latestPayload.messages[0] : null;
|
const latestMessage = Array.isArray(latestPayload?.messages) ? latestPayload.messages[0] : null;
|
||||||
const latestBlockNumber = Number(latestMessage?.messageRef?.blockNumber);
|
const latestBlockNumber = Number(latestMessage?.messageRef?.blockNumber);
|
||||||
const latestBlockHash = normalizeHex32(latestMessage?.messageRef?.blockHash, '');
|
const latestBlockHash = normalizeHex32(latestMessage?.messageRef?.blockHash, '');
|
||||||
|
const latestVersionsTotal = Number(latestMessage?.versionsTotal);
|
||||||
if (Number.isFinite(latestBlockNumber) && latestBlockNumber >= 0 && latestBlockHash) {
|
if (Number.isFinite(latestBlockNumber) && latestBlockNumber >= 0 && latestBlockHash) {
|
||||||
prevLineNumber = latestBlockNumber;
|
prevLineNumber = latestBlockNumber;
|
||||||
prevLineHashHex = latestBlockHash;
|
prevLineHashHex = latestBlockHash;
|
||||||
thisLineNumber = latestBlockNumber + 1;
|
// В line-цепочке thisLineNumber — это номер шага линии, а не глобальный blockNumber.
|
||||||
|
// Для следующего POST берем шаг после последней известной версии сообщения.
|
||||||
|
thisLineNumber = Number.isFinite(latestVersionsTotal) && latestVersionsTotal > 0
|
||||||
|
? Math.max(0, latestVersionsTotal)
|
||||||
|
: 1;
|
||||||
}
|
}
|
||||||
} catch {
|
} catch {
|
||||||
// fallback to root anchor
|
// fallback to root anchor
|
||||||
|
|||||||
@ -3545,6 +3545,12 @@ textarea.input {
|
|||||||
box-shadow: inset 0 1px 0 rgba(255, 238, 197, 0.3);
|
box-shadow: inset 0 1px 0 rgba(255, 238, 197, 0.3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.channels-screen--list .channels-tab-btn.is-disabled {
|
||||||
|
text-decoration: line-through;
|
||||||
|
text-decoration-thickness: 1.5px;
|
||||||
|
opacity: 0.72;
|
||||||
|
}
|
||||||
|
|
||||||
.toolbar {
|
.toolbar {
|
||||||
background: rgba(18, 24, 38, 0.4);
|
background: rgba(18, 24, 38, 0.4);
|
||||||
backdrop-filter: blur(25px);
|
backdrop-filter: blur(25px);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user