src/lib/pipe.data-source.ts
Properties |
|
Methods |
|
Accessors |
constructor(dataSource: BaseDataSource<Source>, operation: OperatorFunction
|
||||||||||||
|
Defined in src/lib/pipe.data-source.ts:54
|
||||||||||||
|
Parameters :
|
| Protected _connect | ||||||
_connect(viewer: BaseDataSourceViewer)
|
||||||
|
Inherited from
BaseDataSource
|
||||||
|
Defined in
BaseDataSource:124
|
||||||
|
Parameters :
Returns :
| Observable
|
| Public refresh | ||||||||||
refresh(parent: boolean)
|
||||||||||
|
Inherited from
BaseDataSource
|
||||||||||
|
Defined in
BaseDataSource:105
|
||||||||||
|
Parameters :
Returns :
any
|
| Public reset |
reset()
|
|
Inherited from
BaseDataSource
|
|
Defined in
BaseDataSource:113
|
|
Returns :
any
|
| Public setOperations | |||||||||
setOperations(operation: OperatorFunction
|
|||||||||
|
Defined in src/lib/pipe.data-source.ts:83
|
|||||||||
|
Parameters :
Returns :
void
|
| Public toJSON |
toJSON()
|
|
Inherited from
BaseDataSource
|
|
Defined in
BaseDataSource:117
|
|
Returns :
object
|
| Protected viewerToOperations | ||||||
viewerToOperations(viewer: BaseDataSourceViewer)
|
||||||
|
Defined in src/lib/pipe.data-source.ts:140
|
||||||
|
Parameters :
Returns :
Array<OperatorFunction<any, any>>
|
| Protected _disconnect | ||||||
_disconnect(viewerId: DataSourceViewerId)
|
||||||
|
Inherited from
BaseDataSource
|
||||||
|
Defined in
BaseDataSource:308
|
||||||
|
Parameters :
Returns :
void
|
| Public attach | ||||||
attach(viewerId: DataSourceViewerId)
|
||||||
|
Inherited from
BaseDataSource
|
||||||
|
Defined in
BaseDataSource:210
|
||||||
|
Parameters :
Returns :
Observable<Data>
|
| Public connect | ||||||
connect(viewerOrString: Viewer | DataSourceViewerId)
|
||||||
|
Inherited from
BaseDataSource
|
||||||
|
Defined in
BaseDataSource:124
|
||||||
|
Parameters :
Returns :
Observable<Data>
|
| Public derive | ||||||||||||
derive(id: string, metadata: Partial<BaseDataSourceMetadata>)
|
||||||||||||
|
Inherited from
BaseDataSource
|
||||||||||||
|
Defined in
BaseDataSource:270
|
||||||||||||
|
Parameters :
Returns :
BaseDataSource<any>
|
| Public disconnect | ||||||
disconnect(viewerOrId: Viewer | DataSourceViewerId)
|
||||||
|
Inherited from
BaseDataSource
|
||||||
|
Defined in
BaseDataSource:225
|
||||||
|
Parameters :
Returns :
void
|
| Protected genericRetryFunction |
genericRetryFunction(error: any, retryCount: number)
|
|
Inherited from
BaseDataSource
|
|
Defined in
BaseDataSource:311
|
|
Returns :
Observable<any>
|
| Public getViewerId | ||||||
getViewerId(viewer: Viewer)
|
||||||
|
Inherited from
BaseDataSource
|
||||||
|
Defined in
BaseDataSource:114
|
||||||
|
Parameters :
Returns :
string
|
| Protected handelError | ||||||
handelError(error: any)
|
||||||
|
Inherited from
BaseDataSource
|
||||||
|
Defined in
BaseDataSource:317
|
||||||
|
Parameters :
Returns :
void
|
| Public isConnected | ||||||
isConnected(viewerOrId: Viewer | DataSourceViewerId)
|
||||||
|
Inherited from
BaseDataSource
|
||||||
|
Defined in
BaseDataSource:217
|
||||||
|
Parameters :
Returns :
boolean
|
| Public retry |
retry()
|
|
Inherited from
BaseDataSource
|
|
Defined in
BaseDataSource:293
|
|
Returns :
any
|
| Public Async toPromise | ||||||
toPromise(viewer: Viewer)
|
||||||
|
Inherited from
BaseDataSource
|
||||||
|
Defined in
BaseDataSource:264
|
||||||
|
Creates a connection to tha data source and converts the Observable into a promise and then disconnects the viewer
Parameters :
Returns :
Promise<Data>
|
| Public Readonly dataSource |
Type : BaseDataSource<Source>
|
Decorators :
@Inject(RXAP_DATA_SOURCE)
|
|
Defined in src/lib/pipe.data-source.ts:57
|
| Protected _connectedViewer |
Default value : new Map<DataSourceViewerId, Observable<Data>>()
|
|
Inherited from
BaseDataSource
|
|
Defined in
BaseDataSource:78
|
| Protected _connectedViewerTeardown |
Default value : new Map<
DataSourceViewerId,
TeardownLogic
>()
|
|
Inherited from
BaseDataSource
|
|
Defined in
BaseDataSource:79
|
| Protected Optional _data |
Type : Data
|
|
Inherited from
BaseDataSource
|
|
Defined in
BaseDataSource:104
|
| Protected _data$ |
Type : Observable<Data>
|
Default value : EMPTY
|
|
Inherited from
BaseDataSource
|
|
Defined in
BaseDataSource:83
|
| Protected _lastRefreshed |
Type : Date | null
|
Default value : null
|
|
Inherited from
BaseDataSource
|
|
Defined in
BaseDataSource:77
|
| Protected _retry$ |
Default value : new Subject<void>()
|
|
Inherited from
BaseDataSource
|
|
Defined in
BaseDataSource:90
|
| Protected _viewerIds |
Default value : new Map<Viewer, string>()
|
|
Inherited from
BaseDataSource
|
|
Defined in
BaseDataSource:89
|
|
a map of viewer to view id. Allows to create a view id from the viewer object reference |
| Public Readonly change$ |
Default value : new Subject<Data>()
|
|
Inherited from
BaseDataSource
|
|
Defined in
BaseDataSource:67
|
| Public Readonly error$ |
Default value : new ReplaySubject<Error>(1)
|
|
Inherited from
BaseDataSource
|
|
Defined in
BaseDataSource:73
|
| Public Optional hasError |
Type : Signal<boolean>
|
|
Inherited from
BaseDataSource
|
|
Defined in
BaseDataSource:94
|
| Public Readonly hasError$ |
Default value : new ToggleSubject()
|
|
Inherited from
BaseDataSource
|
|
Defined in
BaseDataSource:72
|
| Public Optional loading |
Type : Signal<boolean>
|
|
Inherited from
BaseDataSource
|
|
Defined in
BaseDataSource:92
|
| Public loading$ |
Type : Observable<boolean>
|
Default value : EMPTY
|
|
Inherited from
BaseDataSource
|
|
Defined in
BaseDataSource:71
|
|
Indicates weather the data source is currently loading new data |
| operations |
getoperations()
|
|
Defined in src/lib/pipe.data-source.ts:79
|
import {
Inject,
Injectable,
OnDestroy,
Optional,
} from '@angular/core';
import { Constructor } from '@rxap/utilities';
import {
Observable,
OperatorFunction,
Subject,
TeardownLogic,
} from 'rxjs';
import {
map,
startWith,
switchMap,
} from 'rxjs/operators';
import {
BaseDataSource,
BaseDataSourceMetadata,
BaseDataSourceViewer,
RxapDataSource,
} from './base.data-source';
import { RxapDataSourceError } from './error';
import {
RXAP_DATA_SOURCE,
RXAP_PIPE_DATA_SOURCE_OPERATOR,
} from './tokens';
export interface PipeDataSourceMetadata extends BaseDataSourceMetadata {
/**
* If true the parent data source will be refreshed when the pipe data source is refreshed
* @default false
*/
refreshParent?: boolean;
}
export function RxapPipeDataSource(
metadata: PipeDataSourceMetadata,
className = 'PipeDataSource',
packageName = '@rxap/data-source',
) {
return function (target: Constructor<PipeDataSource>) {
RxapDataSource(metadata, className, packageName)(target);
};
}
@Injectable()
export class PipeDataSource<Source = any, Target = Source>
extends BaseDataSource<Target>
implements OnDestroy {
private readonly _refresh = new Subject<void>();
constructor(
@Inject(RXAP_DATA_SOURCE) public readonly dataSource: BaseDataSource<Source>,
@Optional() @Inject(RXAP_PIPE_DATA_SOURCE_OPERATOR) operation: OperatorFunction<Source, any> | null = null,
...operations: Array<OperatorFunction<any, any> | PipeDataSourceMetadata>
) {
super(dataSource.metadata);
this.loading$ = this.dataSource.loading$;
if (operation) {
this.setOperations(
operation,
...operations.filter(op => typeof op === 'function') as Array<OperatorFunction<any, any>>,
);
if (operations.some(op => typeof op !== 'function')) {
this.metadata = {
...this.metadata,
...operations.find(op => typeof op !== 'function'),
};
}
}
}
private _operations: Array<OperatorFunction<any, any>> = [];
protected get operations(): Array<OperatorFunction<any, any>> {
return this._operations;
}
public setOperations(
operation: OperatorFunction<Source, any>,
...operations: Array<OperatorFunction<any, any>>
): void {
if (this._initialised) {
throw new RxapDataSourceError(
'Can not set operations after the data source is initialised',
'',
'PipeDataSource',
);
}
this._operations = [ operation, ...operations ];
}
public override ngOnDestroy() {
super.ngOnDestroy();
this.dataSource.disconnect(this.metadata);
}
/**
* @param parent true - call the refresh method of the parent data source
*/
public override refresh(parent: boolean = this.metadata['refreshParent'] ?? false): any {
if (parent) {
this.dataSource.refresh();
} else {
this._refresh.next();
}
}
public override reset(): any {
return this.dataSource.reset();
}
public override toJSON(): object {
return {
...super.toJSON(),
dataSource: this.dataSource,
};
}
protected override _connect(viewer: BaseDataSourceViewer): [ Observable<Target>, TeardownLogic ] | Observable<Target> {
this.init();
return [
this.dataSource.connect(viewer).pipe(
switchMap(data => this._refresh.pipe(
startWith(null),
map(() => data),
)),
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
...this.viewerToOperations(viewer),
),
() => this.dataSource.disconnect(viewer),
];
}
protected viewerToOperations(viewer: BaseDataSourceViewer): Array<OperatorFunction<any, any>> {
return this.operations;
}
}
export function pipeDataSource<Source, Target>(
dataSource: BaseDataSource<Source>,
operation: OperatorFunction<Source, any>,
...operations: Array<OperatorFunction<any, any> | PipeDataSourceMetadata>
): PipeDataSource<Source, Target> {
return new PipeDataSource<Source, Target>(dataSource, operation, ...operations);
}