diff --git a/src/webparts/stroyBot/pages/report/BackLink.tsx b/src/webparts/stroyBot/pages/report/BackLink.tsx index e643b1c..999e7d4 100644 --- a/src/webparts/stroyBot/pages/report/BackLink.tsx +++ b/src/webparts/stroyBot/pages/report/BackLink.tsx @@ -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 = () => ( - { - event.preventDefault(); - goBack(); - }} - > - {REPORT_TEXTS.back} - -); +/** «← Вернуться назад» — назад по истории браузера, как в старой форме; без истории — к списку отчётов проекта. */ +export const BackLink: React.FC = () => { + const { route, navigate } = useRouter(); + + return ( + { + event.preventDefault(); + goBack(() => navigate({ page: 'reports', projectId: route.projectId })); + }} + > + {REPORT_TEXTS.back} + + ); +}; diff --git a/src/webparts/stroyBot/pages/report/goBack.ts b/src/webparts/stroyBot/pages/report/goBack.ts index 3ce239f..d579797 100644 --- a/src/webparts/stroyBot/pages/report/goBack.ts +++ b/src/webparts/stroyBot/pages/report/goBack.ts @@ -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();