{"version":3,"sources":["src/app/state/user.actions.ts","src/app/services/theme.service.ts","src/app/state/user.reducer.ts"],"sourcesContent":["import { createAction, props } from '@ngrx/store'\nimport { HomePageSection, User } from './user.model'\n\n\nexport enum AuthActionTypes {\n LOGINBYIP = '[Auth] Login By IP Address',\n LOGIN = '[Auth] Login',\n LOGIN_COMPLETE = '[Auth] Login Complete',\n LOGIN_DEMO_USER = '[Auth] Login Demo User',\n LOGIN_ERROR = '[Auth] Login Error',\n LOGIN_RETURN = '[Auth] Store Return To URL',\n LOGOUT = '[Auth] Logout',\n LOGOUTBYIP = '[Auth] IP Logout',\n USER = '[User] Get Details',\n UPDATEUSER = '[User] Update User',\n IMPERSONATEUSER = '[User] Impersonate',\n UPDATEUSERHASSEEN = '[User] Update User hasSeen',\n UPDATEUSERHOMEPAGESECTIONS = '[User] Update User Homepage Sections',\n UPDATEUSERNEXTGENCSO = '[User] Update User NextGenCSO',\n}\n\nexport const loginByIPAddress = createAction(\n AuthActionTypes.LOGINBYIP,\n)\n\nexport const loginUser = createAction(\n AuthActionTypes.LOGIN,\n props<{ email: string, password: string }>()\n)\n\nexport const loginComplete = createAction(\n AuthActionTypes.LOGIN_COMPLETE,\n props<{ user: User }>()\n)\n\nexport const loginDemoUser = createAction(\n AuthActionTypes.LOGIN_DEMO_USER,\n props<{ user: User }>()\n)\n\n\nexport const loginError = createAction(\n AuthActionTypes.LOGIN_ERROR,\n props<{ error: string }>()\n)\n\nexport const logout = createAction(\n AuthActionTypes.LOGOUT,\n props<{ error: string }>()\n)\n\nexport const logoutByIP = createAction(\n AuthActionTypes.LOGOUTBYIP,\n props<{ error: string }>()\n)\n\nexport const setReturnToURL = createAction(\n AuthActionTypes.LOGIN_RETURN,\n props<{ urlAfterLogin: string }>()\n)\n\nexport const getUserDetails = createAction(\n AuthActionTypes.USER,\n)\n\nexport const updateUser = createAction(\n AuthActionTypes.UPDATEUSER,\n props<{ user: User }>()\n)\n\nexport const updateUserHasSeen = createAction(\n AuthActionTypes.UPDATEUSERHASSEEN,\n props<{ label: string }>()\n)\n\nexport const updateUserHomePageSections = createAction(\n AuthActionTypes.UPDATEUSERHOMEPAGESECTIONS,\n props<{ sections: HomePageSection[] }>()\n)\n\nexport const updateUserNextGenCSO = createAction(\n AuthActionTypes.UPDATEUSERNEXTGENCSO,\n props<{ nextGenCSO: string }>()\n)\n\nexport const impersonateUser = createAction(\n AuthActionTypes.IMPERSONATEUSER,\n)","import { Injectable } from '@angular/core'\nimport { BehaviorSubject, Observable } from 'rxjs'\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ThemeService {\n\n public storedTheme = localStorage.getItem('theme') ?? 'light'\n public themeSelection: BehaviorSubject = new BehaviorSubject(this.storedTheme)\n\n constructor() {\n this.setTheme(this.getPreferredTheme())\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {\n if (this.storedTheme !== 'light' && this.storedTheme !== 'dark') {\n this.setTheme(this.getPreferredTheme())\n }\n })\n }\n getPreferredTheme() {\n if (this.storedTheme) {\n return this.storedTheme\n } else {\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'\n }\n }\n\n\n setTheme(theme: string) {\n if (theme === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches) {\n document.documentElement.setAttribute('data-bs-theme', 'dark')\n this.themeSelection.next('dark')\n } else {\n document.documentElement.setAttribute('data-bs-theme', theme)\n this.themeSelection.next(theme)\n }\n\n localStorage.setItem('theme', theme)\n this.storedTheme = theme\n }\n\n themeChanges(): Observable {\n return this.themeSelection.asObservable()\n }\n}","import { createFeature, createReducer, createSelector, on, resultMemoize } from '@ngrx/store'\nimport * as UserActions from './user.actions'\nimport { User } from './user.model'\nimport { ThemeService } from '../services/theme.service'\nimport { inject } from '@angular/core'\n\nexport const userFeatureKey = 'user'\n\nexport interface UserState {\n isAuthenticated: boolean\n user: User | null\n statusMessage: string\n isLoading: boolean\n hasError: boolean\n impersonation: boolean\n urlAfterLogin: string\n}\n\nexport const initialState: UserState = {\n isAuthenticated: false,\n user: null,\n statusMessage: '',\n isLoading: false,\n hasError: false,\n impersonation: false,\n urlAfterLogin: '/home',\n}\n\nexport const reducer = createReducer(\n initialState,\n on(UserActions.loginUser, (state) => {\n return {\n ...state,\n hasError: false,\n statusMessage: '',\n isLoading: true\n }\n }),\n on(UserActions.loginComplete, (state, {user}) => {\n const themeService = new(ThemeService)\n themeService.setTheme(themeService.storedTheme)\n return {\n ...state,\n user,\n isAuthenticated: true,\n hasError: false,\n statusMessage: '',\n isLoading: false\n }\n }),\n on(UserActions.loginError, (state, {error}) => {\n return {\n ...state,\n isAuthenticated:false,\n hasError: true,\n statusMessage: error,\n isLoading: false\n }\n }),\n on(UserActions.logout, (state, {error}) => {\n return {\n ...initialState,\n statusMessage: error\n }\n }),\n on(UserActions.logoutByIP, (state, {error}) => {\n return {\n ...initialState,\n statusMessage: error\n }\n }),\n on(UserActions.setReturnToURL, (state, {urlAfterLogin}) => {\n return {\n ...state,\n urlAfterLogin,\n }\n }),\n on(UserActions.updateUser, (state, {user}) => {\n return {\n ...state,\n user\n }\n }),\n on(UserActions.updateUserHasSeen, (state, {label}) => {\n let result = structuredClone(state)\n result.user!.hasSeen[label] = true\n return result\n }),\n on(UserActions.updateUserHomePageSections, (state, {sections}) => {\n let result = structuredClone(state)\n result.user!.homePageSections = structuredClone(sections)\n return result\n }),\n on(UserActions.updateUserNextGenCSO, (state, {nextGenCSO}) => {\n let result = structuredClone(state)\n result.user!.nextGenCSO = nextGenCSO\n return result\n }),\n on(UserActions.loginDemoUser, (state) => {\n if (state.user?.CustId == \"12041\") {\n window.open(\"/situations\", \"_blank\")\n window.open(\"/data/plans\", \"_blank\")\n window.open(\"/organizations\", \"_blank\")\n window.open(\"/people\", \"_blank\")\n window.open(\"/documents\", \"_blank\")\n }\n return state\n }),\n on(UserActions.impersonateUser, (state) => {\n let result = structuredClone(state)\n result.user!.impersonation = true\n return result\n })\n)\n\nexport const userFeature = createFeature({\n name: userFeatureKey,\n reducer,\n extraSelectors: ({selectIsAuthenticated, selectUserState, selectUser}) => ({\n isLoggedIn: createSelector(\n selectUserState,\n (state) => state.isAuthenticated\n ),\n nextURL: createSelector(\n selectUserState,\n (state) => state.urlAfterLogin\n ),\n })\n})\n\nexport const {\n isLoggedIn,\n nextURL,\n selectUser,\n} = userFeature"],"names":["AuthActionTypes","loginByIPAddress","createAction","LOGINBYIP","loginUser","LOGIN","props","loginComplete","LOGIN_COMPLETE","loginDemoUser","LOGIN_DEMO_USER","loginError","LOGIN_ERROR","logout","LOGOUT","logoutByIP","LOGOUTBYIP","setReturnToURL","LOGIN_RETURN","getUserDetails","USER","updateUser","UPDATEUSER","updateUserHasSeen","UPDATEUSERHASSEEN","updateUserHomePageSections","UPDATEUSERHOMEPAGESECTIONS","updateUserNextGenCSO","UPDATEUSERNEXTGENCSO","impersonateUser","IMPERSONATEUSER","ThemeService","storedTheme","localStorage","getItem","themeSelection","BehaviorSubject","constructor","setTheme","getPreferredTheme","window","matchMedia","addEventListener","matches","theme","document","documentElement","setAttribute","next","setItem","themeChanges","asObservable","factory","ɵfac","providedIn","userFeatureKey","initialState","isAuthenticated","user","statusMessage","isLoading","hasError","impersonation","urlAfterLogin","reducer","createReducer","on","loginUser","state","__spreadProps","__spreadValues","loginComplete","themeService","ThemeService","setTheme","storedTheme","loginError","error","logout","logoutByIP","setReturnToURL","updateUser","updateUserHasSeen","label","result","structuredClone","hasSeen","updateUserHomePageSections","sections","homePageSections","updateUserNextGenCSO","nextGenCSO","loginDemoUser","CustId","window","open","impersonateUser","userFeature","createFeature","name","extraSelectors","selectIsAuthenticated","selectUserState","selectUser","isLoggedIn","createSelector","nextURL"],"mappings":";;0KAIA,IAAYA,EAAZ,SAAYA,EAAe,CACzBA,OAAAA,EAAA,UAAA,6BACAA,EAAA,MAAA,eACAA,EAAA,eAAA,wBACAA,EAAA,gBAAA,yBACAA,EAAA,YAAA,qBACAA,EAAA,aAAA,6BACAA,EAAA,OAAA,gBACAA,EAAA,WAAA,mBACAA,EAAA,KAAA,qBACAA,EAAA,WAAA,qBACAA,EAAA,gBAAA,qBACAA,EAAA,kBAAA,6BACAA,EAAA,2BAAA,uCACAA,EAAA,qBAAA,gCAdUA,CAeZ,EAfYA,GAAe,CAAA,CAAA,EAiBdC,EAAmBC,EAC9BF,EAAgBG,SAAS,EAGdC,EAAYF,EACvBF,EAAgBK,MAChBC,EAAK,CAAuC,EAGjCC,EAAgBL,EAC3BF,EAAgBQ,eAChBF,EAAK,CAAkB,EAGZG,EAAgBP,EAC3BF,EAAgBU,gBAChBJ,EAAK,CAAkB,EAIZK,EAAaT,EACxBF,EAAgBY,YAChBN,EAAK,CAAqB,EAGfO,EAASX,EACpBF,EAAgBc,OAChBR,EAAK,CAAqB,EAGfS,EAAab,EACxBF,EAAgBgB,WAChBV,EAAK,CAAqB,EAGfW,EAAiBf,EAC5BF,EAAgBkB,aAChBZ,EAAK,CAA6B,EAGvBa,EAAiBjB,EAC5BF,EAAgBoB,IAAI,EAGTC,EAAanB,EACxBF,EAAgBsB,WAChBhB,EAAK,CAAkB,EAGZiB,EAAoBrB,EAC/BF,EAAgBwB,kBAChBlB,EAAK,CAAqB,EAGfmB,EAA6BvB,EACxCF,EAAgB0B,2BAChBpB,EAAK,CAAmC,EAG7BqB,EAAuBzB,EAClCF,EAAgB4B,qBAChBtB,EAAK,CAA0B,EAGpBuB,EAAkB3B,EAC7BF,EAAgB8B,eAAe,EChFjC,IAAaC,GAAY,IAAA,CAAnB,MAAOA,CAAY,CAEhBC,YAAcC,aAAaC,QAAQ,OAAO,GAAK,QAC/CC,eAA0C,IAAIC,EAAwB,KAAKJ,WAAW,EAE7FK,aAAA,CACE,KAAKC,SAAS,KAAKC,kBAAiB,CAAE,EACtCC,OAAOC,WAAW,8BAA8B,EAAEC,iBAAiB,SAAU,IAAK,CAC5E,KAAKV,cAAgB,SAAW,KAAKA,cAAgB,QACvD,KAAKM,SAAS,KAAKC,kBAAiB,CAAE,CAE1C,CAAC,CACH,CACAA,mBAAiB,CACf,OAAI,KAAKP,YACA,KAAKA,YAELQ,OAAOC,WAAW,8BAA8B,EAAEE,QAAU,OAAS,OAEhF,CAGAL,SAASM,EAAa,CAChBA,IAAU,QAAUJ,OAAOC,WAAW,8BAA8B,EAAEE,SACxEE,SAASC,gBAAgBC,aAAa,gBAAiB,MAAM,EAC7D,KAAKZ,eAAea,KAAK,MAAM,IAE/BH,SAASC,gBAAgBC,aAAa,gBAAiBH,CAAK,EAC5D,KAAKT,eAAea,KAAKJ,CAAK,GAGhCX,aAAagB,QAAQ,QAASL,CAAK,EACnC,KAAKZ,YAAcY,CACrB,CAEAM,cAAY,CACV,OAAO,KAAKf,eAAegB,aAAY,CACzC,4CArCWpB,EAAY,6BAAZA,EAAYqB,QAAZrB,EAAYsB,UAAAC,WAFX,MAAM,CAAA,SAEPvB,CAAY,GAAA,ECAlB,IAAMwB,EAAiB,OAYjBC,EAA0B,CACrCC,gBAAiB,GACjBC,KAAM,KACNC,cAAe,GACfC,UAAW,GACXC,SAAU,GACVC,cAAe,GACfC,cAAe,SAGJC,EAAUC,EACrBT,EACAU,EAAeC,EAAYC,GAClBC,EAAAC,EAAA,GACFF,GADE,CAELP,SAAU,GACVF,cAAe,GACfC,UAAW,IAEd,EACDM,EAAeK,EAAe,CAACH,EAAO,CAACV,KAAAA,CAAI,IAAK,CAC9C,IAAMc,EAAe,IAAIC,EACzBD,OAAAA,EAAaE,SAASF,EAAaG,WAAW,EACvCN,EAAAC,EAAA,GACFF,GADE,CAELV,KAAAA,EACAD,gBAAiB,GACjBI,SAAU,GACVF,cAAe,GACfC,UAAW,IAEf,CAAC,EACDM,EAAeU,EAAY,CAACR,EAAO,CAACS,MAAAA,CAAK,IAChCR,EAAAC,EAAA,GACFF,GADE,CAELX,gBAAgB,GAChBI,SAAU,GACVF,cAAekB,EACfjB,UAAW,IAEd,EACDM,EAAeY,EAAQ,CAACV,EAAO,CAACS,MAAAA,CAAK,IAC5BR,EAAAC,EAAA,GACFd,GADE,CAELG,cAAekB,GAElB,EACDX,EAAea,EAAY,CAACX,EAAO,CAACS,MAAAA,CAAK,IAChCR,EAAAC,EAAA,GACFd,GADE,CAELG,cAAekB,GAElB,EACDX,EAAec,EAAgB,CAACZ,EAAO,CAACL,cAAAA,CAAa,IAC5CM,EAAAC,EAAA,GACFF,GADE,CAELL,cAAAA,GAEH,EACDG,EAAee,EAAY,CAACb,EAAO,CAACV,KAAAA,CAAI,IAC/BW,EAAAC,EAAA,GACFF,GADE,CAELV,KAAAA,GAEH,EACDQ,EAAegB,EAAmB,CAACd,EAAO,CAACe,MAAAA,CAAK,IAAK,CACnD,IAAIC,EAASC,gBAAgBjB,CAAK,EAClCgB,OAAAA,EAAO1B,KAAM4B,QAAQH,CAAK,EAAI,GACvBC,CACT,CAAC,EACDlB,EAAeqB,EAA4B,CAACnB,EAAO,CAACoB,SAAAA,CAAQ,IAAK,CAC/D,IAAIJ,EAASC,gBAAgBjB,CAAK,EAClCgB,OAAAA,EAAO1B,KAAM+B,iBAAmBJ,gBAAgBG,CAAQ,EACjDJ,CACT,CAAC,EACDlB,EAAewB,EAAsB,CAACtB,EAAO,CAACuB,WAAAA,CAAU,IAAK,CAC3D,IAAIP,EAASC,gBAAgBjB,CAAK,EAClCgB,OAAAA,EAAO1B,KAAMiC,WAAaA,EACnBP,CACT,CAAC,EACDlB,EAAe0B,EAAgBxB,IACzBA,EAAMV,MAAMmC,QAAU,UACxBC,OAAOC,KAAK,cAAe,QAAQ,EACnCD,OAAOC,KAAK,cAAe,QAAQ,EACnCD,OAAOC,KAAK,iBAAkB,QAAQ,EACtCD,OAAOC,KAAK,UAAW,QAAQ,EAC/BD,OAAOC,KAAK,aAAc,QAAQ,GAE7B3B,EACR,EACDF,EAAe8B,EAAkB5B,GAAS,CACxC,IAAIgB,EAASC,gBAAgBjB,CAAK,EAClCgB,OAAAA,EAAO1B,KAAMI,cAAgB,GACtBsB,CACT,CAAC,CAAC,EAGSa,EAAcC,EAAc,CACvCC,KAAM5C,EACNS,QAAAA,EACAoC,eAAgBA,CAAC,CAACC,sBAAAA,EAAuBC,gBAAAA,EAAiBC,WAAAA,CAAU,KAAO,CACzEC,WAAYC,EACVH,EACClC,GAAUA,EAAMX,eAAe,EAElCiD,QAASD,EACPH,EACClC,GAAUA,EAAML,aAAa,IAGnC,EAEY,CACXyC,WAAAA,EACAE,QAAAA,EACAH,WAAAA,CAAU,EACRN","debug_id":"a882c4ff-52ee-54e5-8478-e342eb6229ff"}