{"version":3,"sources":["img/angle-arrow-down.png","configuration/ServiceLocator.ts","services/JwtStorage/BaseJwtStorage.ts","services/JwtStorage/HardCodedJwtStorage.ts","services/JwtStorage/LocalStorageJwtSessionStorage.ts","services/JwtStorage/contracts.ts","services/UserSessionStateManager/UserSession.ts","services/middleware/UserSessionMiddleware/UserSessionMiddleware.ts","services/UserSessionApiClient/MockUserSessionApiClient.ts","services/UserSessionApiClient/UserSessionApiClient.ts","services/UserSessionStateManager/UserSessionStateManager.ts","configuration/UserSessionSettingsManager.ts","services/ContentStateManager/contracts.ts","utils/ErrorHelper.ts","services/ContentApiClient/ContentApiClient.ts","services/ContentApiClient/MockContentApiClient.ts","services/ContentStateManager/ContentStateManager.ts","services/SectionStateManager/SectionStateManager.ts","services/SectionApiClient/MockSectionApiClient.ts","services/SectionApiClient/SectionQuery.ts","services/SectionApiClient/SectionApiClient.ts","services/SearchResultsApiClient/MockSearchResultsApiClient.ts","utils/ValidationResult/ValidationResult.ts","services/SearchResultsStateManager/SearchResultsStateManager.ts","services/SearchResultsApiClient/SearchResultsApiClient.ts","services/SearchResultsApiClient/SearchResultQuery.ts","services/ApiClient/ApiClient.ts","services/ProductsApiClient/MockProductsApiClient.ts","services/ProductContentStateManager/ProductContentStateManager.ts","services/ProductStateManager/ProductStateManager.ts","services/ProductsApiClient/ProductQuery.ts","services/ProductsApiClient/ProductsApiClient.ts","services/LandingPageApiClient/MockLandingPageApiClient.ts","services/LandingPageStateManager/LandingPageStateManager.ts","services/LandingPageApiClient/LandingPageApiClient.ts","configuration/SettingsManager.ts","views/UserSession/UserSession.tsx","utils/UserEventLogger.ts","views/SearchResults/SearchResults.tsx","views/commons/Accordion/Accordion.tsx","views/Product/ProductContent/ProductContent.tsx","views/Section/Section.tsx","views/Content/Content.tsx","views/Product/Product.tsx","views/LandingPage/LandingPage.tsx","App.tsx","serviceWorker.ts","index.tsx"],"names":["module","exports","container","Container","decorators","getDecorators","injectProperty","serviceIdentifier","original","lazyInject","proto","key","descriptor","call","this","initializer","BaseJwtStorage","injectable","HardCodedJwtStorage","saveJwt","LocalJwtStorage","sessionJwtStorageKey","sessionJwt","localStorage","setItem","SessionTokenStaleError","Error","SessionTokenTokenNbfInFutureError","SessionTokenExpiredError","UserSession","iat","nbf","exp","mid","sub","isNbfAfterNow","Date","isMidBeforeNow","isExpBeforeNow","secondsUntilExpired","Math","round","getTime","secondsUntilStale","String","secondsUntilWarning","SettingsManager","REACT_APP_SECONDS_BEFORE_EXPIRATION_WARNING","value","now","jwt","getUserSessionNull","decoded","jwt_decode","fieldfn","fieldName","JSON","stringify","parseInt","UserSessionMiddleware","isTimeoutPopup","ssoToken","getItem","REACT_APP_SSO_TOKEN_NAME","getUserSessionFromJwt","console","info","userSessionApiClient","refreshSessionJwt","then","jwtStorage","accessToken","REACT_APP_Refresh_TOKEN_NAME","refreshToken","Promise","resolve","catch","error","warn","MockUserSessionApiClient","tokenResponse","setTimeout","axios","require","default","UserSessionApiClient","get","REACT_APP_USER_SESSION_API_BASE_URL","headers","Authorization","params","response","data","UserSessionStateManager","userSession","userSessionMiddleware","loadSessionJwt","setUserSession","getUserSessionNearExpiration","getUserSessionExpired","observable","action","BaseSettingsManager","getSettingAsString","settingName","description","defaultValue","windowVariable","window","ENV","envVariable","process","val","undefined","name","getSettingAsBoolean","getFunction","setting","includes","toLowerCase","getSettingAsNumber","isNaN","REACT_APP_MAIN_CMS_BASE_URL","REACT_APP_MAIN_API_BASE_URL","REACT_APP_IS_MAIN_API_MOCKED","REACT_APP_IS_USER_SESSION_API_MOCKED","REACT_APP_IS_DEBUG_PANEL_VISIBLE","REACT_APP_IS_USER_SESSION_STORAGE_MOCKED","REACT_APP_HARD_CODED_SESSION_JWT","REACT_APP_HARD_CODED_SSO_JWT","REACT_APP_MYABILITY_ROOT_URL","REACT_APP_VERSION","REACT_APP_MAIN_API_BASE_URL_REQUEST_TIMEOUT","REACT_APP_USER_VOTE_API_URL","configureContainer","bind","to","inSingletonScope","UserVote","ErrorHelper","status","alert","location","href","ContentApiClient","path","url","reject","x","query","getArticleQuery","aBILITYPage","length","page","article","contentItemId","displayText","publishedUtc","markup","wysiwygContent","productCode","productContent","productName","sectionId","sectionTags","termContentItems","sectionName","handleApiError","userId","articleId","rating","item","articleRating","countLikes","totalLikes","countDislikes","totalDislikes","vote","like","post","delete","put","MockContentApiClient","none","dislike","ContentStateManager","getArticle","getProductName","split","setArticle","log","newVote","currentVote","setArticleRating","deleteVote","changeVote","getRating","token","REACT_APP_ProductCategories_TOKEN_NAME","JwtDecode","productToken","products","i","AbilityProductCategoryClaimV2","productCategories","j","HomeIndexProductsViewModel","productItem","Code","Name","SectionStateManager","sectionArticleList","getBlankItem","total","items","sectionApiClient","getSectionArticles","setSectionArticleList","MockSectionApiClient","sectionArticleId","sectionArticleName","sectionArticlePath","SectionArticleQuery","SectionApiClient","formattedResults","map","index","findIndex","sectionArticleResult","IsPdf","push","pdf","pdfDocument","relativePdfPath","articleResults","sort","a","b","MockSearchResultsApiClient","searchResutsList","sectionList","articleName","articlePath","articleDescription","articlePublishDate","param","ValidationResult","results","message","Object","keys","SearchResultsStateManager","searchTerm","paginationInfo","pageIndex","skip","utcDate","date","toLocaleString","month","getDate","getFullYear","result","isEmpty","setMessage","first","searchType","searchResultApiClient","getSearchResults","setSearchResults","computed","SearchResultsApiClient","perPage","prodList","prodNamesList","apiClient","getCMSToken","variables","productList","filter","myAbilityHelpSearchQuery","searchResult","previewText","moment","format","getSectionForEachArticle","sections","section","sectionIndex","ApiClient","baseUrl","timeout","instance","create","baseURL","Accept","instanceQuery","isObject","cmsToken","MockProductsApiClient","productInfo","productDescription","articleList","JwtToken","$this","ProductContentStateManager","productsApiClient","getProductInfoByProductCode","setProductInfo","ProductStateManager","selectedProduct","selectedType","selectedSection","selectedArticle","selectedProductName","getProductsfromJwt","setProducts","type","contenItemId","productContentQuery","productSectionListQuery","productsformJWT","ProductsApiClient","productResult","getSectionsforProduct","Array","forEach","product","cmsProducts","getSectionsfromgraphql","cmsEndResult","cmspr","cmsProduct","combineArray","v","t","cmsEndResultNoSectionsFound","self","indexOf","array1","array2","productSections","isPdf","productArticleSections","getArticlesOfSectionsfromgraphql","cmsProductsInfo","getArticleSectionsfromgraphql","singlecmsProductsInfo","newSectionInfo","newSectionInfoOrderbyArticle","MockLandingPageApiClient","productCategoryList","productCategoryId","productCategoryName","sequence","ProductInfos","code","LandingPageStateManager","landingPageApiClient","getProductCategoryList","tokenObject","userName","getFormattedResult","ProductCategoryId","Caption","Sequence","getProductList","setProductCategoryList","LandingPageApiClient","props","state","isSessionExpirationModalVisible","isSessionExpiredModalVisible","sessionExpirationCountdown","userSessionStore","_this","setInterval","totalSecondsUntilExpiration","totalSecondsUntilWarningPopup","minutes","floor","seconds","padLeft","num","max","join","setState","Logout","removeItem","event","preventDefault","Modal","isOpen","ModalHeader","ModalBody","className","ModalFooter","Button","id","onClick","e","onTokenRefresh","React","Component","UserSessionConnected","store","UserEventLogger","eventType","eventText","text","currentTarget","textContent","trim","rootUrl","endurl","formAction","$","ajax","dataType","async","SearchResults","observer","currentPage","noResultTerm","endofsearchResults","resultsLoaded","handleScroll","onSearchEnter","addEventListener","passive","searchurl","search","queryString","parse","searchResultsStateManager","setSearchTerm","prevSearchTerm","pageYOffset","test","replace","history","encodeURIComponent","handleUserClickEvent","stopPropagation","target","handleArticleLinkClick","handleProductLinkClick","handleSectionLinkClick","resultTemplate","endTemplate","getSearchResultTemplate","Breadcrumb","BreadcrumbItem","handleBreadCrumbClick","active","Input","placeholder","onKeyDown","onChange","icon","faSearch","SearchResultsConnected","exact","render","ReactGA","send","hitType","Accordion","myRef","myProductRef","height","rotate","createRef","title","defaultLoading","accordion","jQuery","each","accordionActive","removeClass","closest","find","css","maxHeight","addClass","hasClass","current","scrollHeight","loadProductInformation","defaultProduct","toggleAccordion","ref","src","AngleArrowDown","style","content","ProductContent","prop","productContentStateManager","prevProductCode","loadContentInformation","loadSectionInformation","dangerouslySetInnerHTML","__html","sectionindex","articleindex","onSectionChange","Section","sectionArticles","sectionStateManager","prevSectionName","model","actualSectionName","Content","stateManager","contentDidUpdate","contentStateManager","pathname","slice","match","getUserId","underConst","likeArticle","dislikeArticle","imges","attr","th","color","tr","row","thAlign","getArticleRating","handleArticleYesOrNoIconClick","voteOnArticle","likeClicked","productBreadCrumb","sectionBreadCrumb","ReactHtmlParser","likeButton","dislikeButton","ratingText","ContentConnected","Product","mySearcInputRef","defaultProductName","selectedSectionName","node","sectionid","productStateManager","setSelectedType","onSearchButtonClick","setSelectedProduct","ReactDOM","findDOMNode","reload","setSelectedArticle","setSelectedSection","validateSearchTerm","isFieldValid","template","autoComplete","onKeyUp","loadProductInfo","ProductConnected","LandingPage","landingPageStateManager","Row","Col","filterIndex","Card","Header","Body","productIndex","Text","faCaretRight","LandingPageConnected","App","basename","Boolean","hostname","createBrowserHistory","initialize","getUrlVars","element","hash","$script","document","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.b0c7870d.chunk.js","sourcesContent":["module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAA2klEQVQoU53SMUpDQRDG8V+w0UZJYadWNmKRHMAmtTewTGPEIhFJICcQFDFNiDaWuYGtNjmAFmJjFcsUoo2VKANv4RGeAd9WO8z8v5n9dipKnEoJRkAbWMcjfhaIRG0ds7jcYwU9TP4Ao24P5/iKoI0LvOAAzwXddjHGDroBLaMTAaZo5kZNI91iKxMfJCOqOMrAN5zgAQ1cYTMDRnjPu7eGQ5zhCXfYRw193OAjRp+3fAnHmXo4GfnoOsR3emvRPwV4ihaucZkHijolsVVs4xWf826W3oh/b9IviyImX6N0guEAAAAASUVORK5CYII=\"","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport { Container, interfaces } from 'inversify'\n//reflect-metadata should be imported before any interface or other imports\n//also it should be imported only once so that a singleton is created.\nimport 'reflect-metadata'\nimport getDecorators from 'inversify-inject-decorators'\n\n// the container is created once, witin this module and used throughout the application\nexport const container = new Container()\n\n// once we create a container we add capability to support lazy injection via decorators\n// in our version of ECMASCRIPT decorators are not fully supported and the following code ensures\n// lazy inject decorators will work as expected.\n// https://github.com/inversify/InversifyJS/issues/1026\n// more information: https://itnext.io/a-minimal-guide-to-ecmascript-decorators-55b70338215e\nconst decorators = getDecorators(container, false)\ninterface IBabelPropertyDescriptor extends PropertyDescriptor {\n\tinitializer(): any\n}\n\n/**\n * the @injectProperty decorator allows us to lazily inject dependencies into react components at the time of access\n * at the time of this writing react does not support the traditional constructor-level injection\n * @export\n * @param {interfaces.ServiceIdentifier} serviceIdentifier\n * @returns\n */\nexport const injectProperty = function(serviceIdentifier: interfaces.ServiceIdentifier) {\n\tconst original = decorators.lazyInject(serviceIdentifier)\n\t// the 'descriptor' parameter is actually always defined for class fields for Babel, but is considered undefined for TSC\n\t// so we flag this as volatile with ?/! combination to avoid \"TS1240: Unable to resolve signature of property decorator when called as an expression\"\n\treturn function(this: any, proto: any, key: string, descriptor?: IBabelPropertyDescriptor): void {\n\t\t// make it work as usual\n\t\toriginal.call(this, proto, key)\n\t\t// return link to proto, so own value wont be 'undefined' after component's creation\n\t\tdescriptor!.initializer = function() {\n\t\t\treturn proto[key]\n\t\t}\n\t}\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport { injectable } from 'inversify'\nimport { IJwtStorage } from './contracts'\n\n/**\n * base class for session storage (JWT-driven)\n *\n * @export\n * @abstract\n * @class BaseJwtStorage\n * @implements {IJwtStorage}\n */\n@injectable()\nexport abstract class BaseJwtStorage implements IJwtStorage {\n\tabstract saveJwt(sessionJwtKey: string, sessionJwt: string): void\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport { injectable } from 'inversify'\nimport { SettingsManager } from '../../configuration/SettingsManager'\nimport { BaseJwtStorage } from './BaseJwtStorage'\n\n/**\n * implementation of jwt storage which uses a hardcoded configuration-defined jwt value\n *\n * @export\n * @class HardCodedJwtStorage\n * @extends {BaseJwtStorage}\n */\n@injectable()\nexport class HardCodedJwtStorage extends BaseJwtStorage {\n\tpublic readonly saveJwt = (): void => {}\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport { injectable } from 'inversify'\nimport { BaseJwtStorage } from './BaseJwtStorage'\n\n/**\n * implementation of jwt storage which uses localstorage\n *\n * @export\n * @class LocalJwtStorage\n * @extends {BaseJwtStorage}\n */\n@injectable()\nexport class LocalJwtStorage extends BaseJwtStorage {\n\tpublic readonly saveJwt = (sessionJwtStorageKey: string, sessionJwt: string): void => localStorage.setItem(sessionJwtStorageKey, sessionJwt)\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport 'reflect-metadata'\n\nexport class SessionTokenStaleError extends Error {}\nexport class SessionTokenTokenNbfInFutureError extends Error {}\nexport class SessionTokenExpiredError extends Error {}\nexport class SessionTokenMissingError extends Error {}\n\n/**\n * represents local storage for user sessions\n *\n * @export\n * @interface IJwtStorage\n */\nexport interface IJwtStorage {\n\tsaveJwt(sessionStorageKey: string, sessionJwt: string): void\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport jwt_decode from 'jwt-decode'\nimport { SettingsManager } from '../../configuration/SettingsManager'\nimport { SessionTokenTokenNbfInFutureError, SessionTokenExpiredError, SessionTokenStaleError } from '../JwtStorage/contracts'\n\n/**\n * represents the user's current session, valid or invalid\n *\n * @export\n * @class UserSession\n */\nexport class UserSession {\n\t/**\n\t * jwt issued at date\n\t *\n\t * @type {Date}\n\t * @memberof UserSession\n\t */\n\treadonly iat: Date\n\t/**\n\t * jwt not before date\n\t *\n\t * @type {Date}\n\t * @memberof UserSession\n\t */\n\treadonly nbf: Date\n\t/**\n\t * jwt expirtation date\n\t *\n\t * @type {Date}\n\t * @memberof UserSession\n\t */\n\treadonly exp: Date\n\t/**\n\t * we consider \"mid\" to be the halfway point between nbf and exp. when the mid date is in the past the session is considered \"stale\"\n\t * stale sessions are refreshed with the API server along with subsequent calls\n\t *\n\t * @type {Date}\n\t * @memberof UserSession\n\t */\n\treadonly mid: Date\n\t/**\n\t * jwt subject\n\t *\n\t * @type {string}\n\t * @memberof UserSession\n\t */\n\treadonly sub: string\n\n\tconstructor(iat: Date, nbf: Date, exp: Date, mid: Date, sub: string) {\n\t\tthis.iat = iat\n\t\tthis.exp = exp\n\t\tthis.nbf = nbf\n\t\tthis.mid = mid\n\t\tthis.sub = sub\n\t}\n\n\t/**\n\t * create a \"null\" session AKA null-object pattern\n\t *\n\t * @static\n\t * @returns {UserSession}\n\t * @memberof UserSession\n\t */\n\tstatic getUserSessionNull(): UserSession {\n\t\treturn new UserSession(new Date(0), new Date(0), new Date(0), new Date(0), '')\n\t}\n\n\t/**\n\t * returns true when this is \"null\"\n\t *\n\t * @readonly\n\t * @type {boolean}\n\t * @memberof UserSession\n\t */\n\tget isNull(): boolean {\n\t\treturn this.iat.getTime() === new Date(0).getTime() && this.exp.getTime() === new Date(0).getTime() && this.nbf.getTime() === new Date(0).getTime() && this.mid.getTime() === new Date(0).getTime() && this.sub === ''\n\t}\n\n\t/**\n\t * generate a UserSession which is close to expiration\n\t *\n\t * @static\n\t * @returns {UserSession}\n\t * @memberof UserSession\n\t */\n\tstatic getUserSessionNearExpiration(): UserSession {\n\t\tconst secondsUntilWarning = SettingsManager.REACT_APP_SECONDS_BEFORE_EXPIRATION_WARNING().value\n\t\treturn new UserSession(new Date(Date.now() - secondsUntilWarning * 1000), new Date(Date.now() - secondsUntilWarning * 1000), new Date(Date.now() + secondsUntilWarning * 1000), new Date(Date.now() + (secondsUntilWarning / 2) * 1000), 'Something')\n\t}\n\n\t/**\n\t * generate a UserSession which is expired\n\t *\n\t * @static\n\t * @returns {UserSession}\n\t * @memberof UserSession\n\t */\n\tstatic getUserSessionExpired(): UserSession {\n\t\treturn new UserSession(new Date(Date.now()), new Date(Date.now()), new Date(Date.now()), new Date(Date.now()), 'Something')\n\t}\n\n\t/**\n\t * generate a UserSession from a jwt.\n\t * if the supplied jwt is null then a \"null object\" UserSession is returned\n\t * if the jwt is invalid format and cannot be decoded an exception will be thrown\n\t * note that no validation of the actual decoded values is performed within this method\n\t *\n\t * @static\n\t * @param {(string | null)} jwt\n\t * @returns {UserSession}\n\t * @memberof UserSession\n\t */\n\tstatic getUserSessionFromJwt(jwt: string | null): UserSession {\n\t\tif (jwt == null) {\n\t\t\treturn UserSession.getUserSessionNull()\n\t\t}\n\t\tconst decoded: any = jwt_decode(jwt)\n\t\tconst fieldfn = (fieldName: string): string => {\n\t\t\tconst value = String(decoded[fieldName])\n\t\t\tif (value == null) {\n\t\t\t\tthrow new Error(`jwt missing ${fieldName}: ${JSON.stringify(decoded)}`)\n\t\t\t}\n\t\t\treturn value\n\t\t}\n\t\treturn new UserSession(new Date(parseInt(fieldfn('iat')) * 1000), new Date(parseInt(fieldfn('nbf')) * 1000), new Date(parseInt(fieldfn('exp')) * 1000), new Date((parseInt(fieldfn('nbf')) * 1000 + parseInt(fieldfn('exp')) * 1000) / 2), fieldfn('sub'))\n\t}\n\n\treadonly isNbfAfterNow = (): boolean => new Date() < this.nbf\n\treadonly isMidBeforeNow = (): boolean => new Date() > this.mid\n\treadonly isExpBeforeNow = (): boolean => new Date() > this.exp\n\treadonly secondsUntilExpired = () => Math.round((this.exp.getTime() - new Date().getTime()) / 1000)\n\treadonly secondsUntilStale = () => Math.round((this.mid.getTime() - new Date().getTime()) / 1000)\n\n\t/**\n\t * basic client-side sanity checks on a user session jwt to * ensure the jwt is usable for the front-end\n\t *\n\t * @memberof UserSession\n\t */\n\tpublic validate(): void {\n\t\tif (this.isNbfAfterNow()) {\n\t\t\tthrow new SessionTokenTokenNbfInFutureError(`nbf was in future: ${String(this.nbf)} date now is ${String(new Date())} ${this.nbf.getTime()} > ${new Date().getTime()}`)\n\t\t} else if (this.isExpBeforeNow()) {\n\t\t\tthrow new SessionTokenExpiredError(`exp was in past: ${String(this.exp)}`)\n\t\t} else if (this.isMidBeforeNow()) {\n\t\t\tthrow new SessionTokenStaleError(`token considered stale. midpoint was in past: ${String(this.mid)}`)\n\t\t}\n\t}\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport { injectable } from 'inversify'\nimport { injectProperty } from '../../../configuration/ServiceLocator'\nimport { IJwtStorage } from '../../JwtStorage/contracts'\nimport { IUserSessionApiClient } from '../../UserSessionApiClient/contracts'\nimport { UserSession } from '../../UserSessionStateManager/UserSession'\nimport { IUserSessionMiddleware } from './contracts'\nimport { SettingsManager } from '../../../configuration/SettingsManager'\n\n@injectable()\nexport class UserSessionMiddleware implements IUserSessionMiddleware {\n\t@injectProperty('IJwtStorage')\n\tjwtStorage!: IJwtStorage\n\n\t@injectProperty('IUserSessionApiClient')\n\tuserSessionApiClient!: IUserSessionApiClient\n\n\tloadSessionJwt(isTimeoutPopup: boolean): Promise {\n\t\tlet isSessionExpired = false\n\t\tconst ssoToken = localStorage.getItem(SettingsManager.REACT_APP_SSO_TOKEN_NAME)\n\n\t\tif (ssoToken !== null) {\n\t\t\tisSessionExpired = UserSession.getUserSessionFromJwt(ssoToken).isExpBeforeNow()\n\t\t\tif (isSessionExpired) {\n\t\t\t\tconsole.info('No session active session token found. Attempting to load SSO token to exchange for new session.')\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.info('No session active session token found. Attempting to load SSO token to exchange for new session.')\n\t\t\t//window.location.href = \"/Auth/\";\n\t\t}\n\n\t\t// at this point the session token was found in storage and not expired.\n\t\t// if it is more than half-expired then perform refresh and store/return the result\n\t\t// otherwise just return the token\n\t\tif (isTimeoutPopup === true) {\n\t\t\treturn this.userSessionApiClient\n\t\t\t\t.refreshSessionJwt(ssoToken)\n\t\t\t\t.then(sessionJwt => {\n\t\t\t\t\tthis.jwtStorage.saveJwt(SettingsManager.REACT_APP_SSO_TOKEN_NAME, sessionJwt.accessToken)\n\t\t\t\t\tthis.jwtStorage.saveJwt(SettingsManager.REACT_APP_Refresh_TOKEN_NAME, sessionJwt.refreshToken)\n\n\t\t\t\t\treturn new Promise(resolve => resolve(sessionJwt.accessToken))\n\t\t\t\t})\n\t\t\t\t.catch(error => {\n\t\t\t\t\treturn new Promise(resolve => resolve(''))\n\t\t\t\t})\n\t\t}\n\t\telse {\n\t\t\tif (UserSession.getUserSessionFromJwt(ssoToken).isMidBeforeNow()) {\n\t\t\t\treturn this.userSessionApiClient\n\t\t\t\t\t.refreshSessionJwt(ssoToken)\n\t\t\t\t\t.then(sessionJwt => {\n\t\t\t\t\t\tthis.jwtStorage.saveJwt(SettingsManager.REACT_APP_SSO_TOKEN_NAME, sessionJwt.accessToken)\n\t\t\t\t\t\tthis.jwtStorage.saveJwt(SettingsManager.REACT_APP_Refresh_TOKEN_NAME, sessionJwt.refreshToken)\n\n\t\t\t\t\t\treturn new Promise(resolve => resolve(sessionJwt.accessToken))\n\t\t\t\t\t})\n\t\t\t\t\t.catch(error => {\n\t\t\t\t\t\treturn new Promise(resolve => resolve(''))\n\t\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\tif (UserSession.getUserSessionFromJwt(ssoToken).isNbfAfterNow()) {\n\t\t\t// session token found but invalid because the NBF is in the future. This MAY happen due to clock skew with client machines!\n\t\t\t// if the NBF is before now from the perspective of the client then we issue a warning on the console and continue\n\t\t\tconsole.warn(`session token NBF is ${UserSession.getUserSessionFromJwt(ssoToken).nbf} but the current time is ${new Date()} which means NBF is in the future.`)\n\n\t\t\treturn new Promise(resolve => resolve(ssoToken == null ? '' : ssoToken))\n\t\t}\n\t\treturn new Promise(resolve => resolve(ssoToken == null ? '' : ssoToken))\n\t}\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport { injectable } from 'inversify'\nimport { SettingsManager } from '../../configuration/SettingsManager'\nimport { IUserSessionApiClient } from './contracts'\nimport { ITokenResponse } from '../UserSessionStateManager/contracts'\n\n/**\n * Returns the HardCodedSessionJwt with any call\n *\n * @export\n * @class MockUserSessionApiClient\n * @implements {IUserSessionApiClient}\n */\n@injectable()\nexport class MockUserSessionApiClient implements IUserSessionApiClient {\n\ttokenResponse: ITokenResponse\n\tconstructor() {\n\t\tthis.tokenResponse = {\n\t\t\taccessToken: '',\n\t\t\trefreshToken: '',\n\t\t} as ITokenResponse\n\t}\n\trefreshSessionJwt = (sessionJwt: string | null): Promise =>\n\t\tnew Promise(resolve => {\n\t\t\tsetTimeout(() => {\n\t\t\t\tresolve(this.tokenResponse)\n\t\t\t}, 100)\n\t\t})\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport { IUserSessionApiClient } from './contracts'\nimport { SettingsManager } from '../../configuration/SettingsManager'\nimport { injectable } from 'inversify'\nimport { ITokenResponse } from '../UserSessionStateManager/contracts'\n\nconst axios = require('axios').default\n\n@injectable()\nexport class UserSessionApiClient implements IUserSessionApiClient {\n\trefreshSessionJwt(sessionJwt: string | null): Promise {\n\t\tconst refreshToken = localStorage.getItem(SettingsManager.REACT_APP_Refresh_TOKEN_NAME)\n\t\treturn axios\n\t\t\t.get(`${SettingsManager.REACT_APP_USER_SESSION_API_BASE_URL().value}/auth/refresh`, {\n\t\t\t\theaders: {\n\t\t\t\t\tAuthorization: 'Bearer ' + sessionJwt,\n\t\t\t\t},\n\t\t\t\tparams: {\n\t\t\t\t\trefreshToken: refreshToken,\n\t\t\t\t},\n\t\t\t})\n\t\t\t.then((response: { data: any }) => {\n\t\t\t\treturn response.data\n\t\t\t})\n\t\t\t.catch((error: any) => {\n\t\t\t\tconsole.error(`Request to refresh session failed. More information: ${JSON.stringify(error)}`)\n\t\t\t\t//throw new Error(`Error returned from attempt to authenticate: ${error.message}`)\n\t\t\t\tthrow error\n\t\t\t})\n\t}\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport { observable, action } from 'mobx'\nimport { injectable } from 'inversify'\nimport { UserSession } from './UserSession'\nimport { injectProperty } from '../../configuration/ServiceLocator'\nimport { IUserSessionStateManager } from './contracts'\nimport { IUserSessionMiddleware } from '../middleware/UserSessionMiddleware/contracts'\n\n@injectable()\nexport class UserSessionStateManager implements IUserSessionStateManager {\n\t@observable\n\tuserSession: UserSession\n\n\t@injectProperty('IUserSessionMiddleware')\n\tuserSessionMiddleware!: IUserSessionMiddleware\n\n\tconstructor () {\n\t\tthis.userSession = UserSession.getUserSessionNull()\n\t}\n\n\t@action loadSessionJwt(isTimeoutPopup: boolean): Promise {\n\t\treturn this.userSessionMiddleware\n\t\t\t.loadSessionJwt(isTimeoutPopup)\n\t\t\t.then(sessionJwt => {\n\t\t\t\tconst userSession = UserSession.getUserSessionFromJwt(sessionJwt)\n\t\t\t\tthis.setUserSession(userSession)\n\t\t\t})\n\t\t\t.catch(error => {\n\t\t\t\tconsole.error(`error encountered in UserSessionMiddleware: ${JSON.stringify(error)}`)\n\t\t\t\tthis.setUserSession(UserSession.getUserSessionNull())\n\t\t\t})\n\t}\n\n\t@action setUserSession(userSession: UserSession): void {\n\t\tthis.userSession = userSession\n\t}\n\n\t@action simulateTokenNearExpiration() {\n\t\tthis.setUserSession(UserSession.getUserSessionNearExpiration())\n\t}\n\n\t@action simulateTokenExpired() {\n\t\tthis.setUserSession(UserSession.getUserSessionExpired())\n\t}\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport { container } from '../configuration/ServiceLocator'\nimport { IJwtStorage } from '../services/JwtStorage/contracts'\nimport { HardCodedJwtStorage } from '../services/JwtStorage/HardCodedJwtStorage'\nimport { LocalJwtStorage } from '../services/JwtStorage/LocalStorageJwtSessionStorage'\nimport { IUserSessionMiddleware } from '../services/middleware/UserSessionMiddleware/contracts'\nimport { UserSessionMiddleware } from '../services/middleware/UserSessionMiddleware/UserSessionMiddleware'\nimport { IUserSessionApiClient } from '../services/UserSessionApiClient/contracts'\nimport { MockUserSessionApiClient } from '../services/UserSessionApiClient/MockUserSessionApiClient'\nimport { UserSessionApiClient } from '../services/UserSessionApiClient/UserSessionApiClient'\nimport { IUserSessionStateManager } from '../services/UserSessionStateManager/contracts'\nimport { UserSessionStateManager } from '../services/UserSessionStateManager/UserSessionStateManager'\n\n/**\n * This module centralizes all configurable application settings into a single public object with documentation\n * Settings are loaded on demand through strongly-typed properties\n * Settings can be configured at build-time via use of .env files or at startup-time via appConfig.js\n */\n\n/**\n * Represents a single entry within SettingsManager\n *\n * @export\n * @interface ISettingsManagerSetting\n */\nexport interface ISettingsManagerSetting {\n\tname: string\n\tdefaultValue?: T\n\tvalue: T\n\tdescription: string\n}\n\n/**\n * the prototype for the singleton SettingsManager instance\n *\n * @class SettingsManagerPrototype\n */\nexport class BaseSettingsManager {\n\t/**\n\t * Load a setting in a string format.\n\t *\n\t * @param {string} settingName expected to be PascalCase format\n\t * @param {string} description description for the setting (for display in debug panel)\n\t * @param {string} [defaultValue] optional default value if setting not found. when not supplied a setting must be explicitly defined\n\t * @returns {ISettingsManagerSetting}\n\t * @memberof SettingsManager\n\t */\n\tstatic getSettingAsString = (settingName: string, description: string, defaultValue?: string): ISettingsManagerSetting => {\n\t\tconst windowVariable = ((window as any).ENV || {})[settingName]\n\t\tconst envVariable = process.env[settingName]\n\t\t// top priority: global (window) variables set in public/appConfig.js loaded dynamically\n\t\t// second priority: env vars set at time of build\n\t\t// third priority: default values (if available)\n\t\tconst val = String(windowVariable || envVariable || (defaultValue == null ? undefined : defaultValue))\n\t\tif (val !== 'undefined') {\n\t\t\treturn {\n\t\t\t\tname: settingName,\n\t\t\t\tdefaultValue,\n\t\t\t\tvalue: val,\n\t\t\t\tdescription,\n\t\t\t}\n\t\t}\n\n\t\tthrow new Error(`The setting [${settingName}] was requested but the value was not found and no default was supplied.`)\n\t}\n\n\t/**\n\t * Load a setting in a boolean format.\n\t *\n\t * @param {string} settingName expected to be PascalCase format\n\t * @param {string} description description for the setting (for display in debug panel)\n\t * @param {boolean} [defaultValue] optional default value if setting not found. when not supplied a setting must be explicitly defined\n\t * @returns {ISettingsManagerSetting}\n\t * @memberof SettingsManager\n\t */\n\tstatic getSettingAsBoolean = (settingName: string, description: string, defaultValue: boolean, getFunction?: () => string): ISettingsManagerSetting => {\n\t\tconst setting = BaseSettingsManager.getSettingAsString(settingName, description, String(defaultValue))\n\t\tif (!['true', 'false'].includes(setting.value)) {\n\t\t\tthrow new Error(`The setting [${settingName}] was requested as a boolean but was not boolean`)\n\t\t}\n\t\treturn {\n\t\t\tname: settingName,\n\t\t\tdefaultValue: defaultValue,\n\t\t\tvalue: setting.value.toLowerCase() === 'true',\n\t\t\tdescription: description,\n\t\t}\n\t}\n\n\t/**\n\t * Load a setting in a number format.\n\t *\n\t * @param {string} settingName expected to be PascalCase format\n\t * @param {string} description description for the setting (for display in debug panel)\n\t * @param {number} [defaultValue] optional default value if setting not found. when not supplied a setting must be explicitly defined\n\t * @returns {ISettingsManagerSetting}\n\t * @memberof SettingsManager\n\t */\n\tstatic getSettingAsNumber = (settingName: string, description: string, defaultValue: number, getFunction?: () => string): ISettingsManagerSetting => {\n\t\tconst setting = BaseSettingsManager.getSettingAsString(settingName, description, String(defaultValue))\n\t\tif (isNaN(parseInt(setting.value))) {\n\t\t\tthrow new Error(`The setting [${settingName}] was requested as a number but was not number`)\n\t\t}\n\t\treturn {\n\t\t\tname: settingName,\n\t\t\tdefaultValue,\n\t\t\tvalue: parseInt(setting.value),\n\t\t\tdescription,\n\t\t}\n\t}\n\n\tstatic REACT_APP_MAIN_CMS_BASE_URL = (): ISettingsManagerSetting => BaseSettingsManager.getSettingAsString('REACT_APP_MAIN_CMS_BASE_URL', 'The base url for the back-end cms', 'https://---.---')\n\tstatic REACT_APP_MAIN_API_BASE_URL = (): ISettingsManagerSetting => BaseSettingsManager.getSettingAsString('REACT_APP_MAIN_API_BASE_URL', 'The base url for the back-end api', 'https://---.---')\n\tstatic REACT_APP_IS_MAIN_API_MOCKED = (): ISettingsManagerSetting => BaseSettingsManager.getSettingAsBoolean('REACT_APP_IS_MAIN_API_MOCKED', 'Determines if the back-end core API is mocked', false)\n\tstatic REACT_APP_USER_SESSION_API_BASE_URL = (): ISettingsManagerSetting => BaseSettingsManager.getSettingAsString('REACT_APP_USER_SESSION_API_BASE_URL', 'Determines if the user-session back-end API is mocked', 'https://---.---')\n\tstatic REACT_APP_IS_USER_SESSION_API_MOCKED = (): ISettingsManagerSetting => BaseSettingsManager.getSettingAsBoolean('REACT_APP_IS_USER_SESSION_API_MOCKED', 'Determines if the user-session back-end API is mocked', false)\n\tstatic REACT_APP_IS_DEBUG_PANEL_VISIBLE = (): ISettingsManagerSetting => BaseSettingsManager.getSettingAsBoolean('REACT_APP_IS_DEBUG_PANEL_VISIBLE', 'Drives the visibility of the debug panel', false)\n\tstatic REACT_APP_IS_USER_SESSION_STORAGE_MOCKED = (): ISettingsManagerSetting => BaseSettingsManager.getSettingAsBoolean('REACT_APP_IS_USER_SESSION_STORAGE_MOCKED', 'Determines if JWT storage is mocked', false)\n\tstatic REACT_APP_HARD_CODED_SESSION_JWT = (): ISettingsManagerSetting => BaseSettingsManager.getSettingAsString('REACT_APP_HARD_CODED_SESSION_JWT', 'Optional hard-coding a user session to a specific JWT', '')\n\tstatic REACT_APP_HARD_CODED_SSO_JWT = (): ISettingsManagerSetting => BaseSettingsManager.getSettingAsString('REACT_APP_HARD_CODED_SSO_JWT', 'Optional hard-coding an SSO token to a specific JWT', '')\n\tstatic REACT_APP_SECONDS_BEFORE_EXPIRATION_WARNING = (): ISettingsManagerSetting => BaseSettingsManager.getSettingAsNumber('REACT_APP_SECONDS_BEFORE_EXPIRATION_WARNING', 'How many seconds before session expiration to show the warning popup?', 300)\n\tstatic REACT_APP_MYABILITY_ROOT_URL = (): ISettingsManagerSetting => BaseSettingsManager.getSettingAsString('REACT_APP_MYABILITY_ROOT_URL', 'Location of core portal URL', '')\n\tstatic REACT_APP_VERSION = (): ISettingsManagerSetting => BaseSettingsManager.getSettingAsString('REACT_APP_VERSION', 'The version number of the app as defined in package.json', '??')\n\tstatic REACT_APP_MAIN_API_BASE_URL_REQUEST_TIMEOUT = (): ISettingsManagerSetting => BaseSettingsManager.getSettingAsNumber('REACT_APP_MAIN_API_BASE_URL_REQUEST_TIMEOUT', 'Any remote end can keep us waiting for the requested resource for this period', 0)\n\tstatic REACT_APP_USER_VOTE_API_URL = (): ISettingsManagerSetting => BaseSettingsManager.getSettingAsString('REACT_APP_USER_VOTE_API_URL', 'The url for the UserVote REST API', 'https://---.---')\n\n\t/**\n\t * register all injectables to an ioc container.\n\t * this should be called once and only once per container at the time of application bootstrap\n\t *\n\t * @export\n\t */\n\tstatic configureContainer = (): void => {\n\t\t// note: there doesnt (yet) seem to be a mature/stable auto-wiring for services.\n\t\t// until one is available we will bind services explicitly in this method\n\n\t\tif (BaseSettingsManager.REACT_APP_IS_USER_SESSION_STORAGE_MOCKED().value) {\n\t\t\tcontainer.bind('IJwtStorage').to(HardCodedJwtStorage)\n\t\t} else {\n\t\t\tcontainer.bind('IJwtStorage').to(LocalJwtStorage)\n\t\t}\n\n\t\tif (BaseSettingsManager.REACT_APP_IS_USER_SESSION_API_MOCKED().value) {\n\t\t\tcontainer.bind('IUserSessionApiClient').to(MockUserSessionApiClient)\n\t\t} else {\n\t\t\tcontainer.bind('IUserSessionApiClient').to(UserSessionApiClient)\n\t\t}\n\n\t\tcontainer\n\t\t\t.bind('IUserSessionStateManager')\n\t\t\t.to(UserSessionStateManager)\n\t\t\t.inSingletonScope()\n\t\tcontainer.bind('IUserSessionMiddleware').to(UserSessionMiddleware)\n\t}\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nexport enum UserVote {\n\tdislike = 0,\n\tlike = 1,\n\tnone = 2,\n}\n\nexport interface IArticle {\n\tcontentItemId: string\n\tpath: string\n\tdisplayText: string\n\tpublishedUtc: Date\n\tmarkup: string\n\tproductCode: string\n\tproductName: string\n\tsectionId: string\n\tsectionName: string\n}\n\nexport interface IArticleRating {\n\tcontentItemId: string\n\tcountLikes: number\n\tcountDislikes: number\n\tvote: UserVote\n}\n\nexport interface IContentStateManager {\n\tarticle: IArticle\n\trating: IArticleRating\n\n\tvoteOnArticle(contentItemId: string, userId: string, newVote: UserVote, currentVote: UserVote): Promise\n\tgetArticle(path: string): Promise\n\tgetArticleRating(contentItemId: string, userId: string): Promise\n\tsetArticle(article: IArticle): void\n\tsetArticleRating(rating: IArticleRating): void\n\tgetUserId(): Promise\n\tgetProductName(productCode: string): Promise\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nexport class ErrorHelper {\n\tstatic handleApiError(error: { response: { status: number } | null }): void {\n\t\tif (error.response !== null && typeof error.response !== 'undefined' && error.response.status === 401) {\n\t\t\talert('Your session has expired')\n\t\t\twindow.location.href = '/'\n\t\t} else {\n\t\t\tthrow error\n\t\t}\n\t}\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport axios from 'axios'\nimport { injectable } from 'inversify'\nimport { injectProperty } from '../../configuration/ServiceLocator'\nimport { SettingsManager } from '../../configuration/SettingsManager'\nimport { ErrorHelper } from '../../utils/ErrorHelper'\nimport { UserVote, IArticle, IArticleRating } from '../ContentStateManager/contracts'\nimport { IUserSessionMiddleware } from '../middleware/UserSessionMiddleware/contracts'\nimport { IContentApiClient } from './contracts'\n\n@injectable()\nexport class ContentApiClient implements IContentApiClient {\n\t@injectProperty('IUserSessionMiddleware')\n\tprivate readonly userSessionMiddleware!: IUserSessionMiddleware\n\n\tgetArticleQuery(path: string): string {\n\t\treturn `query MyQuery {\n \t\t\t\t\taBILITYPage(where: {path: \"${path}\"}) {\n\t\t\t\t\t\tcontentItemId\n\t\t\t\t\t\tpath\n\t\t\t\t\t\tdisplayText\n\t\t\t\t\t\tpublishedUtc\n\t\t\t\t\t\twysiwygContent {\n\t\t\t\t\t\t\tmarkup\n\t\t\t\t\t\t}\n\t\t\t\t\t\tproductContent {\n\t\t\t\t\t\t\tproductName\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsectionTags {\n\t\t\t\t\t\t\ttermContentItems {\n\t\t\t\t\t\t\t createdUtc\n\t\t\t\t\t\t\t displayText\n\t\t\t\t\t\t\t modifiedUtc\n\t\t\t\t\t\t\t publishedUtc\n\t\t\t\t\t\t\t contentItemId\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n \t\t\t\t\t}\n\t\t\t\t}`\n\t}\n\n\tgetArticle(path: string): Promise {\n\t\tconst url = `${SettingsManager.REACT_APP_MAIN_API_BASE_URL().value}`\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.userSessionMiddleware.loadSessionJwt(false).then(x =>\n\t\t\t\taxios\n\t\t\t\t\t.get(url, {\n\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\tquery: this.getArticleQuery(path),\n\t\t\t\t\t\t},\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\tAuthorization: `Bearer ${x}`,\n\t\t\t\t\t\t\t\"Cache-Control\": \"no-cache, no-store\"\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t\t.then(response => {\n\t\t\t\t\t\tif (response.data.data.aBILITYPage.length > 0) {\n\t\t\t\t\t\t\tconst page = response.data.data.aBILITYPage[0]\n\t\t\t\t\t\t\tconst article = {\n\t\t\t\t\t\t\t\tcontentItemId: page.contentItemId,\n\t\t\t\t\t\t\t\tpath: page.path,\n\t\t\t\t\t\t\t\tdisplayText: page.displayText,\n\t\t\t\t\t\t\t\tpublishedUtc: new Date(page.publishedUtc),\n\t\t\t\t\t\t\t\tmarkup: page.wysiwygContent.markup,\n\t\t\t\t\t\t\t\tproductCode: page.productContent.productName,\n\t\t\t\t\t\t\t\tsectionId: page.sectionTags.termContentItems.length > 0 ? page.sectionTags.termContentItems[0].contentItemId: '',\n\t\t\t\t\t\t\t\tsectionName: page.sectionTags.termContentItems.length > 0 ? page.sectionTags.termContentItems[0].displayText: ''\n\t\t\t\t\t\t\t} as IArticle\n\t\t\t\t\t\t\tresolve(article)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treject(`Help page with path \"${path}\" not found`)\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.catch(error => {\n\t\t\t\t\t\tif (error.response !== null && typeof error.response !== 'undefined' && error.response.status === 401) ErrorHelper.handleApiError(error)\n\t\t\t\t\t\telse reject(error)\n\t\t\t\t\t}),\n\t\t\t)\n\t\t})\n\t}\n\n\tgetRating(contentItemId: string, userId: string): Promise {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst url = `${SettingsManager.REACT_APP_USER_VOTE_API_URL().value}`\n\t\t\tthis.userSessionMiddleware.loadSessionJwt(false).then(x =>\n\t\t\t\taxios\n\t\t\t\t\t.get(url, {\n\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\tarticleId: contentItemId,\n\t\t\t\t\t\t\tuserId: userId,\n\t\t\t\t\t\t},\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\tAuthorization: `Bearer ${x}`,\n\t\t\t\t\t\t\t\"Cache-Control\": \"no-cache, no-store\"\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t\t.then(response => {\n\t\t\t\t\t\tconst rating = response.data.item\n\t\t\t\t\t\tconst articleRating = {\n\t\t\t\t\t\t\tcontentItemId: rating.contentItemId,\n\t\t\t\t\t\t\tcountLikes: rating.totalLikes,\n\t\t\t\t\t\t\tcountDislikes: rating.totalDislikes,\n\t\t\t\t\t\t\tvote: rating.vote,\n\t\t\t\t\t\t} as IArticleRating\n\t\t\t\t\t\tresolve(articleRating)\n\t\t\t\t\t})\n\t\t\t\t\t.catch(error => {\n\t\t\t\t\t\tif (error.response !== null && typeof error.response !== 'undefined' && error.response.status === 401) ErrorHelper.handleApiError(error)\n\t\t\t\t\t\telse reject(error)\n\t\t\t\t\t}),\n\t\t\t)\n\t\t})\n\t}\n\n\tvote(contentItemId: string, userId: string, vote: UserVote): Promise {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst url = `${SettingsManager.REACT_APP_USER_VOTE_API_URL().value}`\n\t\t\tconst userVote = vote === UserVote.like ? true : false\n\t\t\tthis.userSessionMiddleware.loadSessionJwt(false).then(x =>\n\t\t\t\taxios\n\t\t\t\t\t.post(\n\t\t\t\t\t\turl,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontentItemId: contentItemId,\n\t\t\t\t\t\t\tuserId: userId,\n\t\t\t\t\t\t\tvote: vote,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\tAuthorization: `Bearer ${x}`,\n\t\t\t\t\t\t\t\t\"Content-Type\": \"application/json\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t\t.then(response => {\n\t\t\t\t\t\tconst rating = response.data.item\n\t\t\t\t\t\tconst articleRating = {\n\t\t\t\t\t\t\tcontentItemId: rating.contentItemId,\n\t\t\t\t\t\t\tcountLikes: rating.totalLikes,\n\t\t\t\t\t\t\tcountDislikes: rating.totalDislikes,\n\t\t\t\t\t\t\tvote: rating.vote,\n\t\t\t\t\t\t} as IArticleRating\n\t\t\t\t\t\tresolve(articleRating)\n\t\t\t\t\t})\n\t\t\t\t\t.catch(error => {\n\t\t\t\t\t\tif (error.response !== null && typeof error.response !== 'undefined' && error.response.status === 401) ErrorHelper.handleApiError(error)\n\t\t\t\t\t\telse reject(error)\n\t\t\t\t\t}),\n\t\t\t)\n\t\t})\n\t}\n\n\tdeleteVote(contentItemId: string, userId: string, vote: UserVote): Promise {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst url = `${SettingsManager.REACT_APP_USER_VOTE_API_URL().value}`\n\t\t\tthis.userSessionMiddleware.loadSessionJwt(false).then(x =>\n\t\t\t\taxios\n\t\t\t\t\t.delete(url, {\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\tAuthorization: `Bearer ${x}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\tarticleId: contentItemId,\n\t\t\t\t\t\t\tuserId: userId,\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t\t.then(response => {\n\t\t\t\t\t\tconst rating = response.data.item\n\t\t\t\t\t\tconst articleRating = {\n\t\t\t\t\t\t\tcontentItemId: rating.contentItemId,\n\t\t\t\t\t\t\tcountLikes: rating.totalLikes,\n\t\t\t\t\t\t\tcountDislikes: rating.totalDislikes,\n\t\t\t\t\t\t\tvote: rating.vote,\n\t\t\t\t\t\t} as IArticleRating\n\t\t\t\t\t\tresolve(articleRating)\n\t\t\t\t\t})\n\t\t\t\t\t.catch(error => {\n\t\t\t\t\t\tif (error.response !== null && typeof error.response !== 'undefined' && error.response.status === 401) ErrorHelper.handleApiError(error)\n\t\t\t\t\t\telse reject(error)\n\t\t\t\t\t}),\n\t\t\t)\n\t\t})\n\t}\n\n\tchangeVote(contentItemId: string, userId: string, vote: UserVote): Promise {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst url = `${SettingsManager.REACT_APP_USER_VOTE_API_URL().value}`\n\t\t\tthis.userSessionMiddleware.loadSessionJwt(false).then(x =>\n\t\t\t\taxios\n\t\t\t\t\t.put(\n\t\t\t\t\t\turl,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontentItemId: contentItemId,\n\t\t\t\t\t\t\tuserId: userId,\n\t\t\t\t\t\t\tvote: vote,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\tAuthorization: `Bearer ${x}`,\n\t\t\t\t\t\t\t\t\"Content-Type\": \"application/json\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t\t.then(response => {\n\t\t\t\t\t\tconst rating = response.data.item\n\t\t\t\t\t\tconst articleRating = {\n\t\t\t\t\t\t\tcontentItemId: rating.contentItemId,\n\t\t\t\t\t\t\tcountLikes: rating.totalLikes,\n\t\t\t\t\t\t\tcountDislikes: rating.totalDislikes,\n\t\t\t\t\t\t\tvote: rating.vote,\n\t\t\t\t\t\t} as IArticleRating\n\t\t\t\t\t\tresolve(articleRating)\n\t\t\t\t\t})\n\t\t\t\t\t.catch(error => {\n\t\t\t\t\t\tif (error.response !== null && typeof error.response !== 'undefined' && error.response.status === 401) ErrorHelper.handleApiError(error)\n\t\t\t\t\t\telse reject(error)\n\t\t\t\t\t}),\n\t\t\t)\n\t\t})\n\t}\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport { IContentApiClient } from './contracts'\nimport { UserVote, IArticle, IArticleRating } from '../ContentStateManager/contracts'\nimport { injectable } from 'inversify'\n\n@injectable()\nexport class MockContentApiClient implements IContentApiClient {\n\tarticle: IArticle\n\trating: IArticleRating\n\n\tconstructor() {\n\t\tthis.article = { contentItemId: '1234567', path: 'esMD/Home/Index', displayText: 'AUTOMATE esMD Homepage', publishedUtc: new Date(), markup: '

AUTOMATE esMD is a greate product.

' } as IArticle\n\t\tthis.rating = { contentItemId: '1234567', countLikes: 10, countDislikes: 2, vote: UserVote.none } as IArticleRating\n\t}\n\n\tgetArticle(path: string): Promise {\n\t\treturn new Promise(resolve => {\n\t\t\tresolve(this.article)\n\t\t})\n\t}\n\n\tgetRating(contentItemId: string, userId: string): Promise {\n\t\treturn new Promise(resolve => {\n\t\t\tresolve(this.rating)\n\t\t})\n\t}\n\n\tvote(contentItemId: string, userId: string, vote: UserVote): Promise {\n\t\tif (vote === UserVote.like) {\n\t\t\tthis.rating.countLikes++\n\t\t\tthis.rating.vote = UserVote.like\n\t\t} else if (vote === UserVote.dislike) {\n\t\t\tthis.rating.countDislikes++\n\t\t\tthis.rating.vote = UserVote.dislike\n\t\t}\n\t\treturn new Promise(resolve => {\n\t\t\tresolve(this.rating)\n\t\t})\n\t}\n\n\tdeleteVote(contentItemId: string, userId: string, vote: UserVote): Promise {\n\t\tthis.rating.vote = UserVote.none\n\t\tif (vote === UserVote.like) {\n\t\t\tthis.rating.countLikes--\n\t\t} else if (vote === UserVote.dislike) {\n\t\t\tthis.rating.countDislikes--\n\t\t}\n\t\treturn new Promise(resolve => {\n\t\t\tresolve(this.rating)\n\t\t})\n\t}\n\n\tchangeVote(contentItemId: string, userId: string, vote: UserVote): Promise {\n\t\tif (vote === UserVote.like) {\n\t\t\tthis.rating.countLikes++\n\t\t\tthis.rating.countDislikes--\n\t\t\tthis.rating.vote = UserVote.like\n\t\t} else if (vote === UserVote.dislike) {\n\t\t\tthis.rating.countLikes--\n\t\t\tthis.rating.countDislikes++\n\t\t\tthis.rating.vote = UserVote.dislike\n\t\t}\n\t\treturn new Promise(resolve => {\n\t\t\tresolve(this.rating)\n\t\t})\n\t}\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport { injectable } from 'inversify'\nimport { action, observable } from 'mobx'\nimport JwtDecode from 'jwt-decode'\nimport { injectProperty } from '../../configuration/ServiceLocator'\nimport { IContentApiClient } from '../ContentApiClient/contracts'\nimport { UserVote, IArticle, IArticleRating, IContentStateManager } from './contracts'\nimport { SettingsManager } from '../../configuration/SettingsManager'\n\n@injectable()\nexport class ContentStateManager implements IContentStateManager {\n\t@observable\n\tarticle: IArticle\n\n\t@observable\n\trating: IArticleRating\n\n\t@injectProperty('IContentApiClient')\n\tpublic ContentApiClient!: IContentApiClient\n\n\tconstructor () {\n\t\tthis.article = { contentItemId: '', path: '', displayText: '', publishedUtc: new Date(), markup: '', productCode: '', productName: '', sectionId: '', sectionName: '' } as IArticle\n\t\tthis.rating = { contentItemId: '', countLikes: 0, countDislikes: 0, vote: UserVote.none } as IArticleRating\n\t}\n\n\t@action setArticle(article: IArticle): void {\n\t\tthis.article = article\n\t}\n\n\t@action setArticleRating(rating: IArticleRating): void {\n\t\tthis.rating = rating\n\t}\n\n\t@action getArticle(path: string): Promise {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.ContentApiClient.getArticle(path)\n\t\t\t\t.then(response => {\n\t\t\t\t\tthis.getProductName(response.productCode).then(name => (response.productName = name.split(',')[0], response.productCode = name.split(',')[1]))\n\t\t\t\t\tthis.setArticle(response)\n\t\t\t\t\tresolve(response)\n\t\t\t\t})\n\t\t\t\t.catch(error => {\n\t\t\t\t\tconsole.log(error)\n\t\t\t\t\treject(error)\n\t\t\t\t})\n\t\t\t// .catch(error => {\n\t\t\t// \t// Display user friendly message\n\t\t\t// \treject(error)\n\n\t\t\t// })\n\t\t})\n\t}\n\n\t@action voteOnArticle(contentItemId: string, userId: string, newVote: UserVote, currentVote: UserVote): Promise {\n\t\tif (currentVote === UserVote.none && newVote !== UserVote.none) {\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tthis.ContentApiClient.vote(contentItemId, userId, newVote)\n\t\t\t\t\t.then(response => {\n\t\t\t\t\t\tthis.setArticleRating(response)\n\t\t\t\t\t\tresolve(response)\n\t\t\t\t\t})\n\t\t\t\t\t.catch(error => {\n\t\t\t\t\t\t// Display user friendly message\n\t\t\t\t\t\treject(error)\n\t\t\t\t\t})\n\t\t\t})\n\t\t} else if (currentVote !== UserVote.none && newVote === UserVote.none) {\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tthis.ContentApiClient.deleteVote(contentItemId, userId, currentVote)\n\t\t\t\t\t.then(response => {\n\t\t\t\t\t\tthis.setArticleRating(response)\n\t\t\t\t\t\tresolve(response)\n\t\t\t\t\t})\n\t\t\t\t\t.catch(error => {\n\t\t\t\t\t\tconsole.log(error)\n\t\t\t\t\t\tthrow new Error('An error occurred while deleting the User Vote.')\n\t\t\t\t\t})\n\t\t\t\t// .catch(error => {\n\t\t\t\t// \t// Display user friendly message\n\t\t\t\t// \treject(error)\n\t\t\t\t// })\n\t\t\t})\n\t\t} else if (newVote !== currentVote) {\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tthis.ContentApiClient.changeVote(contentItemId, userId, newVote)\n\t\t\t\t\t.then(response => {\n\t\t\t\t\t\tthis.setArticleRating(response)\n\t\t\t\t\t\tresolve(response)\n\t\t\t\t\t})\n\t\t\t\t\t.catch(error => {\n\t\t\t\t\t\tconsole.log(error)\n\t\t\t\t\t\tthrow new Error('An error occurred while changing the User Vote.')\n\t\t\t\t\t})\n\t\t\t\t// .catch(error => {\n\t\t\t\t// \t// Display user friendly message\n\t\t\t\t// \treject(error)\n\t\t\t\t// })\n\t\t\t})\n\t\t} else {\n\t\t\tthrow 'User has not changed vote to the article.'\n\t\t}\n\t}\n\n\t@action getArticleRating(contentItemId: string, userId: string): Promise {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.ContentApiClient.getRating(contentItemId, userId)\n\t\t\t\t.then(response => {\n\t\t\t\t\tthis.setArticleRating(response)\n\t\t\t\t\tresolve(response)\n\t\t\t\t})\n\t\t\t\t.catch(error => {\n\t\t\t\t\tconsole.log(error)\n\t\t\t\t\treject(error)\n\t\t\t\t})\n\t\t\t// .catch(error => {\n\t\t\t// \t// Display user friendly message\n\t\t\t// \treject(error)\n\t\t\t// })\n\t\t})\n\t}\n\n\tgetUserId(): Promise {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst token = localStorage.getItem(SettingsManager.REACT_APP_ProductCategories_TOKEN_NAME)\n\t\t\tconst tokenObject: any = JwtDecode(JSON.stringify(token))\n\t\t\tconst userId: string = tokenObject.userId as string\n\t\t\tif (userId === '') {\n\t\t\t\treject('User ID not found in JWT token.')\n\t\t\t} else {\n\t\t\t\tresolve(userId)\n\t\t\t}\n\t\t})\n\t}\n\n\tgetProductName(productCode: string): Promise {\n\t\treturn new Promise(resolve => {\n\t\t\tlet productName = ''\n\t\t\tconst productToken = localStorage.getItem(SettingsManager.REACT_APP_ProductCategories_TOKEN_NAME)\n\t\t\tconst products: any = JwtDecode(JSON.stringify(productToken))\n\t\t\tfor (let i = 0; i < products.AbilityProductCategoryClaimV2.productCategories.length; i++) {\n\t\t\t\tconst item: any = products.AbilityProductCategoryClaimV2.productCategories[i]\n\t\t\t\tfor (let j = 0; j < item.HomeIndexProductsViewModel.length; j++) {\n\t\t\t\t\tconst productItem: any = item.HomeIndexProductsViewModel[j]\n\t\t\t\t\tif (productCode.toLowerCase() === productItem.Code.toLowerCase()) {\n\t\t\t\t\t\tproductName = productItem.Name + ',' + productItem.Code\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (productName !== '') break\n\t\t\t}\n\t\t\tresolve(productName)\n\t\t})\n\t}\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport { ISectionStateManager, ISectionArticleList, ISectionArticle } from './contracts'\nimport { observable, action } from 'mobx'\nimport { injectable } from 'inversify'\nimport { injectProperty } from '../../configuration/ServiceLocator'\nimport ISectionApiClient from '../SectionApiClient/contracts'\nimport { rejects } from 'assert'\n\n@injectable()\nexport class SectionStateManager implements ISectionStateManager {\n\t@observable\n\tsectionArticleList: ISectionArticleList\n\n\t@injectProperty('ISectionApiClient')\n\tpublic sectionApiClient!: ISectionApiClient\n\n\t/**\n\t *\n\t */\n\tconstructor () {\n\t\tthis.sectionArticleList = this.getBlankItem()\n\t}\n\n\tgetBlankItem(): ISectionArticleList {\n\t\treturn {\n\t\t\ttotal: 0,\n\t\t\titems: [],\n\t\t}\n\t}\n\n\t@action setSectionArticleList(response: ISectionArticleList): void {\n\n\t\tthis.sectionArticleList = response\n\t}\n\n\t@action getSectionArticles(productCode: string, sectionName: string): Promise {\n\t\treturn this.sectionApiClient\n\t\t\t.getSectionArticles(productCode, sectionName)\n\t\t\t.then(response => response)\n\t\t\t.catch(error => {\n\t\t\t\tconsole.log(error)\n\t\t\t\tthis.setSectionArticleList({ items: [], total: 0 } as ISectionArticleList)\n\t\t\t\tthrow new Error('An error occured when fetching the Section Articles.')\n\t\t\t})\n\t}\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport ISectionApiClient from './contracts'\nimport { ISectionArticleList } from '../SectionStateManager/contracts'\nimport { injectable } from 'inversify'\n\n@injectable()\nexport class MockSectionApiClient implements ISectionApiClient {\n\tsectionArticleList: ISectionArticleList\n\t/**\n\t *\n\t */\n\tconstructor() {\n\t\tthis.sectionArticleList = {\n\t\t\ttotal: 12,\n\t\t\titems: [\n\t\t\t\t{\n\t\t\t\t\tsectionArticleId: 1,\n\t\t\t\t\tsectionArticleName: 'MDS Scheduling Management Tools',\n\t\t\t\t\tproductCode: 'Care Watch',\n\t\t\t\t\tsectionName: 'MDS',\n\t\t\t\t\tsectionArticlePath: '/content/1',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tsectionArticleId: 2,\n\t\t\t\t\tsectionArticleName: 'ICD-10 Clinical Categories Lookup Tool',\n\t\t\t\t\tproductCode: 'Care Watch',\n\t\t\t\t\tsectionName: 'MDS',\n\t\t\t\t\tsectionArticlePath: '/content/2',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tsectionArticleId: 3,\n\t\t\t\t\tsectionArticleName: 'ICD-10 NTA Comorbidity Lookup Tool',\n\t\t\t\t\tproductCode: 'Care Watch',\n\t\t\t\t\tsectionName: 'MDS',\n\t\t\t\t\tsectionArticlePath: '/content/3',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tsectionArticleId: 4,\n\t\t\t\t\tsectionArticleName: 'MDS Transmission Watch',\n\t\t\t\t\tproductCode: 'Care Watch',\n\t\t\t\t\tsectionName: 'MDS',\n\t\t\t\t\tsectionArticlePath: '/content/4',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tsectionArticleId: 5,\n\t\t\t\t\tsectionArticleName: 'MDS Transmission Enterprise Report',\n\t\t\t\t\tproductCode: 'Care Watch',\n\t\t\t\t\tsectionName: 'MDS',\n\t\t\t\t\tsectionArticlePath: '/content/5',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tsectionArticleId: 6,\n\t\t\t\t\tsectionArticleName: 'Correct Suspended Assessments',\n\t\t\t\t\tproductCode: 'Care Watch',\n\t\t\t\t\tsectionName: 'MDS',\n\t\t\t\t\tsectionArticlePath: '/content/6',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tsectionArticleId: 7,\n\t\t\t\t\tsectionArticleName: 'MDS Quality Scheduling Management',\n\t\t\t\t\tproductCode: 'Care Watch',\n\t\t\t\t\tsectionName: 'MDS',\n\t\t\t\t\tsectionArticlePath: '/content/7',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tsectionArticleId: 8,\n\t\t\t\t\tsectionArticleName: 'MDS Quality Clinical Categories Lookup',\n\t\t\t\t\tproductCode: 'Care Watch',\n\t\t\t\t\tsectionName: 'MDS',\n\t\t\t\t\tsectionArticlePath: '/content/8',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tsectionArticleId: 9,\n\t\t\t\t\tsectionArticleName: 'MDS Quality Comorbidity Lookup',\n\t\t\t\t\tproductCode: 'Care Watch',\n\t\t\t\t\tsectionName: 'MDS',\n\t\t\t\t\tsectionArticlePath: '/content/9',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tsectionArticleId: 10,\n\t\t\t\t\tsectionArticleName: 'MDS Quality Transmission Watch',\n\t\t\t\t\tproductCode: 'Care Watch',\n\t\t\t\t\tsectionName: 'MDS',\n\t\t\t\t\tsectionArticlePath: '/content/10',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tsectionArticleId: 11,\n\t\t\t\t\tsectionArticleName: 'MDS Quality Transmission Enterprise',\n\t\t\t\t\tproductCode: 'Care Watch',\n\t\t\t\t\tsectionName: 'MDS',\n\t\t\t\t\tsectionArticlePath: '/content/11',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tsectionArticleId: 12,\n\t\t\t\t\tsectionArticleName: 'MDS Quality Suspended Assessments',\n\t\t\t\t\tproductCode: 'Care Watch',\n\t\t\t\t\tsectionName: 'MDS',\n\t\t\t\t\tsectionArticlePath: '/content/12',\n\t\t\t\t},\n\t\t\t],\n\t\t} as ISectionArticleList\n\t}\n\n\tgetSectionArticles(productCode: string, sectionName: string): Promise {\n\t\treturn new Promise(resolve => {\n\t\t\tsetTimeout(() => resolve(this.sectionArticleList), 100)\n\t\t})\n\t}\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nexport const SectionArticleQuery = (productCode: string, sectionName: string) => {\n return `query MyQuery {\n aBILITYPage(where: {productContent: {productName: \"${productCode}\"}, tag: {tagName: \"${sectionName}\"}}, orderBy: {publishedUtc: DESC}) {\n productContent {\n productName\n }\n sectionTags {\n termContentItems {\n contentItemId\n displayText\n }\n }\n contentItemId\n displayText\n path\n }\n pdf(where: {productContent: {productName: \"${productCode}\"}}, orderBy: {publishedUtc: ASC}, first: 1000) {\n pdfDocument {\n relativePdfPath\n }\n sectionTags {\n termContentItems {\n displayText\n contentItemId\n }\n }\n productContent {\n productName\n }\n displayText\n contentItemId\n }\n }`\n}","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport ISectionApiClient from './contracts'\nimport { ISectionArticleList, ISectionArticle } from '../SectionStateManager/contracts'\nimport { injectable } from 'inversify'\nimport { injectProperty } from '../../configuration/ServiceLocator'\nimport { IUserSessionMiddleware } from '../middleware/UserSessionMiddleware/contracts'\nimport { SettingsManager } from '../../configuration/SettingsManager'\nimport axios from 'axios'\nimport { isObject } from 'util'\nimport { SectionArticleQuery } from './SectionQuery'\nimport { IApiClient } from '../ApiClient/IApiClient'\nimport { ErrorHelper } from '../../utils/ErrorHelper'\n\n@injectable()\nexport class SectionApiClient implements ISectionApiClient {\n\t@injectProperty('IApiClient')\n\tprivate readonly apiClient!: IApiClient\n\n\t@injectProperty('IUserSessionMiddleware')\n\tprivate readonly userSessionMiddleware!: IUserSessionMiddleware\n\n\tgetSectionArticles(productCode: string, sectionName: string): Promise {\n\t\tconst url = `${SettingsManager.REACT_APP_MAIN_API_BASE_URL().value}`\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.userSessionMiddleware.loadSessionJwt(false).then(x =>\n\t\t\t\taxios\n\t\t\t\t\t.get(url, {\n\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\tquery: SectionArticleQuery(productCode, sectionName),\n\t\t\t\t\t\t},\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\tAuthorization: `Bearer ${x}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t\t.then(response => {\n\t\t\t\t\t\tconst formattedResults = { items: [], total: 0 } as ISectionArticleList\n\t\t\t\t\t\tif (response.data.data.aBILITYPage.length > 0) {\n\t\t\t\t\t\t\tconst data = response.data.data.aBILITYPage\n\t\t\t\t\t\t\tdata.map((item: any, index: number) => {\n\t\t\t\t\t\t\t\tif (item.sectionTags != null) {\n\t\t\t\t\t\t\t\t\tif (item.sectionTags.termContentItems.findIndex((x: any) => x.contentItemId === sectionName) !== -1) {\n\t\t\t\t\t\t\t\t\t\tconst sectionArticleResult = {\n\t\t\t\t\t\t\t\t\t\t\tsectionArticleId: item.contentItemId,\n\t\t\t\t\t\t\t\t\t\t\tsectionArticleName: item.displayText,\n\t\t\t\t\t\t\t\t\t\t\tsectionArticlePath: item.path,//'/content/' + item.contentItemId,\n\t\t\t\t\t\t\t\t\t\t\tproductCode: item.productContent.productName,\n\t\t\t\t\t\t\t\t\t\t\tsectionName:\n\t\t\t\t\t\t\t\t\t\t\t\titem.sectionTags.termContentItems[item.sectionTags.termContentItems.findIndex((x: any) => x.contentItemId === sectionName)].displayText,\n\t\t\t\t\t\t\t\t\t\t\tIsPdf: false,\n\t\t\t\t\t\t\t\t\t\t} as ISectionArticle\n\t\t\t\t\t\t\t\t\t\tformattedResults.items.push(sectionArticleResult)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tformattedResults.total = response.data.data.aBILITYPage.length\n\n\t\t\t\t\t\t\t//resolve(formattedResults)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (response.data.data.pdf && response.data.data.pdf.length > 0) {\n\t\t\t\t\t\t\t//const pdfData = response.data.data.aBILITYPage\n\t\t\t\t\t\t\tresponse.data.data.pdf.map((item: any, index: number) => {\n\t\t\t\t\t\t\t\tif (item.sectionTags != null) {\n\t\t\t\t\t\t\t\t\tif (item.sectionTags.termContentItems.findIndex((x: any) => x.contentItemId === sectionName) !== -1) {\n\t\t\t\t\t\t\t\t\t\tconst sectionArticleResult = {\n\t\t\t\t\t\t\t\t\t\t\tsectionArticleId: item.contentItemId,\n\t\t\t\t\t\t\t\t\t\t\tsectionArticleName: item.displayText,\n\t\t\t\t\t\t\t\t\t\t\tsectionArticlePath: item.pdfDocument.relativePdfPath,\n\t\t\t\t\t\t\t\t\t\t\tproductCode: item.productContent.productName,\n\t\t\t\t\t\t\t\t\t\t\tsectionName:\n\t\t\t\t\t\t\t\t\t\t\t\titem.sectionTags.termContentItems[item.sectionTags.termContentItems.findIndex((x: any) => x.contentItemId === sectionName)].displayText,\n\t\t\t\t\t\t\t\t\t\t\tIsPdf: true,\n\t\t\t\t\t\t\t\t\t\t} as ISectionArticle\n\t\t\t\t\t\t\t\t\t\tformattedResults.items.push(sectionArticleResult)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tformattedResults.total = formattedResults.total + response.data.data.pdf.length\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (formattedResults.total > 0) {\n\t\t\t\t\t\t\tconst articleResults = { items: [], total: 0 } as ISectionArticleList\n\t\t\t\t\t\t\tarticleResults.items = formattedResults.items.sort((a, b) => (a.sectionArticleName.toLowerCase() < b.sectionArticleName.toLowerCase() ? -1 : 1))\n\t\t\t\t\t\t\tarticleResults.total = formattedResults.total\n\t\t\t\t\t\t\tresolve(articleResults)\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\treject(`Help page with path \"${sectionName}\" not found`)\n\t\t\t\t\t})\n\t\t\t\t\t.catch(error => {\n\t\t\t\t\t\tif (error.response !== null && typeof error.response !== 'undefined' && error.response.status === 401)\n\t\t\t\t\t\t\tErrorHelper.handleApiError(error)\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\treject(error)\n\t\t\t\t\t})\n\t\t\t)\n\t\t})\n\t}\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport ISearchResultsApiClient from './contracts'\nimport { ISearchResultsList, ISection } from '../SearchResultsStateManager/contracts'\nimport { injectable } from 'inversify'\n\n@injectable()\nexport class MockSearchResultsApiClient implements ISearchResultsApiClient {\n\tsearchResutsList: ISearchResultsList\n\t/**\n\t *\n\t */\n\tconstructor () {\n\t\tthis.searchResutsList = {\n\t\t\ttotal: 2,\n\t\t\titems: [\n\t\t\t\t{\n\t\t\t\t\tproductCode: 'CareWatch',\n\t\t\t\t\tsectionList: [{ sectionName: 'MDS', sectionId: '4tkzx1a5afbk4x4e5w2p7f58m4' } as ISection],\n\t\t\t\t\tarticleName: 'Article-2',\n\t\t\t\t\tarticlePath: '/article-1',\n\t\t\t\t\tarticleDescription: 'Test MDN',\n\t\t\t\t\tarticlePublishDate: 'Nov 23,2020',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tproductCode: 'UB Watch',\n\t\t\t\t\tsectionList: [{ sectionName: 'FAQ', sectionId: '4nwtf7gffv5295g497g0sfe8d1' } as ISection],\n\t\t\t\t\tarticleName: 'Article-2',\n\t\t\t\t\tarticlePath: '/article-2',\n\t\t\t\t\tarticleDescription: 'Test UB Watch',\n\t\t\t\t\tarticlePublishDate: 'Nov 23,2020',\n\t\t\t\t},\n\t\t\t],\n\t\t} as ISearchResultsList\n\t}\n\n\tgetSearchResults(param: string): Promise {\n\t\tconst data = this.searchResutsList\n\t\treturn new Promise(resolve => {\n\t\t\tresolve(data)\n\t\t})\n\t}\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\n/**\n * represents a collection of validation responses resulting\n * from attempts to validate the values of the current state.\n * this may become a higher-level reusable concept in future revs.\n *\n * @class ValidationResult\n */\nexport class ValidationResult {\n\t/**\n\t * validation results are a collection of keyvalue pairs\n\t * keys are strings related to the field name being validated\n\t * values are validation error messages\n\t *\n\t * @type {{[key: string]: string}}\n\t * @memberof ValidationResult\n\t */\n\tresults: { [key: string]: string }\n\n\tconstructor() {\n\t\tthis.results = {}\n\t}\n\n\t/**\n\t * add a keyvalue pair signifying a validation error for a specific field\n\t *\n\t * @param {string} fieldName\n\t * @param {string} message\n\t * @memberof ValidationResult\n\t */\n\tsetMessage(fieldName: string, message: string) {\n\t\tthis.results[fieldName] = message\n\t}\n\n\t/**\n\t * return true if a given field by name is valid\n\t *\n\t * @param {string} fieldName\n\t * @returns {boolean}\n\t * @memberof ValidationResult\n\t */\n\tisFieldValid(fieldName: string): boolean {\n\t\treturn this.results[fieldName] == null\n\t}\n\n\t/**\n\t * return true of all fields are valid\n\t *\n\t * @returns {boolean}\n\t * @memberof ValidationResult\n\t */\n\tisAllFieldsValid(): boolean {\n\t\treturn Object.keys(this.results).length === 0\n\t}\n\n\t/**\n\t * get the validation model for a specific field\n\t *\n\t * @param {string} fieldName\n\t * @returns\n\t * @memberof ValidationResult\n\t */\n\tgetMessage(fieldName: string) {\n\t\treturn this.results[fieldName]\n\t}\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport { ISearchResultsStateManager, ISearchResultsList, ISearchResults, IPaginationInfo } from './contracts'\nimport { injectable } from 'inversify'\nimport { observable, action, computed } from 'mobx'\nimport { injectProperty } from '../../configuration/ServiceLocator'\nimport ISearchResultsApiClient from '../SearchResultsApiClient/contracts'\nimport { ValidationResult } from '../../../src/utils/ValidationResult/ValidationResult'\nimport { isEmpty } from 'validator'\n\n@injectable()\nexport class SearchResultsStateManager implements ISearchResultsStateManager {\n\t@observable\n\tresults: ISearchResultsList\n\n\t@observable\n\tpaginationInfo: IPaginationInfo\n\n\t@observable\n\tsearchTerm: string\n\n\t@injectProperty('ISearchResultsApiClient')\n\tpublic searchResultApiClient!: ISearchResultsApiClient\n\n\t/**\n\t *\n\t */\n\tconstructor () {\n\t\tthis.results = { total: 0, items: [] } as ISearchResultsList\n\t\tthis.searchTerm = ''\n\t\tthis.paginationInfo = { pageIndex: 0 } as IPaginationInfo\n\t}\n\n\t@action setSearchResults(results: ISearchResultsList, skip: number): void {\n\t\tif (skip > 0) {\n\t\t\tthis.results.items = [...this.results.items, ...results.items]\n\t\t\tthis.results.total = this.results.total + results.total\n\t\t}\n\t\telse {\n\t\t\tthis.results.items = results.items\n\t\t\tthis.results.total = results.total\n\t\t}\n\t}\n\n\tgetPublishDateStr(utcDate: any): string {\n\t\tif (utcDate && utcDate != '') {\n\t\t\tconst date = new Date(utcDate)\n\t\t\treturn `${date.toLocaleString('default', { month: 'long' })} ${date.getDate()}, ${date.getFullYear()}`\n\t\t}\n\t\treturn ''\n\t}\n\n\t@action setSearchTerm(searchTerm: string): void {\n\t\tthis.searchTerm = searchTerm\n\t}\n\n\t@computed get validateSearchTerm(): ValidationResult {\n\t\tconst result = new ValidationResult()\n\t\tif (isEmpty(this.searchTerm)) {\n\t\t\tresult.setMessage('searchTerm', 'Search field is required.')\n\t\t}\n\t\treturn result\n\t}\n\n\n\t@action getSearchResults(searchTerm: string, first: number, skip: number, searchType: string): Promise {\n\t\t/**Added this for avoiding the multiple time state updates */\n\n\t\treturn this.searchResultApiClient\n\t\t\t.getSearchResults(searchTerm, first, skip)\n\t\t\t.then(response => {\n\t\t\t\tif (response.total > 0)\n\t\t\t\t\tthis.setSearchResults(response, skip)\n\t\t\t\telse\n\t\t\t\t\tif (searchType != \"scroll\")\n\t\t\t\t\t\tthis.setSearchResults(response, skip)\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.results.total = 0;\n\t\t\t})\n\t\t\t.catch(error => {\n\t\t\t\tconsole.log(error)\n\t\t\t\tthrow new Error('An error occurred when fetching the search results')\n\t\t\t})\n\t}\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport ISearchResultsApiClient from './contracts'\nimport { ISearchResultsList, ISearchResults, ISection, ISearchProducts } from '../SearchResultsStateManager/contracts'\nimport { injectProperty } from '../../configuration/ServiceLocator'\nimport { injectable } from 'inversify'\nimport { SearchResultQuery } from './SearchResultQuery'\nimport { IApiClient } from '../ApiClient/IApiClient'\nimport axios from 'axios'\nimport { SettingsManager } from '../../configuration/SettingsManager'\nimport { IUserSessionMiddleware } from '../middleware/UserSessionMiddleware/contracts'\nimport { ErrorHelper } from '../../utils/ErrorHelper'\nimport jwt_decode from 'jwt-decode'\nimport moment from 'moment'\n\n@injectable()\nexport class SearchResultsApiClient implements ISearchResultsApiClient {\n\t@injectProperty('IApiClient')\n\tprivate readonly apiClient!: IApiClient\n\n\t@injectProperty('IUserSessionMiddleware')\n\tprivate readonly userSessionMiddleware!: IUserSessionMiddleware\n\n\tgetSearchResults(searchTerm: string, perPage: number, skip: number): Promise {\n\t\tconst url = `${SettingsManager.REACT_APP_MAIN_API_BASE_URL().value}`\n\t\tlet prodList: string[] = [];\n\t\tlet prodNamesList = [] as ISearchProducts[];\n\t\tthis.apiClient.getCMSToken().then((token: string) => {\n\t\t\tlet tokenObject: any = jwt_decode(token)\n\t\t\ttokenObject.AbilityProductCategoryClaimV2.productCategories.map((item: any, index: number) => {\n\t\t\t\titem.HomeIndexProductsViewModel.map((productItem: any, index: number) => {\n\t\t\t\t\tprodList.push(\n\t\t\t\t\t\tproductItem.Code\n\t\t\t\t\t)\n\t\t\t\t\tprodNamesList.push({\n\t\t\t\t\t\tproductCode: productItem.Code,\n\t\t\t\t\t\tproductName: productItem.Name\n\t\t\t\t\t} as ISearchProducts\n\t\t\t\t\t)\n\t\t\t\t})\n\t\t\t})\n\t\t})\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.userSessionMiddleware.loadSessionJwt(false).then(x =>\n\t\t\t\taxios\n\t\t\t\t\t.post(url, {\n\t\t\t\t\t\tquery: SearchResultQuery(),\n\t\t\t\t\t\tvariables: { \"parameters\": JSON.stringify({ productList: prodList, filter: searchTerm, first: perPage, skip: skip }) },\n\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t\t\t\tAuthorization: `Bearer ${x}`,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t})\n\t\t\t\t\t.then((response: any) => {\n\t\t\t\t\t\tconst formattedResults = { items: [], total: 0 } as ISearchResultsList\n\t\t\t\t\t\tif (response.data.data.myAbilityHelpSearchQuery.length > 0) {\n\t\t\t\t\t\t\tconst data = response.data.data.myAbilityHelpSearchQuery\n\t\t\t\t\t\t\tdata.map((item: any, index: number) => {\n\t\t\t\t\t\t\t\tconst searchResult = {\n\t\t\t\t\t\t\t\t\tarticleDescription: item.wysiwygContent.previewText,\n\t\t\t\t\t\t\t\t\tarticleName: item.displayText,\n\t\t\t\t\t\t\t\t\tarticlePath: item.path,\n\t\t\t\t\t\t\t\t\tarticlePublishDate: moment(item.publishedUtc).format('LL'),\n\t\t\t\t\t\t\t\t\tproductCode: item.productContent.productName,\n\t\t\t\t\t\t\t\t\tproductName: prodNamesList[prodNamesList.findIndex(x => x.productCode == item.productContent.productName)].productName,\n\t\t\t\t\t\t\t\t\tsectionList: item.sectionTags != null ? this.getSectionForEachArticle(item.sectionTags) : []\n\t\t\t\t\t\t\t\t} as ISearchResults\n\t\t\t\t\t\t\t\tformattedResults.items.push(searchResult)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tformattedResults.total = response.data.data.myAbilityHelpSearchQuery.length\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tformattedResults.total = 0;\n\t\t\t\t\t\tresolve(formattedResults)\n\t\t\t\t\t})\n\t\t\t\t\t.catch((error: any) => {\n\t\t\t\t\t\tErrorHelper.handleApiError(error)\n\t\t\t\t\t\treject(error)\n\t\t\t\t\t})\n\t\t\t)\n\t\t})\n\t}\n\n\tgetSectionForEachArticle(sections: any): ISection[] {\n\t\tlet results = [] as ISection[]\n\t\tsections.termContentItems.map((section: any, sectionIndex: number) => {\n\t\t\tresults.push({\n\t\t\t\tsectionId: section.contentItemId,\n\t\t\t\tsectionName: section.displayText\n\t\t\t} as ISection\n\t\t\t)\n\t\t})\n\t\tif (results.length != null)\n\t\t\tresults.sort((a, b) => (a.sectionName.toLowerCase() < b.sectionName.toLowerCase() ? -1 : 1))\n\t\treturn results\n\t}\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nexport const SearchResultQuery = () => {\n return `query MyQuery($parameters: String!) {\n myAbilityHelpSearchQuery(parameters: $parameters) {\n displayText\n path\n publishedUtc\n productContent {\n productName\n }\n sectionTags {\n termContentItems {\n displayText\n contentItemId\n }\n }\n wysiwygContent {\n previewText\n }\n }\n}`\n}","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport axios from 'axios'\nimport { SettingsManager } from '../../configuration/SettingsManager'\nimport { IApiClient } from './IApiClient'\nimport { IUserSessionMiddleware } from '../middleware/UserSessionMiddleware/contracts'\nimport { injectProperty } from '../../configuration/ServiceLocator'\nimport { injectable } from 'inversify'\nimport { isObject } from 'util'\n\n@injectable()\nexport class ApiClient implements IApiClient {\n\tbaseUrl: string\n\ttimeout: number\n\n\t@injectProperty('IUserSessionMiddleware')\n\tprivate readonly userSessionMiddleware!: IUserSessionMiddleware\n\n\tconstructor() {\n\t\tthis.baseUrl = `${SettingsManager.REACT_APP_MAIN_API_BASE_URL().value}`\n\t\tthis.timeout = SettingsManager.REACT_APP_MAIN_API_BASE_URL_REQUEST_TIMEOUT().value\n\t}\n\n\tgraphQlWithAxios(query: string): Promise {\n\t\t// return this.userSessionMiddleware\n\t\t// .loadSessionJwt()\n\t\t// .then(token => {\n\t\tconst instance = axios.create({\n\t\t\tbaseURL: this.baseUrl,\n\t\t\ttimeout: this.timeout,\n\t\t\theaders: {\n\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\tAccept: 'application/json',\n\t\t\t\t// Authorization: `Bearer ${token}`,\n\t\t\t},\n\t\t})\n\n\t\tconst instanceQuery = isObject(query)\n\t\t\t? query\n\t\t\t: JSON.stringify({\n\t\t\t\tquery: query,\n\t\t\t })\n\n\t\treturn instance.post('', instanceQuery)\n\t\t// })\n\t\t// .then((response) => {\n\t\t// debugger;\n\t\t// })\n\t}\n\n\tgetCMSToken(): Promise {\n\t\tconst cmsToken = localStorage.getItem(SettingsManager.REACT_APP_ProductCategories_TOKEN_NAME)\n\t\treturn new Promise(resolve => {\n\t\t\tresolve(JSON.stringify(cmsToken))\n\t\t})\n\t}\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport { injectable } from 'inversify'\nimport { IProductInfo, ISectionInfo, IArticleInfo } from '../ProductContentStateManager/contracts'\nimport { IProducts, ISection } from '../ProductStateManager/contracts'\nimport IProductsApiClient from './contracts'\n\n@injectable()\nexport class MockProductsApiClient implements IProductsApiClient {\n\tpublic productInfo: IProductInfo\n\n\tpublic products: IProducts[]\n\n\tconstructor() {\n\t\tthis.productInfo = {\n\t\t\tproductName: 'CAREWATCH',\n\t\t\tproductDescription: 'Our mission at Carewatch is to provide high quality care outcomes for vulnerable people who want to live at home, independently.',\n\t\t\tsectionList: [\n\t\t\t\t{\n\t\t\t\t\tsectionName: 'Frequently Asked Questions',\n\t\t\t\t\tarticleList: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontentItemId: '4wh3zak4hk4tk19vkg3wajex4g',\n\t\t\t\t\t\t\tdisplayText: 'FAQ Scheduling Management Tools',\n\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontentItemId: '4h2v5wfdq1vne332r1nffkbhmv',\n\t\t\t\t\t\t\tdisplayText: 'FAQ ICD-10 Clinical Categories Lookup Tool',\n\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontentItemId: '40z8qacpns4vhtmsrxmxch5mcv',\n\t\t\t\t\t\t\tdisplayText: 'FAQ ICD-10 NTA Comorbidity Lookup Tool',\n\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontentItemId: '47dp2kz399x7twzq51mfgav4cp',\n\t\t\t\t\t\t\tdisplayText: 'FAQ Transmission Watch',\n\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t],\n\t\t\t\t} as ISectionInfo,\n\n\t\t\t\t{\n\t\t\t\t\tsectionName: 'Introduction and Navigation',\n\t\t\t\t\tarticleList: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontentItemId: '4pfvam6xzjbrw6m52p9t357jmz',\n\t\t\t\t\t\t\tdisplayText: 'IandN Scheduling Management Tools​',\n\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontentItemId: '486x9q5jzha6zshv14yzhcsdms',\n\t\t\t\t\t\t\tdisplayText: 'IandN ICD-10 Clinical Categories Lookup Tool',\n\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontentItemId: '4z49qc8ns5ajc4yybhnvmryrc0',\n\t\t\t\t\t\t\tdisplayText: 'IandN ICD-10 NTA Comorbidity Lookup Tool',\n\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontentItemId: '4dhqcyvdfdm9c3psm5gsnthgmm',\n\t\t\t\t\t\t\tdisplayText: 'IandN Transmission Watch',\n\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t],\n\t\t\t\t} as ISectionInfo,\n\n\t\t\t\t{\n\t\t\t\t\tsectionName: 'MDS',\n\t\t\t\t\tarticleList: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontentItemId: '41ey44b6ktrpj5b2wx7hq7c2n3',\n\t\t\t\t\t\t\tdisplayText: 'MDS Scheduling Management Tools​',\n\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontentItemId: '4pekw346zyx00sk4yeg95sxp4q',\n\t\t\t\t\t\t\tdisplayText: 'ICD-10 Clinical Categories Lookup Tool',\n\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontentItemId: '4hmjfm6yagjeb5w49ttpqhkewa',\n\t\t\t\t\t\t\tdisplayText: 'ICD-10 NTA Comorbidity Lookup Tool',\n\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontentItemId: '43e00e63wyk8t69qtahgrw3hw9',\n\t\t\t\t\t\t\tdisplayText: 'MDS Transmission Watch',\n\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t],\n\t\t\t\t} as ISectionInfo,\n\n\t\t\t\t{\n\t\t\t\t\tsectionName: 'Release Notes',\n\t\t\t\t\tarticleList: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontentItemId: '4gbcb393a8sffzz28nzgxsm64v',\n\t\t\t\t\t\t\tdisplayText: 'RN Scheduling Management Tools​',\n\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontentItemId: '46q841xvcpbdwszfepd9tbehw2',\n\t\t\t\t\t\t\tdisplayText: 'RN ICD-10 Clinical Categories Lookup Tool',\n\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontentItemId: '48s0yt1ympa4ywj3caqynhjwnh',\n\t\t\t\t\t\t\tdisplayText: 'RN ICD-10 NTA Comorbidity Lookup Tool',\n\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontentItemId: '4x0r1eqj2c1aavwp4knvsajq5y',\n\t\t\t\t\t\t\tdisplayText: 'RN Transmission Watch',\n\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t],\n\t\t\t\t} as ISectionInfo,\n\n\t\t\t\t{\n\t\t\t\t\tsectionName: 'Quality',\n\t\t\t\t\tarticleList: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontentItemId: '49bna13cxfgdbr28a3fp1jy8d7',\n\t\t\t\t\t\t\tdisplayText: 'Quality Scheduling Management Tools​',\n\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontentItemId: '48ya7e4108rt2trehpgk922f5s',\n\t\t\t\t\t\t\tdisplayText: 'Quality ICD-10 Clinical Categories Lookup Tool',\n\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontentItemId: '4bs9v4b49erhr5dqv2qq4txgc8',\n\t\t\t\t\t\t\tdisplayText: 'Quality ICD-10 NTA Comorbidity Lookup Tool',\n\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontentItemId: '47cv3er179x56v1t4w23zznrcc',\n\t\t\t\t\t\t\tdisplayText: 'Quality Transmission Watch',\n\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t],\n\t\t\t\t} as ISectionInfo,\n\n\t\t\t\t{\n\t\t\t\t\tsectionName: 'Performance',\n\t\t\t\t\tarticleList: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontentItemId: '422s7hcdmq0t11t7nxkrnnzgck',\n\t\t\t\t\t\t\tdisplayText: 'Performance Scheduling Management Tools​',\n\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontentItemId: '456dx8j1mv84rzn7j1f0we09xw',\n\t\t\t\t\t\t\tdisplayText: 'Performance ICD-10 Clinical Categories Lookup Tool',\n\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontentItemId: '4ns96xm7cdnafx891jn94b2q42',\n\t\t\t\t\t\t\tdisplayText: 'Performance ICD-10 NTA Comorbidity Lookup Tool',\n\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontentItemId: '4b7jbpgah3t3arrajrc3vevjn5',\n\t\t\t\t\t\t\tdisplayText: 'Performance Transmission Watch',\n\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t],\n\t\t\t\t} as ISectionInfo,\n\t\t\t],\n\t\t} as IProductInfo\n\n\t\tthis.products = [\n\t\t\t{\n\t\t\t\tproductName: 'CAREWATCH',\n\t\t\t\tproductCode: 'CAREWATCH',\n\t\t\t\tsectionList: [{ sectionName: 'Frequently Asked Questions' } as ISection, { sectionName: 'Introduction and Navigation' } as ISection, { sectionName: 'MDS' } as ISection, { sectionName: 'Release Notes' } as ISection, { sectionName: 'Quality' } as ISection, { sectionName: 'Performance' } as ISection],\n\t\t\t} as IProducts,\n\t\t\t{\n\t\t\t\tproductName: 'UBWATCH',\n\t\t\t\tproductCode: 'UBWATCH',\n\t\t\t\tsectionList: [{ sectionName: 'Frequently Asked Questions' } as ISection, { sectionName: 'Introduction and Navigation' } as ISection, { sectionName: 'MDS' } as ISection, { sectionName: 'Release Notes' } as ISection, { sectionName: 'Quality' } as ISection, { sectionName: 'Performance' } as ISection],\n\t\t\t} as IProducts,\n\t\t\t{\n\t\t\t\tproductName: 'EASE All Payer',\n\t\t\t\tproductCode: 'EASE All Payer',\n\t\t\t\tsectionList: [{ sectionName: 'Frequently Asked Questions' } as ISection, { sectionName: 'Introduction and Navigation' } as ISection, { sectionName: 'MDS' } as ISection, { sectionName: 'Release Notes' } as ISection, { sectionName: 'Quality' } as ISection, { sectionName: 'Performance' } as ISection],\n\t\t\t} as IProducts,\n\t\t\t{\n\t\t\t\tproductName: 'COMPLETE',\n\t\t\t\tproductCode: 'COMPLETE',\n\t\t\t\tsectionList: [{ sectionName: 'Frequently Asked Questions' } as ISection, { sectionName: 'Introduction and Navigation' } as ISection, { sectionName: 'MDS' } as ISection, { sectionName: 'Release Notes' } as ISection, { sectionName: 'Quality' } as ISection, { sectionName: 'Performance' } as ISection],\n\t\t\t} as IProducts,\n\t\t\t{\n\t\t\t\tproductName: 'OPTIMIZE',\n\t\t\t\tproductCode: 'OPTIMIZE',\n\t\t\t\tsectionList: [{ sectionName: 'Frequently Asked Questions' } as ISection, { sectionName: 'Introduction and Navigation' } as ISection, { sectionName: 'MDS' } as ISection, { sectionName: 'Release Notes' } as ISection, { sectionName: 'Quality' } as ISection, { sectionName: 'Performance' } as ISection],\n\t\t\t} as IProducts,\n\t\t] //get productList from jwt\n\t}\n\tgetProductsfromJwt(JwtToken: string): Promise {\n\t\treturn new Promise(resolve => {\n\t\t\tsetTimeout(() => resolve(this.products), 100)\n\t\t})\n\t}\n\n\tgetProductInfoByProductCode(productCode: string): Promise {\n\t\tconst $this = this\n\t\treturn new Promise(resolve => {\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (productCode === 'CAREWATCH') {\n\t\t\t\t\tresolve($this.productInfo)\n\t\t\t\t} else {\n\t\t\t\t\tresolve({\n\t\t\t\t\t\tproductName: 'UBWATCH',\n\t\t\t\t\t\tproductDescription: 'ABILITY UBWATCH helps coordinate financial UB records, tracks patterns and trends, and makes sure you’re being reimbursed for the services provided. Ensure consistency between your MDS and claims by adding ABILITY UBWATCH to your ABILITY CAREWATCH® service',\n\t\t\t\t\t\tsectionList: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tsectionName: 'Frequently Asked Questions',\n\t\t\t\t\t\t\t\tarticleList: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tcontentItemId: '4hwb8yrq86hz1219ke2vr8v2dq',\n\t\t\t\t\t\t\t\t\t\tdisplayText: 'FAQ Scheduling Management Tools 1',\n\t\t\t\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tcontentItemId: '4gd33q6wq4xegstdxjn25ab9ne',\n\t\t\t\t\t\t\t\t\t\tdisplayText: 'FAQ ICD-10 Clinical Categories Lookup Tool',\n\t\t\t\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tcontentItemId: '4k0n8rg6105a1r6twemxbx4c58',\n\t\t\t\t\t\t\t\t\t\tdisplayText: 'FAQ ICD-10 NTA Comorbidity Lookup Tool',\n\t\t\t\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tcontentItemId: '4math0w9gc33zrj0wm0bcf33ma',\n\t\t\t\t\t\t\t\t\t\tdisplayText: 'FAQ Transmission Watch',\n\t\t\t\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t} as ISectionInfo,\n\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tsectionName: 'Introduction and Navigation',\n\t\t\t\t\t\t\t\tarticleList: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tcontentItemId: '4j0rskgpayexawd25s0z8hj5dj',\n\t\t\t\t\t\t\t\t\t\tdisplayText: 'IandN Scheduling Management Tools​',\n\t\t\t\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tcontentItemId: '486x9q5jzha6zshv14yzhcsdms',\n\t\t\t\t\t\t\t\t\t\tdisplayText: 'IandN ICD-10 Clinical Categories Lookup Tool',\n\t\t\t\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tcontentItemId: '4vx3e4g5gfr7atdnvfz0aq8jxs',\n\t\t\t\t\t\t\t\t\t\tdisplayText: 'IandN ICD-10 NTA Comorbidity Lookup Tool',\n\t\t\t\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tcontentItemId: '48j2egrphcqqywc976c95qb5mf',\n\t\t\t\t\t\t\t\t\t\tdisplayText: 'IandN Transmission Watch',\n\t\t\t\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t} as ISectionInfo,\n\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tsectionName: 'MDS',\n\t\t\t\t\t\t\t\tarticleList: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tcontentItemId: '4ve54wwtyst1zy6t9gacevrkxv',\n\t\t\t\t\t\t\t\t\t\tdisplayText: 'MDS Scheduling Management Tools​',\n\t\t\t\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tcontentItemId: '4pry24q20bsvwz42nr62k1d1ce',\n\t\t\t\t\t\t\t\t\t\tdisplayText: 'ICD-10 Clinical Categories Lookup Tool',\n\t\t\t\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tcontentItemId: '4asw3x4a1vk0nz7cryzrjtm6xq',\n\t\t\t\t\t\t\t\t\t\tdisplayText: 'ICD-10 NTA Comorbidity Lookup Tool',\n\t\t\t\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tcontentItemId: '40b4555gt0hff07ks205cmfj55',\n\t\t\t\t\t\t\t\t\t\tdisplayText: 'MDS Transmission Watch',\n\t\t\t\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t} as ISectionInfo,\n\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tsectionName: 'Release Notes',\n\t\t\t\t\t\t\t\tarticleList: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tcontentItemId: '4fs35q64ccvwhr5qmrts44y14g',\n\t\t\t\t\t\t\t\t\t\tdisplayText: 'RN Scheduling Management Tools​',\n\t\t\t\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tcontentItemId: '4h35vnmz52g1a3vq2d3dq7mtwm',\n\t\t\t\t\t\t\t\t\t\tdisplayText: 'RN ICD-10 Clinical Categories Lookup Tool',\n\t\t\t\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tcontentItemId: '4y27tjmmn80twz9k7cp8dzyqd0',\n\t\t\t\t\t\t\t\t\t\tdisplayText: 'RN ICD-10 NTA Comorbidity Lookup Tool',\n\t\t\t\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tcontentItemId: '4ry7pkpjetgrf59bdr2mjqfam2',\n\t\t\t\t\t\t\t\t\t\tdisplayText: 'RN Transmission Watch',\n\t\t\t\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t} as ISectionInfo,\n\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tsectionName: 'Quality',\n\t\t\t\t\t\t\t\tarticleList: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tcontentItemId: '41gvx4qnawgfh1pdbvsbd5eqd1',\n\t\t\t\t\t\t\t\t\t\tdisplayText: 'Quality Scheduling Management Tools​',\n\t\t\t\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tcontentItemId: '4rw4fvj9nmree080e50czef6cb',\n\t\t\t\t\t\t\t\t\t\tdisplayText: 'Quality ICD-10 Clinical Categories Lookup Tool',\n\t\t\t\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tcontentItemId: '46tqajdrjat6n6q123wsejdqdv',\n\t\t\t\t\t\t\t\t\t\tdisplayText: 'Quality ICD-10 NTA Comorbidity Lookup Tool',\n\t\t\t\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tcontentItemId: '4kf5r1kxcf682z7zt3s5005cms',\n\t\t\t\t\t\t\t\t\t\tdisplayText: 'Quality Transmission Watch',\n\t\t\t\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t} as ISectionInfo,\n\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tsectionName: 'Performance',\n\t\t\t\t\t\t\t\tarticleList: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tcontentItemId: '4snwbw0h9m84r6sg6sy6bw904v',\n\t\t\t\t\t\t\t\t\t\tdisplayText: 'Performance Scheduling Management Tools​',\n\t\t\t\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tcontentItemId: '4rc8c6qxkyjqrzy1904mavzh5j',\n\t\t\t\t\t\t\t\t\t\tdisplayText: 'Performance ICD-10 Clinical Categories Lookup Tool',\n\t\t\t\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tcontentItemId: '4fp35jqxxgepd6xx2p4626dqn5',\n\t\t\t\t\t\t\t\t\t\tdisplayText: 'Performance ICD-10 NTA Comorbidity Lookup Tool',\n\t\t\t\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tcontentItemId: '4b0s906sw16f33wmdv9h3czgx2',\n\t\t\t\t\t\t\t\t\t\tdisplayText: 'Performance Transmission Watch',\n\t\t\t\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t} as ISectionInfo,\n\t\t\t\t\t\t],\n\t\t\t\t\t} as IProductInfo)\n\t\t\t\t}\n\t\t\t}, 100)\n\t\t})\n\t}\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport { injectable, inject } from 'inversify'\nimport { observable, action } from 'mobx'\n// import { injectProperty } from '../../submodules/arc/configuration/ServiceLocator'\nimport { injectProperty } from '../../configuration/ServiceLocator'\n\nimport { IProductContentStateManager, IProductInfo, IArticleInfo, ISectionInfo } from './contracts'\nimport IProductsApiClient from '../ProductsApiClient/contracts'\n\n@injectable()\nexport class ProductContentStateManager implements IProductContentStateManager {\n\t@observable\n\tproductInfo: IProductInfo\n\n\t@injectProperty('IProductsApiClient')\n\tpublic productsApiClient!: IProductsApiClient\n\n\tconstructor () {\n\t\tthis.productInfo = {\n\t\t\tproductName: '',\n\t\t\tproductDescription: '',\n\t\t\tsectionList: [\n\t\t\t\t{\n\t\t\t\t\tsectionId: '',\n\t\t\t\t\tsectionName: '',\n\t\t\t\t\tarticleList: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontentItemId: '',\n\t\t\t\t\t\t\tdisplayText: '',\n\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t],\n\t\t\t\t} as ISectionInfo,\n\t\t\t],\n\t\t} as IProductInfo\n\t}\n\n\t@action setProductInfo(productInfo: IProductInfo) {\n\t\tthis.productInfo = productInfo\n\t}\n\n\t@action getProductInfoByProductCode(productCode: string): Promise {\n\t\treturn this.productsApiClient\n\t\t\t.getProductInfoByProductCode(productCode)\n\t\t\t.then(response => this.setProductInfo(response))\n\t\t\t.catch(error => {\n\t\t\t\tconsole.log(error)\n\t\t\t\tthrow new Error('an error occurred when fetching the productInfo')\n\t\t\t})\n\t}\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport { injectable } from 'inversify'\nimport { action, computed, observable } from 'mobx'\nimport { isEmpty } from 'validator'\nimport { injectProperty } from '../../configuration/ServiceLocator'\nimport { ValidationResult } from '../../utils/ValidationResult/ValidationResult'\nimport { IProductsState } from '../../views/Product/Product'\nimport IProductsApiClient from '../ProductsApiClient/contracts'\nimport { IProducts, IProductStateManager, ISection } from './contracts'\n\n@injectable()\nexport class ProductStateManager implements IProductStateManager {\n\t@observable\n\tproducts: IProducts[] =\n\t\t[{ productName: '', productCode: '', sectionList: [{ sectionName: '', sectionId: '' } as ISection] } as IProducts]\n\n\t@observable\n\tselectedProduct: string\n\n\t@observable\n\tselectedProductName: string\n\n\t@observable\n\tselectedType: string\n\n\t@observable\n\tselectedSection: string\n\n\t@observable\n\tselectedArticle: string\n\n\t@observable\n\tsearchTerm: string\n\n\t@injectProperty('IProductsApiClient')\n\tpublic productsApiClient!: IProductsApiClient\n\n\tconstructor () {\n\t\tthis.products = [{ productName: '', productCode: '', sectionList: [{ sectionName: '', sectionId: '' } as ISection] } as IProducts]\n\t\tthis.selectedProduct = ''\n\t\tthis.selectedType = ''\n\t\tthis.selectedSection = ''\n\t\tthis.selectedArticle = ''\n\t\tthis.searchTerm = ''\n\t\tthis.selectedProductName = ''\n\t}\n\n\t@action setProducts(products: IProducts[]) {\n\t\tthis.products = products\n\t\t//this.selectedProduct = this.products.length > 0 ? this.products[0].productCode : ''\n\t}\n\n\t@action getProductsfromJwt(JwtToken: string): Promise {\n\t\treturn this.productsApiClient\n\t\t\t.getProductsfromJwt(JwtToken)\n\t\t\t.then(response => this.setProducts(response))\n\t\t\t.catch(error => {\n\t\t\t\tconsole.log(error)\n\t\t\t\tthrow new Error('an error occurred when fetching the products')\n\t\t\t})\n\t}\n\n\t@action setSelectedProduct(productCode: string, productName: string) {\n\t\tthis.selectedProduct = productCode\n\t\tthis.selectedProductName = productName\n\t}\n\n\t@action setSelectedType(type: string) {\n\t\tthis.selectedType = type\n\t}\n\n\n\t@action setSelectedSection(sectionId: string) {\n\t\tthis.selectedSection = sectionId\n\t}\n\n\t@action setSelectedArticle(contenItemId: string) {\n\t\tthis.selectedArticle = contenItemId\n\t}\n\n\t@computed get validateSearchTerm(): ValidationResult {\n\t\tconst result = new ValidationResult()\n\t\tif (isEmpty(this.searchTerm)) {\n\t\t\tresult.setMessage('searchTerm', 'Search field is required.')\n\t\t}\n\t\treturn result\n\t}\n\n\t@action setSearchTerm(searchTerm: string): void {\n\t\tthis.searchTerm = searchTerm\n\t}\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nexport const productContentQuery = (productCode: string) => {\n\treturn `query MyQuery {\n aBILITYPage(where: {productContent: {productName: \"${productCode}\"}}, orderBy: {publishedUtc: DESC}) {\n productContent {\n productName\n }\n contentItemId\n sectionTags {\n termContentItems {\n contentItemId\n displayText\n }\n }\n displayText\n path\n }\n productDescription(where: {productContent: {productName: \"${productCode}\"}}) {\n productContent {\n productName\n }\n wysiwygContent {\n markup\n }\n }\n pdf(where: {productContent: {productName: \"${productCode}\"}}, orderBy: {publishedUtc: ASC}, first: 1000) {\n pdfDocument {\n relativePdfPath\n }\n sectionTags {\n termContentItems {\n displayText\n contentItemId\n }\n }\n productContent {\n productName\n }\n displayText\n contentItemId\n }\n}`\n}\n\nexport const productSectionListQuery = (productsformJWT: string[]) => {\n\treturn `query MyQuery {\n aBILITYPage(where: {productContent: {productName_in: [${productsformJWT}]}}, orderBy: {publishedUtc: DESC}, first: 1000) {\n productContent {\n productName\n }\n contentItemId\n sectionTags {\n termContentItems {\n contentItemId\n displayText\n }\n }\n displayText\n }\n pdf(where: {productContent: {productName_in: [${productsformJWT}]}}, orderBy: {publishedUtc: ASC}, first: 1000) {\n pdfDocument {\n relativePdfPath\n }\n sectionTags {\n termContentItems {\n displayText\n contentItemId\n }\n }\n productContent {\n productName\n }\n }\n}`\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport IProducstApiClient from './contracts'\nimport { IArticleInfo, IProductInfo, ISectionInfo } from '../ProductContentStateManager/contracts'\nimport { IProducts, ISection } from '../ProductStateManager/contracts'\nimport { injectable } from 'inversify'\nimport { IApiClient } from '../ApiClient/IApiClient'\nimport { injectProperty } from '../../configuration/ServiceLocator'\nimport { ILandingPageStateManager, IProductCategoryList } from '../LandingPageStateManager/contracts'\nimport jwt_decode from 'jwt-decode'\nimport { productContentQuery, productSectionListQuery } from './ProductQuery'\nimport { SettingsManager } from '../../configuration/SettingsManager'\nimport { IUserSessionMiddleware } from '../middleware/UserSessionMiddleware/contracts'\nimport axios from 'axios'\nimport { ErrorHelper } from '../../utils/ErrorHelper'\n\n@injectable()\nexport class ProductsApiClient implements IProducstApiClient {\n\t@injectProperty('IApiClient')\n\tprivate readonly apiClient!: IApiClient\n\n\t@injectProperty('IUserSessionMiddleware')\n\tprivate readonly userSessionMiddleware!: IUserSessionMiddleware\n\n\tgetProductsfromJwt(JwtToken: string): Promise {\n\t\t// throw new Error('Method not implemented.')\n\t\treturn new Promise(resolve => {\n\t\t\tconst productResult = [] as IProducts[]\n\t\t\tthis.apiClient.getCMSToken().then((token: string) => {\n\t\t\t\tconst tokenObject: any = jwt_decode(token)\n\t\t\t\ttokenObject.AbilityProductCategoryClaimV2.productCategories.map((item: any, index: number) => {\n\t\t\t\t\titem.HomeIndexProductsViewModel.map((productItem: any, index: number) => {\n\t\t\t\t\t\tproductResult.push({\n\t\t\t\t\t\t\tproductCode: productItem.Code,\n\t\t\t\t\t\t\tproductName: productItem.Name,\n\t\t\t\t\t\t} as IProducts)\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\tproductResult.sort((a, b) => (a.productName < b.productName ? -1 : 1))\n\t\t\t\tresolve(this.getSectionsforProduct(productResult))\n\t\t\t})\n\t\t})\n\t}\n\n\tgetSectionsforProduct(productList: IProducts[]): Promise {\n\t\t// Actual code\n\t\tconst url = `${SettingsManager.REACT_APP_MAIN_API_BASE_URL().value}`\n\t\tconst productsformJWT = Array()\n\t\tproductList.forEach((product: any, index: number) => {\n\t\t\tproductsformJWT.push(JSON.stringify(product.productCode))\n\t\t})\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.userSessionMiddleware.loadSessionJwt(false).then(x =>\n\t\t\t\taxios\n\t\t\t\t\t.get(url, {\n\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\tquery: productSectionListQuery(productsformJWT),\n\t\t\t\t\t\t},\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\tAuthorization: `Bearer ${x}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t\t.then(response => {\n\t\t\t\t\t\tif (response.data.data.aBILITYPage.length > 0 || response.data.data.pdf.length > 0) {\n\t\t\t\t\t\t\tconst page = response.data.data.aBILITYPage\n\t\t\t\t\t\t\tconst cmsProducts = [] as IProducts[]\n\t\t\t\t\t\t\tpage.map((productItem: any, index: number) => {\n\t\t\t\t\t\t\t\tcmsProducts.push({\n\t\t\t\t\t\t\t\t\tproductCode: productItem.productContent.productName,\n\t\t\t\t\t\t\t\t\tproductName: productItem.productContent.productName,\n\t\t\t\t\t\t\t\t\tsectionList: this.getSectionsfromgraphql(productItem.sectionTags),\n\t\t\t\t\t\t\t\t} as IProducts)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t// reading pdf content\n\t\t\t\t\t\t\tif (response.data.data.pdf && response.data.data.pdf.length > 0) {\n\t\t\t\t\t\t\t\tresponse.data.data.pdf.map((productItem: any, index: number) => {\n\t\t\t\t\t\t\t\t\tif (productItem.pdfDocument)\n\t\t\t\t\t\t\t\t\t\tcmsProducts.push({\n\t\t\t\t\t\t\t\t\t\t\tproductCode: productItem.productContent.productName,\n\t\t\t\t\t\t\t\t\t\t\tproductName: productItem.productContent.productName,\n\t\t\t\t\t\t\t\t\t\t\tsectionList: this.getSectionsfromgraphql(productItem.sectionTags),\n\t\t\t\t\t\t\t\t\t\t} as IProducts)\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst cmsEndResult = [] as IProducts[]\n\t\t\t\t\t\t\tproductList.forEach(product => {\n\t\t\t\t\t\t\t\tconst cmspr = { productCode: product.productCode, productName: product.productName, sectionList: [] as ISection[] }\n\t\t\t\t\t\t\t\tcmsProducts.forEach(cmsProduct => {\n\t\t\t\t\t\t\t\t\tif (cmsProduct.productCode.toLowerCase() === product.productCode.toLowerCase()) {\n\t\t\t\t\t\t\t\t\t\tif (cmsEndResult.findIndex(x => x.productCode.toLowerCase() === product.productCode.toLowerCase()) === -1 && cmspr.sectionList.length === 0) {\n\t\t\t\t\t\t\t\t\t\t\tcmspr.sectionList = cmsProduct.sectionList\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tcmspr.sectionList = this.combineArray(cmspr.sectionList, cmsProduct.sectionList)\n\t\t\t\t\t\t\t\t\t\t\tcmspr.sectionList = cmspr.sectionList.filter((v, i, a) => a.findIndex(t => t.sectionId === v.sectionId) === i)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\tcmsEndResult.push(\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tproductCode: cmspr.productCode,\n\t\t\t\t\t\t\t\t\t\tproductName: cmspr.productName,\n\t\t\t\t\t\t\t\t\t\tsectionList: cmspr.sectionList.sort((a, b) => (a.sectionName < b.sectionName ? -1 : 1))\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tresolve(cmsEndResult)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconsole.log(`no sections found`)\n\t\t\t\t\t\t\tconst cmsEndResultNoSectionsFound = [] as IProducts[]\n\t\t\t\t\t\t\tproductList.forEach(product => {\n\t\t\t\t\t\t\t\tcmsEndResultNoSectionsFound.push({\n\t\t\t\t\t\t\t\t\tproductCode: product.productCode,\n\t\t\t\t\t\t\t\t\tproductName: product.productName,\n\t\t\t\t\t\t\t\t\tsectionList: [] as ISection[],\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tresolve(cmsEndResultNoSectionsFound)\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.catch(error => {\n\t\t\t\t\t\tif (error.response !== null && typeof error.response !== 'undefined' && error.response.status === 401) ErrorHelper.handleApiError(error)\n\t\t\t\t\t\telse reject(error)\n\t\t\t\t\t}),\n\t\t\t)\n\t\t})\n\t}\n\n\tonlyUnique(value: any, index: number, self: any): any {\n\t\treturn self.indexOf(value) === index\n\t}\n\n\tcombineArray(array1: any, array2: any) {\n\t\treturn [...array1, ...array2]\n\t}\n\n\tgetSectionsfromgraphql(sections: any) {\n\t\tconst productSections = [] as ISection[]\n\t\tif (sections === null || sections === undefined) return productSections\n\t\tif (sections.termContentItems.length === 0 || sections.termContentItems === [] || sections.termContentItems[0] === null) return productSections\n\t\tsections.termContentItems.map((item: any, index: number) => {\n\t\t\tif (item !== null) {\n\t\t\t\tproductSections.push({\n\t\t\t\t\tsectionName: item.displayText,\n\t\t\t\t\tsectionId: item.contentItemId, // sections.termContentItemIds[index]\n\t\t\t\t} as ISection)\n\t\t\t}\n\t\t})\n\t\treturn productSections\n\t}\n\tgetArticleSectionsfromgraphql(sections: any, articleName: string, articleId: string, path: string, isPdf: boolean) {\n\t\tconst productArticleSections = [] as ISectionInfo[]\n\t\tif (sections === null || sections === undefined) return productArticleSections\n\t\tif (sections.termContentItems.length === 0 || sections.termContentItems === [] || sections.termContentItems[0] === null) return productArticleSections\n\t\tsections.termContentItems.map((item: any, index: number) => {\n\t\t\tif (item !== null) {\n\t\t\t\tproductArticleSections.push({\n\t\t\t\t\tsectionName: item.displayText,\n\t\t\t\t\tsectionId: item.contentItemId, //sections.termContentItemIds[index],\n\t\t\t\t\tarticleList: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontentItemId: articleId,\n\t\t\t\t\t\t\tdisplayText: articleName,\n\t\t\t\t\t\t\tpath: path,\n\t\t\t\t\t\t\tIsPdf: isPdf,\n\t\t\t\t\t\t},\n\t\t\t\t\t] as IArticleInfo[],\n\t\t\t\t} as ISectionInfo)\n\t\t\t}\n\t\t})\n\t\treturn productArticleSections\n\t}\n\n\tgetProductInfoByProductCode(productCode: string): Promise {\n\t\t// throw new Error('Method not implemented.')\n\t\treturn new Promise(resolve => {\n\t\t\tresolve(this.getArticlesOfSectionsfromgraphql(productCode))\n\t\t})\n\t}\n\tgetArticlesOfSectionsfromgraphql(productCode: string): Promise {\n\t\t// Actual code\n\t\tconst url = `${SettingsManager.REACT_APP_MAIN_API_BASE_URL().value}`\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.userSessionMiddleware.loadSessionJwt(false).then(x =>\n\t\t\t\taxios\n\t\t\t\t\t.get(url, {\n\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\tquery: productContentQuery(productCode),\n\t\t\t\t\t\t},\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\tAuthorization: `Bearer ${x}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t\t.then(response => {\n\t\t\t\t\t\tif (response.data.data.aBILITYPage.length > 0 || response.data.data.pdf.length > 0) {\n\t\t\t\t\t\t\tconst page = response.data.data.aBILITYPage\n\t\t\t\t\t\t\tconst cmsProductsInfo = [] as IProductInfo[]\n\t\t\t\t\t\t\tpage.map((productItem: any, index: number) => {\n\t\t\t\t\t\t\t\tcmsProductsInfo.push({\n\t\t\t\t\t\t\t\t\tproductDescription: productItem.productContent.productName + ' Description',\n\t\t\t\t\t\t\t\t\tproductName: productItem.productContent.productName,\n\t\t\t\t\t\t\t\t\tsectionList: this.getArticleSectionsfromgraphql(productItem.sectionTags, productItem.displayText, productItem.contentItemId, productItem.path, false),\n\t\t\t\t\t\t\t\t} as IProductInfo)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t// reading pdf content\n\t\t\t\t\t\t\tif (response.data.data.pdf && response.data.data.pdf.length > 0) {\n\t\t\t\t\t\t\t\tresponse.data.data.pdf.map((productItem: any, index: number) => {\n\t\t\t\t\t\t\t\t\tif (productItem.pdfDocument)\n\t\t\t\t\t\t\t\t\t\tcmsProductsInfo.push({\n\t\t\t\t\t\t\t\t\t\t\tproductDescription: productItem.productContent.productName + ' Description',\n\t\t\t\t\t\t\t\t\t\t\tproductName: productItem.productContent.productName,\n\t\t\t\t\t\t\t\t\t\t\tsectionList: this.getArticleSectionsfromgraphql(productItem.sectionTags, productItem.displayText, productItem.contentItemId, productItem.pdfDocument.relativePdfPath, true),\n\t\t\t\t\t\t\t\t\t\t} as IProductInfo)\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst singlecmsProductsInfo = {\n\t\t\t\t\t\t\t\tproductDescription: cmsProductsInfo[0].productDescription,\n\t\t\t\t\t\t\t\tproductName: cmsProductsInfo[0].productName,\n\t\t\t\t\t\t\t\tsectionList: [] as ISectionInfo[],\n\t\t\t\t\t\t\t} as IProductInfo\n\t\t\t\t\t\t\tcmsProductsInfo.forEach(product => {\n\t\t\t\t\t\t\t\tproduct.sectionList.forEach(section => {\n\t\t\t\t\t\t\t\t\tsinglecmsProductsInfo.sectionList.push({\n\t\t\t\t\t\t\t\t\t\tsectionName: section.sectionName,\n\t\t\t\t\t\t\t\t\t\tsectionId: section.sectionId,\n\t\t\t\t\t\t\t\t\t\tarticleList: [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tcontentItemId: section.articleList[0].contentItemId,\n\t\t\t\t\t\t\t\t\t\t\t\tdisplayText: section.articleList[0].displayText,\n\t\t\t\t\t\t\t\t\t\t\t\tpath: section.articleList[0].path, //\"path\"\n\t\t\t\t\t\t\t\t\t\t\t\tIsPdf: section.articleList[0].IsPdf,\n\t\t\t\t\t\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t\t\t\t\t] as IArticleInfo[],\n\t\t\t\t\t\t\t\t\t} as ISectionInfo)\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tsinglecmsProductsInfo.productDescription = response.data.data.productDescription.length > 0 ? response.data.data.productDescription[0].wysiwygContent.markup : ''\n\t\t\t\t\t\t\tsinglecmsProductsInfo.productName = cmsProductsInfo[0].productName\n\n\t\t\t\t\t\t\tconst newSectionInfo = Array()\n\t\t\t\t\t\t\tsinglecmsProductsInfo.sectionList.forEach((section: ISectionInfo, index: number) => {\n\t\t\t\t\t\t\t\tif (newSectionInfo.findIndex(x => x.sectionName === section.sectionName) === -1) {\n\t\t\t\t\t\t\t\t\tnewSectionInfo.push({\n\t\t\t\t\t\t\t\t\t\tsectionName: section.sectionName,\n\t\t\t\t\t\t\t\t\t\tsectionId: section.sectionId,\n\t\t\t\t\t\t\t\t\t\tarticleList: [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tcontentItemId: section.articleList[0].contentItemId,\n\t\t\t\t\t\t\t\t\t\t\t\tdisplayText: section.articleList[0].displayText,\n\t\t\t\t\t\t\t\t\t\t\t\tpath: section.articleList[0].path,\n\t\t\t\t\t\t\t\t\t\t\t\tIsPdf: section.articleList[0].IsPdf,\n\t\t\t\t\t\t\t\t\t\t\t} as IArticleInfo,\n\t\t\t\t\t\t\t\t\t\t] as IArticleInfo[],\n\t\t\t\t\t\t\t\t\t} as ISectionInfo)\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewSectionInfo[newSectionInfo.findIndex(x => x.sectionName === section.sectionName)].articleList.push({\n\t\t\t\t\t\t\t\t\t\tcontentItemId: section.articleList[0].contentItemId,\n\t\t\t\t\t\t\t\t\t\tdisplayText: section.articleList[0].displayText,\n\t\t\t\t\t\t\t\t\t\tpath: section.articleList[0].path,\n\t\t\t\t\t\t\t\t\t\tIsPdf: section.articleList[0].IsPdf,\n\t\t\t\t\t\t\t\t\t} as IArticleInfo)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\tnewSectionInfo.sort((a, b) => (a.sectionName < b.sectionName ? -1 : 1))\n\t\t\t\t\t\t\tconst newSectionInfoOrderbyArticle = Array()\n\t\t\t\t\t\t\tnewSectionInfo.forEach(section => {\n\t\t\t\t\t\t\t\tnewSectionInfoOrderbyArticle.push({\n\t\t\t\t\t\t\t\t\tsectionName: section.sectionName,\n\t\t\t\t\t\t\t\t\tsectionId: section.sectionId,\n\t\t\t\t\t\t\t\t\tarticleList: section.articleList.sort((a, b) => (a.displayText < b.displayText ? -1 : 1)),\n\t\t\t\t\t\t\t\t} as ISectionInfo)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tsinglecmsProductsInfo.sectionList = newSectionInfoOrderbyArticle\n\n\t\t\t\t\t\t\tresolve(singlecmsProductsInfo)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\t\tproductName: productCode,\n\t\t\t\t\t\t\t\tproductDescription: response.data.data.productDescription.length > 0 ? response.data.data.productDescription[0].wysiwygContent.markup : '',\n\t\t\t\t\t\t\t\tsectionList: [] as ISectionInfo[],\n\t\t\t\t\t\t\t} as IProductInfo)\n\t\t\t\t\t\t\t// reject(`no sections/articles found`)\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.catch(error => {\n\t\t\t\t\t\tif (error.response !== null && typeof error.response !== 'undefined' && error.response.status === 401) ErrorHelper.handleApiError(error)\n\t\t\t\t\t\telse reject(error)\n\t\t\t\t\t}),\n\t\t\t)\n\t\t})\n\t}\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport ILandingPageApiClient from './contracts'\nimport { IProductCategoryList } from '../LandingPageStateManager/contracts'\nimport { injectable } from 'inversify'\n\n@injectable()\nexport class MockLandingPageApiClient implements ILandingPageApiClient {\n\tproductCategoryList!: IProductCategoryList\n\n\t/**\n\t *\n\t */\n\tconstructor() {\n\t\tthis.productCategoryList = {\n\t\t\tproductCategoryList: [\n\t\t\t\t{\n\t\t\t\t\tproductCategoryId: 3,\n\t\t\t\t\tproductCategoryName: 'Billing',\n\t\t\t\t\tsequence: 1,\n\t\t\t\t\tProductInfos: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcode: 'Ease',\n\t\t\t\t\t\t\tname: 'EASE Medicare',\n\t\t\t\t\t\t\tsequence: 1,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcode: 'EaseAllPayer',\n\t\t\t\t\t\t\tname: 'EASE All-Payer',\n\t\t\t\t\t\t\tsequence: 2,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcode: 'AuditDocs',\n\t\t\t\t\t\t\tname: 'AUTOMATE esMD',\n\t\t\t\t\t\t\tsequence: 3,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcode: 'MedicareClaims',\n\t\t\t\t\t\t\tname: 'CHOICE Medicare Claims',\n\t\t\t\t\t\t\tsequence: 4,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tproductCategoryId: 4,\n\t\t\t\t\tproductCategoryName: 'Quality',\n\t\t\t\t\tsequence: 2,\n\t\t\t\t\tProductInfos: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcode: 'CareWatch',\n\t\t\t\t\t\t\tname: 'CAREWATCH',\n\t\t\t\t\t\t\tsequence: 1,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcode: 'UBWatch',\n\t\t\t\t\t\t\tname: 'UBWATCH',\n\t\t\t\t\t\t\tsequence: 2,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcode: 'RiskWatch',\n\t\t\t\t\t\t\tname: 'RISKWATCH',\n\t\t\t\t\t\t\tsequence: 3,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tproductCategoryId: 6,\n\t\t\t\t\tproductCategoryName: 'FISSDDE',\n\t\t\t\t\tsequence: 3,\n\t\t\t\t\tProductInfos: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcode: 'ReferralOutgoing',\n\t\t\t\t\t\t\tname: 'ILLUMINATE Outgoing',\n\t\t\t\t\t\t\tsequence: 1,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcode: 'ReferralIncoming',\n\t\t\t\t\t\t\tname: 'ILLUMINATE Incoming',\n\t\t\t\t\t\t\tsequence: 2,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t} as IProductCategoryList\n\t}\n\n\tgetProductCategoryList(): Promise {\n\t\treturn new Promise(resolve => {\n\t\t\tresolve(JSON.stringify(this.productCategoryList))\n\t\t})\n\t}\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport { observable } from 'mobx'\nimport { ILandingPageStateManager, IProductCategoryList, IProductCategoryInformation, IProductInformation } from './contracts'\nimport ILandingPageApiClient from '../LandingPageApiClient/contracts'\nimport { injectProperty } from '../../configuration/ServiceLocator'\nimport jwt_decode from 'jwt-decode'\nimport { injectable } from 'inversify'\n\n@injectable()\nexport class LandingPageStateManager implements ILandingPageStateManager {\n\t@observable\n\tproductCategoryList!: IProductCategoryList\n\n\t@observable\n\tuserName!: string\n\n\t@injectProperty('ILandingPageApiClient')\n\tpublic landingPageApiClient!: ILandingPageApiClient\n\n\t/**\n\t *\n\t */\n\tconstructor() {\n\t\tthis.productCategoryList = {\n\t\t\tproductCategoryList: [],\n\t\t} as IProductCategoryList\n\t}\n\n\tsetProductCategoryList(productCategoryList: IProductCategoryList): void {\n\t\tthis.productCategoryList = productCategoryList\n\t}\n\n getProductCategoryList(): Promise {\n this.landingPageApiClient.getProductCategoryList().then((token: string) => {\n let tokenObject: any = jwt_decode(token)\n this.userName = tokenObject.name\n this.getFormattedResult(tokenObject.AbilityProductCategoryClaimV2.productCategories);\n }).catch(error => {\n console.log(error)\n throw new Error('An error occured while fetching the CMS token from Ability Portal.')\n })\n\n\t\treturn new Promise(resolve => resolve())\n\t}\n\n\tgetFormattedResult(response: any) {\n\t\tconst result = { productCategoryList: [] } as IProductCategoryList\n\t\tresponse.map((item: any, index: number) => {\n\t\t\tresult.productCategoryList.push({\n\t\t\t\tproductCategoryId: item.ProductCategoryId,\n\t\t\t\tproductCategoryName: item.Caption,\n\t\t\t\tsequence: item.Sequence,\n\t\t\t\tProductInfos: this.getProductList(item.HomeIndexProductsViewModel),\n\t\t\t} as IProductCategoryInformation)\n\t\t})\n\t\tthis.setProductCategoryList(result)\n\t}\n\n\tgetProductList(productList: any) {\n\t\tconst productResult = [] as IProductInformation[]\n\t\tproductList.map((productItem: any, index: number) => {\n\t\t\tproductResult.push({\n\t\t\t\tcode: productItem.Code,\n\t\t\t\tname: productItem.Name,\n\t\t\t\tsequence: productItem.Sequence,\n\t\t\t} as IProductInformation)\n\t\t})\n\n\t\treturn productResult\n\t}\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport ILandingPageApiClient from './contracts'\nimport { injectProperty } from '../../configuration/ServiceLocator'\nimport { IApiClient } from '../ApiClient/IApiClient'\nimport { injectable } from 'inversify'\n\n@injectable()\nexport class LandingPageApiClient implements ILandingPageApiClient {\n\t@injectProperty('IApiClient')\n\tprivate readonly apiClient!: IApiClient\n\n\tgetProductCategoryList(): Promise {\n\t\treturn this.apiClient.getCMSToken().catch(error => {\n\t\t\tconsole.log(error)\n\t\t\tthrow new Error('An error occured while fetching the CMS token from Ability Portal.')\n\t\t})\n\t}\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport { BaseSettingsManager } from '../configuration/UserSessionSettingsManager'\nimport { IContentApiClient } from '../services/ContentApiClient/contracts'\nimport { ContentApiClient } from '../services/ContentApiClient/ContentApiClient'\nimport { MockContentApiClient } from '../services/ContentApiClient/MockContentApiClient'\nimport { IContentStateManager } from '../services/ContentStateManager/contracts'\nimport { ContentStateManager } from '../services/ContentStateManager/ContentStateManager'\nimport { container } from './ServiceLocator'\nimport { ISectionStateManager } from '../services/SectionStateManager/contracts'\nimport { SectionStateManager } from '../services/SectionStateManager/SectionStateManager'\nimport ISectionApiClient from '../services/SectionApiClient/contracts'\nimport { MockSectionApiClient } from '../services/SectionApiClient/MockSectionApiClient'\nimport { SectionApiClient } from '../services/SectionApiClient/SectionApiClient'\nimport ISearchResultsApiClient from '../services/SearchResultsApiClient/contracts'\nimport { MockSearchResultsApiClient } from '../services/SearchResultsApiClient/MockSearchResultsApiClient'\nimport { ISearchResultsStateManager } from '../services/SearchResultsStateManager/contracts'\nimport { SearchResultsStateManager } from '../services/SearchResultsStateManager/SearchResultsStateManager'\nimport { SearchResultsApiClient } from '../services/SearchResultsApiClient/SearchResultsApiClient'\nimport { IApiClient } from '../services/ApiClient/IApiClient'\nimport { ApiClient } from '../services/ApiClient/ApiClient'\nimport IProductsApiClient from '../services/ProductsApiClient/contracts'\nimport { MockProductsApiClient } from '../services/ProductsApiClient/MockProductsApiClient'\nimport { IProductContentStateManager } from '../services/ProductContentStateManager/contracts'\nimport { ProductContentStateManager } from '../services/ProductContentStateManager/ProductContentStateManager'\nimport { IProductStateManager } from '../services/ProductStateManager/contracts'\nimport { ProductStateManager } from '../services/ProductStateManager/ProductStateManager'\nimport { ProductsApiClient } from '../services/ProductsApiClient/ProductsApiClient'\nimport ILandingPageApiClient from '../services/LandingPageApiClient/contracts'\nimport { MockLandingPageApiClient } from '../services/LandingPageApiClient/MockLandingPageApiClient'\nimport { ILandingPageStateManager } from '../services/LandingPageStateManager/contracts'\nimport { LandingPageStateManager } from '../services/LandingPageStateManager/LandingPageStateManager'\nimport { LandingPageApiClient } from '../services/LandingPageApiClient/LandingPageApiClient'\n\n/**\n * This module centralizes all configurable application settings into a single public object with documentation\n * Settings are loaded on demand through strongly-typed properties\n * Settings can be configured at build-time via use of .env files or at startup-time via appConfig.js\n */\n\n/**\n * the class for the singleton SettingsManager instance\n *\n * @class SettingsManager\n */\nexport class SettingsManager extends BaseSettingsManager {\n\tstatic REACT_APP_SSO_TOKEN_NAME = 'supportsite.ssoToken'\n\tstatic REACT_APP_Refresh_TOKEN_NAME = 'supportsite.refreshToken'\n\tstatic REACT_APP_ProductCategories_TOKEN_NAME = 'productcategoriesToken'\n\t/**\n\t * register all injectables to an ioc container.\n\t * this should be called once and only once per container at the time of application bootstrap\n\t *\n\t * @export\n\t * @param {Container} iocContainer the container to configure\n\t */\n\tstatic configureContainer = (): void => {\n\t\t// note: there doesnt (yet) seem to be a mature/stable auto-wiring for services.\n\t\t// until one is available we will bind services explicitly in this method\n\t\tBaseSettingsManager.configureContainer()\n\n\t\tif (BaseSettingsManager.REACT_APP_IS_MAIN_API_MOCKED().value) {\n\t\t\tcontainer\n\t\t\t\t.bind('IApiClient')\n\t\t\t\t.to(ApiClient)\n\t\t\t\t.inSingletonScope()\n\n\t\t\tcontainer\n\t\t\t\t.bind('ISectionApiClient')\n\t\t\t\t.to(MockSectionApiClient)\n\t\t\t\t.inSingletonScope()\n\n\t\t\tcontainer\n\t\t\t\t.bind('ISectionStateManager')\n\t\t\t\t.to(SectionStateManager)\n\t\t\t\t.inSingletonScope()\n\n\t\t\tcontainer\n\t\t\t\t.bind('ISearchResultsApiClient')\n\t\t\t\t.to(MockSearchResultsApiClient)\n\t\t\t\t.inSingletonScope()\n\n\t\t\tcontainer\n\t\t\t\t.bind('ISearchResultsStateManager')\n\t\t\t\t.to(SearchResultsStateManager)\n\t\t\t\t.inSingletonScope()\n\t\t\tcontainer\n\t\t\t\t.bind('IProductsApiClient')\n\t\t\t\t.to(MockProductsApiClient)\n\t\t\t\t.inSingletonScope()\n\t\t\tcontainer\n\t\t\t\t.bind('IProductContentStateManager')\n\t\t\t\t.to(ProductContentStateManager)\n\t\t\t\t.inSingletonScope()\n\t\t\tcontainer\n\t\t\t\t.bind('IProductStateManager')\n\t\t\t\t.to(ProductStateManager)\n\t\t\t\t.inSingletonScope()\n\t\t\tcontainer\n\t\t\t\t.bind('ILandingPageApiClient')\n\t\t\t\t.to(MockLandingPageApiClient)\n\t\t\t\t.inSingletonScope()\n\t\t\tcontainer\n\t\t\t\t.bind('ILandingPageStateManager')\n\t\t\t\t.to(LandingPageStateManager)\n\t\t\t\t.inSingletonScope()\n\t\t\tcontainer\n\t\t\t\t.bind('IContentApiClient')\n\t\t\t\t.to(MockContentApiClient)\n\t\t\t\t.inSingletonScope()\n\t\t\tcontainer\n\t\t\t\t.bind('IContentStateManager')\n\t\t\t\t.to(ContentStateManager)\n\t\t\t\t.inSingletonScope()\n\t\t} else {\n\t\t\tcontainer\n\t\t\t\t.bind('IApiClient')\n\t\t\t\t.to(ApiClient)\n\t\t\t\t.inSingletonScope()\n\n\t\t\tcontainer\n\t\t\t\t.bind('ISectionApiClient')\n\t\t\t\t.to(SectionApiClient)\n\t\t\t\t.inSingletonScope()\n\n\t\t\tcontainer\n\t\t\t\t.bind('ISectionStateManager')\n\t\t\t\t.to(SectionStateManager)\n\t\t\t\t.inSingletonScope()\n\n\t\t\tcontainer\n\t\t\t\t.bind('ISearchResultsApiClient')\n\t\t\t\t.to(SearchResultsApiClient)\n\t\t\t\t.inSingletonScope()\n\n\t\t\tcontainer\n\t\t\t\t.bind('ISearchResultsStateManager')\n\t\t\t\t.to(SearchResultsStateManager)\n\t\t\t\t.inSingletonScope()\n\t\t\tcontainer\n\t\t\t\t.bind('ILandingPageApiClient')\n\t\t\t\t.to(LandingPageApiClient)\n\t\t\t\t.inSingletonScope()\n\n\t\t\tcontainer\n\t\t\t\t.bind('ILandingPageStateManager')\n\t\t\t\t.to(LandingPageStateManager)\n\t\t\t\t.inSingletonScope()\n\n\t\t\tcontainer\n\t\t\t\t.bind('IContentApiClient')\n\t\t\t\t.to(ContentApiClient)\n\t\t\t\t.inSingletonScope()\n\n\t\t\tcontainer\n\t\t\t\t.bind('IContentStateManager')\n\t\t\t\t.to(ContentStateManager)\n\t\t\t\t.inSingletonScope()\n\t\t\tcontainer\n\t\t\t\t.bind('IProductsApiClient')\n\t\t\t\t.to(ProductsApiClient)\n\t\t\t\t.inSingletonScope()\n\n\t\t\tcontainer\n\t\t\t\t.bind('IProductContentStateManager')\n\t\t\t\t.to(ProductContentStateManager)\n\t\t\t\t.inSingletonScope()\n\n\t\t\tcontainer\n\t\t\t\t.bind('IProductStateManager')\n\t\t\t\t.to(ProductStateManager)\n\t\t\t\t.inSingletonScope()\n\t\t}\n\t}\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport React from 'react'\nimport { SettingsManager } from '../../configuration/SettingsManager'\nimport { ModalHeader, ModalBody, Button, ModalFooter, Alert, Modal } from 'reactstrap'\nimport { IUserSessionStateManager } from '../../services/UserSessionStateManager/contracts'\nimport { container } from '../../configuration/ServiceLocator'\nimport './UserSession.scss'\n\nexport interface IUserSessionState {\n\tisSessionExpirationModalVisible: boolean\n\tisSessionExpiredModalVisible: boolean\n\tsessionExpirationCountdown: string\n}\n\nexport interface IUserSessionProps {\n\tuserSessionStore: IUserSessionStateManager\n}\n\nexport class UserSession extends React.Component {\n\tconstructor (props: IUserSessionProps) {\n\t\tsuper(props)\n\t\tthis.state = {\n\t\t\tisSessionExpirationModalVisible: false,\n\t\t\tisSessionExpiredModalVisible: false,\n\t\t\tsessionExpirationCountdown: '',\n\t\t}\n\n\t\tthis.props.userSessionStore.loadSessionJwt(false)\n\t\tconst _this = this\n\t\t// every second check the token's expiry and determine if warning/error dialogs should be displayed\n\t\tsetInterval(function () {\n\t\t\tconst totalSecondsUntilExpiration = (_this.props.userSessionStore.userSession.exp.getTime() - new Date().getTime()) / 1000\n\t\t\tconst totalSecondsUntilWarningPopup = totalSecondsUntilExpiration - SettingsManager.REACT_APP_SECONDS_BEFORE_EXPIRATION_WARNING().value\n\t\t\tconst minutes = Math.floor(totalSecondsUntilExpiration / 60)\n\t\t\tconst seconds = Math.floor(totalSecondsUntilExpiration % 60)\n\n\t\t\tconst padLeft = (num: number, length: number): string => {\n\t\t\t\treturn Array(Math.max(String(num).length, length) - String(num).length + 1).join('0') + num\n\t\t\t}\n\t\t\t_this.setState({\n\t\t\t\tisSessionExpirationModalVisible: totalSecondsUntilExpiration > 0 && totalSecondsUntilWarningPopup < 0,\n\t\t\t\tisSessionExpiredModalVisible: totalSecondsUntilExpiration < 0 && _this.props.userSessionStore.userSession.exp.getTime() > 0,\n\t\t\t\tsessionExpirationCountdown: `${padLeft(minutes, 2)}:${padLeft(seconds, 2)}`,\n\t\t\t})\n\t\t\tif (_this.state.isSessionExpiredModalVisible == true) {\n\t\t\t\t_this.Logout()\n\t\t\t}\n\n\t\t}, 1000)\n\t}\n\n\tLogout(): void {\n\t\tlocalStorage.removeItem(SettingsManager.REACT_APP_SSO_TOKEN_NAME)\n\t\tlocalStorage.removeItem(SettingsManager.REACT_APP_Refresh_TOKEN_NAME)\n\t\tlocalStorage.removeItem(SettingsManager.REACT_APP_ProductCategories_TOKEN_NAME)\n\t\twindow.location.href = '/Auth/Logout'\n\t}\n\n\tonTokenRefresh(event: any): void {\n\t\tevent.preventDefault()\n\t\tthis.props.userSessionStore.loadSessionJwt(true).catch(error => alert(error))\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\tSession Timeout Warning\n\t\t\t\t\t\n\t\t\t\t\t\t

Your session is about to expire in {this.state.sessionExpirationCountdown} seconds.

\n\t\t\t\t\t\t

Click OK to Continue your session

\n\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\n\t\t)\n\t}\n}\n\nexport const UserSessionConnected = () => {\n\tconst store = container.get('IUserSessionStateManager')\n\treturn \n}","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport { SettingsManager } from '../configuration/SettingsManager'\n\nexport class UserEventLogger {\n\tstatic handleUserClickEvent(event: any, eventType: any, eventText: any) {\n\t\tconst text = eventText ? eventText : event && event.currentTarget && event.currentTarget.textContent ? event.currentTarget.textContent.trim() : ''\n\t\tconst rootUrl = SettingsManager.REACT_APP_MYABILITY_ROOT_URL().value\n\n\t\tlet endurl = ''\n\t\tif (event && event.currentTarget) {\n\t\t\tendurl = event.currentTarget.href ? event.currentTarget.href : event.currentTarget.formAction ? event.currentTarget.formAction : ''\n\t\t}\n\n\t\t$.ajax({\n\t\t\turl: rootUrl + '/Home/ClickEvent',\n\t\t\ttype: 'POST',\n\t\t\tdataType: 'JSON',\n\t\t\tdata: { type: eventType, href: endurl, text: text },\n\t\t\tasync: false,\n\t\t\terror: function() {\n\t\t\t\treturn true\n\t\t\t},\n\t\t})\n\n\t\treturn true\n\t}\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport React from 'react'\nimport './SearchResults.scss'\nimport { RouteComponentProps, Route } from 'react-router'\nimport { ISearchResultsStateManager, ISection } from '../../services/SearchResultsStateManager/contracts'\nimport { observer } from 'mobx-react'\nimport { container } from '../../configuration/ServiceLocator'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faSearch } from '@fortawesome/free-solid-svg-icons'\nimport { Input, FormFeedback, Breadcrumb, BreadcrumbItem } from 'reactstrap'\nimport queryString from 'query-string'\nimport ReactGA from 'react-ga4'\nimport { UserEventLogger } from '../../utils/UserEventLogger'\n\nexport interface ISearchResultsProps extends RouteComponentProps {\n\tsearchResultsStateManager: ISearchResultsStateManager\n}\n\nexport interface ISearchResultsState {\n\tfirst: number\n\tskip: number\n\tresultsLoaded: boolean\n}\n\n@observer\nexport class SearchResults extends React.Component {\n\tsearchTerm: string\n\tcurrentPage: number // This is for Pagination info on page load\n\tnoResultTerm: string // The Search text for which won't have any results\n\tpageIndex: number\n\tendofsearchResults: boolean\n\tconstructor(props: Readonly) {\n\t\tsuper(props)\n\t\tthis.state = {\n\t\t\tfirst: 5, // Default no of records per page\n\t\t\tskip: 0, // Skipping 0 records first\n\t\t\tresultsLoaded: false,\n\t\t}\n\t\tthis.currentPage = 1\n\t\tthis.searchTerm = ''\n\t\tthis.noResultTerm = ''\n\t\tthis.handleScroll = this.handleScroll.bind(this)\n\t\tthis.pageIndex = 0\n\t\tthis.endofsearchResults = false\n\n\t\tthis.onSearchEnter = this.onSearchEnter.bind(this)\n\t\tthis.SearchResults = this.SearchResults.bind(this)\n\n\t\twindow.addEventListener('scroll', this.handleScroll, { passive: true })\n\t}\n\n\tcomponentDidMount() {\n\t\tconst searchurl = this.props.location.search\n\t\tthis.searchTerm = this.noResultTerm = queryString.parse(searchurl)['searchTerm'] as string\n\t\tthis.props.searchResultsStateManager.setSearchTerm(this.searchTerm)\n\t\tthis.getSearchResults(this.searchTerm, this.state.first, this.state.skip, 'didmount')\n\t}\n\n\tcomponentDidUpdate(prevSearchTerm: any) {\n\t\tif (this.props.location.search != prevSearchTerm.location.search) {\n\t\t\tconst searchurl = this.props.location.search\n\t\t\tthis.searchTerm = this.noResultTerm = queryString.parse(searchurl)['searchTerm'] as string\n\t\t\tthis.props.searchResultsStateManager.setSearchTerm(this.searchTerm)\n\t\t\tthis.getSearchResults(this.searchTerm, this.state.first, this.state.skip, 'didupdate')\n\t\t}\n\t}\n\n\thandleScroll(event: any) {\n\t\tconst { pageYOffset } = window\n\t\tif (pageYOffset > 50) {\n\t\t\tthis.pageIndex = this.pageIndex + 1\n\t\t\tthis.getSearchResults(this.props.searchResultsStateManager.searchTerm.trim(), this.state.first, this.state.first * this.pageIndex, 'scroll')\n\t\t}\n\t}\n\t/**Escape Special Characters for Sesrch string*/\n\tescapeSpclCharsSearchTerm(searchTerm: string): string {\n\t\tconst format = /[ `!@#$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>\\/?~]/\n\t\tif (format.test(searchTerm)) {\n\t\t\treturn searchTerm.replace(/[\\\"\\\\s]/g, '\\\\$&')\n\t\t}\n\t\treturn searchTerm\n\t}\n\n\t/**Common method to get the search results */\n\tgetSearchResults(searchTerm: string, first: number, skip: number, searchType: string) {\n\t\tthis.props.searchResultsStateManager\n\t\t\t.getSearchResults(searchTerm, first, skip, searchType)\n\t\t\t.then(response => this.setState({ resultsLoaded: true }))\n\t\t\t.catch(error => console.error(error))\n\t}\n\n\t/**On Search button click*/\n\tSearchResults(event: any) {\n\t\tevent.preventDefault()\n\t\tthis.pageIndex = 0\n\t\t// halt if validation fails\n\t\tif (this.props.searchResultsStateManager.searchTerm.trim() && this.props.searchResultsStateManager.searchTerm.trim() != '') {\n\t\t\tthis.getSearchResults(this.props.searchResultsStateManager.searchTerm.trim(), this.state.first, this.state.skip, 'click')\n\t\t}\n\t\tthis.props.history.push('/pages/SearchResults?searchTerm=' + encodeURIComponent(this.props.searchResultsStateManager.searchTerm.trim()))\n\t\tthis.handleUserClickEvent(event, 'SupportSite - SearchResults Page Search', 'Search - ' + this.props.searchResultsStateManager.searchTerm.trim())\n\t}\n\n\t/**On Enter Key Press */\n\tonSearchEnter(event: any) {\n\t\tif (event.key === 'Enter') {\n\t\t\tevent.preventDefault()\n\t\t\tevent.stopPropagation()\n\t\t\tthis.noResultTerm = event.target.value.trim()\n\t\t\tthis.pageIndex = 0\n\t\t\tthis.getSearchResults(event.target.value.trim(), this.state.first, this.state.skip, 'keypress')\n\t\t\tthis.props.history.push('/pages/SearchResults?searchTerm=' + encodeURIComponent(event.target.value.trim()))\n\t\t\tthis.handleUserClickEvent(event, 'SupportSite - SearchResults Page Search', 'Search - ' + event.target.value.trim())\n\t\t\treturn false\n\t\t}\n\t}\n\n\thandleBreadCrumbClick(event: any) {\n\t\tthis.handleUserClickEvent(event, 'SupportSite - SearchResults Page BreadCrumb Click', '')\n\t}\n\n\thandleArticleLinkClick(event: any) {\n\t\tthis.handleUserClickEvent(event, 'SupportSite - SearchResults Page Article Link Click', '')\n\t}\n\n\thandleProductLinkClick(event: any) {\n\t\tthis.handleUserClickEvent(event, 'SupportSite - SearchResults Page Product Link Click', '')\n\t}\n\n\thandleSectionLinkClick(event: any) {\n\t\tthis.handleUserClickEvent(event, 'SupportSite - SearchResults Page Section Link Click', '')\n\t}\n\n\thandleUserClickEvent(event: any, eventType: any, eventText: any) {\n\t\tUserEventLogger.handleUserClickEvent(event, eventType, eventText)\n\t}\n\n\t/**Search Result List Template */\n\tgetSearchResultTemplate(): any {\n\t\treturn this.props.searchResultsStateManager.results.items.map((val, index) => {\n\t\t\treturn (\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t

\n\t\t\t\t\t\t\t this.handleArticleLinkClick(e)}>\n\t\t\t\t\t\t\t\t{val.articleName}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t

