{"version":3,"sources":["components/api-authorization/ApiAuthorizationConstants.js","components/api-authorization/AuthorizeService.js","components/api-authorization/LoginMenu.js","images/PsychAssoc_logo_full_alt.png","components/NavMenu.js","components/Layout.js","components/admin/AdminFunctions.js","components/Home.js","util/util.js","components/UserSearch.js","components/UserManagement.js","components/CandidateSearch.js","components/AdminReportTABB.js","components/TABBTools.js","components/ClientLogos.js","components/FAQ.js","components/TOU.js","components/api-authorization/AuthorizeRoute.js","components/api-authorization/Login.js","components/api-authorization/Logout.js","components/api-authorization/ApiAuthorizationRoutes.js","components/Counter.js","components/FetchData.js","components/admin/Roles.js","components/admin/CreateRole.js","_layout/RowItem.js","components/admin/RoleDetails.js","components/TemplateManagement.js","App.js","index.js"],"names":["ApplicationName","QueryParameterNames","LogoutActions","LoginActions","prefix","ApplicationPaths","DefaultLoginRedirectPath","ApiAuthorizationClientConfigurationUrl","ApiAuthorizationPrefix","Login","LoginFailed","LoginCallback","Register","Profile","LogOut","LoggedOut","LogOutCallback","IdentityRegisterPath","IdentityManagePath","AuthorizeService","_callbacks","_nextSubscriptionId","_user","_isAuthenticated","_popUpDisabled","a","this","getUser","user","profile","ensureUserManagerInitialized","userManager","access_token","state","signinSilent","createArguments","silentUser","updateState","success","console","log","Error","signinPopup","popUpUser","message","error","signinRedirect","redirect","url","signinCallback","signoutPopup","undefined","signoutRedirect","signoutCallback","response","data","notifySubscribers","callback","push","subscription","subscriptionId","subscriptionIndex","map","element","index","found","filter","length","splice","i","useReplaceToNavigate","status","AuthenticationResultStatus","Fail","Success","Redirect","fetch","ok","json","settings","automaticSilentRenew","includeIdTokenInSilentRenew","userStore","WebStorageStateStore","UserManager","events","addUserSignedOut","removeUser","authService","LoginMenu","props","isAuthenticated","userName","_subscription","subscribe","populateState","unsubscribe","Promise","all","setState","name","profilePath","logoutPath","pathname","local","authenticatedView","registerPath","loginPath","anonymousView","NavItem","NavLink","tag","Link","className","to","Component","NavMenu","toggleNavbar","bind","collapsed","Navbar","light","Container","NavbarBrand","src","q4Logo","style","width","alt","NavbarToggler","onClick","Collapse","isOpen","navbar","displayName","Layout","children","AdminFunctions","isAdminAsync","getAccessToken","token","headers","AdminRoleId","isTabbAdminAsync","Home","isAdmin","document","getElementsByTagName","fontSize","paddingTop","hidden","DIMENSIONS","UserSearch","setWindowDimensions","height","window","innerHeight","innerWidth","clientOptions","client","search","users","sort","column","direction","loading","noResults","addEventListener","getClients","getClientByUserId","getUsers","marginTop","fluid","Row","Col","xl","lg","md","sm","xs","Input","type","onChange","e","target","value","id","placeholder","labelKey","selected","options","disabled","Button","color","searchUsers","history","hasUser","whiteSpace","Table","responsive","hover","handleSort","colSpan","display","justifyContent","alignItems","textAlign","minHeight","position","top","left","marginLeft","Spinner","lastName","firstName","role","email","handleRowClick","cursor","company","query","clientId","userId","existingUser","b","localeCompare","reverse","Option","_jsx","components","label","UserManagement","constructor","super","handleChange","userRoles","active","officePhone","ext","homePhone","mobilePhone","userAlreadyExists","clientRequired","userRoleData","componentDidMount","getRoles","location","getUserDetails","render","_jsxs","Typeahead","checked","valid","invalid","ReactSelect","closeMenuOnSelect","hideSelectedOptions","allowSelectAll","styles","control","base","background","handleSave","Alert","concat","roles","dto","getUserExists","editUser","createUser","method","body","JSON","stringify","CandidateSearch","handleKeyPress","event","key","searchCandidates","base64ToBlob","file","binaryString","atob","len","bytes","Uint8Array","charCodeAt","Blob","clientText","candidates","currentPage","itemsPerPage","numberOfPages","testType","testLevel","handleClick","handlePageSizeChange","Number","Math","ceil","pageSize","showAllCandidates","indexOfLastItem","indexOfFirstItem","renderItems","slice","candidate","assessments","portalStatusText","reportDueDate","Date","toLocaleDateString","UncontrolledTooltip","modifiers","preventOverflow","boundariesElement","innerClassName","placement","hoverText","getAssessmentDocuments","size","coachingCard","documentId","getDocument","recordId","coachingCardStatus","feedbackReport","feedbackReportStatus","pageNumbers","renderPageNumbers","number","onKeyPress","allowNew","onBlur","flex","marginRight","loadingDocument","marginBottom","clientOptionList","String","downloadFile","documentBase64","documentTitle","assessmentId","candidateId","filename","blob","uriContent","URL","createObjectURL","link","createElement","setAttribute","MouseEvent","dispatchEvent","AdminReportTABB","onFileChange","selectedFile","files","onFileUpload","uploadSuccess","formData","FormData","append","requestOptions","sheetOptions","sheetOptionsData","generateAssessment","splitWords","split","getAssessmentDocument","_Fragment","isDisabled","FaSort","ex","TABBTools","fileChosen","async","isTabbAdmin","isWordDoc","level","levelType","ClientLogos","clientRecordId","clientCompany","Admin","getClientLogos","updateClient","clientLogoURL","clientLogos","fileName","option","FAQ","TOU","AuthorizeRoute","ready","authenticated","authenticationChanged","populateAuthenticationState","href","path","returnUrl","protocol","host","hash","redirectUrl","encodeURIComponent","component","rest","action","login","getReturnUrl","processLoginCallback","URLSearchParams","get","redirectToProfile","redirectToRegister","signIn","result","navigateToReturnUrl","completeSignIn","fromQuery","startsWith","origin","redirectToApiAuthorizationPath","encodeURI","apiAuthorizationPath","replace","Logout","isReady","logout","processLogoutCallback","signOut","completeSignOut","ApiAuthorizationRoutes","loginAction","logoutAction","Counter","currentCount","incrementCounter","FetchData","forecasts","populateWeatherData","contents","renderForecastsTable","forecast","date","temperatureC","temperatureF","summary","Roles","bordered","roleId","existingRole","CreateRole","roleName","createRole","RowItem","padding","Card","CardBody","RoleDetails","addPool","removePool","addUser","showAddSection","showRemoveSection","renameRole","close","float","addUserToRole","removeUserFromRole","ra","fade","getRoleDetails","TemplateManagement","createAssessmentReport","importAssessmentResults","base64","App","CacheBuster","currentVersion","packageInfo","version","isEnabled","process","isVerboseMode","Route","exact","baseUrl","getAttribute","rootElement","getElementById","ReactDOM","basename"],"mappings":"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","file":"static/js/main.6d793c65.chunk.js","sourcesContent":["export const ApplicationName = 'PsychAssociatesCore5React';\r\n\r\nexport const QueryParameterNames = {\r\n ReturnUrl: 'returnUrl',\r\n Message: 'message'\r\n};\r\n\r\nexport const LogoutActions = {\r\n LogoutCallback: 'logout-callback',\r\n Logout: 'logout',\r\n LoggedOut: 'logged-out'\r\n};\r\n\r\nexport const LoginActions = {\r\n Login: 'login',\r\n LoginCallback: 'login-callback',\r\n LoginFailed: 'login-failed',\r\n Profile: 'profile',\r\n Register: 'register'\r\n};\r\n\r\nconst prefix = '/authentication';\r\n\r\nexport const ApplicationPaths = {\r\n DefaultLoginRedirectPath: '/',\r\n ApiAuthorizationClientConfigurationUrl: `_configuration/${ApplicationName}`,\r\n ApiAuthorizationPrefix: prefix,\r\n Login: `${prefix}/${LoginActions.Login}`,\r\n LoginFailed: `${prefix}/${LoginActions.LoginFailed}`,\r\n LoginCallback: `${prefix}/${LoginActions.LoginCallback}`,\r\n Register: `${prefix}/${LoginActions.Register}`,\r\n Profile: `${prefix}/${LoginActions.Profile}`,\r\n LogOut: `${prefix}/${LogoutActions.Logout}`,\r\n LoggedOut: `${prefix}/${LogoutActions.LoggedOut}`,\r\n LogOutCallback: `${prefix}/${LogoutActions.LogoutCallback}`,\r\n IdentityRegisterPath: 'Identity/Account/Register',\r\n IdentityManagePath: 'Identity/Account/Manage'\r\n};\r\n","import { UserManager, WebStorageStateStore } from 'oidc-client';\r\nimport { ApplicationPaths, ApplicationName } from './ApiAuthorizationConstants';\r\n\r\nexport class AuthorizeService {\r\n _callbacks = [];\r\n _nextSubscriptionId = 0;\r\n _user = null;\r\n _isAuthenticated = false;\r\n\r\n // By default pop ups are disabled because they don't work properly on Edge.\r\n // If you want to enable pop up authentication simply set this flag to false.\r\n _popUpDisabled = true;\r\n\r\n async isAuthenticated() {\r\n const user = await this.getUser();\r\n return !!user;\r\n }\r\n\r\n async getUser() {\r\n if (this._user && this._user.profile) {\r\n return this._user.profile;\r\n }\r\n\r\n await this.ensureUserManagerInitialized();\r\n const user = await this.userManager.getUser();\r\n return user && user.profile;\r\n }\r\n\r\n async getAccessToken() {\r\n await this.ensureUserManagerInitialized();\r\n const user = await this.userManager.getUser();\r\n return user && user.access_token;\r\n }\r\n\r\n // We try to authenticate the user in three different ways:\r\n // 1) We try to see if we can authenticate the user silently. This happens\r\n // when the user is already logged in on the IdP and is done using a hidden iframe\r\n // on the client.\r\n // 2) We try to authenticate the user using a PopUp Window. This might fail if there is a\r\n // Pop-Up blocker or the user has disabled PopUps.\r\n // 3) If the two methods above fail, we redirect the browser to the IdP to perform a traditional\r\n // redirect flow.\r\n async signIn(state) {\r\n await this.ensureUserManagerInitialized();\r\n try {\r\n const silentUser = await this.userManager.signinSilent(this.createArguments());\r\n this.updateState(silentUser);\r\n return this.success(state);\r\n } catch (silentError) {\r\n // User might not be authenticated, fallback to popup authentication\r\n console.log(\"Silent authentication error: \", silentError);\r\n\r\n try {\r\n if (this._popUpDisabled) {\r\n throw new Error('Popup disabled. Change \\'AuthorizeService.js:AuthorizeService._popupDisabled\\' to false to enable it.')\r\n }\r\n\r\n const popUpUser = await this.userManager.signinPopup(this.createArguments());\r\n this.updateState(popUpUser);\r\n return this.success(state);\r\n } catch (popUpError) {\r\n if (popUpError.message === \"Popup window closed\") {\r\n // The user explicitly cancelled the login action by closing an opened popup.\r\n return this.error(\"The user closed the window.\");\r\n } else if (!this._popUpDisabled) {\r\n console.log(\"Popup authentication error: \", popUpError);\r\n }\r\n\r\n // PopUps might be blocked by the user, fallback to redirect\r\n try {\r\n await this.userManager.signinRedirect(this.createArguments(state));\r\n return this.redirect();\r\n } catch (redirectError) {\r\n console.log(\"Redirect authentication error: \", redirectError);\r\n return this.error(redirectError);\r\n }\r\n }\r\n }\r\n }\r\n\r\n async completeSignIn(url) {\r\n try {\r\n await this.ensureUserManagerInitialized();\r\n const user = await this.userManager.signinCallback(url);\r\n this.updateState(user);\r\n return this.success(user && user.state);\r\n } catch (error) {\r\n console.log('There was an error signing in: ', error);\r\n return this.error('There was an error signing in.');\r\n }\r\n }\r\n\r\n // We try to sign out the user in two different ways:\r\n // 1) We try to do a sign-out using a PopUp Window. This might fail if there is a\r\n // Pop-Up blocker or the user has disabled PopUps.\r\n // 2) If the method above fails, we redirect the browser to the IdP to perform a traditional\r\n // post logout redirect flow.\r\n async signOut(state) {\r\n await this.ensureUserManagerInitialized();\r\n try {\r\n if (this._popUpDisabled) {\r\n throw new Error('Popup disabled. Change \\'AuthorizeService.js:AuthorizeService._popupDisabled\\' to false to enable it.')\r\n }\r\n\r\n await this.userManager.signoutPopup(this.createArguments());\r\n this.updateState(undefined);\r\n return this.success(state);\r\n } catch (popupSignOutError) {\r\n console.log(\"Popup signout error: \", popupSignOutError);\r\n try {\r\n await this.userManager.signoutRedirect(this.createArguments(state));\r\n return this.redirect();\r\n } catch (redirectSignOutError) {\r\n console.log(\"Redirect signout error: \", redirectSignOutError);\r\n return this.error(redirectSignOutError);\r\n }\r\n }\r\n }\r\n\r\n async completeSignOut(url) {\r\n await this.ensureUserManagerInitialized();\r\n try {\r\n const response = await this.userManager.signoutCallback(url);\r\n this.updateState(null);\r\n return this.success(response && response.data);\r\n } catch (error) {\r\n console.log(`There was an error trying to log out '${error}'.`);\r\n return this.error(error);\r\n }\r\n }\r\n\r\n updateState(user) {\r\n this._user = user;\r\n this._isAuthenticated = !!this._user;\r\n this.notifySubscribers();\r\n }\r\n\r\n subscribe(callback) {\r\n this._callbacks.push({ callback, subscription: this._nextSubscriptionId++ });\r\n return this._nextSubscriptionId - 1;\r\n }\r\n\r\n unsubscribe(subscriptionId) {\r\n const subscriptionIndex = this._callbacks\r\n .map((element, index) => element.subscription === subscriptionId ? { found: true, index } : { found: false })\r\n .filter(element => element.found === true);\r\n if (subscriptionIndex.length !== 1) {\r\n throw new Error(`Found an invalid number of subscriptions ${subscriptionIndex.length}`);\r\n }\r\n\r\n this._callbacks.splice(subscriptionIndex[0].index, 1);\r\n }\r\n\r\n notifySubscribers() {\r\n for (let i = 0; i < this._callbacks.length; i++) {\r\n const callback = this._callbacks[i].callback;\r\n callback();\r\n }\r\n }\r\n\r\n createArguments(state) {\r\n return { useReplaceToNavigate: true, data: state };\r\n }\r\n\r\n error(message) {\r\n return { status: AuthenticationResultStatus.Fail, message };\r\n }\r\n\r\n success(state) {\r\n return { status: AuthenticationResultStatus.Success, state };\r\n }\r\n\r\n redirect() {\r\n return { status: AuthenticationResultStatus.Redirect };\r\n }\r\n\r\n async ensureUserManagerInitialized() {\r\n if (this.userManager !== undefined) {\r\n return;\r\n }\r\n\r\n let response = await fetch(ApplicationPaths.ApiAuthorizationClientConfigurationUrl);\r\n if (!response.ok) {\r\n throw new Error(`Could not load settings for '${ApplicationName}'`);\r\n }\r\n\r\n let settings = await response.json();\r\n settings.automaticSilentRenew = true;\r\n settings.includeIdTokenInSilentRenew = true;\r\n settings.userStore = new WebStorageStateStore({\r\n prefix: ApplicationName\r\n });\r\n\r\n this.userManager = new UserManager(settings);\r\n\r\n this.userManager.events.addUserSignedOut(async () => {\r\n await this.userManager.removeUser();\r\n this.updateState(undefined);\r\n });\r\n }\r\n\r\n static get instance() { return authService }\r\n}\r\n\r\nconst authService = new AuthorizeService();\r\n\r\nexport default authService;\r\n\r\nexport const AuthenticationResultStatus = {\r\n Redirect: 'redirect',\r\n Success: 'success',\r\n Fail: 'fail'\r\n};\r\n","import React, { Component, Fragment } from 'react';\r\nimport { NavItem, NavLink } from 'reactstrap';\r\nimport { Link } from 'react-router-dom';\r\nimport authService from './AuthorizeService';\r\nimport { ApplicationPaths } from './ApiAuthorizationConstants';\r\n\r\nexport class LoginMenu extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n isAuthenticated: false,\r\n userName: null\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this._subscription = authService.subscribe(() => this.populateState());\r\n this.populateState();\r\n }\r\n\r\n componentWillUnmount() {\r\n authService.unsubscribe(this._subscription);\r\n }\r\n\r\n async populateState() {\r\n const [isAuthenticated, user] = await Promise.all([authService.isAuthenticated(), authService.getUser()])\r\n this.setState({\r\n isAuthenticated,\r\n userName: user && user.name\r\n });\r\n }\r\n\r\n render() {\r\n const { isAuthenticated, userName } = this.state;\r\n if (!isAuthenticated) {\r\n const registerPath = `${ApplicationPaths.Register}`;\r\n const loginPath = `${ApplicationPaths.Login}`;\r\n return this.anonymousView(registerPath, loginPath);\r\n } else {\r\n const profilePath = `${ApplicationPaths.Profile}`;\r\n const logoutPath = { pathname: `${ApplicationPaths.LogOut}`, state: { local: true } };\r\n return this.authenticatedView(userName, profilePath, logoutPath);\r\n }\r\n }\r\n\r\n authenticatedView(userName, profilePath, logoutPath) {\r\n return (\r\n \r\n {/*Hello pgodar@q4solutions.com*/}\r\n Hello {userName}\r\n \r\n \r\n Logout\r\n \r\n );\r\n\r\n }\r\n\r\n anonymousView(registerPath, loginPath) {\r\n return (\r\n \r\n {/* Register */}\r\n \r\n \r\n Login\r\n \r\n );\r\n }\r\n}\r\n","export default __webpack_public_path__ + \"static/media/PsychAssoc_logo_full_alt.012bcf13.png\";","import React, { Component } from 'react';\r\nimport { Collapse, Container, Navbar, NavbarBrand, NavbarToggler } from 'reactstrap';\r\nimport { Link } from 'react-router-dom';\r\nimport { LoginMenu } from './api-authorization/LoginMenu';\r\nimport '../styles/NavMenu.css'\r\nimport q4Logo from '../images/PsychAssoc_logo_full_alt.png';\r\n//import q4Logo from '../images/image002.png';\r\n\r\nexport class NavMenu extends Component {\r\n static displayName = NavMenu.name;\r\n\r\n constructor (props) {\r\n super(props);\r\n\r\n this.toggleNavbar = this.toggleNavbar.bind(this);\r\n this.state = {\r\n collapsed: true\r\n };\r\n }\r\n\r\n toggleNavbar () {\r\n this.setState({\r\n collapsed: !this.state.collapsed\r\n });\r\n }\r\n\r\n render () {\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 Home\r\n */}\r\n {/* \r\n Counter\r\n \r\n \r\n Fetch data\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, { Component } from 'react';\r\nimport { Container } from 'reactstrap';\r\nimport { NavMenu } from './NavMenu';\r\n\r\nexport class Layout extends Component {\r\n static displayName = Layout.name;\r\n\r\n render () {\r\n return (\r\n
\r\n \r\n \r\n {this.props.children}\r\n \r\n
\r\n );\r\n }\r\n}\r\n","import authService from \"../api-authorization/AuthorizeService\";\r\n\r\nconst AdminFunctions = {\r\n isAdminAsync: async function () {\r\n const token = await authService.getAccessToken();\r\n const response = await fetch(`api/Admin/IsAdminAsync`, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n const data = await response.json();\r\n return data;\r\n },\r\n AdminRoleId: '3057196f-40ed-4cdd-b1ef-5c040a1ce311',\r\n isTabbAdminAsync: async function () {\r\n const token = await authService.getAccessToken();\r\n const response = await fetch(`api/Admin/isTabbAdminAsync`, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n const data = await response.json();\r\n return data;\r\n },\r\n};\r\n\r\nexport default AdminFunctions;","import React, { Component } from 'react';\r\nimport { NavLink } from 'reactstrap';\r\nimport { Link } from 'react-router-dom';\r\nimport authService from './api-authorization/AuthorizeService';\r\nimport AdminFunctions from './admin/AdminFunctions';\r\n\r\nexport class Home extends Component {\r\n static displayName = Home.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n user: undefined,\r\n isAdmin: false\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n const user = await authService.getUser();\r\n this.setState({ user: user });\r\n if (user) {\r\n const isAdmin = await AdminFunctions.isAdminAsync();\r\n this.setState({ isAdmin: isAdmin });\r\n document.getElementsByTagName('html')[0].className = \"background-navigation\";\r\n }\r\n else {\r\n document.getElementsByTagName('html')[0].className = \"background-title\";\r\n }\r\n }\r\n render() {\r\n return (\r\n
\r\n {this.state.user ? (\r\n \r\n ) : (\r\n <>\r\n )}\r\n
\r\n );\r\n }\r\n}\r\n","export const DIMENSIONS = {\r\n XL: 1200,\r\n LG: 992,\r\n MD: 768,\r\n SM: 576, \r\n}","import React, { Component } from 'react';\r\nimport authService from './api-authorization/AuthorizeService';\r\nimport AdminFunctions from './admin/AdminFunctions';\r\nimport { Container, Row, Col, Input, Button, Table, Spinner } from 'reactstrap';\r\nimport { Typeahead } from 'react-bootstrap-typeahead';\r\nimport { FaSort } from 'react-icons/fa'\r\nimport { DIMENSIONS } from '../util/util';\r\nimport '../styles/site.css';\r\n\r\nexport class UserSearch extends Component {\r\n static displayName = UserSearch.name;\r\n\r\n constructor(props) {\r\n super(props); \r\n\r\n this.state = {\r\n clientOptions: [],\r\n client: null,\r\n search: null,\r\n users: [],\r\n isAdmin: false,\r\n height: 0,\r\n width: 0,\r\n sort: {\r\n column: null,\r\n direction: 'desc'\r\n },\r\n loading: false,\r\n noResults: false\r\n };\r\n\r\n document.getElementsByTagName('html')[0].className = \"background-ring\";\r\n window.addEventListener('resize', this.setWindowDimensions);\r\n } \r\n\r\n async componentDidMount() {\r\n this.setWindowDimensions();\r\n const isAdmin = await AdminFunctions.isAdminAsync();\r\n this.setState({ isAdmin: isAdmin }); \r\n if(isAdmin) {\r\n this.getClients(); \r\n }\r\n else {\r\n this.getClientByUserId(); \r\n }\r\n this.getUsers();\r\n }\r\n\r\n setWindowDimensions = () => {\r\n this.setState({\r\n height: window.innerHeight,\r\n width: window.innerWidth\r\n });\r\n };\r\n\r\n render() { \r\n return (\r\n
\r\n \r\n \r\n \r\n

User Search

\r\n \r\n
\r\n \r\n \r\n this.setState({ search: e.target.value })}\r\n name='search'\r\n id='search'\r\n placeholder='Search User Name'\r\n />\r\n \r\n \r\n this.setState({ client: selected })}\r\n selected={this.state.client}\r\n options={this.state.clientOptions}\r\n placeholder='Search Client'\r\n style={ this.state.width < DIMENSIONS.MD ? { marginTop: '20px' } : {}}\r\n disabled={this.state.isAdmin === false ? true : false}\r\n />\r\n \r\n \r\n this.searchUsers() }\r\n style={ this.state.width < DIMENSIONS.LG ? { marginTop: '20px' } : { }}\r\n disabled={this.state.loading === true ? true : false}\r\n >\r\n Search\r\n \r\n \r\n \r\n this.props.history.push({ pathname: '/UserManagement', state: { hasUser: false }})}\r\n style={ this.state.width < DIMENSIONS.LG ? { marginTop: '20px', whiteSpace: 'nowrap' } : { whiteSpace: 'nowrap' }}\r\n disabled={this.state.isAdmin === false || this.state.loading === true ? true : false}\r\n >\r\n New User\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 {this.state.loading === true ? (\r\n \r\n \r\n \r\n ) : (\r\n <>\r\n {!this.state.noResults ? (\r\n <>\r\n {this.state.users.map((user, i) => {\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 \r\n )} \r\n \r\n
\r\n Last Name\r\n this.handleSort('lastName')}\r\n className='sort-button'\r\n />\r\n \r\n First Name\r\n this.handleSort('firstName')}\r\n className='sort-button'\r\n />\r\n \r\n Client\r\n this.handleSort('client')}\r\n className='sort-button'\r\n />\r\n \r\n Role\r\n this.handleSort('role')}\r\n className='sort-button'\r\n />\r\n \r\n Email\r\n this.handleSort('email')}\r\n className='sort-button'\r\n />\r\n
\r\n \r\n \r\n \r\n
{user.lastName}{user.firstName}{user.client}{user.role}{user.email}\r\n this.handleRowClick(user.id)}\r\n style={{ cursor: 'pointer' }}\r\n disabled={this.state.isAdmin === false || this.state.loading === true ? true : false}\r\n >\r\n Edit\r\n \r\n\r\n
\r\n
\r\n
No Results Found
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n )\r\n }\r\n\r\n // clients\r\n\r\n async getClients() { \r\n const token = await authService.getAccessToken();\r\n const response = await fetch('api/Clients/GetClientDropdown', {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n const data = await response.json();\r\n this.setState({ clientOptions: data });\r\n }\r\n\r\n async getClientByUserId() {\r\n const token = await authService.getAccessToken(); \r\n const response = await fetch(`api/Clients/GetClientByUserId`, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n })\r\n const data = await response.json();\r\n const client = [\r\n {\r\n id: data.id,\r\n company: data.company\r\n }\r\n ];\r\n this.setState({ client: client });\r\n }\r\n\r\n // users\r\n\r\n async getUsers() {\r\n this.setState({ loading: true });\r\n const token = await authService.getAccessToken();\r\n const response = await fetch('api/Users/GetUsers', {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n const data = await response.json();\r\n this.setState({ users: data, loading: false, noResults: data.length === 0 ? true : false });\r\n }\r\n\r\n async searchUsers() { \r\n if(!this.state.search && !this.state.client) {\r\n this.getUsers();\r\n }\r\n else {\r\n this.setState({ loading: true });\r\n const token = await authService.getAccessToken(); \r\n const query = this.state.search ? this.state.search : '';\r\n const clientId = this.state.client ? this.state.client[0].id : 0;\r\n const response = await fetch(`api/Users/SearchUsers?query=${query}&clientId=${clientId}`, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n })\r\n const data = await response.json();\r\n this.setState({ users: data, loading: false, noResults: data.length === 0 ? true : false });\r\n } \r\n }\r\n\r\n // table on click\r\n\r\n handleRowClick(id) { \r\n this.props.history.push({\r\n pathname: '/UserManagement',\r\n state: { userId: id, existingUser: true }\r\n });\r\n }\r\n\r\n // table sort\r\n\r\n handleSort(column) {\r\n const direction = this.state.sort.column ? (this.state.sort.direction === 'asc' ? 'desc' : 'asc') : 'desc';\r\n const data = this.state.users;\r\n data.sort((a, b) => a[column].localeCompare(b[column]))\r\n if(direction === 'desc') {\r\n data.reverse();\r\n }\r\n this.setState({\r\n users : data,\r\n sort: {\r\n column,\r\n direction\r\n }\r\n })\r\n }\r\n\r\n}","import React, { Component } from 'react';\r\nimport authService from './api-authorization/AuthorizeService';\r\nimport { Container, Row, Col, Input, Button, Alert } from 'reactstrap';\r\nimport { Typeahead } from 'react-bootstrap-typeahead';\r\nimport { default as ReactSelect } from \"react-select\";\r\nimport { components } from \"react-select\";\r\nimport '../styles/background_flip.css';\r\n\r\nconst Option = (props) => {\r\n return (\r\n
\r\n \r\n {/* null}*/}\r\n {/*/>{\" \"}*/}\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport class UserManagement extends Component {\r\n static displayName = UserManagement.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n clientOptions: [],\r\n userId: '',\r\n client: null,\r\n active: false,\r\n firstName: null,\r\n lastName: null,\r\n officePhone: null,\r\n ext: null,\r\n homePhone: null,\r\n mobilePhone: null,\r\n email: null,\r\n success: undefined,\r\n userAlreadyExists: false,\r\n clientRequired: false,\r\n userRoles: [],\r\n userRoleData: null,\r\n };\r\n document.getElementsByTagName('html')[0].className = \"background-simple-flip\";\r\n }\r\n\r\n handleChange = (selected) => {\r\n console.log(selected);\r\n this.setState({\r\n userRoles: [selected]\r\n });\r\n };\r\n\r\n componentDidMount() {\r\n this.getClients();\r\n this.getRoles()\r\n if (this.props.location.state !== undefined) {\r\n if (this.props.location.state.existingUser) {\r\n const userId = this.props.location.state.userId;\r\n this.setState({ userId: userId });\r\n this.getUserDetails(userId)\r\n }\r\n }\r\n }\r\n\r\n render() {\r\n //Quick update to add the transparent to the select. General CSS doesn't hit it sadly. CDC 5/19 \r\n const customStyles = {\r\n control: (base, state) => ({\r\n ...base,\r\n background: \"transparent\",\r\n })\r\n };\r\n return (\r\n
\r\n \r\n \r\n \r\n

