fix: send the back link to the reports list when there is no history

Reports open from the list in a new tab, where history.back() did nothing.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Тимур Городецкий
2026-10-19 16:17:56 +05:00
parent 40a39cf828
commit f6af34cb0a
2 changed files with 28 additions and 14 deletions
@@ -1,18 +1,23 @@
import * as React from 'react';
import { useRouter } from '../../app/routing/RouterContext';
import { goBack } from './goBack';
import { REPORT_TEXTS } from './texts';
import styles from './ReportPage.module.scss';
/** «← Вернуться назад» — назад по истории браузера, как в старой форме. */
export const BackLink: React.FC = () => (
/** «← Вернуться назад» — назад по истории браузера, как в старой форме; без истории — к списку отчётов проекта. */
export const BackLink: React.FC = () => {
const { route, navigate } = useRouter();
return (
<a
href="#"
className={styles.backLink}
onClick={(event) => {
event.preventDefault();
goBack();
goBack(() => navigate({ page: 'reports', projectId: route.projectId }));
}}
>
{REPORT_TEXTS.back}
</a>
);
};
+10 -1
View File
@@ -1,8 +1,17 @@
/** В новой вкладке (так отчёты открываются из списка) история состоит из одной текущей страницы. */
const NO_HISTORY_LENGTH = 1;
/**
* «← Вернуться назад» — как в старом коде: если страница открыта во фрейме, назад идёт верхнее окно,
* при ошибке доступа к нему (другой домен) — текущее.
* Если возвращаться некуда (вкладка открыта из списка отчётов), вызывается onNoHistory: в старом коде
* кнопка в этом случае ничего не делала — исправлено при проверке T-REP-21.
*/
export function goBack(): void {
export function goBack(onNoHistory: () => void): void {
if (window.history.length <= NO_HISTORY_LENGTH) {
onNoHistory();
return;
}
try {
if (window.top && window.top !== window) {
window.top.history.back();