|
|
|
@ -6,7 +6,7 @@ |
|
|
|
*/ |
|
|
|
|
|
|
|
import { Injectable } from '@angular/core'; |
|
|
|
import { Observable } from 'rxjs'; |
|
|
|
import { combineLatest, Observable } from 'rxjs'; |
|
|
|
import { distinctUntilChanged, map, tap } from 'rxjs/operators'; |
|
|
|
|
|
|
|
import { |
|
|
|
@ -21,6 +21,9 @@ import { AssetDto, AssetsService} from './../services/assets.service'; |
|
|
|
import { AppsState } from './apps.state'; |
|
|
|
|
|
|
|
interface Snapshot { |
|
|
|
tags: { [name: string]: number }; |
|
|
|
tag?: string; |
|
|
|
|
|
|
|
assets: ImmutableArray<AssetDto>; |
|
|
|
assetsPager: Pager; |
|
|
|
assetsQuery?: string; |
|
|
|
@ -30,6 +33,14 @@ interface Snapshot { |
|
|
|
|
|
|
|
@Injectable() |
|
|
|
export class AssetsState extends State<Snapshot> { |
|
|
|
public tags = |
|
|
|
this.changes.pipe(map(x => x.tags), |
|
|
|
distinctUntilChanged()); |
|
|
|
|
|
|
|
public tag = |
|
|
|
this.changes.pipe(map(x => x.tag), |
|
|
|
distinctUntilChanged()); |
|
|
|
|
|
|
|
public assets = |
|
|
|
this.changes.pipe(map(x => x.assets), |
|
|
|
distinctUntilChanged()); |
|
|
|
@ -47,7 +58,7 @@ export class AssetsState extends State<Snapshot> { |
|
|
|
private readonly assetsService: AssetsService, |
|
|
|
private readonly dialogs: DialogService |
|
|
|
) { |
|
|
|
super({ assets: ImmutableArray.empty(), assetsPager: new Pager(0, 0, 30) }); |
|
|
|
super({ assets: ImmutableArray.empty(), assetsPager: new Pager(0, 0, 30), tags: {} }); |
|
|
|
} |
|
|
|
|
|
|
|
public load(isReload = false): Observable<any> { |
|
|
|
@ -59,17 +70,20 @@ export class AssetsState extends State<Snapshot> { |
|
|
|
} |
|
|
|
|
|
|
|
private loadInternal(isReload = false): Observable<any> { |
|
|
|
return this.assetsService.getAssets(this.appName, this.snapshot.assetsPager.pageSize, this.snapshot.assetsPager.skip, this.snapshot.assetsQuery).pipe( |
|
|
|
return combineLatest( |
|
|
|
this.assetsService.getAssets(this.appName, this.snapshot.assetsPager.pageSize, this.snapshot.assetsPager.skip, this.snapshot.assetsQuery, this.snapshot.tag), |
|
|
|
this.assetsService.getTags(this.appName) |
|
|
|
).pipe( |
|
|
|
tap(dtos => { |
|
|
|
if (isReload) { |
|
|
|
this.dialogs.notifyInfo('Assets reloaded.'); |
|
|
|
} |
|
|
|
|
|
|
|
this.next(s => { |
|
|
|
const assets = ImmutableArray.of(dtos.items); |
|
|
|
const assetsPager = s.assetsPager.setCount(dtos.total); |
|
|
|
const assets = ImmutableArray.of(dtos[0].items); |
|
|
|
const assetsPager = s.assetsPager.setCount(dtos[0].total); |
|
|
|
|
|
|
|
return { ...s, assets, assetsPager, isLoaded: true }; |
|
|
|
return { ...s, assets, assetsPager, isLoaded: true, tags: dtos[1] }; |
|
|
|
}); |
|
|
|
}), |
|
|
|
notify(this.dialogs)); |
|
|
|
@ -86,7 +100,7 @@ export class AssetsState extends State<Snapshot> { |
|
|
|
|
|
|
|
public delete(asset: AssetDto): Observable<any> { |
|
|
|
return this.assetsService.deleteAsset(this.appName, asset.id, asset.version).pipe( |
|
|
|
tap(dto => { |
|
|
|
tap(() => { |
|
|
|
return this.next(s => { |
|
|
|
const assets = s.assets.filter(x => x.id !== asset.id); |
|
|
|
const assetsPager = s.assetsPager.decrementCount(); |
|
|
|
@ -105,6 +119,12 @@ export class AssetsState extends State<Snapshot> { |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
public selectTag(tag: string): Observable<any> { |
|
|
|
this.next(s => ({ ...s, assetsPager: new Pager(0, 0, 30), tag })); |
|
|
|
|
|
|
|
return this.loadInternal(); |
|
|
|
} |
|
|
|
|
|
|
|
public search(query: string): Observable<any> { |
|
|
|
this.next(s => ({ ...s, assetsPager: new Pager(0, 0, 30), assetsQuery: query })); |
|
|
|
|
|
|
|
|