UNPKG

ngx-remotedata

Version:

RemoteData: Slaying a UI Antipattern with Angular

1 lines 24.5 kB
{"version":3,"file":"ngx-remotedata.mjs","sources":["../../../projects/ngx-remotedata/src/lib/remote-data.ts","../../../projects/ngx-remotedata/src/lib/pipes.ts","../../../projects/ngx-remotedata/src/lib/lib.module.ts","../../../projects/ngx-remotedata/src/public-api.ts","../../../projects/ngx-remotedata/src/ngx-remotedata.ts"],"sourcesContent":["import { Observable } from 'rxjs';\n\ntype DefaultError = string;\n\nexport interface NotAsked {\n readonly tag: 'NotAsked';\n}\n\nexport interface InProgress<T> {\n readonly tag: 'InProgress';\n readonly value: T | undefined;\n}\n\nexport interface Failure<E, T> {\n readonly tag: 'Failure';\n readonly value: T | undefined;\n error: E;\n}\n\nexport interface Success<T> {\n readonly tag: 'Success';\n readonly value: T;\n}\n\n// ----------------------------\n//\n// Constructor functions\n//\n// ----------------------------\n\nexport const notAsked = <T, E = DefaultError>(): RemoteData<T, E> => {\n return { tag: 'NotAsked' };\n};\n\nexport const inProgress = <T, E = DefaultError>(\n value?: T\n): RemoteData<T, E> => {\n return { tag: 'InProgress', value };\n};\n\nexport const failure = <T, E = DefaultError>(\n error: E,\n value?: T\n): RemoteData<T, E> => {\n return { tag: 'Failure', error, value };\n};\n\nexport const success = <T, E = DefaultError>(value: T): RemoteData<T, E> => {\n return { tag: 'Success', value };\n};\n\n// ----------------------------\n//\n// Guards\n//\n// ----------------------------\n\nexport const isNotAsked = <T, E>(value: unknown): value is NotAsked => {\n return (\n value !== null &&\n value !== undefined &&\n (value as object).hasOwnProperty('tag') &&\n (value as RemoteData<T, E>).tag === 'NotAsked'\n );\n};\n\nexport const isInProgress = <T, E>(value: unknown): value is InProgress<T> => {\n return (\n value !== null &&\n value !== undefined &&\n (value as object).hasOwnProperty('tag') &&\n (value as RemoteData<T, E>).tag === 'InProgress'\n );\n};\n\nexport const isFailure = <T, E>(value: unknown): value is Failure<E, T> => {\n return (\n value !== null &&\n value !== undefined &&\n (value as object).hasOwnProperty('tag') &&\n (value as RemoteData<T, E>).tag === 'Failure'\n );\n};\n\nexport const isSuccess = <T, E>(value: unknown): value is Success<T> => {\n return (\n value !== null &&\n value !== undefined &&\n (value as object).hasOwnProperty('tag') &&\n (value as RemoteData<T, E>).tag === 'Success'\n );\n};\n\nexport const isRemoteData = <T, E = DefaultError>(\n value: unknown\n): value is RemoteData<T, E> => {\n const hasRemoteDataTag = (tag: RemoteData<any, any>['tag']) =>\n tag === 'NotAsked' ||\n tag === 'InProgress' ||\n tag === 'Success' ||\n tag === 'Failure';\n return (\n value !== null &&\n value !== undefined &&\n (value as object).hasOwnProperty('tag') &&\n hasRemoteDataTag((value as RemoteData<T, E>).tag)\n );\n};\n\n// ----------------------------\n//\n// Folds\n//\n// ----------------------------\n\nexport const fold = <T, E>(\n onNotAsked: () => T,\n onInProgress: (value: T | undefined) => T,\n onFailure: (error: E, value: T | undefined) => T,\n onSuccess: (value: T) => T,\n rd: RemoteData<T, E>\n): T => {\n switch (rd.tag) {\n case 'NotAsked':\n return onNotAsked();\n case 'InProgress':\n return onInProgress(rd.value);\n case 'Failure':\n return onFailure(rd.error, rd.value);\n case 'Success':\n return onSuccess(rd.value);\n }\n};\n\nexport const getOrElse = <T, E>(rd: RemoteData<T, E>, defaultValue: T): T => {\n switch (rd.tag) {\n case 'Success':\n return rd.value;\n default:\n return defaultValue;\n }\n};\n\n// ----------------------------\n//\n// Transformations\n//\n// ----------------------------\n\nexport const map = <A, B, E>(\n fn: (a: A) => B,\n rd: RemoteData<A, E>\n): RemoteData<B, E> =>\n isSuccess(rd) ? success(fn(rd.value)) : (rd as RemoteData<B, E>);\n\nexport const mapFailure = <A, E, F>(\n fn: (e: E) => F,\n rd: RemoteData<A, E>\n): RemoteData<A, F> =>\n isFailure(rd) ? failure(fn(rd.error)) : (rd as RemoteData<A, F>);\n\nexport const chain = <A, B, E>(\n fn: (a: A) => RemoteData<B, E>,\n rd: RemoteData<A, E>\n): RemoteData<B, E> =>\n isSuccess(rd) ? fn(rd.value) : (rd as RemoteData<B, E>);\n\n// ----------------------------\n//\n// RxJs specific\n//\n// ----------------------------\n\n/**\n * Emits only when source Observable is a Success\n * @returns Success<T>\n */\nexport function filterSuccess() {\n return <T, E>(source: Observable<RemoteData<T, E>>): Observable<Success<T>> =>\n new Observable(subscriber => {\n source.subscribe({\n next(value) {\n if (isSuccess(value)) {\n subscriber.next(value);\n }\n }\n });\n });\n}\n\n/**\n * Emits only when source Observable is a Failure\n * @returns Failure<E, T>\n */\nexport function filterFailure() {\n return <T, E>(\n source: Observable<RemoteData<T, E>>\n ): Observable<Failure<E, T>> =>\n new Observable(subscriber => {\n source.subscribe({\n next(value) {\n if (isFailure(value)) {\n subscriber.next(value);\n }\n }\n });\n });\n}\n\n// ----------------------------\n//\n// RemoteData type\n//\n// ----------------------------\n\nexport type RemoteData<T, E = string> =\n | NotAsked\n | InProgress<T>\n | Failure<E, T>\n | Success<T>;\n","import {\n Pipe,\n PipeTransform,\n OnDestroy,\n ChangeDetectorRef\n} from '@angular/core';\nimport {\n RemoteData,\n isRemoteData,\n isNotAsked,\n isInProgress,\n isFailure,\n isSuccess\n} from './remote-data';\nimport { Observable, combineLatest, Subscription } from 'rxjs';\n\nconst assertIsRemoteData = (rd: unknown) => {\n if (!isRemoteData(rd)) {\n throw new Error(\n `Value \"${rd}\" is not a RemoteData<T> instance. Did you forget to use the async pipe? i.e: state$ | async | isInProgress`\n );\n }\n};\n\n@Pipe({ name: 'isNotAsked' })\nexport class IsNotAskedPipe implements PipeTransform {\n transform<T, E>(rd: undefined | null | RemoteData<T, E>): boolean {\n if (rd === null || rd === undefined) {\n return false;\n }\n assertIsRemoteData(rd);\n return isNotAsked(rd);\n }\n}\n\n@Pipe({ name: 'isInProgress' })\nexport class IsInProgressPipe implements PipeTransform {\n transform<T, E>(rd: undefined | null | RemoteData<T, E>): boolean {\n if (rd === null || rd === undefined) {\n return false;\n }\n assertIsRemoteData(rd);\n return isInProgress(rd);\n }\n}\n\n@Pipe({ name: 'anyIsInProgress', pure: false })\nexport class AnyIsInProgressPipe implements PipeTransform, OnDestroy {\n private _latestValue = false;\n private _subscription: Subscription | null = null;\n private _rds$: Observable<RemoteData<any, any>>[] = [];\n\n constructor(private cd: ChangeDetectorRef) {}\n\n transform<T, E>(\n rds$: undefined | null | Observable<RemoteData<T, E>>[]\n ): boolean {\n if (rds$ === null || rds$ === undefined) {\n return false;\n }\n if (this._rds$ === rds$) {\n return this._latestValue;\n } else if (this._subscription) {\n this.dispose();\n }\n this._rds$ = rds$;\n this._subscription = combineLatest(rds$).subscribe(rds => {\n this._latestValue = rds.some(isInProgress);\n this.cd.markForCheck();\n });\n return this._latestValue;\n }\n\n ngOnDestroy(): void {\n this.dispose();\n }\n\n dispose(): void {\n if (this._subscription) {\n this._subscription.unsubscribe();\n }\n this._rds$ = [];\n this._latestValue = false;\n }\n}\n\n@Pipe({ name: 'anyIsNotAsked', pure: false })\nexport class AnyIsNotAskedPipe implements PipeTransform, OnDestroy {\n private _latestValue = false;\n private _subscription: Subscription | null = null;\n private _rds$: Observable<RemoteData<any, any>>[] = [];\n\n constructor(private cd: ChangeDetectorRef) {}\n\n transform<T, E>(\n rds$: undefined | null | Observable<RemoteData<T, E>>[]\n ): boolean {\n if (rds$ === null || rds$ === undefined) {\n return false;\n }\n if (this._rds$ === rds$) {\n return this._latestValue;\n } else if (this._subscription) {\n this.dispose();\n }\n this._rds$ = rds$;\n this._subscription = combineLatest(rds$).subscribe(rds => {\n this._latestValue = rds.some(isNotAsked);\n this.cd.markForCheck();\n });\n return this._latestValue;\n }\n\n ngOnDestroy(): void {\n this.dispose();\n }\n\n dispose(): void {\n if (this._subscription) {\n this._subscription.unsubscribe();\n }\n this._rds$ = [];\n this._latestValue = false;\n }\n}\n\n@Pipe({ name: 'isFailure' })\nexport class IsFailurePipe implements PipeTransform {\n transform<T, E>(rd: undefined | null | RemoteData<T, E>): boolean {\n if (rd === null || rd === undefined) {\n return false;\n }\n assertIsRemoteData(rd);\n return isFailure(rd);\n }\n}\n\n@Pipe({ name: 'isSuccess' })\nexport class IsSuccessPipe implements PipeTransform {\n transform<T, E>(rd: undefined | null | RemoteData<T, E>): boolean {\n if (rd === null || rd === undefined) {\n return false;\n }\n assertIsRemoteData(rd);\n return isSuccess(rd);\n }\n}\n\n@Pipe({ name: 'hasValue' })\nexport class HasValuePipe implements PipeTransform {\n transform<T, E>(rd: undefined | null | RemoteData<T, E>): boolean {\n if (isSuccess(rd)) {\n return true;\n } else if (\n (isInProgress(rd) || isFailure(rd)) &&\n rd.value !== null &&\n rd.value !== undefined\n ) {\n return true;\n } else if (rd === undefined || rd === null) {\n return false;\n }\n assertIsRemoteData(rd);\n return false;\n }\n}\n\n@Pipe({ name: 'successValue' })\nexport class GetSuccessPipe implements PipeTransform {\n transform<T, E>(\n rd: undefined | null | RemoteData<T, E>,\n defaultValue?: T | undefined\n ): T | undefined {\n if (isSuccess(rd)) {\n return rd.value;\n } else if (rd === undefined || rd === null) {\n return defaultValue;\n }\n assertIsRemoteData(rd);\n return defaultValue;\n }\n}\n\n@Pipe({ name: 'inProgressValue' })\nexport class GetInProgressPipe implements PipeTransform {\n transform<T, E>(\n rd: undefined | null | RemoteData<T, E>,\n defaultValue?: T | undefined\n ): T | undefined {\n if (isInProgress(rd)) {\n return rd.value;\n } else if (rd === undefined || rd === null) {\n return defaultValue;\n }\n assertIsRemoteData(rd);\n return defaultValue;\n }\n}\n\n@Pipe({ name: 'remoteDataValue' })\nexport class GetRemoteDataValuePipe implements PipeTransform {\n transform<T, E>(rd: undefined | null | RemoteData<T, E>): T | E | undefined {\n if (rd === undefined || rd === null) {\n return undefined;\n }\n assertIsRemoteData(rd);\n return isInProgress(rd) || isSuccess(rd) || isFailure(rd)\n ? rd.value\n : undefined;\n }\n}\n\n@Pipe({ name: 'failureError' })\nexport class GetFailureErrorPipe implements PipeTransform {\n transform<T, E>(rd: undefined | null | RemoteData<T, E>): E | undefined {\n if (rd === undefined || rd === null) {\n return undefined;\n }\n assertIsRemoteData(rd);\n return isFailure(rd) ? rd.error : undefined;\n }\n}\n\n@Pipe({ name: 'failureValue' })\nexport class GetFailureValuePipe implements PipeTransform {\n transform<T, E>(rd: undefined | null | RemoteData<T, E>): T | undefined {\n if (rd === undefined || rd === null) {\n return undefined;\n }\n assertIsRemoteData(rd);\n return isFailure(rd) ? rd.value : undefined;\n }\n}\n","import { NgModule } from '@angular/core';\nimport {\n IsNotAskedPipe,\n IsInProgressPipe,\n IsFailurePipe,\n IsSuccessPipe,\n HasValuePipe,\n GetSuccessPipe,\n GetFailureErrorPipe,\n GetFailureValuePipe,\n GetInProgressPipe,\n GetRemoteDataValuePipe,\n AnyIsInProgressPipe,\n AnyIsNotAskedPipe\n} from './pipes';\n\nconst declarations = [\n IsNotAskedPipe,\n IsInProgressPipe,\n IsFailurePipe,\n IsSuccessPipe,\n HasValuePipe,\n GetSuccessPipe,\n GetFailureErrorPipe,\n GetFailureValuePipe,\n GetInProgressPipe,\n GetRemoteDataValuePipe,\n AnyIsInProgressPipe,\n AnyIsNotAskedPipe\n];\n\n@NgModule({\n declarations,\n imports: [],\n exports: declarations\n})\nexport class RemoteDataModule {}\n","/*\n * Public API Surface of lib\n */\n\nexport * from './lib/remote-data';\nexport * from './lib/pipes';\nexport * from './lib/lib.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}