From 634890dce027e107c50913b3c2a0fd65261c6f10 Mon Sep 17 00:00:00 2001 From: Vladyslav_Prykhodko Date: Thu, 6 Aug 2020 14:14:03 +0300 Subject: [PATCH] Add new method for state controller pushAndOpenState --- .../default-state-controller.component.ts | 5 +++++ .../entity-state-controller.component.ts | 19 ++++++++++++++++++- .../states/state-controller.component.ts | 4 +++- 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/ui-ngx/src/app/modules/home/pages/dashboard/states/default-state-controller.component.ts b/ui-ngx/src/app/modules/home/pages/dashboard/states/default-state-controller.component.ts index 47282d0171..348f8db3fe 100644 --- a/ui-ngx/src/app/modules/home/pages/dashboard/states/default-state-controller.component.ts +++ b/ui-ngx/src/app/modules/home/pages/dashboard/states/default-state-controller.component.ts @@ -107,6 +107,11 @@ export class DefaultStateControllerComponent extends StateControllerComponent im } } + public pushAndOpenState(states: Array, openRightLayout?: boolean): void { + const state = states[states.length - 1]; + this.openState(state.id, state.params, openRightLayout); + } + public updateState(id: string, params?: StateParams, openRightLayout?: boolean): void { if (!id) { id = this.getStateId(); diff --git a/ui-ngx/src/app/modules/home/pages/dashboard/states/entity-state-controller.component.ts b/ui-ngx/src/app/modules/home/pages/dashboard/states/entity-state-controller.component.ts index ec9cac954c..7a79736d3f 100644 --- a/ui-ngx/src/app/modules/home/pages/dashboard/states/entity-state-controller.component.ts +++ b/ui-ngx/src/app/modules/home/pages/dashboard/states/entity-state-controller.component.ts @@ -17,7 +17,7 @@ import { Component, NgZone, OnDestroy, OnInit } from '@angular/core'; import { StateObject, StateParams } from '@core/api/widget-api.models'; import { ActivatedRoute, Router } from '@angular/router'; -import { Observable, of } from 'rxjs'; +import { forkJoin, Observable, of } from 'rxjs'; import { StateControllerState } from './state-controller.models'; import { StateControllerComponent } from './state-controller.component'; import { StatesControllerService } from '@home/pages/dashboard/states/states-controller.service'; @@ -116,6 +116,23 @@ export class EntityStateControllerComponent extends StateControllerComponent imp } } + public pushAndOpenState(states: Array, openRightLayout?: boolean): void { + if (this.states) { + for (const state of states) { + if (!this.states[state.id]) { + return; + } + } + forkJoin(states.map(state => this.resolveEntity(state.params))).subscribe( + () => { + this.stateObject.push(...states); + this.selectedStateIndex = this.stateObject.length - 1; + this.gotoState(this.stateObject[this.stateObject.length - 1].id, true, openRightLayout); + } + ); + } + } + public updateState(id: string, params?: StateParams, openRightLayout?: boolean): void { if (!id) { id = this.getStateId(); diff --git a/ui-ngx/src/app/modules/home/pages/dashboard/states/state-controller.component.ts b/ui-ngx/src/app/modules/home/pages/dashboard/states/state-controller.component.ts index b0825e8aa9..64b8ff3c47 100644 --- a/ui-ngx/src/app/modules/home/pages/dashboard/states/state-controller.component.ts +++ b/ui-ngx/src/app/modules/home/pages/dashboard/states/state-controller.component.ts @@ -22,7 +22,7 @@ import { NgZone, OnDestroy, OnInit } from '@angular/core'; import { ActivatedRoute, Params, Router } from '@angular/router'; import { StatesControllerService } from '@home/pages/dashboard/states/states-controller.service'; import { EntityId } from '@app/shared/models/id/entity-id'; -import { StateParams } from '@app/core/api/widget-api.models'; +import { StateObject, StateParams } from '@app/core/api/widget-api.models'; export abstract class StateControllerComponent implements IStateControllerComponent, OnInit, OnDestroy { @@ -178,6 +178,8 @@ export abstract class StateControllerComponent implements IStateControllerCompon public abstract openState(id: string, params?: StateParams, openRightLayout?: boolean): void; + public abstract pushAndOpenState(states: Array, openRightLayout?: boolean): void; + public abstract resetState(): void; public abstract updateState(id?: string, params?: StateParams, openRightLayout?: boolean): void;