@dereekb/rxjs 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/README.md +7 -0
  2. package/package.json +13 -0
  3. package/src/index.d.ts +1 -0
  4. package/src/index.js +5 -0
  5. package/src/index.js.map +1 -0
  6. package/src/lib/index.d.ts +6 -0
  7. package/src/lib/index.js +10 -0
  8. package/src/lib/index.js.map +1 -0
  9. package/src/lib/iterator/index.d.ts +6 -0
  10. package/src/lib/iterator/index.js +10 -0
  11. package/src/lib/iterator/index.js.map +1 -0
  12. package/src/lib/iterator/iteration.accumulator.d.ts +56 -0
  13. package/src/lib/iterator/iteration.accumulator.js +63 -0
  14. package/src/lib/iterator/iteration.accumulator.js.map +1 -0
  15. package/src/lib/iterator/iteration.accumulator.rxjs.d.ts +14 -0
  16. package/src/lib/iterator/iteration.accumulator.rxjs.js +35 -0
  17. package/src/lib/iterator/iteration.accumulator.rxjs.js.map +1 -0
  18. package/src/lib/iterator/iteration.d.ts +58 -0
  19. package/src/lib/iterator/iteration.js +3 -0
  20. package/src/lib/iterator/iteration.js.map +1 -0
  21. package/src/lib/iterator/iteration.mapped.d.ts +38 -0
  22. package/src/lib/iterator/iteration.mapped.js +36 -0
  23. package/src/lib/iterator/iteration.mapped.js.map +1 -0
  24. package/src/lib/iterator/iteration.mapped.page.d.ts +25 -0
  25. package/src/lib/iterator/iteration.mapped.page.js +36 -0
  26. package/src/lib/iterator/iteration.mapped.page.js.map +1 -0
  27. package/src/lib/iterator/iteration.next.d.ts +27 -0
  28. package/src/lib/iterator/iteration.next.js +55 -0
  29. package/src/lib/iterator/iteration.next.js.map +1 -0
  30. package/src/lib/iterator/iterator.page.d.ts +172 -0
  31. package/src/lib/iterator/iterator.page.js +238 -0
  32. package/src/lib/iterator/iterator.page.js.map +1 -0
  33. package/src/lib/loading/index.d.ts +7 -0
  34. package/src/lib/loading/index.js +11 -0
  35. package/src/lib/loading/index.js.map +1 -0
  36. package/src/lib/loading/loading.context.d.ts +8 -0
  37. package/src/lib/loading/loading.context.js +3 -0
  38. package/src/lib/loading/loading.context.js.map +1 -0
  39. package/src/lib/loading/loading.context.simple.d.ts +17 -0
  40. package/src/lib/loading/loading.context.simple.js +40 -0
  41. package/src/lib/loading/loading.context.simple.js.map +1 -0
  42. package/src/lib/loading/loading.context.state.d.ts +33 -0
  43. package/src/lib/loading/loading.context.state.js +52 -0
  44. package/src/lib/loading/loading.context.state.js.map +1 -0
  45. package/src/lib/loading/loading.context.state.model.d.ts +18 -0
  46. package/src/lib/loading/loading.context.state.model.js +37 -0
  47. package/src/lib/loading/loading.context.state.model.js.map +1 -0
  48. package/src/lib/loading/loading.context.state.page.d.ts +21 -0
  49. package/src/lib/loading/loading.context.state.page.js +46 -0
  50. package/src/lib/loading/loading.context.state.page.js.map +1 -0
  51. package/src/lib/loading/loading.context.value.d.ts +19 -0
  52. package/src/lib/loading/loading.context.value.js +36 -0
  53. package/src/lib/loading/loading.context.value.js.map +1 -0
  54. package/src/lib/loading/loading.state.d.ts +90 -0
  55. package/src/lib/loading/loading.state.js +188 -0
  56. package/src/lib/loading/loading.state.js.map +1 -0
  57. package/src/lib/lock.d.ts +56 -0
  58. package/src/lib/lock.js +109 -0
  59. package/src/lib/lock.js.map +1 -0
  60. package/src/lib/object.d.ts +10 -0
  61. package/src/lib/object.js +25 -0
  62. package/src/lib/object.js.map +1 -0
  63. package/src/lib/rxjs/array.d.ts +32 -0
  64. package/src/lib/rxjs/array.js +54 -0
  65. package/src/lib/rxjs/array.js.map +1 -0
  66. package/src/lib/rxjs/boolean.d.ts +5 -0
  67. package/src/lib/rxjs/boolean.js +12 -0
  68. package/src/lib/rxjs/boolean.js.map +1 -0
  69. package/src/lib/rxjs/index.d.ts +6 -0
  70. package/src/lib/rxjs/index.js +10 -0
  71. package/src/lib/rxjs/index.js.map +1 -0
  72. package/src/lib/rxjs/loading.d.ts +5 -0
  73. package/src/lib/rxjs/loading.js +12 -0
  74. package/src/lib/rxjs/loading.js.map +1 -0
  75. package/src/lib/rxjs/number.d.ts +5 -0
  76. package/src/lib/rxjs/number.js +12 -0
  77. package/src/lib/rxjs/number.js.map +1 -0
  78. package/src/lib/rxjs/rxjs.d.ts +7 -0
  79. package/src/lib/rxjs/rxjs.js +32 -0
  80. package/src/lib/rxjs/rxjs.js.map +1 -0
  81. package/src/lib/rxjs/value.d.ts +18 -0
  82. package/src/lib/rxjs/value.js +37 -0
  83. package/src/lib/rxjs/value.js.map +1 -0
  84. package/src/lib/subscription.d.ts +28 -0
  85. package/src/lib/subscription.js +68 -0
  86. package/src/lib/subscription.js.map +1 -0
