Skip to content

Commit 225bd03

Browse files
committed
apply suggestion
1 parent 632d4d4 commit 225bd03

1 file changed

Lines changed: 14 additions & 8 deletions

File tree

packages/itwin/tree-widget/src/tree-widget-react/components/trees/common/internal/caches/AlwaysAndNeverDrawnElementInfoCache.ts

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -252,8 +252,7 @@ export class AlwaysAndNeverDrawnElementInfoCache implements Disposable {
252252
latestCacheEntry.invalidateValue.next();
253253
}
254254
const set = setType === "always" ? this.#viewport.alwaysDrawn : this.#viewport.neverDrawn;
255-
const setWithoutTransientElements = set ? [...set].filter((id) => !Id64.isTransient(id)) : undefined;
256-
const queryObservable = this.queryAlwaysOrNeverDrawnElementInfo(setWithoutTransientElements, setType).pipe(
255+
const queryObservable = this.queryAlwaysOrNeverDrawnElementInfo(set, setType).pipe(
257256
takeUntil(latestCacheEntry.invalidateValue),
258257
takeUntil(this.#disposeSubject),
259258
shareReplay(),
@@ -269,16 +268,20 @@ export class AlwaysAndNeverDrawnElementInfoCache implements Disposable {
269268
this.#disposeSubject.next();
270269
}
271270

272-
private queryAlwaysOrNeverDrawnElementInfo(setWithoutTransientElements: Array<ElementId> | undefined, setType: SetType): Observable<CachedNodesMap> {
273-
const elementInfo = setWithoutTransientElements?.length
274-
? setWithoutTransientElements.length > ALWAYS_NEVER_BUFFER_THRESHOLD
271+
private queryAlwaysOrNeverDrawnElementInfo(set: ReadonlySet<Id64String> | undefined, setType: SetType): Observable<CachedNodesMap> {
272+
const elementInfo = set?.size
273+
? set.size > ALWAYS_NEVER_BUFFER_THRESHOLD
275274
? // When set is larger, buffer helps to not block main thread for long periods of time
276-
from(setWithoutTransientElements).pipe(
277-
bufferCount(getOptimalBatchSize({ totalSize: setWithoutTransientElements.length, maximumBatchSize: ALWAYS_NEVER_BUFFER_THRESHOLD })),
275+
from(set).pipe(
276+
filter((id) => !Id64.isTransient(id)),
277+
bufferCount(getOptimalBatchSize({ totalSize: set.size, maximumBatchSize: ALWAYS_NEVER_BUFFER_THRESHOLD })),
278278
releaseMainThreadOnItemsCount(2),
279279
mergeMap((block, index) => this.queryElementInfo(block, `${setType}-${index}`), 2),
280280
)
281-
: this.queryElementInfo(setWithoutTransientElements, `${setType}-0`)
281+
: this.queryElementInfo(
282+
[...set].filter((id) => !Id64.isTransient(id)),
283+
`${setType}-0`,
284+
)
282285
: EMPTY;
283286
return elementInfo.pipe(
284287
releaseMainThreadOnItemsCount(500),
@@ -313,6 +316,9 @@ export class AlwaysAndNeverDrawnElementInfoCache implements Disposable {
313316
categoryElementPath: Id64Array;
314317
}> {
315318
return defer(() => {
319+
if (elementIds.length === 0) {
320+
return EMPTY;
321+
}
316322
const executor = createECSqlQueryExecutor(this.#viewport.iModel);
317323
return executor.createQueryReader(
318324
{

0 commit comments

Comments
 (0)