User Management

\r\n \r\n
\r\n \r\n \r\n this.setState({ client: selected })}\r\n selected={this.state.client}\r\n options={this.state.clientOptions}\r\n placeholder='Search Client'\r\n />\r\n \r\n \r\n this.setState({ active: e.target.checked })}\r\n checked={this.state.active}\r\n name='active'\r\n />\r\n \r\n \r\n \r\n \r\n \r\n this.setState({ firstName: e.target.value })}\r\n name='firstName'\r\n id='firstName'\r\n placeholder='First Name'\r\n valid={this.state.firstName ? true : false}\r\n invalid={!this.state.firstName ? true : false}\r\n />\r\n \r\n \r\n \r\n \r\n this.setState({ lastName: e.target.value })}\r\n name='lastName'\r\n id='lastName'\r\n placeholder='Last Name'\r\n valid={this.state.lastName ? true : false}\r\n invalid={!this.state.lastName ? true : false}\r\n />\r\n \r\n \r\n \r\n \r\n this.setState({ officePhone: e.target.value })}\r\n name='officePhone'\r\n id='officePhone'\r\n placeholder='Office Phone'\r\n />\r\n \r\n \r\n this.setState({ ext: e.target.value })}\r\n name='ext'\r\n id='ext'\r\n placeholder='Ext.'\r\n />\r\n \r\n \r\n \r\n \r\n this.setState({ homePhone: e.target.value })}\r\n name='homePhone'\r\n id='homePhone'\r\n placeholder='Home Phone'\r\n />\r\n \r\n \r\n \r\n \r\n this.setState({ mobilePhone: e.target.value })}\r\n name='mobilePhone'\r\n id='mobilePhone'\r\n placeholder='Mobile Phone'\r\n />\r\n \r\n \r\n \r\n \r\n this.setState({ email: e.target.value })}\r\n name='email'\r\n id='email'\r\n placeholder='Email'\r\n valid={this.state.email ? true : false}\r\n invalid={!this.state.email ? true : false}\r\n />\r\n \r\n \r\n \r\n \r\n 0 ? true : false}\r\n invalid={this.state.userRoles.length === 0 ? true : false}\r\n placeholder='Choose Role...'\r\n className=\"games-dropdown-2\"\r\n styles={customStyles}\r\n />\r\n \r\n \r\n \r\n \r\n this.props.history.push('/UserSearch')}\r\n >\r\n Back to User Search\r\n \r\n \r\n \r\n this.handleSave()}\r\n disabled={!this.state.firstName || !this.state.lastName || !this.state.email ? true : false}\r\n >\r\n Save\r\n \r\n \r\n \r\n \r\n \r\n {this.state.success === true && (\r\n \r\n \r\n {this.state.userId ? 'User updated successfully!' : 'User added successfully!'}\r\n \r\n \r\n )}\r\n {this.state.success === false && (\r\n \r\n \r\n {this.state.userId ? 'Error updating User!' : 'Error adding User!'}\r\n \r\n \r\n )}\r\n {this.state.userAlreadyExists === true && (\r\n \r\n \r\n Email already in use. Please try again!\r\n \r\n \r\n )}\r\n {this.state.clientRequired === true && (\r\n \r\n \r\n Client is required. Please select a client!\r\n \r\n \r\n )}\r\n \r\n \r\n
\r\n
\r\n )\r\n }\r\n\r\n async getClients() {\r\n const token = await authService.getAccessToken();\r\n const response = await fetch('api/Clients/GetClientDropdown', {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n const data = await response.json();\r\n this.setState({ clientOptions: data });\r\n }\r\n\r\n async getUserDetails(id) {\r\n const token = await authService.getAccessToken();\r\n const response = await fetch(`api/Users/GetUserDetails?id=${id}`, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n const data = await response.json();\r\n\r\n const client = [\r\n {\r\n id: data.clientId,\r\n company: data.client\r\n }\r\n ];\r\n this.setState({\r\n firstName: data.firstName,\r\n lastName: data.lastName,\r\n email: data.email,\r\n officePhone: data.officePhone,\r\n ext: data.ext,\r\n homePhone: data.homePhone,\r\n mobilePhone: data.mobilePhone,\r\n active: data.active,\r\n client: data.clientId === 0 ? null : client,\r\n userRoles: data.roles,\r\n })\r\n }\r\n\r\n async handleSave() {\r\n debugger\r\n const token = await authService.getAccessToken();\r\n const clientId = (this.state.client !== null && this.state.client !== undefined && this.state.client.length !== 0) ? this.state.client[0].id : 0;\r\n const dto = {\r\n id: this.state.userId,\r\n firstName: this.state.firstName,\r\n lastName: this.state.lastName,\r\n email: this.state.email,\r\n officePhone: this.state.officePhone,\r\n ext: this.state.ext,\r\n homePhone: this.state.homePhone,\r\n mobilePhone: this.state.mobilePhone,\r\n active: this.state.active,\r\n clientId: clientId,\r\n roles: this.state.userRoles,\r\n }\r\n\r\n let clientRequired = true;\r\n\r\n for (let i = 0; i < this.state.userRoles.length; i++) {\r\n let role = this.state.userRoles[i];\r\n if (role.value === 'Admin' || role.value === 'Tabb admin') clientRequired = false;\r\n }\r\n\r\n if (clientRequired && clientId === 0) {\r\n this.setState({ clientRequired: true });\r\n }\r\n else {\r\n this.setState({ clientRequired: false });\r\n\r\n if (this.state.userId) {\r\n if (!await this.getUserExists(dto.email, dto.id, token)) {\r\n await this.editUser(dto, token);\r\n }\r\n }\r\n else {\r\n if (!await this.getUserExists(dto.email, '', token)) {\r\n await this.createUser(dto, token);\r\n }\r\n }\r\n }\r\n }\r\n\r\n async editUser(dto, token) {\r\n const response = await fetch('api/Users/EditUser', {\r\n method: 'POST',\r\n body: JSON.stringify(dto),\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' }\r\n });\r\n const data = await response.json();\r\n this.setState({ success: data });\r\n }\r\n\r\n async createUser(dto, token) {\r\n const response = await fetch('api/Admin/CreateUser', {\r\n method: 'POST',\r\n body: JSON.stringify(dto),\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' }\r\n });\r\n const data = await response.json();\r\n this.setState({ success: data });\r\n }\r\n\r\n async getUserExists(email, id, token) {\r\n const response = await fetch(`api/Users/GetUserExists?userName=${email}&id=${id}`, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' }\r\n });\r\n const data = await response.json();\r\n this.setState({ userAlreadyExists: data });\r\n return data;\r\n }\r\n\r\n async getRoles() {\r\n const token = await authService.getAccessToken();\r\n const response = await fetch(`api/Admin/GetRolesAsync`, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n const data = await response.json();\r\n\r\n var options = [];\r\n\r\n for (let i = 0; i < data.length; i++) {\r\n options.push({ value: data[i].name, label: data[i].name });\r\n }\r\n this.setState({ userRoleData: options });\r\n }\r\n}","import React, { Component } from 'react';\r\nimport authService from './api-authorization/AuthorizeService';\r\nimport AdminFunctions from './admin/AdminFunctions';\r\nimport { Container, Row, Col, Input, Button, Table, Spinner, UncontrolledTooltip } from 'reactstrap';\r\nimport { Typeahead } from 'react-bootstrap-typeahead';\r\nimport { FaSort } from 'react-icons/fa'\r\nimport { DIMENSIONS } from '../util/util';\r\nimport '../styles/site.css';\r\n\r\nexport class CandidateSearch extends Component {\r\n static displayName = CandidateSearch.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n clientOptions: [],\r\n client: null,\r\n clientText: null,\r\n search: null,\r\n candidates: [],\r\n isAdmin: false,\r\n height: 0,\r\n width: 0,\r\n sort: {\r\n column: null,\r\n direction: 'desc'\r\n },\r\n loading: false,\r\n noResults: false,\r\n currentPage: 1,\r\n itemsPerPage: 10,\r\n numberOfPages: 0,\r\n testType: 'Selection',\r\n testLevel: 'MA'\r\n };\r\n this.handleClick = this.handleClick.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handlePageSizeChange = this.handlePageSizeChange.bind(this);\r\n window.addEventListener('resize', this.setWindowDimensions);\r\n document.getElementsByTagName('html')[0].className = \"background-ring\";\r\n }\r\n\r\n handleClick(event) {\r\n let id = Number(event.target.id);\r\n\r\n if (id === 0) {\r\n this.setState({\r\n currentPage: 1\r\n });\r\n } else if (id === -1) {\r\n this.setState({\r\n currentPage: Math.ceil(this.state.candidates.length / this.state.itemsPerPage)\r\n });\r\n } else {\r\n this.setState({\r\n currentPage: Number(event.target.id)\r\n });\r\n }\r\n }\r\n\r\n handleChange(event) {\r\n this.setState({ currentPage: Number(event.target.value) });\r\n }\r\n\r\n handlePageSizeChange(event) {\r\n let pageSize = Number(event.target.value);\r\n this.setState({ itemsPerPage: pageSize });\r\n if (this.state.currentPage > Math.ceil(this.state.candidates.length / pageSize)) {\r\n this.setState({ currentPage: Math.ceil(this.state.candidates.length / pageSize) })\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n this.setWindowDimensions();\r\n const isAdmin = await AdminFunctions.isAdminAsync();\r\n this.setState({ isAdmin: isAdmin });\r\n if (isAdmin) {\r\n this.getClients();\r\n }\r\n else {\r\n this.getClientByUserId();\r\n this.showAllCandidates();\r\n }\r\n }\r\n\r\n setWindowDimensions = () => {\r\n this.setState({\r\n height: window.innerHeight,\r\n width: window.innerWidth\r\n });\r\n };\r\n\r\n handleKeyPress = (event) => {\r\n if (event.key === 'Enter') {\r\n this.searchCandidates();\r\n }\r\n }\r\n\r\n render() {\r\n // Logic for displaying candidates\r\n const indexOfLastItem = this.state.currentPage * this.state.itemsPerPage;\r\n const indexOfFirstItem = indexOfLastItem - this.state.itemsPerPage;\r\n const currentItems = this.state.candidates.slice(indexOfFirstItem, indexOfLastItem);\r\n\r\n const renderItems = currentItems.map((candidate, i) => {\r\n return (\r\n \r\n {candidate.lastName}\r\n {candidate.firstName}\r\n {this.state.isAdmin && (\r\n {candidate.client}\r\n )}\r\n {candidate.position}\r\n \r\n {(candidate.assessments === null || candidate.assessments.length < 1) && (\r\n
\r\n {candidate.portalStatusText}
\r\n {candidate.reportDueDate ? new Date(candidate.reportDueDate).toLocaleDateString('en-US') : \"\"}\r\n \r\n {candidate.hoverText}\r\n \r\n
\r\n )}\r\n {candidate.assessments !== null && candidate.assessments.length > 0 && (\r\n
\r\n {candidate.portalStatusText}
\r\n this.getAssessmentDocuments(candidate.assessments)}\r\n size='sm'\r\n style={{ cursor: 'pointer' }}\r\n disabled={candidate.assessments === null ? true : false}\r\n >\r\n {this.state.width < DIMENSIONS.MD ? ('...') : ('Download')}\r\n \r\n \r\n {candidate.hoverText}\r\n \r\n
\r\n\r\n\r\n )}\r\n \r\n \r\n {(candidate.coachingCard !== null && candidate.coachingCard.documentId > 0) && (\r\n
\r\n this.getDocument(candidate.coachingCard.recordId)}\r\n size='sm'\r\n style={{ cursor: 'pointer' }}\r\n disabled={candidate.coachingCard === null ? true : false}\r\n >\r\n {this.state.width < DIMENSIONS.MD ? ('...') : ('Download')}\r\n \r\n \r\n {candidate.coachingCardStatus.hoverText}\r\n \r\n
\r\n\r\n )}\r\n {(candidate.coachingCard === null || !(candidate.coachingCard !== null && candidate.coachingCard.documentId > 0) ) && (\r\n <>\r\n
\r\n {candidate.coachingCardStatus.portalStatusText}\r\n \r\n {candidate.coachingCardStatus.hoverText}\r\n \r\n
\r\n\r\n \r\n \r\n )}\r\n \r\n \r\n {(candidate.feedbackReport !== null && candidate.feedbackReport.documentId > 0) && (\r\n
\r\n this.getDocument(candidate.feedbackReport.recordId)}\r\n size='sm'\r\n style={{ cursor: 'pointer' }}\r\n disabled={candidate.feedbackReport === null ? true : false}\r\n >\r\n {this.state.width < DIMENSIONS.MD ? ('...') : ('Download')}\r\n \r\n \r\n {candidate.feedbackReportStatus.hoverText}\r\n \r\n
\r\n\r\n )}\r\n {(candidate.feedbackReport === null || !(candidate.feedbackReport !== null && candidate.feedbackReport.documentId > 0)) && (\r\n <>\r\n
\r\n {candidate.feedbackReportStatus.portalStatusText}\r\n
\r\n\r\n \r\n {candidate.feedbackReportStatus.hoverText}\r\n \r\n \r\n )}\r\n\r\n \r\n \r\n )\r\n });\r\n\r\n // Logic for displaying page numbers\r\n const pageNumbers = [];\r\n for (let i = 1; i <= Math.ceil(this.state.candidates.length / this.state.itemsPerPage); i++) {\r\n pageNumbers.push(i);\r\n }\r\n\r\n const renderPageNumbers = pageNumbers.map(number => {\r\n return (\r\n \r\n );\r\n });\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n

