Skip to content

Commit 3b725a0

Browse files
committed
fix: Impact db results when filtering and making changes
https://harperdb.atlassian.net/browse/STUDIO-509
1 parent 23900e1 commit 3b725a0

File tree

4 files changed

+32
-27
lines changed

4 files changed

+32
-27
lines changed

src/features/instance/databases/components/DatabaseTableView.tsx

Lines changed: 29 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ import { useSetWatchedValue } from '@/lib/events/watcher';
3333
import { keyBy } from '@/lib/keyBy';
3434
import { onClickStopPropagation } from '@/lib/onClickStopPropagation';
3535
import { zodResolver } from '@hookform/resolvers/zod';
36-
import { useQuery } from '@tanstack/react-query';
36+
import { useQuery, useQueryClient } from '@tanstack/react-query';
3737
import { Link, useNavigate, useParams } from '@tanstack/react-router';
3838
import { Row, VisibilityState } from '@tanstack/react-table';
3939
import {
@@ -50,7 +50,7 @@ import {
5050
Trash2Icon,
5151
TrashIcon,
5252
} from 'lucide-react';
53-
import { useCallback, useMemo, useState } from 'react';
53+
import { useCallback, useEffect, useMemo, useState } from 'react';
5454
import { useForm } from 'react-hook-form';
5555
import { toast } from 'sonner';
5656
import { ColumnFiltersSchema } from './ColumnFilters';
@@ -78,7 +78,7 @@ export function DatabaseTableView({ instanceDatabaseMap, databaseName, tableName
7878
const canDeleteRecords = useInstanceSchemaTablePermission(instanceId ?? clusterId, databaseName, tableName, 'delete');
7979
const canManageBrowseInstance = useInstanceBrowseManagePermission();
8080

81-
const { data: describeTableData, refetch: refetchDescribeTableQueryOptions } = useQuery(
81+
const { data: describeTableData } = useQuery(
8282
getDescribeTableQueryOptions({
8383
...instanceParams,
8484
databaseName,
@@ -125,6 +125,10 @@ export function DatabaseTableView({ instanceDatabaseMap, databaseName, tableName
125125
hideFilters();
126126
}, [hideFilters, resetFiltersForm]);
127127

128+
useEffect(function clearFiltersWhenParamsChange() {
129+
return clearFilters();
130+
}, [allParams, clearFilters]);
131+
128132
const { dataTableColumns, hashAttribute } = formatBrowseDataTableHeader(describeTableData);
129133
const [isAddModalOpen, setIsAddModalOpen] = useState(false);
130134
const [isImportCSVModalOpen, setIsImportCSVModalOpen] = useState(false);
@@ -147,7 +151,6 @@ export function DatabaseTableView({ instanceDatabaseMap, databaseName, tableName
147151
// Full list
148152
const {
149153
data: fullTableData,
150-
refetch: refetchSearchByValueOptions,
151154
isFetching: tableDataFetching,
152155
} = useQuery(
153156
getSearchByValueOptions({
@@ -163,7 +166,10 @@ export function DatabaseTableView({ instanceDatabaseMap, databaseName, tableName
163166
}),
164167
);
165168
// Filtered list
166-
const { data: filteredTableData } = useQuery(
169+
const {
170+
data: filteredTableData,
171+
isFetching: tableConditionsDataFetching,
172+
} = useQuery(
167173
getSearchByConditionsOptions({
168174
...instanceParams,
169175
enabled: useFilteredList,
@@ -192,7 +198,13 @@ export function DatabaseTableView({ instanceDatabaseMap, databaseName, tableName
192198
const { mutate: updateTableRecords, isPending: isUpdateTableRecordsPending } = useUpdateTableRecords();
193199
const { mutate: deleteTableRecords, isPending: isDeleteTableRecordsPending } = useDeleteTableRecords();
194200

195-
const onRecordAdd = (data: Record<string, unknown>[] | Record<string, unknown>) => {
201+
const queryClient = useQueryClient();
202+
const refreshTable = useCallback(
203+
() => queryClient.invalidateQueries({ queryKey: [instanceParams.entityId, databaseName, tableName] }),
204+
[queryClient, instanceParams.entityId, databaseName, tableName],
205+
);
206+
207+
const onRecordAdd = useCallback((data: Record<string, unknown>[] | Record<string, unknown>) => {
196208
addTableRecords(
197209
{
198210
...instanceParams,
@@ -202,15 +214,15 @@ export function DatabaseTableView({ instanceDatabaseMap, databaseName, tableName
202214
},
203215
{
204216
onSuccess: () => {
205-
void refetchDescribeTableQueryOptions();
206-
void refetchSearchByValueOptions();
217+
void refreshTable();
207218
setIsAddModalOpen(false);
208219
toast.success('Record added successfully');
209220
},
210221
},
211222
);
212-
};
213-
const onRecordUpdate = (data: Record<string, unknown>[]) => {
223+
}, [addTableRecords, instanceParams, databaseName, tableName, refreshTable]);
224+
225+
const onRecordUpdate = useCallback((data: Record<string, unknown>[]) => {
214226
updateTableRecords(
215227
{
216228
...instanceParams,
@@ -220,16 +232,15 @@ export function DatabaseTableView({ instanceDatabaseMap, databaseName, tableName
220232
},
221233
{
222234
onSuccess: () => {
223-
void refetchDescribeTableQueryOptions();
224-
void refetchSearchByValueOptions();
235+
void refreshTable();
225236
setIsEditModalOpen(false);
226237
toast.success('Record updated successfully');
227238
},
228239
},
229240
);
230-
};
241+
}, [updateTableRecords, instanceParams, databaseName, tableName, refreshTable]);
231242

232-
const onDeleteRecord = (hashes: unknown[]) => {
243+
const onDeleteRecord = useCallback((hashes: unknown[]) => {
233244
deleteTableRecords(
234245
{
235246
...instanceParams,
@@ -239,19 +250,13 @@ export function DatabaseTableView({ instanceDatabaseMap, databaseName, tableName
239250
},
240251
{
241252
onSuccess: () => {
242-
void refetchDescribeTableQueryOptions();
243-
void refetchSearchByValueOptions();
253+
void refreshTable();
244254
setIsEditModalOpen(false);
245255
toast.success('Record deleted successfully');
246256
},
247257
},
248258
);
249-
};
250-
251-
const refreshTable = useCallback(async () => {
252-
await refetchDescribeTableQueryOptions();
253-
await refetchSearchByValueOptions();
254-
}, [refetchDescribeTableQueryOptions, refetchSearchByValueOptions]);
259+
}, [deleteTableRecords, instanceParams, databaseName, tableName, refreshTable]);
255260

256261
const onCSVDataAdded = useCallback((message: string) => {
257262
void refreshTable();
@@ -349,7 +354,7 @@ export function DatabaseTableView({ instanceDatabaseMap, databaseName, tableName
349354
</Button>
350355
)}
351356

352-
<Button variant="defaultOutline" onClick={onRefreshClick} disabled={tableDataFetching}>
357+
<Button variant="defaultOutline" onClick={onRefreshClick} disabled={tableDataFetching || tableConditionsDataFetching}>
353358
<RefreshCwIcon />
354359
</Button>
355360

@@ -393,7 +398,7 @@ export function DatabaseTableView({ instanceDatabaseMap, databaseName, tableName
393398

394399
<TableView<Record<string, unknown>, unknown>
395400
data={tableData?.data}
396-
isFetching={tableDataFetching}
401+
isFetching={tableDataFetching || tableConditionsDataFetching}
397402
filtersToggled={filtersToggled}
398403
columns={dataTableColumns}
399404
columnVisibility={columnVisibility}

src/features/instance/operations/queries/getDescribeTable.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ export function getDescribeTableQueryOptions({
1414
instanceClient,
1515
}: GetDescribeTableParams) {
1616
return queryOptions({
17-
queryKey: [entityId, 'describe_table', databaseName, tableName] as const,
17+
queryKey: [entityId, databaseName, tableName, 'describe_table'] as const,
1818
queryFn: async ({ signal }) => {
1919
const { data } = await instanceClient.post<InstanceTable>('/', {
2020
operation: 'describe_table',

src/features/instance/operations/queries/getSearchByConditions.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,9 @@ export function getSearchByConditionsOptions({
6565
enabled: enabled && !!conditions,
6666
queryKey: [
6767
entityId,
68-
'search_by_conditions',
6968
databaseName,
7069
tableName,
70+
'search_by_conditions',
7171
conditions,
7272
sort.attribute || 'default',
7373
sort.descending || false,

src/features/instance/operations/queries/getSearchByValue.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,9 @@ export function getSearchByValueOptions({
4242
enabled,
4343
queryKey: [
4444
entityId,
45-
'search_by_value',
4645
databaseName,
4746
tableName,
47+
'search_by_value',
4848
searchAttribute,
4949
sort.attribute || 'default',
5050
sort.descending || false,

0 commit comments

Comments
 (0)