From d49e144c0610e8490868aa134678e11634a08931 Mon Sep 17 00:00:00 2001 From: Florent Poittevin <florent.poittevin@unige.ch> Date: Thu, 16 May 2019 16:57:09 +0200 Subject: [PATCH] Update deposit module to get deposits --- src/app/access/access.action.ts | 2 +- src/app/access/access.state.ts | 4 +- .../access-view/access-view.component.html | 4 +- .../access-view/access-view.component.ts | 6 +- src/app/app.module.ts | 2 +- src/app/deposit/deposit.action.ts | 20 +++-- src/app/deposit/deposit.state.ts | 76 +++++++++---------- .../deposit-view/deposit-view.component.html | 44 +---------- .../deposit-view/deposit-view.component.ts | 25 ++---- 9 files changed, 71 insertions(+), 112 deletions(-) diff --git a/src/app/access/access.action.ts b/src/app/access/access.action.ts index 00476bdef..0c30311e8 100644 --- a/src/app/access/access.action.ts +++ b/src/app/access/access.action.ts @@ -1,4 +1,4 @@ -import {AipModel, DipModel} from '@app/generated-api'; +import {DipModel} from '@app/generated-api'; import {CollectionTypedModel} from '@app/model/collection-typed.model'; export class GetAllDip { diff --git a/src/app/access/access.state.ts b/src/app/access/access.state.ts index 8007718b2..65fcb6703 100644 --- a/src/app/access/access.state.ts +++ b/src/app/access/access.state.ts @@ -66,9 +66,9 @@ export class AccessState { tap((collectionDips: CollectionTypedModel<DipModel>) => { ctx.dispatch(new SearchDipSuccess(collectionDips)); }), - catchError(e => { + catchError(error => { ctx.dispatch(new SearchDipFail()); - throw e; + throw error; }), ); } diff --git a/src/app/access/views/access-view/access-view.component.html b/src/app/access/views/access-view/access-view.component.html index f84f67dd2..45f7add36 100644 --- a/src/app/access/views/access-view/access-view.component.html +++ b/src/app/access/views/access-view/access-view.component.html @@ -1,6 +1,4 @@ -<form class="search-form"> - <dlcm-search (value)="search($event)"></dlcm-search> -</form> +<dlcm-search (value)="search($event)"></dlcm-search> {{(dips$ | async) | json}} diff --git a/src/app/access/views/access-view/access-view.component.ts b/src/app/access/views/access-view/access-view.component.ts index d94b27fc0..8fceb828b 100644 --- a/src/app/access/views/access-view/access-view.component.ts +++ b/src/app/access/views/access-view/access-view.component.ts @@ -1,5 +1,7 @@ import {Component, OnInit} from '@angular/core'; import {SearchDip} from '@app/access/access.action'; +import {AccessStateModel} from '@app/access/access.state'; +import {DipModel} from '@app/generated-api'; import {Select, Store} from '@ngxs/store'; import {Observable} from 'rxjs'; @@ -10,8 +12,8 @@ import {Observable} from 'rxjs'; styleUrls: ['./access-view.component.scss'], }) export class AccessViewComponent implements OnInit { - @Select((state) => state.access.isLoading) isLoading$: Observable<string>; - @Select((state) => state.access.dips) dips$: Observable<string>; + @Select((state) => ((state.access) as AccessStateModel).isLoading) isLoading$: Observable<boolean>; + @Select((state) => ((state.access) as AccessStateModel).dips) dips$: Observable<DipModel[]>; constructor(private store: Store) { } diff --git a/src/app/app.module.ts b/src/app/app.module.ts index c190e9c58..782bfcd61 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -35,7 +35,7 @@ import {AppRoutingModule} from './module/app-routing.module'; BrowserAnimationsModule, AppRoutingModule, NgxsModule.forRoot([], { - developmentMode: !environment.production, // Allow to freeze store + developmentMode: !environment.production, // Allow to enable freeze store in dev env }), NgxsLoggerPluginModule.forRoot({ logger: console, diff --git a/src/app/deposit/deposit.action.ts b/src/app/deposit/deposit.action.ts index a6116ddbd..2795b1f82 100644 --- a/src/app/deposit/deposit.action.ts +++ b/src/app/deposit/deposit.action.ts @@ -1,12 +1,22 @@ -export class AddDIP { - static readonly type = '[Deposit] Add DIP'; +import {DepositsModel} from '@app/generated-api'; +import {CollectionTypedModel} from '@app/model/collection-typed.model'; - constructor(public name: string) { +export class GetAll { + static readonly type = '[Deposit] Get All'; + + constructor() { } } -export class GetAll { - static readonly type = '[Deposit] Get All'; +export class GetAllSuccess { + static readonly type = '[Deposit] Get All Success'; + + constructor(public deposits: CollectionTypedModel<DepositsModel>) { + } +} + +export class GetAllFail { + static readonly type = '[Deposit] Get All Fail'; constructor() { } diff --git a/src/app/deposit/deposit.state.ts b/src/app/deposit/deposit.state.ts index 4c27c12f2..c5c95ef41 100644 --- a/src/app/deposit/deposit.state.ts +++ b/src/app/deposit/deposit.state.ts @@ -1,66 +1,60 @@ import {AppStateModel} from '@app/app.state'; -import {AddDIP, GetAll} from '@app/deposit/deposit.action'; -import {DepositService} from '@app/deposit/services/deposit.service'; +import {GetAll, GetAllFail, GetAllSuccess} from '@app/deposit/deposit.action'; +import {DepositsModel, DipModel} from '@app/generated-api'; +import {CollectionTypedModel} from '@app/model/collection-typed.model'; +import {DlcmExtendedService} from '@app/service/dlcm.extended.service'; import {Action, State, StateContext} from '@ngxs/store'; -import {tap} from 'rxjs/internal/operators/tap'; +import {catchError} from 'rxjs/internal/operators/catchError'; +import {tap} from 'rxjs/operators'; export interface DepositStateModel extends AppStateModel { - feed: boolean; - dip: string; - dips: []; + totalDeposit: number; + deposits: DipModel[]; } @State<DepositStateModel>({ name: 'deposit', defaults: { - feed: false, - dip: 'test', - dips: [], + totalDeposit: 0, + deposits: [], isLoading: false, }, }) export class DepositState { - constructor(private depositService: DepositService) { + constructor(private dlcmService: DlcmExtendedService) { } - @Action(AddDIP) - addDIP(ctx: StateContext<DepositStateModel>, action: AddDIP) { - // const state = ctx.getState(); - // ctx.setState({ - // ...state, - // feed: !state.feed, - // dip: action.name, - // isLoading: true, - // }); - - // equals to - // ctx.setState((state) => ({...state, dip: action.name})); - - // equals to + @Action(GetAll, {cancelUncompleted: true}) + getAll(ctx: StateContext<DepositStateModel>, action: GetAll) { ctx.patchState({ - dip: action.name, + isLoading: true, }); - // return ctx.dispatch(new GetAll()); + return this.dlcmService.preingestDepositsGet() + .pipe( + tap((collectionDips: CollectionTypedModel<DepositsModel>) => { + ctx.dispatch(new GetAllSuccess(collectionDips)); + }), + catchError(error => { + ctx.dispatch(new GetAllFail()); + throw error; + }), + ); } - @Action(GetAll) - getAll(ctx: StateContext<DepositStateModel>, action: GetAll) { + @Action(GetAllSuccess) + getAllSuccess(ctx: StateContext<DepositStateModel>, action: GetAllSuccess) { ctx.patchState({ - isLoading: true, + deposits: action.deposits._data, + totalDeposit: action.deposits._page.totalItems, + isLoading: false, }); + } - return this.depositService.getAll().pipe( - tap((deposits: any) => { - console.log('test', deposits); - const state = ctx.getState(); - // ctx.patchState() - ctx.setState({ - ...state, - dips: deposits._data, - isLoading: false, - }); - }), - ); + @Action(GetAllFail) + getAllFail(ctx: StateContext<DepositStateModel>) { + ctx.patchState({ + isLoading: false, + }); } } diff --git a/src/app/deposit/views/deposit-view/deposit-view.component.html b/src/app/deposit/views/deposit-view/deposit-view.component.html index df17ae789..eced35146 100644 --- a/src/app/deposit/views/deposit-view/deposit-view.component.html +++ b/src/app/deposit/views/deposit-view/deposit-view.component.html @@ -1,44 +1,8 @@ -<button mat-flat-button color="primary">New Deposit</button> +<button mat-flat-button color="primary" (click)="addDeposit()">New Deposit</button> +<button mat-flat-button color="secondary" (click)="getAll()">Refresh</button> -<button (click)="getAll()">Get All deposit</button> -<!--<button (click)="addDIP()">Add DIP</button>--> +{{(deposits$ | async) | json}} -<ul> - <li *ngFor="let dip of (deposit$ | async).dips"> - {{dip | json}} - </li> -</ul> +<mat-spinner *ngIf="(isLoading$ | async)"></mat-spinner> -<!--Deposits :--> - -<!--DIPS :--> -<!--<!–{{dips$ | async}}–>--> -<!--<br>--> -<!--DIP :--> -<!--{{(depositState$ | async).dip}}--> -<!--<br>--> -<!--DIP 2 :--> -<!--{{(deposit$ | async).dip}}--> -<!--<br>--> -<!--DIP 3 :--> -<!--{{dip3$ | async}}--> -<!--<br>--> -<!--DIP 4 :--> -<!--{{dip4$ | async}}--> -<!--<br>--> -<!--<!–Don't work–>--> -<!--DIP Panda :--> -<!--<!–{{dipPanda$ | async}}–>--> -<!--<br>--> -<!--All :--> -<!--<ul>--> -<!-- <li *ngFor="let dip of (deposit$ | async).dips">--> -<!-- {{dip | json}}--> -<!-- </li>--> -<!--</ul>--> - -<!--<fa-icon [icon]="faCoffee"></fa-icon>--> -<!--<fa-icon icon="coffee"></fa-icon>--> - -<!--<mat-spinner *ngIf="(deposit$ | async).isLoading"></mat-spinner>--> diff --git a/src/app/deposit/views/deposit-view/deposit-view.component.ts b/src/app/deposit/views/deposit-view/deposit-view.component.ts index 0715ad0eb..21a92ad35 100644 --- a/src/app/deposit/views/deposit-view/deposit-view.component.ts +++ b/src/app/deposit/views/deposit-view/deposit-view.component.ts @@ -1,6 +1,7 @@ import {Component, OnInit} from '@angular/core'; -import {AddDIP, GetAll} from '@app/deposit/deposit.action'; -import {DepositState, DepositStateModel} from '@app/deposit/deposit.state'; +import {GetAll} from '@app/deposit/deposit.action'; +import {DepositStateModel} from '@app/deposit/deposit.state'; +import {DepositsModel} from '@app/generated-api'; import {faCoffee} from '@fortawesome/free-solid-svg-icons'; import {Select, Store} from '@ngxs/store'; import {Observable} from 'rxjs'; @@ -13,31 +14,21 @@ import {Observable} from 'rxjs'; export class DepositViewComponent implements OnInit { faCoffee = faCoffee; - // @Select((state: DepositStateModel) => state.dips) dips$: Observable<any>; - // @Select(DepositState.dip) dip$: Observable<string>; - @Select(DepositState) depositState$: Observable<DepositStateModel>; - - // Uses the pandas memoized selector to only return pandas - // @Select(DepositState.dip) dipPanda$: Observable<string>; - - @Select((state) => state.deposit.dip) dip3$: Observable<string>; - - @Select() deposit$: Observable<DepositStateModel>; - - dip4$: Observable<string>; + @Select((state) => ((state.deposit) as DepositStateModel).isLoading) isLoading$: Observable<boolean>; + @Select((state) => ((state.deposit) as DepositStateModel).deposits) deposits$: Observable<DepositsModel[]>; constructor(private store: Store) { - this.dip4$ = this.store.select(state => state.deposit.dip); } ngOnInit() { + this.getAll(); } getAll() { this.store.dispatch(new GetAll()); } - addDIP() { - this.store.dispatch(new AddDIP('My new dip')); + addDeposit() { + } } -- GitLab