Candidate Search

\r\n \r\n
\r\n \r\n\r\n\r\n\r\n \r\n \r\n this.setState({ search: e.target.value })}\r\n name='search'\r\n id='search'\r\n onKeyPress={this.handleKeyPress}\r\n placeholder='Search Candidate Name, Position, or Status'\r\n\r\n />\r\n \r\n \r\n {this.state.isAdmin && (\r\n this.setState({ client: selected })}\r\n onBlur={(e) => this.setState({ client: [e.target.value] })}\r\n selected={this.state.client}\r\n options={this.state.clientOptions}\r\n placeholder='Search Client'\r\n style={this.state.width < DIMENSIONS.MD ? { marginTop: '20px' } : {}}\r\n disabled={this.state.isAdmin === false ? true : false}\r\n />\r\n )}\r\n {!this.state.isAdmin && (\r\n this.setState({ client: selected })}\r\n onBlur={(e) => this.setState({ client: [e.target.value] })}\r\n selected={this.state.clientOptions}\r\n options={this.state.clientOptions}\r\n placeholder='Search Client'\r\n style={this.state.width < DIMENSIONS.MD ? { marginTop: '20px' } : {}}\r\n disabled={this.state.isAdmin === false ? true : false}\r\n />\r\n )}\r\n \r\n \r\n
\r\n this.searchCandidates()}\r\n style={this.state.width < DIMENSIONS.LG ? { flex: '1', marginTop: '20px', whiteSpace: 'nowrap' } : { flex: '1', whiteSpace: 'nowrap' }}\r\n disabled={this.state.loading ? true : false}\r\n >\r\n Search\r\n \r\n this.showAllCandidates()}\r\n style={this.state.width < DIMENSIONS.LG ? { flex: '1', marginTop: '20px', marginLeft: '20px', whiteSpace: 'nowrap' } : { flex: '1', marginLeft: '20px', whiteSpace: 'nowrap' }}\r\n disabled={this.state.loading ? true : false}\r\n >\r\n Show All\r\n \r\n
\r\n \r\n
\r\n {this.state.candidates.length !== 0 && (\r\n
\r\n \r\n \r\n \r\n \r\n {/*
    \r\n {this.state.currentPage > 1 ? (\r\n
  • First
  • \r\n ) : ( \r\n null \r\n )}\r\n {this.state.currentPage > 1 ? (\r\n
  • Prev
  • \r\n ) : (\r\n null\r\n )} \r\n
  • {this.state.currentPage} of {pageNumbers.length}
  • \r\n {this.state.currentPage < pageNumbers.length ? (\r\n
  • Next
  • \r\n ) : (\r\n null\r\n )}\r\n {this.state.currentPage < pageNumbers.length ? (\r\n
  • Last
  • \r\n ) : (\r\n 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 {this.state.isAdmin && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {this.state.loading === true && this.state.loadingDocument === false ? (\r\n \r\n \r\n \r\n\r\n ) : (\r\n <>\r\n {!this.state.noResults ? (\r\n <>\r\n {renderItems}\r\n \r\n ) : (\r\n
\r\n
No Results Found
\r\n
\r\n )}\r\n \r\n )}\r\n \r\n
\r\n Last Name\r\n this.handleSort('lastName')}\r\n className='sort-button'\r\n />\r\n \r\n First Name\r\n this.handleSort('firstName')}\r\n className='sort-button'\r\n />\r\n \r\n Client\r\n this.handleSort('client')}\r\n className='sort-button'\r\n />\r\n \r\n Position\r\n this.handleSort('position')}\r\n className='sort-button'\r\n />\r\n Assessment\r\n this.handleSort('status')}\r\n className='sort-button'\r\n />\r\n Coaching CardFeedback Report
\r\n \r\n
\r\n \r\n
\r\n {this.state.candidates.length !== 0 && (\r\n
\r\n \r\n \r\n \r\n \r\n {/*
    \r\n {this.state.currentPage > 1 ? (\r\n
  • First
  • \r\n ) : ( \r\n null \r\n )}\r\n {this.state.currentPage > 1 ? (\r\n
  • Prev
  • \r\n ) : (\r\n null\r\n )} \r\n
  • {this.state.currentPage} of {pageNumbers.length}
  • \r\n {this.state.currentPage < pageNumbers.length ? (\r\n
  • Next
  • \r\n ) : (\r\n null\r\n )}\r\n {this.state.currentPage < pageNumbers.length ? (\r\n
  • Last
  • \r\n ) : (\r\n null\r\n )} \r\n
*/}\r\n
\r\n )}\r\n
\r\n
\r\n )\r\n }\r\n\r\n // clients\r\n\r\n async getClients() {\r\n const token = await authService.getAccessToken();\r\n const response = await fetch('api/Clients/GetClientDropdownText', {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n const data = await response.json();\r\n this.setState({ clientOptions: data });\r\n }\r\n\r\n async getClientByUserId() {\r\n const token = await authService.getAccessToken();\r\n const response = await fetch(`api/Clients/GetClientByUserId`, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n })\r\n const data = await response.json();\r\n // const client = [\r\n // {\r\n // id: data.id,\r\n // company: data.company\r\n // }\r\n // ];\r\n var clientOptionList = [data.company];\r\n this.setState({ client: data.company, clientOptions: clientOptionList });\r\n }\r\n\r\n // candidates\r\n\r\n async searchCandidates() {\r\n this.setState({ loading: true, loadingDocument: false });\r\n const token = await authService.getAccessToken();\r\n const query = this.state.search ? this.state.search : '';\r\n //const clientId = (this.state.client && this.state.client.length !== 0) ? this.state.client[0].id : 0;\r\n var client = (this.state.client && this.state.client.length !== 0) ? this.state.client[0] : '';\r\n\r\n if (typeof client !== 'string' && !(client instanceof String)) {\r\n client = client.label;\r\n }\r\n\r\n const response = await fetch(`api/Candidates/SearchCandidates?query=${query}&client=${client}`, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n const data = await response.json();\r\n this.setState({ candidates: data, loading: false, noResults: data.length === 0 ? true : false });\r\n }\r\n\r\n async showAllCandidates() {\r\n this.setState({ loading: true, loadingDocument: false });\r\n const token = await authService.getAccessToken();\r\n const response = await fetch('api/Candidates/ShowAllCandidates', {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n })\r\n const data = await response.json();\r\n this.setState({ candidates: data, loading: false, noResults: data.length === 0 ? true : false });\r\n }\r\n\r\n\r\n async getDocument(recordId) {\r\n const token = await authService.getAccessToken();\r\n const response = await fetch(`api/Candidates/GetDocument?recordId=${recordId}`, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n })\r\n const data = await response.json();\r\n this.downloadFile(data.documentBase64, data.documentTitle);\r\n }\r\n\r\n async getAssessmentDocuments(assessments) {\r\n const token = await authService.getAccessToken();\r\n const response = await fetch(`api/Candidates/GetAssessmentDocuments`, {\r\n method: \"POST\",\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' },\r\n body: JSON.stringify(assessments)\r\n })\r\n const data = await response.json();\r\n this.downloadFile(data.documentBase64, data.documentTitle);\r\n }\r\n\r\n async getAssessmentDocument(assessmentId, recordId, candidateId, testType = \"\", testLevel = \"\") {\r\n try {\r\n this.setState({ loading: true, loadingDocument: true });\r\n const token = await authService.getAccessToken();\r\n const response = await fetch(`api/Document/GetAssessmentDocument?assessmentId=${assessmentId}&clientId=${recordId}&candidateId=${candidateId}&testType=${testType}&testLevel=${testLevel}`, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n })\r\n const data = await response.json();\r\n this.downloadFile(data.documentBase64, data.filename);\r\n this.setState({ loading: false, loadingDocument: false });\r\n } catch (ex) {\r\n this.setState({ loading: false, loadingDocument: false });\r\n }\r\n \r\n }\r\n\r\n downloadFile(file, name) {\r\n const blob = this.base64ToBlob(file);\r\n const uriContent = URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n link.setAttribute('href', uriContent);\r\n link.setAttribute('download', name);\r\n const event = new MouseEvent('click');\r\n link.dispatchEvent(event);\r\n }\r\n\r\n base64ToBlob = (file) => {\r\n const binaryString = window.atob(file);\r\n const len = binaryString.length;\r\n const bytes = new Uint8Array(len);\r\n for (let i = 0; i < len; ++i) {\r\n bytes[i] = binaryString.charCodeAt(i);\r\n }\r\n const blob = new Blob([bytes], { type: 'application/pdf' });\r\n return blob;\r\n }\r\n\r\n // table sort\r\n\r\n handleSort(column) {\r\n const direction = this.state.sort.column ? (this.state.sort.direction === 'asc' ? 'desc' : 'asc') : 'desc';\r\n const data = this.state.candidates;\r\n data.sort((a, b) => a[column].localeCompare(b[column]))\r\n if (direction === 'desc') {\r\n data.reverse();\r\n }\r\n this.setState({\r\n candidates: data,\r\n sort: {\r\n column,\r\n direction\r\n }\r\n })\r\n }\r\n}","import React, { Component } from 'react';\r\nimport authService from './api-authorization/AuthorizeService';\r\nimport AdminFunctions from './admin/AdminFunctions';\r\nimport { Container, Row, Col, Input, Button, Table, Spinner, UncontrolledTooltip } from 'reactstrap';\r\nimport { Typeahead } from 'react-bootstrap-typeahead';\r\nimport { FaSort } from 'react-icons/fa'\r\nimport { DIMENSIONS } from '../util/util';\r\nimport { default as ReactSelect } from \"react-select\";\r\nimport { components } from \"react-select\";\r\nimport '../styles/site.css';\r\n\r\nconst Option = (props) => {\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport class AdminReportTABB extends Component {\r\n static displayName = AdminReportTABB.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n clientOptions: [],\r\n client: null,\r\n clientText: null,\r\n search: null,\r\n candidates: [],\r\n isAdmin: false,\r\n height: 0,\r\n width: 0,\r\n sort: {\r\n column: null,\r\n direction: 'desc'\r\n },\r\n loading: false,\r\n noResults: false,\r\n currentPage: 1,\r\n itemsPerPage: 10,\r\n numberOfPages: 0,\r\n testType: 'Selection',\r\n testLevel: 'MA',\r\n sheetOptions: [{ value: \"EA Selection\", label: \"EA Selection\" }, { value: \"EA Developmental\", label: \"EA Developmental\" }, { value: \"MA Selection\", label: \"MA Selection\" }, { value: \"MA Developmental\", label: \"MA Developmental\" }],\r\n sheetOptionsData: null,\r\n uploadSuccess: \"\"\r\n };\r\n this.handleClick = this.handleClick.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.generateAssessment = this.generateAssessment.bind(this);\r\n this.handlePageSizeChange = this.handlePageSizeChange.bind(this);\r\n window.addEventListener('resize', this.setWindowDimensions);\r\n document.getElementsByTagName('html')[0].className = \"background-ring\";\r\n\r\n }\r\n\r\n onFileChange = event => {\r\n // Update the state \r\n this.setState({ selectedFile: event.target.files[0] });\r\n };\r\n\r\n onFileUpload = () => {\r\n //Is the file that is uploaded a excell sheet?\r\n if (true) {\r\n // Create an object of formData \r\n this.state.uploadSuccess = \"\";\r\n const formData = new FormData();\r\n\r\n formData.append(\"formFile\", this.state.selectedFile);\r\n formData.append(\"fileName\", this.state.selectedFile.name);\r\n //formData.append(\"RecordId\", this.state.client[0].clientRecordId);\r\n //formData.append(\"ClientCompany\", this.state.client[0].clientCompany);\r\n\r\n // Update the formData object \r\n //formData.append(\r\n // \"myFile\",\r\n // this.state.selectedFile,\r\n // this.state.selectedFile.name\r\n //);\r\n\r\n // Details of the uploaded file \r\n console.log(this.state.selectedFile);\r\n\r\n // Request made to the backend api \r\n // Send formData object \r\n\r\n\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: formData,\r\n headers: !this.state.token ? {} : { 'Authorization': `Bearer ${this.state.token}` }\r\n };\r\n const response = fetch('api/Clients/UploadFileTABB', requestOptions);\r\n console.log(response);\r\n //fetch('api/Clients/UploadFile', requestOptions);\r\n } else {\r\n this.setState({ uploadSuccess: \"clientRequired\" });\r\n }\r\n\r\n\r\n };\r\n\r\n handleClick(event) {\r\n let id = Number(event.target.id);\r\n\r\n if (id === 0) {\r\n this.setState({\r\n currentPage: 1\r\n });\r\n } else if (id === -1) {\r\n this.setState({\r\n currentPage: Math.ceil(this.state.candidates.length / this.state.itemsPerPage)\r\n });\r\n } else {\r\n this.setState({\r\n currentPage: Number(event.target.id)\r\n });\r\n }\r\n }\r\n\r\n handleChange(event) {\r\n this.setState({ currentPage: Number(event.target.value) });\r\n }\r\n /*this.getAssessmentDocument(23707, 126, 23419, this.state.testType, this.state.testLevel)}\r\n getAssessmentDocument(assessmentId, recordId, candidateId, testType = \"\", testLevel = \"\") {*/\r\n generateAssessment(event, assessmentId, clientId, candidateId) {\r\n console.log(event.value);\r\n console.log(assessmentId);\r\n console.log(clientId);\r\n console.log(candidateId);\r\n var splitWords = event.value.split(\" \");\r\n if (splitWords.length >= 2) {\r\n this.getAssessmentDocument(assessmentId, clientId, candidateId, splitWords[1] , splitWords[0])\r\n }\r\n \r\n //this.setState({ searchType: Number(event.target.value) });\r\n }\r\n handlePageSizeChange(event) {\r\n let pageSize = Number(event.target.value);\r\n this.setState({ itemsPerPage: pageSize });\r\n if (this.state.currentPage > Math.ceil(this.state.candidates.length / pageSize)) {\r\n this.setState({ currentPage: Math.ceil(this.state.candidates.length / pageSize) })\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n this.setWindowDimensions();\r\n const isAdmin = await AdminFunctions.isAdminAsync();\r\n this.setState({ isAdmin: isAdmin });\r\n if (isAdmin) {\r\n this.getClients();\r\n }\r\n else {\r\n this.getClientByUserId();\r\n this.showAllCandidates();\r\n }\r\n }\r\n\r\n setWindowDimensions = () => {\r\n this.setState({\r\n height: window.innerHeight,\r\n width: window.innerWidth\r\n });\r\n };\r\n\r\n handleKeyPress = (event) => {\r\n if (event.key === 'Enter') {\r\n this.searchCandidates();\r\n }\r\n }\r\n\r\n render() {\r\n // Logic for displaying candidates\r\n const indexOfLastItem = this.state.currentPage * this.state.itemsPerPage;\r\n const indexOfFirstItem = indexOfLastItem - this.state.itemsPerPage;\r\n const currentItems = this.state.candidates.slice(indexOfFirstItem, indexOfLastItem);\r\n\r\n const renderItems = currentItems.map((candidate, i) => {\r\n return (\r\n \r\n {candidate.lastName}\r\n {candidate.firstName}\r\n {this.state.isAdmin && (\r\n {candidate.client}\r\n )}\r\n {candidate.position}\r\n \r\n {(candidate.assessments === null || candidate.assessments.length < 1) && (\r\n
\r\n {candidate.portalStatusText}
\r\n {candidate.reportDueDate ? new Date(candidate.reportDueDate).toLocaleDateString('en-US') : \"\"}\r\n \r\n {candidate.hoverText}\r\n \r\n
\r\n )}\r\n {candidate.assessments !== null && candidate.assessments.length > 0 && (\r\n
\r\n \r\n this.getAssessmentDocuments(candidate.assessments)}\r\n size='sm'\r\n style={{ cursor: 'pointer' }}\r\n disabled={candidate.assessments === null ? true : false}\r\n >\r\n {this.state.width < DIMENSIONS.MD ? ('...') : ('Download')}\r\n \r\n \r\n {candidate.hoverText}\r\n \r\n
\r\n\r\n\r\n )}\r\n \r\n \r\n {(candidate.coachingCard !== null && candidate.coachingCard.documentId > 0) && (\r\n
\r\n this.getDocument(candidate.coachingCard.recordId)}\r\n size='sm'\r\n style={{ cursor: 'pointer' }}\r\n disabled={candidate.coachingCard === null ? true : false}\r\n >\r\n {this.state.width < DIMENSIONS.MD ? ('...') : ('Download')}\r\n \r\n \r\n {candidate.coachingCardStatus.hoverText}\r\n \r\n
\r\n\r\n )}\r\n {(candidate.coachingCard === null || !(candidate.coachingCard !== null && candidate.coachingCard.documentId > 0) ) && (\r\n <>\r\n
\r\n {candidate.coachingCardStatus.portalStatusText}\r\n \r\n {candidate.coachingCardStatus.hoverText}\r\n \r\n
\r\n\r\n \r\n \r\n )}\r\n \r\n \r\n {(candidate.feedbackReport !== null && candidate.feedbackReport.documentId > 0) && (\r\n
\r\n this.getDocument(candidate.feedbackReport.recordId)}\r\n size='sm'\r\n style={{ cursor: 'pointer' }}\r\n disabled={candidate.feedbackReport === null ? true : false}\r\n >\r\n {this.state.width < DIMENSIONS.MD ? ('...') : ('Download')}\r\n \r\n \r\n {candidate.feedbackReportStatus.hoverText}\r\n \r\n
\r\n\r\n )}\r\n {(candidate.feedbackReport === null || !(candidate.feedbackReport !== null && candidate.feedbackReport.documentId > 0)) && (\r\n <>\r\n
\r\n {candidate.feedbackReportStatus.portalStatusText}\r\n
\r\n\r\n \r\n {candidate.feedbackReportStatus.hoverText}\r\n \r\n \r\n )}\r\n\r\n \r\n {this.state.isAdmin && (\r\n \r\n {/*{(candidate.assessments !== null && candidate.assessments.length > 0) && (*/}\r\n {/*
*/}\r\n {/* Assessment
Complete*/}\r\n {/*
*/}\r\n {/*)}*/}\r\n {/*{(candidate.assessments === null || candidate.assessments.length < 1) && (*/}\r\n { this.generateAssessment(event, candidate.assessmentId, candidate.clientId, candidate.candidateId); }}\r\n allowSelectAll={false}\r\n value={this.state.sheetOptionsData}\r\n valid={this.state.sheetOptions.length > 0 ? true : false}\r\n invalid={this.state.sheetOptions.length === 0 ? true : false}\r\n placeholder='Choose Report...'\r\n className=\"games-dropdown-3\"\r\n isDisabled={this.state.loading ? true : false}\r\n />\r\n {/*)}*/}\r\n\r\n \r\n )}\r\n \r\n )\r\n });\r\n\r\n // Logic for displaying page numbers\r\n const pageNumbers = [];\r\n for (let i = 1; i <= Math.ceil(this.state.candidates.length / this.state.itemsPerPage); i++) {\r\n pageNumbers.push(i);\r\n }\r\n\r\n const renderPageNumbers = pageNumbers.map(number => {\r\n return (\r\n \r\n );\r\n });\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n

Admin Report

\r\n \r\n
\r\n \r\n \r\n
\r\n File Upload: \r\n \r\n \r\n {this.state.uploadSuccess }\r\n
\r\n \r\n
\r\n \r\n \r\n this.getAssessmentDocument(23707, 8866, 23419, this.state.testType, this.state.testLevel)}\r\n size='sm'\r\n style={{ cursor: 'pointer' }}\r\n disabled={this.state.loading ? true : false}\r\n >\r\n {this.state.width < DIMENSIONS.MD ? ('...') : ('Test-Generate')}\r\n \r\n \r\n \r\n this.getAssessmentDocument(23707, 126, 23419, this.state.testType, this.state.testLevel)}\r\n size='sm'\r\n style={{ cursor: 'pointer' }}\r\n disabled={this.state.loading ? true : false}\r\n >\r\n {this.state.width < DIMENSIONS.MD ? ('...') : ('Test-Generate-LOQ')}\r\n \r\n \r\n \r\n \r\n \r\n Type: Selection Developmental\r\n this.setState({ testType: e.target.value })}\r\n name='search'\r\n id='search'\r\n onKeyPress={this.handleKeyPress}\r\n placeholder='Test Type (Developmental, Selection)'\r\n value={this.state.testType}\r\n />\r\n \r\n \r\n Level: EA MA\r\n this.setState({ testLevel: e.target.value })}\r\n name='search'\r\n id='search'\r\n onKeyPress={this.handleKeyPress}\r\n placeholder='Test Level (EA, MA)'\r\n value={this.state.testLevel}\r\n />\r\n \r\n \r\n\r\n\r\n\r\n\r\n \r\n \r\n this.setState({ search: e.target.value })}\r\n name='search'\r\n id='search'\r\n onKeyPress={this.handleKeyPress}\r\n placeholder='Search Candidate Name, Position, or Status'\r\n\r\n />\r\n \r\n \r\n {this.state.isAdmin && (\r\n this.setState({ client: selected })}\r\n onBlur={(e) => this.setState({ client: [e.target.value] })}\r\n selected={this.state.client}\r\n options={this.state.clientOptions}\r\n placeholder='Search Client'\r\n style={this.state.width < DIMENSIONS.MD ? { marginTop: '20px' } : {}}\r\n disabled={this.state.isAdmin === false ? true : false}\r\n />\r\n )}\r\n {!this.state.isAdmin && (\r\n this.setState({ client: selected })}\r\n onBlur={(e) => this.setState({ client: [e.target.value] })}\r\n selected={this.state.clientOptions}\r\n options={this.state.clientOptions}\r\n placeholder='Search Client'\r\n style={this.state.width < DIMENSIONS.MD ? { marginTop: '20px' } : {}}\r\n disabled={this.state.isAdmin === false ? true : false}\r\n />\r\n )}\r\n \r\n \r\n
\r\n this.searchCandidates()}\r\n style={this.state.width < DIMENSIONS.LG ? { flex: '1', marginTop: '20px', whiteSpace: 'nowrap' } : { flex: '1', whiteSpace: 'nowrap' }}\r\n disabled={this.state.loading ? true : false}\r\n >\r\n Search\r\n \r\n this.showAllCandidates()}\r\n style={this.state.width < DIMENSIONS.LG ? { flex: '1', marginTop: '20px', marginLeft: '20px', whiteSpace: 'nowrap' } : { flex: '1', marginLeft: '20px', whiteSpace: 'nowrap' }}\r\n disabled={this.state.loading ? true : false}\r\n >\r\n Show All\r\n \r\n
\r\n \r\n
\r\n {this.state.candidates.length !== 0 && (\r\n
\r\n \r\n \r\n \r\n \r\n {/*
    \r\n {this.state.currentPage > 1 ? (\r\n
  • First
  • \r\n ) : ( \r\n null \r\n )}\r\n {this.state.currentPage > 1 ? (\r\n
  • Prev
  • \r\n ) : (\r\n null\r\n )} \r\n
  • {this.state.currentPage} of {pageNumbers.length}
  • \r\n {this.state.currentPage < pageNumbers.length ? (\r\n
  • Next
  • \r\n ) : (\r\n null\r\n )}\r\n {this.state.currentPage < pageNumbers.length ? (\r\n
  • Last
  • \r\n ) : (\r\n 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 {this.state.isAdmin && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {this.state.isAdmin && (\r\n \r\n )}\r\n \r\n \r\n \r\n {this.state.loading === true && this.state.loadingDocument === false ? (\r\n \r\n \r\n \r\n\r\n ) : (\r\n <>\r\n {!this.state.noResults ? (\r\n <>\r\n {renderItems}\r\n \r\n ) : (\r\n
\r\n
No Results Found
\r\n
\r\n )}\r\n \r\n )}\r\n \r\n
\r\n Last Name\r\n this.handleSort('lastName')}\r\n className='sort-button'\r\n />\r\n \r\n First Name\r\n this.handleSort('firstName')}\r\n className='sort-button'\r\n />\r\n \r\n Client\r\n this.handleSort('client')}\r\n className='sort-button'\r\n />\r\n \r\n Position\r\n this.handleSort('position')}\r\n className='sort-button'\r\n />\r\n Assessment\r\n this.handleSort('status')}\r\n className='sort-button'\r\n />\r\n Coaching CardFeedback ReportGenerate Report
\r\n \r\n
\r\n \r\n
\r\n {this.state.candidates.length !== 0 && (\r\n
\r\n \r\n \r\n \r\n \r\n {/*
    \r\n {this.state.currentPage > 1 ? (\r\n
  • First
  • \r\n ) : ( \r\n null \r\n )}\r\n {this.state.currentPage > 1 ? (\r\n
  • Prev
  • \r\n ) : (\r\n null\r\n )} \r\n
  • {this.state.currentPage} of {pageNumbers.length}
  • \r\n {this.state.currentPage < pageNumbers.length ? (\r\n
  • Next
  • \r\n ) : (\r\n null\r\n )}\r\n {this.state.currentPage < pageNumbers.length ? (\r\n
  • Last
  • \r\n ) : (\r\n null\r\n )} \r\n
*/}\r\n
\r\n )}\r\n
\r\n
\r\n )\r\n }\r\n\r\n // clients\r\n\r\n async getClients() {\r\n const token = await authService.getAccessToken();\r\n const response = await fetch('api/Clients/GetClientDropdownText', {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n const data = await response.json();\r\n this.setState({ clientOptions: data });\r\n this.setState({ token: token });\r\n }\r\n\r\n async getClientByUserId() {\r\n const token = await authService.getAccessToken();\r\n const response = await fetch(`api/Clients/GetClientByUserId`, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n })\r\n const data = await response.json();\r\n // const client = [\r\n // {\r\n // id: data.id,\r\n // company: data.company\r\n // }\r\n // ];\r\n var clientOptionList = [data.company];\r\n this.setState({ client: data.company, clientOptions: clientOptionList });\r\n }\r\n\r\n // candidates\r\n\r\n async searchCandidates() {\r\n this.setState({ loading: true, loadingDocument: false });\r\n const token = await authService.getAccessToken();\r\n const query = this.state.search ? this.state.search : '';\r\n //const clientId = (this.state.client && this.state.client.length !== 0) ? this.state.client[0].id : 0;\r\n var client = (this.state.client && this.state.client.length !== 0) ? this.state.client[0] : '';\r\n\r\n if (typeof client !== 'string' && !(client instanceof String)) {\r\n client = client.label;\r\n }\r\n\r\n const response = await fetch(`api/Candidates/SearchCandidates?query=${query}&client=${client}&webViewable=false`, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n const data = await response.json();\r\n this.setState({ candidates: data, loading: false, noResults: data.length === 0 ? true : false });\r\n }\r\n\r\n async showAllCandidates() {\r\n this.setState({ loading: true, loadingDocument: false });\r\n const token = await authService.getAccessToken();\r\n const response = await fetch('api/Candidates/ShowAllCandidates?webViewable=false', {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n })\r\n const data = await response.json();\r\n this.setState({ candidates: data, loading: false, noResults: data.length === 0 ? true : false });\r\n }\r\n\r\n\r\n async getDocument(recordId) {\r\n const token = await authService.getAccessToken();\r\n const response = await fetch(`api/Candidates/GetDocument?recordId=${recordId}`, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n })\r\n const data = await response.json();\r\n this.downloadFile(data.documentBase64, data.documentTitle);\r\n }\r\n\r\n async getAssessmentDocuments(assessments) {\r\n const token = await authService.getAccessToken();\r\n const response = await fetch(`api/Candidates/GetAssessmentDocuments`, {\r\n method: \"POST\",\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' },\r\n body: JSON.stringify(assessments)\r\n })\r\n const data = await response.json();\r\n this.downloadFile(data.documentBase64, data.documentTitle);\r\n }\r\n\r\n async getAssessmentDocument(assessmentId, recordId, candidateId, testType = \"\", testLevel = \"\") {\r\n try {\r\n this.setState({ loading: true, loadingDocument: true });\r\n const token = await authService.getAccessToken();\r\n const response = await fetch(`api/Document/GetAssessmentDocument?assessmentId=${assessmentId}&clientId=${recordId}&candidateId=${candidateId}&testType=${testType}&testLevel=${testLevel}`, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n })\r\n const data = await response.json();\r\n this.downloadFile(data.documentBase64, data.filename);\r\n this.setState({ loading: false, loadingDocument: false });\r\n } catch (ex) {\r\n this.setState({ loading: false, loadingDocument: false });\r\n }\r\n \r\n }\r\n\r\n downloadFile(file, name) {\r\n const blob = this.base64ToBlob(file);\r\n const uriContent = URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n link.setAttribute('href', uriContent);\r\n link.setAttribute('download', name);\r\n const event = new MouseEvent('click');\r\n link.dispatchEvent(event);\r\n }\r\n\r\n base64ToBlob = (file) => {\r\n const binaryString = window.atob(file);\r\n const len = binaryString.length;\r\n const bytes = new Uint8Array(len);\r\n for (let i = 0; i < len; ++i) {\r\n bytes[i] = binaryString.charCodeAt(i);\r\n }\r\n const blob = new Blob([bytes], { type: 'application/octet-stream' });\r\n return blob;\r\n }\r\n\r\n // table sort\r\n\r\n handleSort(column) {\r\n const direction = this.state.sort.column ? (this.state.sort.direction === 'asc' ? 'desc' : 'asc') : 'desc';\r\n const data = this.state.candidates;\r\n data.sort((a, b) => a[column].localeCompare(b[column]))\r\n if (direction === 'desc') {\r\n data.reverse();\r\n }\r\n this.setState({\r\n candidates: data,\r\n sort: {\r\n column,\r\n direction\r\n }\r\n })\r\n }\r\n}","import React, { Component } from 'react';\r\nimport authService from './api-authorization/AuthorizeService';\r\nimport AdminFunctions from './admin/AdminFunctions';\r\nimport { Container, Row, Col, Input, Button, Table, Spinner, UncontrolledTooltip } from 'reactstrap';\r\nimport { Typeahead } from 'react-bootstrap-typeahead';\r\nimport { FaSort } from 'react-icons/fa'\r\nimport { DIMENSIONS } from '../util/util';\r\nimport { default as ReactSelect } from \"react-select\";\r\nimport { components } from \"react-select\";\r\nimport '../styles/site.css';\r\n\r\nconst Option = (props) => {\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport class TABBTools extends Component {\r\n static displayName = TABBTools.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n clientOptions: [],\r\n client: null,\r\n clientText: null,\r\n search: null,\r\n candidates: [],\r\n isAdmin: false,\r\n isTabbAdmin: false,\r\n height: 0,\r\n width: 0,\r\n sort: {\r\n column: null,\r\n direction: 'desc'\r\n },\r\n loading: false,\r\n noResults: false,\r\n currentPage: 1,\r\n itemsPerPage: 10,\r\n numberOfPages: 0,\r\n testType: 'Selection',\r\n testLevel: 'MA',\r\n sheetOptions: [{ value: \"EA Selection\", label: \"EA Selection\", isWordDoc: false, level: \"EA\", type: \"Selection\" }, { value: \"EA Developmental\", label: \"EA Developmental\", isWordDoc: false, level: \"EA\", type: \"Developmental\" }, { value: \"MA Selection\", label: \"MA Selection\", isWordDoc: false, level: \"MA\", type: \"Selection\" }, { value: \"MA Developmental\", label: \"MA Developmental\", isWordDoc: false, level: \"MA\", type: \"Developmental\" }, { value: \"HRE Selection\", label: \"Bloomingdale's HRE\", isWordDoc: true, level: \"HRE\", type: \"Selection\" }, { value: \"Callouts Only\", label: \"Callouts Only\", isWordDoc: false, level: \"Callouts\", type: \"Only\" }, { value: \"EA Selection\", label: \"EA Selection v2\", isWordDoc: true, level: \"EA\", type: \"Selection\" }, { value: \"EA Developmental\", label: \"EA Developmental v2\", isWordDoc: true, level: \"EA\", type: \"Developmental\" }],\r\n sheetOptionsData: null,\r\n uploadSuccess: \"\",\r\n fileChosen: false,\r\n };\r\n this.handleClick = this.handleClick.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.generateAssessment = this.generateAssessment.bind(this);\r\n this.handlePageSizeChange = this.handlePageSizeChange.bind(this);\r\n window.addEventListener('resize', this.setWindowDimensions);\r\n document.getElementsByTagName('html')[0].className = \"background-ring\";\r\n\r\n }\r\n\r\n onFileChange = event => {\r\n // Update the state \r\n this.setState({ selectedFile: event.target.files[0], fileChosen: true });\r\n };\r\n\r\n onFileUpload = async () => {\r\n //Is the file that is uploaded a excell sheet?\r\n if (true) {\r\n this.setState({ loading: true });\r\n // Create an object of formData \r\n this.state.uploadSuccess = \"\";\r\n const formData = new FormData();\r\n\r\n formData.append(\"formFile\", this.state.selectedFile);\r\n formData.append(\"fileName\", this.state.selectedFile.name);\r\n //formData.append(\"RecordId\", this.state.client[0].clientRecordId);\r\n //formData.append(\"ClientCompany\", this.state.client[0].clientCompany);\r\n\r\n // Update the formData object \r\n //formData.append(\r\n // \"myFile\",\r\n // this.state.selectedFile,\r\n // this.state.selectedFile.name\r\n //);\r\n\r\n // Details of the uploaded file \r\n console.log(this.state.selectedFile);\r\n\r\n // Request made to the backend api \r\n // Send formData object \r\n\r\n\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: formData,\r\n headers: !this.state.token ? {} : { 'Authorization': `Bearer ${this.state.token}` }\r\n };\r\n try {\r\n const response = await fetch('api/Clients/UploadFileTABB', requestOptions);\r\n const data = await response.json();\r\n if (data == \"-1\") {\r\n this.setState({ uploadSuccess: \"An error occurred!\" })\r\n } else {\r\n this.setState({ uploadSuccess: data + \" records imported\" })\r\n }\r\n console.log(data);\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n this.setState({ loading: false });\r\n //fetch('api/Clients/UploadFile', requestOptions);\r\n } else {\r\n this.setState({ uploadSuccess: \"clientRequired\" });\r\n }\r\n\r\n\r\n };\r\n\r\n handleClick(event) {\r\n let id = Number(event.target.id);\r\n\r\n if (id === 0) {\r\n this.setState({\r\n currentPage: 1\r\n });\r\n } else if (id === -1) {\r\n this.setState({\r\n currentPage: Math.ceil(this.state.candidates.length / this.state.itemsPerPage)\r\n });\r\n } else {\r\n this.setState({\r\n currentPage: Number(event.target.id)\r\n });\r\n }\r\n }\r\n\r\n handleChange(event) {\r\n this.setState({ currentPage: Number(event.target.value) });\r\n }\r\n /*this.getAssessmentDocument(23707, 126, 23419, this.state.testType, this.state.testLevel)}\r\n getAssessmentDocument(assessmentId, recordId, candidateId, testType = \"\", testLevel = \"\") {*/\r\n generateAssessment(event, assessmentId, clientId, candidateId) {\r\n console.log(event.value);\r\n console.log(assessmentId);\r\n console.log(clientId);\r\n console.log(candidateId);\r\n var type = event.type;\r\n var level = event.level;\r\n var isWordDoc = event.isWordDoc;\r\n //var splitWords = event.value.split(\" \");\r\n //if (splitWords.length >= 2) {\r\n // this.getAssessmentDocument(assessmentId, clientId, candidateId, splitWords[1] , splitWords[0])\r\n //}\r\n this.getAssessmentDocument(assessmentId, clientId, candidateId, type, level, isWordDoc)\r\n //this.setState({ searchType: Number(event.target.value) });\r\n }\r\n handlePageSizeChange(event) {\r\n let pageSize = Number(event.target.value);\r\n this.setState({ itemsPerPage: pageSize });\r\n if (this.state.currentPage > Math.ceil(this.state.candidates.length / pageSize)) {\r\n this.setState({ currentPage: Math.ceil(this.state.candidates.length / pageSize) })\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n this.setWindowDimensions();\r\n const isAdmin = await AdminFunctions.isAdminAsync();\r\n const isTabbAdmin = await AdminFunctions.isTabbAdminAsync();\r\n this.setState({ isAdmin: isAdmin, isTabbAdmin: isTabbAdmin });\r\n if (isAdmin) {\r\n this.getClients();\r\n }\r\n else {\r\n this.getClientByUserId();\r\n this.showAllCandidates();\r\n }\r\n }\r\n\r\n setWindowDimensions = () => {\r\n this.setState({\r\n height: window.innerHeight,\r\n width: window.innerWidth\r\n });\r\n };\r\n\r\n handleKeyPress = (event) => {\r\n if (event.key === 'Enter') {\r\n this.searchCandidates();\r\n }\r\n }\r\n\r\n render() {\r\n // Logic for displaying candidates\r\n const indexOfLastItem = this.state.currentPage * this.state.itemsPerPage;\r\n const indexOfFirstItem = indexOfLastItem - this.state.itemsPerPage;\r\n const currentItems = this.state.candidates.slice(indexOfFirstItem, indexOfLastItem);\r\n\r\n const renderItems = currentItems.map((candidate, i) => {\r\n return (\r\n \r\n {candidate.lastName}\r\n {candidate.firstName}\r\n {this.state.isAdmin && (\r\n {candidate.client}\r\n )}\r\n {candidate.levelType}\r\n {this.state.isAdmin && (\r\n \r\n {/*{(candidate.assessments !== null && candidate.assessments.length > 0) && (*/}\r\n {/*
*/}\r\n {/* Assessment
Complete*/}\r\n {/*
*/}\r\n {/*)}*/}\r\n {/*{(candidate.assessments === null || candidate.assessments.length < 1) && (*/}\r\n { this.generateAssessment(event, candidate.assessmentId, candidate.clientId, candidate.candidateId); }}\r\n allowSelectAll={false}\r\n value={this.state.sheetOptionsData}\r\n valid={this.state.sheetOptions.length > 0 ? true : false}\r\n invalid={this.state.sheetOptions.length === 0 ? true : false}\r\n placeholder='Choose Report...'\r\n className=\"games-dropdown-3\"\r\n isDisabled={this.state.loading ? true : false}\r\n />\r\n {/*)}*/}\r\n\r\n \r\n )}\r\n \r\n )\r\n });\r\n\r\n // Logic for displaying page numbers\r\n const pageNumbers = [];\r\n for (let i = 1; i <= Math.ceil(this.state.candidates.length / this.state.itemsPerPage); i++) {\r\n pageNumbers.push(i);\r\n }\r\n\r\n const renderPageNumbers = pageNumbers.map(number => {\r\n return (\r\n \r\n );\r\n });\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n

