Skip to content

Commit 67bfeb7

Browse files
committed
Fix useCollection hook not working as expected
1 parent 15e2db4 commit 67bfeb7

File tree

2 files changed

+24
-18
lines changed

2 files changed

+24
-18
lines changed

browser/data-browser/src/views/TablePage/useTableData.ts

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {
66
useResource,
77
useSubject,
88
} from '@tomic/react';
9-
import { useMemo, useReducer } from 'react';
9+
import { useReducer } from 'react';
1010
import { TableSorting, DEFAULT_SORT_PROP } from './tableSorting';
1111

1212
const PAGE_SIZE = 30;
@@ -46,23 +46,27 @@ export function useTableData(resource: Resource): UseTableDataResult {
4646
const [classSubject] = useSubject(resource, core.properties.classtype);
4747
const tableClass = useResource(classSubject);
4848

49-
const queryFilter = useMemo(
50-
() => ({
51-
property: core.properties.parent,
52-
value: resource.subject,
53-
sort_by: sorting.prop,
54-
sort_desc: sorting.sortDesc,
55-
}),
56-
[resource.subject, sorting.prop, sorting.sortDesc],
49+
const queryFilter = {
50+
property: core.properties.parent,
51+
value: resource.subject,
52+
sort_by: sorting.prop,
53+
sort_desc: sorting.sortDesc,
54+
};
55+
56+
const { collection, invalidateCollection, mapAll } = useCollection(
57+
queryFilter,
58+
{
59+
pageSize: PAGE_SIZE,
60+
server: new URL(resource.subject).origin,
61+
},
5762
);
5863

5964
return {
6065
tableClass,
6166
sorting,
6267
setSortBy,
63-
...useCollection(queryFilter, {
64-
pageSize: PAGE_SIZE,
65-
server: new URL(resource.subject).origin,
66-
}),
68+
collection,
69+
invalidateCollection,
70+
mapAll,
6771
};
6872
}

browser/react/src/useCollection.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {
55
QueryFilter,
66
Store,
77
} from '@tomic/lib';
8-
import { useCallback, useEffect, useMemo, useState } from 'react';
8+
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
99
import { useStore } from './hooks.js';
1010

1111
export type CollectionItemProps = { collection: Collection; index: number };
@@ -76,7 +76,7 @@ export function useCollection(
7676
server: undefined,
7777
},
7878
): UseCollectionResult {
79-
const [firstRun, setFirstRun] = useState(true);
79+
const firstRunRef = useRef(true);
8080

8181
const store = useStore();
8282
const queryFilterMemo = useQueryFilterMemo(queryFilter);
@@ -106,7 +106,9 @@ export function useCollection(
106106
}, []);
107107

108108
useEffect(() => {
109-
if (firstRun) {
109+
if (firstRunRef.current) {
110+
firstRunRef.current = false;
111+
110112
return;
111113
}
112114

@@ -119,9 +121,9 @@ export function useCollection(
119121

120122
newCollection.waitForReady().then(() => {
121123
setCollection(proxyCollection(newCollection.__internalObject));
122-
setFirstRun(false);
124+
firstRunRef.current = false;
123125
});
124-
}, [queryFilterMemo, pageSize, store, server, firstRun]);
126+
}, [queryFilterMemo, pageSize, store, server]);
125127

126128
const invalidateCollection = useCallback(async () => {
127129
await collection.__internalObject.refresh();

0 commit comments

Comments
 (0)