{"version":3,"file":"notiz-toolbelt-query.mjs","sources":["../../../../libs/toolbelt/query/src/lib/query.ts","../../../../libs/toolbelt/query/src/lib/route.query.ts","../../../../libs/toolbelt/query/src/lib/page.query.ts","../../../../libs/toolbelt/query/src/notiz-toolbelt-query.ts"],"sourcesContent":["import { inject, NgZone } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { online$ } from '@notiz/toolbelt/network';\nimport { State } from '@notiz/toolbelt/state';\nimport {\n  catchError,\n  debounceTime,\n  delay,\n  filter,\n  fromEvent,\n  interval,\n  map,\n  merge,\n  Observable,\n  of,\n  retryWhen,\n  skip,\n  tap,\n} from 'rxjs';\n\nexport type QueryStatus =\n  | 'loading'\n  | 'success'\n  | 'error'\n  | 'refreshing'\n  | 'mutating';\n\nexport interface QueryState<T> {\n  status: QueryStatus;\n  error?: any;\n  data?: T;\n}\nexport interface QueryOptions {\n  retry?: number;\n  retryDelay?: number;\n  refreshInterval?: number;\n  refreshOnWindowFocus?: boolean;\n  refreshOnNetworkStatusChange?: boolean;\n  refreshDebounce?: number;\n}\n\nexport class Query<T> extends State<QueryState<T>> {\n  data$ = this.pipe(map((state) => state.data));\n  error$ = this.pipe(map((state) => state.error));\n  status$ = this.pipe(map((state) => state.status));\n\n  constructor(\n    private query: Observable<T>,\n    private options: QueryOptions = {},\n  ) {\n    super({\n      status: 'loading',\n    });\n    \n    this.observe(this.query);\n    // run refresh outside of angular to avoid not becoming stable\n    inject(NgZone).runOutsideAngular(() => {\n      (typeof window !== 'undefined'\n        ? merge(\n            this.options.refreshInterval\n              ? interval(this.options.refreshInterval)\n              : of(),\n            this.options.refreshOnWindowFocus\n              ? fromEvent(window, 'focus')\n              : of(),\n            this.options.refreshOnNetworkStatusChange\n              ? online$().pipe(\n                  skip(1),\n                  filter((o) => o),\n                )\n              : of(),\n          ).pipe(debounceTime(this.options.refreshDebounce || 400))\n        : of()\n      )\n        .pipe(takeUntilDestroyed(this._destroyRef))\n        .subscribe(() => {\n          this.refresh();\n        });\n    });\n  }\n\n  private observe(query: Observable<T>) {\n    return this.connect(\n      query.pipe(\n        map((res) => ({ status: 'success' as QueryStatus, data: res })),\n        typeof window !== 'undefined'\n          ? retryWhen((errors) => {\n              let retries = 0;\n              return errors.pipe(\n                delay(this.options.retryDelay || 0),\n                map((error) => {\n                  if (retries++ >= (this.options.retry || 0)) {\n                    throw error;\n                  }\n                  return error;\n                }),\n              );\n            })\n          : tap(), // noop for SSR,\n        catchError((err) => {\n          console.error(err);\n          return of({\n            ...this.snapshot,\n            status: 'error' as QueryStatus,\n            error: err,\n          });\n        }),\n      ),\n    );\n  }\n\n  refresh() {\n    this.patch({\n      status: 'refreshing',\n    });\n    this.flush();\n    this.observe(this.query);\n  }\n}\n","import { Signal, inject } from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport {\n  ActivatedRouteSnapshot,\n  NavigationEnd,\n  Params,\n  Router,\n} from '@angular/router';\nimport {\n  Observable,\n  filter,\n  map,\n  merge,\n  of,\n  share,\n  shareReplay,\n  startWith,\n  switchMap,\n  throttleTime,\n} from 'rxjs';\nimport { Query, QueryOptions } from './query';\n\nexport class RouteQuery<T> extends Query<T | null> {\n  private _id!: Signal<string | null>;\n  id$!: Observable<string | null>;\n\n  get id() {\n    return this._id();\n  }\n\n  constructor(\n    key: string,\n    fetch: (id: string) => Observable<T>,\n    options: QueryOptions = {},\n  ) {\n    const router = inject(Router);\n    const getId = () =>\n      (collectParams(router.routerState.snapshot.root)?.[key] || null) as\n        | string\n        | null;\n    const initialId = getId();\n\n    const routerEvents = router.events.pipe(\n      filter((event) => event instanceof NavigationEnd),\n      share(),\n    );\n\n    const obs = (\n      initialId\n        ? merge(of(initialId), routerEvents).pipe(\n            throttleTime(0, undefined, { leading: true }),\n          )\n        : routerEvents\n    ).pipe(\n      map((id) => getId()), //get current id fresh out the oven for repeat to not use initialId after page change\n      switchMap((id) => (!id ? of<T | null>(null) : fetch(id))),\n      takeUntilDestroyed(),\n    );\n\n    super(obs, options);\n\n    this.id$ = routerEvents.pipe(\n      map(() => getId()),\n      startWith(initialId),\n      shareReplay(1),\n    );\n    this._id = toSignal(this.id$, {\n      initialValue: initialId,\n    });\n  }\n}\n\nfunction collectParams(root: ActivatedRouteSnapshot): Params {\n  const params: Params = {};\n\n  (function mergeParamsFromSnapshot(snapshot: ActivatedRouteSnapshot) {\n    Object.assign(params, snapshot.params);\n\n    snapshot.children.forEach(mergeParamsFromSnapshot);\n  })(root);\n\n  return params;\n}\n","import { distinctUntilChanged, shareReplay, skip } from 'rxjs/operators';\nimport {\n  filter,\n  map,\n  merge,\n  Observable,\n  switchMap,\n  debounceTime,\n  combineLatest,\n} from 'rxjs';\nimport { State } from '@notiz/toolbelt/state';\nimport { Query, QueryOptions } from './query';\n\nexport interface PageState<T> {\n  page: number;\n  size: number;\n  sortColumn?: string;\n  sortOrder?: string;\n  searchQuery?: string;\n  searchDebounce?: number;\n  total: number;\n  items: T[];\n}\n\nexport class PageQuery<T, V> extends State<PageState<T>> {\n  private pageChange$ = this.pick('page', 'size', 'sortColumn', 'sortOrder');\n  private _searchChange$ = this.pick('searchQuery');\n  private searchChange$ = this._searchChange$.pipe(\n    skip(1),\n    debounceTime(this.snapshot.searchDebounce || 400),\n    distinctUntilChanged()\n  );\n\n  private query$ = new Query(\n    merge(\n      this.pageChange$.asObservable(),\n      this.searchChange$\n    ).pipe(\n      debounceTime(0),\n      switchMap(() =>\n        this.query({ ...this.snapshot, size: this.snapshot.size || 10 })\n      )\n    ),\n    this.queryOptions\n  );\n\n  items$ = this.pipe(\n    map((state) => state.items),\n    shareReplay(1)\n  );\n  total$ = this.pipe(\n    map((state) => state.total),\n    shareReplay(1)\n  );\n  page$ = this.pipe(\n    map((state) => state.page),\n    shareReplay(1)\n  );\n  size$ = this.pipe(\n    map((state) => state.size),\n    shareReplay(1)\n  );\n  sortColumn$ = this.pipe(\n    map((state) => state.sortColumn),\n    shareReplay(1)\n  );\n  sortOrder$ = this.pipe(\n    map((state) => state.sortOrder),\n    shareReplay(1)\n  );\n  searchQuery$ = this.pipe(\n    map((state) => state.searchQuery),\n    shareReplay(1)\n  );\n\n  hasNext$ = this.pipe(\n    map((state) => (state.page + 1) * state.size < state.total)\n  );\n  hasPrev$ = this.pipe(map((state) => state.page > 0));\n  isFirst$ = this.pipe(map((state) => state.page === 0));\n  isLast$ = this.pipe(\n    map((state) => (state.page + 1) * state.size >= state.total)\n  );\n\n  status$ = this.query$.status$;\n  error$ = this.query$.error$;\n\n  allowNext$ = combineLatest([this.status$, this.hasNext$, this.items$]).pipe(\n    map(([status, hasNext, items]) => {\n      return status === 'success' && hasNext && items.length > 0;\n    }),\n    shareReplay(1)\n  );\n\n  // used to track wether the data should be reset after query refresh\n  private infiniteRefresh = false;\n\n  constructor(\n    private query: (page: PageState<T>) => Observable<V>,\n    private mapFunction: (\n      data: V,\n      prev: PageState<T>,\n      index: number\n    ) => PageState<T> = (data) => data as PageState<T>,\n    private options: Partial<PageState<T>> = {},\n    private queryOptions: QueryOptions = {},\n    private infinite = false\n  ) {\n    super({\n      page: 0,\n      size: 10,\n      total: 0,\n      items: [],\n      ...options,\n    });\n    this.connect(\n      this.query$.data$.pipe(\n        filter((data) => !!data),\n        map((data, i) => {\n          const snapshot = this.infiniteRefresh\n            ? { ...this.snapshot, items: [] }\n            : this.snapshot;\n          this.infiniteRefresh = false;\n          return this.mapFunction(data!, snapshot, i);\n        })\n      )\n    );\n  }\n\n  next() {\n    if ((this.snapshot.page + 1) * this.snapshot.size < this.snapshot.total) {\n      this.patch({\n        page: this.snapshot.page + 1,\n      });\n    }\n  }\n\n  prev() {\n    if (this.snapshot.page > 0) {\n      this.patch({\n        page: this.snapshot.page - 1,\n      });\n    }\n  }\n\n  last() {\n    this.patch({\n      page:\n        this.snapshot.total < this.snapshot.size\n          ? 0\n          : Math.ceil(this.snapshot.total / this.snapshot.size) - 1,\n    });\n  }\n\n  first() {\n    this.patch({\n      page: 0,\n    });\n  }\n\n  sort({ sortColumn, sortOrder }: { sortColumn: string; sortOrder: string }) {\n    this.patch({\n      sortColumn: sortColumn,\n      sortOrder: sortOrder,\n      page: this.infinite ? 0 : this.snapshot.page,\n    });\n  }\n\n  search(query: string) {\n    this.patch({\n      searchQuery: query,\n      page: 0,\n    });\n  }\n\n  refresh() {\n    if (this.infinite) {\n      this.infiniteRefresh = true;\n      this.patch({\n        page: 0,\n      });\n      this.query$.reset();\n    }\n    this.query$.refresh();\n  }\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["skip","shareReplay"],"mappings":"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"}