TABB Tools

\r\n \r\n
\r\n {this.state.isTabbAdmin && (\r\n \r\n \r\n
\r\n File Upload:\r\n \r\n {this.state.fileChosen &&\r\n \r\n }\r\n {this.state.uploadSuccess}\r\n\r\n
\r\n \r\n
\r\n )}\r\n {/**/}\r\n {/* */}\r\n {/* this.getAssessmentDocument(23707, 8866, 23419, this.state.testType, this.state.testLevel)}*/}\r\n {/* size='sm'*/}\r\n {/* style={{ cursor: 'pointer' }}*/}\r\n {/* disabled={this.state.loading ? true : false}*/}\r\n {/* >*/}\r\n {/* {this.state.width < DIMENSIONS.MD ? ('...') : ('Test-Generate')}*/}\r\n {/* */}\r\n {/* */}\r\n {/* */}\r\n {/* this.getAssessmentDocument(23707, 126, 23419, this.state.testType, this.state.testLevel)}*/}\r\n {/* size='sm'*/}\r\n {/* style={{ cursor: 'pointer' }}*/}\r\n {/* disabled={this.state.loading ? true : false}*/}\r\n {/* >*/}\r\n {/* {this.state.width < DIMENSIONS.MD ? ('...') : ('Test-Generate-LOQ')}*/}\r\n {/* */}\r\n {/* */}\r\n {/**/}\r\n {/**/}\r\n {/* */}\r\n {/* Type: Selection Developmental*/}\r\n {/* this.setState({ testType: e.target.value })}*/}\r\n {/* name='search'*/}\r\n {/* id='search'*/}\r\n {/* onKeyPress={this.handleKeyPress}*/}\r\n {/* placeholder='Test Type (Developmental, Selection)'*/}\r\n {/* value={this.state.testType}*/}\r\n {/* />*/}\r\n {/* */}\r\n {/* */}\r\n {/* Level: EA MA*/}\r\n {/* this.setState({ testLevel: e.target.value })}*/}\r\n {/* name='search'*/}\r\n {/* id='search'*/}\r\n {/* onKeyPress={this.handleKeyPress}*/}\r\n {/* placeholder='Test Level (EA, MA)'*/}\r\n {/* value={this.state.testLevel}*/}\r\n {/* />*/}\r\n {/* */}\r\n {/**/}\r\n\r\n\r\n\r\n\r\n \r\n \r\n this.setState({ search: e.target.value })}\r\n name='search'\r\n id='search'\r\n onKeyPress={this.handleKeyPress}\r\n placeholder='Search Candidate Name, Position, or Status'\r\n\r\n />\r\n \r\n \r\n {this.state.isAdmin && (\r\n this.setState({ client: selected })}\r\n onBlur={(e) => this.setState({ client: [e.target.value] })}\r\n selected={this.state.client}\r\n options={this.state.clientOptions}\r\n placeholder='Search Client'\r\n style={this.state.width < DIMENSIONS.MD ? { marginTop: '20px' } : {}}\r\n disabled={this.state.isAdmin === false ? true : false}\r\n />\r\n )}\r\n {!this.state.isAdmin && (\r\n this.setState({ client: selected })}\r\n onBlur={(e) => this.setState({ client: [e.target.value] })}\r\n selected={this.state.clientOptions}\r\n options={this.state.clientOptions}\r\n placeholder='Search Client'\r\n style={this.state.width < DIMENSIONS.MD ? { marginTop: '20px' } : {}}\r\n disabled={this.state.isAdmin === false ? true : false}\r\n />\r\n )}\r\n \r\n \r\n
\r\n this.searchCandidates()}\r\n style={this.state.width < DIMENSIONS.LG ? { flex: '1', marginTop: '20px', whiteSpace: 'nowrap' } : { flex: '1', whiteSpace: 'nowrap' }}\r\n disabled={this.state.loading ? true : false}\r\n >\r\n Search\r\n \r\n this.showAllCandidates()}\r\n style={this.state.width < DIMENSIONS.LG ? { flex: '1', marginTop: '20px', marginLeft: '20px', whiteSpace: 'nowrap' } : { flex: '1', marginLeft: '20px', whiteSpace: 'nowrap' }}\r\n disabled={this.state.loading ? true : false}\r\n >\r\n Show All\r\n \r\n
\r\n \r\n
\r\n {this.state.candidates.length !== 0 && (\r\n
\r\n \r\n \r\n \r\n \r\n {/*
    \r\n {this.state.currentPage > 1 ? (\r\n
  • First
  • \r\n ) : ( \r\n null \r\n )}\r\n {this.state.currentPage > 1 ? (\r\n
  • Prev
  • \r\n ) : (\r\n null\r\n )} \r\n
  • {this.state.currentPage} of {pageNumbers.length}
  • \r\n {this.state.currentPage < pageNumbers.length ? (\r\n
  • Next
  • \r\n ) : (\r\n null\r\n )}\r\n {this.state.currentPage < pageNumbers.length ? (\r\n
  • Last
  • \r\n ) : (\r\n 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 {this.state.isAdmin && (\r\n \r\n )}\r\n \r\n {this.state.isAdmin && (\r\n \r\n )}\r\n \r\n \r\n \r\n {this.state.loading === true && this.state.loadingDocument === false ? (\r\n \r\n \r\n \r\n\r\n ) : (\r\n <>\r\n {!this.state.noResults ? (\r\n <>\r\n {renderItems}\r\n \r\n ) : (\r\n
\r\n
No Results Found
\r\n
\r\n )}\r\n \r\n )}\r\n \r\n
\r\n Last Name\r\n this.handleSort('lastName')}\r\n className='sort-button'\r\n />\r\n \r\n First Name\r\n this.handleSort('firstName')}\r\n className='sort-button'\r\n />\r\n \r\n Client\r\n this.handleSort('client')}\r\n className='sort-button'\r\n />\r\n \r\n Level + Type\r\n this.handleSort('levelType')}\r\n className='sort-button'\r\n />\r\n Generate Report
\r\n \r\n
\r\n \r\n
\r\n {this.state.candidates.length !== 0 && (\r\n
\r\n \r\n \r\n \r\n \r\n {/*
    \r\n {this.state.currentPage > 1 ? (\r\n
  • First
  • \r\n ) : ( \r\n null \r\n )}\r\n {this.state.currentPage > 1 ? (\r\n
  • Prev
  • \r\n ) : (\r\n null\r\n )} \r\n
  • {this.state.currentPage} of {pageNumbers.length}
  • \r\n {this.state.currentPage < pageNumbers.length ? (\r\n
  • Next
  • \r\n ) : (\r\n null\r\n )}\r\n {this.state.currentPage < pageNumbers.length ? (\r\n
  • Last
  • \r\n ) : (\r\n null\r\n )} \r\n
*/}\r\n
\r\n )}\r\n
\r\n
\r\n )\r\n }\r\n\r\n // clients\r\n\r\n async getClients() {\r\n const token = await authService.getAccessToken();\r\n const response = await fetch('api/Clients/GetClientDropdownTextAll', {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n const data = await response.json();\r\n this.setState({ clientOptions: data });\r\n this.setState({ token: token });\r\n }\r\n\r\n async getClientByUserId() {\r\n const token = await authService.getAccessToken();\r\n const response = await fetch(`api/Clients/GetClientByUserId`, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n })\r\n const data = await response.json();\r\n // const client = [\r\n // {\r\n // id: data.id,\r\n // company: data.company\r\n // }\r\n // ];\r\n var clientOptionList = [data.company];\r\n this.setState({ client: data.company, clientOptions: clientOptionList });\r\n }\r\n\r\n // candidates\r\n\r\n async searchCandidates() {\r\n this.setState({ loading: true, loadingDocument: false });\r\n const token = await authService.getAccessToken();\r\n const query = this.state.search ? this.state.search : '';\r\n //const clientId = (this.state.client && this.state.client.length !== 0) ? this.state.client[0].id : 0;\r\n var client = (this.state.client && this.state.client.length !== 0) ? this.state.client[0] : '';\r\n\r\n if (typeof client !== 'string' && !(client instanceof String)) {\r\n client = client.label;\r\n }\r\n\r\n const response = await fetch(`api/Candidates/SearchCandidates?query=${query}&client=${client}&webViewable=false`, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n const data = await response.json();\r\n this.setState({ candidates: data, loading: false, noResults: data.length === 0 ? true : false });\r\n }\r\n\r\n async showAllCandidates() {\r\n this.setState({ loading: true, loadingDocument: false });\r\n const token = await authService.getAccessToken();\r\n const response = await fetch('api/Candidates/ShowAllCandidates?webViewable=false', {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n })\r\n const data = await response.json();\r\n this.setState({ candidates: data, loading: false, noResults: data.length === 0 ? true : false });\r\n }\r\n\r\n\r\n async getDocument(recordId) {\r\n const token = await authService.getAccessToken();\r\n const response = await fetch(`api/Candidates/GetDocument?recordId=${recordId}`, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n })\r\n const data = await response.json();\r\n this.downloadFile(data.documentBase64, data.documentTitle);\r\n }\r\n\r\n async getAssessmentDocuments(assessments) {\r\n const token = await authService.getAccessToken();\r\n const response = await fetch(`api/Candidates/GetAssessmentDocuments`, {\r\n method: \"POST\",\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' },\r\n body: JSON.stringify(assessments)\r\n })\r\n const data = await response.json();\r\n this.downloadFile(data.documentBase64, data.documentTitle);\r\n }\r\n\r\n async getAssessmentDocument(assessmentId, recordId, candidateId, testType = \"\", testLevel = \"\", isWordDoc = false) {\r\n try {\r\n this.setState({ loading: true, loadingDocument: true });\r\n const token = await authService.getAccessToken();\r\n const response = await fetch(`api/Document/GetAssessmentDocument?assessmentId=${assessmentId}&clientId=${recordId}&candidateId=${candidateId}&type=${testType}&level=${testLevel}&isWordDoc=${isWordDoc}`, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n })\r\n const data = await response.json();\r\n this.downloadFile(data.documentBase64, data.filename);\r\n this.setState({ loading: false, loadingDocument: false });\r\n } catch (ex) {\r\n this.setState({ loading: false, loadingDocument: false });\r\n }\r\n \r\n }\r\n\r\n downloadFile(file, name) {\r\n const blob = this.base64ToBlob(file);\r\n const uriContent = URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n link.setAttribute('href', uriContent);\r\n link.setAttribute('download', name);\r\n const event = new MouseEvent('click');\r\n link.dispatchEvent(event);\r\n }\r\n\r\n base64ToBlob = (file) => {\r\n const binaryString = window.atob(file);\r\n const len = binaryString.length;\r\n const bytes = new Uint8Array(len);\r\n for (let i = 0; i < len; ++i) {\r\n bytes[i] = binaryString.charCodeAt(i);\r\n }\r\n const blob = new Blob([bytes], { type: 'application/octet-stream' });\r\n return blob;\r\n }\r\n\r\n // table sort\r\n\r\n handleSort(column) {\r\n const direction = this.state.sort.column ? (this.state.sort.direction === 'asc' ? 'desc' : 'asc') : 'desc';\r\n const data = this.state.candidates;\r\n data.sort((a, b) => a[column].localeCompare(b[column]))\r\n if (direction === 'desc') {\r\n data.reverse();\r\n }\r\n this.setState({\r\n candidates: data,\r\n sort: {\r\n column,\r\n direction\r\n }\r\n })\r\n }\r\n}","import React, { Component } from 'react';\r\nimport authService from './api-authorization/AuthorizeService';\r\nimport AdminFunctions from './admin/AdminFunctions';\r\nimport { Container, Row, Col, Input, Button, Table, Spinner, UncontrolledTooltip, Alert } from 'reactstrap';\r\nimport { Typeahead } from 'react-bootstrap-typeahead';\r\nimport { FaSort } from 'react-icons/fa'\r\nimport { DIMENSIONS } from '../util/util';\r\nimport '../styles/site.css';\r\n\r\nexport class ClientLogos extends Component {\r\n static displayName = ClientLogos.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n clientOptions: [],\r\n clientLogos: [],\r\n client: [],\r\n search: null,\r\n candidates: [],\r\n isAdmin: false,\r\n height: 0,\r\n width: 0,\r\n sort: {\r\n column: null,\r\n direction: 'desc'\r\n },\r\n loading: false,\r\n noResults: false,\r\n currentPage: 1,\r\n itemsPerPage: 10,\r\n numberOfPages: 0,\r\n selectedFile: null,\r\n token: \"\",\r\n clientLogoURL: \"\"\r\n };\r\n this.handleClick = this.handleClick.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handlePageSizeChange = this.handlePageSizeChange.bind(this);\r\n window.addEventListener('resize', this.setWindowDimensions);\r\n }\r\n\r\n onFileChange = event => {\r\n // Update the state \r\n this.setState({ selectedFile: event.target.files[0] });\r\n };\r\n\r\n onFileUpload = () => {\r\n //Do we have a client selected?\r\n if (this.state.client && this.state.client.length > 0 && this.state.client[0].clientRecordId > 0) {\r\n // Create an object of formData \r\n this.state.uploadSuccess = \"\";\r\n const formData = new FormData();\r\n\r\n formData.append(\"formFile\", this.state.selectedFile);\r\n formData.append(\"fileName\", this.state.selectedFile.name);\r\n formData.append(\"RecordId\", this.state.client[0].clientRecordId);\r\n formData.append(\"ClientCompany\", this.state.client[0].clientCompany);\r\n\r\n // Update the formData object \r\n //formData.append(\r\n // \"myFile\",\r\n // this.state.selectedFile,\r\n // this.state.selectedFile.name\r\n //);\r\n\r\n // Details of the uploaded file \r\n console.log(this.state.selectedFile);\r\n\r\n // Request made to the backend api \r\n // Send formData object \r\n\r\n\r\n const requestOptions = {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: formData,\r\n headers: !this.state.token ? {} : { 'Authorization': `Bearer ${this.state.token}` }\r\n };\r\n fetch('api/Clients/UploadFile', requestOptions);\r\n //fetch('api/Clients/UploadFile', requestOptions);\r\n } else {\r\n this.setState({ uploadSuccess: \"clientRequired\" });\r\n }\r\n\r\n\r\n };\r\n handleClick(event) {\r\n let id = Number(event.target.id);\r\n\r\n if (id === 0) {\r\n this.setState({\r\n currentPage: 1\r\n });\r\n } else if (id === -1) {\r\n this.setState({\r\n currentPage: Math.ceil(this.state.candidates.length / this.state.itemsPerPage)\r\n });\r\n } else {\r\n this.setState({\r\n currentPage: Number(event.target.id)\r\n });\r\n }\r\n }\r\n\r\n handleChange(event) {\r\n this.setState({ currentPage: Number(event.target.value) });\r\n }\r\n\r\n handlePageSizeChange(event) {\r\n let pageSize = Number(event.target.value);\r\n this.setState({ itemsPerPage: pageSize });\r\n if (this.state.currentPage > Math.ceil(this.state.candidates.length / pageSize)) {\r\n this.setState({ currentPage: Math.ceil(this.state.candidates.length / pageSize) })\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n this.setWindowDimensions();\r\n const isAdmin = await AdminFunctions.isAdminAsync();\r\n this.setState({ isAdmin: isAdmin });\r\n if (isAdmin) {\r\n this.getClientLogos();\r\n }\r\n else {\r\n this.getClientLogos();\r\n }\r\n }\r\n\r\n setWindowDimensions = () => {\r\n this.setState({\r\n height: window.innerHeight,\r\n width: window.innerWidth\r\n });\r\n };\r\n\r\n handleKeyPress = (event) => {\r\n if (event.key === 'Enter' && this.state.Admin == true) {\r\n this.getClientLogos();\r\n }\r\n }\r\n\r\n updateClient = (selected) => {\r\n this.setState({ client: selected });\r\n if (selected != null && selected.length > 0) {\r\n this.setState({ clientLogoURL: selected[0].clientLogoURL });\r\n }\r\n }\r\n render() {\r\n // Logic for displaying candidates\r\n const indexOfLastItem = this.state.currentPage * this.state.itemsPerPage;\r\n const indexOfFirstItem = indexOfLastItem - this.state.itemsPerPage;\r\n const currentItems = this.state.candidates.slice(indexOfFirstItem, indexOfLastItem);\r\n\r\n const renderItems = currentItems.map((candidate, i) => {\r\n return (\r\n \r\n {candidate.id}\r\n {candidate.name}\r\n {candidate.clientRecordId}\r\n {candidate.clientCompany}\r\n {candidate.clientLogoURL}\r\n {candidate.fileName}\r\n \r\n )\r\n });\r\n\r\n // Logic for displaying page numbers\r\n const pageNumbers = [];\r\n for (let i = 1; i <= Math.ceil(this.state.candidates.length / this.state.itemsPerPage); i++) {\r\n pageNumbers.push(i);\r\n }\r\n\r\n const renderPageNumbers = pageNumbers.map(number => {\r\n return (\r\n \r\n );\r\n });\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n

