From d1965c642b8d46325e01ca2ad44f75af87a5f395 Mon Sep 17 00:00:00 2001 From: juhanikat Date: Mon, 25 Aug 2025 12:19:15 +0300 Subject: [PATCH] change export file name to include name of table and a timestamp, and add title props to table views to make this work --- .../src/components/CrossSearch/CrossSearchExportMenuItem.tsx | 2 +- frontend/src/components/DetailView/StagingView.tsx | 1 + frontend/src/components/DetailView/common/SelectingTable.tsx | 3 +++ frontend/src/components/Locality/Tabs/LithologyTab.tsx | 1 + frontend/src/components/Locality/Tabs/MuseumTab.tsx | 1 + frontend/src/components/Locality/Tabs/ProjectTab.tsx | 1 + frontend/src/components/Locality/Tabs/SpeciesTab.tsx | 1 + frontend/src/components/Reference/Tabs/AuthorTab.tsx | 1 + frontend/src/components/Reference/Tabs/JournalTab.tsx | 1 + frontend/src/components/Region/Tabs/CoordinatorTab.tsx | 1 + frontend/src/components/Sequence/SequenceTable.tsx | 1 + frontend/src/components/Species/Tabs/LocalityTab.tsx | 1 + frontend/src/components/Species/Tabs/TaxonomyTab.tsx | 1 + frontend/src/components/TableView/TableToolBar.tsx | 4 +++- frontend/src/components/TableView/TableView.tsx | 4 ++-- frontend/src/components/TableView/helpers.tsx | 4 +++- 16 files changed, 23 insertions(+), 5 deletions(-) diff --git a/frontend/src/components/CrossSearch/CrossSearchExportMenuItem.tsx b/frontend/src/components/CrossSearch/CrossSearchExportMenuItem.tsx index 19697dcc..817f41c6 100644 --- a/frontend/src/components/CrossSearch/CrossSearchExportMenuItem.tsx +++ b/frontend/src/components/CrossSearch/CrossSearchExportMenuItem.tsx @@ -14,7 +14,7 @@ export const CrossSearchExportMenuItem = ({ handleClose }: { handleClose: () => const token = useUser().token const fetchOptions = token ? { headers: { Authorization: `Bearer ${token}` } } : {} - const filename = `cross_search${currentDateAsString()}.csv` + const filename = `cross_search-${currentDateAsString()}.csv` const fetchCSVFile = async () => { setLoading(true) diff --git a/frontend/src/components/DetailView/StagingView.tsx b/frontend/src/components/DetailView/StagingView.tsx index 7dfb8a8c..5ad1e588 100755 --- a/frontend/src/components/DetailView/StagingView.tsx +++ b/frontend/src/components/DetailView/StagingView.tsx @@ -25,6 +25,7 @@ export const StagingView = () => { buttonText="Add existing reference" data={data} + title="References" isError={isError} columns={referenceTableColumns} idFieldName="rid" diff --git a/frontend/src/components/DetailView/common/SelectingTable.tsx b/frontend/src/components/DetailView/common/SelectingTable.tsx index ca28ec7a..9aee32a0 100755 --- a/frontend/src/components/DetailView/common/SelectingTable.tsx +++ b/frontend/src/components/DetailView/common/SelectingTable.tsx @@ -15,6 +15,7 @@ export const SelectingTable = buttonText, data, columns, + title, editingAction, tableRowAction, fieldName, @@ -26,6 +27,7 @@ export const SelectingTable = buttonText: string data: T[] | undefined columns: MRT_ColumnDef[] + title: string editingAction?: (object: T) => void tableRowAction?: (row: T) => void fieldName: keyof ParentType @@ -74,6 +76,7 @@ export const SelectingTable = data={filteredData} columns={columns} + title={title} isFetching={false} visibleColumns={visibleColumns} selectorFn={editingAction ?? defaultEditingAction} diff --git a/frontend/src/components/Locality/Tabs/LithologyTab.tsx b/frontend/src/components/Locality/Tabs/LithologyTab.tsx index b3b21fa0..eff0372c 100755 --- a/frontend/src/components/Locality/Tabs/LithologyTab.tsx +++ b/frontend/src/components/Locality/Tabs/LithologyTab.tsx @@ -192,6 +192,7 @@ export const LithologyTab = () => { isError={isError} columns={selectingTableColumns} data={sedimentaryStructuresData} + title="Sedimentary structures" fieldName="now_ss" idFieldName="ss_value" editingAction={(newSed: SedimentaryStructureValues) => { diff --git a/frontend/src/components/Locality/Tabs/MuseumTab.tsx b/frontend/src/components/Locality/Tabs/MuseumTab.tsx index 53fd8884..03e9bc23 100755 --- a/frontend/src/components/Locality/Tabs/MuseumTab.tsx +++ b/frontend/src/components/Locality/Tabs/MuseumTab.tsx @@ -38,6 +38,7 @@ export const MuseumTab = () => { buttonText="Select Museum" data={museumData} + title="Museums" isError={isError} columns={columns} fieldName="now_mus" diff --git a/frontend/src/components/Locality/Tabs/ProjectTab.tsx b/frontend/src/components/Locality/Tabs/ProjectTab.tsx index 3baf88f4..c80f5420 100755 --- a/frontend/src/components/Locality/Tabs/ProjectTab.tsx +++ b/frontend/src/components/Locality/Tabs/ProjectTab.tsx @@ -43,6 +43,7 @@ export const ProjectTab = () => { buttonText="Select Project" data={projectData} + title="Projects" columns={columns} isError={isError} idFieldName="pid" diff --git a/frontend/src/components/Locality/Tabs/SpeciesTab.tsx b/frontend/src/components/Locality/Tabs/SpeciesTab.tsx index 6b268803..c3335f5c 100755 --- a/frontend/src/components/Locality/Tabs/SpeciesTab.tsx +++ b/frontend/src/components/Locality/Tabs/SpeciesTab.tsx @@ -117,6 +117,7 @@ export const SpeciesTab = () => { buttonText="Select Species" data={speciesData} + title="Species" isError={isError} columns={speciesColumns} fieldName="now_ls" diff --git a/frontend/src/components/Reference/Tabs/AuthorTab.tsx b/frontend/src/components/Reference/Tabs/AuthorTab.tsx index 798f72ef..a4d41e2e 100755 --- a/frontend/src/components/Reference/Tabs/AuthorTab.tsx +++ b/frontend/src/components/Reference/Tabs/AuthorTab.tsx @@ -124,6 +124,7 @@ export const AuthorTab: React.FC = ({ field_num_param, tab_name buttonText={`Select ${buttonText}`} data={authorData} + title="Authors" isError={isError} columns={authorColumns} fieldName="ref_authors" diff --git a/frontend/src/components/Reference/Tabs/JournalTab.tsx b/frontend/src/components/Reference/Tabs/JournalTab.tsx index e6ad27a8..6a387616 100755 --- a/frontend/src/components/Reference/Tabs/JournalTab.tsx +++ b/frontend/src/components/Reference/Tabs/JournalTab.tsx @@ -88,6 +88,7 @@ export const JournalTab: React.FC = ({ tab_name = 'Journal' }) buttonText="Select Journal" data={journalData} + title="Journals" isError={isError} columns={journalColumns} fieldName="ref_journal" diff --git a/frontend/src/components/Region/Tabs/CoordinatorTab.tsx b/frontend/src/components/Region/Tabs/CoordinatorTab.tsx index f51fc5a7..551eb5ad 100755 --- a/frontend/src/components/Region/Tabs/CoordinatorTab.tsx +++ b/frontend/src/components/Region/Tabs/CoordinatorTab.tsx @@ -106,6 +106,7 @@ export const CoordinatorTab = () => { buttonText="Select Coordinator" data={personsData} + title="Coordinators" isError={isError} columns={personTableColumns} fieldName="now_reg_coord_people" diff --git a/frontend/src/components/Sequence/SequenceTable.tsx b/frontend/src/components/Sequence/SequenceTable.tsx index 2e8e6257..93daf73a 100755 --- a/frontend/src/components/Sequence/SequenceTable.tsx +++ b/frontend/src/components/Sequence/SequenceTable.tsx @@ -31,6 +31,7 @@ export const SequenceTable = ({ selectorFn }: { selectorFn?: (id: Sequence) => v selectorFn={selectorFn} idFieldName="sequence" columns={columns} + title="Sequences" isFetching={isFetching} visibleColumns={visibleColumns} data={sequenceQueryData} diff --git a/frontend/src/components/Species/Tabs/LocalityTab.tsx b/frontend/src/components/Species/Tabs/LocalityTab.tsx index 01167b02..e5a8f13b 100755 --- a/frontend/src/components/Species/Tabs/LocalityTab.tsx +++ b/frontend/src/components/Species/Tabs/LocalityTab.tsx @@ -50,6 +50,7 @@ export const LocalityTab = () => { , SpeciesDetailsType> buttonText="Select Locality" columns={columns} + title="Localities" isError={isError} data={localitiesData} fieldName="now_ls" diff --git a/frontend/src/components/Species/Tabs/TaxonomyTab.tsx b/frontend/src/components/Species/Tabs/TaxonomyTab.tsx index 2504cea6..043a84f5 100755 --- a/frontend/src/components/Species/Tabs/TaxonomyTab.tsx +++ b/frontend/src/components/Species/Tabs/TaxonomyTab.tsx @@ -25,6 +25,7 @@ export const TaxonomyTab = () => { buttonText="Copy existing taxonomy" data={speciesQueryData} + title="Species" isError={isError} columns={smallSpeciesTableColumns} fieldName="order_name" // this doesn't do anything here but is required diff --git a/frontend/src/components/TableView/TableToolBar.tsx b/frontend/src/components/TableView/TableToolBar.tsx index 3237badd..7c2064c5 100644 --- a/frontend/src/components/TableView/TableToolBar.tsx +++ b/frontend/src/components/TableView/TableToolBar.tsx @@ -12,6 +12,7 @@ import { usePageContext } from '../Page' export const TableToolBar = ({ table, + tableName, combinedExport, kmlExport, svgExport, @@ -21,6 +22,7 @@ export const TableToolBar = ({ showNewButton, }: { table: MRT_TableInstance + tableName: string combinedExport?: (lids: number[]) => Promise kmlExport?: (table: MRT_TableInstance) => void svgExport?: (table: MRT_TableInstance) => void @@ -87,7 +89,7 @@ export const TableToolBar = ({ ) : ( { - exportRows(table) + exportRows(table, tableName) handleClose() }} > diff --git a/frontend/src/components/TableView/TableView.tsx b/frontend/src/components/TableView/TableView.tsx index 954e9de6..92692db7 100755 --- a/frontend/src/components/TableView/TableView.tsx +++ b/frontend/src/components/TableView/TableView.tsx @@ -57,10 +57,9 @@ export const TableView = ({ idFieldName: keyof T checkRowRestriction?: (row: T) => boolean selectorFn?: (id: T) => void - // here tableRowAction?: (row: T) => void url?: string - title?: string + title: string combinedExport?: (lids: number[]) => Promise kmlExport?: (table: MRT_TableInstance) => void svgExport?: (table: MRT_TableInstance) => void @@ -259,6 +258,7 @@ export const TableView = ({ {title && {title}} table={table} + tableName={title} combinedExport={combinedExport} kmlExport={kmlExport} svgExport={svgExport} diff --git a/frontend/src/components/TableView/helpers.tsx b/frontend/src/components/TableView/helpers.tsx index ce305ccf..01502b9a 100755 --- a/frontend/src/components/TableView/helpers.tsx +++ b/frontend/src/components/TableView/helpers.tsx @@ -1,15 +1,17 @@ import { MRT_RowData, MRT_TableInstance } from 'material-react-table' import { mkConfig, generateCsv, download } from 'export-to-csv' import { AcceptedData } from 'node_modules/export-to-csv/output/lib/types' +import { currentDateAsString } from '@/shared/currentDateAsString' export type ExportFn = (data: T) => { [k: string]: AcceptedData } -export const exportRows = (table: MRT_TableInstance) => { +export const exportRows = (table: MRT_TableInstance, tableName: string) => { const csvConfig = mkConfig({ fieldSeparator: ',', decimalSeparator: '.', useKeysAsHeaders: true, quoteStrings: true, // If true, will wrap all values in double quotes + filename: `${tableName.toLowerCase()}-${currentDateAsString()}`, }) const rowData = table.getPrePaginationRowModel().rows.map(row => { const r = {} as Record