{"version":3,"sources":["services/userService.ts","components/const.ts","services/httpService.ts","components/session/token.tsx","components/session/session.tsx","components/session/actions.tsx","components/session/sessionReducer.ts","components/appProvider.tsx","components/authorizedRoute.tsx","views/shared/header.tsx","views/shared/navigation.tsx","views/shared/footer.tsx","views/error/index.tsx","components/loading.tsx","views/map/index.tsx","services/authenticationService.ts","views/login/index.tsx","components/error.tsx","views/user/index.tsx","components/notification.ts","views/user/components/settings.tsx","views/user/components/password.tsx","views/user/components/passwordAdmin.tsx","views/user/components/archive.tsx","views/user/details.tsx","views/user/add.tsx","services/groupService.ts","services/clearanceService.ts","views/admin/index.tsx","App.tsx","serviceWorker.ts","components/errorBoundary.tsx","index.tsx","images/logo_lt.png"],"names":["UserType","AppConsts","process","http","setupAxios","setupInterceptors","httpAxios","axios","create","baseURL","timeout","interceptors","response","use","error","isAxiosError","data","Error","Promise","reject","status","statusText","clearSession","window","location","reload","UserTypeLabel","Map","Undefined","GeotabAdmin","GeotabDriver","GeotabDispatcher","get","id","model","post","put","getDefaultToken","email","userId","firstName","access_token","client","geotabSessionId","geotabServer","expires_in","userType","SessionAction","saveSession","session","token","auth","defaults","headers","common","localStorage","setItem","JSON","stringify","storage","getItem","parse","rememberMe","expiry","isAuthenticated","SessionReducer","state","action","type","Login","payload","utc","add","GlobalAdmin","UserTypeParse","Logout","initialState","storedSession","loadSession","AppContext","createContext","dispatch","mainReducer","AppProvider","props","useReducer","Provider","value","useStore","useContext","AuthorizedRoute","userTypeList","forceRefresh","Component","component","rest","render","undefined","_","indexOf","to","pathname","errorMessage","key","uuidv4","referer","Header","className","src","Logo","alt","Navigation","history","useHistory","data-toggle","data-target","aria-controls","aria-expanded","aria-label","onClick","push","Footer","Loading","useState","isLoading","setIsLoading","useEffect","timer","setTimeout","clearTimeout","role","title","width","height","frameBorder","params","URLSearchParams","append","password","database","then","hasOwnProperty","catch","error_description","initialLoad","useRef","showDatabaseInput","setShowDatabaseInput","redirect","setRedirect","admin","useParams","schema","Yup","shape","Email","required","Password","values","a","setErrors","setSubmitting","AuthenticationService","authenticate","Database","result","RememberMe","current","style","maxWidth","initialValues","validationSchema","validateOnChange","validateOnBlur","onSubmit","isSubmitting","isValid","errors","Object","map","msg","i","name","autoFocus","display","disabled","message","length","Users","users","setUsers","setError","userService","getAll","Data","finally","user","UserRow","Id","FirstName","LastName","Type","Notification","Noty","theme","text","progressBar","show","console","log","UserSettings","isAdmin","UserService","update","Success","marginTop","marginBottom","UserName","as","UserPassword","tabSelect","CurrentPassword","min","ConfirmPassword","test","this","parent","updatePassword","autoComplete","UserPasswordAdmin","updatePasswordAdmin","ArchiveUser","userName","archive","UserDetails","tabKey","setTabKey","setUser","handleTabSelect","isSelf","showChangePassword","showSetPassword","showArchiveUser","Tab","Container","activeKey","onSelect","Row","Col","sm","Nav","variant","Item","Link","eventKey","borderLeft","Content","Pane","AddUser","String","includes","User","AdminHome","groups","setGroups","clearances","setClearances","getGroups","groupService","getSecurityClearances","clearanceService","addDefault","group","GroupRow","clearance","ClearanceRow","Name","App","path","Boolean","hostname","match","ErrorBoundary","hasError","info","setState","children","ReactDOM","StrictMode","document","getElementById","navigator","serviceWorker","ready","registration","unregister","module","exports"],"mappings":"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","file":"static/js/main.29d44089.chunk.js","sourcesContent":["import { http, ApiResponse } from './httpService';\r\n\r\nexport enum UserType {\r\n Undefined = 0,\r\n GeotabAdmin = 1,\r\n GeotabDriver = 2,\r\n GeotabDispatcher = 3,\r\n GlobalAdmin = 5\r\n};\r\n\r\nexport const UserTypeLabel = new Map([\r\n [UserType.Undefined, 'Not Set'],\r\n [UserType.GeotabAdmin, 'Admin'],\r\n [UserType.GeotabDriver, 'Driver'],\r\n [UserType.GeotabDispatcher, 'Dispatcher']\r\n]);\r\n\r\nexport function UserTypeParse(userType: any) {\r\n switch (userType) {\r\n case '1':\r\n return UserType.GeotabAdmin\r\n case '2':\r\n return UserType.GeotabDriver\r\n case '3':\r\n return UserType.GeotabDispatcher\r\n case '5':\r\n return UserType.GlobalAdmin\r\n default:\r\n return UserType.Undefined\r\n }\r\n};\r\n\r\nexport interface UserAddModel {\r\n User: UserModel;\r\n Password: UserPasswordAdminModel;\r\n};\r\n\r\nexport interface UserModel {\r\n Id: string;\r\n Email: string;\r\n FirstName: string | null;\r\n LastName: string | null;\r\n Active: boolean;\r\n Type: UserType;\r\n};\r\n\r\nexport interface UserPasswordModel {\r\n Id: string;\r\n CurrentPassword: string;\r\n Password: string;\r\n ConfirmPassword: string;\r\n};\r\n\r\nexport interface UserPasswordAdminModel {\r\n Id: string;\r\n Password: string;\r\n ConfirmPassword: string;\r\n};\r\n\r\nclass UserService {\r\n public async getAll(): Promise> {\r\n return (await http.get>('api/users/getAll')).data;\r\n };\r\n\r\n public async get(id: string): Promise> {\r\n return (await http.get>('api/users/get?id=' + id)).data;\r\n };\r\n\r\n public async add(model: UserAddModel): Promise> {\r\n return (await http.post>('api/users/add', model)).data;\r\n };\r\n\r\n public async update(model: UserModel): Promise> {\r\n return (await http.put>('api/users/update', model)).data;\r\n };\r\n\r\n public async updatePassword(model: UserPasswordModel): Promise> {\r\n return (await http.put>('api/users/updatePassword', model)).data;\r\n };\r\n\r\n public async updatePasswordAdmin(model: UserPasswordAdminModel): Promise> {\r\n return (await http.put>('api/users/updatePasswordAdmin', model)).data;\r\n };\r\n\r\n public async archive(id: string): Promise> {\r\n return (await http.put>('api/users/archive?id=' + id)).data;\r\n };\r\n}\r\n\r\nexport default new UserService();","type IAppConsts = {\r\n ServiceBaseUrl: string | undefined\r\n};\r\n\r\nexport const AppConsts: IAppConsts = {\r\n ServiceBaseUrl: process.env.REACT_APP_SERVICE_BASE_URL\r\n};","import axios from 'axios';\r\nimport { AppConsts } from '../components/const';\r\nimport { clearSession } from '../components/session/session';\r\n\r\nvar http = setupAxios();\r\n\r\nfunction setHttpToken(token: string | null)\r\n{\r\n if (token != null)\r\n axios.defaults.headers.common = {'Authorization': `BEARER ${token}`}\r\n \r\n http = setupAxios(token != null);\r\n}\r\n\r\nfunction setupAxios(setupInterceptors?: boolean) {\r\n let httpAxios = axios.create({\r\n baseURL: AppConsts.ServiceBaseUrl,\r\n timeout: 30000\r\n });\r\n\r\n if (!setupInterceptors)\r\n return httpAxios;\r\n\r\n httpAxios.interceptors.response.use(\r\n response => {\r\n return response;\r\n },\r\n error => {\r\n if (error.isAxiosError && error.response) {\r\n if (error.response.data && error.response.data.Error)\r\n return Promise.reject({ Error: error.response.data.Error });\r\n\r\n if (error.response.status == 401)\r\n {\r\n if (error.response.statusText == \"Unauthenticated\")\r\n {\r\n clearSession();\r\n window.location.reload(); \r\n }\r\n\r\n return Promise.reject({ Error: 'Unauthorized' });\r\n }\r\n\r\n if (error.response.status == 404)\r\n return Promise.reject({ Error: 'Not Found' });\r\n }\r\n\r\n return Promise.reject({ Error: error });\r\n }\r\n );\r\n \r\n return httpAxios;\r\n}\r\n\r\nexport { http, setHttpToken };\r\n\r\nexport interface ApiResponse {\r\n Id: string;\r\n Data: T;\r\n Total: number;\r\n Error: any;\r\n}\r\n\r\nexport interface ApiSimpleResponse {\r\n Id: string;\r\n Error: any;\r\n}","import { UserType } from \"../../services/userService\";\r\n\r\nexport type Token = {\r\n userId: string | null;\r\n email: string | null;\r\n firstName: string | null;\r\n access_token: string | null;\r\n client: string | null;\r\n geotabSessionId: string | null;\r\n geotabServer: string | null;\r\n expires_in: number | null;\r\n userType: UserType;\r\n};\r\n\r\nexport function getDefaultToken(email: string | null = null): Token {\r\n return {\r\n userId: null,\r\n email: email,\r\n firstName: null,\r\n access_token: null,\r\n client: null,\r\n geotabSessionId: null,\r\n geotabServer: null,\r\n expires_in: null,\r\n userType: UserType.Undefined\r\n };\r\n}","import { Moment, utc } from \"moment\";\r\nimport { Token, getDefaultToken } from \"./token\";\r\nimport { setHttpToken } from '../../services/httpService';\r\n\r\nconst authTokenStorageName = 'AuthToken';\r\n\r\nexport type Session = {\r\n auth: Token;\r\n expiry: Moment | null;\r\n isAuthenticated: boolean;\r\n rememberMe: boolean;\r\n};\r\n\r\nfunction getDefaultSession(): Session {\r\n return {\r\n auth: getDefaultToken(),\r\n expiry: null,\r\n isAuthenticated: false,\r\n rememberMe: false\r\n };\r\n}\r\n\r\nexport function loadSession(): Session {\r\n const session: Session = getDefaultSession();\r\n\r\n const storage = window.localStorage.getItem(authTokenStorageName);\r\n if (storage != null) {\r\n const storedSession = JSON.parse(storage) as Session;\r\n session.auth.email = storedSession.auth.email;\r\n session.rememberMe = storedSession.rememberMe;\r\n\r\n if (storedSession.auth.access_token != null && storedSession.expiry != null && utc(storedSession.expiry) > utc().add(-8, 'hours')) {\r\n session.auth = storedSession.auth;\r\n session.expiry = storedSession.expiry;\r\n session.isAuthenticated = true;\r\n session.auth.userType = storedSession.auth.userType;\r\n\r\n saveSession(session);\r\n }\r\n }\r\n\r\n return session;\r\n};\r\n\r\nexport function saveSession(session: Session) {\r\n setHttpToken(session.auth.access_token);\r\n window.localStorage.setItem(authTokenStorageName, JSON.stringify(session));\r\n}\r\n\r\nexport function clearSession(session?: Session) {\r\n if (session == null)\r\n {\r\n const storage = window.localStorage.getItem(authTokenStorageName);\r\n if (storage != null) {\r\n session = JSON.parse(storage) as Session;\r\n \r\n session.auth = getDefaultToken(session.rememberMe ? session.auth.email : null);\r\n session.expiry = null;\r\n session.isAuthenticated = false;\r\n }\r\n }\r\n\r\n if (session != null)\r\n saveSession(session);\r\n}","import { Token } from \"./token\";\r\nimport { ActionMap } from \"../util\";\r\n\r\nexport enum SessionAction {\r\n Login = 'SESSION_LOGIN',\r\n Logout = 'SESSION_LOGOUT'\r\n}\r\n\r\ntype SessionPayload = {\r\n [SessionAction.Logout]: { };\r\n [SessionAction.Login]: {\r\n token: Token;\r\n rememberMe: boolean;\r\n };\r\n};\r\n\r\nexport type SessionActions = ActionMap[keyof ActionMap];","import { utc } from 'moment';\r\nimport { Session, saveSession, clearSession } from './session';\r\nimport { getDefaultToken } from './token';\r\nimport { SessionAction, SessionActions } from './actions';\r\nimport { UserTypeParse } from '../../services/userService';\r\n\r\nexport type InitialStateType = {\r\n session: Session;\r\n};\r\n\r\nexport const SessionReducer = (state: Session, action: SessionActions) => {\r\n switch (action.type) {\r\n case SessionAction.Login:\r\n state.auth = action.payload.token;\r\n state.expiry = utc().add(action.payload.token.expires_in, 'seconds');\r\n state.rememberMe = action.payload.rememberMe;\r\n state.isAuthenticated = true;\r\n state.auth.userType = UserTypeParse(state.auth.userType);\r\n\r\n saveSession(state);\r\n\r\n return state;\r\n case SessionAction.Logout:\r\n state.auth = getDefaultToken(state.rememberMe ? state.auth.email : null);\r\n state.expiry = null;\r\n state.isAuthenticated = false;\r\n \r\n clearSession(state);\r\n\r\n return state;\r\n default:\r\n return state;\r\n }\r\n};","import React, { createContext, useContext, useReducer, Dispatch, useEffect, useRef } from 'react';\r\nimport { SessionReducer, InitialStateType } from './session/sessionReducer';\r\nimport { loadSession } from './session/session';\r\nimport { SessionActions } from './session/actions';\r\n\r\nconst initialState: InitialStateType = {\r\n session: loadSession()\r\n};\r\n\r\nconst AppContext = createContext<{\r\n state: InitialStateType;\r\n dispatch: Dispatch;\r\n}>({\r\n state: initialState,\r\n dispatch: () => null\r\n});\r\n\r\nconst mainReducer = ({ session }: InitialStateType, action: SessionActions) => ({\r\n session: SessionReducer(session, action)\r\n});\r\n\r\nexport function AppProvider(props: any) {\r\n const [state, dispatch] = useReducer(mainReducer, initialState);\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport function useStore() {\r\n return useContext(AppContext);\r\n}","import React from 'react';\r\nimport { Route, RouteProps, Redirect } from 'react-router-dom';\r\nimport { useStore } from './appProvider';\r\nimport { UserType } from '../services/userService';\r\nimport _ from 'lodash';\r\nimport { v4 as uuidv4 } from 'uuid';\r\n\r\ninterface IAuthorizedRouteProps extends RouteProps {\r\n userTypeList?: UserType[],\r\n forceRefresh?: boolean\r\n}\r\n\r\nexport default function AuthorizedRoute({ userTypeList, forceRefresh, component: Component, ...rest }: IAuthorizedRouteProps) {\r\n const { state } = useStore();\r\n\r\n if (!Component) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n !state.session.isAuthenticated ?\r\n :\r\n userTypeList != undefined && _.indexOf(userTypeList, state.session.auth.userType) == -1 ?\r\n :\r\n forceRefresh != undefined && forceRefresh == true ? \r\n : \r\n \r\n }\r\n />\r\n );\r\n}","import Logo from '../../images/logo_lt.png';\r\n\r\nimport React from 'react';\r\n\r\nexport default function Header() {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n mpaq logo\r\n
\r\n
\r\n

\r\n Round Trip GPS\r\n

\r\n
\r\n
\r\n
\r\n
\r\n );\r\n}","import React from 'react';\r\nimport { useHistory } from 'react-router';\r\nimport { Link } from 'react-router-dom';\r\nimport { useStore } from '../../components/appProvider';\r\nimport { SessionAction } from '../../components/session/actions';\r\nimport { UserType } from '../../services/userService';\r\n\r\nexport default function Navigation() {\r\n const { state, dispatch } = useStore();\r\n\r\n const history = useHistory();\r\n\r\n function logOut() {\r\n dispatch({ type: SessionAction.Logout, payload: {} });\r\n history.push('/');\r\n }\r\n\r\n return (\r\n \r\n );\r\n}","import React from 'react';\r\n\r\nexport default function Footer() {\r\n return (\r\n
\r\n
\r\n \r\n © MPAQ Automation Inc.\r\n \r\n
\r\n
\r\n );\r\n}","import React from 'react';\r\nimport { StaticContext } from 'react-router';\r\nimport { RouteComponentProps } from 'react-router-dom';\r\n\r\ntype ErrorLocationState = {\r\n errorMessage?: string\r\n}\r\n\r\nexport default function Error(props: RouteComponentProps<{}, StaticContext, ErrorLocationState>)\r\n{\r\n return (\r\n <>\r\n
\r\n
\r\n

Error

\r\n
\r\n
\r\n {\r\n props.location.state && props.location.state.errorMessage != undefined ?\r\n
\r\n
\r\n
    \r\n
  • {props.location.state.errorMessage}
  • \r\n
\r\n
\r\n
:\r\n <>\r\n }\r\n \r\n );\r\n}","import React, { useState, useEffect } from 'react';\r\n\r\nexport default function Loading() {\r\n const [isLoading, setIsLoading] = useState(false);\r\n\r\n useEffect(() => {\r\n var timer = setTimeout(() => setIsLoading(true), 200);\r\n\r\n return () => { clearTimeout(timer); setIsLoading(false); };\r\n }, []);\r\n\r\n return (\r\n isLoading ? \r\n
\r\n
\r\n Loading...\r\n
\r\n
:\r\n <>\r\n );\r\n}","import React, { useState, useEffect } from 'react';\r\nimport { useStore } from '../../components/appProvider';\r\nimport Loading from '../../components/loading';\r\n\r\nexport default function Map()\r\n{\r\n const { state } = useStore();\r\n const [isLoading, setIsLoading] = useState(true);\r\n\r\n useEffect(() => {\r\n let timer = setTimeout(() => setIsLoading(false), 2000);\r\n\r\n return () => clearTimeout(timer);\r\n }, []);\r\n\r\n return (\r\n <>\r\n {\r\n isLoading ? : <>\r\n }\r\n
\r\n \r\n \r\n
\r\n \r\n );\r\n}","import { http } from './httpService';\r\nimport { Token } from '../components/session/token';\r\n\r\nexport interface AuthenticationModel {\r\n email: string;\r\n password: string;\r\n database: string;\r\n}\r\n\r\nexport interface AuthenticationResultModel {\r\n token: Token;\r\n error: boolean | null;\r\n errorMessage: string | null;\r\n}\r\n\r\nclass AuthenticationService {\r\n public async authenticate(model: AuthenticationModel): Promise {\r\n let params = new URLSearchParams();\r\n params.append('grant_type', 'password');\r\n params.append('username', model.email);\r\n params.append('password', model.password);\r\n\r\n return await http.post('api/Authenticate?m=GeotabCredentials&database=' + model.database, params)\r\n .then(function (response) \r\n {\r\n if (response.data.hasOwnProperty('access_token')) {\r\n return { token: JSON.parse(JSON.stringify(response.data)) as Token } as AuthenticationResultModel;\r\n }\r\n\r\n return { error: true, errorMessage: 'Something went wrong' } as AuthenticationResultModel;\r\n })\r\n .catch(function (error) \r\n {\r\n if (error.response && error.response.data && error.response.data.error_description) {\r\n return { error: true, errorMessage: error.response.data.error_description } as AuthenticationResultModel;\r\n }\r\n\r\n return { error: true, errorMessage: 'Something went wrong'} as AuthenticationResultModel;\r\n });\r\n }\r\n}\r\n\r\nexport default new AuthenticationService();","import React, { useEffect, useState, useRef } from 'react';\r\nimport { StaticContext, useHistory } from 'react-router';\r\nimport { RouteComponentProps, useParams } from 'react-router-dom';\r\nimport { Formik, Form, Field } from 'formik';\r\nimport * as Yup from 'yup';\r\nimport { SessionAction } from '../../components/session/actions';\r\nimport Loading from '../../components/loading';\r\nimport { useStore } from '../../components/appProvider';\r\nimport AuthenticationService from '../../services/authenticationService';\r\n\r\ntype LoginLocationState = {\r\n referer: Location;\r\n};\r\n\r\nexport default function Login(props: RouteComponentProps<{}, StaticContext, LoginLocationState>) {\r\n const initialLoad = useRef(true);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [showDatabaseInput, setShowDatabaseInput] = useState(false);\r\n const [redirect, setRedirect] = useState('/');\r\n const { state, dispatch } = useStore();\r\n\r\n const history = useHistory();\r\n const { admin } = useParams();\r\n\r\n const schema = Yup.object().shape({\r\n Email: Yup.string().required('Email is required'),\r\n Password: Yup.string().required('Password is required')\r\n });\r\n\r\n useEffect(() => {\r\n setShowDatabaseInput(admin === 'admin');\r\n\r\n if (initialLoad.current)\r\n {\r\n initialLoad.current = false;\r\n\r\n if (props.location.state && props.location.state.referer)\r\n setRedirect(props.location.state.referer.pathname);\r\n\r\n if (redirect === '/Login')\r\n setRedirect('/');\r\n\r\n if (state.session.isAuthenticated)\r\n history.push(redirect);\r\n }\r\n }, [props.location.state, state.session.isAuthenticated, history, redirect, admin]);\r\n\r\n async function submit(values: any, { setErrors, setSubmitting }: any) {\r\n setIsLoading(true);\r\n\r\n let result = await AuthenticationService.authenticate({\r\n email: values.Email,\r\n password: values.Password,\r\n database: values.Database\r\n }); \r\n \r\n setIsLoading(false);\r\n setSubmitting(false);\r\n\r\n if (result.error) {\r\n setErrors({ error: result.errorMessage });\r\n }\r\n else {\r\n dispatch({ type: SessionAction.Login, payload: { token: result.token, rememberMe: values.RememberMe } });\r\n history.push(redirect);\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n { isLoading ? : <> }\r\n
\r\n
\r\n
\r\n
\r\n Login to my account\r\n
\r\n
\r\n \r\n {({ isSubmitting, isValid, errors }) => (\r\n
\r\n
\r\n Please look at the error(s) below:\r\n
    \r\n {Object.values(errors).map((msg, i) => (\r\n
  • {msg}
  • \r\n ))}\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n )}\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n );\r\n}","import React from 'react';\r\n\r\ntype ErrorProps = { \r\n message: string,\r\n error?: any \r\n};\r\n\r\nexport default function Error({ message, error }: ErrorProps) {\r\n if (error && !(error instanceof Object) && error.length > 0)\r\n message += ' (' + error + ')';\r\n\r\n return (\r\n
\r\n
\r\n {message}\r\n
\r\n
\r\n );\r\n};","import React, { useState, useEffect, useRef } from 'react';\r\nimport Loading from '../../components/loading';\r\nimport userService, { UserModel, UserTypeLabel } from '../../services/userService';\r\nimport Error from '../../components/error';\r\nimport { Link } from 'react-router-dom';\r\n\r\nexport default function Users()\r\n{\r\n const initialLoad = useRef(true);\r\n const [isLoading, setIsLoading] = useState(true);\r\n const [users, setUsers] = useState([] as UserModel[]);\r\n const [error, setError] = useState(null);\r\n\r\n useEffect(() => {\r\n if (initialLoad.current)\r\n {\r\n initialLoad.current = false;\r\n\r\n userService.getAll()\r\n .then((response) => { setUsers(response.Data) })\r\n .catch((response) => setError(response.Error))\r\n .finally(() => setIsLoading(false));\r\n }\r\n });\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n

Users

\r\n
\r\n
\r\n
\r\n Add User\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {\r\n isLoading ?\r\n :\r\n error != null ?\r\n :\r\n <>\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n users ?\r\n users.map((user) => ) :\r\n <>\r\n }\r\n \r\n
UserFirstLastRole
\r\n
\r\n
\r\n
\r\n
\r\n \r\n }\r\n \r\n );\r\n}\r\n\r\ninterface IUserRowProps {\r\n user: UserModel\r\n}\r\n\r\nfunction UserRow({ user }: IUserRowProps) {\r\n return (\r\n \r\n {user.Email}\r\n {user.FirstName}\r\n {user.LastName}\r\n {UserTypeLabel.get(user.Type)}\r\n \r\n Edit\r\n \r\n \r\n )\r\n}","import Noty from 'noty';\r\n\r\nexport default abstract class Notification {\r\n public static Success(message: string) {\r\n new Noty({ theme: 'bootstrap-v4', text: message, type: 'success', timeout: 5000, progressBar: true }).show();\r\n };\r\n \r\n public static Warning(message: string) {\r\n console.log('Warning: ' + message); \r\n new Noty({ theme: 'bootstrap-v4', text: message, type: 'warning', timeout: 5000, progressBar: true }).show();\r\n };\r\n\r\n public static Error(message: string) {\r\n console.log('Error: ' + message); \r\n new Noty({ theme: 'bootstrap-v4', text: message, type: 'error', timeout: 5000, progressBar: true }).show();\r\n };\r\n}","import React, { useState } from 'react';\r\nimport { useHistory } from 'react-router';\r\nimport { Formik, Form, Field } from 'formik';\r\nimport { useStore } from '../../../components/appProvider';\r\nimport * as Yup from 'yup';\r\nimport UserService, { UserModel, UserType } from '../../../services/userService';\r\nimport Notification from '../../../components/notification'\r\nimport Loading from '../../../components/loading';\r\n\r\ninterface IUserSettingsProps {\r\n user: UserModel\r\n}\r\n\r\nexport default function UserSettings({ user }: IUserSettingsProps) {\r\n const { state } = useStore();\r\n const [isLoading, setIsLoading] = useState(false);\r\n const history = useHistory();\r\n const isAdmin = state.session.auth.userType == UserType.GeotabAdmin || state.session.auth.userType == UserType.GlobalAdmin;\r\n\r\n const schema = Yup.object().shape({\r\n Type: Yup.string().required('Permission Group is required'),\r\n FirstName: Yup.string().required('First Name is required'),\r\n LastName: Yup.string().required('Last Name is required')\r\n });\r\n \r\n async function submit(values: any, { setErrors, setSubmitting }: any) {\r\n setIsLoading(true);\r\n\r\n await UserService.update({\r\n Id: user.Id,\r\n FirstName: values.FirstName,\r\n LastName: values.LastName,\r\n Type: values.Type\r\n } as UserModel)\r\n .then(() => {\r\n Notification.Success('User saved successfully');\r\n history.push(isAdmin ? '/users' : '/users/details/' + user.Id);\r\n })\r\n .catch((response) => { \r\n setErrors({ error: response.Error }); \r\n })\r\n .finally(() => { \r\n setIsLoading(false); \r\n setSubmitting(false); \r\n });\r\n }\r\n\r\n return (\r\n <>\r\n { isLoading ? : <> }\r\n
\r\n
\r\n

\r\n Settings\r\n

\r\n
\r\n
\r\n \r\n {({ isSubmitting, isValid, errors }) => (\r\n
\r\n
\r\n
\r\n
\r\n Please look at the error(s) below:\r\n
    \r\n {Object.values(errors).map((msg, i) => (\r\n
  • {msg}
  • \r\n ))}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n )}\r\n \r\n \r\n );\r\n}","import React, { useState } from 'react';\r\nimport { Formik, Form, Field } from 'formik';\r\nimport * as Yup from 'yup';\r\nimport UserService, { UserPasswordModel } from '../../../services/userService';\r\nimport Notification from '../../../components/notification'\r\nimport Loading from '../../../components/loading';\r\n\r\ninterface IUserPasswordProps {\r\n userId: string,\r\n tabSelect: (key: any) => void\r\n}\r\n\r\nexport default function UserPassword({ userId, tabSelect }: IUserPasswordProps) {\r\n const [isLoading, setIsLoading] = useState(false);\r\n\r\n const schema = Yup.object().shape({\r\n CurrentPassword: Yup.string().required('Current Password is required'),\r\n Password: Yup.string().required('Password is required').min(8, 'Password must be at least 8 characters'),\r\n ConfirmPassword: Yup.string().required('Confirmed Password is required').min(8, 'Confirmed Password must be at least 8 characters')\r\n .test('passwords-match', 'Passwords must match', function(value) {\r\n return this.parent.Password === value;\r\n })\r\n });\r\n\r\n async function submit(values: any, { setErrors, setSubmitting }: any) {\r\n setIsLoading(true);\r\n\r\n await UserService.updatePassword({\r\n Id: userId,\r\n CurrentPassword: values.CurrentPassword,\r\n Password: values.Password,\r\n ConfirmPassword: values.ConfirmPassword\r\n } as UserPasswordModel)\r\n .then(() => { \r\n Notification.Success('User password changed successfully'); \r\n tabSelect('Settings');\r\n })\r\n .catch((response) => { \r\n setErrors({ error: response.Error }); \r\n })\r\n .finally(() => { \r\n setIsLoading(false); \r\n setSubmitting(false); \r\n });\r\n }\r\n\r\n return (\r\n <>\r\n { isLoading ? : <> }\r\n
\r\n
\r\n

\r\n Password\r\n

\r\n
\r\n
\r\n \r\n {({ isSubmitting, isValid, errors }) => (\r\n
\r\n
\r\n
\r\n
\r\n Please look at the error(s) below:\r\n
    \r\n {Object.values(errors).map((msg, i) => (\r\n
  • {msg}
  • \r\n ))}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n )}\r\n \r\n \r\n );\r\n}","import React, { useState } from 'react';\r\nimport { Formik, Form, Field } from 'formik';\r\nimport * as Yup from 'yup';\r\nimport UserService, { UserPasswordAdminModel } from '../../../services/userService';\r\nimport Notification from '../../../components/notification'\r\nimport Loading from '../../../components/loading';\r\n\r\ninterface IUserPasswordAdminProps {\r\n userId: string,\r\n tabSelect: (key: any) => void\r\n}\r\n\r\nexport default function UserPasswordAdmin({ userId, tabSelect }: IUserPasswordAdminProps) {\r\n const [isLoading, setIsLoading] = useState(false);\r\n\r\n const schema = Yup.object().shape({\r\n Password: Yup.string().required('Password is required').min(8, 'Password must be at least 8 characters'),\r\n ConfirmPassword: Yup.string().required('Confirmed Password is required').min(8, 'Confirmed Password must be at least 8 characters')\r\n .test('passwords-match', 'Passwords must match', function(value) {\r\n return this.parent.Password === value;\r\n })\r\n });\r\n\r\n async function submit(values: any, { setErrors, setSubmitting }: any) {\r\n setIsLoading(true);\r\n\r\n await UserService.updatePasswordAdmin({\r\n Id: userId,\r\n Password: values.Password,\r\n ConfirmPassword: values.ConfirmPassword\r\n } as UserPasswordAdminModel)\r\n .then(() => { \r\n Notification.Success('User password changed successfully'); \r\n tabSelect('Settings');\r\n })\r\n .catch((response) => { \r\n setErrors({ error: response.Error }); \r\n })\r\n .finally(() => { \r\n setIsLoading(false); \r\n setSubmitting(false); \r\n });\r\n }\r\n\r\n return (\r\n <>\r\n { isLoading ? : <> }\r\n
\r\n
\r\n

\r\n Password\r\n

\r\n
\r\n
\r\n \r\n {({ isSubmitting, isValid, errors }) => (\r\n
\r\n
\r\n
\r\n
\r\n Please look at the error(s) below:\r\n
    \r\n {Object.values(errors).map((msg, i) => (\r\n
  • {msg}
  • \r\n ))}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n )}\r\n \r\n \r\n );\r\n}","import React, { useState } from 'react';\r\nimport UserService from '../../../services/userService';\r\nimport Notification from '../../../components/notification'\r\nimport Loading from '../../../components/loading';\r\nimport { useHistory } from 'react-router-dom';\r\n\r\ninterface IArchiveUserProps {\r\n userId: string,\r\n userName: string\r\n}\r\n\r\nexport default function ArchiveUser({ userId, userName }: IArchiveUserProps) {\r\n const [isLoading, setIsLoading] = useState(false);\r\n const history = useHistory();\r\n\r\n async function archiveUserClick() {\r\n setIsLoading(true);\r\n\r\n await UserService.archive(userId)\r\n .then(() => { \r\n Notification.Success('User successfully archived'); \r\n })\r\n .catch(() => { \r\n Notification.Error('User archiving failed'); \r\n })\r\n .finally(() => { \r\n setIsLoading(false); \r\n history.push('/users');\r\n });\r\n }\r\n\r\n return (\r\n <>\r\n { isLoading ? : <> }\r\n
\r\n
\r\n

\r\n Archive User\r\n

\r\n
\r\n Are you sure you want to archive {userName}?\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n );\r\n}","import React, { useState, useEffect } from 'react';\r\nimport { useParams } from 'react-router-dom';\r\nimport { Tab, Row, Col, Nav } from 'react-bootstrap';\r\nimport { useStore } from '../../components/appProvider';\r\nimport Loading from '../../components/loading';\r\nimport Error from '../../components/error';\r\nimport UserSettings from './components/settings';\r\nimport UserPassword from './components/password';\r\nimport UserPasswordAdmin from './components/passwordAdmin';\r\nimport ArchiveUser from './components/archive';\r\nimport userService, { UserModel, UserType } from '../../services/userService';\r\n\r\nexport default function UserDetails()\r\n{\r\n const [isLoading, setIsLoading] = useState(true);\r\n const [tabKey, setTabKey] = useState('Settings');\r\n const [user, setUser] = useState({} as UserModel);\r\n const [error, setError] = useState(null);\r\n\r\n const { state } = useStore();\r\n const { userId } = useParams();\r\n\r\n useEffect(() => {\r\n userService.get(userId)\r\n .then((response) => { setUser(response.Data) })\r\n .catch((response) => { setError(response.Error) })\r\n .finally(() => setIsLoading(false));\r\n\r\n return () => { reset(); };\r\n }, [userId]);\r\n\r\n function reset()\r\n {\r\n setIsLoading(true);\r\n setUser({} as UserModel);\r\n setError(null);\r\n setTabKey('Settings');\r\n };\r\n\r\n function handleTabSelect(key: any)\r\n {\r\n setTabKey(key);\r\n };\r\n\r\n const isSelf = state.session.auth.userId == userId;\r\n\r\n const showChangePassword = isSelf;\r\n const showSetPassword = !isSelf && (state.session.auth.userType == UserType.GeotabAdmin || state.session.auth.userType == UserType.GlobalAdmin);\r\n const showArchiveUser = !isSelf && (state.session.auth.userType == UserType.GeotabAdmin || state.session.auth.userType == UserType.GlobalAdmin);\r\n\r\n return (\r\n <>\r\n {\r\n isLoading ?\r\n :\r\n error != null ?\r\n :\r\n <>\r\n
\r\n
\r\n

{user.FirstName} {user.LastName}

\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n showChangePassword ?\r\n \r\n \r\n : \r\n <>\r\n }\r\n {\r\n showSetPassword ?\r\n \r\n \r\n : \r\n <>\r\n }\r\n {\r\n showArchiveUser ?\r\n \r\n \r\n : \r\n <>\r\n }\r\n \r\n \r\n \r\n \r\n
\r\n \r\n }\r\n \r\n );\r\n}","import React, { useState, useEffect } from 'react';\r\nimport { useHistory } from 'react-router';\r\nimport { Formik, Form, Field } from 'formik';\r\nimport * as Yup from 'yup';\r\nimport Loading from '../../components/loading';\r\nimport UserService, { UserModel, UserPasswordModel, UserAddModel, UserType } from '../../services/userService';\r\nimport Notification from '../../components/notification'\r\n\r\nexport default function AddUser()\r\n{\r\n const [isLoading, setIsLoading] = useState(false);\r\n const history = useHistory();\r\n\r\n const schema = Yup.object().shape({\r\n Email: Yup.string().required('Username is required').min(2, 'Username must be at least 2 characters')\r\n .test('no-email-for-drivers', 'Username must not be an email for drivers', function(value) {\r\n return !(this.parent.Type === String(UserType.GeotabDriver) && this.parent.Email.includes('@'));\r\n }),\r\n Type: Yup.string().required('Permission Group is required'),\r\n FirstName: Yup.string().required('First Name is required'),\r\n LastName: Yup.string().required('Last Name is required'),\r\n Password: Yup.string().required('Password is required').min(8, 'Password must be at least 8 characters'),\r\n ConfirmPassword: Yup.string().required('Confirmed Password is required').min(8, 'Confirmed Password must be at least 8 characters')\r\n .test('passwords-match', 'Passwords must match', function(value) {\r\n return this.parent.Password === value;\r\n })\r\n });\r\n\r\n async function submit(values: any, { setErrors, setSubmitting }: any) {\r\n setIsLoading(true);\r\n\r\n await UserService.add({\r\n User: {\r\n FirstName: values.FirstName,\r\n LastName: values.LastName,\r\n Type: values.Type,\r\n Email: values.Email\r\n } as UserModel,\r\n Password: {\r\n Password: values.Password,\r\n ConfirmPassword: values.ConfirmPassword\r\n } as UserPasswordModel\r\n } as UserAddModel)\r\n .then(() => {\r\n Notification.Success('User added successfully');\r\n history.push('/users');\r\n })\r\n .catch((response) => {\r\n setErrors({ error: response.Error }); \r\n })\r\n .finally(() => { \r\n setIsLoading(false); \r\n setSubmitting(false); \r\n });\r\n }\r\n\r\n return (\r\n <>\r\n { isLoading ? : <> }\r\n
\r\n
\r\n
\r\n

\r\n Add User Account\r\n

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Information\r\n
\r\n
\r\n \r\n {({ isSubmitting, isValid, errors }) => (\r\n
\r\n
\r\n
\r\n
\r\n Please look at the error(s) below:\r\n
    \r\n {Object.values(errors).map((msg, i) => (\r\n
  • {msg}
  • \r\n ))}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n )}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n );\r\n}","import { http, ApiResponse, ApiSimpleResponse } from './httpService';\r\n\r\nexport interface GroupModel {\r\n Id: string;\r\n Name: string;\r\n};\r\n\r\nclass GroupService {\r\n public async getAll(): Promise> {\r\n return (await http.get>('api/groups/getAll')).data;\r\n };\r\n public async addDefault(): Promise {\r\n return (await http.post('api/groups/addDefault')).data;\r\n };\r\n}\r\n\r\nexport default new GroupService();","import { http, ApiResponse, ApiSimpleResponse } from './httpService';\r\n\r\nexport interface ClearanceModel {\r\n Id: string;\r\n Name: string;\r\n};\r\n\r\nclass ClearanceService {\r\n public async getAll(): Promise> {\r\n return (await http.get>('api/clearances/getAll')).data;\r\n };\r\n public async addDefault(): Promise {\r\n return (await http.post('api/clearances/addDefault')).data;\r\n };\r\n}\r\n\r\nexport default new ClearanceService();","import React, { useState, useEffect, useRef } from 'react';\r\nimport Loading from '../../components/loading';\r\nimport Error from '../../components/error';\r\nimport Notification from '../../components/notification';\r\nimport groupService, { GroupModel } from '../../services/groupService';\r\nimport clearanceService, { ClearanceModel } from '../../services/clearanceService';\r\n\r\nexport default function AdminHome()\r\n{\r\n const initialLoad = useRef(true);\r\n const [isLoading, setIsLoading] = useState(true);\r\n const [groups, setGroups] = useState([] as GroupModel[]);\r\n const [clearances, setClearances] = useState([] as ClearanceModel[]);\r\n const [error, setError] = useState(null);\r\n\r\n \r\n useEffect(() => {\r\n if (initialLoad.current)\r\n {\r\n initialLoad.current = false;\r\n\r\n getGroups();\r\n getSecurityClearances();\r\n }\r\n });\r\n\r\n function getGroups()\r\n {\r\n groupService.getAll()\r\n .then((response) => { setGroups(response.Data) })\r\n .catch((response) => setError(response.Error))\r\n .finally(() => setIsLoading(false));\r\n }\r\n\r\n function addDefaultGroups()\r\n {\r\n setIsLoading(true);\r\n\r\n groupService.addDefault()\r\n .then(() => { Notification.Success(\"Default groups added\"); getGroups(); })\r\n .catch((response) => Notification.Error(response.Error))\r\n .finally(() => setIsLoading(false));\r\n }\r\n\r\n function getSecurityClearances()\r\n {\r\n clearanceService.getAll()\r\n .then((response) => { setClearances(response.Data) })\r\n .catch((response) => setError(response.Error))\r\n .finally(() => setIsLoading(false));\r\n }\r\n\r\n function addDefaultSecurityClearances()\r\n {\r\n setIsLoading(true);\r\n\r\n clearanceService.addDefault()\r\n .then(() => { Notification.Success(\"Default security clearances added\"); getSecurityClearances(); })\r\n .catch((response) => Notification.Error(response.Error))\r\n .finally(() => setIsLoading(false));\r\n }\r\n\r\n return (\r\n <>\r\n { isLoading ? : <> }\r\n
\r\n
\r\n

Client Settings

\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n {\r\n error != null ?\r\n :\r\n <>\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n groups ?\r\n groups.map((group) => ) :\r\n <>\r\n }\r\n \r\n
Groups
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n clearances ?\r\n clearances.map((clearance) => ) :\r\n <>\r\n }\r\n \r\n
Security Clearances
\r\n
\r\n
\r\n
\r\n
\r\n \r\n }\r\n \r\n );\r\n}\r\n\r\ninterface IGroupRowProps {\r\n group: GroupModel\r\n}\r\n\r\nfunction GroupRow({ group }: IGroupRowProps) {\r\n return (\r\n \r\n {group.Name}\r\n \r\n )\r\n}\r\n\r\ninterface IClearanceRowProps {\r\n clearance: ClearanceModel\r\n}\r\n\r\nfunction ClearanceRow({ clearance }: IClearanceRowProps) {\r\n return (\r\n \r\n {clearance.Name}\r\n \r\n )\r\n}","import 'bootstrap/dist/css/bootstrap.css';\r\nimport 'noty/lib/noty.css';\r\nimport 'noty/lib/themes/bootstrap-v4.css';\r\nimport './styles/App.css';\r\n\r\nimport React from 'react';\r\nimport { Switch, Route } from 'react-router-dom';\r\nimport AuthorizedRoute from './components/authorizedRoute';\r\nimport Header from './views/shared/header';\r\nimport Navigation from './views/shared/navigation';\r\nimport Footer from './views/shared/footer';\r\nimport Error from './views/error/index';\r\nimport Map from './views/map/index';\r\nimport Login from './views/login/index';\r\nimport Users from './views/user/index';\r\nimport UserDetails from './views/user/details';\r\nimport AddUser from './views/user/add';\r\nimport { UserType } from './services/userService';\r\nimport AdminHome from './views/admin';\r\n\r\nexport default function App() {\r\n return (\r\n <>\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n