@@ -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