diff --git a/src/webparts/stroyBot/pages/reports/ReportCard.tsx b/src/webparts/stroyBot/pages/reports/ReportCard.tsx index 69ac900..ee9e2d8 100644 --- a/src/webparts/stroyBot/pages/reports/ReportCard.tsx +++ b/src/webparts/stroyBot/pages/reports/ReportCard.tsx @@ -1,6 +1,7 @@ import * as React from 'react'; import { Badge, Icon } from '@tnsu/ui-kit'; import { useRouter } from '../../app/routing/RouterContext'; +import { IRoute } from '../../app/routing/routes'; import { IReportAccess, IReportCard } from './reportsTypes'; import { canCreateReport, canDeleteReport } from './reportsRules'; import { REPORTS_TEXTS } from './texts'; @@ -17,16 +18,26 @@ interface Props { } /** - * Карточка отчёта. Отчёт и «Создать на основе» открываются в новой вкладке — как в старом - * web part (window.open … '_blank'), но адрес теперь — раздел формы отчёта этого приложения. + * Карточка отчёта. Отчёт и «Создать на основе» открываются в этой же вкладке — переходом + * на раздел формы отчёта без перезагрузки страницы. */ export const ReportCard: React.FC = ({ report, access, projectId, onDelete }) => { - const { buildHref } = useRouter(); - const reportHref = buildHref({ page: 'report', projectId, reportId: report.id }); - const copyHref = buildHref({ page: 'report', projectId, copyFromId: report.id }); + const { navigate, buildHref } = useRouter(); + const reportRoute: IRoute = { page: 'report', projectId, reportId: report.id }; + const copyRoute: IRoute = { page: 'report', projectId, copyFromId: report.id }; const openReport = (): void => { - window.open(reportHref, '_blank', 'noopener,noreferrer'); + navigate(reportRoute); + }; + + // Ссылка остаётся настоящим , чтобы Ctrl+клик / средняя кнопка по-прежнему + // открывали копию в новой вкладке; обычный клик — переход внутри приложения. + const onCopyClick = (event: React.MouseEvent): void => { + event.stopPropagation(); + const opensNewTab = event.ctrlKey || event.metaKey || event.shiftKey || event.button !== 0; + if (opensNewTab) return; + event.preventDefault(); + navigate(copyRoute); }; // Как в старом коде: Enter/Space внутри карточки (в том числе на её кнопках) открывают отчёт. @@ -65,12 +76,10 @@ export const ReportCard: React.FC = ({ report, access, projectId, onDelet {canCreateReport(access) && ( event.stopPropagation()} + onClick={onCopyClick} >