{"version":3,"sources":["helpers/session.helpers.ts","routes/PrivateRoute.tsx","store/ui/uiActions.ts","store/ui/uiReducer.ts","store/index.ts","configureStore.ts","helpers/mui.helpers.ts","components/Global/PageTransitionSpinner.tsx","routes/TokenRoute.tsx","AppRouter.tsx","App.tsx","index.tsx","store/ui/uiTypes.ts","helpers/requests/makeApiCall.ts","helpers/requests/login.ts","helpers/requests/dashboard.ts","helpers/requests/smartmail.ts","helpers/data.helpers.ts"],"names":["initSessionOnLoginRequest","loginResult","successCallback","failureCallback","success","updatedSession","sessionUser","user","fileLocations","length","curFileLoc","location","currentFileLocation","reportLocations","curReportLoc","currentReportLocation","systemFiles","file_no","currentSystemFile","sessionService","saveUser","then","saveSession","connect","state","isAuthed","session","authenticated","children","redirect","routeProps","to","showReadOnly","show","action","UIActionTypes","SHOW_READ_ONLY_POPUP","togglePOSLogin","isFromPos","TOGGLE_POS_LOGIN","initialState","showReadOnlyPopup","posLogin","uiReducer","type","payload","createRootReducer","combineReducers","sessionReducer","ui","configureStore","composeEnhancers","composeWithDevTools","sagaMiddleware","createSagaMiddleware","persistedReducer","persistReducer","key","storage","store","createStore","applyMiddleware","persistor","persistStore","defaultTheme","createMuiTheme","customTheme","palette","background","default","primary","main","secondary","overrides","MuiRadio","root","color","fill","hover","MuiCheckbox","MuiChip","deleteIcon","marginLeft","spacing","useStyles","makeStyles","container","width","height","position","top","left","zIndex","display","justifyContent","alignItems","progress","strokeWidth","PageTransitionSpinner","classes","className","CircularProgress","size","useState","routeComponent","setRouteComponent","AuthorizedRoute","PrivateRoute","tokenLogin","loginRequests","params","URLSearchParams","useLocation","search","token","get","fromPOS","dispatch","useDispatch","useEffect","a","tokenResult","Login","lazy","DefaultLayoutRoute","HomeRouteComponent","DashboardRoute","SmartMailRoute","AppRouter","fallback","exact","path","PageComponent","isPrivate","component","initalApplicationState","initSessionService","refreshOnCheckAuth","redirectPath","driver","App","loading","ThemeProvider","theme","titleTemplate","defaultTitle","name","content","rel","href","CssBaseline","data-testid","ReactDOM","render","document","getElementById","getHeaders","config","headers","localDateTime","moment","format","loadSession","catch","currentSession","Authorization","Location","ReportLocation","SystemFile","mergedHeaders","console","error","makeApiCall","url","defaultConfig","method","data","baseURL","process","responseType","timeout","mergedConfig","axios","res","err","response","request","message","userLogin","dashboardRequests","getDashboardDetails","getDashboardModuleDataByID","moduleID","saveDashboardConfig","moduleConfig","smartMailRequests","getPackagesAndMemberships","getPackages","getMemberships","getSalesCodes","getSalesCodeProducts","getSalesCodeServices","getClientCount","getSmartMailFile","checked","invalid","email","emp_code","reportPermissions","permissions","dashboardChartItems","dashboardFigureItems","dashboardTickerItems","dashboardNonPieItems","empChartModules","defaultDashboardReportItem","reportTitle","displayType","chartSettings","chartType","itemsToDisplay","sortDirection","displayAll","labelPreference","layoutSettings","columnSize","order","defaultDashboardFigureItem","constructModuleSelectList","modules","selectListItems","forEach","mod","includes","module_id","baseTickerConfig","isChartable","isGridable","isFigureable","isRankable","report","tickerIndex","push","title","group","groupTitle","rankRequestFunction","module_title","module_order","module_group","group_name","replace","importOldDashboardSettings","convertedModules","tempOrder","cur_display","defaultSettings"],"mappings":"yLAKaA,EAA4B,SACrCC,EACAC,EACAC,GACQ,IAAD,IACP,GAAKF,EAAYG,QAAjB,CAMA,IAAMC,EAAc,eAAQJ,GACtBK,EAAwB,eAAQD,EAAeE,MAErD,UAAID,QAAJ,IAAIA,GAAJ,UAAIA,EAAaE,qBAAjB,aAAI,EAA4BC,OAAQ,CAAC,IACnBC,EAAeJ,EAAYE,cAAc,GAAnDG,SACRL,EAAYM,oBAAsBF,EAGtC,UAAIJ,QAAJ,IAAIA,OAAJ,EAAIA,EAAaO,gBAAgBJ,OAAQ,CAAC,IACpBK,EAAiBR,EAAYO,gBAAgB,GAAvDF,SACRL,EAAYS,sBAAwBD,EAGxC,UAAIR,QAAJ,IAAIA,GAAJ,UAAIA,EAAaU,mBAAjB,aAAI,EAA0BP,OAAQ,CAAC,IAC3BQ,EAAYX,EAAYU,YAAY,GAApCC,QACRX,EAAYY,kBAAoBD,EAIpCZ,EAAeE,KAAOD,EAGtBa,iBAAeC,SAASd,GAAae,MAAK,WACtCF,iBAAeG,YAAYjB,GAAgBgB,MAAK,WAE7B,OAAfnB,QAAe,IAAfA,kBA9BW,OAAfC,QAAe,IAAfA,S,4ECWOoB,iBAJS,SAACC,GACrB,MAAO,CAAEC,SAAUD,EAAME,QAAQC,iBAGtBJ,EARmC,SAAC,GAAgE,IAA9DE,EAA6D,EAA7DA,SAAUG,EAAmD,EAAnDA,SAAmD,IAAzCC,gBAAyC,MAA9B,SAA8B,EAAjBC,EAAiB,kDAC9G,OAAOL,EAAW,kBAAC,IAAUK,EAAaF,GAAoB,kBAAC,IAAD,CAAUG,GAAIF,Q,iCCfhF,wFAKaG,EAAe,SAACC,GAAD,OAA2BC,iBAAOC,IAAcC,qBAAsBH,IACrFI,EAAiB,SAACC,GAAD,OAAgCJ,iBAAOC,IAAcI,iBAAkBD,K,yPCH/FE,EAAwB,CAC1BC,mBAAmB,EACnBC,UAAU,GAeCC,EAZqB,WAAmC,IAAlCnB,EAAiC,uDAAzBgB,EAAcN,EAAW,uCAClE,OAAQA,EAAOU,MACX,KAAKT,IAAcC,qBACf,OAAO,2BAAKZ,GAAZ,IAAmBiB,kBAAmBP,EAAOW,UACjD,KAAKV,IAAcI,iBACf,OAAO,2BAAIf,GAAX,IAAkBkB,SAAUR,EAAOW,UACvC,QACI,OAAOrB,ICENsB,EAAoB,kBAC7BC,0BAAgB,CACZrB,QAASsB,iBACTC,GAAIN,KCgBGO,EAxBQ,SAACV,GAEpB,IAAMW,EAAmBC,8BAAoB,IAEvCC,EAAiBC,cAGjBC,EAAmBC,YACrB,CACIC,IAAK,WACLC,aAEJZ,KAIEa,EAAQC,sBAAYL,EAAkBf,EAAcW,EAAiBU,0BAAgBR,KAK3F,MAAO,CAAEM,QAAOG,UAJEC,YAAaJ,K,QC3B7BK,EAAeC,cA+CNC,EA7CYD,YAAe,CACtCE,QAAS,CACLC,WAAY,CACRC,QAAS,QAEbC,QAAS,CACLC,KAAM,WAEVC,UAAW,CACPD,KAAM,YAGdE,UAAW,CACPC,SAAU,CACNC,KAAM,CACF,gBAAiB,CACbC,MAAOZ,EAAaG,QAAQG,QAAQC,KACpCM,KAAMb,EAAaG,QAAQG,QAAQC,MAEvC,0BAA2B,CACvBK,MAAOZ,EAAaG,QAAQjC,OAAO4C,MACnCD,KAAMb,EAAaG,QAAQjC,OAAO4C,SAI9CC,YAAa,CACTJ,KAAM,CACF,gBAAiB,CACbC,MAAOZ,EAAaG,QAAQG,QAAQC,KACpCM,KAAMb,EAAaG,QAAQG,QAAQC,MAEvC,0BAA2B,CACvBK,MAAOZ,EAAaG,QAAQjC,OAAO4C,MACnCD,KAAMb,EAAaG,QAAQjC,OAAO4C,SAI9CE,QAAS,CACLC,WAAY,CACRC,WAAYlB,EAAamB,QAAQ,S,yBCvC3CC,EAAYC,aAAW,iBAAO,CAChCC,UAAW,CACPC,MAAO,QACPC,OAAQ,QACRC,SAAU,QACVrB,WAAY,OACZsB,IAAK,EACLC,KAAM,EACNC,OAAQ,IACRC,QAAS,OACTC,eAAgB,SAChBC,WAAY,UAEhBC,SAAU,CACN,WAAY,CACRC,YAAa,YAcVC,EATyB,WACpC,IAAMC,EAAUf,IAChB,OACI,yBAAKgB,UAAWD,EAAQb,WACpB,kBAACe,EAAA,EAAD,CAAkBzB,MAAM,UAAU0B,KAAK,QAAQF,UAAWD,EAAQH,a,0ECyC/DzE,eAJS,SAACC,GACrB,MAAO,CAAEC,SAAUD,EAAME,QAAQC,iBAGtBJ,EAnD+B,SAAC,GAAgE,IAA9DE,EAA6D,EAA7DA,SAAUG,EAAmD,EAAnDA,SAAmD,IAAzCC,gBAAyC,MAA9B,SAA8B,EAAjBC,EAAiB,oDAE9DyE,mBAA8B,MAFgC,mBAEnGC,EAFmG,KAEnFC,EAFmF,KAGpGC,EAAkB,kBAAM,kBAACC,EAAA,EAAiB7E,EAAaF,IACrDgF,EAAeC,IAAfD,WACFE,EAAS,IAAIC,gBAAgBC,cAAcC,QAC3CC,EAAQJ,EAAOK,IAAI,UAAY,GAC/BC,EAAUN,EAAOK,IAAI,iBAAmB,GAExCE,EAAWC,cAmCjB,OA9BAC,qBAAU,WACN,sBAAC,4BAAAC,EAAA,0DAGO/F,GAAayF,EAHpB,uBAIOT,EAAkB,kBAACC,EAAD,OAJzB,6BASQjF,GAAayF,EATrB,uBAUOT,EAAkB,kBAAC,IAAD,CAAU1E,GAAIF,KAVvC,0CAc6B+E,EAAW,CAAEM,UAd1C,OAcSO,EAdT,OAgBGzH,YACIyH,GACA,WAtBRJ,EAAShF,YAA2B,SAAZ+E,IAwBZX,EAAkB,kBAACC,EAAD,UAEtB,WACID,EAAkB,kBAAC,IAAD,CAAU1E,GAAIF,QAvB3C,2CAAD,KA2BD,CAACJ,IAEG,oCAAG+E,MCxDRkB,EAAQC,gBAAK,kBAAM,gEACnBC,EAAqBD,gBAAK,kBAAM,wEAChCE,EAAqBF,gBAAK,kBAAM,mCAChCG,EAAiBH,gBAAK,kBAAM,6EAC5BI,EAAiBJ,gBAAK,kBAAM,6EAoBnBK,EAlBa,WACxB,OACI,kBAAC,WAAD,CAAUC,SAAU,kBAAC,EAAD,OAChB,kBAAC,IAAD,KACI,kBAACL,EAAD,CAAoBM,OAAK,EAACC,KAAK,IAAIC,cAAeP,EAAoBQ,WAAS,IAC/E,kBAAC,EAAD,CAAYH,OAAK,EAACC,KAAK,cACnB,kBAACL,EAAD,OAEJ,kBAAC,EAAD,CAAYI,OAAK,EAACC,KAAK,eACnB,kBAACJ,EAAD,OAEJ,kBAAC,IAAD,CAAOG,OAAK,EAACC,KAAK,SAASG,UAAWZ,IACtC,kBAAC,IAAD,CAAOY,UAAWZ,IATtB,O,ECDiBxE,E,MAAeqF,GAApC5E,E,EAAAA,MAAOG,E,EAAAA,UAGf3C,iBAAeqH,mBAAmB7E,EAAO,CACrC8E,oBAAoB,EACpBC,aAAc,QACdC,OAAQ,iBAGZ,IAkCeC,GAlCO,WAClB,OACI,kBAAC,IAAD,CAAUjF,MAAOA,GACb,kBAAC,IAAD,CAAakF,QAAS,KAAM/E,UAAWA,GACnC,kBAAC,IAAD,KACI,kBAAC,IAAD,KACI,kBAACgF,EAAA,EAAD,CAAeC,MAAOA,GAClB,kBAAC,IAAD,KACI,kBAAC,IAAD,CACIC,cAAc,8BACdC,aAAa,0BAEb,0BAAMC,KAAK,cAAcC,QAAQ,yCACjC,0BACIC,IAAI,aACJC,KAAK,gFAET,0BACID,IAAI,aACJC,KAAK,6DAGb,kBAACC,EAAA,EAAD,MACA,kBAAC,EAAD,MACA,yBAAKC,cAAY,qBC3CjDC,IAASC,OAAO,kBAAC,GAAD,MAASC,SAASC,eAAe,U,gCCE1C,IAAKxH,EANZ,kC,SAMYA,K,4CAAAA,E,qCAAAA,M,yNCANyH,EAAU,uCAAG,WAAOC,GAAP,mBAAArC,EAAA,uEAELsC,EAA0B,IACxB,gBAAkB,mBAC1BA,EAAQC,cAAgBC,MAASC,OAAO,2BAJ7B,SAMkC9I,iBACxC+I,cACA7I,MAAK,SAACK,GACH,OAAOA,KAEVyI,OAAM,kBAAM,QAXN,cAMLC,EANK,UAcPN,EAAQO,cAAR,iBAAkCD,EAAelD,OACjD4C,EAAQQ,SAAWF,EAAe7J,KAAKK,oBACvCkJ,EAAQS,eAAiBH,EAAe7J,KAAKQ,sBAC7C+I,EAAQU,WAAaJ,EAAe7J,KAAKW,mBAGvCuJ,EApBK,2BAoBgBX,GApBhB,OAoB4BD,QApB5B,IAoB4BA,OApB5B,EAoB4BA,EAAQC,SApBpC,kBAsBJW,GAtBI,yCAwBXC,QAAQC,MAAR,MAxBW,wCAyBCd,QAzBD,IAyBCA,OAzBD,EAyBCA,EAAQC,UAzBT,0DAAH,sDA6BHc,EAAW,uCAAG,WAAOC,EAAahB,GAApB,mBAAArC,EAAA,6DACjBsD,EAAoC,CACtCC,OAAQ,MACRC,KAAM,KACNC,QAASC,iCACTpB,QAAS,CAAE,mBAAoB,kBAC/BqB,aAAc,OACdC,QAAS,KAPU,SASDxB,EAAWC,GATV,cASjBC,EATiB,OAUjBuB,EAViB,uCAUGP,GAAkBjB,GAVrB,IAU6BgB,MAAKf,YAVlC,kBAYhBwB,IAAMD,GACRhK,MAAK,SAACkK,GACH,OAAOA,EAAIP,QAEdb,OAAM,SAACqB,GASJ,OARIA,EAAIC,SACJf,QAAQC,MAAR,yCAAgDa,EAAIC,WAC7CD,EAAIE,QACXhB,QAAQC,MAAR,sCAA6Ca,EAAIE,UAEjDhB,QAAQC,MAAR,mCAA0Ca,EAAIG,UAG3CH,MAzBQ,2CAAH,wDCxBX3E,EAAgB,CACzB+E,UATW,uCAAG,WAAOZ,GAAP,SAAAxD,EAAA,+EACPoD,EAAY,gBAAiB,CAAEG,OAAQ,OAAQC,UADxC,2CAAH,sDAUXpE,WANY,uCAAG,WAAOoE,GAAP,SAAAxD,EAAA,+EACRoD,EAAY,gBAAiB,CAAEG,OAAQ,OAAQC,UADvC,2CAAH,uDCSHa,EAAoB,CAC7BC,oBAbqB,uCAAG,sBAAAtE,EAAA,+EACjBoD,EAAY,cADK,2CAAH,qDAcrBmB,2BAV4B,uCAAG,WAAOC,GAAP,SAAAxE,EAAA,+EACxBoD,EAAY,qBAAD,OAAsBoB,EAAtB,WADa,2CAAH,sDAW5BC,oBAPqB,uCAAG,WAAOC,GAAP,SAAA1E,EAAA,+EACjBoD,EAAY,uBAAwB,CAACG,OAAQ,OAAQC,KAAMkB,KAD1C,2CAAH,uDCiCZC,EAAoB,CAC7BC,0BAtC2B,uCAAG,sBAAA5E,EAAA,+EACvBoD,EAAY,iCADW,2CAAH,qDAuC3ByB,YAlCa,uCAAG,sBAAA7E,EAAA,+EACToD,EAAY,uBADH,2CAAH,qDAmCb0B,eA9BgB,uCAAG,sBAAA9E,EAAA,+EACZoD,EAAY,0BADA,2CAAH,qDA+BhB2B,cA1Be,uCAAG,sBAAA/E,EAAA,+EACXoD,EAAY,yBADD,2CAAH,qDA2Bf4B,qBAtBsB,uCAAG,sBAAAhF,EAAA,+EAClBoD,EAAY,gCADM,2CAAH,qDAuBtB6B,qBAlBsB,uCAAG,sBAAAjF,EAAA,+EAClBoD,EAAY,gCADM,2CAAH,qDAmBtB8B,eAfgB,uCAAG,WAAO1B,GAAP,SAAAxD,EAAA,+EACZoD,EAAY,kBAAmB,CAAEG,OAAQ,OAAQC,UADrC,2CAAH,sDAgBhB2B,iBAZkB,uCAAG,WAAO3B,GAAP,SAAAxD,EAAA,+EACdoD,EAAY,iBAAkB,CAAEG,OAAQ,OAAQC,OAAMG,aAAc,UADtD,2CAAH,wD,uPCnBT5C,EAA2C,CACpD7G,QAAS,CACLC,eAAe,EACfiL,SAAS,EACTC,SAAS,EACTtM,KAlBwB,CAC5BuM,MAAO,GACPC,SAAU,GACVlM,gBAAiB,GACjBL,cAAe,GACfwM,kBAAmB,GACnBC,YAAa,GACbjM,YAAa,GACbJ,oBAAqB,EACrBG,sBAAuB,EACvBG,kBAAmB,IAUnB+B,GAAI,CACAR,mBAAmB,EACnBC,UAAU,IAQLwK,EAAsB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAC1FC,EAAuB,CAAC,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,IAC5CC,EAAuB,CAAC,GAAI,IAC5BC,EAAuB,CAAC,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,IAC5CC,EAAkB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGvCC,EAAwD,CACjEvB,SAAU,EACVwB,YAAa,GACbC,YAAa,QACbC,cAAe,CACXC,UAAW,MACXC,eAAgB,GAChBC,cAAe,MACfC,YAAY,EACZC,gBAAiB,QAErBC,eAAgB,CACZC,WAAY,GACZC,MAAO,IAIFC,EAAwD,CACjEnC,SAAU,EACVwB,YAAa,oBACbC,YAAa,SACbC,cAAe,CACXC,UAAW,MACXC,eAAgB,GAChBC,cAAe,MACfC,YAAY,EACZC,gBAAiB,QAErBC,eAAgB,CACZC,WAAY,EACZC,MAAO,IAKFE,EAA4B,SAACC,GACtC,IAAMC,EAA+C,GA+CrD,OA7CAD,EAAQE,SAAQ,SAACC,GAEb,GAAKpB,EAAqBqB,SAASD,EAAIE,WAYhC,CACH,IAAMC,EAAmB,CACrBT,MAAO,EACPU,aAAa,EACbC,YAAY,EACZC,cAAc,EACdC,YAAY,GAGM,CAClB,gBACA,gBACA,cACA,YACA,aACA,cAGUR,SAAQ,SAACS,EAAQC,GAC3BX,EAAgBY,KAAhB,2BACOP,GADP,IAEIQ,MAAOH,EACPhD,SAAUwC,EAAIE,UACdU,MAAyB,KAAlBZ,EAAIE,UAAmB,GAAK,GACnCW,WAA8B,KAAlBb,EAAIE,UAAmB,qBAAuB,qBAC1DY,oBAAoB,GAAD,OAAKd,EAAIE,UAAT,YAAsBO,EAAc,aArChB,CAAC,IAAD,EAC/CX,EAAgBY,KAAK,CACjBC,MAAOX,EAAIe,aACXvD,SAAUwC,EAAIE,UACdR,MAAOM,EAAIgB,aACXJ,MAAOZ,EAAIiB,aACXJ,WAAU,UAAEb,EAAIkB,kBAAN,aAAE,EAAgBC,QAAQ,SAAU,IAC9Cf,YAAa1B,EAAoBuB,SAASD,EAAIE,WAC9CG,WAAY3B,EAAoBuB,SAASD,EAAIE,WAC7CI,aAAc3B,EAAqBsB,SAASD,EAAIE,WAChDK,YAAY,QAiCjBT,GAGEsB,EAA6B,SAACvB,GACvC,IAAMwB,EAAgD,GAClDC,EAAY,EAuBhB,OArBAzB,EAAQE,SAAQ,SAACC,GAEb,GAAwB,IAApBA,EAAIuB,cAAsB3C,EAAqBqB,SAASD,EAAIE,WAAY,CACxE,IAAMsB,EAAkB7C,EAAqBsB,SAASD,EAAIE,WACpDP,EACAZ,EAENsC,EAAiBX,KAAjB,2BACOc,GADP,IAEIxC,YAAagB,EAAIe,aACjBvD,SAAUwC,EAAIE,UACdV,eAAgB,CACZC,WAAYf,EAAoBuB,SAASD,EAAIE,WAAa,EAAI,EAC9DR,MAAO4B,EAAY,MAI3BA,GAAa,MAIdD,K","file":"static/js/main.403c3349.chunk.js","sourcesContent":["/* eslint-disable camelcase, import/prefer-default-export */\nimport { sessionService } from 'redux-react-session';\nimport { LoginRequestResult, SessionUser } from './type.helpers';\n\n// TODO: There currently exists an edge case in TS that prevents it from correctly inferring types on certian exports. In later version updates, attempt to convert this to a default export\nexport const initSessionOnLoginRequest = (\n loginResult: LoginRequestResult,\n successCallback?: () => void,\n failureCallback?: () => void\n): void => {\n if (!loginResult.success) {\n failureCallback?.();\n return;\n }\n\n // temp vars for updating session\n const updatedSession = { ...loginResult };\n const sessionUser: SessionUser = { ...updatedSession.user };\n\n if (sessionUser?.fileLocations?.length) {\n const { location: curFileLoc } = sessionUser.fileLocations[0];\n sessionUser.currentFileLocation = curFileLoc;\n }\n\n if (sessionUser?.reportLocations.length) {\n const { location: curReportLoc } = sessionUser.reportLocations[0];\n sessionUser.currentReportLocation = curReportLoc;\n }\n\n if (sessionUser?.systemFiles?.length) {\n const { file_no } = sessionUser.systemFiles[0];\n sessionUser.currentSystemFile = file_no;\n }\n\n // set new session user\n updatedSession.user = sessionUser;\n\n // push\n sessionService.saveUser(sessionUser).then(() => {\n sessionService.saveSession(updatedSession).then(() => {\n // do something after init (reroute, update etc.)\n successCallback?.();\n });\n });\n};\n","/* eslint-disable react/jsx-props-no-spreading */\nimport React from 'react';\nimport { connect } from 'react-redux';\nimport { Route, Redirect, RouteProps } from 'react-router-dom';\nimport { ApplicationState } from '../helpers/type.helpers';\n\ninterface PrivateRouteProps extends RouteProps, StateProps {\n redirect?: string;\n}\n\ninterface StateProps {\n isAuthed: boolean;\n}\n\nconst PrivateRoute: React.FC = ({ isAuthed, children, redirect = '/login', ...routeProps }) => {\n return isAuthed ? {children} : ;\n};\n\nconst mapStateToProps = (state: ApplicationState): StateProps => {\n return { isAuthed: state.session.authenticated };\n};\n\nexport default connect(mapStateToProps)(PrivateRoute);\n","/* eslint-disable import/prefer-default-export */\nimport { action } from 'typesafe-actions';\nimport { Action } from 'redux';\nimport { UIActionTypes } from './uiTypes';\n\nexport const showReadOnly = (show: boolean): Action => action(UIActionTypes.SHOW_READ_ONLY_POPUP, show);\nexport const togglePOSLogin = (isFromPos: boolean): Action => action(UIActionTypes.TOGGLE_POS_LOGIN, isFromPos);\n","import { Reducer } from 'redux';\nimport { UIActionTypes, UIState } from './uiTypes';\n\nconst initialState: UIState = {\n showReadOnlyPopup: false,\n posLogin: false,\n};\n\nconst uiReducer: Reducer = (state = initialState, action) => {\n switch (action.type) {\n case UIActionTypes.SHOW_READ_ONLY_POPUP:\n return { ...state, showReadOnlyPopup: action.payload };\n case UIActionTypes.TOGGLE_POS_LOGIN: \n return {...state, posLogin: action.payload };\n default: {\n return state;\n }\n }\n};\n\nexport default uiReducer;\n","import { combineReducers, Reducer } from 'redux';\nimport { sessionReducer } from 'redux-react-session';\nimport { SessionUser } from '../helpers/type.helpers';\nimport uiReducer from './ui/uiReducer';\n\n// The top-level state object\nexport interface ApplicationState {\n session: SessionReducer;\n}\n\nexport interface SessionReducer {\n authenticated: boolean;\n checked: boolean;\n invalid: boolean;\n user: SessionUser | null;\n}\n\nexport const createRootReducer = (): Reducer =>\n combineReducers({\n session: sessionReducer,\n ui: uiReducer\n });\n\nexport default {\n createRootReducer\n};\n","import { createStore, applyMiddleware, Store } from 'redux';\nimport createSagaMiddleware from 'redux-saga';\nimport { composeWithDevTools } from 'redux-devtools-extension';\nimport { persistStore, persistReducer, Persistor } from 'redux-persist';\nimport storage from 'redux-persist/lib/storage';\nimport { createRootReducer, ApplicationState } from './store';\n\ninterface StoreAndPersistor {\n store: Store;\n persistor: Persistor;\n}\n\nconst configureStore = (initialState?: ApplicationState): StoreAndPersistor => {\n // create the composing function for our middlewares\n const composeEnhancers = composeWithDevTools({});\n // create the redux-saga middleware\n const sagaMiddleware = createSagaMiddleware();\n\n // add root level to persist\n const persistedReducer = persistReducer(\n {\n key: 'appState',\n storage\n },\n createRootReducer()\n );\n\n // create the store\n const store = createStore(persistedReducer, initialState, composeEnhancers(applyMiddleware(sagaMiddleware)));\n const persistor = persistStore(store);\n\n // Don't forget to run the root saga, and return the store object.\n // sagaMiddleware.run(rootSaga);\n return { store, persistor };\n};\n\nexport default configureStore;\n","import { createMuiTheme, Theme } from '@material-ui/core';\n\nconst defaultTheme = createMuiTheme();\n\nconst customTheme: Theme = createMuiTheme({\n palette: {\n background: {\n default: '#fff'\n },\n primary: {\n main: '#1f4f8b'\n },\n secondary: {\n main: '#e3edf9'\n }\n },\n overrides: {\n MuiRadio: {\n root: {\n '&$checked svg': {\n color: defaultTheme.palette.primary.main,\n fill: defaultTheme.palette.primary.main\n },\n '&$disabled&$checked svg': {\n color: defaultTheme.palette.action.hover,\n fill: defaultTheme.palette.action.hover\n }\n }\n },\n MuiCheckbox: {\n root: {\n '&$checked svg': {\n color: defaultTheme.palette.primary.main,\n fill: defaultTheme.palette.primary.main\n },\n '&$disabled&$checked svg': {\n color: defaultTheme.palette.action.hover,\n fill: defaultTheme.palette.action.hover\n }\n }\n },\n MuiChip: {\n deleteIcon: {\n marginLeft: defaultTheme.spacing(0.5)\n }\n }\n }\n});\n\nexport default customTheme;\n","import React from 'react';\nimport { CircularProgress } from '@material-ui/core';\nimport { makeStyles } from '@material-ui/styles';\n\nconst useStyles = makeStyles(() => ({\n container: {\n width: '100vw',\n height: '100vh',\n position: 'fixed',\n background: '#fff',\n top: 0,\n left: 0,\n zIndex: 1000,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center'\n },\n progress: {\n '& circle': {\n strokeWidth: '1px'\n }\n }\n}));\n\nconst PageTransitionSpinner: React.FC = () => {\n const classes = useStyles();\n return (\n
\n \n
\n );\n};\n\nexport default PageTransitionSpinner;\n","/* eslint-disable react/jsx-props-no-spreading */\nimport React, { ReactElement, useEffect, useState } from 'react';\nimport { connect, useDispatch } from 'react-redux';\nimport { Redirect, RouteProps, useLocation } from 'react-router-dom';\nimport { loginRequests } from '../helpers/request.helpers';\nimport { ApplicationState } from '../helpers/type.helpers';\nimport { initSessionOnLoginRequest } from '../helpers/session.helpers';\nimport PrivateRoute from './PrivateRoute';\nimport { togglePOSLogin } from '../store/ui/uiActions';\n\ninterface TokenRouteProps extends RouteProps, StateProps {\n redirect?: string;\n}\n\ninterface StateProps {\n isAuthed: boolean;\n}\n\nconst TokenRoute: React.FC = ({ isAuthed, children, redirect = '/login', ...routeProps }) => {\n // use local state to track what type of route component to render\n const [routeComponent, setRouteComponent] = useState(null);\n const AuthorizedRoute = () => {children};\n const { tokenLogin } = loginRequests;\n const params = new URLSearchParams(useLocation().search);\n const token = params.get('token') || '';\n const fromPOS = params.get('loginFromPOS') || '';\n\n const dispatch = useDispatch();\n const setPOSFlag = (): void => {\n dispatch(togglePOSLogin(fromPOS === 'true'));\n };\n\n useEffect(() => {\n (async () => {\n // earliest return on route will be if the user is already authed via regular login and no token is present\n // fallthrough case is if a token is present, use that to override any previous session\n if (isAuthed && !token) {\n setRouteComponent();\n return;\n }\n\n // if no token is found or user is not authed, use the default redirect\n if (!isAuthed && !token) {\n setRouteComponent();\n return;\n }\n\n const tokenResult = await tokenLogin({ token });\n\n initSessionOnLoginRequest(\n tokenResult,\n () => {\n setPOSFlag();\n setRouteComponent();\n },\n () => {\n setRouteComponent();\n }\n );\n })();\n }, [isAuthed]);\n\n return <>{routeComponent};\n};\n\nconst mapStateToProps = (state: ApplicationState): StateProps => {\n return { isAuthed: state.session.authenticated };\n};\n\nexport default connect(mapStateToProps)(TokenRoute);\n","import React, { Suspense, lazy } from 'react';\nimport { Switch, Route } from 'react-router-dom';\nimport PageTransitionSpinner from './components/Global/PageTransitionSpinner';\nimport TokenRoute from './routes/TokenRoute';\n\n// dynamically imported route components\nconst Login = lazy(() => import('./routes/LoginRoute'));\nconst DefaultLayoutRoute = lazy(() => import('./routes/DefaultLayoutRoute'));\nconst HomeRouteComponent = lazy(() => import('./routes/HomeRoute/HomeRouteComponent'));\nconst DashboardRoute = lazy(() => import('./routes/Dashboard/DashboardRoute'));\nconst SmartMailRoute = lazy(() => import('./routes/SmartMailRoute/SmartMailRoute'));\n\nconst AppRouter: React.FC = () => {\n return (\n }>\n \n \n \n \n \n \n \n \n \n {/* 404 or fallback route */}\n \n \n );\n};\n\nexport default AppRouter;\n","import React from 'react';\nimport { Helmet, HelmetProvider } from 'react-helmet-async';\nimport { Provider } from 'react-redux';\nimport { BrowserRouter as Router } from 'react-router-dom';\nimport { PersistGate } from 'redux-persist/integration/react';\nimport { CssBaseline } from '@material-ui/core';\nimport { ThemeProvider } from '@material-ui/styles';\nimport { SnackbarProvider } from 'notistack';\nimport { sessionService } from 'redux-react-session';\nimport configureStore from './configureStore';\nimport theme from './helpers/mui.helpers';\nimport AppRouter from './AppRouter';\nimport { initalApplicationState } from './helpers/data.helpers';\n\nconst { store, persistor } = configureStore(initalApplicationState);\n\n// init session service\nsessionService.initSessionService(store, {\n refreshOnCheckAuth: true,\n redirectPath: 'login',\n driver: 'LOCALSTORAGE'\n});\n\nconst App: React.FC = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n );\n};\n\nexport default App;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\n\nReactDOM.render(, document.getElementById('root'));\n","/* eslint-disable import/prefer-default-export, no-shadow */\nexport interface UIReducer {\n showReadOnlyPopup: boolean;\n posLogin: boolean;\n}\n\nexport enum UIActionTypes {\n SHOW_READ_ONLY_POPUP = 'SHOW_READ_ONLY_POPUP',\n TOGGLE_POS_LOGIN = 'TOGGLE_POS_LOGIN'\n}\n\nexport interface UIState {\n readonly showReadOnlyPopup: boolean;\n readonly posLogin: boolean;\n}\n","/* eslint-disable no-console, import/prefer-default-export, @typescript-eslint/explicit-function-return-type, @typescript-eslint/explicit-module-boundary-types */\nimport axios, { AxiosRequestConfig, AxiosError } from 'axios';\nimport { sessionService } from 'redux-react-session';\nimport moment from 'moment';\nimport { SessionHeaders, CurrentSession } from '../type.helpers';\n\nconst getHeaders = async (config?: AxiosRequestConfig): Promise => {\n try {\n const headers: SessionHeaders = {};\n headers['Content-Type'] = 'application/json';\n headers.localDateTime = moment().format('YYYY-MM-DD HH:mm:ss.SSS');\n\n const currentSession: CurrentSession = await sessionService\n .loadSession()\n .then((session: CurrentSession) => {\n return session;\n })\n .catch(() => null);\n\n if (currentSession) {\n headers.Authorization = `Bearer ${currentSession.token}`;\n headers.Location = currentSession.user.currentFileLocation;\n headers.ReportLocation = currentSession.user.currentReportLocation;\n headers.SystemFile = currentSession.user.currentSystemFile;\n }\n\n const mergedHeaders = { ...headers, ...config?.headers };\n\n return mergedHeaders;\n } catch (err) {\n console.error(err);\n return { ...config?.headers };\n }\n};\n\nexport const makeApiCall = async (url: string, config?: AxiosRequestConfig) => {\n const defaultConfig: AxiosRequestConfig = {\n method: 'get',\n data: null,\n baseURL: process.env.HELIOSBO_API_URL || 'localhost',\n headers: { 'X-Requested-With': 'XMLHttpRequest' },\n responseType: 'json',\n timeout: 5000\n };\n const headers = await getHeaders(config);\n const mergedConfig = { ...defaultConfig, ...config, url, headers };\n\n return axios(mergedConfig)\n .then((res) => {\n return res.data;\n })\n .catch((err: AxiosError) => {\n if (err.response) {\n console.error(`Error in fetch, out of bounds: ${err.response}`);\n } else if (err.request) {\n console.error(`Error in fetch, no reponse: ${err.request}`);\n } else {\n console.error(`Error in fetch, message: ${err.message}`);\n }\n\n return err;\n });\n};\n","/* eslint-disable import/prefer-default-export, @typescript-eslint/explicit-function-return-type, @typescript-eslint/explicit-module-boundary-types */\nimport { makeApiCall } from './makeApiCall';\n\nconst userLogin = async (data: { email: string; password: string }) => {\n return makeApiCall('Account/Login', { method: 'post', data });\n};\n\nconst tokenLogin = async (data: { token: string }) => {\n return makeApiCall('Account/Login', { method: 'post', data });\n};\n\nexport const loginRequests = {\n userLogin,\n tokenLogin\n};\n","/* eslint-disable import/prefer-default-export, @typescript-eslint/explicit-function-return-type, @typescript-eslint/explicit-module-boundary-types */\nimport { makeApiCall } from './makeApiCall';\nimport { DashboardReportItemConfig } from '../type.helpers';\n\nconst getDashboardDetails = async () => {\n return makeApiCall('Dashboard');\n};\n\nconst getDashboardModuleDataByID = async (moduleID: number) => {\n return makeApiCall(`Dashboard/Modules/${moduleID}/Data`);\n};\n\nconst saveDashboardConfig = async (moduleConfig: DashboardReportItemConfig[]) => {\n return makeApiCall('Dashboard/UserConfig', {method: 'post', data: moduleConfig})\n}\n\nexport const dashboardRequests = {\n getDashboardDetails,\n getDashboardModuleDataByID,\n saveDashboardConfig\n};\n","/* eslint-disable import/prefer-default-export, @typescript-eslint/explicit-function-return-type, @typescript-eslint/explicit-module-boundary-types */\nimport { makeApiCall } from './makeApiCall';\nimport {\n SmartMailFileSubmission,\n SmartMailClientSubmission\n} from '../../routes/SmartMailRoute/microforms/sm-form-types.helpers';\n\n// fetch packages and memberships\nconst getPackagesAndMemberships = async () => {\n return makeApiCall('SmartMail/PackageMemberships');\n};\n\n// fetch just packages\nconst getPackages = async () => {\n return makeApiCall('SmartMail/Packages');\n};\n\n// fetch just memberships\nconst getMemberships = async () => {\n return makeApiCall('SmartMail/Memberships');\n};\n\n// fetch product and service codes\nconst getSalesCodes = async () => {\n return makeApiCall('SmartMail/SalesCodes');\n};\n\n// fetch just product codes\nconst getSalesCodeProducts = async () => {\n return makeApiCall('SmartMail/SalesCodeProducts');\n};\n\n// fetch just membership codes\nconst getSalesCodeServices = async () => {\n return makeApiCall('SmartMail/SalesCodeServices');\n};\n\nconst getClientCount = async (data: SmartMailClientSubmission) => {\n return makeApiCall('SmartMail/Count', { method: 'POST', data });\n};\n\nconst getSmartMailFile = async (data: SmartMailFileSubmission) => {\n return makeApiCall('SmartMail/File', { method: 'POST', data, responseType: 'blob' });\n};\n\nexport const smartMailRequests = {\n getPackagesAndMemberships,\n getPackages,\n getMemberships,\n getSalesCodes,\n getSalesCodeProducts,\n getSalesCodeServices,\n getClientCount,\n getSmartMailFile\n};\n","// import { dashboardRequests } from './requests/dashboard';\n\nimport {\n ApplicationState,\n DashboardReportsListItems,\n DashboardReportItemConfig,\n DashboardModuleDataResponse\n} from './type.helpers';\n\nexport const emptySessionUser = {\n email: '',\n emp_code: '',\n reportLocations: [],\n fileLocations: [],\n reportPermissions: [],\n permissions: [],\n systemFiles: [],\n currentFileLocation: 0,\n currentReportLocation: 0,\n currentSystemFile: 0\n};\n\nexport const initalApplicationState: ApplicationState = {\n session: {\n authenticated: false,\n checked: true,\n invalid: false,\n user: emptySessionUser\n },\n ui: {\n showReadOnlyPopup: false,\n posLogin: false\n }\n};\n\n// ================================================\n// ====== Dashboard Helpers\n// ================================================\n\nexport const dashboardChartItems = [3, 4, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 22, 23, 24, 25, 26, 27];\nexport const dashboardFigureItems = [1, 2, 5, 6, 17, 20, 21];\nexport const dashboardTickerItems = [28, 29];\nexport const dashboardNonPieItems = [3, 4, 7, 8, 15, 16, 18];\nexport const empChartModules = [22, 23, 24, 25, 26, 27];\n\n// default module item config\nexport const defaultDashboardReportItem: DashboardReportItemConfig = {\n moduleID: 1,\n reportTitle: '',\n displayType: 'chart',\n chartSettings: {\n chartType: 'bar',\n itemsToDisplay: 10,\n sortDirection: 'asc',\n displayAll: false,\n labelPreference: 'name'\n },\n layoutSettings: {\n columnSize: 12,\n order: 1\n }\n};\n\nexport const defaultDashboardFigureItem: DashboardReportItemConfig = {\n moduleID: 1,\n reportTitle: 'Total Sales Daily',\n displayType: 'figure',\n chartSettings: {\n chartType: 'bar',\n itemsToDisplay: 10,\n sortDirection: 'asc',\n displayAll: false,\n labelPreference: 'name'\n },\n layoutSettings: {\n columnSize: 4,\n order: 1\n }\n};\n\n// from details result construct selectable item list\nexport const constructModuleSelectList = (modules: DashboardModuleDataResponse[]): DashboardReportsListItems[] => {\n const selectListItems: DashboardReportsListItems[] = [];\n\n modules.forEach((mod) => {\n // omit ticker items\n if (!dashboardTickerItems.includes(mod.module_id)) {\n selectListItems.push({\n title: mod.module_title,\n moduleID: mod.module_id,\n order: mod.module_order,\n group: mod.module_group,\n groupTitle: mod.group_name?.replace(' Group', ''),\n isChartable: dashboardChartItems.includes(mod.module_id),\n isGridable: dashboardChartItems.includes(mod.module_id),\n isFigureable: dashboardFigureItems.includes(mod.module_id),\n isRankable: false\n });\n } else {\n const baseTickerConfig = {\n order: 1,\n isChartable: false,\n isGridable: false,\n isFigureable: false,\n isRankable: true\n };\n\n const tickerReports = [\n 'Product Sales',\n 'Service Sales',\n 'Total Sales',\n 'Daily PCA',\n 'Daily PPCA',\n 'Daily SPCA'\n ];\n\n tickerReports.forEach((report, tickerIndex) => {\n selectListItems.push({\n ...baseTickerConfig,\n title: report,\n moduleID: mod.module_id,\n group: mod.module_id === 28 ? 10 : 11,\n groupTitle: mod.module_id === 28 ? 'Ranking - Location' : 'Ranking - Employee',\n rankRequestFunction: `${mod.module_id}-${tickerIndex + 1}`\n });\n });\n }\n });\n\n return selectListItems;\n};\n\nexport const importOldDashboardSettings = (modules: DashboardModuleDataResponse[]): DashboardReportItemConfig[] => {\n const convertedModules: DashboardReportItemConfig[] = [];\n let tempOrder = 0;\n\n modules.forEach((mod) => {\n // if the module is enabled via old back office, push it to the new config\n if (mod.cur_display === 1 && !dashboardTickerItems.includes(mod.module_id)) {\n const defaultSettings = dashboardFigureItems.includes(mod.module_id)\n ? defaultDashboardFigureItem\n : defaultDashboardReportItem;\n // spread default configuration, replacing only the module ID and title\n convertedModules.push({\n ...defaultSettings,\n reportTitle: mod.module_title,\n moduleID: mod.module_id,\n layoutSettings: {\n columnSize: dashboardChartItems.includes(mod.module_id) ? 6 : 4, // set charts to a default of half, figures to 1/3\n order: tempOrder + 1 // for the initial import, set the order to index + 1\n }\n });\n\n tempOrder += 1;\n }\n });\n\n return convertedModules;\n};"],"sourceRoot":""}