UI: отправка UI-ошибок, персональный публичный чат, русские pending-файлы

This commit is contained in:
AidarKC
2026-05-14 14:16:03 +03:00
parent e73e103ac4
commit 56a69ab683
21 changed files with 488 additions and 153 deletions
@@ -1,5 +1,9 @@
import { renderHeader } from '../components/header.js';
import { addAppLogEntry, authService, state } from '../state.js';
import {
isClientErrorReportingEnabled,
setClientErrorReportingEnabled,
} from '../services/client-error-reporter.js';
import {
canInstallPwa,
isStandalonePwaMode,
@@ -209,6 +213,37 @@ function showClientUpdateHelp() {
);
}
function openUiErrorReportingModal() {
const root = document.getElementById('modal-root');
if (!root) return;
const enabled = isClientErrorReportingEnabled();
root.innerHTML = `
<div class="modal" id="settings-ui-error-reporting-modal">
<div class="modal-card stack">
<h3 class="modal-title">Отправка UI-ошибок на сервер</h3>
<p class="meta-muted">Для разработчиков: при включении ошибки интерфейса будут автоматически отправляться на сервер для диагностики.</p>
<label class="row wrap-row" for="ui-error-reporting-toggle">
<input id="ui-error-reporting-toggle" type="checkbox" ${enabled ? 'checked' : ''} />
<span>Отправлять ошибки на сервер</span>
</label>
<div class="form-actions-grid">
<button class="secondary-btn" id="ui-error-reporting-cancel" type="button">Отмена</button>
<button class="primary-btn" id="ui-error-reporting-save" type="button">Сохранить</button>
</div>
</div>
</div>
`;
const close = () => { root.innerHTML = ''; };
root.querySelector('#ui-error-reporting-cancel')?.addEventListener('click', close);
root.querySelector('#ui-error-reporting-save')?.addEventListener('click', () => {
const checked = root.querySelector('#ui-error-reporting-toggle')?.checked === true;
setClientErrorReportingEnabled(checked);
close();
});
}
export function render({ navigate }) {
const screen = document.createElement('section');
screen.className = 'stack';
@@ -225,6 +260,7 @@ export function render({ navigate }) {
card.innerHTML = `
<button class="text-btn" type="button" id="settings-force-ui-update">Принудительно обновить UI</button>
<button class="text-btn" type="button" id="settings-force-update-help">Клиент не обновляется?</button>
<button class="text-btn" type="button" id="settings-ui-error-reporting">Отправлять ошибки на сервер</button>
<button class="text-btn" type="button" id="settings-app-log">Лог приложения</button>
<button class="text-btn" type="button" id="settings-pwa-diagnostics">Диагностика PWA / Push</button>
<button class="text-btn" type="button" id="settings-pwa-install">Как установить PWA</button>
@@ -237,6 +273,7 @@ export function render({ navigate }) {
const uploadAvatarBtn = card.querySelector('#settings-upload-avatar');
const forceUpdateBtn = card.querySelector('#settings-force-ui-update');
const forceUpdateHelpBtn = card.querySelector('#settings-force-update-help');
const uiErrorReportingBtn = card.querySelector('#settings-ui-error-reporting');
appLogBtn?.addEventListener('click', () => navigate('app-log-view'));
diagnosticsBtn?.addEventListener('click', () => navigate('pwa-diagnostics-view'));
@@ -248,6 +285,7 @@ export function render({ navigate }) {
});
});
forceUpdateHelpBtn?.addEventListener('click', showClientUpdateHelp);
uiErrorReportingBtn?.addEventListener('click', openUiErrorReportingModal);
forceUpdateBtn?.addEventListener('click', async () => {
forceUpdateBtn.disabled = true;