2 * ============LICENSE_START========================================================================
3 * ONAP : ccsdk feature sdnr wt odlux
4 * =================================================================================================
5 * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
6 * =================================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
8 * in compliance with the License. You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software distributed under the License
13 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
14 * or implied. See the License for the specific language governing permissions and limitations under
16 * ============LICENSE_END==========================================================================
18 import { IActionHandler } from '../flux/action';
20 import { SetTitleAction } from '../actions/titleActions';
21 import { SetExternalLoginProviderAction } from '../actions/loginProvider';
22 import { AddSnackbarNotification, RemoveSnackbarNotification } from '../actions/snackbarActions';
23 import { AddErrorInfoAction, RemoveErrorInfoAction, ClearErrorInfoAction } from '../actions/errorActions';
24 import { MenuAction, MenuClosedByUser } from '../actions/menuAction'
25 import { SetWebsocketAction } from '../actions/websocketAction';
27 import { IconType } from '../models/iconDefinition';
28 import { ErrorInfo } from '../models/errorInfo';
29 import { SnackbarItem } from '../models/snackbarItem';
30 import { ExternalLoginProvider } from '../models/externalLoginProvider';
31 import { ApplicationConfig } from '../models/applicationConfig';
32 import { IConnectAppStoreState } from '../../../apps/connectApp/src/handlers/connectAppRootHandler';
33 import { IFaultAppStoreState } from '../../../apps/faultApp/src/handlers/faultAppRootHandler';
34 import { GeneralSettings, Settings } from '../models/settings';
35 import { LoadSettingsAction, SetGeneralSettingsAction, SetTableSettings, SettingsDoneLoadingAction } from '../actions/settingsAction';
36 import { startWebsocketSession, suspendWebsocketSession } from '../services/notificationService';
39 declare module '../store/applicationStore' {
40 interface IApplicationStoreState {
41 connect: IConnectAppStoreState;
42 fault: IFaultAppStoreState
45 export interface IApplicationState {
50 isMenuClosedByUser: boolean;
52 snackBars: SnackbarItem[];
53 isWebsocketAvailable: boolean | null;
54 externalLoginProviders: ExternalLoginProvider[] | null;
55 authentication: "basic"|"oauth", // basic
56 enablePolicy: boolean, // false
57 transportpceUrl : string,
58 settings: Settings & { isInitialLoadDone: boolean }
61 const applicationStateInit: IApplicationState = {
66 isMenuClosedByUser: false,
67 isWebsocketAvailable: null,
68 externalLoginProviders: null,
69 authentication: "basic",
73 general: { areNotificationsEnabled: null },
75 isInitialLoadDone: false
79 export const configureApplication = (config: ApplicationConfig) => {
80 applicationStateInit.authentication = config.authentication === "oauth" ? "oauth" : "basic";
81 applicationStateInit.enablePolicy = config.enablePolicy ? true : false;
82 applicationStateInit.transportpceUrl=config.transportpceUrl == undefined ? "" : config.transportpceUrl;
85 export const applicationStateHandler: IActionHandler<IApplicationState> = (state = applicationStateInit, action) => {
86 if (action instanceof SetTitleAction) {
93 } else if (action instanceof AddErrorInfoAction) {
101 } else if (action instanceof RemoveErrorInfoAction) {
102 const index = state.errors.indexOf(action.errorInfo);
107 ...state.errors.slice(0, index),
108 ...state.errors.slice(index + 1),
112 } else if (action instanceof ClearErrorInfoAction) {
113 if (state.errors && state.errors.length) {
119 } else if (action instanceof AddSnackbarNotification) {
127 } else if (action instanceof RemoveSnackbarNotification) {
130 snackBars: state.snackBars.filter(s => s.key !== action.key),
132 } else if (action instanceof MenuAction) {
135 isMenuOpen: action.isOpen,
137 } else if (action instanceof MenuClosedByUser) {
140 isMenuClosedByUser: action.isClosed,
143 else if (action instanceof SetWebsocketAction) {
146 isWebsocketAvailable: action.isConnected,
148 } else if (action instanceof SetExternalLoginProviderAction){
151 externalLoginProviders: action.externalLoginProvders,
153 }else if(action instanceof SetGeneralSettingsAction){
157 settings:{tables: state.settings.tables, isInitialLoadDone:state.settings.isInitialLoadDone, general:{areNotificationsEnabled: action.areNoticationsActive}}
160 else if(action instanceof SetTableSettings){
162 let tableUpdate = state.settings.tables;
163 tableUpdate[action.tableName] = {columns: action.updatedColumns};
165 state = {...state, settings:{general: state.settings.general, isInitialLoadDone:state.settings.isInitialLoadDone, tables: tableUpdate}}
167 }else if(action instanceof LoadSettingsAction){
169 state = {...state, settings:action.settings}
171 else if(action instanceof SettingsDoneLoadingAction){
172 state= {...state, settings: {...state.settings, isInitialLoadDone: true}}