import { tassign } from 'tassign'; import { IItemTypes} from '../models/item.types'; import { IListItem } from '../models/list.item'; import { IUser } from '../models/user'; import { IPackage,IPackageMap,IPackages} from '../models/package'; import * as appCommonActions from '../actions/app-common.actions'; import { createSelector, createFeatureSelector, ActionReducerMap } from '@ngrx/store'; import { MODULE_NAME } from '../module-name'; import { IItem } from '../models/item'; import {getValidPackages, isValidPackage} from '../services/package.service'; export interface State { openedModalName: string, initialized: boolean, rootItems: IListItem[], itemTypes: IItemTypes, user:IUser, fullScreen: boolean, routeLoading:boolean, menuVisible: boolean, userPackages: IPackages, packages: IPackageMap, userSettingsRoot: IItem, accountMenuVisible: boolean, appMenuVisible: boolean, notificationMenuVisible: boolean, helpMenuVisible: boolean, unreadNotifications: number, isOnline: boolean, isPageMode:boolean } export const initialState: State = { openedModalName: null, initialized: false, rootItems: [], itemTypes: {}, user:null, fullScreen: true, routeLoading: false, menuVisible: false, userPackages: {}, packages: {}, userSettingsRoot: null, accountMenuVisible: false, appMenuVisible: false, notificationMenuVisible: false, helpMenuVisible: false, unreadNotifications: 0, isOnline: true, isPageMode: true } export function reducer(state = initialState, action: appCommonActions.Actions ): State { switch (action.type) { case appCommonActions.INITUSER: { return tassign(state,{initialized: true}); } case appCommonActions.INITUSERSUCCESS: { const a = action as appCommonActions.InitUserSuccess; const claims = { ...a.userinfo.info }; const user:IUser = { code:a.user.code, email:claims["email"]!== undefined ? claims["email"] : a.user.name, name:claims["name"]!== undefined?claims["name"] : a.user.email, claims:claims, searchable: false }; return tassign(state, { user: user }); } case appCommonActions.INITROOTSUCCESS: { const a = action as appCommonActions.InitRootSuccess; return tassign(state, { rootItems:a.items}); } case appCommonActions.OPENMODAL: { return tassign(state, { openedModalName: action.modalName }); } case appCommonActions.CLOSEMODAL: { return tassign(state, { openedModalName: null }); } case appCommonActions.LOADITEMTYPESSUCCESS: { const a = action as appCommonActions.LoadItemTypesSuccess; return tassign(state, { itemTypes: a.itemTypes }); } case appCommonActions.FULLSCREEN: { return tassign(state, { fullScreen:true }); } case appCommonActions.SHOWNAVBAR: { return tassign(state, { fullScreen: false }); } case appCommonActions.STARTROUTELOADING: { return tassign(state, { routeLoading: true }); } case appCommonActions.ENDROUTELOADING: { return tassign(state, { routeLoading: false }); } case appCommonActions.TOGGLEMENU: { return tassign(state, { menuVisible: !state.menuVisible,accountMenuVisible:!state.menuVisible?false:state.accountMenuVisible,appMenuVisible:!state.menuVisible?false:state.appMenuVisible,notificationMenuVisible:!state.menuVisible?false:state.notificationMenuVisible,helpMenuVisible:!state.menuVisible?false:state.helpMenuVisible }); } case appCommonActions.TOGGLEACCOUNTMENU: { return tassign(state, { accountMenuVisible: !state.accountMenuVisible,appMenuVisible:false,notificationMenuVisible:false,helpMenuVisible:false }); } case appCommonActions.TOGGLEAPPMENU: { return tassign(state, { appMenuVisible: !state.appMenuVisible,accountMenuVisible:false,notificationMenuVisible:false,helpMenuVisible:false }); } case appCommonActions.TOGGLENOTIFICATIONMENU: { return tassign(state, { notificationMenuVisible : !state.notificationMenuVisible,accountMenuVisible:false,appMenuVisible:false,helpMenuVisible:false }); } case appCommonActions.TOGGLEHELPMENU: { return tassign(state, { helpMenuVisible : !state.helpMenuVisible,accountMenuVisible:false,appMenuVisible:false,notificationMenuVisible:false }); } case appCommonActions.ESCAPE: { return tassign(state, { menuVisible: false,accountMenuVisible:false,appMenuVisible: false,notificationMenuVisible:false,helpMenuVisible:false }); } case appCommonActions.SETMENUVISIBLE: { const a = action as appCommonActions.SetMenuVisible; return tassign(state, { menuVisible: a.visible,accountMenuVisible:a.visible?false:state.accountMenuVisible,appMenuVisible:a.visible?false:state.appMenuVisible,notificationMenuVisible:a.visible?false:state.notificationMenuVisible,helpMenuVisible:a.visible?false:state.helpMenuVisible }); } case appCommonActions.INITUSERPACKAGESSUCCESS:{ const a = action as appCommonActions.InitUserPackagesSuccess; const packages = {} a.items.forEach((item) => { item.data.dataDate = item.dataDate; item.data.dataEndDate = item.dataEndDate; if (!packages[item.data.id]) { packages[item.data.id] = []; } packages[item.data.id].push(item.data); }); return tassign(state,{userPackages:packages}); } case appCommonActions.INITPACKAGESSUCCESS:{ const a = action as appCommonActions.InitPackagesSuccess; const packages = {} a.items.forEach((item) => { packages[item.data.id] = item.data; }); return tassign(state,{packages:packages}); } case appCommonActions.INITUSERSETTINGSROOTSUCCESS:{ const a = action as appCommonActions.InitUserSettingsRootSuccess; return tassign(state, { userSettingsRoot : a.item }); } case appCommonActions.LOGOUT:{ return tassign(state,{user:null,initialized:false}); } case appCommonActions.CLOSEALL: { return tassign(state,{accountMenuVisible:false,appMenuVisible:false, menuVisible:false }); } case appCommonActions.ONLINE:{ return tassign(state,{isOnline:true}); } case appCommonActions.OFFLINE:{ return tassign(state,{isOnline:false}); } case appCommonActions.SETPAGEMODE: { const a = action as appCommonActions.SetPageMode; return tassign(state,{isPageMode:a.pageMode}); } case appCommonActions.NOTIFICATIONEVENT: { const a = action as appCommonActions.NotificationEvent; let unread = 0; if(a.attributes["unread"]) { unread = parseInt(a.attributes["unread"]); } return tassign(state,{unreadNotifications:unread}); } case appCommonActions.SETUNREADNOTIFICATIONS: { const a = action as appCommonActions.SetUnreadNotifications; return tassign(state,{unreadNotifications:a.unread}); } default: { return state; } } } export const getOpenedModalName = (state: State) => state.openedModalName; export const getInitialized = (state: State) => state.initialized; export const getItemTypes = (state: State) => state.itemTypes; export const getRootItems = (state: State) => state.rootItems; export const getFullScreen = (state: State) => state.fullScreen; export const getRouteLoading = (state: State) => state.routeLoading; export const getMenuVisible = (state: State) => state.menuVisible; export const getUser = (state: State) => state.user; export const getUserPackages = (state: State) => state.userPackages; export const getPackages = (state: State) => state.packages; export const getUserSettingsRoot = (state: State) => state.userSettingsRoot; export const getAccountMenuVisible = (state: State) => state.accountMenuVisible; export const getAppMenuVisible = (state: State) => state.appMenuVisible; export const getNotificationMenuVisible = (state: State) => state.notificationMenuVisible; export const getHelpMenuVisible = (state: State) => state.helpMenuVisible; export const getUnreadNotifications = (state: State) => state.unreadNotifications; export const getIsOnline = (state: State) => state.isOnline; export const getIsPageMode = (state: State) => state.isPageMode; export const selectAppCommonState = createFeatureSelector(MODULE_NAME); export const selectOpenedModalName = createSelector(selectAppCommonState, getOpenedModalName); export const selectGetInitialized = createSelector(selectAppCommonState, getInitialized); export const selectGetItemTypes = createSelector(selectAppCommonState, getItemTypes); export const selectGetRootItems = createSelector(selectAppCommonState, getRootItems); export const selectGetFullScreen = createSelector(selectAppCommonState, getFullScreen); export const selectGetRouteLoading = createSelector(selectAppCommonState, getRouteLoading); export const SelectGetMenuVisible = createSelector(selectAppCommonState,getMenuVisible); export const SelectGetUser = createSelector(selectAppCommonState,getUser); export const SelectGetUserPackages = createSelector(selectAppCommonState,getUserPackages); export const SelectGetPackages = createSelector(selectAppCommonState,getPackages); export const SelectGetValidUserPackages = createSelector(SelectGetUserPackages, (packageMap) => { return getValidPackages(packageMap); }); export const SelectGetUserSettingsRoot = createSelector(selectAppCommonState,getUserSettingsRoot); export const SelectGetAccountMenuVisible = createSelector(selectAppCommonState,getAccountMenuVisible); export const SelectGetAppMenuVisible = createSelector(selectAppCommonState,getAppMenuVisible); export const SelectGetNotificationMenuVisible = createSelector(selectAppCommonState,getNotificationMenuVisible); export const SelectGetHelpMenuVisible = createSelector(selectAppCommonState,getHelpMenuVisible); export const SelectgetUnreadNotifications = createSelector(selectAppCommonState,getUnreadNotifications); export const SelectGetIsOnline = createSelector(selectAppCommonState,getIsOnline); export const SelectGetIsPageMode = createSelector(selectAppCommonState,getIsPageMode);