\n\t\t\t\t\t\t

{val.articleDescription}

\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t this.handleProductLinkClick(e)}>\n\t\t\t\t\t\t\t\t{val.productName}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{' | '}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{val.sectionList.length > 0\n\t\t\t\t\t\t\t\t? val.sectionList.map((section: ISection, sectionIndex: number) => {\n\t\t\t\t\t\t\t\t\tconst appendComma = ', '\n\t\t\t\t\t\t\t\t\treturn sectionIndex > 0 ? (\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{appendComma}{' '}\n\t\t\t\t\t\t\t\t\t\t\t this.handleSectionLinkClick(e)}>\n\t\t\t\t\t\t\t\t\t\t\t\t{section.sectionName}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t this.handleSectionLinkClick(e)}>\n\t\t\t\t\t\t\t\t\t\t\t{section.sectionName}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t })\n\t\t\t\t\t\t\t\t: ''}\n\t\t\t\t\t\t\n\t\t\t\t\t\t{val.sectionList.length > 0 ? ' | ' : ''}\n\t\t\t\t\t\t{val.articlePublishDate}\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t)\n\t\t})\n\t}\n\n\trender() {\n\t\t/** To show results (or) empty result and for pagination info*/\n\t\tlet resultTemplate\n\t\tlet endTemplate\n\n\t\tif (this.state.resultsLoaded) {\n\t\t\tif (this.props.searchResultsStateManager.results.items.length > 0) {\n\t\t\t\tresultTemplate = this.getSearchResultTemplate()\n\t\t\t} else {\n\t\t\t\tresultTemplate = (\n\t\t\t\t\t

\n\t\t\t\t\t\tNo results found for \"{this.noResultTerm}\"\n\t\t\t\t\t

\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\tif (this.props.searchResultsStateManager.results.items.length > 0) {\n\t\t\tif (this.props.searchResultsStateManager.results.total < this.state.first) {\n\t\t\t\tendTemplate = (\n\t\t\t\t\t

\n\t\t\t\t\t\t--- End of search results ---\n\t\t\t\t\t

\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t this.handleBreadCrumbClick(e)}>\n\t\t\t\t\t\t\t\tSupport Home\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t Search Results\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t this.onSearchEnter(e)} value={this.props.searchResultsStateManager.searchTerm} onChange={e => this.props.searchResultsStateManager.setSearchTerm(e.target.value)} />\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{this.state.resultsLoaded ?
{resultTemplate}
: ''}\n\t\t\t\t\t\t\t\t{endTemplate}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t)\n\t}\n}\n\nexport const SearchResultsConnected = () => {\n\tconst store = container.get('ISearchResultsStateManager')\n\t\n\treturn (\n\t\t { \n\t\t\tReactGA.send({ hitType: \"pageview\", page: \"props.location.pathname\" }); \n\t\t\treturn } }/>\n\t)\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport { faDivide } from '@fortawesome/free-solid-svg-icons'\nimport React, { useState, useRef } from 'react'\nimport { setTimeout } from 'timers'\nimport './Accordion.scss'\nimport { icon } from '@fortawesome/fontawesome-svg-core'\nimport AngleArrowDown from '../../../img/angle-arrow-down.png'\nimport { UserEventLogger } from '../../../utils/UserEventLogger'\n\nexport interface IAccordionState {\n\tactive: any\n\theight: any\n\trotate: any\n}\n\nexport class Accordion extends React.Component {\n\tmyRef: React.RefObject\n\tmyProductRef: React.RefObject\n\n\tconstructor(props: any) {\n\t\tsuper(props)\n\n\t\tthis.state = {\n\t\t\tactive: '',\n\t\t\theight: '0px',\n\t\t\trotate: 'accordion__icon',\n\t\t}\n\t\tthis.myRef = React.createRef()\n\t\tthis.myProductRef = React.createRef()\n\t}\n\n\ttoggleAccordion(event: any, title: string, productCode: string, productName: string, defaultLoading: boolean) {\n\t\tconst accordion = jQuery(event.target)\n\n\t\tjQuery('.accordion.active').each((item, index) => {\n\t\t\tconst accordionActive = jQuery('.accordion.active')\n\t\t\taccordionActive.removeClass('active')\n\t\t\tjQuery(accordionActive)\n\t\t\t\t.closest('.accordion__section')\n\t\t\t\t.find('.accordion__content')\n\t\t\t\t.css({ maxHeight: '0px' })\n\t\t\tjQuery('.capIcon', accordionActive)\n\t\t\t\t.removeClass('accordion__icon rotate')\n\t\t\t\t.addClass('accordion__icon rotateUp')\n\t\t})\n\t\tif (jQuery(event.target).hasClass('active')) {\n\t\t\taccordion.closest('button').removeClass('active')\n\t\t\tjQuery(accordion)\n\t\t\t\t.closest('.accordion__section')\n\t\t\t\t.find('.accordion__content')\n\t\t\t\t.css({ maxHeight: '0px' })\n\t\t\tjQuery('.capIcon', accordion)\n\t\t\t\t.removeClass('accordion__icon rotate')\n\t\t\t\t.addClass('accordion__icon rotateUp')\n\t\t} else {\n\t\t\taccordion.closest('button').addClass('active')\n\t\t\t// accordion.css({ \"height\": \"0px\" })\n\t\t\t// jQuery(this.myRef.current).css({ \"maxHeight\": \"0px\" })\n\t\t\tjQuery(accordion)\n\t\t\t\t.closest('.accordion__section')\n\t\t\t\t.find('.accordion__content')\n\t\t\t\t.css({ maxHeight: `${this.myRef.current.scrollHeight}px` })\n\t\t\tjQuery('.capIcon', accordion)\n\t\t\t\t.removeClass('accordion__icon rotateUp')\n\t\t\t\t.addClass('accordion__icon rotate')\n\t\t}\n\t\tif (!defaultLoading) {\n\t\t\tthis.props.loadProductInformation(productCode, productName)\n\t\t\tUserEventLogger.handleUserClickEvent(event, 'SupportSite - Product/Section Page Accordion Section Click', '')\n\t\t}\n\t}\n\n\trender() {\n\t\tif (this.props.defaultProduct === this.props.productCode) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.toggleAccordion({ target: this.myProductRef.current }, this.props.defaultProduct, this.props.defaultProduct, this.props.title, true)\n\t\t\t}, 500)\n\t\t}\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t
{this.props.content}
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t)\n\t}\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport { when } from 'jquery'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport { Link, Route, RouteComponentProps } from 'react-router-dom'\nimport { container, injectProperty } from '../../../configuration/ServiceLocator'\nimport { SettingsManager } from '../../../configuration/SettingsManager'\nimport { IArticleInfo, IProductContentStateManager, IProductInfo, ISectionInfo } from '../../../services/ProductContentStateManager/contracts'\nimport { UserEventLogger } from '../../../utils/UserEventLogger'\n\nexport interface IProductContentState {\n\tproductContent: IProductInfo\n}\n\nexport interface IProductContentProps extends RouteComponentProps {\n\tproductContentStateManager: IProductContentStateManager\n\tproductCode: string\n}\n\n@observer\nexport default class ProductContent extends React.Component {\n\tconstructor(prop: Readonly) {\n\t\tsuper(prop)\n\t}\n\tcomponentDidMount() {\n\t\tthis.props.productContentStateManager.getProductInfoByProductCode(this.props.productCode).catch((error: any) => {\n\t\t\talert(error)\n\t\t})\n\t}\n\tcomponentDidUpdate(prevProductCode: any) {\n\t\tif (this.props.productCode != prevProductCode.productCode) {\n\t\t\tthis.props.productContentStateManager.getProductInfoByProductCode(this.props.productCode).catch((error: any) => {\n\t\t\t\talert(error)\n\t\t\t})\n\t\t}\n\t}\n\tonArticleChange(contentItemId: any) {\n\t\tthis.props.loadContentInformation(contentItemId)\n\t}\n\tonSectionChange(event: any, sectionId: any, sectionName: string) {\n\t\tUserEventLogger.handleUserClickEvent(event, 'SupportSite - Product Content Page More Articles Link Click', '')\n\t\tthis.props.loadSectionInformation(sectionId, sectionName)\n\t}\n\n\thandleArticleLinkClick(event: any, isPdf: boolean) {\n\t\tif (isPdf) {\n\t\t\tUserEventLogger.handleUserClickEvent(event, 'SupportSite - Product Content Page Article PDF Link Click', '')\n\t\t} else {\n\t\t\tUserEventLogger.handleUserClickEvent(event, 'SupportSite - Product Content Page Article Link Click', '')\n\t\t}\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{this.props.productName}\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{this.props.productContentStateManager.productInfo.sectionList.map((section: any, sectionindex: number) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
{section.sectionName}
\n\t\t\t\t\t\t\t\t{section.articleList.map((article: any, articleindex: number) => {\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t{articleindex < 3 ? (\n\t\t\t\t\t\t\t\t\t\t\t\t// this.onArticleChange(article.path)} to=\"#\">\n\t\t\t\t\t\t\t\t\t\t\t\t// \t{' '}\n\t\t\t\t\t\t\t\t\t\t\t\t// \t{article.displayText}\n\t\t\t\t\t\t\t\t\t\t\t\t// \n\t\t\t\t\t\t\t\t\t\t\t\tarticle.IsPdf ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.handleArticleLinkClick(e, true)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{' '}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{article.displayText}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.handleArticleLinkClick(e, false)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{' '}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{article.displayText}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t) : articleindex > 3 ? (\n\t\t\t\t\t\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t this.onSectionChange(e, section.sectionId, section.sectionName)} to=\"#\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tMore Articles . . .\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t)\n\t\t\t\t\t})}\n\t\t\t\t
\n\t\t\t
\n\t\t)\n\t}\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport { RouteComponentProps } from 'react-router'\nimport { ISectionStateManager, ISectionArticleList } from '../../services/SectionStateManager/contracts'\nimport { observer } from 'mobx-react'\nimport React from 'react'\nimport './Section.scss'\nimport { Link } from 'react-router-dom'\nimport { SettingsManager } from '../../configuration/SettingsManager'\nimport PropTypes from 'prop-types'\nimport { UserEventLogger } from '../../utils/UserEventLogger'\n\nexport interface ISectionProps extends RouteComponentProps {\n\tproductCode: string\n\tsectionName: string\n\tloadContentInformation: any\n}\n\nexport interface ISectionState {\n\tsectionArticles: ISectionArticleList | null\n}\n\nexport class Section extends React.Component {\n\tconstructor(props: Readonly) {\n\t\tsuper(props)\n\t\tthis.state = {\n\t\t\tsectionArticles: null,\n\t\t}\n\t}\n\tcomponentDidMount() {\n\t\t(this.props.sectionStateManager.getSectionArticles(this.props.productCode, this.props.sectionName) as Promise).then(response => this.setState({ sectionArticles: response }))\n\t}\n\n\tcomponentDidUpdate(prevSectionName: any) {\n\t\tif (this.props.sectionName != prevSectionName.sectionName) {\n\t\t\t(this.props.sectionStateManager.getSectionArticles(this.props.productCode, this.props.sectionName) as Promise).then(response => this.setState({ sectionArticles: response }))\n\t\t}\n\t}\n\tonArticleChange(contentItemId: any) {\n\t\tthis.props.loadContentInformation(contentItemId)\n\t}\n\n\thandleArticleLinkClick(event: any, isPdf: boolean) {\n\t\tif (isPdf) {\n\t\t\tUserEventLogger.handleUserClickEvent(event, 'SupportSite - Section Page Article PDF Link Click', '')\n\t\t} else {\n\t\t\tUserEventLogger.handleUserClickEvent(event, 'SupportSite - Section Page Article Link Click', '')\n\t\t}\n\t}\n\n\trender() {\n\t\tconst model = this.state.sectionArticles\n\t\tif (!model) {\n\t\t\treturn null\n\t\t}\n\t\tconst actualSectionName = model.total > 0 ? model.items[0].sectionName : ''\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{actualSectionName}\n\t\t\t\t
\n\t\t\t\t{model.items.map((article: any, index: number) =>\n\t\t\t\t\tarticle.IsPdf ? (\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\tthis.handleArticleLinkClick(e, true)\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{article.sectionArticleName}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t) : (\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\tthis.handleArticleLinkClick(e, false)\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{' '}\n\t\t\t\t\t\t\t\t{article.sectionArticleName}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t),\n\t\t\t\t)}\n\t\t\t
\n\t\t)\n\t}\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport React from 'react'\nimport { RouteComponentProps, NavLink, Route } from 'react-router-dom'\nimport { FaRegThumbsUp, FaRegThumbsDown, FaThumbsUp, FaThumbsDown } from 'react-icons/fa'\nimport { observer } from 'mobx-react'\nimport { container } from '../../configuration/ServiceLocator'\nimport { UserVote, IArticle, IArticleRating, IContentStateManager } from '../../services/ContentStateManager/contracts'\nimport ReactHtmlParser, { convertNodeToElement, processNodes } from 'react-html-parser'\nimport './Content.scss'\nimport moment from 'moment'\nimport { Breadcrumb, BreadcrumbItem } from 'reactstrap'\nimport UnderConstruction from '../../img/DdeClaimActivityAnalysisIndex.png'\nimport { SettingsManager } from '../../configuration/SettingsManager'\nimport ReactGA from 'react-ga4'\nimport { UserEventLogger } from '../../utils/UserEventLogger'\n\nexport interface IContentProps extends RouteComponentProps {\n\tcontentStateManager: IContentStateManager\n\tpath: string\n}\n\ninterface IContentState {\n\tarticle: IArticle\n\trating: IArticleRating\n\tunderConst: number\n}\n\n@observer\nexport class Content extends React.Component {\n\tstateManager: IContentStateManager\n\tpath: string\n\tuserId: string\n\tcontentDidUpdate: number\n\n\tconstructor(props: Readonly) {\n\t\tsuper(props)\n\t\tthis.userId = ''\n\t\tthis.contentDidUpdate = 0\n\t\tthis.stateManager = props.contentStateManager\n\t\tthis.path = props.location.pathname.slice(props.match.path.indexOf(':'))\n\t\tthis.stateManager\n\t\t\t.getUserId()\n\t\t\t.then(id => (this.userId = id))\n\t\t\t.catch(error => {\n\t\t\t\tconsole.error(error)\n\t\t\t})\n\n\t\tthis.state = {\n\t\t\tunderConst: 0,\n\t\t\tarticle: { contentItemId: '', path: '', displayText: '', publishedUtc: new Date(), markup: '' },\n\t\t\trating: { contentItemId: '', countLikes: 0, countDislikes: 0, vote: UserVote.none },\n\t\t} as IContentState\n\t\tthis.likeArticle = this.likeArticle.bind(this)\n\t\tthis.dislikeArticle = this.dislikeArticle.bind(this)\n\t}\n\tcomponentDidUpdate() {\n\t\tif (this.contentDidUpdate === 0) {\n\t\t\tif ($('.helpContent').length) {\n\t\t\t\tconst imges = $('.helpContent').find('img')\n\t\t\t\tif (imges.length > 0) {\n\t\t\t\t\timges.each(function() {\n\t\t\t\t\t\tconst src = $(this).attr('src') as string\n\t\t\t\t\t\tif (!src.includes(SettingsManager.REACT_APP_MAIN_CMS_BASE_URL().value)) {\n\t\t\t\t\t\t\t$(this).attr('src', SettingsManager.REACT_APP_MAIN_CMS_BASE_URL().value + src)\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\t$('table').each(function() {\n\t\t\t\t\tconst curTable = $(this)\n\t\t\t\t\tif ($(this).find('tr').length == 1) {\n\t\t\t\t\t\tconst th = $(this).find('tr:first th:first')\n\t\t\t\t\t\t$(th).css({\n\t\t\t\t\t\t\t'background-color': 'transparent',\n\t\t\t\t\t\t\tcolor: '#60605b',\n\t\t\t\t\t\t\t'vertical-align': 'top',\n\t\t\t\t\t\t\t'font-weight': 'bold',\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\tif ($(this).find('tr').length > 1) {\n\t\t\t\t\t\tconst tr = $(this).find('tr:first')\n\t\t\t\t\t\t$(tr).css({\n\t\t\t\t\t\t\t'background-color': '#003D79',\n\t\t\t\t\t\t})\n\t\t\t\t\t\t$(this)\n\t\t\t\t\t\t\t.find('tr')\n\t\t\t\t\t\t\t.each(function(i, row) {\n\t\t\t\t\t\t\t\tconst thAlign = $(row).find('th')\n\t\t\t\t\t\t\t\t$(thAlign).css({\n\t\t\t\t\t\t\t\t\t'vertical-align': 'top',\n\t\t\t\t\t\t\t\t\tcolor: '#60605b',\n\t\t\t\t\t\t\t\t\t'font-weight': 'bold',\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t\tthis.contentDidUpdate = 1\n\t\t}\n\t}\n\tcomponentDidMount(): void {\n\t\tthis.stateManager\n\t\t\t.getArticle(this.path)\n\t\t\t.catch(error => {\n\t\t\t\t// display user friendly error message\n\t\t\t\tconsole.log(error)\n\t\t\t\tthis.setState({ underConst: 2 })\n\t\t\t})\n\t\t\t.then(response => {\n\t\t\t\tconst article = response as IArticle\n\t\t\t\tthis.stateManager\n\t\t\t\t\t.getArticleRating(article.contentItemId, this.userId)\n\t\t\t\t\t.then(response => {\n\t\t\t\t\t\tthis.setState({ rating: response, article: article, underConst: 1 })\n\t\t\t\t\t})\n\t\t\t\t\t.catch(error => {\n\t\t\t\t\t\tconsole.log(error)\n\t\t\t\t\t\tthis.setState({ underConst: 2 })\n\t\t\t\t\t})\n\t\t\t})\n\t}\n\n\tlikeButton(): any {\n\t\tif (this.state.rating.vote === UserVote.like) {\n\t\t\treturn (\n\t\t\t\t\n\t\t\t)\n\t\t} else {\n\t\t\treturn (\n\t\t\t\t\n\t\t\t)\n\t\t}\n\t}\n\n\tdislikeButton(): any {\n\t\tif (this.state.rating.vote === UserVote.dislike) {\n\t\t\treturn (\n\t\t\t\t\n\t\t\t)\n\t\t} else {\n\t\t\treturn (\n\t\t\t\t\n\t\t\t)\n\t\t}\n\t}\n\n\tproductBreadCrumb(): any {\n\t\tif (this.state.article.productName !== '') {\n\t\t\treturn (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{this.state.article.productName}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t)\n\t\t} else {\n\t\t\treturn null\n\t\t}\n\t}\n\n\tsectionBreadCrumb(): any {\n\t\tif (this.state.article.sectionName !== '') {\n\t\t\treturn (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{this.state.article.sectionName}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t)\n\t\t} else {\n\t\t\treturn null\n\t\t}\n\t}\n\n\tratingText(): any {\n\t\tconst total = this.state.rating.countDislikes + this.state.rating.countLikes\n\t\treturn total > 0 ? `${this.state.rating.countLikes} out of ${total} found this helpful.` : ''\n\t}\n\n\tlikeArticle(event: any): void {\n\t\t// Click the like button to like it, click it twice to remove the \"like\" vote\n\t\tthis.handleArticleYesOrNoIconClick(event, true)\n\t\tconst newVote = this.state.rating.vote === UserVote.like ? UserVote.none : UserVote.like\n\t\tthis.stateManager\n\t\t\t.voteOnArticle(this.state.article.contentItemId, this.userId, newVote, this.state.rating.vote)\n\t\t\t.then(rating => this.setState({ rating: rating }))\n\t\t\t.catch(error => {\n\t\t\t\tconsole.log(error)\n\t\t\t})\n\t}\n\n\tdislikeArticle(event: any): void {\n\t\t// Click the dislike button to dislike it, click it twice to remove the \"dislike\" vote\n\t\tthis.handleArticleYesOrNoIconClick(event, false)\n\t\tconst newVote = this.state.rating.vote === UserVote.dislike ? UserVote.none : UserVote.dislike\n\t\tthis.stateManager\n\t\t\t.voteOnArticle(this.state.article.contentItemId, this.userId, newVote, this.state.rating.vote)\n\t\t\t.then(rating => this.setState({ rating: rating }))\n\t\t\t.catch(error => {\n\t\t\t\tconsole.log(error)\n\t\t\t})\n\t}\n\n\thandleArticleYesOrNoIconClick(event: any, likeClicked: boolean) {\n\t\tUserEventLogger.handleUserClickEvent(event, 'SupportSite - Content Page Article helpful Yes or No icon Click', likeClicked ? 'Yes' : 'No')\n\t}\n\n\thandleBreadCrumbClick(event: any) {\n\t\tUserEventLogger.handleUserClickEvent(event, 'SupportSite - Content Page BreadCrumb Click', '')\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t
\n\t\t\t\t{this.state.underConst == 0 ? (\n\t\t\t\t\t''\n\t\t\t\t) : this.state.underConst == 1 && this.state.article.contentItemId ? (\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tSupport Home\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{this.productBreadCrumb()}\n\t\t\t\t\t\t\t\t{this.sectionBreadCrumb()}\n\t\t\t\t\t\t\t\t{this.state.article.displayText}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t
Last Updated: {moment(this.state.article.publishedUtc).format('MMMM D, YYYY')}
\n\t\t\t\t\t\t
{ReactHtmlParser(this.state.article.markup)}
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{' '}\n\t\t\t\t\t\t\tWas this article helpful?  \n\t\t\t\t\t\t\t{this.likeButton()}  \n\t\t\t\t\t\t\t{this.dislikeButton()}  \n\t\t\t\t\t\t\t{this.ratingText()}\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t) : (\n\t\t\t\t\t
\n\t\t\t\t\t\t

Not Found

\n\t\t\t\t\t
\n\t\t\t\t)}\n\t\t\t
\n\t\t)\n\t}\n}\nexport const ContentConnected = (): any => {\n\tconst contentStateManager = container.get('IContentStateManager')\n\t\n\treturn (\n\t\t { \n\t\t\t\tReactGA.send({ hitType: \"pageview\", page: \"props.location.pathname\" }); \n\t\t\t\treturn } } />\n\t)\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport { Link, Route, RouteComponentProps, BrowserRouter as Router, Switch, NavLink } from 'react-router-dom'\nimport { IProductContentStateManager, ISectionInfo } from '../../services/ProductContentStateManager/contracts'\nimport { observer, Observer } from 'mobx-react'\nimport React from 'react'\n// import { container } from '../../submodules/arc/configuration/ServiceLocator'\nimport { injectProperty, container } from '../../configuration/ServiceLocator'\nimport './Product.scss'\nimport { Accordion } from '../commons/Accordion/Accordion'\nimport ProductContent from './ProductContent/ProductContent'\nimport { IProducts, IProductStateManager, ISection } from '../../services/ProductStateManager/contracts'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faSearch } from '@fortawesome/free-solid-svg-icons'\nimport { FormFeedback, Input } from 'reactstrap'\nimport ReactDOM from 'react-dom'\nimport { Section } from '../Section/Section'\nimport { ISectionStateManager } from '../../services/SectionStateManager/contracts'\nimport { Content } from '../Content/Content'\nimport { IContentStateManager } from '../../services/ContentStateManager/contracts'\nimport ReactGA from 'react-ga4'\nimport { UserEventLogger } from '../../utils/UserEventLogger'\nimport { Breadcrumb, BreadcrumbItem } from 'reactstrap'\n\nexport interface IProductsProps extends RouteComponentProps {\n\tproductStateManager: IProductStateManager\n}\n\nexport interface IProductsState {}\n\n@observer\nexport class Product extends React.Component {\n\tmySearcInputRef: React.RefObject\n\tpublic defaultProduct: string\n\tpublic defaultProductName: string\n\tpublic selectedSectionName: string\n\n\tnode: any\n\tconstructor(props: Readonly) {\n\t\tsuper(props)\n\t\tthis.mySearcInputRef = React.createRef()\n\t\tthis.defaultProduct = this.props.match.params ? this.props.match.params.productCode : ''\n\t\tthis.defaultProductName = this.props.match.params ? this.props.match.params.productName : ''\n\t\tthis.selectedSectionName = this.props.match.params ? this.props.match.params.sectionName : ''\n\n\t\t//optional route parmas\n\t\tif (this.props.match.params) {\n\t\t\tif (this.props.match.params.sectionid) {\n\t\t\t\tthis.props.productStateManager.setSelectedType('section')\n\t\t\t} else this.props.productStateManager.setSelectedType('product')\n\t\t} else {\n\t\t\tthis.props.productStateManager.setSelectedType('product')\n\t\t}\n\n\t\tthis.props.productStateManager.getProductsfromJwt('JwtToken').catch(error => console.error(error))\n\t\tthis.onSearchEnter = this.onSearchEnter.bind(this)\n\t\tthis.onSearchButtonClick = this.onSearchButtonClick.bind(this)\n\t\tthis.props.productStateManager.setSelectedProduct(this.defaultProduct, this.defaultProductName)\n\t}\n\n\tcomponentDidMount() {\n\t\tthis.node = ReactDOM.findDOMNode(this)\n\t\twindow.addEventListener('popstate', event => {\n\t\t\twindow.location.reload()\n\t\t})\n\t}\n\tloadProductInfo(productCode: string, productName: string) {\n\t\tthis.props.productStateManager.setSelectedType('product')\n\t\tthis.props.productStateManager.setSelectedProduct(productCode, productName)\n\t\tthis.defaultProduct = productCode\n\t\tthis.defaultProductName = productName\n\t\tthis.props.history.push('/pages/product/' + productCode + '/' + productName)\n\t\tthis.selectedSectionName = ''\n\t}\n\n\tloadContentInformation(contenItemId: any) {\n\t\tthis.props.productStateManager.setSelectedArticle(contenItemId)\n\t\tthis.props.productStateManager.setSelectedType('content')\n\t}\n\n\tloadSectionInformation(event: any, sectionId: any, sectionName: string) {\n\t\tthis.props.productStateManager.setSelectedSection(sectionId)\n\t\tthis.props.productStateManager.setSelectedType('section')\n\t\tthis.selectedSectionName = sectionName\n\t\tif (event) {\n\t\t\tthis.handleUserClickEvent(event, 'SupportSite - Product/Section Page Accordion Section childitem Click', '')\n\t\t}\n\t}\n\t/**On Enter Key Press */\n\tonSearchEnter(event: any) {\n\t\tif (this.props.productStateManager.validateSearchTerm.isFieldValid('searchTerm')) {\n\t\t\tif (event.key === 'Enter') {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tevent.stopPropagation()\n\t\t\t\tconst searchTerm = event.target.value.trim()\n\t\t\t\tthis.props.history.push('/pages/SearchResults?searchTerm=' + encodeURIComponent(searchTerm))\n\t\t\t\tthis.handleUserClickEvent(event, 'SupportSite - Product/Section Page Search', 'Search - ' + searchTerm)\n\t\t\t}\n\t\t}\n\t}\n\n\tonSearchButtonClick(event: any) {\n\t\tif (this.props.productStateManager.validateSearchTerm.isFieldValid('searchTerm')) {\n\t\t\tthis.props.history.push('/pages/SearchResults?searchTerm=' + encodeURIComponent(this.props.productStateManager.searchTerm))\n\t\t\tthis.handleUserClickEvent(event, 'SupportSite - Product/Section Page Search', 'Search - ' + this.props.productStateManager.searchTerm)\n\t\t}\n\t}\n\n\thandleUserClickEvent(event: any, eventType: string, eventText: string) {\n\t\tUserEventLogger.handleUserClickEvent(event, eventType, eventText)\n\t}\n\n\thandleBreadCrumbClick(event: any) {\n\t\tUserEventLogger.handleUserClickEvent(event, 'SupportSite - Product/Section Page BreadCrumb Click', '')\n\t}\n\n\trender() {\n\t\tlet template\n\t\tif (this.props.productStateManager.selectedType === 'product') {\n\t\t\ttemplate = this.loadSectionInformation(null, sectionId, sectionName)} loadContentInformation={(contenItemId: any) => this.loadContentInformation(contenItemId)} productName={this.props.productStateManager.selectedProductName} productCode={this.props.productStateManager.selectedProduct} productContentStateManager={container.get('IProductContentStateManager')} />\n\t\t} else if (this.props.productStateManager.selectedType === 'section') {\n\t\t\t//optional route parms\n\t\t\tthis.props.productStateManager.setSelectedProduct(this.defaultProduct, this.defaultProductName)\n\t\t\tif (this.props.match.params && this.props.match.params.sectionid) {\n\t\t\t\tthis.props.productStateManager.setSelectedSection(this.props.match.params.sectionid)\n\t\t\t}\n\n\t\t\t// sectionId is the termContentItemId\n\t\t\ttemplate =
this.loadContentInformation(contenItemId)} sectionStateManager={container.get('ISectionStateManager')} />\n\t\t} else if (this.props.productStateManager.selectedType === 'content') {\n\t\t\ttemplate = ('IContentStateManager')} />\n\t\t}\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tSupport Home\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{this.selectedSectionName != '' && this.selectedSectionName != undefined ? (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{this.defaultProductName}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t{this.defaultProductName}\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{this.selectedSectionName != '' && this.selectedSectionName != undefined ? {this.selectedSectionName} : <>}\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{/*
Search
*/}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t this.onSearchEnter(e)} value={this.props.productStateManager.searchTerm} onChange={e => this.props.productStateManager.setSearchTerm(e.target.value)} />\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{/* {this.props.productStateManager.validateSearchTerm.getMessage('searchTerm')} */}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{this.props.productStateManager.products.map((product: IProducts, index: number) => {\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t this.loadProductInfo(productCode, productName)}\n\t\t\t\t\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\t\t\t\t\tdefaultProduct={this.defaultProduct}\n\t\t\t\t\t\t\t\t\t\t\ttitle={product.productName}\n\t\t\t\t\t\t\t\t\t\t\tproductCode={product.productCode}\n\t\t\t\t\t\t\t\t\t\t\tcontent={product.sectionList.map((section: ISection, sectionindex) => {\n\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t this.loadSectionInformation(e, section.sectionId, section.sectionName)} to={'/pages/product/' + this.defaultProduct + '/' + product.productName + '/sectionid/' + section.sectionId + '/sectionName/' + section.sectionName}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{section.sectionName}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t{/* Right Container */}\n\t\t\t\t\t\t{template}\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t)\n\t}\n}\n\nexport const ProductConnected = () => {\n\tconst store = container.get('IProductStateManager')\n\n\treturn (\n\t\t {\n\t\t\t\tReactGA.send({ hitType: 'pageview', page: 'props.location.pathname' })\n\t\t\t\treturn \n\t\t\t}}\n\t\t/>\n\t)\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport React from 'react'\nimport { Route, RouteComponentProps } from 'react-router'\nimport './LandingPage.scss'\nimport { ILandingPageStateManager, IProductCategoryInformation, IProductInformation } from '../../services/LandingPageStateManager/contracts'\nimport { container } from '../../configuration/ServiceLocator'\nimport { observer } from 'mobx-react'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faSearch, faCaretRight } from '@fortawesome/free-solid-svg-icons'\nimport { Link } from 'react-router-dom'\nimport Card from 'react-bootstrap/Card'\nimport { Container, Row, Col } from 'reactstrap'\nimport ReactGA from 'react-ga4'\nimport { UserEventLogger } from '../../utils/UserEventLogger'\n\nexport interface ILandingPageProps extends RouteComponentProps {\n\tlandingPageStateManager: ILandingPageStateManager\n}\n\nexport interface ILandingPageState {}\n\n@observer\nexport class LandingPage extends React.Component {\n\t/**\n\t *\n\t */\n\tsearchTerm: string\n\tconstructor(props: Readonly) {\n\t\tsuper(props)\n\t\tthis.props.landingPageStateManager.getProductCategoryList().catch(error => console.error(error))\n\t\tthis.searchTerm = ''\n\n\t\tthis.onSearchEnter = this.onSearchEnter.bind(this)\n\t\tthis.SearchResults = this.SearchResults.bind(this)\n\t}\n\n\t/**On Enter Key Press */\n\tonSearchEnter(event: any) {\n\t\tif (event.key === 'Enter') {\n\t\t\tevent.preventDefault()\n\t\t\tevent.stopPropagation()\n\t\t\tthis.props.history.push('./SearchResults?searchTerm=' + encodeURIComponent(this.searchTerm))\n\t\t\tUserEventLogger.handleUserClickEvent(event, 'SupportSite - Landing Page Search', 'Search - ' + this.searchTerm)\n\t\t}\n\t}\n\n\t/**On Search button click*/\n\tSearchResults(event: any) {\n\t\tevent.preventDefault()\n\t\t// halt if validation fails\n\t\tif (this.searchTerm.trim() && this.searchTerm.trim() != '') {\n\t\t\tthis.props.history.push('./SearchResults?searchTerm=' + encodeURIComponent(this.searchTerm))\n\t\t\tUserEventLogger.handleUserClickEvent(event, 'SupportSite - Landing Page Search', 'Search - ' + this.searchTerm)\n\t\t}\n\t}\n\n\thandleProductLinkClick(event: any) {\n\t\tUserEventLogger.handleUserClickEvent(event, 'SupportSite - Landing Page Product Link Click', '')\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{this.props.landingPageStateManager.userName}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t, how can we help you today?\n\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t this.onSearchEnter(e)} onChange={e => (this.searchTerm = e.target.value)} />\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t

Explore by Product

\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{this.props.landingPageStateManager.productCategoryList.productCategoryList\n\t\t\t\t\t\t\t\t\t\t.filter((value: any, filterIndex: number) => filterIndex % 2 === 0)\n\t\t\t\t\t\t\t\t\t\t.map((item: IProductCategoryInformation, index: number) => {\n\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{item.productCategoryName}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{item.ProductInfos.map((productItem: IProductInformation, productIndex: number) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{productItem.name}{' '}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{this.props.landingPageStateManager.productCategoryList.productCategoryList.length > 1 ? (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{this.props.landingPageStateManager.productCategoryList.productCategoryList\n\t\t\t\t\t\t\t\t\t\t\t.filter((value: any, filterIndex: number) => filterIndex % 2 === 1)\n\t\t\t\t\t\t\t\t\t\t\t.map((item: IProductCategoryInformation, index: number) => {\n\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{item.productCategoryName}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{item.ProductInfos.map((productItem: IProductInformation, productIndex: number) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{productItem.name}{' '}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t
\n\t\t\t
\n\t\t)\n\t}\n}\n\nexport const LandingPageConnected = () => {\n\tconst store = container.get('ILandingPageStateManager')\n\t\n\treturn (\n\t\t { \n\t\t\t\tReactGA.send({ hitType: \"pageview\", page: \"props.location.pathname\" }); \n\t\t\t\treturn } } />\n\t)\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport React from 'react'\nimport { BrowserRouter as Router, Route } from 'react-router-dom'\nimport './scss/custom.scss'\nimport { UserSessionConnected } from './views/UserSession/UserSession'\nimport { SearchResultsConnected } from './views/SearchResults/SearchResults'\nimport { ProductConnected } from './views/Product/Product'\nimport { LandingPageConnected } from './views/LandingPage/LandingPage'\nimport { ContentConnected } from './views/Content/Content'\n\nconst App: React.FunctionComponent = () => {\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t\t\n\t\t
\n\t)\n}\n\nexport default App\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\n// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(\n (process as { env: { [key: string]: string } }).env.PUBLIC_URL,\n window.location.href\n );\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","/*>\n* @license\n* Copyright (c) 2014-2022 ABILITY Network, Inc., an INOVALON, Inc. company. All Rights Reserved.\n* \n* This computer program is CONFIDENTIAL and a TRADE SECRET of ABILITY Network, Inc.\n* The receipt or possession of this program does not convey any rights to use,\n* reproduce or disclose its contents in whole or in part, without the specific\n* written consent of ABILITY Network, Inc. Any use, reproduction or disclosure of\n* this program without the express written consent of ABILITY Network, Inc. is a\n* violation of the copyright laws and may subject you to criminal prosecution.\n<*/\nimport 'react-app-polyfill/ie11'\nimport 'react-app-polyfill/stable'\nimport React from 'react'\nimport ReactDOM from 'react-dom'\nimport $script from 'scriptjs'\nimport App from './App'\nimport { SettingsManager } from './configuration/SettingsManager'\nimport './index.scss'\nimport * as serviceWorker from './serviceWorker'\nimport { createBrowserHistory } from 'history'\nimport ReactGA from 'react-ga4'\n\n// create the browser history\nexport const history = createBrowserHistory({\n\tbasename: process.env.PUBLIC_URL,\n})\n\nReactGA.initialize(\"G-WBTY070CE1\")\n\nexport const getUrlVars = (): { [key: string]: string } => {\n\tconst result: { [key: string]: string } = {}\n\twindow.location.href\n\t\t.slice(window.location.href.indexOf('?') + 1)\n\t\t.split('&')\n\t\t.forEach(element => {\n\t\t\tconst hash: string[] = element.split('=')\n\t\t\tresult[hash[0]] = hash[1]\n\t\t})\n\treturn result\n}\n\n// ensure appConfig.js is loaded without caching\n$script(`${process.env.PUBLIC_URL}/appConfig.js?_=${Date.now()}`, () => {\n\t// configure the container... this must be done BEFORE rendering the App but AFTER importing service locator\n\tSettingsManager.configureContainer()\n\tReactDOM.render(, document.getElementById('root'))\n\t// If you want your app to work offline and load faster, you can change\n\t// unregister() to register() below. Note this comes with some pitfalls.\n\t// Learn more about service workers: https://bit.ly/CRA-PWA\n\tserviceWorker.unregister()\n})\n"],"sourceRoot":""}