@@ -85,10 +85,14 @@ export interface FetchRangeResult {
8585 range : { start : number ; end : number }
8686}
8787
88- /** Fetches entries for a visible range with prefetch buffer */
89- export async function fetchVisibleRange ( params : FetchRangeParams ) : Promise < FetchRangeResult | null > {
90- const { listingId, startItem, endItem, hasParent, totalCount, includeHidden, cachedRange, onSyncStatusRequest } =
91- params
88+ /** Calculates the fetch range for visible items with prefetch buffer */
89+ export function calculateFetchRange ( params : {
90+ startItem : number
91+ endItem : number
92+ hasParent : boolean
93+ totalCount : number
94+ } ) : { fetchStart : number ; fetchEnd : number } {
95+ const { startItem, endItem, hasParent, totalCount } = params
9296
9397 // Account for ".." entry
9498 let adjustedStart = startItem
@@ -102,8 +106,27 @@ export async function fetchVisibleRange(params: FetchRangeParams): Promise<Fetch
102106 const fetchStart = Math . max ( 0 , adjustedStart - PREFETCH_BUFFER / 2 )
103107 const fetchEnd = Math . min ( hasParent ? totalCount - 1 : totalCount , adjustedEnd + PREFETCH_BUFFER / 2 )
104108
109+ return { fetchStart, fetchEnd }
110+ }
111+
112+ /** Checks if the needed range is already cached */
113+ export function isRangeCached (
114+ fetchStart : number ,
115+ fetchEnd : number ,
116+ cachedRange : { start : number ; end : number } ,
117+ ) : boolean {
118+ return fetchStart >= cachedRange . start && fetchEnd <= cachedRange . end
119+ }
120+
121+ /** Fetches entries for a visible range with prefetch buffer */
122+ export async function fetchVisibleRange ( params : FetchRangeParams ) : Promise < FetchRangeResult | null > {
123+ const { listingId, startItem, endItem, hasParent, totalCount, includeHidden, cachedRange, onSyncStatusRequest } =
124+ params
125+
126+ const { fetchStart, fetchEnd } = calculateFetchRange ( { startItem, endItem, hasParent, totalCount } )
127+
105128 // Only fetch if needed range isn't cached
106- if ( fetchStart >= cachedRange . start && fetchEnd <= cachedRange . end ) {
129+ if ( isRangeCached ( fetchStart , fetchEnd , cachedRange ) ) {
107130 return null // Already cached
108131 }
109132
0 commit comments