UNPKG

@schoolbelle/common

Version:

Demo library to showcase Angular packaging format

213 lines (204 loc) 16.6 kB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('rxjs'), require('lodash')) : typeof define === 'function' && define.amd ? define('@schoolbelle/common/services/infinite-scroll-list', ['exports', '@angular/core', 'rxjs', 'lodash'], factory) : (factory((global.schoolbelle = global.schoolbelle || {}, global.schoolbelle.common = global.schoolbelle.common || {}, global.schoolbelle.common.services = global.schoolbelle.common.services || {}, global.schoolbelle.common.services['infinite-scroll-list'] = {}),global.ng.core,global.rxjs,null)); }(this, (function (exports,core,rxjs,lodash) { 'use strict'; /** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ var InfiniteScrollListConfigDefault = (function () { function InfiniteScrollListConfigDefault() { this.debounce = 400; this.max_size_per_query = 10; } return InfiniteScrollListConfigDefault; }()); var /** @type {?} */ INFINITE_SCROLL_LIST_CONFIG_TOKEN = new core.InjectionToken('InfiniteScrollListConfigInterface'); /** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ var InfiniteScrollListModule = (function () { function InfiniteScrollListModule() { } /** * @param {?=} options * @return {?} */ InfiniteScrollListModule.forRoot = /** * @param {?=} options * @return {?} */ function (options) { if (options === void 0) { options = {}; } return { ngModule: InfiniteScrollListModule, providers: [] }; }; InfiniteScrollListModule.decorators = [ { type: core.NgModule, args: [{},] }, ]; return InfiniteScrollListModule; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ var InfiniteScrollListService = (function () { function InfiniteScrollListService() { /** * \@property disabled * you can mark the list as disable for example when there is no more to fetch. */ this.disabled = false; /** * \@property token * when promise or observable are pushed, the resolve or emitted value of them can become unwanted. * in this case, specify token when pushing them and change the token to something else * so infinite list will defy the return value. */ this.token = ''; this._list = []; this.listChangeEvent = new rxjs.BehaviorSubject(this._list); } Object.defineProperty(InfiniteScrollListService.prototype, "list", { get: /** * @return {?} */ function () { return this.listChangeEvent.asObservable(); }, enumerable: true, configurable: true }); /** * @param {?} li * @param {?=} token * @return {?} */ InfiniteScrollListService.prototype.push = /** * @param {?} li * @param {?=} token * @return {?} */ function (li, token) { var _this = this; if (token === void 0) { token = ''; } this.token = token; if (li instanceof Promise) { li.then(function (resolvedLi) { if (token !== _this.token) return; if (Array.isArray(resolvedLi)) resolvedLi.forEach(function (each) { return _this._list.push(each); }); else _this._list.push(resolvedLi); // this.listChangeEvent.next(this._list); }); return li; } else if (li instanceof rxjs.Observable) { var /** @type {?} */ subscription_1 = li.subscribe(function (emittedLi) { if (token !== _this.token) return; if (Array.isArray(emittedLi)) emittedLi.forEach(function (each) { return _this._list.push(each); }); else _this._list.push(emittedLi); // this.listChangeEvent.next(this._list); // this.listChangeEvent.next(this._list); subscription_1.unsubscribe(); }); return li.toPromise(); } else if (Array.isArray(li)) { li.forEach(function (each) { return _this._list.push(each); }); // this.listChangeEvent.next(this._list); return Promise.resolve(li); } else { this._list.push(li); // this.listChangeEvent.next(this._list); return Promise.resolve(li); } }; /** * @return {?} */ InfiniteScrollListService.prototype.empty = /** * @return {?} */ function () { this._list.splice(0, this._list.length); }; /** * @param {?} key * @return {?} */ InfiniteScrollListService.prototype.getMaxId = /** * @param {?} key * @return {?} */ function (key) { var /** @type {?} */ item = lodash.maxBy(this._list, key); return item ? item[key] : undefined; }; /** * @param {?} key * @return {?} */ InfiniteScrollListService.prototype.getMinId = /** * @param {?} key * @return {?} */ function (key) { var /** @type {?} */ item = lodash.minBy(this._list, key); return item ? item[key] : undefined; }; /** * @param {?} condition * @return {?} */ InfiniteScrollListService.prototype.find = /** * @param {?} condition * @return {?} */ function (condition) { return lodash.find(this.list, condition); }; Object.defineProperty(InfiniteScrollListService.prototype, "size", { get: /** * @return {?} */ function () { return this._list.length; }, enumerable: true, configurable: true }); InfiniteScrollListService.decorators = [ { type: core.Injectable }, ]; /** @nocollapse */ InfiniteScrollListService.ctorParameters = function () { return []; }; return InfiniteScrollListService; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ /** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ exports.InfiniteScrollListConfigDefault = InfiniteScrollListConfigDefault; exports.INFINITE_SCROLL_LIST_CONFIG_TOKEN = INFINITE_SCROLL_LIST_CONFIG_TOKEN; exports.InfiniteScrollListModule = InfiniteScrollListModule; exports.InfiniteScrollListService = InfiniteScrollListService; Object.defineProperty(exports, '__esModule', { value: true }); }))); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nob29sYmVsbGUtY29tbW9uLXNlcnZpY2VzLWluZmluaXRlLXNjcm9sbC1saXN0LnVtZC5qcy5tYXAiLCJzb3VyY2VzIjpbIm5nOi8vQHNjaG9vbGJlbGxlL2NvbW1vbi9zZXJ2aWNlcy9pbmZpbml0ZS1zY3JvbGwtbGlzdC9pbmZpbml0ZS1zY3JvbGwtbGlzdC5jb25maWcudHMiLCJuZzovL0BzY2hvb2xiZWxsZS9jb21tb24vc2VydmljZXMvaW5maW5pdGUtc2Nyb2xsLWxpc3QvaW5maW5pdGUtc2Nyb2xsLWxpc3QubW9kdWxlLnRzIiwibmc6Ly9Ac2Nob29sYmVsbGUvY29tbW9uL3NlcnZpY2VzL2luZmluaXRlLXNjcm9sbC1saXN0L2luZmluaXRlLXNjcm9sbC1saXN0LnNlcnZpY2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBJbmZpbml0ZVNjcm9sbExpc3RDb25maWdJbnRlcmZhY2Uge1xuICBkZWJvdW5jZTogbnVtYmVyO1xuICBtYXhfc2l6ZV9wZXJfcXVlcnk6IG51bWJlcjtcbn1cbmV4cG9ydCBjbGFzcyBJbmZpbml0ZVNjcm9sbExpc3RDb25maWdEZWZhdWx0XG4gIGltcGxlbWVudHMgSW5maW5pdGVTY3JvbGxMaXN0Q29uZmlnSW50ZXJmYWNlIHtcbiAgZGVib3VuY2UgPSA0MDA7XG4gIG1heF9zaXplX3Blcl9xdWVyeSA9IDEwO1xufVxuZXhwb3J0IGNvbnN0IElORklOSVRFX1NDUk9MTF9MSVNUX0NPTkZJR19UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxcbiAgSW5maW5pdGVTY3JvbGxMaXN0Q29uZmlnSW50ZXJmYWNlXG4+KCdJbmZpbml0ZVNjcm9sbExpc3RDb25maWdJbnRlcmZhY2UnKTtcbiIsImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBJTkZJTklURV9TQ1JPTExfTElTVF9DT05GSUdfVE9LRU4sXG4gIEluZmluaXRlU2Nyb2xsTGlzdENvbmZpZ0RlZmF1bHQsXG4gIEluZmluaXRlU2Nyb2xsTGlzdENvbmZpZ0ludGVyZmFjZVxufSBmcm9tICcuL2luZmluaXRlLXNjcm9sbC1saXN0LmNvbmZpZyc7XG5cbkBOZ01vZHVsZSh7fSlcbmV4cG9ydCBjbGFzcyBJbmZpbml0ZVNjcm9sbExpc3RNb2R1bGUge1xuICBzdGF0aWMgZm9yUm9vdChvcHRpb25zOiBQYXJ0aWFsPEluZmluaXRlU2Nyb2xsTGlzdENvbmZpZ0ludGVyZmFjZT4gPSB7fSkge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogSW5maW5pdGVTY3JvbGxMaXN0TW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIC8vIHtcbiAgICAgICAgLy8gICBwcm92aWRlcjpJTkZJTklURV9TQ1JPTExfTElTVF9DT05GSUdfVE9LRU4sXG4gICAgICAgIC8vICAgdXNlOk9iamVjdC5hc3NpZ24oe30sIG5ldyBJbmZpbml0ZVNjcm9sbExpc3RDb25maWdEZWZhdWx0KCksIG9wdGlvbnMpLFxuICAgICAgICAvLyB9XG4gICAgICBdXG4gICAgfTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuLy8gaW1wb3J0IHsgSU5GSU5JVEVfU0NST0xMX0xJU1RfQ09ORklHX1RPS0VOLCBJbmZpbml0ZVNjcm9sbExpc3RDb25maWdEZWZhdWx0IH0gZnJvbSAnLi9pbmZpbml0ZS1zY3JvbGwtbGlzdC5jb25maWcnO1xuaW1wb3J0IHsgIEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmluZCwgbWF4QnksIG1pbkJ5IH0gZnJvbSAnbG9kYXNoJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEluZmluaXRlU2Nyb2xsTGlzdFNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBkaXNhYmxlZFxuICAgKiB5b3UgY2FuIG1hcmsgdGhlIGxpc3QgYXMgZGlzYWJsZSBmb3IgZXhhbXBsZSB3aGVuIHRoZXJlIGlzIG5vIG1vcmUgdG8gZmV0Y2guXG4gICAqL1xuICBwdWJsaWMgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSB0b2tlblxuICAgKiB3aGVuIHByb21pc2Ugb3Igb2JzZXJ2YWJsZSBhcmUgcHVzaGVkLCB0aGUgcmVzb2x2ZSBvciBlbWl0dGVkIHZhbHVlIG9mIHRoZW0gY2FuIGJlY29tZSB1bndhbnRlZC5cbiAgICogaW4gdGhpcyBjYXNlLCBzcGVjaWZ5IHRva2VuIHdoZW4gcHVzaGluZyB0aGVtIGFuZCBjaGFuZ2UgdGhlIHRva2VuIHRvIHNvbWV0aGluZyBlbHNlXG4gICAqIHNvIGluZmluaXRlIGxpc3Qgd2lsbCBkZWZ5IHRoZSByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgdG9rZW4gPSAnJztcbiAgcHVibGljIF9saXN0OiBhbnlbXSA9IFtdO1xuICBwcml2YXRlIGxpc3RDaGFuZ2VFdmVudCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KHRoaXMuX2xpc3QpO1xuICBnZXQgbGlzdCgpOiBPYnNlcnZhYmxlPGFueVtdPiB7XG4gICAgcmV0dXJuIHRoaXMubGlzdENoYW5nZUV2ZW50LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG4gIHB1YmxpYyBwdXNoKFxuICAgIGxpOiBQcm9taXNlPGFueVtdIHwgYW55PiB8IE9ic2VydmFibGU8YW55W10gfCBhbnk+IHwgYW55W10gfCBhbnksXG4gICAgdG9rZW4gPSAnJ1xuICApOiBQcm9taXNlPGFueVtdIHwgYW55PiB7XG4gICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgIGlmIChsaSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgIGxpLnRoZW4oKHJlc29sdmVkTGk6IGFueVtdIHwgYW55KSA9PiB7XG4gICAgICAgIGlmICh0b2tlbiAhPT0gdGhpcy50b2tlbikgcmV0dXJuO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXNvbHZlZExpKSlcbiAgICAgICAgICByZXNvbHZlZExpLmZvckVhY2goZWFjaCA9PiB0aGlzLl9saXN0LnB1c2goZWFjaCkpO1xuICAgICAgICBlbHNlIHRoaXMuX2xpc3QucHVzaChyZXNvbHZlZExpKTtcbiAgICAgICAgLy8gdGhpcy5saXN0Q2hhbmdlRXZlbnQubmV4dCh0aGlzLl9saXN0KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGxpO1xuICAgIH0gZWxzZSBpZiAobGkgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICBsZXQgc3Vic2NyaXB0aW9uID0gbGkuc3Vic2NyaWJlKChlbWl0dGVkTGk6IGFueVtdIHwgYW55KSA9PiB7XG4gICAgICAgIGlmICh0b2tlbiAhPT0gdGhpcy50b2tlbikgcmV0dXJuO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbWl0dGVkTGkpKVxuICAgICAgICAgIGVtaXR0ZWRMaS5mb3JFYWNoKGVhY2ggPT4gdGhpcy5fbGlzdC5wdXNoKGVhY2gpKTtcbiAgICAgICAgZWxzZSB0aGlzLl9saXN0LnB1c2goZW1pdHRlZExpKTtcbiAgICAgICAgLy8gdGhpcy5saXN0Q2hhbmdlRXZlbnQubmV4dCh0aGlzLl9saXN0KTtcbiAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBsaS50b1Byb21pc2UoKTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkobGkpKSB7XG4gICAgICBsaS5mb3JFYWNoKGVhY2ggPT4gdGhpcy5fbGlzdC5wdXNoKGVhY2gpKTtcbiAgICAgIC8vIHRoaXMubGlzdENoYW5nZUV2ZW50Lm5leHQodGhpcy5fbGlzdCk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGxpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGlzdC5wdXNoKGxpKTtcbiAgICAgIC8vIHRoaXMubGlzdENoYW5nZUV2ZW50Lm5leHQodGhpcy5fbGlzdCk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGxpKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGVtcHR5KCkge1xuICAgIHRoaXMuX2xpc3Quc3BsaWNlKDAsIHRoaXMuX2xpc3QubGVuZ3RoKTtcbiAgfVxuICBwdWJsaWMgZ2V0TWF4SWQoa2V5OiBzdHJpbmcpIHtcbiAgICBsZXQgaXRlbSA9IG1heEJ5KHRoaXMuX2xpc3QsIGtleSk7XG4gICAgcmV0dXJuIGl0ZW0gPyBpdGVtW2tleV0gOiB1bmRlZmluZWQ7XG4gIH1cbiAgcHVibGljIGdldE1pbklkKGtleTogc3RyaW5nKSB7XG4gICAgbGV0IGl0ZW0gPSBtaW5CeSh0aGlzLl9saXN0LCBrZXkpO1xuICAgIHJldHVybiBpdGVtID8gaXRlbVtrZXldIDogdW5kZWZpbmVkO1xuICB9XG4gIHB1YmxpYyBmaW5kKGNvbmRpdGlvbjogYW55KSB7XG4gICAgcmV0dXJuIGZpbmQodGhpcy5saXN0LCBjb25kaXRpb24pO1xuICB9XG4gIGdldCBzaXplKCkge1xuICAgIHJldHVybiB0aGlzLl9saXN0Lmxlbmd0aDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIkluamVjdGlvblRva2VuIiwiTmdNb2R1bGUiLCJCZWhhdmlvclN1YmplY3QiLCJPYnNlcnZhYmxlIiwibWF4QnkiLCJtaW5CeSIsImZpbmQiLCJJbmplY3RhYmxlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEsUUFNQTs7NEJBRWEsR0FBRztzQ0FDTyxFQUFFOzs4Q0FUekI7UUFVQyxDQUFBO0FBSkQseUJBS2EsaUNBQWlDLEdBQUcsSUFBSUEsbUJBQWMsQ0FFakUsbUNBQW1DLENBQUM7Ozs7OztBQ2J0Qzs7Ozs7OztRQVNTLGdDQUFPOzs7O1lBQWQsVUFBZSxPQUF3RDtnQkFBeEQsd0JBQUE7b0JBQUEsWUFBd0Q7O2dCQUNyRSxPQUFPO29CQUNMLFFBQVEsRUFBRSx3QkFBd0I7b0JBQ2xDLFNBQVMsRUFBRSxFQUtWO2lC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