import { EMPTY, Observable, expand, map, of, takeLast } from 'rxjs'; import { CursorPage } from '../../app/core/services/saas-platform.service'; export function findCursorPageItem( loadPage: (cursor: string) => Observable>, id: string, ): Observable { const target = id.trim(); if (!target) return of(null); return loadPage('').pipe( expand((page) => ( page.items.some((item) => item.id === target) || !page.nextCursor ? EMPTY : loadPage(page.nextCursor) )), takeLast(1), map((page) => page.items.find((item) => item.id === target) ?? null), ); }