Client Logo Upload

\r\n \r\n
\r\n \r\n \r\n {this.state.success === true && (\r\n \r\n Logo uploaded!\r\n \r\n )}\r\n {this.state.uploadSuccess === \"clientRequired\" && (\r\n \r\n Client Required\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n
Choose Client: 
\r\n \r\n \r\n `${option.clientCompany}`}\r\n onChange={(selected) => this.updateClient(selected)}\r\n selected={this.state.client}\r\n options={this.state.candidates}\r\n placeholder='Search Client'\r\n style={this.state.width < DIMENSIONS.MD ? { marginTop: '20px' } : {}}\r\n disabled={this.state.isAdmin === false ? true : false}\r\n />\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n\r\n
\r\n {/**/}\r\n {/*
{JSON.stringify(this.state.client, null, 2)}
*/}\r\n {/*
*/}\r\n {this.state.clientLogoURL != null && this.state.clientLogoURL != \"\" ? (\r\n \r\n Current Image: \r\n \r\n ) : (\r\n \r\n No Current Image.\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 {this.state.loading === true ? (\r\n \r\n \r\n \r\n ) : (\r\n <>\r\n {!this.state.noResults ? (\r\n <>\r\n {renderItems}\r\n \r\n ) : (\r\n \r\n \r\n \r\n )}\r\n \r\n )}\r\n \r\n
\r\n Id\r\n this.handleSort('Id')}\r\n className='sort-button'\r\n />\r\n \r\n Name\r\n this.handleSort('Name')}\r\n className='sort-button'\r\n />\r\n \r\n ClientRecordId\r\n this.handleSort('ClientRecordId')}\r\n className='sort-button'\r\n />\r\n \r\n ClientCompany\r\n this.handleSort('ClientCompany')}\r\n className='sort-button'\r\n />\r\n \r\n ClientLogoURL\r\n this.handleSort('ClientLogoURL')}\r\n className='sort-button'\r\n />\r\n \r\n FileName\r\n this.handleSort('FileName')}\r\n className='sort-button'\r\n />\r\n
\r\n
\r\n
No Results Found
\r\n
\r\n
\r\n \r\n
\r\n {this.state.candidates.length !== 0 && (\r\n
\r\n \r\n \r\n \r\n \r\n {/*
    \r\n {this.state.currentPage > 1 ? (\r\n
  • First
  • \r\n ) : ( \r\n null \r\n )}\r\n {this.state.currentPage > 1 ? (\r\n
  • Prev
  • \r\n ) : (\r\n null\r\n )} \r\n
  • {this.state.currentPage} of {pageNumbers.length}
  • \r\n {this.state.currentPage < pageNumbers.length ? (\r\n
  • Next
  • \r\n ) : (\r\n null\r\n )}\r\n {this.state.currentPage < pageNumbers.length ? (\r\n
  • Last
  • \r\n ) : (\r\n null\r\n )} \r\n
*/}\r\n
\r\n )}\r\n\r\n
\r\n
\r\n )\r\n }\r\n\r\n // clients\r\n\r\n async getClients() {\r\n const token = await authService.getAccessToken();\r\n const response = await fetch('api/Clients/GetClientDropdownText', {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n const data = await response.json();\r\n this.setState({ clientOptions: data });\r\n }\r\n\r\n async getClientByUserId() {\r\n const token = await authService.getAccessToken();\r\n const response = await fetch(`api/Clients/GetClientByUserId`, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n })\r\n const data = await response.json();\r\n // const client = [\r\n // {\r\n // id: data.id,\r\n // company: data.company\r\n // }\r\n // ];\r\n this.setState({ client: data.company });\r\n }\r\n\r\n // client Logos\r\n\r\n async getClientLogos() {\r\n //const getLogos = await fetch('api/Clients/GetClientLogos');\r\n //const dataLogos = await getLogos.json();\r\n //this.setState({ clientLogos: dataLogos });\r\n this.setState({ loading: true });\r\n const token = await authService.getAccessToken();\r\n this.setState({ token: token });\r\n const query = this.state.search ? this.state.search : '';\r\n //const clientId = (this.state.client && this.state.client.length !== 0) ? this.state.client[0].id : 0;\r\n var client = (this.state.client && this.state.client.length !== 0) ? this.state.client[0] : '';\r\n\r\n if (typeof client !== 'string' && !(client instanceof String)) {\r\n client = client.label;\r\n }\r\n const response = await fetch(`api/Clients/GetClientLogos`, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n //const response = await fetch(`api/Candidates/SearchCandidates?query=${query}&client=${client}`, {\r\n // headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n //});\r\n const data = await response.json();\r\n this.setState({ candidates: data, loading: false, noResults: data.length === 0 ? true : false });\r\n }\r\n async showAllCandidates() {\r\n this.setState({ loading: true });\r\n const token = await authService.getAccessToken();\r\n const response = await fetch('api/Candidates/ShowAllCandidates', {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n })\r\n const data = await response.json();\r\n this.setState({ candidates: data, loading: false, noResults: data.length === 0 ? true : false });\r\n }\r\n\r\n // document\r\n\r\n async getDocument(recordId) {\r\n const token = await authService.getAccessToken();\r\n const response = await fetch(`api/Candidates/GetDocument?recordId=${recordId}`, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n })\r\n const data = await response.json();\r\n this.downloadFile(data.documentBase64, data.documentTitle);\r\n }\r\n\r\n async getDocument(recordId) {\r\n const token = await authService.getAccessToken();\r\n const response = await fetch(`api/Candidates/GetDocument?recordId=${recordId}`, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n })\r\n const data = await response.json();\r\n this.downloadFile(data.documentBase64, data.documentTitle);\r\n }\r\n\r\n downloadFile(file, name) {\r\n const blob = this.base64ToBlob(file);\r\n const uriContent = URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n link.setAttribute('href', uriContent);\r\n link.setAttribute('download', name);\r\n const event = new MouseEvent('click');\r\n link.dispatchEvent(event);\r\n }\r\n\r\n base64ToBlob = (file) => {\r\n const binaryString = window.atob(file);\r\n const len = binaryString.length;\r\n const bytes = new Uint8Array(len);\r\n for (let i = 0; i < len; ++i) {\r\n bytes[i] = binaryString.charCodeAt(i);\r\n }\r\n const blob = new Blob([bytes], { type: 'application/pdf' });\r\n return blob;\r\n }\r\n\r\n // table sort\r\n\r\n handleSort(column) {\r\n const direction = this.state.sort.column ? (this.state.sort.direction === 'asc' ? 'desc' : 'asc') : 'desc';\r\n const data = this.state.candidates;\r\n data.sort((a, b) => a[column].localeCompare(b[column]))\r\n if (direction === 'desc') {\r\n data.reverse();\r\n }\r\n this.setState({\r\n candidates: data,\r\n sort: {\r\n column,\r\n direction\r\n }\r\n })\r\n }\r\n\r\n //async getClientByUserId() {\r\n // const token = await authService.getAccessToken();\r\n // const response = await fetch(`api/Clients/GetClientByUserId`, {\r\n // headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n // })\r\n // const data = await response.json();\r\n // // const client = [\r\n // // {\r\n // // id: data.id,\r\n // // company: data.company\r\n // // }\r\n // // ];\r\n // //var clientOptionList = [data.company];\r\n // this.setState({ client: data.company });\r\n //}\r\n}\r\n","import React, { Component } from 'react';\r\nimport { NavLink } from 'reactstrap';\r\nimport { Link } from 'react-router-dom';\r\nimport authService from './api-authorization/AuthorizeService';\r\nimport AdminFunctions from './admin/AdminFunctions';\r\n\r\nexport class FAQ extends Component {\r\n static displayName = FAQ.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n user: undefined,\r\n isAdmin: false\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n const user = await authService.getUser();\r\n this.setState({ user: user });\r\n if (user) {\r\n const isAdmin = await AdminFunctions.isAdminAsync();\r\n this.setState({ isAdmin: isAdmin });\r\n document.getElementsByTagName('html')[0].className = \"background-navigation\";\r\n }\r\n else {\r\n document.getElementsByTagName('html')[0].className = \"background-title\";\r\n }\r\n }\r\n render() {\r\n //const styles = {\r\n // question: {\r\n\r\n // },\r\n // answer: {\r\n\r\n // },\r\n // tableBorder: {\r\n // border: \"1px solid\"\r\n // }\r\n //};\r\n return (\r\n
\r\n {this.state.user ? (\r\n
    \r\n

    FAQ

    \r\n

    Q: What does each status label mean?

    \r\n

    A: Please see the chart below for all statuses and their definitions:

    \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 Status\r\n \r\n Definition\r\n
    \r\n Order Initiated\r\n \r\n The candidate and/or client has been sent information on how to log in and complete assessments.\r\n If a proctored session and/or interview has been requested, status will remain as \"Order Initiated\" until scheduled.\r\n
    \r\n Scheduled\r\n (proctored and Interview)\r\n \r\n The proctored session and/or interview, if applicable, has been scheduled.\r\n
    \r\n Testing Available\r\n \r\n The candidate has been given their assessment links and may begin their assessment at any time.\r\n
    \r\n Testing in Progress\r\n \r\n The candidate is in the process of completing their assessments.\r\n Status will remain as \"Testing in Progress\" until all assessments and interview, if applicable, have been completed and scored.\r\n
    \r\n Testing Complete\r\n \r\n All parts of the assessment process have been completed. Report writing is in progress. Estimated due date is now available.\r\n
    \r\n Delivered\r\n \r\n The full report is complete and available for download.\r\n
    \r\n Cancelled\r\n \r\n Either the client has cancelled, the candidate has dropped out of the process, or the candidate failed to complete all assessments prior to link expiration.\r\n
    \r\n

    Q: Does this change the way we request our assessments?

    \r\n

    A: No, the assessment ordering and scheduling process remains the same. That said, please be sure to use the correct order form to avoid potential delays.

    \r\n

    Q: I just placed an assessment order. Why is the candidate not listed?

    \r\n

    A: The candidate will appear in the system once the order has been initiated by PA. Please allow 1-2 business days.

    \r\n

    Q: Is there a way to prevent an assessment from being posted?

    \r\n

    A: Orders that are submitted as \"Confidential\" will not be posted to the Q4 Compass. If necessary, you may also submit a request to have us remove an assessment that is currently posted.

    \r\n

    Q: The candidate says they have completed their assessment. Why does your system still show \"Testing in Progress\"?

    \r\n

    A: The system will continue to show the candidate's status as \"Testing in Progress\" until all assessments have been scored by PA (and when applicable, the candidate interview has been completed).

    \r\n

    Q: Where can I find a report after I download it?

    \r\n

    A: You should see the report in the Compass window. If you do not, please check the download folder on your computer.

    \r\n

    Q: What if my due date has passed and I do not see the report?

    \r\n

    A: Please contact your account manager or their assistant for more information.

    \r\n

    Q: How long will my reports be available?

    \r\n

    A: Reports will be available via the Q4 Compass for a period of 2 years from the date the report was completed. If you need an older report, please contact your Account Manager or their assistant.

    \r\n

    Q: What if I forget my password? How do I change my password?

    \r\n

    A: Click on the \"Forgot your password\" link at the bottom of the log in page and enter the email address associated with your account. We will email a link which will allow you to reset your password.

    \r\n

    Q: What if I have additional questions about the Q4 Compass that are not answered here?

    \r\n

    A: Please contact your account manager or their assistant for any additional help.

    \r\n
\r\n ) : (\r\n <>\r\n )}\r\n
\r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { NavLink } from 'reactstrap';\r\nimport { Link } from 'react-router-dom';\r\nimport authService from './api-authorization/AuthorizeService';\r\nimport AdminFunctions from './admin/AdminFunctions';\r\n\r\nexport class TOU extends Component {\r\n static displayName = TOU.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n user: undefined,\r\n isAdmin: false\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n const user = await authService.getUser();\r\n this.setState({ user: user });\r\n if (user) {\r\n const isAdmin = await AdminFunctions.isAdminAsync();\r\n this.setState({ isAdmin: isAdmin });\r\n document.getElementsByTagName('html')[0].className = \"background-navigation\";\r\n }\r\n else {\r\n document.getElementsByTagName('html')[0].className = \"background-title\";\r\n }\r\n }\r\n render() {\r\n //const styles = {\r\n // question: {\r\n\r\n // },\r\n // answer: {\r\n\r\n // },\r\n // tableBorder: {\r\n // border: \"1px solid\"\r\n // }\r\n //};\r\n return (\r\n
\r\n {this.state.user ? (\r\n
    \r\n

    TERMS OF USE AGREEMENT

    \r\n

    1. SCOPE

    \r\n

    Psychological Associates (\"PA\") maintains for certain clients an online platform (\"Q4 Compass\") featuring information on and access to our products and services. PA may provide access for you pursuant to the terms and conditions of this Terms of Use Agreement (\"Agreement\"). This Agreement governs your access to and use of the Q4 Compass. Your access and/or utilization of the Q4 Compass constitutes acceptance of these terms and conditions. If you do not agree with these terms and conditions, you may not access or utilize the Q4 Compass.

    \r\n Because this agreement is subject to change, and you will be bound by such changes, it is in your interest to periodically review this agreement.

    \r\n

    2. TERM

    \r\n

    The term of this Agreement is effective upon issuance by PA of an authorized user login ID and shall continue until terminated by either party. You agree that all registration information is accurate and truthful. You also agree to immediately inform PA of any changes that may affect your eligibility as an authorized user of the Q4 Compass. PA shall incur no obligation to provide ongoing access to the Q4 Compass and may cease operations of the Q4 Compass at any time and for any reason.

    \r\n

    3. PERMISSABLE USE

    \r\n

    You and your authorized employees may access, download, and utilize material made available to you through the Q4 Compass for internal business purposes only, in accordance with the terms of this Agreement. Access to the Q4 Compass is granted at the sole discretion of PA and may be terminated at any time.\r\n Access to the Q4 Compass is permitted by username and password. You are responsible for protecting the confidentiality of the username and password registered to your account. Further, you agree not to share or disclose your username or password with any third parties, and you accept complete responsibility for actions which occur under your username. If you believe your username and/or password have been compromised, contact PA immediately. If you are terminated or resign from your current employer and are no longer authorized to access the Q4 Compass, contact PA so that we may disable your username and password.

    \r\n You agree to use PA products and services in a manner consistent with their intended use, and within the guidelines of all applicable employment laws and regulations, and all professional, ethical, and regulatory guidelines. You agree that you are responsible for complying with all applicable privacy, data transfer, and data security laws, and agree to abide by such laws in connection with your use of the Q4 Compass.

    \r\n Information seen or obtained through the Q4 Compass may be considered confidential. You agree to limit access to confidential information to those who have a need to know this confidential information.\r\n

    \r\n

    4. PROTECTION

    \r\n

    All information provided through the Q4 Compass is the proprietary property of PA. You agree not to change, alter, or modify the physical or electronic characteristics or content of assessments, reports, or any other aspect of the Q4 Compass or materials downloaded from the Q4 Compass. You may not transfer, share, disclose, or distribute information to third parties.

    \r\n

    5. CHANGES

    \r\n

    PA reserves the right, in its sole discretion, to modify, add, or remove any portion of this Agreement, in whole or in part, at any time.

    \r\n Further, PA may modify, upgrade, or discontinue any aspect of the Q4 Compass at any time, including, but not limited to your access, available content, and services offered. PA may also impose limits on certain features of the Q4 Compass and/or restrict access to the Q4 Compass without notice or liability.

    \r\n Your continued use of the Q4 Compass constitutes acceptance of all changes.\r\n

    \r\n

    6. LIABILITY

    \r\n

    PA strives to provide current and accurate information through the Q4 Compass, but you acknowledge that the Q4 Compass may contain omissions or errors.

    \r\n PA makes no representations or warranties regarding the operation of the Q4 Compass. Any liability of PA for loss or damage relating to this agreement or your use or inability to use the Q4 Compass shall be strictly limited to fees paid for the products and services involved.\r\n

    \r\n

    7. CONFIDENTIALITY

    \r\n

    The evaluations and reports available on the Q4 Compass are highly confidential, and You agree that neither they nor their contents will be disclosed to the subjects of these evaluations and reports without the prior written approval of PA. You agree to defend, indemnify, and hold harmless, PA, its owners, officers, directors, employees, and consultants, against any claim, cause of action, damage, loss, or cost resulting from the disclosure of any evaluation or report, or any portion thereof, obtained from the Q4 Compass to the subject(s) thereof.

    \r\n

    8. GENERAL

    \r\n

    This agreement is governed by the laws of the State of Missouri. It constitutes the complete agreement between you and PA regarding your status as an authorized user of the Q4 Compass.

    \r\n

    63230572.1

    \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\nimport { Component } from 'react'\r\nimport { Route, Redirect } from 'react-router-dom'\r\nimport { ApplicationPaths, QueryParameterNames } from './ApiAuthorizationConstants'\r\nimport authService from './AuthorizeService'\r\n\r\nexport default class AuthorizeRoute extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n ready: false,\r\n authenticated: false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this._subscription = authService.subscribe(() => this.authenticationChanged());\r\n this.populateAuthenticationState();\r\n }\r\n\r\n componentWillUnmount() {\r\n authService.unsubscribe(this._subscription);\r\n }\r\n\r\n render() {\r\n const { ready, authenticated } = this.state;\r\n var link = document.createElement(\"a\");\r\n link.href = this.props.path;\r\n const returnUrl = `${link.protocol}//${link.host}${link.pathname}${link.search}${link.hash}`;\r\n const redirectUrl = `${ApplicationPaths.Login}?${QueryParameterNames.ReturnUrl}=${encodeURIComponent(returnUrl)}`\r\n if (!ready) {\r\n return
;\r\n } else {\r\n const { component: Component, ...rest } = this.props;\r\n return {\r\n if (authenticated) {\r\n return \r\n } else {\r\n return \r\n }\r\n }} />\r\n }\r\n }\r\n\r\n async populateAuthenticationState() {\r\n const authenticated = await authService.isAuthenticated();\r\n this.setState({ ready: true, authenticated });\r\n }\r\n\r\n async authenticationChanged() {\r\n this.setState({ ready: false, authenticated: false });\r\n await this.populateAuthenticationState();\r\n }\r\n}\r\n","import React from 'react'\r\nimport { Component } from 'react';\r\nimport authService from './AuthorizeService';\r\nimport { AuthenticationResultStatus } from './AuthorizeService';\r\nimport { LoginActions, QueryParameterNames, ApplicationPaths } from './ApiAuthorizationConstants';\r\n\r\n// The main responsibility of this component is to handle the user's login process.\r\n// This is the starting point for the login process. Any component that needs to authenticate\r\n// a user can simply perform a redirect to this component with a returnUrl query parameter and\r\n// let the component perform the login and return back to the return url.\r\nexport class Login extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n message: undefined\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n const action = this.props.action;\r\n switch (action) {\r\n case LoginActions.Login:\r\n this.login(this.getReturnUrl());\r\n break;\r\n case LoginActions.LoginCallback:\r\n this.processLoginCallback();\r\n break;\r\n case LoginActions.LoginFailed:\r\n const params = new URLSearchParams(window.location.search);\r\n const error = params.get(QueryParameterNames.Message);\r\n this.setState({ message: error });\r\n break;\r\n case LoginActions.Profile:\r\n this.redirectToProfile();\r\n break;\r\n case LoginActions.Register:\r\n this.redirectToRegister();\r\n break;\r\n default:\r\n throw new Error(`Invalid action '${action}'`);\r\n }\r\n }\r\n\r\n render() {\r\n const action = this.props.action;\r\n const { message } = this.state;\r\n\r\n if (!!message) {\r\n return
{message}
\r\n } else {\r\n switch (action) {\r\n case LoginActions.Login:\r\n // return (
Processing login
);\r\n return (
);\r\n case LoginActions.LoginCallback:\r\n // return (
Processing login callback
);\r\n return (
);\r\n case LoginActions.Profile:\r\n case LoginActions.Register:\r\n return (
);\r\n default:\r\n throw new Error(`Invalid action '${action}'`);\r\n }\r\n }\r\n }\r\n\r\n async login(returnUrl) {\r\n const state = { returnUrl };\r\n const result = await authService.signIn(state);\r\n switch (result.status) {\r\n case AuthenticationResultStatus.Redirect:\r\n break;\r\n case AuthenticationResultStatus.Success:\r\n await this.navigateToReturnUrl(returnUrl);\r\n break;\r\n case AuthenticationResultStatus.Fail:\r\n this.setState({ message: result.message });\r\n break;\r\n default:\r\n throw new Error(`Invalid status result ${result.status}.`);\r\n }\r\n }\r\n\r\n async processLoginCallback() {\r\n const url = window.location.href;\r\n const result = await authService.completeSignIn(url);\r\n switch (result.status) {\r\n case AuthenticationResultStatus.Redirect:\r\n // There should not be any redirects as the only time completeSignIn finishes\r\n // is when we are doing a redirect sign in flow.\r\n throw new Error('Should not redirect.');\r\n case AuthenticationResultStatus.Success:\r\n await this.navigateToReturnUrl(this.getReturnUrl(result.state));\r\n break;\r\n case AuthenticationResultStatus.Fail:\r\n this.setState({ message: result.message });\r\n break;\r\n default:\r\n throw new Error(`Invalid authentication result status '${result.status}'.`);\r\n }\r\n }\r\n\r\n getReturnUrl(state) {\r\n const params = new URLSearchParams(window.location.search);\r\n const fromQuery = params.get(QueryParameterNames.ReturnUrl);\r\n if (fromQuery && !fromQuery.startsWith(`${window.location.origin}/`)) {\r\n // This is an extra check to prevent open redirects.\r\n throw new Error(\"Invalid return url. The return url needs to have the same origin as the current page.\")\r\n }\r\n return (state && state.returnUrl) || fromQuery || `${window.location.origin}/`;\r\n }\r\n\r\n redirectToRegister() {\r\n this.redirectToApiAuthorizationPath(`${ApplicationPaths.IdentityRegisterPath}?${QueryParameterNames.ReturnUrl}=${encodeURI(ApplicationPaths.Login)}`);\r\n }\r\n\r\n redirectToProfile() {\r\n this.redirectToApiAuthorizationPath(ApplicationPaths.IdentityManagePath);\r\n }\r\n\r\n redirectToApiAuthorizationPath(apiAuthorizationPath) {\r\n const redirectUrl = `${window.location.origin}/${apiAuthorizationPath}`;\r\n // It's important that we do a replace here so that when the user hits the back arrow on the\r\n // browser they get sent back to where it was on the app instead of to an endpoint on this\r\n // component.\r\n window.location.replace(redirectUrl);\r\n }\r\n\r\n navigateToReturnUrl(returnUrl) {\r\n // It's important that we do a replace here so that we remove the callback uri with the\r\n // fragment containing the tokens from the browser history.\r\n window.location.replace(returnUrl);\r\n }\r\n}\r\n","import React from 'react'\r\nimport { Component } from 'react';\r\nimport authService from './AuthorizeService';\r\nimport { AuthenticationResultStatus } from './AuthorizeService';\r\nimport { QueryParameterNames, LogoutActions, ApplicationPaths } from './ApiAuthorizationConstants';\r\n\r\n// The main responsibility of this component is to handle the user's logout process.\r\n// This is the starting point for the logout process, which is usually initiated when a\r\n// user clicks on the logout button on the LoginMenu component.\r\nexport class Logout extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n message: undefined,\r\n isReady: false,\r\n authenticated: false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n const action = this.props.action;\r\n switch (action) {\r\n case LogoutActions.Logout:\r\n if (!!window.history.state.state.local) {\r\n this.logout(this.getReturnUrl());\r\n } else {\r\n // This prevents regular links to /authentication/logout from triggering a logout\r\n this.setState({ isReady: true, message: \"The logout was not initiated from within the page.\" });\r\n }\r\n break;\r\n case LogoutActions.LogoutCallback:\r\n this.processLogoutCallback();\r\n break;\r\n case LogoutActions.LoggedOut:\r\n // this.setState({ isReady: true, message: \"You successfully logged out!\" });\r\n this.setState({ isReady: true, message: \"\" });\r\n break;\r\n default:\r\n throw new Error(`Invalid action '${action}'`);\r\n }\r\n\r\n this.populateAuthenticationState();\r\n }\r\n\r\n render() {\r\n const { isReady, message } = this.state;\r\n if (!isReady) {\r\n return
\r\n }\r\n if (!!message) {\r\n return (
{message}
);\r\n } else {\r\n const action = this.props.action;\r\n switch (action) {\r\n case LogoutActions.Logout:\r\n // return (
Processing logout
);\r\n return (
);\r\n case LogoutActions.LogoutCallback:\r\n // return (
Processing logout callback
);\r\n return (
);\r\n case LogoutActions.LoggedOut:\r\n return (
{message}
);\r\n default:\r\n throw new Error(`Invalid action '${action}'`);\r\n }\r\n }\r\n }\r\n\r\n async logout(returnUrl) {\r\n const state = { returnUrl };\r\n const isauthenticated = await authService.isAuthenticated();\r\n if (isauthenticated) {\r\n const result = await authService.signOut(state);\r\n switch (result.status) {\r\n case AuthenticationResultStatus.Redirect:\r\n break;\r\n case AuthenticationResultStatus.Success:\r\n await this.navigateToReturnUrl(returnUrl);\r\n break;\r\n case AuthenticationResultStatus.Fail:\r\n this.setState({ message: result.message });\r\n break;\r\n default:\r\n throw new Error(\"Invalid authentication result status.\");\r\n }\r\n } else {\r\n // this.setState({ message: \"You successfully logged out!\" });\r\n this.setState({ message: \"\" });\r\n }\r\n }\r\n\r\n async processLogoutCallback() {\r\n const url = window.location.href;\r\n const result = await authService.completeSignOut(url);\r\n switch (result.status) {\r\n case AuthenticationResultStatus.Redirect:\r\n // There should not be any redirects as the only time completeAuthentication finishes\r\n // is when we are doing a redirect sign in flow.\r\n throw new Error('Should not redirect.');\r\n case AuthenticationResultStatus.Success:\r\n await this.navigateToReturnUrl(this.getReturnUrl(result.state));\r\n break;\r\n case AuthenticationResultStatus.Fail:\r\n this.setState({ message: result.message });\r\n break;\r\n default:\r\n throw new Error(\"Invalid authentication result status.\");\r\n }\r\n }\r\n\r\n async populateAuthenticationState() {\r\n const authenticated = await authService.isAuthenticated();\r\n this.setState({ isReady: true, authenticated });\r\n }\r\n\r\n getReturnUrl(state) {\r\n const params = new URLSearchParams(window.location.search);\r\n const fromQuery = params.get(QueryParameterNames.ReturnUrl);\r\n if (fromQuery && !fromQuery.startsWith(`${window.location.origin}/`)) {\r\n // This is an extra check to prevent open redirects.\r\n throw new Error(\"Invalid return url. The return url needs to have the same origin as the current page.\")\r\n }\r\n return (state && state.returnUrl) ||\r\n fromQuery ||\r\n `${window.location.origin}${ApplicationPaths.LoggedOut}`;\r\n }\r\n\r\n navigateToReturnUrl(returnUrl) {\r\n return window.location.replace(returnUrl);\r\n }\r\n}\r\n","import React, { Component, Fragment } from 'react';\r\nimport { Route } from 'react-router';\r\nimport { Login } from './Login'\r\nimport { Logout } from './Logout'\r\nimport { ApplicationPaths, LoginActions, LogoutActions } from './ApiAuthorizationConstants';\r\n\r\nexport default class ApiAuthorizationRoutes extends Component {\r\n\r\n render () {\r\n return(\r\n \r\n loginAction(LoginActions.Login)} />\r\n loginAction(LoginActions.LoginFailed)} />\r\n loginAction(LoginActions.LoginCallback)} />\r\n loginAction(LoginActions.Profile)} />\r\n loginAction(LoginActions.Register)} />\r\n logoutAction(LogoutActions.Logout)} />\r\n logoutAction(LogoutActions.LogoutCallback)} />\r\n logoutAction(LogoutActions.LoggedOut)} />\r\n );\r\n }\r\n}\r\n\r\nfunction loginAction(name){\r\n return ();\r\n}\r\n\r\nfunction logoutAction(name) {\r\n return ();\r\n}\r\n","import React, { Component } from 'react';\r\n\r\nexport class Counter extends Component {\r\n static displayName = Counter.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { currentCount: 0 };\r\n this.incrementCounter = this.incrementCounter.bind(this);\r\n }\r\n\r\n incrementCounter() {\r\n this.setState({\r\n currentCount: this.state.currentCount + 1\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n

Counter

\r\n\r\n

This is a simple example of a React component.

\r\n\r\n

Current count: {this.state.currentCount}

\r\n\r\n \r\n
\r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport authService from './api-authorization/AuthorizeService'\r\n\r\n// const FetchData = () => {\r\n// const [loading, setLoading] = useState(true);\r\n// const [forecasts, setForecasts] = useState([]);\r\n// useEffect(() => {\r\n// (async () => {\r\n// const token = await authService.getAccessToken();\r\n// const response = await fetch('weatherforecast', {\r\n// headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n// });\r\n// const data = await response.json();\r\n// setForecasts(data);\r\n// setLoading(false);\r\n// })();\r\n// }, []);\r\n\r\n// function renderForecastsTable(forecasts) {\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// {forecasts.map(forecast => (\r\n// \r\n// \r\n// \r\n// \r\n// \r\n// \r\n// ))}\r\n// \r\n//
DateTemp. (C)Temp. (F)Summary
{forecast.date}{forecast.temperatureC}{forecast.temperatureF}{forecast.summary}
\r\n// );\r\n// }\r\n// function renderLoadingMessage() {\r\n// return (

Loading...

);\r\n// }\r\n\r\n// return (\r\n//
\r\n//

Weather forecast

\r\n//

This component demonstrates fetching data from the server.

\r\n// {loading ? renderLoadingMessage() : renderForecastsTable(forecasts)}\r\n//
\r\n// );\r\n \r\n// }\r\n\r\n// export default FetchData\r\n\r\n\r\nexport class FetchData extends Component {\r\n static displayName = FetchData.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { forecasts: [], loading: true };\r\n }\r\n\r\n componentDidMount() {\r\n this.populateWeatherData();\r\n }\r\n\r\n static renderForecastsTable(forecasts) {\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 {forecasts.map(forecast =>\r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n
DateTemp. (C)Temp. (F)Summary
{forecast.date}{forecast.temperatureC}{forecast.temperatureF}{forecast.summary}
\r\n );\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ?

Loading...

\r\n : FetchData.renderForecastsTable(this.state.forecasts);\r\n\r\n return (\r\n
\r\n

Weather forecast

\r\n

This component demonstrates fetching data from the server.

\r\n {contents}\r\n
\r\n );\r\n }\r\n\r\n async populateWeatherData() {\r\n debugger\r\n const token = await authService.getAccessToken();\r\n const response = await fetch('weatherforecast', {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n const data = await response.json();\r\n this.setState({ forecasts: data, loading: false });\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Container, Row, Col, Table, Button } from 'reactstrap';\r\nimport authService from '../api-authorization/AuthorizeService';\r\nimport AdminFunctions from './AdminFunctions';\r\n\r\nexport class Roles extends Component {\r\n static displayName = Roles.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n roles: []\r\n };\r\n\r\n }\r\n\r\n async componentDidMount() { \r\n //debugger\r\n //const isAdmin = await AdminFunctions.isAdminAsync();\r\n const isAdmin = false;\r\n if(!isAdmin) {\r\n this.props.history.push('/');\r\n }\r\n //this.getRoles();\r\n }\r\n\r\n render() {\r\n return (null);\r\n }\r\n \r\n render_old() {\r\n return (\r\n
\r\n \r\n \r\n \r\n

Roles

\r\n \r\n \r\n this.props.history.push('/admin/roles/create')}\r\n >\r\n + Add\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 {this.state.roles.map((role, i) => {\r\n return (\r\n this.handleRowClick(role.id)}\r\n style={{ cursor: 'pointer' }}\r\n >\r\n {/**/}\r\n \r\n \r\n )\r\n })}\r\n \r\n
IdName
{role.id}{role.name}
\r\n \r\n
\r\n
\r\n
\r\n )\r\n }\r\n\r\n async getRoles() {\r\n const token = await authService.getAccessToken();\r\n const response = await fetch(`api/Admin/GetRolesAsync`, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n const data = await response.json();\r\n this.setState({ roles: data });\r\n } \r\n\r\n handleRowClick(roleId) {\r\n this.props.history.push({\r\n pathname: '/admin/roles/details',\r\n state: { roleId: roleId, existingRole: true }\r\n });\r\n }\r\n\r\n}","import React, { Component } from 'react';\r\nimport { Container, Row, Col, Input, Button, Alert } from 'reactstrap';\r\nimport authService from '../api-authorization/AuthorizeService';\r\n\r\nexport class CreateRole extends Component {\r\n static displayName = CreateRole.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n roleName: '',\r\n success: undefined\r\n };\r\n\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n \r\n \r\n

