From 191ddb25dfa9258c1d413da72a9f45050839eba0 Mon Sep 17 00:00:00 2001 From: Iwantexpresso Date: Wed, 15 Oct 2025 10:45:53 -0500 Subject: [PATCH 01/13] WIP - changed. Ondelete for the workbench to a handle close it does not reload the page yet --- specifyweb/frontend/js_src/lib/components/Toolbar/WbsDialog.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specifyweb/frontend/js_src/lib/components/Toolbar/WbsDialog.tsx b/specifyweb/frontend/js_src/lib/components/Toolbar/WbsDialog.tsx index 57ef8f818e9..f41fc9e23e3 100644 --- a/specifyweb/frontend/js_src/lib/components/Toolbar/WbsDialog.tsx +++ b/specifyweb/frontend/js_src/lib/components/Toolbar/WbsDialog.tsx @@ -87,7 +87,7 @@ export function DataSetMetaOverlay(): JSX.Element | null { dataset={dataset} onChange={handleClose} onClose={handleClose} - onDeleted={(): void => navigate('/specify/', { replace: true })} + onDeleted= { handleClose } //{(): void => navigate('/specify/', { replace: true })} /> ) : null; } From 48e1af4206f51f9f3e643b8860a77d84469b0421 Mon Sep 17 00:00:00 2001 From: Iwantexpresso Date: Fri, 24 Oct 2025 12:34:33 -0500 Subject: [PATCH 02/13] attemped fixes of to resolve redirection Fixed the redirection issues, now attempting to solve new issue that does not redirect the user away from an open dataset they've just deleted through the DatasetMeta Delete button --- .env | 2 +- .vscode/settings.json | 3 +++ .../lib/components/Toolbar/WbsDialog.tsx | 24 ++++++++++++++----- 3 files changed, 22 insertions(+), 7 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.env b/.env index 89dea676cc5..4edbe84c7d6 100644 --- a/.env +++ b/.env @@ -1,7 +1,7 @@ DATABASE_HOST=mariadb DATABASE_PORT=3306 MYSQL_ROOT_PASSWORD=password -DATABASE_NAME=specify +DATABASE_NAME=geo_swiss_2025_09_09 # When running Specify 7 for the first time or during updates that # require migrations, ensure that the MASTER_NAME and MASTER_PASSWORD diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000000..5c70cc50cbe --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "typescript.tsdk": "./specifyweb/frontend/node_modules/typescript/lib", +} \ No newline at end of file diff --git a/specifyweb/frontend/js_src/lib/components/Toolbar/WbsDialog.tsx b/specifyweb/frontend/js_src/lib/components/Toolbar/WbsDialog.tsx index f41fc9e23e3..0f39be5efb2 100644 --- a/specifyweb/frontend/js_src/lib/components/Toolbar/WbsDialog.tsx +++ b/specifyweb/frontend/js_src/lib/components/Toolbar/WbsDialog.tsx @@ -5,7 +5,7 @@ */ import React from 'react'; -import { useNavigate, useParams } from 'react-router-dom'; +import { useNavigate, useParams, useLocation } from 'react-router-dom'; import type { LocalizedString } from 'typesafe-i18n'; import { useAsyncState } from '../../hooks/useAsyncState'; @@ -69,7 +69,21 @@ export const createEmptyDataSet = async < export function DataSetMetaOverlay(): JSX.Element | null { const { dataSetId = '' } = useParams(); const handleClose = React.useContext(OverlayContext); - const [dataset] = useAsyncState( + const [dataset] = useAsyncState + const navigate = useNavigate(); + + + // const handleDelete = async () => { + // try { + // await ajax(`/api/workbench/dataset/${dataSetId}/`, { + // method: 'DELETE', + // headers: { Accept: 'application/json' }, + // }); + // navigate("specify/", { replace: true }); + // } catch (error) { + // console.error('Failed to delete dataset:', error); + // } + React.useCallback( async () => ajax(`/api/workbench/dataset/${dataSetId}/`, { @@ -79,15 +93,13 @@ export function DataSetMetaOverlay(): JSX.Element | null { ), true ); - - const navigate = useNavigate(); - + return typeof dataset === 'object' ? ( navigate('/specify/', { replace: true })} + onDeleted={handleClose} /> ) : null; } From dbdc086b14fac1e83b53bc6c21b393890e1d9527 Mon Sep 17 00:00:00 2001 From: Iwantexpresso Date: Fri, 24 Oct 2025 15:26:26 -0500 Subject: [PATCH 03/13] simplified and added correct implementation of a listener and event trigge --- .../js_src/lib/components/Toolbar/WbsDialog.tsx | 16 +--------------- .../lib/components/WorkBench/DataSetMeta.tsx | 5 +++++ .../js_src/lib/components/WorkBench/WbView.tsx | 10 ++++++++++ 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/specifyweb/frontend/js_src/lib/components/Toolbar/WbsDialog.tsx b/specifyweb/frontend/js_src/lib/components/Toolbar/WbsDialog.tsx index 0f39be5efb2..3d9681067a7 100644 --- a/specifyweb/frontend/js_src/lib/components/Toolbar/WbsDialog.tsx +++ b/specifyweb/frontend/js_src/lib/components/Toolbar/WbsDialog.tsx @@ -69,21 +69,7 @@ export const createEmptyDataSet = async < export function DataSetMetaOverlay(): JSX.Element | null { const { dataSetId = '' } = useParams(); const handleClose = React.useContext(OverlayContext); - const [dataset] = useAsyncState - const navigate = useNavigate(); - - - // const handleDelete = async () => { - // try { - // await ajax(`/api/workbench/dataset/${dataSetId}/`, { - // method: 'DELETE', - // headers: { Accept: 'application/json' }, - // }); - // navigate("specify/", { replace: true }); - // } catch (error) { - // console.error('Failed to delete dataset:', error); - // } - + const [dataset] = useAsyncState( React.useCallback( async () => ajax(`/api/workbench/dataset/${dataSetId}/`, { diff --git a/specifyweb/frontend/js_src/lib/components/WorkBench/DataSetMeta.tsx b/specifyweb/frontend/js_src/lib/components/WorkBench/DataSetMeta.tsx index ea9c9ca54b5..df659d00d98 100644 --- a/specifyweb/frontend/js_src/lib/components/WorkBench/DataSetMeta.tsx +++ b/specifyweb/frontend/js_src/lib/components/WorkBench/DataSetMeta.tsx @@ -31,6 +31,9 @@ import { unsafeNavigate } from '../Router/Router'; import { getMaxDataSetLength, uniquifyDataSetName } from '../WbImport/helpers'; import type { Dataset } from '../WbPlanView/Wrapped'; import { datasetVariants } from '../WbUtils/datasetVariants'; +import { resourceEvents } from '../DataModel/resource'; +import { SpecifyResource } from '../DataModel/legacyTypes'; +import { AnySchema } from '../DataModel/helperTypes'; const syncNameAndRemarks = async ( name: LocalizedString, @@ -144,6 +147,8 @@ export function DataSetMeta({ expectedErrors: [Http.NOT_FOUND, Http.NO_CONTENT], }).then(() => { setIsDeleted(true); + resourceEvents.trigger('deleted', + { id : dataset.id, specifyTable: tables.Spdataset, } as unknown as SpecifyResource ); }) ); }} diff --git a/specifyweb/frontend/js_src/lib/components/WorkBench/WbView.tsx b/specifyweb/frontend/js_src/lib/components/WorkBench/WbView.tsx index 4f4ba2d5256..2dac5020589 100644 --- a/specifyweb/frontend/js_src/lib/components/WorkBench/WbView.tsx +++ b/specifyweb/frontend/js_src/lib/components/WorkBench/WbView.tsx @@ -14,6 +14,7 @@ import '../../../css/workbench.css'; import type { HotTable } from '@handsontable/react'; import type Handsontable from 'handsontable'; +import { useNavigate } from 'react-router-dom'; import React from 'react'; import { useUnloadProtect } from '../../hooks/navigation'; @@ -49,6 +50,7 @@ import { useDisambiguationDialog } from './useDisambiguationDialog'; import { WbAttachmentsPreview } from './WbAttachmentsPreview'; import { WbSpreadsheet } from './WbSpreadsheet'; import { WbValidation } from './WbValidation'; +import { resourceEvents } from '../DataModel/resource'; export type WbStatus = 'unupload' | 'upload' | 'validate'; @@ -85,6 +87,14 @@ export function WbView({ : dataset.rows, [dataset] ); +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); From 66983cb2f38abac33469c171ef84084b7e8a68ec Mon Sep 17 00:00:00 2001 From: Iwantexpresso Date: Mon, 27 Oct 2025 13:42:24 -0500 Subject: [PATCH 04/13] cleaned up unused import --- .../frontend/js_src/lib/components/.DS_Store | Bin 0 -> 8196 bytes .../js_src/lib/components/Toolbar/WbsDialog.tsx | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 specifyweb/frontend/js_src/lib/components/.DS_Store diff --git a/specifyweb/frontend/js_src/lib/components/.DS_Store b/specifyweb/frontend/js_src/lib/components/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..dd9a5b50486f2804ee525c745b0fc37ddf5e33b7 GIT binary patch literal 8196 zcmeHMU2GIp6u#eW3$rlNDHLgI2R3bqfD|i8TKP$~f5?9;+uCidw7WZFJ2;&wJGcu(Ab-XJHz>AeTt73%Hc~_p zh$0Y0Ac{Z~fhYpkMg-{07EPPy+*hMfA4MRFz;zh`@qLKXB`^`6%n1`APAOFG49cA$Tp3}70=YW*#icnz zLSfWL5r`r%Hv*z|FJn8H&vI<+^7_3bnHhJTAm7yV6?jQ$*@A^yY|&!<2D2~KKcEi| z8B2?fJ<&CucYH6n+s*}qLq>Tp>QC&-`d)X=7UO+c-z|)J!H`jrO}p8Go6g&e{WT~0P+7=^$-VAEVq(e9ubgOo!{3dhPT zc8J)iB`a1ntZCfXye-kWYu{bd=f)n=V}j~Hps+0tey(geOXhvEYZqS?bp8FloiWz~@Y|=NIy>2>V zyD`I3>$K=w%)X+Ef6UmUl-u>?W-9BCjnNi^n9{YH?dCzT?A~;c?;5u~@knRY*bW*S z2u9O6yKBO;bKw*1Carv>q!&(|mXr78AVp(;ooV)q=~^vI?xCity4*~fy_)g4Mz6^6 zicX&15WN?ILZH>pyqfyNI(1wB!AM-*sX*5!nnDwenQSBLV0+mx(efxe!JcL(*<0)k z`WPdj;HWEUcifZ39sP|you9z8}H*RKE-GF0_X89zQgzU1%Ki%T;OGV1+U`OypFHu zjeG-d<}G{+-^%y%E}r6Peu(>gTs=Pz&nR|pxStUC5xSY3Y~$+3GJfjn$yR&k&Rx6p zz5khHJGVrpSLN~>SHxGZyY=>#?X4GSsCYX=)yoq=vVK;sNY+bMT*26BnTPtyRWpfq zDHT;}_ENgolbXm{V_|4r-=I;t7-gZjW-W<(j0H-pZQP(yY8qUMdhNzdF-kzABorH) zNrV#gt=nRhibiQDu1t`~q)=Pi(Mi*sHMD<<=jYgY_5=HsT_Bz>!7^0gW;7AI+prV+ zCBKvC#X$^V7#Ua?g9jgniRs7iARfXL9wwe2C#FAvC-DrP#dE~=m+=Z-#YwzQTz?1e z;yrwbk8lQ`gslIXIR6uVzJka5X7d=o&*pJ4ne$xV8zJos^JhCm(lr?YarRTI67_%Q z{J;N8qo|7_5Jlks83B}bBs#|dRQPI&PTL%NTX csqjgJIHiy@)c*A!0`%zokIsKdz3aOB8+oJll>h($ literal 0 HcmV?d00001 diff --git a/specifyweb/frontend/js_src/lib/components/Toolbar/WbsDialog.tsx b/specifyweb/frontend/js_src/lib/components/Toolbar/WbsDialog.tsx index 3d9681067a7..775f7bec121 100644 --- a/specifyweb/frontend/js_src/lib/components/Toolbar/WbsDialog.tsx +++ b/specifyweb/frontend/js_src/lib/components/Toolbar/WbsDialog.tsx @@ -5,7 +5,7 @@ */ import React from 'react'; -import { useNavigate, useParams, useLocation } from 'react-router-dom'; +import { useNavigate, useParams} from 'react-router-dom'; import type { LocalizedString } from 'typesafe-i18n'; import { useAsyncState } from '../../hooks/useAsyncState'; @@ -69,7 +69,7 @@ export const createEmptyDataSet = async < export function DataSetMetaOverlay(): JSX.Element | null { const { dataSetId = '' } = useParams(); const handleClose = React.useContext(OverlayContext); - const [dataset] = useAsyncState( + const [dataset] = useAsyncState( React.useCallback( async () => ajax(`/api/workbench/dataset/${dataSetId}/`, { From 2f6797041254030832b60656bb0db7e0d0428cd6 Mon Sep 17 00:00:00 2001 From: Iwantexpresso Date: Mon, 27 Oct 2025 18:47:29 +0000 Subject: [PATCH 05/13] Lint code with ESLint and Prettier Triggered by 66983cb2f38abac33469c171ef84084b7e8a68ec on branch refs/heads/issue-4921 --- .../frontend/js_src/lib/components/Toolbar/WbsDialog.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/specifyweb/frontend/js_src/lib/components/Toolbar/WbsDialog.tsx b/specifyweb/frontend/js_src/lib/components/Toolbar/WbsDialog.tsx index 775f7bec121..0bca5f74151 100644 --- a/specifyweb/frontend/js_src/lib/components/Toolbar/WbsDialog.tsx +++ b/specifyweb/frontend/js_src/lib/components/Toolbar/WbsDialog.tsx @@ -5,7 +5,7 @@ */ import React from 'react'; -import { useNavigate, useParams} from 'react-router-dom'; +import { useNavigate, useParams } from 'react-router-dom'; import type { LocalizedString } from 'typesafe-i18n'; import { useAsyncState } from '../../hooks/useAsyncState'; @@ -79,7 +79,7 @@ export function DataSetMetaOverlay(): JSX.Element | null { ), true ); - + return typeof dataset === 'object' ? ( Date: Mon, 27 Oct 2025 14:48:00 -0500 Subject: [PATCH 06/13] cleaned up function even further and removed more unused imports --- .../js_src/lib/components/WorkBench/DataSetMeta.tsx | 6 ++---- .../frontend/js_src/lib/components/WorkBench/WbView.tsx | 7 ++++--- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/specifyweb/frontend/js_src/lib/components/WorkBench/DataSetMeta.tsx b/specifyweb/frontend/js_src/lib/components/WorkBench/DataSetMeta.tsx index df659d00d98..5092b9b87ba 100644 --- a/specifyweb/frontend/js_src/lib/components/WorkBench/DataSetMeta.tsx +++ b/specifyweb/frontend/js_src/lib/components/WorkBench/DataSetMeta.tsx @@ -32,8 +32,6 @@ import { getMaxDataSetLength, uniquifyDataSetName } from '../WbImport/helpers'; import type { Dataset } from '../WbPlanView/Wrapped'; import { datasetVariants } from '../WbUtils/datasetVariants'; import { resourceEvents } from '../DataModel/resource'; -import { SpecifyResource } from '../DataModel/legacyTypes'; -import { AnySchema } from '../DataModel/helperTypes'; const syncNameAndRemarks = async ( name: LocalizedString, @@ -147,8 +145,8 @@ export function DataSetMeta({ expectedErrors: [Http.NOT_FOUND, Http.NO_CONTENT], }).then(() => { setIsDeleted(true); - resourceEvents.trigger('deleted', - { id : dataset.id, specifyTable: tables.Spdataset, } as unknown as SpecifyResource ); + const resource = new tables.Spdataset.Resource({id: dataset.id }); // dummy resource to trigger deleted event + 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 2dac5020589..61e3346ba26 100644 --- a/specifyweb/frontend/js_src/lib/components/WorkBench/WbView.tsx +++ b/specifyweb/frontend/js_src/lib/components/WorkBench/WbView.tsx @@ -87,13 +87,14 @@ export function WbView({ : dataset.rows, [dataset] ); -const navigate = useNavigate(); - React.useEffect(() => { +// 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); From 5c6e04e139a1741dac0a4855c4aa3b5ce8a0f693 Mon Sep 17 00:00:00 2001 From: Iwantexpresso Date: Mon, 27 Oct 2025 19:53:01 +0000 Subject: [PATCH 07/13] Lint code with ESLint and Prettier Triggered by c8a956cc0f593311e1cd2bdc2f1353b7a4bd858c on branch refs/heads/issue-4921 --- .../lib/components/WorkBench/DataSetMeta.tsx | 4 ++-- .../lib/components/WorkBench/WbView.tsx | 19 +++++++++++-------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/specifyweb/frontend/js_src/lib/components/WorkBench/DataSetMeta.tsx b/specifyweb/frontend/js_src/lib/components/WorkBench/DataSetMeta.tsx index 5092b9b87ba..9fe8f61b08f 100644 --- a/specifyweb/frontend/js_src/lib/components/WorkBench/DataSetMeta.tsx +++ b/specifyweb/frontend/js_src/lib/components/WorkBench/DataSetMeta.tsx @@ -19,6 +19,7 @@ import { Submit } from '../Atoms/Submit'; import type { EagerDataSet } from '../AttachmentsBulkImport/Import'; import { LoadingContext } from '../Core/Contexts'; import { getField } from '../DataModel/helpers'; +import { resourceEvents } from '../DataModel/resource'; import { tables } from '../DataModel/tables'; import { useTitle } from '../Molecules/AppTitle'; import { AutoGrowTextArea } from '../Molecules/AutoGrowTextArea'; @@ -31,7 +32,6 @@ import { unsafeNavigate } from '../Router/Router'; import { getMaxDataSetLength, uniquifyDataSetName } from '../WbImport/helpers'; import type { Dataset } from '../WbPlanView/Wrapped'; import { datasetVariants } from '../WbUtils/datasetVariants'; -import { resourceEvents } from '../DataModel/resource'; const syncNameAndRemarks = async ( name: LocalizedString, @@ -145,7 +145,7 @@ export function DataSetMeta({ expectedErrors: [Http.NOT_FOUND, Http.NO_CONTENT], }).then(() => { setIsDeleted(true); - const resource = new tables.Spdataset.Resource({id: dataset.id }); // dummy resource to trigger deleted event + const resource = new tables.Spdataset.Resource({id: dataset.id }); // Dummy resource to trigger deleted event 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 61e3346ba26..602394c364e 100644 --- a/specifyweb/frontend/js_src/lib/components/WorkBench/WbView.tsx +++ b/specifyweb/frontend/js_src/lib/components/WorkBench/WbView.tsx @@ -14,8 +14,8 @@ import '../../../css/workbench.css'; import type { HotTable } from '@handsontable/react'; import type Handsontable from 'handsontable'; -import { useNavigate } from 'react-router-dom'; import React from 'react'; +import { useNavigate } from 'react-router-dom'; import { useUnloadProtect } from '../../hooks/navigation'; import { useBooleanState } from '../../hooks/useBooleanState'; @@ -31,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'; @@ -50,7 +51,6 @@ import { useDisambiguationDialog } from './useDisambiguationDialog'; import { WbAttachmentsPreview } from './WbAttachmentsPreview'; import { WbSpreadsheet } from './WbSpreadsheet'; import { WbValidation } from './WbValidation'; -import { resourceEvents } from '../DataModel/resource'; export type WbStatus = 'unupload' | 'upload' | 'validate'; @@ -87,14 +87,17 @@ export function WbView({ : dataset.rows, [dataset] ); -// switch to home page on dataset deleted if current dataset is deleted + // 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 }); - } - }); + resourceEvents.on('deleted', (resource) => { + if ( + resource.specifyTable.name === 'Spdataset' && + resource.id === dataset.id + ) { + navigate('/specify/', { replace: true }); + } + }); }, [dataset.id]); const spreadsheetContainerRef = React.useRef(null); From 14732c896dae2cbfd5e820d6b4a2d2092a8141c3 Mon Sep 17 00:00:00 2001 From: Iwantexpresso Date: Wed, 29 Oct 2025 09:58:14 -0500 Subject: [PATCH 08/13] fixeed issues caused by creating a new resource. added return to handle event unsubscription while not on Workbench --- .../frontend/js_src/lib/components/WorkBench/DataSetMeta.tsx | 5 ++++- .../frontend/js_src/lib/components/WorkBench/WbView.tsx | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/specifyweb/frontend/js_src/lib/components/WorkBench/DataSetMeta.tsx b/specifyweb/frontend/js_src/lib/components/WorkBench/DataSetMeta.tsx index 9fe8f61b08f..1ec8b3bde5e 100644 --- a/specifyweb/frontend/js_src/lib/components/WorkBench/DataSetMeta.tsx +++ b/specifyweb/frontend/js_src/lib/components/WorkBench/DataSetMeta.tsx @@ -32,6 +32,9 @@ import { unsafeNavigate } from '../Router/Router'; import { getMaxDataSetLength, uniquifyDataSetName } from '../WbImport/helpers'; import type { Dataset } from '../WbPlanView/Wrapped'; import { datasetVariants } from '../WbUtils/datasetVariants'; +import { SpecifyResource } from '../DataModel/legacyTypes'; +import { SpecifyTable } from '../DataModel/specifyTable'; +import { Spdataset } from '../DataModel/types'; const syncNameAndRemarks = async ( name: LocalizedString, @@ -145,7 +148,7 @@ export function DataSetMeta({ expectedErrors: [Http.NOT_FOUND, Http.NO_CONTENT], }).then(() => { setIsDeleted(true); - const resource = new tables.Spdataset.Resource({id: dataset.id }); // Dummy resource to trigger deleted event + 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 602394c364e..428df277f6f 100644 --- a/specifyweb/frontend/js_src/lib/components/WorkBench/WbView.tsx +++ b/specifyweb/frontend/js_src/lib/components/WorkBench/WbView.tsx @@ -90,7 +90,7 @@ export function WbView({ // Switch to home page on dataset deleted if current dataset is deleted const navigate = useNavigate(); React.useEffect(() => { - resourceEvents.on('deleted', (resource) => { + return resourceEvents.on('deleted', (resource) => { if ( resource.specifyTable.name === 'Spdataset' && resource.id === dataset.id From 3f66199793c56906af141196391867265ae70f98 Mon Sep 17 00:00:00 2001 From: Iwantexpresso <99292736+Iwantexpresso@users.noreply.github.com> Date: Wed, 29 Oct 2025 10:04:57 -0500 Subject: [PATCH 09/13] Delete .vscode/settings.json --- .vscode/settings.json | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 5c70cc50cbe..00000000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "typescript.tsdk": "./specifyweb/frontend/node_modules/typescript/lib", -} \ No newline at end of file From e28d5c2db241b362aa81b37432f66226544f48e8 Mon Sep 17 00:00:00 2001 From: Iwantexpresso Date: Wed, 29 Oct 2025 10:06:15 -0500 Subject: [PATCH 10/13] removed unsisde import fixed database name in .env --- .env | 2 +- .../frontend/js_src/lib/components/WorkBench/DataSetMeta.tsx | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.env b/.env index 4edbe84c7d6..89dea676cc5 100644 --- a/.env +++ b/.env @@ -1,7 +1,7 @@ DATABASE_HOST=mariadb DATABASE_PORT=3306 MYSQL_ROOT_PASSWORD=password -DATABASE_NAME=geo_swiss_2025_09_09 +DATABASE_NAME=specify # When running Specify 7 for the first time or during updates that # require migrations, ensure that the MASTER_NAME and MASTER_PASSWORD diff --git a/specifyweb/frontend/js_src/lib/components/WorkBench/DataSetMeta.tsx b/specifyweb/frontend/js_src/lib/components/WorkBench/DataSetMeta.tsx index 1ec8b3bde5e..2c6ffc2b58b 100644 --- a/specifyweb/frontend/js_src/lib/components/WorkBench/DataSetMeta.tsx +++ b/specifyweb/frontend/js_src/lib/components/WorkBench/DataSetMeta.tsx @@ -33,7 +33,6 @@ import { getMaxDataSetLength, uniquifyDataSetName } from '../WbImport/helpers'; import type { Dataset } from '../WbPlanView/Wrapped'; import { datasetVariants } from '../WbUtils/datasetVariants'; import { SpecifyResource } from '../DataModel/legacyTypes'; -import { SpecifyTable } from '../DataModel/specifyTable'; import { Spdataset } from '../DataModel/types'; const syncNameAndRemarks = async ( From d4c00a03192ddc5bde73d98204347440505980de Mon Sep 17 00:00:00 2001 From: Iwantexpresso Date: Wed, 29 Oct 2025 15:11:13 +0000 Subject: [PATCH 11/13] Lint code with ESLint and Prettier Triggered by 385c0726fbe6cf7b3add9b1533df8677de86c1a4 on branch refs/heads/issue-4921 --- .../lib/components/WorkBench/DataSetMeta.tsx | 4 ++-- .../lib/components/WorkBench/WbView.tsx | 22 ++++++++++--------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/specifyweb/frontend/js_src/lib/components/WorkBench/DataSetMeta.tsx b/specifyweb/frontend/js_src/lib/components/WorkBench/DataSetMeta.tsx index 2c6ffc2b58b..82fd89c55c3 100644 --- a/specifyweb/frontend/js_src/lib/components/WorkBench/DataSetMeta.tsx +++ b/specifyweb/frontend/js_src/lib/components/WorkBench/DataSetMeta.tsx @@ -19,8 +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'; @@ -32,8 +34,6 @@ import { unsafeNavigate } from '../Router/Router'; import { getMaxDataSetLength, uniquifyDataSetName } from '../WbImport/helpers'; import type { Dataset } from '../WbPlanView/Wrapped'; import { datasetVariants } from '../WbUtils/datasetVariants'; -import { SpecifyResource } from '../DataModel/legacyTypes'; -import { Spdataset } from '../DataModel/types'; const syncNameAndRemarks = async ( name: LocalizedString, diff --git a/specifyweb/frontend/js_src/lib/components/WorkBench/WbView.tsx b/specifyweb/frontend/js_src/lib/components/WorkBench/WbView.tsx index 428df277f6f..a9b3e29e6ac 100644 --- a/specifyweb/frontend/js_src/lib/components/WorkBench/WbView.tsx +++ b/specifyweb/frontend/js_src/lib/components/WorkBench/WbView.tsx @@ -89,16 +89,18 @@ export function WbView({ ); // Switch to home page on dataset deleted if current dataset is deleted const navigate = useNavigate(); - React.useEffect(() => { - return resourceEvents.on('deleted', (resource) => { - if ( - resource.specifyTable.name === 'Spdataset' && - resource.id === dataset.id - ) { - navigate('/specify/', { replace: true }); - } - }); - }, [dataset.id]); + 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); From 4cdf6b173526b18f730929726747586939e06f97 Mon Sep 17 00:00:00 2001 From: Iwantexpresso <99292736+Iwantexpresso@users.noreply.github.com> Date: Wed, 29 Oct 2025 15:49:02 +0000 Subject: [PATCH 12/13] Lint code with ESLint and Prettier Triggered by dbb1e961faa4927112dbb3081a92f19519104ae1 on branch refs/heads/issue-4921 --- .../lib/components/InitialContext/systemInfo.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) 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; From c2f959b78ef5b997545f4fc30fd906a22716cad0 Mon Sep 17 00:00:00 2001 From: Iwantexpresso Date: Fri, 7 Nov 2025 09:45:23 -0600 Subject: [PATCH 13/13] Removed .DS_Store --- .../frontend/js_src/lib/components/.DS_Store | Bin 8196 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 specifyweb/frontend/js_src/lib/components/.DS_Store diff --git a/specifyweb/frontend/js_src/lib/components/.DS_Store b/specifyweb/frontend/js_src/lib/components/.DS_Store deleted file mode 100644 index dd9a5b50486f2804ee525c745b0fc37ddf5e33b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 zcmeHMU2GIp6u#eW3$rlNDHLgI2R3bqfD|i8TKP$~f5?9;+uCidw7WZFJ2;&wJGcu(Ab-XJHz>AeTt73%Hc~_p zh$0Y0Ac{Z~fhYpkMg-{07EPPy+*hMfA4MRFz;zh`@qLKXB`^`6%n1`APAOFG49cA$Tp3}70=YW*#icnz zLSfWL5r`r%Hv*z|FJn8H&vI<+^7_3bnHhJTAm7yV6?jQ$*@A^yY|&!<2D2~KKcEi| z8B2?fJ<&CucYH6n+s*}qLq>Tp>QC&-`d)X=7UO+c-z|)J!H`jrO}p8Go6g&e{WT~0P+7=^$-VAEVq(e9ubgOo!{3dhPT zc8J)iB`a1ntZCfXye-kWYu{bd=f)n=V}j~Hps+0tey(geOXhvEYZqS?bp8FloiWz~@Y|=NIy>2>V zyD`I3>$K=w%)X+Ef6UmUl-u>?W-9BCjnNi^n9{YH?dCzT?A~;c?;5u~@knRY*bW*S z2u9O6yKBO;bKw*1Carv>q!&(|mXr78AVp(;ooV)q=~^vI?xCity4*~fy_)g4Mz6^6 zicX&15WN?ILZH>pyqfyNI(1wB!AM-*sX*5!nnDwenQSBLV0+mx(efxe!JcL(*<0)k z`WPdj;HWEUcifZ39sP|you9z8}H*RKE-GF0_X89zQgzU1%Ki%T;OGV1+U`OypFHu zjeG-d<}G{+-^%y%E}r6Peu(>gTs=Pz&nR|pxStUC5xSY3Y~$+3GJfjn$yR&k&Rx6p zz5khHJGVrpSLN~>SHxGZyY=>#?X4GSsCYX=)yoq=vVK;sNY+bMT*26BnTPtyRWpfq zDHT;}_ENgolbXm{V_|4r-=I;t7-gZjW-W<(j0H-pZQP(yY8qUMdhNzdF-kzABorH) zNrV#gt=nRhibiQDu1t`~q)=Pi(Mi*sHMD<<=jYgY_5=HsT_Bz>!7^0gW;7AI+prV+ zCBKvC#X$^V7#Ua?g9jgniRs7iARfXL9wwe2C#FAvC-DrP#dE~=m+=Z-#YwzQTz?1e z;yrwbk8lQ`gslIXIR6uVzJka5X7d=o&*pJ4ne$xV8zJos^JhCm(lr?YarRTI67_%Q z{J;N8qo|7_5Jlks83B}bBs#|dRQPI&PTL%NTX csqjgJIHiy@)c*A!0`%zokIsKdz3aOB8+oJll>h($