From a12cf811e041fd1ead1a19353c3caf9429fa3029 Mon Sep 17 00:00:00 2001 From: Arundathi Patil Date: Fri, 4 Jan 2019 22:06:07 +0530 Subject: Application state This folder contains the code handling application state. Implemented using ngrx store, effects version 6.1.2 Issue-ID: CCSDK-816 Change-Id: I6675c19c26c0fc28159f5b1b1c82ff34d11ddd2b Signed-off-by: Arundathi Patil --- cds-ui/client/package.json | 3 + .../app/common/store/actions/blueprint.action.ts | 70 ++++++++++++++++++++++ .../app/common/store/effects/blueprint.effects.ts | 56 +++++++++++++++++ .../common/store/models/blueprint-http.model.ts | 25 ++++++++ .../src/app/common/store/models/blueprint.model.ts | 30 ++++++++++ .../common/store/models/blueprintState.model.ts | 32 ++++++++++ .../src/app/common/store/models/imports.model.ts | 24 ++++++++ .../src/app/common/store/models/metadata.model.ts | 28 +++++++++ .../src/app/common/store/reducers/app.reducer.ts | 31 ++++++++++ .../app/common/store/reducers/blueprint.reducer.ts | 56 +++++++++++++++++ .../common/store/selectors/blueprint.selectors.ts | 31 ++++++++++ .../client/src/app/common/store/state/app.state.ts | 33 ++++++++++ .../src/app/common/store/state/blueprint.state.ts | 31 ++++++++++ 13 files changed, 450 insertions(+) create mode 100644 cds-ui/client/src/app/common/store/actions/blueprint.action.ts create mode 100644 cds-ui/client/src/app/common/store/effects/blueprint.effects.ts create mode 100644 cds-ui/client/src/app/common/store/models/blueprint-http.model.ts create mode 100644 cds-ui/client/src/app/common/store/models/blueprint.model.ts create mode 100644 cds-ui/client/src/app/common/store/models/blueprintState.model.ts create mode 100644 cds-ui/client/src/app/common/store/models/imports.model.ts create mode 100644 cds-ui/client/src/app/common/store/models/metadata.model.ts create mode 100644 cds-ui/client/src/app/common/store/reducers/app.reducer.ts create mode 100644 cds-ui/client/src/app/common/store/reducers/blueprint.reducer.ts create mode 100644 cds-ui/client/src/app/common/store/selectors/blueprint.selectors.ts create mode 100644 cds-ui/client/src/app/common/store/state/app.state.ts create mode 100644 cds-ui/client/src/app/common/store/state/blueprint.state.ts (limited to 'cds-ui/client') diff --git a/cds-ui/client/package.json b/cds-ui/client/package.json index b0d00d6b9..47c66bb63 100644 --- a/cds-ui/client/package.json +++ b/cds-ui/client/package.json @@ -22,6 +22,9 @@ "@angular/platform-browser-dynamic": "~7.1.0", "@angular/router": "~7.1.0", "@ngrx/core": "^1.2.0", + "@ngrx/effects": "^6.1.2", + "@ngrx/router-store": "^6.1.2", + "@ngrx/store-devtools": "^6.1.2", "@ngrx/store": "^6.1.2", "core-js": "^2.5.4", "font-awesome": "^4.7.0", diff --git a/cds-ui/client/src/app/common/store/actions/blueprint.action.ts b/cds-ui/client/src/app/common/store/actions/blueprint.action.ts new file mode 100644 index 000000000..6a0ab8065 --- /dev/null +++ b/cds-ui/client/src/app/common/store/actions/blueprint.action.ts @@ -0,0 +1,70 @@ +/* +============LICENSE_START========================================== +=================================================================== +Copyright (C) 2018 IBM Intellectual Property. All rights reserved. +=================================================================== + +Unless otherwise specified, all software contained herein is licensed +under the Apache License, Version 2.0 (the License); +you may not use this software except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +============LICENSE_END============================================ +*/ +import { Injectable } from '@angular/core'; +import { Action, Store } from '@ngrx/store'; +import { IBlueprint } from '../models/blueprint.model'; +import { IBlueprintState } from '../models/blueprintState.model'; + +export const LOAD_BLUEPRINT = 'LOAD_BLUEPRINT'; +export const LOAD_BLUEPRINT_SUCCESS = 'LOAD_BLUEPRINT_SUCCESS'; +export const LOAD_BLUEPRINT_FAILURE = 'LOAD_BLUEPRINT_FAILURE'; +export const UPDATE_BLUEPRINT ='UPDATE_BLUEPRINT'; +export const UPDATE_BLUEPRINT_SUCCESS = 'UPDATE_BLUEPRINT_SUCCESS'; +export const UPDATE_BLUEPRINT_FAILURE = 'UPDATE_BLUEPRINT_FAILURE'; +export const SAVE_BLUEPRINT = 'SAVE_BLUEPRINT'; +export const SAVE_BLUEPRINT_SUCCESS = 'SAVE_BLUEPRINT_SUCCESS'; +export const SAVE_BLUEPRINT_FAILURE = 'SAVE_BLUEPRINT_FAILURE'; + +export const SET_BLUEPRINT = 'SET Blueprint'; +export const REMOVE_BLUEPRINT = 'Remove Blueprint'; + + +export class LoadBlueprint implements Action { + readonly type = LOAD_BLUEPRINT; + constructor(public startLoadSuccess?: boolean) {} +} + +export class LoadBlueprintSuccess implements Action { + readonly type = LOAD_BLUEPRINT_SUCCESS; + constructor(public payload: IBlueprint) {} +} + +export class LoadBlueprintFailure implements Action { + readonly type = LOAD_BLUEPRINT_FAILURE; + constructor(public error: any) {} +} + +// export class SetBlueprint implements Action { +// readonly type = SET_BLUEPRINT; +// constructor(public payload: Blueprint) {} +// } + +// export class RemoveBlueprint implements Action { +// readonly type = REMOVE_BLUEPRINT; +// constructor(public payload: Blueprint) {} +// } + +export class UpdateBlueprint implements Action { + readonly type = UPDATE_BLUEPRINT; + constructor(public payload: IBlueprint) {} +} + +export type Actions = LoadBlueprint | LoadBlueprintSuccess | LoadBlueprintFailure; \ No newline at end of file diff --git a/cds-ui/client/src/app/common/store/effects/blueprint.effects.ts b/cds-ui/client/src/app/common/store/effects/blueprint.effects.ts new file mode 100644 index 000000000..e1b1c2fd9 --- /dev/null +++ b/cds-ui/client/src/app/common/store/effects/blueprint.effects.ts @@ -0,0 +1,56 @@ +/* +============LICENSE_START========================================== +=================================================================== +Copyright (C) 2018 IBM Intellectual Property. All rights reserved. +=================================================================== + +Unless otherwise specified, all software contained herein is licensed +under the Apache License, Version 2.0 (the License); +you may not use this software except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +============LICENSE_END============================================ +*/ + +import { Injectable } from '@angular/core'; +import { Effect, ofType, Actions } from '@ngrx/effects'; +import { Store, select } from '@ngrx/store'; +import { of } from 'rxjs'; +import { switchMap, map, withLatestFrom, catchError } from 'rxjs/operators'; + +import { IAppState } from '../state/app.state'; +import * as BlueprintActions from '../actions/blueprint.action'; +// import { IBlueprintHttp } from '../models/blueprint-http.model'; +// import { BlueprintService } from '../../services/blueprint.service'; +// import { BlueprintService } from '../../../feature-modules/blueprint/blueprint.service'; + +@Injectable() +export class BlueprintEffects { + + + constructor( + // private blueprintService: BlueprintService, + private _actions$: Actions, + private _store: Store + ) {} + + // @Effect() + // getBlueprint$ = this._actions$.pipe( + // ofType(BlueprintActions.LOAD_BLUEPRINT), + // switchMap(() => + // this.blueprintService.loadBlueprint().pipe( + // map((blueprintResponse: any) => new BlueprintActions.LoadBlueprintSuccess(blueprintResponse)), + // catchError((error : any) => of(new BlueprintActions.LoadBlueprintSuccess(error))) + // ), + // , + // switchMap((blueprintResponse: any) => of(new BlueprintActions.LoadBlueprintSuccess(blueprintResponse))) +// ), +// ) +} \ No newline at end of file diff --git a/cds-ui/client/src/app/common/store/models/blueprint-http.model.ts b/cds-ui/client/src/app/common/store/models/blueprint-http.model.ts new file mode 100644 index 000000000..e0e98d580 --- /dev/null +++ b/cds-ui/client/src/app/common/store/models/blueprint-http.model.ts @@ -0,0 +1,25 @@ +/* +============LICENSE_START========================================== +=================================================================== +Copyright (C) 2018 IBM Intellectual Property. All rights reserved. +=================================================================== + +Unless otherwise specified, all software contained herein is licensed +under the Apache License, Version 2.0 (the License); +you may not use this software except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +============LICENSE_END============================================ +*/ +import { IBlueprint } from '../models/blueprint.model'; + +export interface IBlueprintHttp { + blueprint: IBlueprint; +} \ No newline at end of file diff --git a/cds-ui/client/src/app/common/store/models/blueprint.model.ts b/cds-ui/client/src/app/common/store/models/blueprint.model.ts new file mode 100644 index 000000000..a061a4364 --- /dev/null +++ b/cds-ui/client/src/app/common/store/models/blueprint.model.ts @@ -0,0 +1,30 @@ +/* +============LICENSE_START========================================== +=================================================================== +Copyright (C) 2018 IBM Intellectual Property. All rights reserved. +=================================================================== + +Unless otherwise specified, all software contained herein is licensed +under the Apache License, Version 2.0 (the License); +you may not use this software except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +============LICENSE_END============================================ +*/ + +import { IMetaData } from './metadata.model'; +import { IImportModel } from './imports.model'; + + +export interface IBlueprint { + metadata: IMetaData; + fileImports: Array + toplogyTemplates: string; +} \ No newline at end of file diff --git a/cds-ui/client/src/app/common/store/models/blueprintState.model.ts b/cds-ui/client/src/app/common/store/models/blueprintState.model.ts new file mode 100644 index 000000000..556b33d19 --- /dev/null +++ b/cds-ui/client/src/app/common/store/models/blueprintState.model.ts @@ -0,0 +1,32 @@ +/* +============LICENSE_START========================================== +=================================================================== +Copyright (C) 2018 IBM Intellectual Property. All rights reserved. +=================================================================== + +Unless otherwise specified, all software contained herein is licensed +under the Apache License, Version 2.0 (the License); +you may not use this software except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +============LICENSE_END============================================ +*/ + +import { IMetaData } from './metadata.model'; +import { IImportModel } from './imports.model'; +import { IBlueprint } from './blueprint.model'; + + +export interface IBlueprintState { + blueprint: IBlueprint, + isLoadSuccess: boolean; + isUpdateSuccess: boolean; + isSaveSuccess: boolean; +} \ No newline at end of file diff --git a/cds-ui/client/src/app/common/store/models/imports.model.ts b/cds-ui/client/src/app/common/store/models/imports.model.ts new file mode 100644 index 000000000..9510ed3cf --- /dev/null +++ b/cds-ui/client/src/app/common/store/models/imports.model.ts @@ -0,0 +1,24 @@ +/* +============LICENSE_START========================================== +=================================================================== +Copyright (C) 2018 IBM Intellectual Property. All rights reserved. +=================================================================== + +Unless otherwise specified, all software contained herein is licensed +under the Apache License, Version 2.0 (the License); +you may not use this software except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +============LICENSE_END============================================ +*/ + +export interface IImportModel { + file: string; +} \ No newline at end of file diff --git a/cds-ui/client/src/app/common/store/models/metadata.model.ts b/cds-ui/client/src/app/common/store/models/metadata.model.ts new file mode 100644 index 000000000..6ee427504 --- /dev/null +++ b/cds-ui/client/src/app/common/store/models/metadata.model.ts @@ -0,0 +1,28 @@ +/* +============LICENSE_START========================================== +=================================================================== +Copyright (C) 2018 IBM Intellectual Property. All rights reserved. +=================================================================== + +Unless otherwise specified, all software contained herein is licensed +under the Apache License, Version 2.0 (the License); +you may not use this software except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +============LICENSE_END============================================ +*/ +export interface IMetaData { + template_author: string; + author_email: String; + user_groups: string; + template_name: string; + template_version: string; + template_tags: string; +} \ No newline at end of file diff --git a/cds-ui/client/src/app/common/store/reducers/app.reducer.ts b/cds-ui/client/src/app/common/store/reducers/app.reducer.ts new file mode 100644 index 000000000..003886068 --- /dev/null +++ b/cds-ui/client/src/app/common/store/reducers/app.reducer.ts @@ -0,0 +1,31 @@ +/* +============LICENSE_START========================================== +=================================================================== +Copyright (C) 2018 IBM Intellectual Property. All rights reserved. +=================================================================== + +Unless otherwise specified, all software contained herein is licensed +under the Apache License, Version 2.0 (the License); +you may not use this software except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +============LICENSE_END============================================ +*/ + +import { ActionReducerMap } from '@ngrx/store'; +import { routerReducer } from '@ngrx/router-store'; + +import { IAppState } from '../state/app.state'; +import { blueprintReducer } from '../reducers/blueprint.reducer'; + +export const appReducers: ActionReducerMap = { + router: routerReducer, + blueprint: blueprintReducer +}; \ No newline at end of file diff --git a/cds-ui/client/src/app/common/store/reducers/blueprint.reducer.ts b/cds-ui/client/src/app/common/store/reducers/blueprint.reducer.ts new file mode 100644 index 000000000..edcf1c38a --- /dev/null +++ b/cds-ui/client/src/app/common/store/reducers/blueprint.reducer.ts @@ -0,0 +1,56 @@ +/* +============LICENSE_START========================================== +=================================================================== +Copyright (C) 2018 IBM Intellectual Property. All rights reserved. +=================================================================== + +Unless otherwise specified, all software contained herein is licensed +under the Apache License, Version 2.0 (the License); +you may not use this software except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +============LICENSE_END============================================ +*/ + +import { Action } from '@ngrx/store'; +import { IBlueprint } from '../models/blueprint.model'; +import { IBlueprintState } from '../models/blueprintState.model'; +import { initialBlueprintState } from '../state/blueprint.state'; +import * as BlueprintActions from '../actions/blueprint.action'; + +// const initialState: BlueprintState = { +// blueprint: { +// metadata: { +// template_author: '', +// author_email: '', +// user_groups: '', +// template_name: '', +// template_version: '', +// template_tags: '' +// }, +// fileImports: [{file:''}], +// toplogyTemplates: 'temp' +// }, +// isLoadSuccess: false, +// isUpdateSuccess: false, +// isSaveSuccess: false +// } + + +export function blueprintReducer(state: IBlueprintState = initialBlueprintState, action: BlueprintActions.Actions) : IBlueprintState { + switch(action.type) { + case BlueprintActions.LOAD_BLUEPRINT_SUCCESS: + return {...state, + blueprint: action.payload + } + default: + return state; + } +} diff --git a/cds-ui/client/src/app/common/store/selectors/blueprint.selectors.ts b/cds-ui/client/src/app/common/store/selectors/blueprint.selectors.ts new file mode 100644 index 000000000..d23221cce --- /dev/null +++ b/cds-ui/client/src/app/common/store/selectors/blueprint.selectors.ts @@ -0,0 +1,31 @@ +/* +============LICENSE_START========================================== +=================================================================== +Copyright (C) 2018 IBM Intellectual Property. All rights reserved. +=================================================================== + +Unless otherwise specified, all software contained herein is licensed +under the Apache License, Version 2.0 (the License); +you may not use this software except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +============LICENSE_END============================================ +*/ +import { createSelector } from '@ngrx/store'; + +import { IAppState } from '../state/app.state'; +import { IBlueprintState } from '../models/blueprintState.model'; + +const selectBlueprintFromAppState = (state: IAppState) => state.blueprint; + +export const selectBlueprint = createSelector( + selectBlueprintFromAppState, + (state: IBlueprintState) => state.blueprint +); \ No newline at end of file diff --git a/cds-ui/client/src/app/common/store/state/app.state.ts b/cds-ui/client/src/app/common/store/state/app.state.ts new file mode 100644 index 000000000..66e19c9be --- /dev/null +++ b/cds-ui/client/src/app/common/store/state/app.state.ts @@ -0,0 +1,33 @@ +/* +============LICENSE_START========================================== +=================================================================== +Copyright (C) 2018 IBM Intellectual Property. All rights reserved. +=================================================================== + +Unless otherwise specified, all software contained herein is licensed +under the Apache License, Version 2.0 (the License); +you may not use this software except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +============LICENSE_END============================================ +*/ + +import { RouterReducerState } from '@ngrx/router-store'; +import { IBlueprintState } from '../models/blueprintState.model'; +import { initialBlueprintState } from './blueprint.state'; + +export interface IAppState { + router? : RouterReducerState, + blueprint: IBlueprintState +} + +export const initialAppState: IAppState = { + blueprint: initialBlueprintState +} \ No newline at end of file diff --git a/cds-ui/client/src/app/common/store/state/blueprint.state.ts b/cds-ui/client/src/app/common/store/state/blueprint.state.ts new file mode 100644 index 000000000..913072665 --- /dev/null +++ b/cds-ui/client/src/app/common/store/state/blueprint.state.ts @@ -0,0 +1,31 @@ +/* +============LICENSE_START========================================== +=================================================================== +Copyright (C) 2018 IBM Intellectual Property. All rights reserved. +=================================================================== + +Unless otherwise specified, all software contained herein is licensed +under the Apache License, Version 2.0 (the License); +you may not use this software except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +============LICENSE_END============================================ +*/ + +import { IBlueprintState } from '../models/blueprintState.model'; +import { IBlueprint } from '../models/blueprint.model'; + + +export const initialBlueprintState : IBlueprintState = { + blueprint : {} as IBlueprint, + isLoadSuccess: false, + isUpdateSuccess: false, + isSaveSuccess: false, +} \ No newline at end of file -- cgit 1.2.3-korg