@vindev/particle
Version:
Angular Component Library using Tailwind
73 lines • 9.07 kB
JavaScript
import { Directive, Input, } from '@angular/core';
import { AtmDataSource } from '../utils/datasource';
import { Subject, BehaviorSubject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import * as i0 from "@angular/core";
export function DataSourceMixin(Base = class {
}) {
class DataSource extends Base {
constructor() {
super(...arguments);
this._dataBehavior = new BehaviorSubject([]);
this._onDestroy = new Subject();
this._loadSize = 1;
}
get dataSource() {
return this._dataSource;
}
set dataSource(dataSource) {
if (this._dataSource !== dataSource) {
this._dataBehavior.next([]);
if (this.dataSource) {
this.dataSource.disconnect();
}
if (this._renderChangeSubscription) {
this._renderChangeSubscription.unsubscribe();
this._renderChangeSubscription = null;
}
this._dataSource = dataSource;
this.dataSourceSwitched();
}
}
get data() {
return this._dataBehavior.getValue();
}
get loadSize() {
return this._loadSize;
}
set loadSize(loadSize) {
this._loadSize = loadSize;
}
ngOnDestroy() {
this._onDestroy.next();
this._onDestroy.complete();
if (this.dataSource) {
this.dataSource.disconnect();
}
}
ngAfterContentChecked() {
if (!this.dataSource) {
return;
}
if (!this._renderChangeSubscription) {
const dataStream = this.dataSource.connect();
this._renderChangeSubscription = dataStream
.pipe(takeUntil(this._onDestroy))
.subscribe((data) => {
this._dataBehavior.next(this._dataBehavior.getValue().concat(data));
});
}
}
}
DataSource.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: DataSource, deps: null, target: i0.ɵɵFactoryTarget.Directive });
DataSource.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.4", type: DataSource, inputs: { dataSource: "dataSource", loadSize: "loadSize" }, usesInheritance: true, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: DataSource, decorators: [{
type: Directive
}], propDecorators: { dataSource: [{
type: Input
}], loadSize: [{
type: Input
}] } });
return DataSource;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1zb3VyY2UubWl4aW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BhcnRpY2xlLWxpYi9zcmMvbGliL3NoYXJlZC9taXhpbnMvZGF0YS1zb3VyY2UubWl4aW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEdBR04sTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBZ0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBRTNDLE1BQU0sVUFBVSxlQUFlLENBQzdCLE9BQVU7Q0FBZTtJQUV6QixNQUNlLFVBQ2IsU0FBUSxJQUFJO1FBRmQ7O1lBTUUsa0JBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBTSxFQUFFLENBQUMsQ0FBQztZQUM3QyxlQUFVLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztZQW9DakMsY0FBUyxHQUFHLENBQUMsQ0FBQztTQWtDZjtRQXBFQyxJQUNJLFVBQVU7WUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDMUIsQ0FBQztRQUNELElBQUksVUFBVSxDQUFDLFVBQTRCO1lBQ3pDLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxVQUFVLEVBQUU7Z0JBQ25DLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUU1QixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7b0JBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUM7aUJBQzlCO2dCQUVELElBQUksSUFBSSxDQUFDLHlCQUF5QixFQUFFO29CQUNsQyxJQUFJLENBQUMseUJBQXlCLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQzdDLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUM7aUJBQ3ZDO2dCQUVELElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO2dCQUM5QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzthQUMzQjtRQUNILENBQUM7UUFFRCxJQUFJLElBQUk7WUFDTixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDdkMsQ0FBQztRQUVELElBQ0ksUUFBUTtZQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUN4QixDQUFDO1FBQ0QsSUFBSSxRQUFRLENBQUMsUUFBZ0I7WUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7UUFDNUIsQ0FBQztRQUlELFdBQVc7WUFDVCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7WUFFM0IsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNuQixJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDO2FBQzlCO1FBQ0gsQ0FBQztRQUVELHFCQUFxQjtZQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDcEIsT0FBTzthQUNSO1lBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRTtnQkFDbkMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFFN0MsSUFBSSxDQUFDLHlCQUF5QixHQUFHLFVBQVU7cUJBQ3hDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO3FCQUNoQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDbEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDdEUsQ0FBQyxDQUFDLENBQUM7YUFDTjtRQUNILENBQUM7OzJHQW5FWSxVQUFVOytGQUFWLFVBQVU7K0ZBQVYsVUFBVTtzQkFEeEIsU0FBUztrQ0FVSixVQUFVOzBCQURiLEtBQUs7b0JBMkJGLFFBQVE7MEJBRFgsS0FBSzs7SUEyQ1IsT0FBTyxVQUFVLENBQUM7Q0FDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIERpcmVjdGl2ZSxcclxuICBJbnB1dCxcclxuICBBZnRlckNvbnRlbnRDaGVja2VkLFxyXG4gIE9uRGVzdHJveSxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29uc3RydWN0b3IgfSBmcm9tICcuLyc7XHJcbmltcG9ydCB7IEF0bURhdGFTb3VyY2UgfSBmcm9tICcuLi91dGlscy9kYXRhc291cmNlJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBTdWJqZWN0LCBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIERhdGFTb3VyY2VNaXhpbjxUIGV4dGVuZHMgQ29uc3RydWN0b3I8e30+LCBJPihcclxuICBCYXNlOiBUID0gY2xhc3Mge30gYXMgYW55XHJcbikge1xyXG4gIEBEaXJlY3RpdmUoKVxyXG4gIGFic3RyYWN0IGNsYXNzIERhdGFTb3VyY2VcclxuICAgIGV4dGVuZHMgQmFzZVxyXG4gICAgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRDaGVja2VkLCBPbkRlc3Ryb3kge1xyXG4gICAgX2RhdGFTb3VyY2UhOiBBdG1EYXRhU291cmNlPEk+O1xyXG4gICAgX3JlbmRlckNoYW5nZVN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbiB8IG51bGw7XHJcbiAgICBfZGF0YUJlaGF2aW9yID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJW10+KFtdKTtcclxuICAgIF9vbkRlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgZGF0YVNvdXJjZSgpOiBBdG1EYXRhU291cmNlPEk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2U7XHJcbiAgICB9XHJcbiAgICBzZXQgZGF0YVNvdXJjZShkYXRhU291cmNlOiBBdG1EYXRhU291cmNlPEk+KSB7XHJcbiAgICAgIGlmICh0aGlzLl9kYXRhU291cmNlICE9PSBkYXRhU291cmNlKSB7XHJcbiAgICAgICAgdGhpcy5fZGF0YUJlaGF2aW9yLm5leHQoW10pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5kYXRhU291cmNlKSB7XHJcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGlzY29ubmVjdCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3JlbmRlckNoYW5nZVN1YnNjcmlwdGlvbikge1xyXG4gICAgICAgICAgdGhpcy5fcmVuZGVyQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICB0aGlzLl9yZW5kZXJDaGFuZ2VTdWJzY3JpcHRpb24gPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7XHJcbiAgICAgICAgdGhpcy5kYXRhU291cmNlU3dpdGNoZWQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBkYXRhKCk6IElbXSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9kYXRhQmVoYXZpb3IuZ2V0VmFsdWUoKTtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IGxvYWRTaXplKCk6IG51bWJlciB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9sb2FkU2l6ZTtcclxuICAgIH1cclxuICAgIHNldCBsb2FkU2l6ZShsb2FkU2l6ZTogbnVtYmVyKSB7XHJcbiAgICAgIHRoaXMuX2xvYWRTaXplID0gbG9hZFNpemU7XHJcbiAgICB9XHJcblxyXG4gICAgX2xvYWRTaXplID0gMTtcclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgdGhpcy5fb25EZXN0cm95Lm5leHQoKTtcclxuICAgICAgdGhpcy5fb25EZXN0cm95LmNvbXBsZXRlKCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5kYXRhU291cmNlKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmRpc2Nvbm5lY3QoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpOiB2b2lkIHtcclxuICAgICAgaWYgKCF0aGlzLmRhdGFTb3VyY2UpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghdGhpcy5fcmVuZGVyQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgICAgY29uc3QgZGF0YVN0cmVhbSA9IHRoaXMuZGF0YVNvdXJjZS5jb25uZWN0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuX3JlbmRlckNoYW5nZVN1YnNjcmlwdGlvbiA9IGRhdGFTdHJlYW1cclxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kpKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9kYXRhQmVoYXZpb3IubmV4dCh0aGlzLl9kYXRhQmVoYXZpb3IuZ2V0VmFsdWUoKS5jb25jYXQoZGF0YSkpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIER1cmluZyBhIGRhdGEgc291cmNlIHN3aXRjaCB0aGVyZSBtYXkgYmUgYWRkaXRpb25hbFxyXG4gICAgICogb3BlcmF0aW9ucyB0aGF0IG1heSBuZWVkIHRvIGJlIHBlcmZvcm1lZC5cclxuICAgICAqIFRoaXMgYWJzdHJhY3QgbWV0aG9kIGlzIGNhbGxlZCBwcm9jZWVkaW5nIGFsbCBEU1xyXG4gICAgICogc3dpdGNoIGxvZ2ljLlxyXG4gICAgICovXHJcbiAgICBhYnN0cmFjdCBkYXRhU291cmNlU3dpdGNoZWQoKTogdm9pZDtcclxuICB9XHJcbiAgcmV0dXJuIERhdGFTb3VyY2U7XHJcbn1cclxuIl19