Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 12 additions & 2 deletions specifyweb/frontend/js_src/lib/components/QueryBuilder/Results.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -150,12 +150,17 @@ export function QueryResults(props: QueryResultsProps): JSX.Element {
undefinedResult === -1 ? results : results?.slice(0, undefinedResult)
) as RA<QueryResultRow> | undefined;

const deletingRef = React.useRef<ReadonlySet<number>>(new Set()); // Track recent deleted IDs to prevent duplicate deletion

// TEST: try deleting while records are being fetched
/**
* Note: this may be called with a recordId that is not part of query results
*/
const handleDelete = React.useCallback(
(recordId: number): void => {
if (deletingRef.current.has(recordId)) return; // Prevents duplicate deletion calls for the same record
deletingRef.current.add(recordId);

let removeCount = 0;
function newResults(results: RA<QueryResultRow | undefined> | undefined) {
if (!Array.isArray(results) || totalCount === undefined) return;
Expand All @@ -167,13 +172,18 @@ export function QueryResults(props: QueryResultsProps): JSX.Element {
return newResults;
}
setResults(newResults(results));
if (removeCount === 0) return;
// Delete deletingRef if no records are able to be removed
if (removeCount === 0) {
deletingRef.current.delete(recordId);
return;
}
setTotalCount((totalCount) =>
totalCount === undefined ? undefined : totalCount - removeCount
totalCount === undefined ? undefined : Math.max(0, totalCount - removeCount)
);
const newSelectedRows = (selectedRows: ReadonlySet<number>) =>
new Set(Array.from(selectedRows).filter((id) => id !== recordId));
setSelectedRows(newSelectedRows(selectedRows));
setTimeout(() => deletingRef.current.delete(recordId), 100); // Remove the record from the deletingRef
},
[setResults, setTotalCount, totalCount]
);
Expand Down