{"version":3,"sources":["pages/home/features/navigation-bar/images/wetuLogo-inverted.png","pages/home/features/navigation-bar/images/icon_contact.svg","components/toast/toast.slice.ts","api/account.service.ts","api/refreshToken.service.ts","slices/authentication.slice.ts","slices/account.slice.ts","app/root-reducer.ts","app/store.ts","pages/dashboard/dashboard.page.tsx","pages/client-management/table/account-table.tsx","pages/client-management/client-management.page.tsx","pages/personal-details/personal-details.page.tsx","pages/organisation-details/organisation-details.page.tsx","pages/user-management/table/user-table.tsx","pages/user-management/user-management.page.tsx","pages/settings/settings.page.tsx","pages/account-history/account-history.page.tsx","pages/home/features/logout-button.tsx","pages/home/features/navigation-bar/navigation-bar.tsx","pages/home/home.page.tsx","pages/login/login.page.tsx","components/toast/toast.tsx","components/private-route.tsx","app/App.tsx","index.tsx"],"names":["module","exports","toastSlice","createSlice","name","initialState","show","title","message","reducers","showGlobalToast","state","action","payload","hideGlobalToast","actions","baseProfileUrl","logout","a","axios","post","withCredentials","getAccounts","get","getUsers","accountId","refreshToken","baseRefreshUrl","createAsyncThunk","arg","rejectWithValue","api_logout","catch","err","console","log","dispatch","api_refreshToken","then","authentication","showLoginPage","username","isAdmin","userPhotoURL","setStateFromWetuIdToken","role","toLowerCase","redirectToLoginPage","extraReducers","builder","addCase","fulfilled","api_getAccounts","response","data","status","api_getUsers","accounts","users","loading","pending","rootReducer","combineReducers","toast","account","store","configureStore","reducer","DashboardPage","Container","AccountTable","useDispatch","useSelector","history","useHistory","useEffect","Table","striped","bordered","hover","map","i","key","onClick","push","id","tier","type","userCount","verified","dayjs","lastLogin","toString","ClientManagementPage","PersonalDetailsPage","OrganisationDetailsPage","UserTable","useParams","user","surname","email","emailVerified","UserManagementPage","SettingsPage","AccountHistoryPage","LogoutButton","Fragment","Button","e","NavigationBar","Navbar","bg","variant","Brand","href","Image","alt","src","require","roundedCircle","className","HomePage","routes","label","path","component","default","hidden","subRoutes","fluid","Row","Col","md","ListGroup","route","Accordion","as","Item","defaultActiveKey","Toggle","Form","Label","eventKey","Collapse","subRoute","b","to","exact","children","from","find","x","LoginPage","window","location","assign","Toaster","Toast","onClose","delay","autohide","Header","Body","PrivateRoute","Component","rest","render","props","App","cookies","document","cookie","split","forEach","el","value","trim","jwt_decode","ReactDOM","getElementById"],"mappings":"sNAAAA,EAAOC,QAAU,0mE,mBCAjBD,EAAOC,QAAU,IAA0B,0C,6ICSrCC,EAAaC,YAAY,CAC3BC,KAAM,QACNC,aARiB,CACnBC,MAAM,EACNC,MAAO,GACPC,QAAS,IAMPC,SAAU,CACRC,gBADQ,SACQC,EAAOC,GACrBD,EAAML,MAAO,EACbK,EAAMH,QAAUI,EAAOC,QAAQL,QAC/BG,EAAMJ,MAAQK,EAAOC,QAAQN,OAE/BO,gBANQ,SAMQH,GACdA,EAAML,MAAO,EACbK,EAAMH,QAAU,GAChBG,EAAMJ,MAAQ,O,EAQlBL,EAAWa,QADbD,G,EADAJ,gB,EACAI,iBAGaZ,IAAf,Q,yCC5BMc,EAAiB,mDAEVC,EAAM,uCAAG,sBAAAC,EAAA,+EACbC,IAAMC,KAAKJ,EAAiB,SAAU,GAAI,CAC/CK,iBAAiB,KAFC,2CAAH,qDAMNC,EAAW,uCAAG,sBAAAJ,EAAA,+EAChBC,IAAMI,IAAoBP,EAAiB,cAAe,CAAEK,iBAAiB,KAD7D,2CAAH,qDAIXG,EAAQ,uCAAG,WAAOC,GAAP,SAAAP,EAAA,+EACfC,IAAMI,IAAiBP,EAAc,6BAAyBS,GAAa,CAAEJ,iBAAiB,KAD/E,2CAAH,sDCXRK,EAAY,uCAAG,sBAAAR,EAAA,+EACjBC,IAAMC,KAAKO,oEAAiC,GAAI,CACnDN,iBAAiB,KAFG,2CAAH,qDCgBZJ,EAASW,YAAiB,wBAAD,uCAA0B,WAAOC,EAAP,kBAAAX,EAAA,6DAAoBY,EAApB,EAAoBA,gBAApB,SACtDC,IAAaC,OAAM,SAACC,GAGtB,OAFAC,QAAQC,IAAIF,EAAK,yBAEVH,GAAgB,MAJiC,2CAA1B,yDAQzBJ,EAAeE,YAAiB,8BAAD,uCAAgC,WAAOhB,EAAP,oBAAAM,EAAA,6DAA4CkB,EAA5C,EAA4CA,SAAUN,EAAtD,EAAsDA,gBAAtD,SAClEO,IAAmBC,MAAK,WAC1BF,EAASxB,MACVoB,OAAM,WAGL,OAFAI,EAASnB,KAEFa,GAAgB,MAN6C,2CAAhC,yDAUtCS,EAAiBpC,YAAY,CAC/BC,KAAM,iBACNC,aAjCiB,CACjBmC,eAAgB,EAChBC,SAAU,GACVC,SAAS,EACTC,aAAc,IA8BdlC,SAAU,CACNmC,wBADM,SACkBjC,EAAOC,GAC3BD,EAAM8B,SAAW7B,EAAOC,QAAQ4B,SAChC9B,EAAM+B,QAAgD,UAAtC9B,EAAOC,QAAQgC,KAAKC,cACpCnC,EAAMgC,aAAe/B,EAAOC,QAAQ8B,cAExCI,oBANM,SAMcpC,GAChBA,EAAM6B,eAAgB,IAG9BQ,cAAe,SAAAC,GACXA,EAAQC,QAAQjC,EAAOkC,WAAW,SAACxC,GAC/BA,EAAM6B,eAAgB,Q,EAQ9BD,EAAexB,QAFf6B,E,EAAAA,wBACAG,E,EAAAA,oBAGWR,IAAf,Q,QC9BajB,EAAcM,YAAiB,kBAAD,uCAAoB,WAAOC,EAAP,sBAAAX,EAAA,6DAAoBkB,EAApB,EAAoBA,SAAUN,EAA9B,EAA8BA,gBAA9B,kBAElCsB,IAFkC,cAEnDC,EAFmD,yBAIhDA,EAASC,MAJuC,uCAO3B,MAAxB,KAAID,SAASE,QACbnB,EAASV,EAAaJ,IAR6B,kBAWlDQ,GAAgB,IAXkC,yDAApB,yDAe9BN,EAAWI,YAAiB,oBAAD,uCAAsB,WAAQH,EAAR,sBAAAP,EAAA,6DAA4BkB,EAA5B,EAA4BA,SAAUN,EAAtC,EAAsCA,gBAAtC,kBAGjC0B,EAAa/B,GAHoB,cAGlD4B,EAHkD,yBAK/CA,EAASC,MALsC,uCAQ1B,MAAxB,KAAID,SAASE,QACbnB,EAASV,EAAaJ,IAT4B,kBAYjDQ,GAAgB,IAZiC,yDAAtB,yDAgBlC2B,EAAWtD,YAAY,CACzBC,KAAM,WACNC,aA5DiB,CACjBoD,SAAU,GACVC,MAAO,GACPC,SAAS,GA0DTlD,SAAU,GACVuC,cAAe,SAAAC,GACXA,EAAQC,QAAQ5B,EAAY6B,WAAW,SAACxC,EAAOC,GAC3CD,EAAM8C,SAAW7C,EAAOC,QACxBF,EAAMgD,SAAU,KAEpBV,EAAQC,QAAQ5B,EAAYsC,SAAS,SAACjD,GAClCA,EAAMgD,SAAU,KAEpBV,EAAQC,QAAQ1B,EAAS2B,WAAW,SAACxC,EAAOC,GACxCD,EAAM+C,MAAQ9C,EAAOC,QACrBF,EAAMgD,SAAU,KAEpBV,EAAQC,QAAQ1B,EAASoC,SAAS,SAACjD,GAC/BA,EAAMgD,SAAU,Q,YAKVF,EAAS1C,SAEZ0C,QAAf,QCzEeI,EAPKC,YAAgB,CACnCC,QACAxB,iBACAyB,YCOcC,MAdDC,YAAe,CAC3BC,QAASN,I,qDCFEO,EAAgB,WAE3B,OACE,kBAACC,EAAA,EAAD,mB,0BCGSC,EAAe,WACxB,IAAMlC,EAAwBmC,cADA,EAEAC,aAAY,SAAC7D,GAAD,OAAsBA,EAAMqD,WAA9DP,EAFsB,EAEtBA,SAAUE,EAFY,EAEZA,QAEZc,EAAUC,cAMhB,OAJAC,qBAAU,WACNvC,EAASd,OACV,CAACc,IAGA,kBAACwC,EAAA,EAAD,CAAOC,SAAO,EAACC,UAAQ,EAACC,OAAK,GACzB,+BACI,4BACI,kCACA,oCACA,oCACA,oCACA,yCACA,4CACA,6CAGNpB,GACE,+BAEKF,EAASuB,KAAI,SAAChB,EAASiB,GAChB,OAAO,wBAAIC,IAAKD,EAAGE,QAAS,WAAOV,EAAQW,KAAR,gBAAsBpB,EAAQqB,GAA9B,sBAC/B,4BAAKrB,EAAQqB,IACb,4BAAKrB,EAAQ5D,MACb,4BAAK4D,EAAQsB,MACb,4BAAKtB,EAAQuB,MACb,4BAAKvB,EAAQwB,WACb,4BAAKxB,EAAQyB,SAAU,WAAa,gBACpC,4BAAKC,IAAM1B,EAAQ2B,UAAW,2BAA2BC,mBCtC5EC,EAAuB,WAElC,OACE,kBAACxB,EAAA,EAAD,yBAEM,kBAAC,EAAD,QCPGyB,EAAsB,WAEjC,OACE,kBAACzB,EAAA,EAAD,0BCHS0B,EAA0B,WAErC,OACE,kBAAC1B,EAAA,EAAD,8BCIS2B,EAAY,WACrB,IAAM5D,EAAwBmC,cACxB9C,EAAcwE,cAAdxE,UAFqB,EAGA+C,aAAY,SAAC7D,GAAD,OAAsBA,EAAMqD,WAA3DN,EAHmB,EAGnBA,MAAOC,EAHY,EAGZA,QAMf,OAJAgB,qBAAU,WACNvC,EAASZ,EAASC,MACnB,CAACW,IAGA,kBAACwC,EAAA,EAAD,CAAOC,SAAO,EAACC,UAAQ,EAACC,OAAK,GACzB,+BACI,4BACI,4CACA,wCACA,4CACA,0CACA,uCAGNpB,GACE,+BAEKD,EAAMsB,KAAI,SAACkB,EAAMjB,GACV,OAAO,wBAAIC,IAAKD,GACZ,4BAAKiB,EAAK9F,KAAV,IAAiB8F,EAAKC,QAAtB,IAA+B,6BAA/B,IAA0CD,EAAKE,OAC/C,4BAAKF,EAAKzD,UACV,4BAAKyD,EAAKG,cAAgB,WAAa,gBACvC,4BAAKX,IAAMQ,EAAKP,UAAW,2BAA2BC,YACtD,4BAAKM,EAAKrD,aCnC7ByD,EAAqB,WAEhC,OACE,kBAACjC,EAAA,EAAD,uBAEE,kBAAC,EAAD,QCNOkC,EAAe,WAE1B,OACE,kBAAClC,EAAA,EAAD,kBCHSmC,GAAqB,WAEhC,OACE,kBAACnC,EAAA,EAAD,yB,UCCSoC,GAAe,WAC1B,IAAMrE,EAAWmC,cAMjB,OACE,kBAAC,IAAMmC,SAAP,KACE,kBAACC,GAAA,EAAD,CAAQxB,QANc,SAACyB,GACzBxE,EAASnB,OAKP,Y,oBCLO4F,I,MAAgB,WAAO,IAC1BpE,EAAa+B,aAAY,SAAC7D,GAAD,OAAsBA,EAAM4B,kBAArDE,SAER,OACE,kBAACqE,GAAA,EAAD,CAAQC,GAAG,OAAOC,QAAQ,QACxB,kBAACF,GAAA,EAAOG,MAAR,CAAcC,KAAK,KACjB,kBAACC,GAAA,EAAD,CAAOC,IAAI,GAAGC,IAAKC,EAAQ,MAC3B,8CAEF,6BACE,kBAACH,GAAA,EAAD,CAAOE,IAAKC,EAAQ,IAA8BC,eAAa,IAC/D,0BAAMC,UAAU,YAAY/E,GAC5B,kBAAC,GAAD,U,iDCNKgF,GAAW,WAAO,IAAD,EACpB/E,EAAY8B,aAAY,SAAC7D,GAAD,OAAsBA,EAAM4B,kBAApDG,QAEFgF,EAAS,CACX,CACEC,MAAO,YACPC,KAAM,aACNC,UAAW,kBAAC,EAAD,MACXC,SAAS,GAEX,CACEH,MAAO,QACPI,QAASrF,EACTkF,KAAM,SACNI,UAAW,CACT,CACEL,MAAO,uBACPC,KAAM,uBACNC,UAAW,kBAAC,EAAD,OAEb,CACEF,MAAO,kBACPC,KAAM,6BACNC,UAAW,kBAAC,EAAD,OAEb,CACEF,MAAO,WACPC,KAAM,YACNC,UAAW,kBAAC,EAAD,OAEb,CACEF,MAAO,kBACPC,KAAM,kBACNC,UAAW,kBAAC,GAAD,SAIjB,CACEF,MAAO,oBACPC,KAAM,oBACNC,UAAW,kBAAC,EAAD,MACXE,QAASrF,GAEX,CACEiF,MAAO,mBACPC,KAAM,mBACNC,UAAW,kBAAC,EAAD,QAIf,OACE,kBAACxD,EAAA,EAAD,CAAW4D,OAAK,GACd,kBAACC,GAAA,EAAD,KACE,kBAAC,GAAD,OAEF,kBAAC,IAAD,KACE,kBAACA,GAAA,EAAD,KACE,kBAACC,GAAA,EAAD,CAAKC,GAAI,GACP,kBAACC,GAAA,EAAD,KACGX,EAAO1C,KAAI,SAACsD,EAAOpH,GAAR,OACToH,EAAMX,QAAUW,EAAMP,QAAUO,EAAMN,UACrC,kBAACO,GAAA,EAAD,CAAWrD,IAAKhE,EAAGsH,GAAIH,KAAUI,KAAMC,iBAAiB,KACtD,kBAACH,GAAA,EAAUI,OAAX,CAAkBH,GAAII,KAAKC,MAAOC,SAAS,KACxCR,EAAMX,OAET,kBAACY,GAAA,EAAUQ,SAAX,CAAoBD,SAAS,KAC3B,kBAACT,GAAA,EAAD,CAAWrB,QAAQ,SAChBsB,EAAMN,UAAUhD,KAAI,SAACgE,EAAUC,GAAX,OACnB,kBAACZ,GAAA,EAAUI,KAAX,CAAgBvD,IAAG,UAAKhE,EAAL,YAAU+H,IAC3B,kBAAC,IAAD,CAAMC,GAAE,UAAKZ,EAAMV,MAAX,OAAkBoB,EAASpB,OAASoB,EAASrB,cAOhEW,EAAMX,QAAUW,EAAMP,QACrB,kBAACM,GAAA,EAAUI,KAAX,CAAgBvD,IAAKhE,GACnB,kBAAC,IAAD,CAAMgI,GAAIZ,EAAMV,MAAOU,EAAMX,aAKvC,kBAACQ,GAAA,EAAD,CAAKC,GAAI,GACP,kBAAC,IAAD,KACGV,EAAO1C,KAAI,SAACsD,EAAOpH,GAAR,OACToH,EAAMN,UACLM,EAAMN,UAAUhD,KAAI,SAACgE,EAAUC,GAAX,OAClB,kBAAC,IAAD,CAAOE,OAAO,EAAMjE,IAAG,UAAKhE,EAAL,YAAU+H,GAAKrB,KAAI,UAAKU,EAAMV,MAAX,OAAkBoB,EAASpB,MAAQwB,SAAUJ,EAASnB,eAGlG,kBAAC,IAAD,CAAOsB,OAAO,EAAMjE,IAAKhE,EAAG0G,KAAMU,EAAMV,KAAMwB,SAAUd,EAAMT,eAElE,kBAAC,IAAD,CAAUwB,KAAK,IAAIH,GAAE,UAAExB,EAAO4B,MAAK,SAAAC,GAAC,OAAIA,EAAEzB,kBAArB,aAAE,EAA6BF,aC5GvD4B,GAAY,WAQrB,OAJA7E,qBAAU,WACN8E,OAAOC,SAASC,OAAhB,kBAJW,qBAIX,sBAHc,gDAIf,IAEK,M,UCHCC,I,MAAS,WACpB,IAAMxH,EAAWmC,cADS,EAEOC,aAAY,SAAC7D,GAAD,OAAsBA,EAAMoD,SAAjEzD,EAFkB,EAElBA,KAAMC,EAFY,EAEZA,MAAOC,EAFK,EAELA,QAMrB,OACE,kBAAC,IAAMkG,SAAP,KAEIpG,GACI,yBAAKkH,UAAU,gBACb,kBAACqC,GAAA,EAAD,CAAOC,QATN,WACX1H,EAAStB,MAQuBR,KAAMA,EAAMyJ,MAAO,IAAMC,UAAQ,GACrD,kBAACH,GAAA,EAAMI,OAAP,KACE,yBAAK5C,IAAI,2BAA2BG,UAAU,eAAeJ,IAAI,KACjE,4BAAQI,UAAU,WAAWjH,IAE/B,kBAACsJ,GAAA,EAAMK,KAAP,KAAa1J,Q,SCFd2J,GAhB4B,SAAC,GAAuC,IAA1BC,EAAyB,EAApCvC,UAAyBwC,EAAW,8BACxE7H,EAAkBgC,aAAY,SAAC7D,GAAD,OAAsBA,EAAM4B,kBAA1DC,cAER,OAAK4H,EAKD,kBAAC,IAAD,iBAAWC,EAAX,CAAiBC,OAAQ,SAACC,GAAD,OACnB/H,EAEE,kBAAC,IAAD,CAAU0G,GAAG,WADb,kBAACkB,EAAcG,OANlB,MCOEC,I,MAAM,WACjB,IAAMpI,EAAWmC,cAoBjB,OAlBAI,qBAAU,WACR,IAAI8F,EAA+B,GAEnCC,SAASC,OAAOC,MAAM,KAAKC,SAAQ,SAACC,GAAQ,IAAD,EACvBA,EAAGF,MAAM,KADc,mBACpC1F,EADoC,KAChC6F,EADgC,KAEzCN,EAAQvF,EAAI8F,QAAUD,KAGpBN,EAAO,cAETrI,EAASQ,EAAwBqI,YAAWR,EAAO,iBAInDrI,EAASW,OAEV,CAACX,IAGF,kBAAC,IAAD,KACE,kBAAC,GAAD,MACA,kBAAC,IAAD,KACE,kBAAC,IAAD,CAAO+G,OAAK,EAACvB,KAAK,SAASC,UAAW2B,KACtC,kBAAC,GAAD,CAAc5B,KAAK,IAAIC,UAAWJ,KAClC,kBAAC,IAAD,CAAU4B,KAAK,IAAIH,GAAG,UCjC5BgC,IAASZ,OACP,kBAAC,IAAD,CAAUrG,MAAOA,GACb,kBAAC,GAAD,OAEJyG,SAASS,eAAe,W","file":"static/js/main.ff1ecbb5.chunk.js","sourcesContent":["module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/icon_contact.88421195.svg\";","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport { Toast } from \"./types\";\n\nconst initialState = {\n show: false,\n title: \"\",\n message: \"\"\n};\n\nconst toastSlice = createSlice({\n name: 'toast',\n initialState,\n reducers: {\n showGlobalToast(state, action: PayloadAction) {\n state.show = true;\n state.message = action.payload.message;\n state.title = action.payload.title;\n },\n hideGlobalToast(state) {\n state.show = false;\n state.message = \"\";\n state.title = \"\";\n }\n }\n});\n\nexport const {\n showGlobalToast,\n hideGlobalToast\n} = toastSlice.actions;\n\nexport default toastSlice.reducer;","import axios from 'axios';\nimport { IWetuAccount, IWetuUser } from '../slices/account.slice';\n\nconst baseProfileUrl = \"https://account-api.dev.wetu.com/api/v1/Account/\";\n\nexport const logout = async() => {\n return axios.post(baseProfileUrl + \"Logout\", {}, {\n withCredentials: true\n });\n}\n\nexport const getAccounts = async () => {\n return axios.get(baseProfileUrl + \"GetAccounts\", { withCredentials: true});\n}\n\nexport const getUsers = async (accountId: string) => {\n return axios.get(baseProfileUrl + `GetUsers?accountId=${accountId}`, { withCredentials: true});\n}\n\n\n\n\n","import axios from 'axios';\n\nconst baseRefreshUrl = \"https://account-api.dev.wetu.com/api/v1/RefreshToken/\";\n\nexport const refreshToken = async () => {\n return axios.post(baseRefreshUrl + \"RefreshToken\", {}, {\n withCredentials: true\n });\n}\n\n\n\n","import { AsyncThunk, createAsyncThunk, createSlice, PayloadAction } from \"@reduxjs/toolkit\";\n\nimport { logout as api_logout } from \"api/account.service\";\n\nimport { refreshToken as api_refreshToken } from \"api/refreshToken.service\";\n\n\nconst initialState = {\n showLoginPage: false,\n username: \"\",\n isAdmin: false,\n userPhotoURL: \"\"\n};\n\ninterface IWetuIdToken {\n username: string;\n role: string;\n userPhotoURL: string;\n};\n\nexport const logout = createAsyncThunk('authentication/logout', async (arg: void, { rejectWithValue }) => {\n await api_logout().catch((err) => {\n console.log(err, \"authentication/logout\");\n\n return rejectWithValue(false);\n });\n});\n\nexport const refreshToken = createAsyncThunk('authentication/refreshToken', async (action: AsyncThunk, { dispatch, rejectWithValue }) => {\n await api_refreshToken().then(() => {\n dispatch(action);\n }).catch(() => {\n dispatch(logout());\n\n return rejectWithValue(false); \n });\n});\n\nconst authentication = createSlice({\n name: 'authentication',\n initialState,\n reducers: {\n setStateFromWetuIdToken(state, action: PayloadAction) {\n state.username = action.payload.username;\n state.isAdmin = action.payload.role.toLowerCase() === \"admin\";\n state.userPhotoURL = action.payload.userPhotoURL;\n },\n redirectToLoginPage(state) {\n state.showLoginPage = true;\n }\n },\n extraReducers: builder => {\n builder.addCase(logout.fulfilled, (state) => {\n state.showLoginPage = true;\n })\n },\n});\n\nexport const {\n setStateFromWetuIdToken,\n redirectToLoginPage\n} = authentication.actions;\n\nexport default authentication.reducer;","import { createAsyncThunk, createSlice, PayloadAction } from \"@reduxjs/toolkit\";\n\nimport { getAccounts as api_getAccounts, getUsers as api_getUsers } from \"api/account.service\";\n\nimport { refreshToken } from \"slices/authentication.slice\";\n\nconst initialState = {\n accounts: [] as IWetuAccount[],\n users: [] as IWetuUser[],\n loading: false\n};\n\nexport interface IWetuAccount {\n id: string,\n name: string,\n tier: string,\n type: string,\n userCount: number,\n verified: boolean,\n lastLogin: string,\n};\n\nexport interface IWetuUser{\n id: string,\n name: string,\n surname: string,\n username: string,\n lastLogin: string,\n role: string,\n email: string,\n emailVerified: boolean\n}\n\nexport const getAccounts = createAsyncThunk('accounts/getall', async (arg: void, { dispatch, rejectWithValue }) => {\n try {\n var response = await api_getAccounts(); \n \n return response.data;\n }\n catch(err) {\n if (err.response.status === 401) {\n dispatch(refreshToken(getAccounts));\n }\n\n return rejectWithValue(false);\n }\n});\n\nexport const getUsers = createAsyncThunk('accounts/getusers', async ( accountId:string, { dispatch, rejectWithValue }) => {\n try {\n\n var response = await api_getUsers(accountId); \n \n return response.data;\n }\n catch(err) {\n if (err.response.status === 401) {\n dispatch(refreshToken(getAccounts));\n }\n\n return rejectWithValue(false);\n }\n});\n\nconst accounts = createSlice({\n name: 'accounts',\n initialState,\n reducers: {},\n extraReducers: builder => {\n builder.addCase(getAccounts.fulfilled, (state, action) => {\n state.accounts = action.payload;\n state.loading = false;\n })\n builder.addCase(getAccounts.pending, (state) => {\n state.loading = true;\n })\n builder.addCase(getUsers.fulfilled, (state, action) => {\n state.users = action.payload;\n state.loading = false;\n })\n builder.addCase(getUsers.pending, (state) => {\n state.loading = true;\n })\n },\n});\n\nexport const {} = accounts.actions;\n\nexport default accounts.reducer;\n","import { combineReducers } from '@reduxjs/toolkit';\n\nimport toast from 'components/toast/toast.slice';\n\nimport authentication from 'slices/authentication.slice';\n\nimport account from 'slices/account.slice';\n\nconst rootReducer = combineReducers({\n\ttoast,\n\tauthentication,\n\taccount\n});\n\nexport type RootState = ReturnType;\nexport default rootReducer;","import { configureStore, Action } from '@reduxjs/toolkit';\nimport { ThunkAction } from 'redux-thunk';\nimport rootReducer, { RootState } from './root-reducer';\n\nconst store = configureStore({\n reducer: rootReducer\n});\n\nif (process.env.NODE_ENV === 'development' && module.hot) {\n module.hot.accept('./root-reducer', () => {\n const newRootReducer = require('./root-reducer').default\n store.replaceReducer(newRootReducer)\n });\n}\n\nexport type AppDispatch = typeof store.dispatch;\nexport type AppThunk = ThunkAction, RootState, any, Action>;\n\nexport default store;","import React from 'react';\nimport { Container } from 'react-bootstrap';\n\nexport const DashboardPage = () => {\n\n return (\n \n Dashboard\n \n )\n}","import React, { useEffect } from 'react';\nimport { Table } from 'react-bootstrap';\nimport { AppDispatch } from 'app/store'\nimport { useDispatch, useSelector } from 'react-redux';\nimport { RootState } from 'app/root-reducer';\nimport { getAccounts } from 'slices/account.slice';\nimport { useHistory } from 'react-router-dom';\nimport dayjs from 'dayjs';\n\nexport const AccountTable = () => {\n const dispatch: AppDispatch = useDispatch();\n const { accounts, loading } = useSelector((state: RootState) => state.account);\n\n const history = useHistory();\n\n useEffect(() => {\n dispatch(getAccounts());\n }, [dispatch]);\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n {!loading &&\n \n\n {accounts.map((account, i) => { \n return {history.push(`Admin/${account.id}/UserManagement`)}}>\n \n \n \n \n \n \n \n \n }\n ) \n } \n \n }\n
IdNameTierTypeUserCountVerificationLast Login
{account.id}{account.name}{account.tier}{account.type}{account.userCount}{account.verified? \"Verified\" : \"Not Verified\"}{dayjs(account.lastLogin, 'MMMM Do YYYY, h:mm:ss a').toString()}
\n )\n}","import React from 'react';\nimport { Container } from 'react-bootstrap';\nimport { AccountTable } from './table/account-table';\n\n\nexport const ClientManagementPage = () => {\n\n return (\n \n Client Management\n \n \n )\n}","import React from 'react';\nimport { Container } from 'react-bootstrap';\n\nexport const PersonalDetailsPage = () => {\n\n return (\n \n Personal Details\n \n )\n}","import React from 'react';\nimport { Container } from 'react-bootstrap';\n\nexport const OrganisationDetailsPage = () => {\n\n return (\n \n Organisation Details\n \n )\n}","import React, { useEffect } from 'react';\nimport { Table } from 'react-bootstrap';\nimport { AppDispatch } from 'app/store'\nimport { useDispatch, useSelector } from 'react-redux';\nimport { RootState } from 'app/root-reducer';\nimport { getUsers } from 'slices/account.slice';\nimport { useParams } from 'react-router-dom';\nimport dayjs from 'dayjs';\n\n\nexport const UserTable = () => {\n const dispatch: AppDispatch = useDispatch();\n let { accountId } = useParams<{accountId: string}>();\n const { users, loading } = useSelector((state: RootState) => state.account);\n\n useEffect(() => {\n dispatch(getUsers(accountId));\n }, [dispatch]);\n\n return (\n \n \n \n \n \n \n \n \n \n \n {!loading &&\n \n\n {users.map((user, i) => { \n return \n \n \n \n \n \n \n }\n ) \n } \n \n }\n
Name & EmailUsernameVerificationLast LoginRole
{user.name} {user.surname}

{user.email}
{user.username}{user.emailVerified ? \"Verified\" : \"Not Verified\"}{dayjs(user.lastLogin, 'MMMM Do YYYY, h:mm:ss a').toString()}{user.role}
\n )\n}","import React from 'react';\nimport { Container } from 'react-bootstrap';\nimport { UserTable } from './table/user-table';\n\nexport const UserManagementPage = () => {\n\n return (\n \n User Management\n \n \n )\n}","import React from 'react';\nimport { Container } from 'react-bootstrap';\n\nexport const SettingsPage = () => {\n\n return (\n \n Settings\n \n )\n}","import React from 'react';\nimport { Container } from 'react-bootstrap';\n\nexport const AccountHistoryPage = () => {\n\n return (\n \n Account History\n \n )\n}","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { logout } from \"slices/authentication.slice\";\n\nimport { Button } from 'react-bootstrap';\n\nexport const LogoutButton = () => {\n const dispatch = useDispatch();\n\n const btnLogout_onClick = (e: any) => {\n dispatch(logout());\n }\n\n return ( \n \n \n \n )\n}","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { RootState } from 'app/root-reducer';\n\nimport { LogoutButton } from \"pages/home/features/logout-button\";\n\nimport { Navbar, Image } from 'react-bootstrap';\n\nimport \"./navigation-bar.scss\";\n\nexport const NavigationBar = () => {\n const { username } = useSelector((state: RootState) => state.authentication); \n\n return ( \n \n \n \"\"\n back office\n \n
\n \n {username}\n \n
\n
\n )\n}","import React from 'react';\nimport { RootState } from 'app/root-reducer';\nimport { useSelector } from 'react-redux';\nimport { BrowserRouter as Router, Route, Switch, Redirect, Link } from 'react-router-dom'\n\nimport { DashboardPage } from 'pages/dashboard/dashboard.page';\nimport { ClientManagementPage } from 'pages/client-management/client-management.page';\nimport { PersonalDetailsPage } from \"pages/personal-details/personal-details.page\";\nimport { OrganisationDetailsPage } from \"pages/organisation-details/organisation-details.page\";\nimport { UserManagementPage } from \"pages/user-management/user-management.page\";\nimport { SettingsPage } from \"pages/settings/settings.page\";\nimport { AccountHistoryPage } from \"pages/account-history/account-history.page\";\n\nimport { NavigationBar } from \"pages/home/features/navigation-bar/navigation-bar\";\n\nimport { Col, Container, Row, ListGroup, Accordion, Form, } from 'react-bootstrap';\n\nexport const HomePage = () => {\n const { isAdmin } = useSelector((state: RootState) => state.authentication);\n\n const routes = [\n {\n label: \"Dashboard\",\n path: \"/Dashboard\",\n component: ,\n default: true\n },\n {\n label: \"Admin\",\n hidden: !isAdmin,\n path: \"/Admin\",\n subRoutes: [\n {\n label: \"Organisation Details\",\n path: \"/OrganisationDetails\",\n component: \n },\n {\n label: \"User Management\",\n path: \"/:accountId/UserManagement\",\n component: \n },\n {\n label: \"Settings\",\n path: \"/Settings\",\n component: \n },\n {\n label: \"Account History\",\n path: \"/AccountHistory\",\n component: \n }\n ]\n },\n {\n label: \"Client Management\",\n path: \"/ClientManagement\",\n component: ,\n hidden: !isAdmin\n },\n {\n label: \"Personal Details\",\n path: \"/PersonalDetails\",\n component: \n }\n ];\n\n return (\n \n \n \n \n \n \n \n \n {routes.map((route, a) => (\n (route.label && !route.hidden && route.subRoutes) ?\n \n \n {route.label}\n \n \n \n {route.subRoutes.map((subRoute, b) => (\n \n {subRoute.label}\n \n ))}\n \n \n \n :\n (route.label && !route.hidden) &&\n \n {route.label}\n \n ))}\n \n \n \n \n {routes.map((route, a) => (\n (route.subRoutes) ?\n route.subRoutes.map((subRoute, b) => (\n \n ))\n :\n \n ))}\n x.default)?.path!} />\n \n \n \n \n \n )\n}","import { useEffect } from 'react';\n\nexport const LoginPage = () => {\n const domain = \"login.dev.wetu.com\";\n const returnURL = \"https://backoffice.dev.wetu.com/dashboard\";\n\n useEffect(() => {\n window.location.assign(`https://${domain}?ReturnUrl=${returnURL}`);\n }, []);\n\n return (null);\n}","import { RootState } from 'app/root-reducer';\nimport React from 'react';\nimport { Toast } from 'react-bootstrap';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { hideGlobalToast } from './toast.slice';\nimport './toast.scss';\n\nexport const Toaster =() => {\n const dispatch = useDispatch();\n const { show, title, message } = useSelector((state: RootState) => state.toast);\n\n const hide = () => {\n dispatch(hideGlobalToast());\n }\n\n return (\n \n {\n show && (\n
\n \n \n \"\"\n {title}\n \n {message}\n \n
\n )\n }\n
\n )\n};","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { RootState } from 'app/root-reducer';\n\nimport { Route, RouteComponentProps, RouteProps, Redirect } from 'react-router-dom';\n\nconst PrivateRoute: React.FC = ({ component: Component, ...rest }) => {\n const { showLoginPage } = useSelector((state: RootState) => state.authentication); \n\n if (!Component) {\n return null;\n }\n\n return (\n ) => \n (!showLoginPage ? \n : \n \n )} />\n );\n}\n\nexport default PrivateRoute;\n","import React, { useEffect } from 'react'\nimport { useDispatch } from \"react-redux\";\nimport { Dictionary } from \"@reduxjs/toolkit\";\n\nimport jwt_decode from \"jwt-decode\";\n\nimport { HomePage } from 'pages/home/home.page';\n\nimport { LoginPage } from 'pages/login/login.page'\nimport { Toaster } from 'components/toast/toast';\nimport PrivateRoute from 'components/private-route';\n\nimport { setStateFromWetuIdToken, redirectToLoginPage } from \"slices/authentication.slice\";\n\nimport { BrowserRouter as Router, Route, Redirect, Switch } from 'react-router-dom'\n\nimport './App.scss';\n\nexport const App = () => {\n const dispatch = useDispatch();\n\n useEffect(() => {\n let cookies : Dictionary = {};\n \n document.cookie.split(';').forEach((el) => {\n let [key,value] = el.split('=');\n cookies[key.trim()] = value;\n });\n\n if (cookies[\"wetu_id_token\"]) \n {\n dispatch(setStateFromWetuIdToken(jwt_decode(cookies[\"wetu_id_token\"])));\n }\n else \n {\n dispatch(redirectToLoginPage());\n }\n }, [dispatch]);\n\n return (\n \n \n \n \n \n \n \n \n );\n}","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Provider } from 'react-redux'\n\nimport store from './app/store';\n\nimport './index.scss';\nimport 'bootstrap/dist/css/bootstrap.css';\nimport { App } from 'app/App';\n\nconst render = () => {\n \n ReactDOM.render(\n \n \n ,\n document.getElementById('root')\n );\n}\n\nrender();\n\nif (process.env.NODE_ENV === 'development' && module.hot) {\n module.hot.accept('./app/App', render)\n}"],"sourceRoot":""}