validation-center.data.ts 648 B

12345678910111213141516171819
  1. import { EMPTY, Observable, expand, map, of, takeLast } from 'rxjs';
  2. import { CursorPage } from '../../app/core/services/saas-platform.service';
  3. export function findCursorPageItem<T extends { id: string }>(
  4. loadPage: (cursor: string) => Observable<CursorPage<T>>,
  5. id: string,
  6. ): Observable<T | null> {
  7. const target = id.trim();
  8. if (!target) return of(null);
  9. return loadPage('').pipe(
  10. expand((page) => (
  11. page.items.some((item) => item.id === target) || !page.nextCursor
  12. ? EMPTY
  13. : loadPage(page.nextCursor)
  14. )),
  15. takeLast(1),
  16. map((page) => page.items.find((item) => item.id === target) ?? null),
  17. );
  18. }