@@ -0,0 +1,172 @@
1
+ import { PageLoadingState } from "../loading";
2
+ import { Destroyable, Filter, Maybe, PageNumber, Page } from "@dereekb/util";
3
+ import { Observable } from "rxjs";
4
+ import { ItemIteratorNextRequest, PageItemIteration } from './iteration';
5
+ export interface ItemPageIteratorRequest<V, F, C extends ItemPageIterationConfig<F> = ItemPageIterationConfig<F>> extends Page {
6
+ /**
7
+ * The base iterator config.
8
+ */
9
+ readonly iteratorConfig: C;
10
+ /**
11
+ * Page being loaded.
12
+ */
13
+ readonly page: PageNumber;
14
+ /**
15
+ * Suggested limit of items to load per request.
16
+ */
17
+ readonly limit?: number;
18
+ /**
19
+ * Returns the last successful item, if available.
20
+ */
21
+ readonly lastItem$: Observable<Maybe<V>>;
22
+ /**
23
+ * The last successful result object, if available.
24
+ */
25
+ readonly lastResult$: Observable<Maybe<ItemPageIteratorResult<V>>>;
26
+ /**
27
+ * The last state, if available.
28
+ */
29
+ readonly lastState$: Observable<Maybe<PageLoadingState<ItemPageIteratorResult<V>>>>;
30
+ }
31
+ export interface ItemPageIteratorResult<V> {
32
+ /**
33
+ * Error result.
34
+ */
35
+ error?: Error;
36
+ /**
37
+ * Returned values.
38
+ */
39
+ value?: V;
40
+ /**
41
+ * True if the end has been reached.
42
+ *
43
+ * Alternatively, end is implied if values is undefined or empty.
44
+ *
45
+ * False can be specified to note that despite having no values passed, the end has not yet been reached.
46
+ */
47
+ end?: boolean;
48
+ }
49
+ export interface ItemPageIteratorDelegate<V, F, C extends ItemPageIterationConfig<F> = ItemPageIterationConfig<F>> {
50
+ /**
51
+ * Returns an observable of items given the input request.
52
+ *
53
+ * If the input goes out of bounds, the result should be
54
+ */
55
+ loadItemsForPage: (request: ItemPageIteratorRequest<V, F, C>) => Observable<ItemPageIteratorResult<V>>;
56
+ }
57
+ export interface ItemPageIterationConfig<F = any> extends Filter<F> {
58
+ }
59
+ /**
60
+ * Default number of pages that can be loaded.
61
+ */
62
+ export declare const DEFAULT_ITEM_PAGE_ITERATOR_MAX = 100;
63
+ /**
64
+ * Used for generating new iterations.
65
+ */
66
+ export declare class ItemPageIterator<V, F, C extends ItemPageIterationConfig<F> = any> {
67
+ readonly delegate: ItemPageIteratorDelegate<V, F, C>;
68
+ private _maxPageLoadLimit;
69
+ get maxPageLoadLimit(): number;
70
+ constructor(delegate: ItemPageIteratorDelegate<V, F, C>);
71
+ /**
72
+ * Creates a new instance based on the input config.
73
+ *
74
+ * @param config
75
+ * @returns
76
+ */
77
+ instance(config: C): ItemPageIterationInstance<V, F, C>;
78
+ }
79
+ export interface ItemPageIterationInstanceState<V> {
80
+ /**
81
+ * Used for tracking the start/end of a specific next call.
82
+ */
83
+ n: number;
84
+ current: Maybe<PageLoadingState<ItemPageIteratorResult<V>>>;
85
+ latestFinished: Maybe<PageLoadingState<ItemPageIteratorResult<V>>>;
86
+ lastSuccessful: Maybe<PageLoadingState<ItemPageIteratorResult<V>>>;
87
+ }
88
+ /**
89
+ * Configured Iterator instance.
90
+ */
91
+ export declare class ItemPageIterationInstance<V, F, C extends ItemPageIterationConfig<F> = ItemPageIterationConfig<F>> implements PageItemIteration<V, PageLoadingState<V>>, Destroyable {
92
+ readonly iterator: ItemPageIterator<V, F, C>;
93
+ readonly config: C;
94
+ /**
95
+ * Used for triggering loading of more content.
96
+ */
97
+ private readonly _next;
98
+ private readonly _maxPageLoadLimit;
99
+ constructor(iterator: ItemPageIterator<V, F, C>, config: C);
100
+ readonly state$: Observable<ItemPageIterationInstanceState<V>>;
101
+ /**
102
+ * Used to track when a next() value changes, or the current changes.
103
+ *
104
+ * This returns the n value of next.
105
+ */
106
+ readonly _nextTrigger$: Observable<ItemPageIterationInstanceState<V>>;
107
+ /**
108
+ * Same as _nextTrigger$, but catches finished loading events.
109
+ */
110
+ readonly _nextFinished$: Observable<ItemPageIterationInstanceState<V>>;
111
+ /**
112
+ * The current page being loaded or the latest page finished loading.
113
+ */
114
+ readonly currentPageResultState$: Observable<PageLoadingState<ItemPageIteratorResult<V>>>;
115
+ /**
116
+ * The latest page results that has finished loading.
117
+ */
118
+ readonly latestPageResultState$: Observable<PageLoadingState<ItemPageIteratorResult<V>>>;
119
+ /**
120
+ * Whether or not the final item has been loaded.
121
+ *
122
+ * This observable will return false to the first listener, and will wait to emit again until the current state has finished loading, if loading.
123
+ *
124
+ * Will emit every time the latest page has finished loading.
125
+ */
126
+ readonly hasReachedEndResult$: Observable<boolean>;
127
+ private readonly _currentPageResultState$;
128
+ /**
129
+ * Whether or not items are currently being loaded.
130
+ */
131
+ readonly isLoading$: Observable<boolean>;
132
+ private readonly _lastFinishedPageResultState$;
133
+ private readonly _lastFinishedPageResult$;
134
+ private readonly _lastFinishedPageResultItem$;
135
+ /**
136
+ * The latest page results that has finished loading without an error.
137
+ */
138
+ readonly latestSuccessfulPageResults$: Observable<PageLoadingState<ItemPageIteratorResult<V>>>;
139
+ get maxPageLoadLimit(): number;
140
+ set maxPageLoadLimit(maxPageLoadLimit: number);
141
+ nextPage(request?: ItemIteratorNextRequest): Promise<number>;
142
+ readonly currentState$: Observable<PageLoadingState<V>>;
143
+ readonly latestLoadedPage$: Observable<PageNumber>;
144
+ readonly numberOfPagesLoaded$: Observable<PageNumber>;
145
+ /**
146
+ * Whether or not there are more results to load.
147
+ */
148
+ readonly hasNext$: Observable<boolean>;
149
+ /**
150
+ * Whether or not the successfulPageResultsCount has passed the maxPageLoadLimit
151
+ */
152
+ readonly canLoadMore$: Observable<boolean>;
153
+ /**
154
+ * Observable of whether or not there are items that have finished loading, and if this iterator can load more.
155
+ */
156
+ readonly hasNextAndCanLoadMore$: Observable<boolean>;
157
+ readonly latestState$: Observable<PageLoadingState<V>>;
158
+ readonly latestItems$: Observable<Maybe<V>>;
159
+ next(request?: ItemIteratorNextRequest): void;
160
+ protected _pushNext(request: ItemIteratorNextRequest): void;
161
+ destroy(): void;
162
+ }
163
+ /**
164
+ * Is considered the "end" result if:
165
+ *
166
+ * - end is true
167
+ * - end is not false and the result value is not empty/null. Uses hasValueOrNotEmpty internally to decide.
168
+ *
169
+ * @param result
170
+ * @returns
171
+ */
172
+ export declare function isItemPageIteratorResultEndResult<V>(result: ItemPageIteratorResult<V>): boolean;
@@ -0,0 +1,238 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isItemPageIteratorResultEndResult = exports.ItemPageIterationInstance = exports.ItemPageIterator = exports.DEFAULT_ITEM_PAGE_ITERATOR_MAX = void 0;
4
+ const rxjs_1 = require("../rxjs");
5
+ const operators_1 = require("rxjs/operators");
6
+ const loading_1 = require("../loading");
7
+ const util_1 = require("@dereekb/util");
8
+ const rxjs_2 = require("rxjs");
9
+ const iteration_next_1 = require("./iteration.next");
10
+ // MARK: Iterator
11
+ /**
12
+ * Default number of pages that can be loaded.
13
+ */
14
+ exports.DEFAULT_ITEM_PAGE_ITERATOR_MAX = 100;
15
+ /**
16
+ * Used for generating new iterations.
17
+ */
18
+ class ItemPageIterator {
19
+ constructor(delegate) {
20
+ this.delegate = delegate;
21
+ this._maxPageLoadLimit = exports.DEFAULT_ITEM_PAGE_ITERATOR_MAX;
22
+ }
23
+ get maxPageLoadLimit() {
24
+ return this._maxPageLoadLimit;
25
+ }
26
+ /**
27
+ * Creates a new instance based on the input config.
28
+ *
29
+ * @param config
30
+ * @returns
31
+ */
32
+ instance(config) {
33
+ return new ItemPageIterationInstance(this, config);
34
+ }
35
+ }
36
+ exports.ItemPageIterator = ItemPageIterator;
37
+ /**
38
+ * Configured Iterator instance.
39
+ */
40
+ class ItemPageIterationInstance {
41
+ constructor(iterator, config) {
42
+ this.iterator = iterator;
43
+ this.config = config;
44
+ /**
45
+ * Used for triggering loading of more content.
46
+ */
47
+ this._next = new rxjs_2.BehaviorSubject({ n: 0 });
48
+ this._maxPageLoadLimit = new rxjs_2.BehaviorSubject(this.iterator.maxPageLoadLimit);
49
+ // MARK: State
50
+ this.state$ = this._next.pipe((0, operators_1.delay)(0), (0, rxjs_2.exhaustMap)((request) => (0, rxjs_2.combineLatest)([this.hasNextAndCanLoadMore$, this._lastFinishedPageResultState$]).pipe((0, rxjs_2.first)(), (0, operators_1.map)(([hasNextAndCanLoadMore, prevResult]) => [itemPageIteratorShouldLoadNextPage(request, hasNextAndCanLoadMore, prevResult), prevResult]), (0, operators_1.mergeMap)(([shouldLoadNextPage, prevResult]) => {
51
+ if (shouldLoadNextPage) {
52
+ const nextPageNumber = nextIteratorPageNumber(prevResult); // retry number if error occured
53
+ const page = (0, util_1.filteredPage)(nextPageNumber, this.config);
54
+ const iteratorResultObs = this.iterator.delegate.loadItemsForPage({
55
+ iteratorConfig: this.config,
56
+ page: nextPageNumber,
57
+ lastItem$: this._lastFinishedPageResultItem$,
58
+ lastResult$: this._lastFinishedPageResult$,
59
+ lastState$: this._lastFinishedPageResultState$
60
+ }).pipe((0, operators_1.catchError)((error) => (0, rxjs_2.of)({ error }).pipe((0, rxjs_2.first)())));
61
+ const stateObs = iteratorResultObs.pipe((0, rxjs_2.first)(), (0, operators_1.map)((result) => {
62
+ if (result.error != null) {
63
+ return {
64
+ loading: false,
65
+ page: nextPageNumber,
66
+ error: result.error,
67
+ model: result
68
+ };
69
+ }
70
+ else {
71
+ return (0, loading_1.successPageResult)(nextPageNumber, result);
72
+ }
73
+ }), (0, operators_1.startWith)((0, loading_1.beginLoading)(page)), (0, rxjs_2.shareReplay)(1));
74
+ return stateObs;
75
+ }
76
+ else {
77
+ return (0, rxjs_2.of)(prevResult).pipe();
78
+ }
79
+ }), (0, operators_1.map)((state) => ({ n: request.n, state })))), (0, operators_1.scan)((acc, x) => {
80
+ const { n, state: curr } = x;
81
+ let next = {
82
+ n,
83
+ current: curr,
84
+ latestFinished: acc.latestFinished,
85
+ lastSuccessful: acc.lastSuccessful
86
+ };
87
+ // If it was a replay of the previous result, change nothing.
88
+ if (acc.current !== curr) {
89
+ if ((0, loading_1.loadingStateHasFinishedLoading)(curr)) {
90
+ next.latestFinished = curr;
91
+ if (!(0, loading_1.loadingStateHasError)(curr)) {
92
+ next.lastSuccessful = curr;
93
+ }
94
+ }
95
+ }
96
+ return next;
97
+ }, {
98
+ n: -1,
99
+ current: { page: util_1.FIRST_PAGE },
100
+ latestFinished: undefined, lastSuccessful: undefined
101
+ }), (0, rxjs_2.shareReplay)(1));
102
+ /**
103
+ * Used to track when a next() value changes, or the current changes.
104
+ *
105
+ * This returns the n value of next.
106
+ */
107
+ this._nextTrigger$ = this.state$.pipe((0, operators_1.distinctUntilChanged)((a, b) => a.n === b.n && a.current === b.current), (0, rxjs_2.shareReplay)(1), (0, operators_1.skip)(1) // Wait until a new state is emitted
108
+ );
109
+ /**
110
+ * Same as _nextTrigger$, but catches finished loading events.
111
+ */
112
+ this._nextFinished$ = this._nextTrigger$.pipe((0, rxjs_2.filter)(x => (0, loading_1.loadingStateHasFinishedLoading)(x.current)));
113
+ /**
114
+ * The current page being loaded or the latest page finished loading.
115
+ */
116
+ this.currentPageResultState$ = this.state$.pipe((0, operators_1.map)(x => x.current), (0, rxjs_1.filterMaybe)(), (0, rxjs_2.shareReplay)(1));
117
+ /**
118
+ * The latest page results that has finished loading.
119
+ */
120
+ this.latestPageResultState$ = this.state$.pipe((0, operators_1.map)(x => x.latestFinished), (0, rxjs_1.filterMaybe)(), (0, operators_1.distinctUntilChanged)(), (0, rxjs_2.shareReplay)(1));
121
+ /**
122
+ * Whether or not the final item has been loaded.
123
+ *
124
+ * This observable will return false to the first listener, and will wait to emit again until the current state has finished loading, if loading.
125
+ *
126
+ * Will emit every time the latest page has finished loading.
127
+ */
128
+ this.hasReachedEndResult$ = this.latestPageResultState$.pipe((0, operators_1.map)(x => isItemPageIteratorResultEndResult(x.model)), (0, operators_1.startWith)(false), // Has not reached the end
129
+ (0, rxjs_2.shareReplay)(1));
130
+ this._currentPageResultState$ = this.currentPageResultState$.pipe((0, operators_1.startWith)(undefined), (0, rxjs_2.shareReplay)(1));
131
+ /**
132
+ * Whether or not items are currently being loaded.
133
+ */
134
+ this.isLoading$ = this._currentPageResultState$.pipe((0, operators_1.map)(x => (0, loading_1.loadingStateIsLoading)(x)), (0, operators_1.distinctUntilChanged)(), (0, rxjs_2.shareReplay)(1));
135
+ this._lastFinishedPageResultState$ = this.latestPageResultState$.pipe((0, operators_1.startWith)(undefined), (0, rxjs_2.shareReplay)(1));
136
+ this._lastFinishedPageResult$ = this._lastFinishedPageResultState$.pipe((0, operators_1.map)(x => x === null || x === void 0 ? void 0 : x.model));
137
+ this._lastFinishedPageResultItem$ = this._lastFinishedPageResult$.pipe((0, operators_1.map)(x => x === null || x === void 0 ? void 0 : x.value));
138
+ /**
139
+ * The latest page results that has finished loading without an error.
140
+ */
141
+ this.latestSuccessfulPageResults$ = this.state$.pipe((0, operators_1.map)(x => x.lastSuccessful), (0, rxjs_1.filterMaybe)(), (0, rxjs_2.shareReplay)(1));
142
+ this.currentState$ = this.currentPageResultState$.pipe(mapItemPageLoadingStateFromResultPageLoadingState(), (0, rxjs_2.shareReplay)(1));
143
+ this.latestLoadedPage$ = this.latestPageResultState$.pipe((0, operators_1.map)(x => x.page), (0, operators_1.distinctUntilChanged)(), (0, rxjs_2.shareReplay)(1));
144
+ this.numberOfPagesLoaded$ = this.latestLoadedPage$.pipe((0, operators_1.map)(x => x + 1), (0, rxjs_2.shareReplay)(1));
145
+ // MARK: ItemIteration
146
+ /**
147
+ * Whether or not there are more results to load.
148
+ */
149
+ this.hasNext$ = this.hasReachedEndResult$.pipe((0, operators_1.map)(x => !x), (0, rxjs_2.shareReplay)(1));
150
+ /**
151
+ * Whether or not the successfulPageResultsCount has passed the maxPageLoadLimit
152
+ */
153
+ this.canLoadMore$ = (0, rxjs_2.combineLatest)([this._maxPageLoadLimit, this.numberOfPagesLoaded$.pipe((0, operators_1.startWith)(0))]).pipe((0, operators_1.map)(([maxPageLoadLimit, numberOfPagesLoaded]) => numberOfPagesLoaded < maxPageLoadLimit), (0, operators_1.distinctUntilChanged)(), (0, rxjs_2.shareReplay)(1));
154
+ /**
155
+ * Observable of whether or not there are items that have finished loading, and if this iterator can load more.
156
+ */
157
+ this.hasNextAndCanLoadMore$ = (0, iteration_next_1.iterationHasNextAndCanLoadMore)(this);
158
+ this.latestState$ = this.latestPageResultState$.pipe(mapItemPageLoadingStateFromResultPageLoadingState(), (0, rxjs_2.shareReplay)(1));
159
+ this.latestItems$ = this.latestState$.pipe((0, operators_1.distinctUntilChanged)(), (0, operators_1.map)(x => x.model), (0, rxjs_2.shareReplay)(1));
160
+ }
161
+ // MARK: PageItemIteration
162
+ get maxPageLoadLimit() {
163
+ return this._maxPageLoadLimit.value;
164
+ }
165
+ set maxPageLoadLimit(maxPageLoadLimit) {
166
+ this._maxPageLoadLimit.next(Math.max(0, Math.ceil(maxPageLoadLimit)));
167
+ }
168
+ nextPage(request = {}) {
169
+ return new Promise((resolve, reject) => {
170
+ this._nextFinished$.pipe((0, rxjs_2.exhaustMap)(() => this.latestPageResultState$), (0, rxjs_2.first)()).subscribe({
171
+ next: (latestState) => {
172
+ if (latestState.error) {
173
+ reject(latestState.error);
174
+ }
175
+ else {
176
+ resolve(latestState.page);
177
+ }
178
+ }
179
+ });
180
+ this.next(request);
181
+ });
182
+ }
183
+ next(request = {}) {
184
+ this._pushNext(request);
185
+ }
186
+ _pushNext(request) {
187
+ this._next.next({
188
+ n: this._next.value.n + 1,
189
+ retry: request.retry,
190
+ page: request.page
191
+ });
192
+ }
193
+ // MARK: Destroyable
194
+ destroy() {
195
+ this._next.complete();
196
+ this._maxPageLoadLimit.complete();
197
+ }
198
+ }
199
+ exports.ItemPageIterationInstance = ItemPageIterationInstance;
200
+ // MARK: Utility
201
+ /**
202
+ * Is considered the "end" result if:
203
+ *
204
+ * - end is true
205
+ * - end is not false and the result value is not empty/null. Uses hasValueOrNotEmpty internally to decide.
206
+ *
207
+ * @param result
208
+ * @returns
209
+ */
210
+ function isItemPageIteratorResultEndResult(result) {
211
+ if (result.error != null) {
212
+ return false;
213
+ }
214
+ else if (result.end != null) {
215
+ return result.end;
216
+ }
217
+ else {
218
+ return !(0, util_1.hasValueOrNotEmpty)(result);
219
+ }
220
+ }
221
+ exports.isItemPageIteratorResultEndResult = isItemPageIteratorResultEndResult;
222
+ function itemPageIteratorShouldLoadNextPage(request, hasNextAndCanLoadMore, prevResult) {
223
+ return hasNextAndCanLoadMore && // Must be able to load more
224
+ Boolean((!(0, loading_1.loadingStateHasError)(prevResult)) || request.retry) && // Must not have any errors
225
+ Boolean(request.page == null || (nextIteratorPageNumber(prevResult) === request.page)); // Must match the page, if provided
226
+ }
227
+ function nextIteratorPageNumber(prevResult) {
228
+ return (0, loading_1.loadingStateHasError)(prevResult) ? prevResult.page : (0, util_1.getNextPageNumber)(prevResult);
229
+ }
230
+ function mapItemPageLoadingStateFromResultPageLoadingState() {
231
+ return (0, operators_1.map)(itemPageLoadingStateFromResultPageLoadingState);
232
+ }
233
+ function itemPageLoadingStateFromResultPageLoadingState(input) {
234
+ return (0, loading_1.mapLoadingStateResults)(input, {
235
+ mapValue: (result) => result.value
236
+ });
237
+ }
238
+ //# sourceMappingURL=iterator.page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iterator.page.js","sourceRoot":"","sources":["../../../../../../packages/rxjs/src/lib/iterator/iterator.page.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export * from './loading.context.state';
2
+ export * from './loading.context.state.page';
3
+ export * from './loading.context.state.model';
4
+ export * from './loading.context.simple';
5
+ export * from './loading.context';
6
+ export * from './loading.context.value';
7
+ export * from './loading.state';
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ (0, tslib_1.__exportStar)(require("./loading.context.state"), exports);
5
+ (0, tslib_1.__exportStar)(require("./loading.context.state.page"), exports);
6
+ (0, tslib_1.__exportStar)(require("./loading.context.state.model"), exports);
7
+ (0, tslib_1.__exportStar)(require("./loading.context.simple"), exports);
8
+ (0, tslib_1.__exportStar)(require("./loading.context"), exports);
9
+ (0, tslib_1.__exportStar)(require("./loading.context.value"), exports);
10
+ (0, tslib_1.__exportStar)(require("./loading.state"), exports);
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/rxjs/src/lib/loading/index.ts"],"names":[],"mappings":";;;AAAA,uEAAwC;AACxC,4EAA6C;AAC7C,6EAA8C;AAC9C,wEAAyC;AACzC,iEAAkC;AAClC,uEAAwC;AACxC,+DAAgC"}
@@ -0,0 +1,8 @@
1
+ import { Observable } from 'rxjs';
2
+ import { LoadingErrorPair } from './loading.state';
3
+ export interface LoadingContextEvent extends LoadingErrorPair {
4
+ loading: boolean;
5
+ }
6
+ export interface LoadingContext {
7
+ readonly stream$: Observable<LoadingContextEvent>;
8
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=loading.context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loading.context.js","sourceRoot":"","sources":["../../../../../../packages/rxjs/src/lib/loading/loading.context.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ import { Observable } from 'rxjs';
2
+ import { LoadingContext, LoadingContextEvent } from './loading.context';
3
+ /**
4
+ * Simple LoadingContext implementation
5
+ */
6
+ export declare class SimpleLoadingContext implements LoadingContext {
7
+ private _subject;
8
+ private _error;
9
+ constructor(loading?: boolean);
10
+ destroy(): void;
11
+ hasError(): boolean;
12
+ clearError(): void;
13
+ get stream$(): Observable<LoadingContextEvent>;
14
+ setSuccess(): void;
15
+ setLoading(loading?: boolean): void;
16
+ setError(error: any, loading?: boolean): void;
17
+ }
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SimpleLoadingContext = void 0;
4
+ const rxjs_1 = require("rxjs");
5
+ /**
6
+ * Simple LoadingContext implementation
7
+ */
8
+ class SimpleLoadingContext {
9
+ constructor(loading = true) {
10
+ this._subject = new rxjs_1.BehaviorSubject({ loading });
11
+ }
12
+ destroy() {
13
+ this._subject.complete();
14
+ }
15
+ hasError() {
16
+ return Boolean(this._error);
17
+ }
18
+ clearError() {
19
+ delete this._error;
20
+ }
21
+ get stream$() {
22
+ return this._subject.asObservable();
23
+ }
24
+ setSuccess() {
25
+ this.setLoading(false);
26
+ }
27
+ setLoading(loading = true) {
28
+ this._subject.next({
29
+ loading
30
+ });
31
+ }
32
+ setError(error, loading = false) {
33
+ this._subject.next({
34
+ loading,
35
+ error
36
+ });
37
+ }
38
+ }
39
+ exports.SimpleLoadingContext = SimpleLoadingContext;
40
+ //# sourceMappingURL=loading.context.simple.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loading.context.simple.js","sourceRoot":"","sources":["../../../../../../packages/rxjs/src/lib/loading/loading.context.simple.ts"],"names":[],"mappings":";;;AAAA,+BAAmD;AAGnD;;GAEG;AACH,MAAa,oBAAoB;IAK/B,YAAY,OAAO,GAAG,IAAI;QACxB,IAAI,CAAC,QAAQ,GAAG,IAAI,sBAAe,CAAsB,EAAE,OAAO,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,OAAO;QACL,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAEM,QAAQ;QACb,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAEM,UAAU;QACf,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;IACtC,CAAC;IAEM,UAAU;QACf,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAEM,UAAU,CAAC,UAAmB,IAAI;QACvC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAEM,QAAQ,CAAC,KAAU,EAAE,UAAmB,KAAK;QAClD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,OAAO;YACP,KAAK;SACN,CAAC,CAAC;IACL,CAAC;CAEF;AA1CD,oDA0CC"}
@@ -0,0 +1,33 @@
1
+ import { Maybe, Destroyable } from '@dereekb/util';
2
+ import { Observable } from 'rxjs';
3
+ import { LoadingContext, LoadingContextEvent } from './loading.context';
4
+ import { LoadingState } from './loading.state';
5
+ export interface AbstractLoadingStateLoadingEvent<T = any> extends LoadingContextEvent {
6
+ model?: Maybe<T>;
7
+ }
8
+ export interface AbstractLoadingEventForLoadingPairConfig<S extends LoadingState = LoadingState> {
9
+ /**
10
+ * The initial observable.
11
+ */
12
+ obs?: Observable<S>;
13
+ /**
14
+ * Whether or not to show loading if a model is defined.
15
+ */
16
+ showLoadingOnNoModel?: boolean;
17
+ }
18
+ /**
19
+ * Abstract LoadingContext implementation using LoadingState.
20
+ */
21
+ export declare abstract class AbstractLoadingStateLoadingContext<T = any, S extends LoadingState<T> = LoadingState<T>, E extends LoadingContextEvent = LoadingContextEvent, C extends AbstractLoadingEventForLoadingPairConfig<S> = AbstractLoadingEventForLoadingPairConfig<S>> implements LoadingContext, Destroyable {
22
+ private _stateSubject$;
23
+ private _config;
24
+ readonly stateSubject$: Observable<Observable<S>>;
25
+ readonly state$: Observable<S>;
26
+ readonly stateObs$: Observable<Maybe<Observable<S>>>;
27
+ readonly stream$: Observable<E>;
28
+ readonly loading$: Observable<boolean>;
29
+ constructor(config?: Observable<S> | C);
30
+ protected abstract loadingEventForLoadingPair(state: S, config: C): E;
31
+ setStateObs(state: Observable<S>): void;
32
+ destroy(): void;
33
+ }
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AbstractLoadingStateLoadingContext = void 0;
4
+ const rxjs_1 = require("@dereekb/rxjs");
5
+ const rxjs_2 = require("rxjs");
6
+ const operators_1 = require("rxjs/operators");
7
+ /**
8
+ * Abstract LoadingContext implementation using LoadingState.
9
+ */
10
+ class AbstractLoadingStateLoadingContext {
11
+ constructor(config) {
12
+ this._stateSubject$ = new rxjs_2.BehaviorSubject(undefined);
13
+ this.stateSubject$ = this._stateSubject$.pipe((0, rxjs_1.filterMaybe)(), (0, operators_1.distinctUntilChanged)(), (0, operators_1.shareReplay)(1));
14
+ this.state$ = this.stateSubject$.pipe((0, operators_1.switchMap)(x => x), (0, operators_1.shareReplay)(1));
15
+ this.stateObs$ = this._stateSubject$.asObservable();
16
+ this.stream$ = this._stateSubject$.pipe((0, operators_1.mergeMap)((obs) => {
17
+ const start = {
18
+ loading: true
19
+ };
20
+ if (obs) {
21
+ return obs.pipe((0, operators_1.startWith)(start), // Always start with loading. Observable may not always update immediately.
22
+ (0, operators_1.map)((x) => this.loadingEventForLoadingPair(x, this._config)));
23
+ }
24
+ else {
25
+ return (0, rxjs_2.of)(start);
26
+ }
27
+ }), (0, operators_1.debounceTime)(0), // Debounce emissions
28
+ (0, operators_1.shareReplay)(1));
29
+ this.loading$ = this.stream$.pipe((0, operators_1.map)(x => x.loading), (0, operators_1.shareReplay)(1));
30
+ if ((0, rxjs_2.isObservable)(config)) {
31
+ this._config = {
32
+ obs: config
33
+ };
34
+ }
35
+ else {
36
+ this._config = config !== null && config !== void 0 ? config : {
37
+ showLoadingOnNoModel: false
38
+ };
39
+ }
40
+ if (this._config.obs) {
41
+ this.setStateObs(this._config.obs);
42
+ }
43
+ }
44
+ setStateObs(state) {
45
+ this._stateSubject$.next(state);
46
+ }
47
+ destroy() {
48
+ this._stateSubject$.complete();
49
+ }
50
+ }
51
+ exports.AbstractLoadingStateLoadingContext = AbstractLoadingStateLoadingContext;
52
+ //# sourceMappingURL=loading.context.state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loading.context.state.js","sourceRoot":"","sources":["../../../../../../packages/rxjs/src/lib/loading/loading.context.state.ts"],"names":[],"mappings":";;;AACA,wCAA4C;AAC5C,+BAAqE;AACrE,8CAAsH;AAoBtH;;GAEG;AACH,MAAsB,kCAAkC;IA8BtD,YAAY,MAA0B;QA5B9B,mBAAc,GAAG,IAAI,sBAAe,CAAuB,SAAS,CAAC,CAAC;QAGrE,kBAAa,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAA,kBAAW,GAAE,EAAE,IAAA,gCAAoB,GAAE,EAAE,IAAA,uBAAW,EAAC,CAAC,CAAC,CAAC,CAAC;QAChG,WAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAA,qBAAS,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAA,uBAAW,EAAC,CAAC,CAAC,CAAC,CAAC;QACpE,cAAS,GAAqC,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;QAEjF,YAAO,GAAkB,IAAI,CAAC,cAAc,CAAC,IAAI,CACxD,IAAA,oBAAQ,EAAC,CAAC,GAAG,EAAE,EAAE;YACf,MAAM,KAAK,GAAG;gBACZ,OAAO,EAAE,IAAI;aACT,CAAC;YAEP,IAAI,GAAG,EAAE;gBACP,OAAO,GAAG,CAAC,IAAI,CACb,IAAA,qBAAS,EAAC,KAAiB,CAAC,EAAE,2EAA2E;gBACzG,IAAA,eAAG,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAC7D,CAAC;aACH;iBAAM;gBACL,OAAO,IAAA,SAAE,EAAC,KAAK,CAAC,CAAC;aAClB;QACH,CAAC,CAAC,EACF,IAAA,wBAAY,EAAC,CAAC,CAAC,EAAG,qBAAqB;QACvC,IAAA,uBAAW,EAAC,CAAC,CAAC,CACf,CAAC;QAEO,aAAQ,GAAwB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAA,eAAG,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,IAAA,uBAAW,EAAC,CAAC,CAAC,CAAC,CAAC;QAG9F,IAAI,IAAA,mBAAY,EAAC,MAAM,CAAC,EAAE;YACxB,IAAI,CAAC,OAAO,GAAG;gBACb,GAAG,EAAE,MAAM;aACP,CAAC;SACR;aAAM;YACL,IAAI,CAAC,OAAO,GAAG,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI;gBACvB,oBAAoB,EAAE,KAAK;aACvB,CAAC;SACR;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YACpB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;SACpC;IACH,CAAC;IAID,WAAW,CAAC,KAAoB;QAC9B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,OAAO;QACL,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;IACjC,CAAC;CAEF;AAxDD,gFAwDC"}
@@ -0,0 +1,18 @@
1
+ import { Maybe } from '@dereekb/util';
2
+ import { Observable } from 'rxjs';
3
+ import { LoadingContextEvent } from './loading.context';
4
+ import { AbstractLoadingEventForLoadingPairConfig, AbstractLoadingStateLoadingContext } from './loading.context.state';
5
+ import { LoadingState } from './loading.state';
6
+ export interface LoadingStateLoadingEvent<T = any> extends LoadingContextEvent {
7
+ model?: Maybe<T>;
8
+ }
9
+ export interface LoadingEventForLoadingPairConfig<S extends LoadingState = LoadingState> extends AbstractLoadingEventForLoadingPairConfig<S> {
10
+ }
11
+ /**
12
+ * LoadingContext implementation for a LoadingState.
13
+ */
14
+ export declare class LoadingStateLoadingContext<T = any, S extends LoadingState<T> = LoadingState<T>> extends AbstractLoadingStateLoadingContext<T, S, LoadingStateLoadingEvent<T>, LoadingEventForLoadingPairConfig<S>> {
15
+ readonly model$: Observable<Maybe<T>>;
16
+ readonly modelAfterLoaded$: Observable<Maybe<T>>;
17
+ protected loadingEventForLoadingPair(pair: S, { showLoadingOnNoModel }?: LoadingEventForLoadingPairConfig): LoadingStateLoadingEvent<T>;
18
+ }