| 12345678910111213141516171819 |
- import { EMPTY, Observable, expand, map, of, takeLast } from 'rxjs';
- import { CursorPage } from '../../app/core/services/saas-platform.service';
- export function findCursorPageItem<T extends { id: string }>(
- loadPage: (cursor: string) => Observable<CursorPage<T>>,
- id: string,
- ): Observable<T | null> {
- 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),
- );
- }
|