Skip to content

Commit 136f920

Browse files
committed
feat: add getLoading pipe
1 parent f645332 commit 136f920

File tree

5 files changed

+96
-2
lines changed

5 files changed

+96
-2
lines changed

docs/docs/pipes/_category_.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"label": "Pipes",
3+
"position": 5
4+
}

docs/docs/pipes/get-loading.md

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
---
2+
sidebar_position: 1
3+
---
4+
5+
# getLoading
6+
7+
Returns a boolean observable which will emit a new value once the state of the given properties of the store
8+
changes.
9+
10+
## API
11+
12+
```ts
13+
import { Observable } from 'rxjs';
14+
import { LoadingStore, LoadingStoreState } from 'ngx-reactive-loading';
15+
import { Pipe, PipeTransform } from "@angular/core";
16+
17+
@Pipe({ name: 'getLoading' })
18+
export interface GetLoading implements PipeTransform {
19+
transform<T extends PropertyKey>(
20+
value: LoadingStore<T[]>,
21+
properties: T[] | T
22+
): Observable<boolean>;
23+
24+
transform<T extends PropertyKey>(
25+
value: LoadingRegistry<T>,
26+
properties: T | T[]
27+
): Observable<boolean>;
28+
29+
transform<T extends PropertyKey>(
30+
value: LoadingStore<T[]> | LoadingRegistry<T>,
31+
properties: T | T[]
32+
): Observable<boolean>;
33+
}
34+
```
35+
36+
- `value` - The loading store or loading registry
37+
- `properties` - The properties of the given store or registry that will be listened
38+
39+
## Example
40+
41+
```ts
42+
import { Component, OnInit } from '@angular/core';
43+
import { LoadingRegistry } from 'ngx-reactive-loading';
44+
45+
@Component({
46+
selector: 'app-example',
47+
template: `
48+
<ng-container *ngIf="loadingRegistry | getLoading: 'key' | async">
49+
Key is loading...
50+
</ng-container>
51+
`
52+
})
53+
54+
export class ExampleComponent implements OnInit {
55+
constructor(readonly loadingRegistry: LoadingRegistry) {
56+
}
57+
}
58+
```
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { Pipe, PipeTransform } from '@angular/core';
2+
import { Observable } from 'rxjs';
3+
import { isLoadingStore, LoadingStore } from '../core/create-loading-store';
4+
import { LoadingRegistry, PropertyTuple } from '../model';
5+
import { someLoading } from '../utils';
6+
7+
@Pipe({
8+
name: 'getLoading',
9+
})
10+
export class GetLoadingPipe implements PipeTransform {
11+
transform<T extends PropertyKey>(
12+
value: LoadingStore<PropertyTuple<T>>,
13+
properties: PropertyTuple<T> | T
14+
): Observable<boolean>;
15+
transform<T extends PropertyKey>(
16+
value: LoadingRegistry<T>,
17+
properties: T | PropertyTuple<T>
18+
): Observable<boolean>;
19+
transform<T extends PropertyKey>(
20+
value: LoadingStore<PropertyTuple<T>> | LoadingRegistry<T>,
21+
properties: T | PropertyTuple<T>
22+
): Observable<boolean> {
23+
const keys = Array.isArray(properties) ? properties : [properties];
24+
if (isLoadingStore(value)) {
25+
return someLoading(keys.map(key => value[key as T].$));
26+
} else {
27+
return value.someLoading(keys);
28+
}
29+
}
30+
}

projects/ngx-reactive-loading/src/lib/reactive-loading.module.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import {
2525
import { LoggerService } from './services/logger.service';
2626
import { LoadingDirective } from './components/loading.directive';
2727
import { LoadingStore } from './core';
28+
import { GetLoadingPipe } from './pipes/get-loading.pipe';
2829

2930
/**
3031
* @internal
@@ -39,8 +40,8 @@ export class RootReactiveLoadingModule {
3940
}
4041

4142
@NgModule({
42-
declarations: [LoadingDirective],
43-
exports: [LoadingDirective],
43+
declarations: [LoadingDirective, GetLoadingPipe],
44+
exports: [LoadingDirective, GetLoadingPipe],
4445
})
4546
export class ReactiveLoadingModule {
4647
static forRoot<T extends PropertyKey>(

projects/ngx-reactive-loading/src/public-api.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ export { LoadingService } from './lib/services';
1414
export { ReactiveLoadingModule } from './lib/reactive-loading.module';
1515
export { SOME_LOADING, LOADING_REGISTRY } from './lib/providers/token';
1616
export { LoadingDirective } from './lib/components/loading.directive';
17+
export { GetLoadingPipe } from './lib/pipes/get-loading.pipe';
1718

1819
// Http Module
1920

0 commit comments

Comments
 (0)