@rxap/data-source
Version:
Provides a set of classes and decorators for creating and managing data sources in Angular applications, including base classes, static data sources, observable data sources, and method data sources. It also includes a component for displaying data source
1 lines • 37.7 kB
Source Map (JSON)
{"version":3,"file":"rxap-data-source-directive.mjs","sources":["../../../../../packages/angular/data-source/directive/src/lib/data-source-collection.directive.ts","../../../../../packages/angular/data-source/directive/src/lib/data-source.directive.ts","../../../../../packages/angular/data-source/directive/src/index.ts","../../../../../packages/angular/data-source/directive/src/rxap-data-source-directive.ts"],"sourcesContent":["import type { Injector } from '@angular/core';\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Directive,\n DoCheck,\n EmbeddedViewRef,\n EventEmitter,\n Inject,\n INJECTOR,\n Input,\n isDevMode,\n IterableChangeRecord,\n IterableChanges,\n IterableDiffer,\n IterableDiffers,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n TemplateRef,\n TrackByFunction,\n ViewContainerRef,\n} from '@angular/core';\nimport {\n BaseDataSource,\n BaseDataSourceViewer,\n DataSourceLoader,\n} from '@rxap/data-source';\nimport { IdOrInstanceOrToken } from '@rxap/definition';\nimport {\n Observable,\n Subscription,\n} from 'rxjs';\nimport {\n filter,\n take,\n tap,\n} from 'rxjs/operators';\n\nexport class DataSourceCollectionTemplateContext<Data> {\n constructor(\n public $implicit: Data,\n public connection$: Observable<Data[]>,\n public index: number,\n public count: number,\n ) {\n }\n\n get first(): boolean {\n return this.index === 0;\n }\n\n get last(): boolean {\n return this.index === this.count - 1;\n }\n\n get even(): boolean {\n return this.index % 2 === 0;\n }\n\n get odd(): boolean {\n return !this.even;\n }\n}\n\nfunction getTypeName(type: any): string {\n return type['name'] || typeof type;\n}\n\nclass RecordViewTuple<T> {\n constructor(\n public record: any,\n public view: EmbeddedViewRef<DataSourceCollectionTemplateContext<T>>,\n ) {\n }\n}\n\nexport interface DataSourceCollectionErrorTemplateContext {\n $implicit: unknown | null;\n refresh: () => void;\n}\n\n@Directive({\n selector: '[rxapDataSourceCollection]',\n standalone: true,\n})\nexport class DataSourceCollectionDirective<Data = any>\n implements OnChanges, OnDestroy, AfterViewInit, DoCheck {\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input({\n required: true,\n alias: 'rxapDataSourceCollectionFrom',\n })\n public dataSourceOrIdOrToken!: IdOrInstanceOrToken<BaseDataSource<Data[]>>;\n @Input('rxapDataSourceCollectionViewer')\n public viewer: BaseDataSourceViewer = { id: '[rxapDataSourceCollection]' };\n public dataSource: BaseDataSource<Data[]> | null = null;\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('rxapDataSourceCollectionEmpty')\n public emptyTemplate?: TemplateRef<void>;\n @Input('rxapDataSourceCollectionErrorTemplate')\n public errorTemplate?: TemplateRef<DataSourceCollectionErrorTemplateContext>;\n @Output()\n public loaded = new EventEmitter();\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-native\n public error = new EventEmitter();\n public connection$: Observable<Data[]> | null = null;\n protected readonly subscription = new Subscription();\n protected embeddedErrorViewRef?: EmbeddedViewRef<DataSourceCollectionErrorTemplateContext>;\n private _differ: IterableDiffer<Data> | null = null;\n private _trackByFn!: TrackByFunction<Data>;\n private _dirty = true;\n /**\n * Idecates that the data source returned a empty collection\n *\n * true - is empty\n * false - is NOT empty\n * null - unknown\n *\n * @private\n */\n private _empty: boolean | null = null;\n /**\n * Holds the empty template view ref.\n *\n * Is used to determine if a empty template is added to the\n * view. And used to destruct the empty template if the data source\n * changes from empty to not empty.\n *\n * @private\n */\n private _emptyTemplateViewRef: EmbeddedViewRef<void> | null = null;\n private _dataSourceLoadingSubscription: Subscription | null = null;\n\n constructor(\n @Inject(DataSourceLoader)\n private readonly dataSourceLoader: DataSourceLoader,\n @Inject(TemplateRef)\n private readonly template: TemplateRef<\n DataSourceCollectionTemplateContext<Data>\n >,\n @Inject(ViewContainerRef)\n private readonly viewContainerRef: ViewContainerRef,\n @Inject(INJECTOR)\n private readonly injector: Injector,\n @Inject(IterableDiffers)\n private readonly differs: IterableDiffers,\n @Inject(ChangeDetectorRef)\n private readonly cdr: ChangeDetectorRef,\n @Inject(NgZone)\n private readonly zone: NgZone,\n ) {\n }\n\n /**\n * A function that defines how to track changes for items in the iterable.\n *\n * When items are added, moved, or removed in the iterable,\n * the directive must re-render the appropriate DOM nodes.\n * To minimize churn in the DOM, only nodes that have changed\n * are re-rendered.\n *\n * By default, the change detector assumes that\n * the object instance identifies the node in the iterable.\n * When this function is supplied, the directive uses\n * the result of calling this function to identify the item node,\n * rather than the identity of the object itself.\n *\n * The function receives two inputs,\n * the iteration index and the node object ID.\n */\n @Input()\n set rxapDataSourceCollectionTrackBy(fn: TrackByFunction<Data>) {\n if (isDevMode() && fn != null && typeof fn !== 'function') {\n // TODO(vicb): use a log service once there is a public one available\n if (<any>console && <any>console.warn) {\n console.warn(\n `trackBy must be a function, but received ${ JSON.stringify(fn) }. ` +\n `See https://angular.io/api/common/NgForOf#change-propagation for more information.`,\n );\n }\n }\n this._trackByFn = fn;\n }\n\n get ngForTrackBy(): TrackByFunction<Data> {\n return this._trackByFn;\n }\n\n /**\n * Holds the data that should be displayed\n * @private\n */\n private _data: Data[] | null = null;\n\n protected set data(data: Data[]) {\n this._data = data;\n this._dirty = true;\n }\n\n /**\n * Asserts the correct type of the context for the template that `NgForOf` will render.\n *\n * The presence of this method is a signal to the Ivy template type-check compiler that the\n * `NgForOf` structural directive renders its template with a specific context type.\n */\n static ngTemplateContextGuard<T>(\n dir: DataSourceCollectionDirective<T>,\n ctx: any,\n ): ctx is DataSourceCollectionTemplateContext<T> {\n return true;\n }\n\n // TODO : handel that case: a new data source instance is provided and an open connection to the old data source exists.\n public ngOnChanges(changes: SimpleChanges) {\n const dataSourceOrIdOrTokenChange = changes['dataSourceOrIdOrToken'];\n if (dataSourceOrIdOrTokenChange) {\n this.dataSource = this.loadDataSource();\n // Dont connect to the data source on the first change.\n // Else the parent/sibling components are not initialized\n // and the parameters from the parent/sibling components can not\n // be used in the connect logic.\n // Example: The PaginationDataSource required the pageSize, but the pageSize\n // in the MatPaginator will be set after the ngOnChanges logic is called.\n // So the initial pageSize is undefined.\n if (!dataSourceOrIdOrTokenChange.firstChange) {\n this.connect();\n }\n }\n }\n\n public ngAfterViewInit() {\n this.connect();\n }\n\n public ngOnDestroy(): void {\n this._differ = null;\n this._empty = null;\n this.viewContainerRef.clear();\n this.dataSource?.disconnect(this.viewer);\n this.subscription.unsubscribe();\n this._dataSourceLoadingSubscription?.unsubscribe();\n }\n\n /**\n * Applies the changes when needed.\n */\n public ngDoCheck(): void {\n if (this._empty === true) {\n this.viewContainerRef.clear();\n this._differ = null;\n\n // attaches the empty template if the data source is empty\n if (this.emptyTemplate) {\n this._emptyTemplateViewRef = this.viewContainerRef.createEmbeddedView(\n this.emptyTemplate,\n );\n }\n } else if (this._empty === false) {\n // detach and destroy the empty template if the data source is not\n // empty any more\n if (this._emptyTemplateViewRef) {\n this._emptyTemplateViewRef.detach();\n this._emptyTemplateViewRef.destroy();\n this._emptyTemplateViewRef = null;\n }\n\n if (this._data) {\n this._dirty = false;\n // React on ngForOf changes only once all inputs have been initialized\n const value = this._data;\n if (!this._differ && value) {\n try {\n this._differ = this.differs.find(value).create(this.ngForTrackBy);\n } catch {\n throw new Error(\n `Cannot find a differ supporting object '${ value }' of type '${ getTypeName(\n value,\n ) }'. NgFor only supports binding to Iterables such as Arrays.`,\n );\n }\n }\n }\n if (this._differ) {\n const changes = this._differ.diff(this._data);\n if (changes) {\n this.applyChanges(changes);\n }\n }\n }\n }\n\n public embedErrorTemplate(error: unknown | null) {\n if (!this.errorTemplate) {\n if (isDevMode()) {\n console.log('Skip error template embedding. ErrorTemplate is not defined');\n }\n return;\n }\n const context = {\n $implicit: error,\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n refresh: this.dataSource?.refresh.bind(this.dataSource) ?? (() => {\n }),\n };\n this.embeddedErrorViewRef?.destroy();\n this.viewContainerRef.clear();\n this.embeddedErrorViewRef = this.viewContainerRef.createEmbeddedView(\n this.errorTemplate,\n context,\n );\n this.cdr.detectChanges();\n }\n\n protected connect() {\n if (this.dataSource) {\n this.connection$ = this.dataSource.connect(this.viewer);\n this.zone.onStable\n .pipe(\n take(1),\n tap(() => {\n this.zone.run(() => {\n this.subscription.add(\n this.connection$!.pipe(\n tap({\n next: (response) => {\n this._empty = response.length === 0;\n this._data = response;\n this.cdr.detectChanges();\n },\n error: (error) => {\n this.error.emit(error);\n console.error(\n `Connection failure in ${ this.dataSource!.constructor.name }: ${ error.message }`,\n error,\n );\n this.embedErrorTemplate(error);\n },\n }),\n ).subscribe(),\n );\n });\n }),\n )\n .subscribe();\n } else {\n throw new Error(\n 'Can not connect to the data source. The data source is not loaded!',\n );\n }\n }\n\n protected applyChanges(changes: IterableChanges<Data>) {\n const insertTuples: RecordViewTuple<Data>[] = [];\n changes.forEachOperation(\n (\n item: IterableChangeRecord<any>,\n adjustedPreviousIndex: number | null,\n currentIndex: number | null,\n ) => {\n if (item.previousIndex == null) {\n // NgForOf is never \"null\" or \"undefined\" here because the differ detected\n // that a new item needs to be inserted from the iterable. This implies that\n // there is an iterable value for \"_ngForOf\".\n const view = this.viewContainerRef.createEmbeddedView(\n this.template,\n new DataSourceCollectionTemplateContext<Data>(\n null!,\n this.connection$!,\n -1,\n -1,\n ),\n currentIndex === null ? undefined : currentIndex,\n );\n const tuple = new RecordViewTuple<Data>(item, view);\n insertTuples.push(tuple);\n } else if (currentIndex == null) {\n this.viewContainerRef.remove(\n adjustedPreviousIndex === null ? undefined : adjustedPreviousIndex,\n );\n } else if (adjustedPreviousIndex !== null) {\n const view = this.viewContainerRef.get(adjustedPreviousIndex)!;\n this.viewContainerRef.move(view, currentIndex);\n const tuple = new RecordViewTuple(\n item,\n <EmbeddedViewRef<DataSourceCollectionTemplateContext<Data>>>view,\n );\n insertTuples.push(tuple);\n }\n },\n );\n\n for (let i = 0; i < insertTuples.length; i++) {\n this.perViewChange(insertTuples[i].view, insertTuples[i].record);\n }\n\n for (let i = 0,\n ilen = this.viewContainerRef.length; i < ilen; i++) {\n const viewRef = <\n EmbeddedViewRef<DataSourceCollectionTemplateContext<Data>>\n >this.viewContainerRef.get(i);\n viewRef.context.index = i;\n viewRef.context.count = ilen;\n viewRef.context.connection$ = this.connection$!;\n }\n\n changes.forEachIdentityChange((record: any) => {\n const viewRef = <\n EmbeddedViewRef<DataSourceCollectionTemplateContext<Data>>\n >this.viewContainerRef.get(record.currentIndex);\n viewRef.context.$implicit = record.item;\n });\n }\n\n protected loadDataSource(): BaseDataSource<Data[]> | null {\n let dataSource: BaseDataSource | null = null;\n if (typeof this.dataSourceOrIdOrToken === 'string') {\n dataSource = this.dataSourceLoader.load<BaseDataSource<Data[]>>(\n this.dataSourceOrIdOrToken,\n undefined,\n this.injector,\n );\n } else if (this.dataSourceOrIdOrToken instanceof BaseDataSource) {\n dataSource = this.dataSourceOrIdOrToken;\n } else if (this.dataSourceOrIdOrToken !== null) {\n dataSource = this.injector.get<BaseDataSource<Data[]>>(\n this.dataSourceOrIdOrToken,\n );\n }\n this._dataSourceLoadingSubscription?.unsubscribe();\n this._dataSourceLoadingSubscription =\n dataSource?.loading$.pipe(filter(Boolean)).subscribe(this.loaded) ?? null;\n return dataSource;\n }\n\n private perViewChange(\n view: EmbeddedViewRef<DataSourceCollectionTemplateContext<Data>>,\n record: IterableChangeRecord<any>,\n ) {\n view.context.$implicit = record.item;\n }\n\n}\n\n\n","import type { Injector } from '@angular/core';\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Directive,\n EmbeddedViewRef,\n EventEmitter,\n Inject,\n INJECTOR,\n Input,\n isDevMode,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport {\n BaseDataSource,\n BaseDataSourceViewer,\n DataSourceLoader,\n} from '@rxap/data-source';\nimport { IdOrInstanceOrToken } from '@rxap/definition';\nimport { noop } from '@rxap/utilities';\nimport {\n Observable,\n Subscription,\n} from 'rxjs';\nimport {\n distinctUntilChanged,\n filter,\n take,\n tap,\n} from 'rxjs/operators';\n\nexport interface DataSourceTemplateContext<Data> {\n $implicit: Data;\n connection$: Observable<Data>;\n}\n\nexport interface DataSourceErrorTemplateContext {\n $implicit: unknown | null;\n refresh: () => void;\n}\n\n@Directive({\n selector: '[rxapDataSource]',\n exportAs: 'rxapDataSource',\n standalone: true,\n})\nexport class DataSourceDirective<Data = any>\n implements OnDestroy, OnChanges, AfterViewInit {\n\n /**\n * Asserts the correct type of the context for the template that `NgForOf` will render.\n *\n * The presence of this method is a signal to the Ivy template type-check compiler that the\n * `NgForOf` structural directive renders its template with a specific context type.\n */\n static ngTemplateContextGuard<T>(\n dir: DataSourceDirective<T>,\n ctx: any,\n ): ctx is DataSourceTemplateContext<T> {\n return true;\n }\n\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input({\n required: true,\n alias: 'rxapDataSourceFrom',\n })\n public dataSourceOrIdOrToken!: IdOrInstanceOrToken<BaseDataSource<Data>>;\n @Input('rxapDataSourceViewer')\n public viewer!: BaseDataSourceViewer;\n @Input('rxapDataSourceErrorTemplate')\n public errorTemplate?: TemplateRef<DataSourceErrorTemplateContext>;\n @Output()\n public embedded = new EventEmitter<Data>();\n @Output()\n public loaded = new EventEmitter();\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-native\n public error = new EventEmitter();\n public dataSource: BaseDataSource<Data> | null = null;\n public connection$!: Observable<Data>;\n @Input('rxapDataSourceTrackBy')\n public trackBy?: (data: Data) => any;\n /**\n * @deprecated removed\n * @protected\n */\n protected readonly subscription = new Subscription();\n protected embeddedViewRef: EmbeddedViewRef<DataSourceTemplateContext<Data>> | null = null;\n protected embeddedErrorViewRef: EmbeddedViewRef<DataSourceErrorTemplateContext> | null = null;\n private _dataSourceLoadingSubscription: Subscription | null = null;\n private _dataSourceConnectionSubscription: Subscription | null = null;\n\n constructor(\n private readonly dataSourceLoader: DataSourceLoader,\n private readonly template: TemplateRef<DataSourceTemplateContext<Data>>,\n private readonly viewContainerRef: ViewContainerRef,\n @Inject(INJECTOR)\n private readonly injector: Injector,\n private readonly cdr: ChangeDetectorRef,\n private readonly zone: NgZone,\n ) {\n this.viewer = this;\n }\n\n public ngOnChanges(changes: SimpleChanges) {\n const dataSourceOrIdOrTokenChange = changes['dataSourceOrIdOrToken'];\n if (dataSourceOrIdOrTokenChange) {\n this.dataSource = this.loadDataSource();\n // Dont connect to the data source on the first change.\n // Else the parent/sibling components are not initialized\n // and the parameters from the parent/sibling components can not\n // be used in the connect logic.\n // Example: The PaginationDataSource required the pageSize, but the pageSize\n // in the MatPaginator will be set after the ngOnChanges logic is called.\n // So the initial pageSize is undefined.\n if (!dataSourceOrIdOrTokenChange.firstChange) {\n this.connect();\n }\n }\n }\n\n public ngAfterViewInit() {\n this.connect();\n }\n\n public embedErrorTemplate(error: unknown | null) {\n if (!this.errorTemplate) {\n if (isDevMode()) {\n console.log('Skip error template embedding. ErrorTemplate is not defined');\n }\n return;\n }\n const context = {\n $implicit: error,\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n refresh: this.dataSource?.refresh.bind(this.dataSource) ?? noop,\n };\n\n this.embeddedViewRef?.destroy();\n this.embeddedViewRef = null;\n\n this.embeddedErrorViewRef?.destroy();\n this.embeddedErrorViewRef = this.viewContainerRef.createEmbeddedView(\n this.errorTemplate,\n context,\n );\n this.cdr.detectChanges();\n }\n\n public embedTemplate(response: any) {\n this.embeddedErrorViewRef?.destroy();\n this.embeddedErrorViewRef = null;\n const context = {\n $implicit: response,\n connection$: this.connection$,\n };\n if (this.embeddedViewRef && !this.hasChanged(this.embeddedViewRef.context.$implicit, response)) {\n this.embeddedViewRef.context = context;\n } else {\n this.embeddedViewRef?.destroy();\n this.embeddedViewRef = this.viewContainerRef.createEmbeddedView(\n this.template,\n context,\n );\n }\n this.embedded.emit(response);\n this.cdr.detectChanges();\n }\n\n public ngOnDestroy(): void {\n this.dataSource?.disconnect(this.viewer);\n this.subscription.unsubscribe();\n this._dataSourceConnectionSubscription?.unsubscribe();\n this._dataSourceLoadingSubscription?.unsubscribe();\n }\n\n protected loadDataSource(): BaseDataSource<Data> | null {\n let dataSource: BaseDataSource | null = null;\n if (typeof this.dataSourceOrIdOrToken === 'string') {\n dataSource = this.dataSourceLoader.load<BaseDataSource<Data>>(\n this.dataSourceOrIdOrToken,\n undefined,\n this.injector,\n );\n } else if (this.dataSourceOrIdOrToken instanceof BaseDataSource) {\n dataSource = this.dataSourceOrIdOrToken;\n } else if (this.dataSourceOrIdOrToken !== null) {\n dataSource = this.injector.get<BaseDataSource<Data>>(\n this.dataSourceOrIdOrToken,\n );\n }\n this._dataSourceLoadingSubscription?.unsubscribe();\n this._dataSourceLoadingSubscription =\n dataSource?.loading$.pipe(filter(Boolean)).subscribe(this.loaded) ?? null;\n return dataSource;\n }\n\n protected connect() {\n if (this.dataSource) {\n this.dataSource.hasError$.pipe(\n distinctUntilChanged(),\n tap(hasError => {\n if (hasError) {\n this.embedErrorTemplate(null);\n } else {\n this.embeddedErrorViewRef?.destroy();\n this.embeddedErrorViewRef = null;\n }\n }),\n ).subscribe();\n this.connection$ = this.dataSource.connect(this.viewer);\n this.zone.onStable\n .pipe(\n take(1),\n tap(() => {\n this.zone.run(() => {\n this._dataSourceConnectionSubscription?.unsubscribe();\n this._dataSourceConnectionSubscription = this.connection$\n .pipe(\n tap({\n next: (response) => {\n this.embedTemplate(response);\n },\n error: (error) => {\n this.error.emit(error);\n console.error(\n `Connection failure in ${ this.dataSource!.constructor.name }: ${ error.message }`,\n error,\n );\n this.embedErrorTemplate(error);\n },\n }),\n )\n .subscribe();\n });\n }),\n )\n .subscribe();\n }\n }\n\n private hasChanged(last: Data, current: Data): boolean {\n const lastKey = this.trackBy ? this.trackBy(last) : last;\n const currentKey = this.trackBy ? this.trackBy(current) : current;\n return lastKey !== currentKey;\n }\n}\n\n\n","// region \nexport * from './lib/data-source-collection.directive';\nexport * from './lib/data-source.directive';\n// endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}