import { tassign } from 'tassign'; import { IItemTypes} from '../models/item.types'; import { IListItem } from '../models/list.item'; import { IUser } from '../models/user'; import { IPackage,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'; export interface State { openedModalName: string, initialized: boolean, rootItems: IListItem[], itemTypes: IItemTypes, user:IUser, fullScreen: boolean, routeLoading:boolean, menuVisible: boolean, userPackages: IPackages, userSettingsRoot: IItem, accountMenuVisible: boolean, appMenuVisible: boolean, notificationMenuVisible: 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: {}, userSettingsRoot: null, accountMenuVisible: false, appMenuVisible: false, notificationMenuVisible: 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: { let a = action as appCommonActions.InitUserSuccess; let claims = {} Object.getOwnPropertyNames(a.userinfo).forEach((k) => { claims[k] = a.userinfo[k]; }); var user:IUser = { code:a.user.code, email:a.userinfo["email"], name:a.userinfo["name"], claims:claims, searchable: false }; return tassign(state, { user: user }); } case appCommonActions.INITROOTSUCCESS: { let 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: { let 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 }); } case appCommonActions.TOGGLEACCOUNTMENU: { return tassign(state, { accountMenuVisible: !state.accountMenuVisible,appMenuVisible:false,notificationMenuVisible:false }); } case appCommonActions.TOGGLEAPPMENU: { return tassign(state, { appMenuVisible: !state.appMenuVisible,accountMenuVisible:false,notificationMenuVisible:false }); } case appCommonActions.TOGGLENOTIFICATIONMENU: { return tassign(state, { notificationMenuVisible : !state.notificationMenuVisible,accountMenuVisible:false,appMenuVisible:false }); } case appCommonActions.ESCAPE: { return tassign(state, { menuVisible: false,accountMenuVisible:false,appMenuVisible: false,notificationMenuVisible:false }); } case appCommonActions.SETMENUVISIBLE: { let 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 }); } case appCommonActions.INITUSERPACKAGESSUCCESS:{ let a = action as appCommonActions.InitUserPackagesSuccess; let packages = {} a.items.forEach((item) => { item.data.dataDate = item.dataDate; item.data.dataEndDate = item.dataEndDate; packages[item.data.id]=item.data; }); return tassign(state,{userPackages:packages}); } case appCommonActions.INITUSERSETTINGSROOTSUCCESS:{ let 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: { let a = action as appCommonActions.SetPageMode; return tassign(state,{isPageMode:a.pageMode}); } case appCommonActions.NOTIFICATIONEVENT: { let a = action as appCommonActions.NotificationEvent; let unread = 0; if(a.attributes["unread"]) { unread = parseInt(a.attributes["unread"]); } return tassign(state,{unreadNotifications: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 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 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 SelectGetUserSettingsRoot = createSelector(selectAppCommonState,getUserSettingsRoot); export const SelectGetAccountMenuVisible = createSelector(selectAppCommonState,getAccountMenuVisible); export const SelectGetAppMenuVisible = createSelector(selectAppCommonState,getAppMenuVisible); export const SelectGetNotificationMenuVisible = createSelector(selectAppCommonState,getNotificationMenuVisible); export const SelectgetUnreadNotifications = createSelector(selectAppCommonState,getUnreadNotifications); export const SelectGetIsOnline = createSelector(selectAppCommonState,getIsOnline); export const SelectGetIsPageMode = createSelector(selectAppCommonState,getIsPageMode);