import { renderHeader } from '../components/header.js?v=20260405171816'; import { profile } from '../mock-data.js?v=20260405171816'; import { state } from '../state.js?v=20260405171816'; import { loadProfileSnapshot, saveProfileParamBlock, saveProfileToggle, } from '../services/user-profile-params.js?v=20260405171816'; export const pageMeta = { id: 'profile-view', title: 'Профиль' }; function getDisplayName(fields) { const firstName = fields.find((field) => field.key === 'first_name')?.value?.trim() || ''; const lastName = fields.find((field) => field.key === 'last_name')?.value?.trim() || ''; const fullName = `${firstName} ${lastName}`.trim(); return fullName || profile.name; } function toggleText(enabled) { return enabled ? 'Yes' : 'No'; } export function render({ navigate }) { const login = state.session.login || profile.login; const screen = document.createElement('section'); screen.className = 'stack'; screen.append( renderHeader({ title: 'Профиль', rightActions: [ { label: 'Кошелёк', onClick: () => navigate('wallet-view') }, { label: 'Настройки', onClick: () => navigate('settings-view') }, ], }), ); const card = document.createElement('div'); card.className = 'card stack'; const topRow = document.createElement('div'); topRow.className = 'row'; topRow.innerHTML = `
Параметры читаются через API GetUserParam. Изменения записываются через ADD-блок с подписью blockchain key.
`; const status = document.createElement('div'); status.className = 'status-line'; status.textContent = 'Загрузка параметров...'; const listWrap = document.createElement('div'); listWrap.className = 'stack profile-param-list'; const profileNameEl = topRow.querySelector('[data-profile-name="true"]'); const reloadBtn = topRow.querySelector('[data-reload="true"]'); const officialBtn = badgesRow.querySelector('[data-toggle="official"]'); const shineBtn = badgesRow.querySelector('[data-toggle="shine"]'); let currentFields = []; let currentToggles = []; function updateToggleButton(button, prefix, enabled) { button.textContent = `${prefix}: ${toggleText(enabled)}`; button.classList.remove('is-no', 'is-yes-official', 'is-yes-shine'); if (!enabled) { button.classList.add('is-no'); return; } if (prefix === 'Официальный') { button.classList.add('is-yes-official'); } else { button.classList.add('is-yes-shine'); } } function updateTogglesUi() { const official = currentToggles.find((item) => item.key === 'official') || { enabled: false }; const shine = currentToggles.find((item) => item.key === 'shine') || { enabled: false }; updateToggleButton(officialBtn, 'Официальный', official.enabled); updateToggleButton(shineBtn, 'Сияющий', shine.enabled); } function renderFields(fields) { profileNameEl.textContent = getDisplayName(fields); const readyFields = fields.filter((field) => String(field.value || '').trim()); listWrap.innerHTML = ''; if (!readyFields.length) { const emptyState = document.createElement('div'); emptyState.className = 'meta-muted'; emptyState.textContent = 'Пока нет заполненных персональных параметров.'; listWrap.append(emptyState); return; } readyFields.forEach((field) => { const row = document.createElement('div'); row.className = 'card profile-param-item row'; row.innerHTML = `