Create Role

\r\n \r\n
\r\n \r\n \r\n this.setState({ roleName: e.target.value })}\r\n name='roleName'\r\n id='roleName'\r\n placeholder='Role Name'\r\n />\r\n \r\n \r\n this.createRole()}\r\n >\r\n Create\r\n \r\n \r\n \r\n \r\n \r\n {this.state.success === true && (\r\n \r\n Role added successfully!\r\n \r\n )} \r\n {this.state.success === false && (\r\n \r\n Error adding role!\r\n \r\n )}\r\n \r\n \r\n
\r\n
\r\n )\r\n }\r\n\r\n async createRole() { \r\n debugger\r\n const token = await authService.getAccessToken();\r\n const response = await fetch(`api/Admin/CreateRoleAsync?roleName=${this.state.roleName}`, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n const data = await response.json();\r\n this.setState({ success: data });\r\n }\r\n\r\n}","import React, { Component } from 'react';\r\nimport { Container, Row, Card, CardBody } from 'reactstrap';\r\n\r\nexport class RowItem extends Component {\r\n static displayName = RowItem.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = { \r\n\r\n };\r\n\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n \r\n \r\n \r\n {this.props.children}\r\n \r\n \r\n \r\n \r\n )\r\n }\r\n}","import React, { Component } from 'react';\r\nimport { Container, Row, Col, Input, Table, Button, Collapse, Alert } from 'reactstrap';\r\nimport { Typeahead } from 'react-bootstrap-typeahead';\r\nimport { RowItem } from '../../_layout/RowItem';\r\nimport authService from '../api-authorization/AuthorizeService';\r\nimport AdminFunctions from './AdminFunctions';\r\n\r\nexport class RoleDetails extends Component {\r\n static displayName = RoleDetails.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n roleId: '',\r\n roleName:'',\r\n addPool: [],\r\n removePool: [],\r\n addUser: null,\r\n removeUser: null,\r\n showAddSection: false,\r\n showRemoveSection: false,\r\n success: undefined\r\n };\r\n\r\n }\r\n\r\n async componentDidMount() {\r\n //const isAdmin = await AdminFunctions.isAdminAsync();\r\n const isAdmin = false;\r\n\r\n if(!isAdmin) {\r\n this.props.history.push('/');\r\n }\r\n else {\r\n if(this.props.location.state !== undefined) {\r\n if(this.props.location.state.existingRole) {\r\n const roleId = this.props.location.state.roleId;\r\n this.setState({ roleId: roleId })\r\n this.getRoleDetails(roleId);\r\n } \r\n }\r\n else {\r\n this.props.history.push('/admin/roles/create');\r\n }\r\n } \r\n }\r\n\r\n render () {\r\n return (null);\r\n }\r\n \r\n render_old() {\r\n return (\r\n
\r\n \r\n \r\n \r\n

Role Details

\r\n \r\n \r\n
Role Id: {this.state.roleId}
\r\n \r\n \r\n this.setState({ showAddSection: !this.state.showAddSection })}\r\n disabled={!this.state.addPool.length > 0 ? true : false}\r\n style={{ marginRight: '20px' }}\r\n >\r\n {!this.state.showAddSection ? 'Add Users' : 'Hide'}\r\n \r\n \r\n this.setState({ showRemoveSection: !this.state.showRemoveSection })}\r\n disabled={!this.state.removePool.length > 0 ? true : false}\r\n >\r\n {!this.state.showRemoveSection ? 'Remove Users' : 'Hide'}\r\n \r\n \r\n
\r\n \r\n \r\n
Edit Role Name
\r\n \r\n \r\n this.setState({ roleName: e.target.value })}\r\n disabled={this.state.roleId === AdminFunctions.AdminRoleId ? true : false}\r\n />\r\n \r\n \r\n this.renameRole()}\r\n disabled={this.state.roleId === AdminFunctions.AdminRoleId ? true : false}\r\n >\r\n Save\r\n \r\n \r\n
\r\n \r\n \r\n \r\n this.setState({ showAddSection: !this.state.showAddSection })}\r\n style={{ float: 'right' }}\r\n />\r\n \r\n \r\n
Add Users to Role
\r\n \r\n \r\n this.setState({ addUser: selected })}\r\n selected={this.state.addUser}\r\n labelKey='name'\r\n options={this.state.addPool}\r\n placeholder='Search'\r\n />\r\n \r\n \r\n this.addUserToRole()}\r\n disabled={!this.state.addUser ? true : false }\r\n >\r\n Add\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n this.setState({ showRemoveSection: !this.state.showRemoveSection })}\r\n style={{ float: 'right' }}\r\n />\r\n \r\n \r\n
Remove Users from Role
\r\n \r\n \r\n this.setState({ removeUser: selected })}\r\n selected={this.state.removeUser}\r\n labelKey='name'\r\n options={this.state.removePool}\r\n placeholder='Search'\r\n />\r\n \r\n \r\n this.removeUserFromRole()}\r\n disabled={!this.state.removeUser ? true : false }\r\n >\r\n Remove\r\n \r\n \r\n
\r\n
\r\n {this.state.removePool.length > 0 && (\r\n \r\n \r\n
Users in Role
\r\n \r\n \r\n \r\n \r\n \r\n {/**/}\r\n \r\n \r\n \r\n \r\n {this.state.removePool.map((ra, i) => {\r\n return (\r\n \r\n {/**/}\r\n \r\n \r\n )\r\n })}\r\n \r\n
IdName
{ra.id}{ra.name}
\r\n \r\n
\r\n )}\r\n \r\n \r\n {this.state.success === true && (\r\n \r\n Success!\r\n \r\n )}\r\n {this.state.success === false && (\r\n \r\n Error!\r\n \r\n )}\r\n \r\n \r\n
\r\n
\r\n )\r\n }\r\n\r\n async getRoleDetails(roleId) {\r\n const token = await authService.getAccessToken();\r\n const response = await fetch(`api/Admin/GetRoleDetailsAsync?roleId=${roleId}`, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n const data = await response.json();\r\n this.setState({\r\n roleName: data.name,\r\n addPool: data.addPool,\r\n removePool: data.removePool\r\n });\r\n }\r\n\r\n async renameRole() {\r\n const token = await authService.getAccessToken();\r\n const response = await fetch(`api/Admin/RenameRoleAsync?roleId=${this.state.roleId}&roleName=${this.state.roleName}`, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n const data = await response.json();\r\n this.setState({ success: data });\r\n await this.getRoleDetails(this.state.roleId);\r\n }\r\n\r\n async addUserToRole() {\r\n const token = await authService.getAccessToken();\r\n const userId = this.state.addUser[0].id;\r\n const response = await fetch(`api/Admin/AddUserToRoleAsync?userId=${userId}&roleId=${this.state.roleId}`, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n const data = await response.json();\r\n this.setState({ addUser: null, success: data });\r\n await this.getRoleDetails(this.state.roleId);\r\n }\r\n\r\n async removeUserFromRole() {\r\n const token = await authService.getAccessToken();\r\n const userId = this.state.removeUser[0].id;\r\n const response = await fetch(`api/Admin/RemoveUserFromRoleAsync?userId=${userId}&roleId=${this.state.roleId}`, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n const data = await response.json();\r\n this.setState({ removeUser: null, success: data });\r\n await this.getRoleDetails(this.state.roleId);\r\n }\r\n}","import React, { Component } from 'react';\r\nimport authService from './api-authorization/AuthorizeService';\r\nimport AdminFunctions from './admin/AdminFunctions';\r\nimport { Container, Row, Col, Button } from 'reactstrap';\r\n\r\nexport class TemplateManagement extends Component {\r\n static displayName = TemplateManagement.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = { \r\n isAdmin: false,\r\n height: 0,\r\n width: 0, \r\n };\r\n\r\n window.addEventListener('resize', this.setWindowDimensions);\r\n }\r\n\r\n async componentDidMount() {\r\n this.setWindowDimensions();\r\n const isAdmin = await AdminFunctions.isAdminAsync();\r\n this.setState({ isAdmin: isAdmin }); \r\n \r\n }\r\n\r\n setWindowDimensions = () => {\r\n this.setState({\r\n height: window.innerHeight,\r\n width: window.innerWidth\r\n });\r\n };\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n \r\n \r\n

Template Management

\r\n \r\n
\r\n \r\n \r\n this.createAssessmentReport()}\r\n >\r\n Create Assessment Report\r\n \r\n \r\n \r\n this.importAssessmentResults()}\r\n >\r\n Import Assessment Results\r\n \r\n \r\n \r\n
\r\n
\r\n )\r\n }\r\n \r\n async importAssessmentResults() {\r\n const token = await authService.getAccessToken();\r\n const response = await fetch(`api/Assessments/ImportAssessmentResults?recordId=${21018}`, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n const data = await response.json();\r\n }\r\n\r\n async createAssessmentReport() {\r\n debugger\r\n const token = await authService.getAccessToken();\r\n const response = await fetch(`api/Assessments/CreateAssessmentReportAsync`, {\r\n headers: !token ? {} : { 'Authorization': `Bearer ${token}` }\r\n });\r\n const data = await response.json();\r\n this.downloadFile(data.base64, data.filename);\r\n }\r\n\r\n downloadFile(file, name) {\r\n const blob = this.base64ToBlob(file);\r\n const uriContent = URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n link.setAttribute('href', uriContent);\r\n link.setAttribute('download', name);\r\n const event = new MouseEvent('click');\r\n link.dispatchEvent(event);\r\n }\r\n\r\n base64ToBlob = (file) => {\r\n\t\tconst binaryString = window.atob(file);\r\n const len = binaryString.length;\r\n const bytes = new Uint8Array(len);\r\n for (let i = 0; i < len; ++i) {\r\n bytes[i] = binaryString.charCodeAt(i);\r\n }\r\n\t\tconst blob = new Blob([bytes], { type: 'application/pdf' });\r\n\t\treturn blob;\r\n\t}\r\n\r\n}","import React, { Component } from 'react';\r\nimport { Route } from 'react-router';\r\nimport { Layout } from './components/Layout';\r\nimport { Home } from './components/Home';\r\nimport { UserSearch } from './components/UserSearch';\r\nimport { UserManagement } from './components/UserManagement';\r\nimport { CandidateSearch } from './components/CandidateSearch';\r\nimport { AdminReportTABB } from './components/AdminReportTABB';\r\nimport { TABBTools } from './components/TABBTools';\r\nimport { ClientLogos } from './components/ClientLogos';\r\nimport { FAQ } from './components/FAQ';\r\nimport { TOU } from './components/TOU';\r\nimport AuthorizeRoute from './components/api-authorization/AuthorizeRoute';\r\nimport ApiAuthorizationRoutes from './components/api-authorization/ApiAuthorizationRoutes';\r\nimport { ApplicationPaths } from './components/api-authorization/ApiAuthorizationConstants';\r\nimport { Counter } from './components/Counter';\r\nimport { FetchData } from './components/FetchData';\r\n\r\nimport './custom.css'\r\nimport { Roles } from './components/admin/Roles';\r\nimport { CreateRole } from './components/admin/CreateRole';\r\nimport { RoleDetails } from './components/admin/RoleDetails';\r\nimport { TemplateManagement } from './components/TemplateManagement';\r\nimport CacheBuster from 'react-cache-buster';\r\nimport packageInfo from '../package.json';\r\n\r\nconst isProduction = process.env.NODE_ENV === 'production';\r\n\r\nexport default class App extends Component {\r\n static displayName = App.name;\r\n\r\n render () {\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 \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\n","import 'bootstrap/dist/css/bootstrap.css';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport App from './App';\r\n//import registerServiceWorker from './registerServiceWorker';\r\n\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\r\nconst rootElement = document.getElementById('root');\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n rootElement);\r\n\r\n// Uncomment the line above that imports the registerServiceWorker function\r\n// and the line below to register the generated service worker.\r\n// By default create-react-app includes a service worker to improve the\r\n// performance of the application by caching static assets. This service\r\n// worker can interfere with the Identity UI, so it is\r\n// disabled by default when Identity is being used.\r\n//\r\n//registerServiceWorker();\r\n\r\n"],"sourceRoot":""}