From 0cfc311254f655a1e27da19d05da021005cb2af1 Mon Sep 17 00:00:00 2001 From: Iwantexpresso Date: Tue, 27 Jan 2026 12:09:16 -0600 Subject: [PATCH 01/11] added dummy buttons --- specifyweb/frontend/.DS_Store | Bin 0 -> 6148 bytes .../lib/components/QueryBuilder/Results.tsx | 19 ++++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 specifyweb/frontend/.DS_Store diff --git a/specifyweb/frontend/.DS_Store b/specifyweb/frontend/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..a62bf900d0a7ad4455faf1ef3895b2c6f0e4f79d GIT binary patch literal 6148 zcmeHKPfrs;6rTrGwji=VtAH`t*oz4yw$WgSG1P)lVhn^5ECSZub|@>$OtZVC0wL*L zFMa?&fFHql@#w{?H{(apt2f{L*&tM}#^}7{&F{^d_ulOMHaoLJ2!T?oULeFKgjlEo zQ~lWdLd3YxF6q&pUPO>JLQ?bEQPT^!*A;CXh5^IC-^PIWcF&S$BqCMRli%-KuNnAJ zoX>xPp5D}%vwc>dHDGO)w|To9yKyTjx#7C#t#BTAiS2r;K5bX+%p7O2>oXe41iwx( zWaE*~>bzazEmn_YZdnajX)9f|#}5yuXJ)3H>obL;Dd(_I$WKo>H}lg+M`4FiUO|DFM{KRBoYiyAu$<<^0XyaFJm&@BaRahDJ|j>e+KjzSzk0hNlVQbAua zK&7MK(Q!qM9fc~LfWCZyo*DEF1?22l-;v=2iV96@7%&W+WI+7;quAp7zx(_9zYH>s zVZbo(Z!!R>`SN@T*QU?bu2qV&)Z=aTJfCO2IKl7>GrU9fjyY QF+T#52GbY@{wM=K0MstaZU6uP literal 0 HcmV?d00001 diff --git a/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx b/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx index 5e46eb601d8..63a6e2129b8 100644 --- a/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx +++ b/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx @@ -210,7 +210,26 @@ export function QueryResults(props: QueryResultsProps): JSX.Element { > {interactionsText.deselectAll()} + + )} + {/* dummy buttons for select All and invert selection*/} + + { + + }} + > + {interactionsText.selectAll()} + + + { + + }} + > + {"Invert Selection"} +
{displayedFields.length > 0 && visibleFieldSpecs.length > 0 && From d43f15c9b354d5dade9079a2460eb61be205a1e8 Mon Sep 17 00:00:00 2001 From: Iwantexpresso Date: Tue, 27 Jan 2026 18:13:11 +0000 Subject: [PATCH 02/11] Lint code with ESLint and Prettier Triggered by 0cfc311254f655a1e27da19d05da021005cb2af1 on branch refs/heads/issue-7485 --- .../frontend/js_src/lib/components/QueryBuilder/Results.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx b/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx index 63a6e2129b8..b55735abb23 100644 --- a/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx +++ b/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx @@ -213,7 +213,7 @@ export function QueryResults(props: QueryResultsProps): JSX.Element { )} - {/* dummy buttons for select All and invert selection*/} + {/* Dummy buttons for select All and invert selection*/} { @@ -228,7 +228,7 @@ export function QueryResults(props: QueryResultsProps): JSX.Element { }} > - {"Invert Selection"} + Invert Selection
{displayedFields.length > 0 && From 09884a481988d98aa65419f6e7ea14d1716aa83f Mon Sep 17 00:00:00 2001 From: Iwantexpresso Date: Tue, 27 Jan 2026 16:48:06 -0600 Subject: [PATCH 03/11] added fetch all ids function ad functionality to select all button --- .../lib/components/QueryBuilder/Results.tsx | 62 ++++++++++++++++++- 1 file changed, 59 insertions(+), 3 deletions(-) diff --git a/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx b/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx index 63a6e2129b8..cfb22fb8c2d 100644 --- a/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx +++ b/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx @@ -35,6 +35,8 @@ import { useFetchQueryResults } from './hooks'; import { QueryResultsTable } from './ResultsTable'; import { QueryToForms } from './ToForms'; import { QueryToMap } from './ToMap'; +import { LoadingContext } from '../Core/Contexts'; +import {ajax} from "../../utils/ajax"; export type QueryResultRow = RA; @@ -188,6 +190,8 @@ export function QueryResults(props: QueryResultsProps): JSX.Element { typeof loadedResults?.[0]?.[0] === 'string' && loadedResults !== undefined; const metaColumns = (showLineNumber ? 1 : 0) + 2; + const loading = React.useContext(LoadingContext); + return (
@@ -214,14 +218,30 @@ export function QueryResults(props: QueryResultsProps): JSX.Element { )} {/* dummy buttons for select All and invert selection*/} - - 0 && (totalCount ?? 0) < 1000000 && ( + { - + loading( + (async () => { + try { + const allIDs = await fetchAllIDs(table.name.toLowerCase(), + {}, + totalCount ?? 0, + loading + ); + setSelectedRows(new Set(allIDs)); + handleSelected?.(allIDs); + } catch (error) { + console.error('Error fetching all IDs:', error); + } + + })() + ); }} > {interactionsText.selectAll()} + )} { @@ -487,3 +507,39 @@ export function canMerge(table: SpecifyTable): boolean { canMerge; return canMergeOtherTables || canMergePaleoContext || canMergeCollectingEvent; } + +async function fetchAllIDs( + modelName: string, + filters: Record, + totalCount: number, + loading: (promise: Promise) => void +): Promise> { + return new Promise>((resolve, reject) => { + loading( + (async () => { + try { + const params = new URLSearchParams({ + fields: "id", + limit: "0", + offset: "0", + domainfilter: "true", + + ...Object.fromEntries( + Object.entries(filters).map(([key, value]) => [key, String(value)]) + ), + }); + const response = await ajax>( + `/api/specify_rows/${modelName}/?${params}`, + { + headers: { Accept: 'application/json' }, + } + ); + const ids = response.data.map((row) => row[0]); + resolve(ids); + } catch (error) { + reject(error); + } + })() + ); + }); +} From 1cada536343ce776c7fbbf208f293d26451c8ff5 Mon Sep 17 00:00:00 2001 From: Iwantexpresso Date: Thu, 29 Jan 2026 12:53:33 -0600 Subject: [PATCH 04/11] implemented invert selection button and interactions for Invert text --- .../lib/components/QueryBuilder/Results.tsx | 18 ++++++++++++++---- .../js_src/lib/localization/interactions.ts | 3 +++ 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx b/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx index cfb22fb8c2d..1b90a8d9780 100644 --- a/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx +++ b/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx @@ -37,6 +37,7 @@ import { QueryToForms } from './ToForms'; import { QueryToMap } from './ToMap'; import { LoadingContext } from '../Core/Contexts'; import {ajax} from "../../utils/ajax"; +import { invert } from 'underscore'; export type QueryResultRow = RA; @@ -217,7 +218,7 @@ export function QueryResults(props: QueryResultsProps): JSX.Element { )} - {/* dummy buttons for select All and invert selection*/} + {/* buttons for select All and invert selection*/} {(totalCount ?? 0) > 0 && (totalCount ?? 0) < 1000000 && ( { @@ -242,14 +243,23 @@ export function QueryResults(props: QueryResultsProps): JSX.Element { {interactionsText.selectAll()} )} - + {(totalCount ?? 0) > 0 && ( { - + if (!loadedResults) return; + const allIDs = new Set( + loadedResults.map((result) => result[queryIdField] as number) + ); + const invertedSelection = new Set( Array.from(allIDs).filter(id => !(selectedRows.has(id)))); + setSelectedRows(invertedSelection); + handleSelected?.(Array.from(invertedSelection)); + }} > - {"Invert Selection"} + {interactionsText.invertSelection()} + )} +
{displayedFields.length > 0 && visibleFieldSpecs.length > 0 && diff --git a/specifyweb/frontend/js_src/lib/localization/interactions.ts b/specifyweb/frontend/js_src/lib/localization/interactions.ts index 8d67412b9ad..65c27ceab97 100644 --- a/specifyweb/frontend/js_src/lib/localization/interactions.ts +++ b/specifyweb/frontend/js_src/lib/localization/interactions.ts @@ -421,4 +421,7 @@ export const interactionsText = createDictionary({ 'ru-ru': 'Нет в наличии', 'uk-ua': 'Не доступно', }, + invertSelection: { + "en-us": "Invert Selection", + } } as const); From ceb428fe990422c117174205dcb6ed7c4a8c8e0a Mon Sep 17 00:00:00 2001 From: Iwantexpresso Date: Mon, 2 Feb 2026 11:30:57 -0600 Subject: [PATCH 05/11] removed unused import and edited total count for future use --- .../frontend/js_src/lib/components/QueryBuilder/Results.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx b/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx index 1b90a8d9780..99fe66a174a 100644 --- a/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx +++ b/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx @@ -37,7 +37,6 @@ import { QueryToForms } from './ToForms'; import { QueryToMap } from './ToMap'; import { LoadingContext } from '../Core/Contexts'; import {ajax} from "../../utils/ajax"; -import { invert } from 'underscore'; export type QueryResultRow = RA; @@ -521,7 +520,7 @@ export function canMerge(table: SpecifyTable): boolean { async function fetchAllIDs( modelName: string, filters: Record, - totalCount: number, + _totalCount: number, // unused but may be usefil is a limit parameter is needed in future loading: (promise: Promise) => void ): Promise> { return new Promise>((resolve, reject) => { From 9ca2fca9a9ecd43f0c1231d7434148a0f5d6f9c0 Mon Sep 17 00:00:00 2001 From: Iwantexpresso Date: Mon, 2 Feb 2026 17:35:26 +0000 Subject: [PATCH 06/11] Lint code with ESLint and Prettier Triggered by ceb428fe990422c117174205dcb6ed7c4a8c8e0a on branch refs/heads/issue-7485 --- .../lib/components/QueryBuilder/Results.tsx | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx b/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx index 99fe66a174a..57361e57a01 100644 --- a/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx +++ b/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx @@ -5,10 +5,12 @@ import { useAsyncState } from '../../hooks/useAsyncState'; import { useInfiniteScroll } from '../../hooks/useInfiniteScroll'; import { commonText } from '../../localization/common'; import { interactionsText } from '../../localization/interactions'; +import {ajax} from "../../utils/ajax"; import { f } from '../../utils/functools'; import { type GetSet, type RA } from '../../utils/types'; import { Container, H3 } from '../Atoms'; import { Button } from '../Atoms/Button'; +import { LoadingContext } from '../Core/Contexts'; import type { SpecifyResource } from '../DataModel/legacyTypes'; import { schema } from '../DataModel/schema'; import type { SpecifyTable } from '../DataModel/specifyTable'; @@ -35,8 +37,6 @@ import { useFetchQueryResults } from './hooks'; import { QueryResultsTable } from './ResultsTable'; import { QueryToForms } from './ToForms'; import { QueryToMap } from './ToMap'; -import { LoadingContext } from '../Core/Contexts'; -import {ajax} from "../../utils/ajax"; export type QueryResultRow = RA; @@ -217,8 +217,8 @@ export function QueryResults(props: QueryResultsProps): JSX.Element { )} - {/* buttons for select All and invert selection*/} - {(totalCount ?? 0) > 0 && (totalCount ?? 0) < 1000000 && ( + {/* Buttons for select All and invert selection*/} + {(totalCount ?? 0) > 0 && (totalCount ?? 0) < 1_000_000 && ( { loading( @@ -520,14 +520,14 @@ export function canMerge(table: SpecifyTable): boolean { async function fetchAllIDs( modelName: string, filters: Record, - _totalCount: number, // unused but may be usefil is a limit parameter is needed in future + _totalCount: number, // Unused but may be usefil is a limit parameter is needed in future loading: (promise: Promise) => void ): Promise> { return new Promise>((resolve, reject) => { loading( (async () => { try { - const params = new URLSearchParams({ + const parameters = new URLSearchParams({ fields: "id", limit: "0", offset: "0", @@ -537,8 +537,8 @@ async function fetchAllIDs( Object.entries(filters).map(([key, value]) => [key, String(value)]) ), }); - const response = await ajax>( - `/api/specify_rows/${modelName}/?${params}`, + const response = await ajax>( + `/api/specify_rows/${modelName}/?${parameters}`, { headers: { Accept: 'application/json' }, } From 67e8f5d351af8b51476f403142a0ae26fdcf7369 Mon Sep 17 00:00:00 2001 From: Iwantexpresso Date: Tue, 3 Feb 2026 16:52:37 -0600 Subject: [PATCH 07/11] made new api endpoint to retreive resource Ids only of the currently saved query, adapted fronted functions accordingly --- specifyweb/backend/stored_queries/urls.py | 3 +- specifyweb/backend/stored_queries/views.py | 34 +++++++++ .../lib/components/QueryBuilder/Results.tsx | 76 +++++++++---------- 3 files changed, 72 insertions(+), 41 deletions(-) diff --git a/specifyweb/backend/stored_queries/urls.py b/specifyweb/backend/stored_queries/urls.py index ff5b0aee3fb..ca4f0844a53 100644 --- a/specifyweb/backend/stored_queries/urls.py +++ b/specifyweb/backend/stored_queries/urls.py @@ -10,5 +10,6 @@ path('make_recordset/', views.make_recordset), path('merge_recordsets/', views.merge_recordsets), path('return_loan_preps/', views.return_loan_preps), - path('batch_edit/', views.batch_edit) + path('batch_edit/', views.batch_edit), + path('query//ids/', views.query_ids), ] diff --git a/specifyweb/backend/stored_queries/views.py b/specifyweb/backend/stored_queries/views.py index 8ead7e580cf..9e08daec77a 100644 --- a/specifyweb/backend/stored_queries/views.py +++ b/specifyweb/backend/stored_queries/views.py @@ -104,9 +104,43 @@ def query(request, id): limit=limit, offset=offset ) + return HttpResponse(toJson(data), content_type='application/json') +@require_GET +@login_maybe_required +@never_cache +def query_ids(request, id): + check_permission_targets(request.specify_collection.id, request.specify_user.id, [QueryBuilderPt.execute]) + offset = int(request.GET.get('offset', 0)) + + with models.session_context() as session: + sp_query = session.query(models.SpQuery).get(int(id)) + distinct = sp_query.selectDistinct + tableid = sp_query.contextTableId + + if sp_query is None: + return HttpResponseBadRequest(f"SpQuery with id {id} does not exist.") + + field_specs = [QueryField.from_spqueryfield(field, value_from_request(field, request.GET)) + for field in sorted(sp_query.fields, key=lambda field: field.position)] + + data = execute( + session=session, + collection=request.specify_collection, + user=request.specify_user, + tableid=tableid, + distinct=distinct, + series=False, + count_only=False, + field_specs=field_specs, + limit=None, + offset=offset + ) + + ids = [row[0] for row in data.get("results", [])] + return HttpResponse(toJson({ "ids": ids }), content_type='application/json') @require_POST @login_maybe_required diff --git a/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx b/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx index 99fe66a174a..4fa0466b5c0 100644 --- a/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx +++ b/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx @@ -37,6 +37,7 @@ import { QueryToForms } from './ToForms'; import { QueryToMap } from './ToMap'; import { LoadingContext } from '../Core/Contexts'; import {ajax} from "../../utils/ajax"; +import { spec } from 'node:test/reporters'; export type QueryResultRow = RA; @@ -218,31 +219,25 @@ export function QueryResults(props: QueryResultsProps): JSX.Element { )} {/* buttons for select All and invert selection*/} - {(totalCount ?? 0) > 0 && (totalCount ?? 0) < 1000000 && ( - { - loading( - (async () => { - try { - const allIDs = await fetchAllIDs(table.name.toLowerCase(), - {}, - totalCount ?? 0, - loading - ); + {(totalCount ?? 0) > 0 && (totalCount ?? 0) < 10000000 && queryResource?.get("id") && ( + { + loading( + fetchAllIDs(queryResource, loading) + .then((allIDs) => { setSelectedRows(new Set(allIDs)); handleSelected?.(allIDs); - } catch (error) { - console.error('Error fetching all IDs:', error); - } - - })() - ); - }} - > - {interactionsText.selectAll()} - + }) + .catch((error) => { + console.error('Error fetching all IDs:', error); + }) + ); + }} + > + {interactionsText.selectAll()} + )} - {(totalCount ?? 0) > 0 && ( + {(totalCount ?? 0) > 0 && queryResource?.get("id") && ( { if (!loadedResults) return; @@ -518,33 +513,34 @@ export function canMerge(table: SpecifyTable): boolean { } async function fetchAllIDs( - modelName: string, - filters: Record, - _totalCount: number, // unused but may be usefil is a limit parameter is needed in future +queryResource: SpecifyResource | undefined, loading: (promise: Promise) => void ): Promise> { + + const queryId = queryResource.get('id'); + + if (!queryResource) { + throw new Error('Query resource is undefined'); + } + return new Promise>((resolve, reject) => { loading( (async () => { try { - const params = new URLSearchParams({ - fields: "id", - limit: "0", - offset: "0", - domainfilter: "true", - - ...Object.fromEntries( - Object.entries(filters).map(([key, value]) => [key, String(value)]) - ), - }); - const response = await ajax>( - `/api/specify_rows/${modelName}/?${params}`, + console.log('Fetching all IDs for query'); + const startTime = performance.now(); + const {data} = await ajax<{readonly ids: RA}>( + `/stored_query/query/${queryId}/ids/`, { headers: { Accept: 'application/json' }, - } + errorMode: "visible", + } ); - const ids = response.data.map((row) => row[0]); - resolve(ids); + + const elapsed = ((performance.now() - startTime) / 1000).toFixed(2); + console.log(`Fetched ${data.ids.length} IDs in ${elapsed} seconds`); + + resolve(data.ids); } catch (error) { reject(error); } From 38ed1f2156d9389b491b6eb7f633aa19432cb7d1 Mon Sep 17 00:00:00 2001 From: Iwantexpresso Date: Tue, 3 Feb 2026 17:00:03 -0600 Subject: [PATCH 08/11] removed unused import, added comment to endpoint --- specifyweb/backend/stored_queries/views.py | 1 + .../frontend/js_src/lib/components/QueryBuilder/Results.tsx | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/specifyweb/backend/stored_queries/views.py b/specifyweb/backend/stored_queries/views.py index 9e08daec77a..36ade9521e6 100644 --- a/specifyweb/backend/stored_queries/views.py +++ b/specifyweb/backend/stored_queries/views.py @@ -112,6 +112,7 @@ def query(request, id): @login_maybe_required @never_cache def query_ids(request, id): + """Executes the query with id and returns only the record IDs of the results as JSON.""" check_permission_targets(request.specify_collection.id, request.specify_user.id, [QueryBuilderPt.execute]) offset = int(request.GET.get('offset', 0)) diff --git a/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx b/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx index b45955e350d..157b10b4ea6 100644 --- a/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx +++ b/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx @@ -39,7 +39,6 @@ import { QueryToForms } from './ToForms'; import { QueryToMap } from './ToMap'; import { LoadingContext } from '../Core/Contexts'; import {ajax} from "../../utils/ajax"; -import { spec } from 'node:test/reporters'; export type QueryResultRow = RA; From 0c9f1f5992c114c9c829c140b8e3dad1d71131e4 Mon Sep 17 00:00:00 2001 From: Iwantexpresso Date: Tue, 3 Feb 2026 17:09:50 -0600 Subject: [PATCH 09/11] removed dulplicate imports --- .../frontend/js_src/lib/components/QueryBuilder/Results.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx b/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx index 157b10b4ea6..232b10a2ca4 100644 --- a/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx +++ b/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx @@ -37,8 +37,6 @@ import { useFetchQueryResults } from './hooks'; import { QueryResultsTable } from './ResultsTable'; import { QueryToForms } from './ToForms'; import { QueryToMap } from './ToMap'; -import { LoadingContext } from '../Core/Contexts'; -import {ajax} from "../../utils/ajax"; export type QueryResultRow = RA; From 369601bd855d20f3e49af5f0f0d1e73279a443d9 Mon Sep 17 00:00:00 2001 From: Iwantexpresso Date: Tue, 3 Feb 2026 17:14:00 -0600 Subject: [PATCH 10/11] fixed js error run --- .../frontend/js_src/lib/components/QueryBuilder/Results.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx b/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx index 232b10a2ca4..9df8fd6b367 100644 --- a/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx +++ b/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx @@ -516,7 +516,7 @@ queryResource: SpecifyResource | undefined, loading: (promise: Promise) => void ): Promise> { - const queryId = queryResource.get('id'); + const queryId = queryResource!.get('id'); if (!queryResource) { throw new Error('Query resource is undefined'); From 037a3d5c9d687f566c2e4c15bf9be09480caad56 Mon Sep 17 00:00:00 2001 From: Iwantexpresso Date: Tue, 3 Feb 2026 23:19:17 +0000 Subject: [PATCH 11/11] Lint code with ESLint and Prettier Triggered by 369601bd855d20f3e49af5f0f0d1e73279a443d9 on branch refs/heads/issue-7485 --- .../frontend/js_src/lib/components/QueryBuilder/Results.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx b/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx index 9df8fd6b367..3b211cddfb5 100644 --- a/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx +++ b/specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx @@ -217,8 +217,8 @@ export function QueryResults(props: QueryResultsProps): JSX.Element { )} - {/* buttons for select All and invert selection*/} - {(totalCount ?? 0) > 0 && (totalCount ?? 0) < 10000000 && queryResource?.get("id") && ( + {/* Buttons for select All and invert selection*/} + {(totalCount ?? 0) > 0 && (totalCount ?? 0) < 10_000_000 && queryResource?.get("id") && ( { loading(