diff --git a/specifyweb/frontend/js_src/lib/components/InitialContext/systemInfo.ts b/specifyweb/frontend/js_src/lib/components/InitialContext/systemInfo.ts index da2414c3854..21518f41335 100644 --- a/specifyweb/frontend/js_src/lib/components/InitialContext/systemInfo.ts +++ b/specifyweb/frontend/js_src/lib/components/InitialContext/systemInfo.ts @@ -44,7 +44,7 @@ function buildStatsLambdaUrl(base: string | null | undefined): string | null { if (!hasRoute) { const stage = 'prod'; const route = 'AggrgatedSp7Stats'; - u = `${u.replace(/\/$/, '') }/${stage}/${route}`; + u = `${u.replace(/\/$/, '')}/${stage}/${route}`; } return u; } @@ -58,7 +58,10 @@ export const fetchContext = load( if (systemInfo.stats_url !== null) { let counts: StatsCounts | null = null; try { - counts = await load('/context/stats_counts.json', 'application/json'); + counts = await load( + '/context/stats_counts.json', + 'application/json' + ); } catch { // If counts fetch fails, proceed without them. counts = null; @@ -102,12 +105,13 @@ export const fetchContext = load( const lambdaUrl = buildStatsLambdaUrl(systemInfo.stats_2_url); if (lambdaUrl) { - await ping(formatUrl(lambdaUrl, parameters, false), { errorMode: 'silent' }) - .catch(softFail); + await ping(formatUrl(lambdaUrl, parameters, false), { + errorMode: 'silent', + }).catch(softFail); } } return systemInfo; }); -export const getSystemInfo = (): SystemInfo => systemInfo; \ No newline at end of file +export const getSystemInfo = (): SystemInfo => systemInfo; diff --git a/specifyweb/frontend/js_src/lib/components/Toolbar/WbsDialog.tsx b/specifyweb/frontend/js_src/lib/components/Toolbar/WbsDialog.tsx index 57ef8f818e9..0bca5f74151 100644 --- a/specifyweb/frontend/js_src/lib/components/Toolbar/WbsDialog.tsx +++ b/specifyweb/frontend/js_src/lib/components/Toolbar/WbsDialog.tsx @@ -80,14 +80,12 @@ export function DataSetMetaOverlay(): JSX.Element | null { true ); - const navigate = useNavigate(); - return typeof dataset === 'object' ? ( navigate('/specify/', { replace: true })} + onDeleted={handleClose} /> ) : null; } diff --git a/specifyweb/frontend/js_src/lib/components/WorkBench/DataSetMeta.tsx b/specifyweb/frontend/js_src/lib/components/WorkBench/DataSetMeta.tsx index ea9c9ca54b5..82fd89c55c3 100644 --- a/specifyweb/frontend/js_src/lib/components/WorkBench/DataSetMeta.tsx +++ b/specifyweb/frontend/js_src/lib/components/WorkBench/DataSetMeta.tsx @@ -19,7 +19,10 @@ import { Submit } from '../Atoms/Submit'; import type { EagerDataSet } from '../AttachmentsBulkImport/Import'; import { LoadingContext } from '../Core/Contexts'; import { getField } from '../DataModel/helpers'; +import type { SpecifyResource } from '../DataModel/legacyTypes'; +import { resourceEvents } from '../DataModel/resource'; import { tables } from '../DataModel/tables'; +import type { Spdataset } from '../DataModel/types'; import { useTitle } from '../Molecules/AppTitle'; import { AutoGrowTextArea } from '../Molecules/AutoGrowTextArea'; import { DateElement } from '../Molecules/DateElement'; @@ -144,6 +147,8 @@ export function DataSetMeta({ expectedErrors: [Http.NOT_FOUND, Http.NO_CONTENT], }).then(() => { setIsDeleted(true); + const resource = {id: dataset.id, specifyTable: tables.Spdataset } as SpecifyResource; + resourceEvents.trigger('deleted',resource); }) ); }} diff --git a/specifyweb/frontend/js_src/lib/components/WorkBench/WbView.tsx b/specifyweb/frontend/js_src/lib/components/WorkBench/WbView.tsx index 4f4ba2d5256..a9b3e29e6ac 100644 --- a/specifyweb/frontend/js_src/lib/components/WorkBench/WbView.tsx +++ b/specifyweb/frontend/js_src/lib/components/WorkBench/WbView.tsx @@ -15,6 +15,7 @@ import '../../../css/workbench.css'; import type { HotTable } from '@handsontable/react'; import type Handsontable from 'handsontable'; import React from 'react'; +import { useNavigate } from 'react-router-dom'; import { useUnloadProtect } from '../../hooks/navigation'; import { useBooleanState } from '../../hooks/useBooleanState'; @@ -30,6 +31,7 @@ import { Button } from '../Atoms/Button'; import { className } from '../Atoms/className'; import { Link } from '../Atoms/Link'; import { ReadOnlyContext } from '../Core/Contexts'; +import { resourceEvents } from '../DataModel/resource'; import { WbActions } from '../WbActions'; import { useResults } from '../WbActions/useResults'; import type { Dataset } from '../WbPlanView/Wrapped'; @@ -85,6 +87,20 @@ export function WbView({ : dataset.rows, [dataset] ); + // Switch to home page on dataset deleted if current dataset is deleted + const navigate = useNavigate(); + React.useEffect( + () => + resourceEvents.on('deleted', (resource) => { + if ( + resource.specifyTable.name === 'Spdataset' && + resource.id === dataset.id + ) { + navigate('/specify/', { replace: true }); + } + }), + [dataset.id] + ); const spreadsheetContainerRef = React.useRef(null); const [hotTable, setHotTable] = React.useState(null);