{"version":3,"sources":["Constants.js","store/UserSession.js","store/messageStore.js","store/activeCalls.js","helpers/device_helper.js","store/summary.js","store/calls.js","store/geoRegions.js","store/geoCount.js","store/callDetail.js","store/licenseOverage.js","store/agentIds.js","store/tenantInfo.js","store/packetDataT.js","store/packetDataS.js","store/modality.js","store/ladder.js","store/index.js","store/store.js","i18n.js","helpers/constants_helper.js","helpers/api.js","components/Event.js","screens/Waiting.js","screens/HeaderBar.js","auth/SiteDown.js","auth/Error.js","auth/Reject.js","auth/AuthWrapper.js","screens/Initializer.js","screens/Footer.js","lib/proj4hack.js","components/MapHighmaps.js","screens/common/CardWrapper.js","screens/calls/map/highmaps.js","helpers/json_helper.js","helpers/dataFormatter.js","screens/calls/summary/Summary.js","components/BaseChart.js","components/BarChart.js","components/DonutChart.js","components/LineChart.js","screens/calls/summary/index.js","helpers/download_helper.js","screens/calls/list/FilterBar.js","screens/calls/list/index.js","lib/docs/PolycomEndUserLicenseAgreementALLPRODUCTS.pdf","lib/docs/PolycomExportRestrictions.pdf","lib/docs/RC_Invite_Dep_Guide.docx","screens/modality/index.js","screens/dashboard/widgets/WidgetCardWrapper.js","screens/dashboard/widgets/BaseWidget.js","screens/dashboard/widgets/EndreasonPie.js","screens/dashboard/widgets/DevicesPie.js","screens/dashboard/widgets/DevicesBar.js","screens/dashboard/widgets/ActiveCallsChart.js","screens/dashboard/widgets/ActiveCallsPer.js","screens/dashboard/widgets/TopConferences.js","screens/dashboard/widgets/CallDuration.js","screens/dashboard/widgets/ActiveCallsCount.js","screens/dashboard/widgets/TotalCalls.js","screens/dashboard/widgets/TeamsCalls.js","screens/dashboard/widgets/SkypeCalls.js","screens/dashboard/widgets/TotalDuration.js","screens/dashboard/widgets/TeamsDuration.js","screens/dashboard/widgets/SkypeDuration.js","screens/dashboard/widgets/TotalMedian.js","screens/dashboard/widgets/TeamsMedian.js","screens/dashboard/widgets/SkypeMedian.js","screens/dashboard/widgets/TotalMax.js","screens/dashboard/widgets/TeamsMax.js","screens/dashboard/widgets/SkypeMax.js","screens/dashboard/widgets/LicenseOverage.js","screens/dashboard/widgets/LicenseRejected.js","screens/dashboard/widgets/LicenseSurged.js","screens/dashboard/widgets/ClaritiLicenseOverage.js","screens/dashboard/widgets/MostUsed.js","screens/dashboard/index.js","Menu.js","screens/SideBar.js","screens/TenantFilter.js","screens/Selector.js","screens/ViewTitle.js","auth/Logout.js","screens/calls/list/AccordionContent.js","screens/calls/list/CallDetail.js","components/LadderChart.js","screens/calls/list/Ladder.js","components/ErrorCatcher.js","screens/MainPage.js","index.js"],"names":["useLocalQueryService","validEnv","name","value","console","error","highchartsColors","COLORS","CLIENT_ID","process","ANALYTICS_API_URL","SERVICES_API_URL","AUTH_API","CONSOLE","STAGE","URL","OAUTH_TOKEN","OAUTH_REFRESH","AUTHLOGOUT","ORION_OAUTH","ORION_API","API_GW","API_GW_LOCALHOST","ANALYTICS_API_URL_LOCALHOST","ORIONLOGOUT","CHANGE_PASSWORD","PROFILE","POLY_PRIVACY_URL","POLY_LICENSE_AGREEMENT_URL","HELP","DEFAULT_TIME_PERIOD","TIMEPERIOD","DAY","TEXT","ICON","INTERVAL","HOURS","WEEK","MONTH","THREEMONTH","SIXMONTH","YEAR","APIURL","tail","DATASOURCE","CALLSREFRESH","KEY","LOADING","CALLSUPDATE","DETAIL","GEOCOUNT","GEOREGIONS","SUMMARY","ACTIVE_CALLS","LICENSE_OVERAGE","AGENT_NORMALIZER","TENANT_INFO","MODALITY","PACKET_DATA_T","RESET","PACKET_DATA_S","LADDER","initialState","tenantId","applicationId","userId","userName","rawUser","rejected","UPDATE_SESSION_STORAGE","state","action","data","type","UPDATE_MESSAGE","RESET_MESSAGE","message","doDisplay","header","text","color","setTimeout","store","dispatch","raw","series","categories","loading","chartData","getChartData","activeCalls","buckets","deployments","forEach","b","key","protocol","p","hasOwnProperty","total","idx","Object","keys","sort","d","push","k","bucket","bKey","pKey","doc_count","topCalls","values","a","localeCompare","namePatterns","normalizeAgentInput","s","replace","trim","initializePatterns","patterns","splitNameAndVersion","testFlag","result","length","s2","ii","patternObj","m","pattern","exec","jj","order","Number","isInteger","log","versionPattern","cmpVersions","id","i","diff","m1","m2","regExStrip0","segmentsA","split","segmentsB","l","Math","min","parseInt","durationSeries","durationCategories","topConferencesSeries","topConferencesCategories","agentSeries","agentDrilldown","agentCategories","endReasonSeries","activeCallsPerHourSeries","timeInterval","fromCount","fromCountCategories","fromDurr","fromDurrCategories","confData","getTopConferencesSeries","topConferences","durData","getDurationSeries","durationBuckets","agentData","getAgentSeries","agents","endReasons","getEndReasonSeries","activeLicenses","getActiveCallsPerHourSeries","maxLicensesPerInterval","fromSeries","getFromSeries","fromDuration","drilldown","endReasonDrilldown","count","countCat","durr","durrCat","fromData","totals","countSeries","colorByPoint","durrSeries","countCategories","durrCategories","duration","maxLicenses","max","myMax","undefined","reasons","sum_other_doc_count","o","y","others","otherCount","other","versions","prev","fullname","chartSeries","chartDrilldown","seriesMap","conf","Array","fill","otherIdx","c","conferences","confs","confIdx","splitIdx","slice","processUpdateCalls","records","totalCount","processReplaceCalls","record","agent","join","dialString","dialNumber","deploymentType","deployment","toLowerCase","startsWith","existingCalls","newRecords","regions","parseData","totalHits","hits","totalCountries","totalCities","uniqueCountries","uniqueCities","gcc","geoCountryCode","grc","geoRegionCode","countries","sinRegion","totalCalls","ret","datum","point","lat","location","lon","z","isTeams","durationMillis","accepted","claritiOverageCount","reject","surge","claritiOverage","licenseExceededData","licenseExceeded","item","key_as_string","claritiExceeded","received","processPatterns","RegExp","hasAccess","userCompany","searchedCompany","inbound","outbound","output","aggregations","lossPerMinute","maxCumPktLoss","atx","arx","pvtx","pvrx","cvtx","cvrx","maxPktLoss","pktLossOutboundDer","pktLossInboundDer","inboundDerivative","outboundDerivative","loadData","messages","retval","dst_ip","src_ip","history","createBrowserHistory","middleware","routerMiddleware","composedEnhancers","compose","applyMiddleware","createStore","combineReducers","router","connectRouter","userSession","summary","calls","geoRegions","geoCount","callDetail","licenseOverage","agentIds","tenantInfo","packetDataT","packetDataS","modality","ladder","i18n","use","XHR","LanguageDetector","init","fallbackLng","ns","defaultNS","lowerCaseLng","cache","enabled","interpolation","escapeValue","formatSeparator","format","lng","toUpperCase","_createUrlMap","SUBMENU","paths","titles","element","myPaths","url","myTitles","title","fullUrl","isSelector","children","app","_testAndSet","requiredProperties","removables","devOnly","req","fullPath","r_idx","splice","_createNameMap","baseStr","isArray","err","getUpdatedDate","timePeriodKey","Date","currentHours","getUTCHours","setUTCMinutes","setUTCSeconds","setUTCMilliseconds","setUTCHours","setUTCDate","getUTCDate","setUTCMonth","getUTCMonth","refreshAccessTokenRequest","authenticatingInterceptor","sessionId","accessToken","Event","nonInteraction","label","user","getState","e","category","debug","JSON","stringify","ReactGA","event","debouncer","activeQueries","attemptedQueries","awaitingRefresh","maxRefresh","getAPIParams","RESOURCE","search","params","limit","searchParams","qs","parse","timeKey","timePeriod","startOnAfter","toISOString","clearDebouncerResource","resource","query","debounce","requestFinished","now","getTime","inProgress","lastUpdated","resetQuery","dataApiRequest","axios","create","paramsSerializer","getApiData","headers","assign","defaults","common","Headers","Parameters","get","then","response","catch","http_status_code","config","__isRetryRequest","status","description","statusText","request","baseURL","withCredentials","logout","setAuth","post","accept","res","newToken","doFutureRefresh","ms","refreshAccessToken","manual","SessionId","OrionResponse","expires_in","access_token","refreshRejected","finally","Waiting","t","this","props","className","Component","TopBar","path","window","pathname","helpPath","open","Menu","fixed","inverted","Item","onClick","menuToggle","as","Icon","size","href","Image","alt","src","position","gotoHelpHref","Dropdown","icon","trigger","isRejected","UserButton","encodeURIComponent","Link","to","Messenger","Message","floating","Header","translate","connect","SiteDownPage","style","width","height","textAlign","bottom","left","margin","right","top","backgroundColor","HeaderBar","display","marginTop","borderRadius","background","padding","ErrorPage","showDetails","Button","setState","RejectPage","AuthWrapper","authenticateUser","code","rest","redirect_uri","resp","orionResponse","newsessionId","newAccessToken","warn","interceptors","includes","version","eject","initAxios","updateUserSession","handleAuthenticationErrors","isError","myError","updateUserRejected","errstr","render","Error","Reject","endsWith","error_description","tid","uuid","Initializer","didUpdate","isLoaded","isFailed","str","dataReceived","dataRecived","tenant","prevProps","SiteDown","agentPatterns","Footer","Divider","target","rel","proj4","HighchartsMap","Highcharts","MapView","zoomLevel","highZoomLevel","reboundChart","bind","resetChart","clickedSeries","clickedOutsideSeries","getCurrentViewData","x","chart","mapZoom","xAxis","toValue","yAxis","sw","transformToLatLon","mapTransforms","default","ne","seriesClickCallback","marker","plotX","plotY","bgColor","isDarkMode","fgColor","legend","panning","events","click","credits","mapData","borderColor","nullColor","dataLabels","mapNavigation","refs","chartComponent","ref","constructorType","highcharts","options","getOptions","PureComponent","CardWrapper","Card","fluid","Content","Dimmer","active","isLoading","Loader","AssetMap","lastPropertyCount","statSize","bounds","getQueryBounds","topRightLat","topRightLon","bottomLeftLat","bottomLeftLon","p1","p2","swPoint","nePoint","Grid","centered","padded","stackable","Column","Statistic","Popup","content","deepHasOwnProperty","obj","vars","substring","isNaN","getFormattedTime","round","floor","pad","Summary","teams","skype","getProp","count_successful","total_ms","max_ms","median_ms","show","prop","SummaryGrid","colWidth","css","BaseChart","highchart","reflow","decimals","colors","spacingBottom","spacingTop","spacingRight","spacingLeft","tooltip","pointFormat","time","useUTC","React","defaultProps","withSize","BarChart","pageNumber","xAxisCategories","yAxisMin","yAxisText","showLegend","stackBars","lineWidth","reversedStacks","squareSymbol","symbolRadius","plotOptions","stacking","DonutChart","verticalLegend","align","layout","pie","showInLegend","map","innerSize","LineChart","xMax","xMin","xAxisType","yMin","yMax","yAxisType","zoomType","softMin","softMax","CallSummary","arg","myUrl","getLicenseLink","ListHeaderMap","trans","titleTrans","ignoredDataFields","convertToCsv","objectList","headerTitles","headerPaths","list","headerMap","getHeaderMap","flattenHeaderMap","getHeaderList","newPaths","parsed","doCSVSort","CSV","line","getDatum","pathIdx","toString","myPath","downloadFile","mimeType","document","createElement","navigator","msSaveBlob","Blob","createObjectURL","setAttribute","body","appendChild","removeChild","moment","extendMoment","Moment","MIN_DATE","subtract","toDate","MAX_DATE","add","FilterBar","input","paginationArrow","properties","iconName","direction","iconStyle","opacity","disabled","onTrigger","pushProps","twiddleDate","dateSelection","getCalendarDateRange","isCalendarOpen","newParams","found","inputRef","current","dates","startMoment","utc","start","startOf","endMoment","end","endOf","startBefore","range","filterHidden","Input","placeholder","from","defaultValue","conferenceId","labelPosition","numberOfCalendars","minimumDate","maximumDate","onSelect","paginationArrowComponent","flowing","on","onClose","onOpen","onBlur","shorterThan","longerThan","endReason","region","selection","minWidth","exceedLicenseCapacity","exceededLicenseCapacity","CallList","pageSize","sortAsc","sortOrder","rowsDisplayed","sortAscending","getAllData","getCallDetails","getBookmarkParameter","callId","bookmark","searchAfter","searchBefore","isFullData","changeSortOrder","float","lineHeight","clear","Table","celled","compact","Row","HeaderCell","entry","index","Visibility","continuous","once","onBottomVisible","Cell","Modality","agreed","Checkbox","onChange","EULA","EXPORT","Dimmable","Segment","blurring","dimmed","modalityLoading","columns","divided","verticalAlign","modalityDetail","arch","Form","method","Field","DOCS","file","md5","date","WidgetCardWrapper","BaseWidget","dataSource","searchLoc","EndreasonPie","w","h","maxW","maxH","DevicesPie","DevicesBar","ActiveCallsChart","ActiveCallsPer","TopConferences","CallDuration","ActiveCallsCount","TotalCalls","TeamsCalls","SkypeCalls","TotalDuration","TeamsDuration","SkypeDuration","TotalMedian","TeamsMedian","SkypeMedian","TotalMax","TeamsMax","SkypeMax","LicenseOverage","LicenseRejected","LicenseSurged","MostUsed","DynamicDashboard","dbKey","defaultLayout","widget","widgetTypes","WidgetDefinition","ClaritiLicenseOverage","dbStorage","LocalStorage","saveCallback","empty","ls","localStorage","getItem","lsObj","widgets","widgetMap","idSet","Set","random","has","idIdx","layouts","md","moved","static","minW","defaultGridItemProps","minH","setItem","layoutsObj","widgetsObj","filters","layoutStorage","MENU","sidebar","HighMap","createNameMap","URLMap","createUrlMap","SideBar","childIsActive","Sidebar","animation","visible","menuVisible","vertical","link","currentlyExpanded","child","innerIndex","setHistory","stopPropagation","dataParams","domain","TenantFilter","addTidToParams","newParam","doSearch","inputVal","doSearchWrapper","preventDefault","handleInputChange","stratusId","currentSelection","inline","onKeyDown","Selector","doRender","ViewTitle","Logout","AccordionContent","openKeys","getPanelContent","handleTitleClick","itemProps","newKeyState","isOpen","marginBottom","sensitivity","myIsOpen","fontWeight","fontSize","constructor","Accordion","styled","panels","activeIndex","onTitleClick","paddingBottom","defaultActiveIndex","CallDetail","isData","packetData","packetDataExists","plcmTraceId","packetsLoading","returnToSender","startTime","gotoLadder","LadderChart","topMargin","bottomMargin","padLeft","padRight","ySpacing","dataBoxText","dataBoxIdx","createChart","chartRef","select","reactSelf","highlightColor","nonHighlightColor","nodeKeys","nodes","xSpacing","yBottom","node","xPoint","append","attr","x1","x2","centerLoc","myIdx","selectAll","mssep","getUTCMinutes","getUTCSeconds","getMilliseconds","msgType","enter","String","CallLadder","getData","noData","ladderStore","endDate","endTime","endms","startms","startDate","detailLoading","ErrorCatcher","info","ErrorWrapper","WrappedComponent","MainPage","handleHideClick","menuOpen","handleShowClick","windowResized","currentWidth","innerWidth","Drilldown","toggleMenu","Responsive","onUpdate","Pushable","Pusher","basic","exact","component","querySelector","ReactDOM"],"mappings":"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","file":"static/js/main.de8f0c8f.chunk.js","sourcesContent":["// change to use locally deployed query service for semi-E2E testing (no api gateway)\nexport const useLocalQueryService = false;\n\nconst validEnv = (name, value) => {\n if (value) {\n return value;\n }\n console.error(\"Env variable \" + name + \" has not been set\");\n};\n\nexport const highchartsColors = [\n \"#00C9DE\",\"#F0CA4D\",\"#E37B40\",\"#ED3752\",\"#B9ECFB\",\"#88DEA6\",\"#FAD19D\",\"#F0A699\"\n];\n\nexport const COLORS = {\n POLY_MIDNIGHT: \"#00263E\",\n POLY_LAVA: \"#EB3C00\",\n POLY_WHITE: \"#FFFFFF\",\n POLY_BLACK: \"#000000\",\n POLY_SAND: \"#EEE8D6\",\n POLY_PEARL: \"#D7D2CB\",\n POLY_LINEN: \"#A59C94\",\n POLY_SLATE: \"#968B8A\",\n POLY_STONE: \"#A5CFCB\",\n POLY_SUNFLOWER: \"#FDDD66\",\n POLY_MINT: \"#99C3A7\"\n}\n\nexport const CLIENT_ID = validEnv( \n \"REACT_APP_CLIENT_ID\", \n process.env.REACT_APP_CLIENT_ID\n);\nconst ANALYTICS_API_URL = validEnv( \n \"REACT_APP_ANALYTICS_API\", \n process.env.REACT_APP_ANALYTICS_API\n);\nconst SERVICES_API_URL = validEnv( \n \"REACT_APP_SERVICES_API\", \n process.env.REACT_APP_SERVICES_API\n) + \"/api/v1.0\";\nconst AUTH_API = validEnv( \n \"REACT_APP_AUTH_API\", \n process.env.REACT_APP_AUTH_API\n) + \"/api\";\nconst CONSOLE = validEnv( \n \"REACT_APP_CONSOLE\", \n process.env.REACT_APP_CONSOLE\n);\n/*const POLY_STYLES_VERSION = validEnv( \n \"REACT_APP_POLY_STYLES_VERSION\", \n process.env.REACT_APP_POLY_STYLES_VERSION\n);*/\nexport const STAGE = validEnv( \n \"REACT_APP_STAGE\", \n process.env.REACT_APP_STAGE\n);\nconst HELPURL = validEnv(\n \"REACT_APP_HELP_URL\",\n process.env.REACT_APP_HELP_URL\n);\n\nconst ANALYTICS_API_URL_LOCALHOST = \"http://localhost:8337\";\n\nexport const URL = {\n OAUTH_TOKEN: AUTH_API + \"/OathToken\",\n OAUTH_REFRESH: AUTH_API + \"/RefreshToken\",\n AUTHLOGOUT: AUTH_API + \"/Logout\",\n ORION_OAUTH: SERVICES_API_URL + \"/oauth2/authorize?response_type=code&client_id=\" + CLIENT_ID,\n ORION_API: SERVICES_API_URL,\n API_GW: ANALYTICS_API_URL,\n API_GW_LOCALHOST: ANALYTICS_API_URL_LOCALHOST + \"/query\",\n ORIONLOGOUT: SERVICES_API_URL + \"/oauth2/logout?client_id=\" + CLIENT_ID,\n CHANGE_PASSWORD: SERVICES_API_URL + \"/oauth2/change-password?client_id=\" + CLIENT_ID + \"&redirect_uri=\",\n CONSOLE: CONSOLE,\n PROFILE: CONSOLE + \"/tenant-portal/profile-update?redirect_uri=\",\n POLY_PRIVACY_URL: \"https://www.polycom.com/company/privacy.html\",\n POLY_LICENSE_AGREEMENT_URL:\n \"https://support.polycom.com/content/dam/polycom-support/global/documentation/3725-84356-001a_polycom_cloud_terms_of_service_v2.pdf\",\n HELP: HELPURL\n};\n\nexport const DEFAULT_TIME_PERIOD = \"WEEK\";\n\nexport const TIMEPERIOD = {\n DAY: {\n TEXT: 'TimePeriod.Today',\n ICON: 'sun',\n INTERVAL: '1h'\n },\n HOURS: {\n TEXT: 'TimePeriod.24Hours',\n ICON: 'clock',\n INTERVAL: '1h'\n },\n WEEK: {\n TEXT: 'TimePeriod.Week',\n ICON: 'arrows alternate horizontal',\n INTERVAL: '6h'\n },\n MONTH: {\n TEXT: 'TimePeriod.Month',\n ICON: 'calendar alternate',\n INTERVAL: '1d'\n },\n THREEMONTH: {\n TEXT: 'TimePeriod.3Month',\n ICON: 'calendar plus',\n INTERVAL: '7d'\n },\n SIXMONTH: {\n TEXT: 'TimePeriod.6Month',\n ICON: 'delete calendar',\n INTERVAL: '14d'\n },\n YEAR: {\n TEXT: 'TimePeriod.Year',\n ICON: 'calendar',\n INTERVAL: '28d'\n }\n};\n\n// source information to be used for Loader. This is the general source (API)\n// with resources beneath it and the properties of getting those resources\nlet APIURL = URL.API_GW;\nlet tail = \"\";\nif (useLocalQueryService) {\n APIURL = URL.API_GW_LOCALHOST;\n tail = \"/v1/\";\n}\nexport const DATASOURCE = {\n CALLSREFRESH: {\n KEY: \"calls/refresh\",\n LOADING: \"calls/loading\",\n URL: APIURL + '/tenant/call/detailedList' + tail\n },\n CALLSUPDATE: {\n KEY: \"calls/update\",\n LOADING: \"calls/loading\",\n URL: APIURL + '/tenant/call/detailedList' + tail\n },\n DETAIL: {\n KEY: \"detail/update\",\n LOADING: \"detail/loading\",\n URL: APIURL + '/tenant/call/callInfo' + tail\n },\n GEOCOUNT: {\n KEY: \"geocount/update\",\n //RESET: \"geocount/reset\",\n LOADING: \"geocount/loading\",\n URL: APIURL + '/tenant/call/geoCount' + tail\n },\n GEOREGIONS: {\n KEY: \"georegions/update\",\n LOADING: \"georegions/loading\",\n URL: APIURL + '/tenant/call/geoRegions' + tail\n },\n SUMMARY: {\n KEY: \"summary/update\",\n LOADING: \"summary/loading\",\n URL: APIURL + '/tenant/call/summary' + tail\n },\n ACTIVE_CALLS: {\n KEY: \"activeCalls/update\",\n LOADING: \"activeCalls/loading\",\n URL: APIURL + '/tenant/call/activeCalls' + tail\n },\n LICENSE_OVERAGE: {\n KEY: \"licenseOverage/update\",\n LOADING: \"licenseOverage/loading\",\n URL: APIURL + '/tenant/call/licenseOverage' + tail\n },\n AGENT_NORMALIZER: {\n KEY: \"normalizer/update\",\n LOADING: \"normalizer/loading\",\n// URL: APIURL + '/tenant/agents/agentIdNormalizers' + tail\n // need this to point to api-gw until the query-service bug that doesn't return\n // access-control-allowed-origin for this one resource is fixed\n URL: 'https://api-gw.plcm.vc/tenant/agents/agentIdNormalizers'\n },\n TENANT_INFO: {\n KEY: \"tenants/update\",\n LOADING: \"tentants/loading\",\n URL: APIURL + \"/tenant/call/tenantInfo\" + tail\n },\n MODALITY: {\n KEY: \"modality/update\",\n LOADING: \"modality/loading\",\n URL: \"https://aqua-analytics-modality.plcm.vc/api/HttpTrigger_FileServe\"\n },\n PACKET_DATA_T: {\n KEY: \"packetDataT/update\",\n LOADING: \"packetDataT/loading\",\n RESET: \"packetDataT/reset\",\n URL: APIURL + \"/tenant/call/packetLossTeams\" + tail\n },\n PACKET_DATA_S: {\n KEY: \"packetDataS/update\",\n LOADING: \"packetDataS/loading\",\n RESET: \"packetDataS/reset\",\n URL: APIURL + \"/tenant/call/packetLossSkype\" + tail\n },\n LADDER: {\n KEY: \"ladder/update\",\n LOADING: \"ladder/loading\",\n RESET: \"ladder/reset\",\n URL: APIURL + \"/tenant/call/callLadder\" + tail\n }\n};\n","import { CLIENT_ID } from \"Constants\";\n\nconst initialState = {\n tenantId: \"\",\n applicationId: CLIENT_ID,\n userId: \"\",\n userName: \"\",\n rawUser: {},\n rejected: false\n};\n\nexport const UPDATE_SESSION_STORAGE = \"user/update\";\n\nexport default (state = initialState, action) => {\n let { type, ...data } = action;\n void type;\n switch (action.type) {\n case UPDATE_SESSION_STORAGE:\n return {\n ...state,\n ...data\n };\n default:\n return state;\n }\n};\n","import { store } from 'store/store'\n\nexport const UPDATE_MESSAGE = \"message/update\";\nexport const RESET_MESSAGE = \"message/reset\";\n\nconst initialState = {\n message: { \n doDisplay: false, \n header: \"\", \n text: \"\", \n color: \"blue\" \n },\n};\n\nexport default (state = initialState, action) => {\n switch (action.type) {\n case UPDATE_MESSAGE:\n setTimeout(() => {\n store.dispatch({\n type: RESET_MESSAGE\n })\n }, 10000);\n return {\n ...state,\n message: action.message\n };\n case RESET_MESSAGE:\n return {\n ...state,\n message: {}\n };\n default:\n return state;\n }\n};\n\n","import { DATASOURCE } from 'Constants'\n\nconst initialState = {\n raw: {}, \n series: [],\n categories: [],\n loading: false\n};\n\nexport default (state = initialState, action) => {\n switch (action.type) {\n case DATASOURCE.ACTIVE_CALLS.LOADING:\n return {\n ...state,\n loading: true,\n raw: {},\n series: [],\n categories: []\n };\n case DATASOURCE.ACTIVE_CALLS.KEY:\n let chartData = getChartData(action.data);\n return {\n ...state,\n loading: false,\n raw: action.data,\n series: chartData.series,\n categories: chartData.categories\n };\n default:\n return state;\n }\n}\n\nfunction getChartData(activeCalls) {\n let chartData = { series: [], categories: [] };\n if (!activeCalls || !activeCalls.buckets) {\n return chartData;\n }\n\n\n let deployments = {};\n let categories = [];\n let series = {};\n activeCalls.buckets.forEach(b => {\n deployments[b.key] = true;\n b.protocol.buckets.forEach(p => {\n if (!series.hasOwnProperty(p.key)) {\n series[p.key] = {name: p.key, total: 0, data: []};\n }\n });\n });\n let idx = 0;\n Object.keys(deployments).sort().forEach(d => {\n deployments[d] = idx++;\n categories.push(d);\n Object.keys(series).forEach(k => {\n series[k].data.push(0);\n });\n });\n\n activeCalls.buckets.forEach(bucket => {\n let bKey = bucket.key;\n bucket.protocol.buckets.forEach(protocol => {\n let pKey = protocol.key;\n series[pKey].total += protocol.doc_count;\n series[pKey].data[deployments[bKey]] += protocol.doc_count;\n });\n });\n\n let topCalls = Object.values(series);\n topCalls.sort((a,b) => a.name.localeCompare(b.name));\n\n return { series: topCalls, categories: categories };\n}\n","let namePatterns = [];\n\nexport function normalizeAgentInput(s) {\n return s.replace(/[[(\\])]/gi,' ').replace(/[^ -~]+/g,'').replace(/\\s+/g,' ').trim();\n}\n\nexport function initializePatterns(patterns) {\n namePatterns = patterns;\n}\n\nexport function splitNameAndVersion(s,testFlag = false) {\n let result = [];\n if (!s || s.length === 0) {\n return result;\n }\n let s2 = normalizeAgentInput(s);\n let ii = 0;\n for (ii = 0; ii < namePatterns.length; ii++) {\n let patternObj = namePatterns[ii];\n let m = patternObj.pattern.exec(s2);\n if (m !== null) {\n for (let jj = 0; jj < patternObj.order.length; jj++) {\n if (Number.isInteger(patternObj.order[jj])\n && m.length > patternObj.order[jj] + 1\n // capture groups can be null or undefined\n && typeof(m[patternObj.order[jj] + 1]) === \"string\") {\n result.push(m[patternObj.order[jj] + 1].trim());\n } else {\n result.push(patternObj.order[jj]);\n }\n }\n if (patternObj.hasOwnProperty(\"debug\")) {\n console.log(s + \" => \" + s2 + \" => \" + result);\n }\n break;\n } \n }\n\n if (ii === namePatterns.length) {\n ii = -1;\n result = [\"Unknown\",s];\n }\n\n if (testFlag) {\n let pattern = ii >= 0 ? namePatterns[ii].pattern : \"none\";\n return {result: result, pattern: pattern, idx: ii};\n } \n return result;\n}\n\n// assumes the key to sort by is in a.id and b.id\nconst versionPattern = /^(.*) - ([0-9.\\-_:]*)$/;\nexport function cmpVersions (a,b) {\n a = a.hasOwnProperty('id') ? a.id : (a.hasOwnProperty('name') ? a.name : a);\n b = b.hasOwnProperty('id') ? b.id : (b.hasOwnProperty('name') ? b.name : b);\n \n let m1 = versionPattern.exec(a);\n let m2 = versionPattern.exec(b);\n\n if (!m1 && !m2) {\n return a.localeCompare(b);\n } else if (!m1 && m2) {\n return 1;\n } else if (m1 && !m2) {\n return -1;\n }\n\n if (m1[1] !== m2[1]) {\n return m1[1].localeCompare(m2[1]);\n }\n\n var i, diff;\n m1[2] = m1[2].replace(/-|_|:/g,'.');\n m2[2] = m2[2].replace(/-|_|:/g,'.');\n var regExStrip0 = /(\\.0+)+$/;\n var segmentsA = m1[2].replace(regExStrip0, '').split('.');\n var segmentsB = m2[2].replace(regExStrip0, '').split('.');\n var l = Math.min(segmentsA.length, segmentsB.length);\n\n for (i = 0; i < l; i++) {\n diff = parseInt(segmentsA[i], 10) - parseInt(segmentsB[i], 10);\n if (diff) {\n return diff;\n }\n }\n return segmentsA.length - segmentsB.length;\n}\n\n","import { DATASOURCE } from 'Constants'\nimport { splitNameAndVersion, cmpVersions } from 'helpers/device_helper'\n\nconst initialState = {\n raw: {},\n durationSeries: [],\n durationCategories: [],\n topConferencesSeries: [],\n topConferencesCategories: [],\n agentSeries: [],\n agentDrilldown: [],\n agentCategories: [],\n endReasonSeries: [],\n activeCallsPerHourSeries: [],\n timeInterval: \"Hour\",\n fromCount: [],\n fromCountCategories: [],\n fromDurr: [],\n fromDurrCategories: [],\n loading: false,\n};\n\nexport default (state = initialState, action) => {\n switch (action.type) {\n case DATASOURCE.SUMMARY.KEY:\n let confData = getTopConferencesSeries(action.data.topConferences);\n let durData = getDurationSeries(action.data.durationBuckets, confData);\n let agentData = getAgentSeries(action.data.agents);\n let endReasons = getEndReasonSeries(action.data.endReasons);\n let activeLicenses = getActiveCallsPerHourSeries(action.data.maxLicensesPerInterval);\n let fromSeries = getFromSeries(action.data.fromDuration, action.data.total);\n return {\n ...state,\n loading: false,\n raw: action.data,\n topConferencesSeries: confData.series,\n topConferencesCategories: confData.categories,\n durationSeries: durData.series,\n durationCategories: durData.categories,\n agentSeries: agentData.series,\n agentDrilldown: agentData.drilldown,\n endReasonSeries: endReasons.series,\n endReasonDrilldown: endReasons.drilldown,\n activeCallsPerHourSeries: activeLicenses,\n timeInterval: action.data.timeInterval,\n fromCount: fromSeries.count,\n fromCountCategories: fromSeries.countCat,\n fromDurr: fromSeries.durr,\n fromDurrCategories: fromSeries.durrCat\n };\n case DATASOURCE.SUMMARY.LOADING:\n return {\n ...state,\n raw: {},\n durationSeries: [],\n durationCategories: [],\n topConferencesSeries: [],\n topConferencesCategories: [],\n agentSeries: [],\n agentDrilldown: [],\n agentCategories: [],\n endReasonSeries: [],\n activeCallsPerHourSeries: [],\n fromCount: [],\n fromCountCategories: [],\n fromDurr: [],\n fromDurrCategories: [],\n timeInterval: \"Hour\",\n loading: true\n };\n default:\n return state;\n }\n};\n\nfunction getFromSeries(fromData, totals) {\n if (!fromData || !fromData.buckets || fromData.buckets.length === 0) {\n return {series: [], categories: []};\n }\n\n let countSeries = {name: \"Call Count\", data: [], colorByPoint:true};\n let durrSeries = {name: \"Endpoints by duration\", data: [], colorByPoint:true};\n let countCategories = [];\n let durrCategories = [];\n fromData.buckets.forEach(bucket => {\n countSeries.data.push(bucket.doc_count);\n durrSeries.data.push(bucket.duration.value);\n countCategories.push(bucket.key);\n durrCategories.push(bucket.key);\n });\n\n return {count:[countSeries], countCat:countCategories, durr:[durrSeries], durrCat:durrCategories};\n}\n\nfunction getActiveCallsPerHourSeries(maxLicenses) {\n if (!maxLicenses || maxLicenses.length === 0) {\n return [];\n }\n\n let total = {name: \"Total Joined\", data: []};\n let max = {name: \"Max Concurrent\", data: []};\n\n maxLicenses.forEach(bucket => {\n total.data.push([bucket.key,bucket.doc_count]);\n // add one since the field is the max of tenantOtherActiveCallCount for the interval meaning it is not counting\n // itself, if undefined the answer is 0\n const myMax = bucket.maxLicenses.value !== undefined ? bucket.maxLicenses.value + 1 : 0;\n max.data.push([bucket.key,myMax]);\n });\n\n return [total,max];\n}\n\nfunction getEndReasonSeries(reasons) {\n let chartData = { series: [], drilldown: [] };\n if (!reasons || !reasons.buckets) {\n return chartData;\n }\n\n // create a mapping of devices so we can create the chart series\n let series = {};\n let total = reasons.sum_other_doc_count;\n reasons.buckets.forEach(o => {\n series[o.key] = {name: o.key, y: o.doc_count};\n total += o.doc_count;\n });\n\n\n // check how many options we have less than 1%\n let others = {};\n let otherCount = reasons.sum_other_doc_count;\n Object.keys(series).forEach( key => {\n if (series[key].y < 0.03 * total) {\n others[key] = series[key];\n otherCount += series[key].y;\n }\n });\n Object.keys(others).forEach( key => {\n delete series[key];\n });\n if (reasons.sum_other_doc_count > 0) {\n others.other = {name: \"Not Aggregated\", y: reasons.sum_other_doc_count};\n }\n if (otherCount > 0) {\n series.other = {name: \"other\", y: otherCount, drilldown: \"other\"};\n }\n\n // sort the data arrays\n let drilldown = [{name: \"Other\", id: \"other\", data: Object.values(others)}];\n chartData = Object.values(series);\n drilldown[0].data.sort(function(a,b) { return b.y-a.y });\n chartData.sort(function(a,b) { return b.y-a.y });\n\n return {series: [{name: \"End Reasons\", data: chartData, colorByPoint: true}], drilldown: drilldown}\n}\n\nfunction getAgentSeries(agents) {\n let chartData = { series: [], drilldown: [] };\n if (!agents || !agents.buckets) {\n return chartData;\n }\n\n // create a mapping of devices so we can create the chart series\n let series = {};\n let drilldown = {};\n if (agents.sum_other_doc_count > 0) {\n series.other = {name:\"other\", y:agents.sum_other_doc_count, id:\"other\"}\n }\n agents.buckets.forEach(o => {\n let versions = splitNameAndVersion(o.key);\n\n let name = versions[0];\n let prev = \"\";\n let fullname = name;\n\n if (!series.hasOwnProperty(fullname)) {\n series[fullname] = {name:name, y:0, id:fullname};\n if (versions.length > 1) {\n series[fullname].drilldown = fullname;\n }\n }\n series[fullname].y += o.doc_count;\n\n for (let jj = 1; jj< versions.length; jj++) {\n prev = fullname;\n name = versions[jj];\n fullname = prev + \" - \" + name;\n\n // this is a data object that goes in an object named after its parent. If it has\n // children, it needs a drilldown named after itself\n\n if (!drilldown.hasOwnProperty(prev)) {\n drilldown[prev] = {name:prev, id:prev, data:{}, colorByPoint: true};\n }\n\n if (!drilldown[prev].data.hasOwnProperty(name)) {\n drilldown[prev].data[name] = {name:name, y:0, id:name, colorByPoint: true}\n if (versions.length - 1 > jj) {\n drilldown[prev].data[name].drilldown = fullname;\n }\n }\n drilldown[prev].data[name].y += o.doc_count;\n }\n });\n\n // sort the data arrays\n let chartSeries = Object.values(series).sort(cmpVersions);\n let chartDrilldown = Object.values(drilldown);\n for (let ii = 0; ii < chartDrilldown.length; ii++) {\n chartDrilldown[ii].data = Object.values(chartDrilldown[ii].data).sort(cmpVersions);\n }\n\n return {series: [{name: \"Devices\", data: chartSeries, colorByPoint: true}], drilldown: chartDrilldown}\n}\n\nfunction getDurationSeries(buckets, confData) {\n let chartData = { series: [], categories: [] };\n if (!buckets) {\n return chartData;\n }\n\n let categories = [\"1s\",\"5s\",\"30s\",\"1m\",\"5m\",\"30m\",\"1h\",\"5h\",\"30h\",\"more\"];\n let seriesMap = {};\n let series = [];\n\n confData.categories.forEach(conf => {\n seriesMap[conf] = series.push(\n {name: conf, data: Array(categories.length).fill(0) }\n )-1;\n });\n seriesMap[\"Other\"] = series.push(\n {name: \"Other\", data: Array(categories.length).fill(0), color: \"#777777\" }\n )-1;\n let otherIdx = seriesMap[\"Other\"];\n\n for (let ii = 0; ii < categories.length; ii++) {\n let c = categories[ii];\n if (!buckets[c]) {\n console.error(\"We're missing a bucket category [\" + c + \"]\");\n return chartData;\n }\n series[otherIdx].data[ii] += buckets[c].conferences.sum_other_doc_count;\n\n buckets[c].conferences.buckets.forEach(confs => {\n let confIdx = seriesMap.hasOwnProperty(confs.key) ? seriesMap[confs.key] : otherIdx;\n series[confIdx].data[ii] += confs.doc_count;\n });\n };\n\n return {series: series, categories: categories}\n}\n\nfunction getTopConferencesSeries(conferences) {\n let series = {name:\"Calls\", data: [], colorByPoint: true};\n let categories = [];\n if (!conferences || conferences.length === 0) {\n return { series: [series], categories: categories};\n }\n\n let data = [];\n\n conferences.forEach(o => {\n data.push({name: o.key, total: o.doc_count});\n });\n\n if (conferences.length > 3) {\n data.sort((a,b) => b.total-a.total);\n let splitIdx = 0;\n for (let ii = 0; ii < data.length && ii < 8; ii++) {\n splitIdx++;\n if (ii > 3 && data[ii].total === 1) {\n break;\n }\n }\n\n if (splitIdx < data.length-1) {\n data = data.slice(0,splitIdx);\n }\n }\n\n data.forEach(d => {\n series.data.push(d.total);\n categories.push(d.name);\n });\n\n return { series: [series], categories: categories };\n}\n","import { DATASOURCE } from 'Constants'\nimport { splitNameAndVersion } from 'helpers/device_helper'\n\nconst initialState = {\n data: [],\n total: 0,\n loading: false\n};\n\nexport default (state = initialState, action) => {\n switch (action.type) {\n case DATASOURCE.CALLSUPDATE.KEY:\n return {\n ...state,\n data: processUpdateCalls(state.data, action.data.records),\n total: action.data.totalCount.value,\n loading: false\n };\n case DATASOURCE.CALLSREFRESH.KEY:\n return {\n ...state,\n data: processReplaceCalls(action.data.records),\n total: action.data.totalCount.value,\n loading: false\n };\n case DATASOURCE.CALLSUPDATE.LOADING:\n case DATASOURCE.CALLSREFRESH.LOADING:\n return {\n ...state,\n loading:true\n };\n default:\n return state;\n }\n};\n\nfunction processReplaceCalls(records) {\n records.forEach(record => {\n let s = splitNameAndVersion(record.agent);\n let idx = 0;\n if (s.length > 0 && s[0] === \"Unknown\") {\n idx = 1;\n }\n record.agent = s.slice(idx).join(\" \");\n record.dialString = record.dialString ? record.dialString : record.dialNumber;\n record.deploymentType = record.deployment.toLowerCase().startsWith(\"teams\") ? \"Teams\" : \"Skype\";\n \n });\n \n return records;\n}\n\nfunction processUpdateCalls(existingCalls, newRecords) {\n newRecords.forEach(record => {\n let s = splitNameAndVersion(record.agent);\n let idx = 0;\n if (s.length > 0 && s[0] === \"Unknown\") {\n idx = 1;\n }\n record.agent = s.slice(idx).join(\" \");\n record.dialString = record.dialString ? record.dialString : record.dialNumber;\n record.deploymentType = record.deployment.toLowerCase().startsWith(\"teams\") ? \"Teams\" : \"Skype\";\n \n });\n \n return [...existingCalls,...newRecords];\n}\n\n","import { DATASOURCE } from 'Constants'\n\nlet defaultDataObj = function() {\n return {\"totalHits\":0, \"countries\":{}, \"totalCountries\":0, \"totalCities\":0, \"uniqueCountries\":0, \"uniqueCities\":0};\n}\n\nconst initialState = {\n regions: defaultDataObj(),\n loading: false\n};\n\nexport default (state = initialState, action) => {\n switch (action.type) {\n case DATASOURCE.GEOREGIONS.KEY:\n return {\n ...state,\n regions: parseData(action.data),\n loading: false\n };\n case DATASOURCE.GEOREGIONS.LOADING:\n return {\n ...state,\n regions: defaultDataObj(),\n loading: true\n };\n default:\n return state;\n }\n};\n\nlet parseData = function(data) {\n let regions = defaultDataObj();\n regions.totalHits = data.hits;\n regions.totalCountries = data.totalCountries;\n regions.totalCities = data.totalCities;\n regions.uniqueCountries = data.uniqueCountries;\n regions.uniqueCities = data.uniqueCities;\n\n data.buckets.forEach((bucket) => {\n let gcc = bucket.key.geoCountryCode;\n let grc = bucket.key.geoRegionCode;\n \n if (gcc === \"true\") {\n return;\n }\n\n if (!regions.countries.hasOwnProperty(gcc)) {\n regions.countries[gcc] = {\"total\":0, \"sinRegion\":0, \"regions\":{}};\n }\n if (grc === \"true\") {\n regions.countries[gcc].sinRegion += bucket.doc_count;\n } else {\n if (!regions.countries[gcc].regions.hasOwnProperty(grc)) {\n regions.countries[gcc].regions[gcc+\"-\"+grc] = 0;\n }\n regions.countries[gcc].regions[gcc+\"-\"+grc] += bucket.doc_count;\n } \n regions.countries[gcc].total += bucket.doc_count;\n });\n\n return regions;\n};\n","import { DATASOURCE } from 'Constants'\n\nconst initialState = {\n count: [],\n totalCalls: 0,\n totalCountries: 0,\n totalCities: 0,\n uniqueCountries: 0,\n uniqueCities: 0,\n loading: false\n};\n\nexport default (state = initialState, action) => {\n switch (action.type) {\n case DATASOURCE.GEOCOUNT.KEY:\n return {\n ...state,\n count: parseData(action.data.buckets),\n totalCalls: action.data.hits,\n totalCountries: action.data.totalCountries,\n totalCities: action.data.totalCities,\n uniqueCountries: action.data.uniqueCountries,\n uniqueCities: action.data.uniqueCities,\n loading: false\n };\n case DATASOURCE.GEOCOUNT.LOADING:\n return {\n ...state,\n count: [],\n totalCalls: 0,\n totalCountries: 0,\n totalCities: 0,\n uniqueCountries: 0,\n uniqueCities: 0,\n loading: true\n };\n default:\n return state;\n }\n};\n\nlet parseData = function(data) {\n let ret = [];\n // comes back as an array of objects with an object of key \"3\" inside\n data.forEach( datum => {\n if (!datum.hasOwnProperty(\"3\")) {\n console.log(\"GeoCount error? Not indexed with '3': %O\",datum);\n return;\n }\n let point = {};\n point.lat = datum[\"3\"].location.lat;\n point.lon = datum[\"3\"].location.lon;\n point.z = datum[\"3\"].count;\n ret.push(point);\n });\n return ret;\n};\n","import { DATASOURCE } from 'Constants'\n\nconst initialState = {\n data: {},\n isTeams: true,\n loading: false,\n duration: 0\n};\n\nexport default (state = initialState, action) => {\n switch (action.type) {\n case DATASOURCE.DETAIL.KEY:\n return {\n ...state,\n isTeams: action.data.deployment.toLowerCase().startsWith(\"teams\"),\n duration: action.data.durationMillis/1000,\n data: process(action.data),\n loading: false\n };\n case DATASOURCE.DETAIL.LOADING:\n return {\n ...state,\n isTeams: true,\n data: {},\n loading: true,\n duration: 0\n };\n default:\n return state;\n }\n};\n\nfunction process(data) {\n delete data.durationMillis;\n delete data.deployment;\n // if (data.VTC && data.duration) {\n // let durationS = 0;\n // let times = data.duration.split(\":\");\n // if (times.length === 3)\n // {\n // durationS += parseFloat(times[0])*60*60 + \n // parseFloat(times[1])*60 +\n // parseFloat(times[2]);\n // }\n // if (data.deployment)\n // {\n // delete data.deployment;\n // }\n // if (durationS > 0)\n // {\n // let pIn = 0;\n // let pOut = 0;\n // Object.keys(data.VTC).forEach(key => {\n // if (key.endsWith(\"In\") && data.VTC[key].PacketLoss) {\n // pIn += data.VTC[key].PacketLoss;\n // } else if (key.endsWith(\"Out\") && data.VTC[key].PacketLoss) {\n // pOut += data.VTC[key].PacketLoss;\n // }\n // });\n // if (pIn > 0 || pOut > 0) {\n // data.VTC.packetLossPerSecondInbound = Math.round(pIn/durationS*100)/100;\n // data.VTC.packetLossPerSecondOutbound = Math.round(pOut/durationS*100)/100;\n // }\n // }\n // }\n return data;\n};\n","import { DATASOURCE } from 'Constants'\n\nconst initialState = {\n rejected: 0,\n accepted: 0,\n loading: false\n};\n\nexport default (state = initialState, action) => {\n switch (action.type) {\n case DATASOURCE.LICENSE_OVERAGE.LOADING:\n return {\n ...state,\n loading: true,\n rejected: 0,\n accepted: 0,\n claritiOverageCount: 0\n };\n case DATASOURCE.LICENSE_OVERAGE.KEY:\n let reject = 0;\n let surge = 0;\n let claritiOverage = 0\n const licenseExceededData = action.data.licenseExceeded || action.data\n licenseExceededData.forEach(item => {\n // admittance limiter sets the exceedLicenseCapacity field when the call is over the limit\n // true means the call was rejected, false means it was accepted as a surge call\n if (item.key_as_string === 'true') {\n surge = item.doc_count;\n } else if (item.key_as_string === 'false') {\n reject = item.doc_count;\n }\n });\n\n if (action.data.claritiExceeded) {\n action.data.claritiExceeded.forEach(item => {\n // for now try just summing stuff\n claritiOverage += item.doc_count;\n });\n }\n\n return {\n ...state,\n loading: false,\n rejected: reject,\n accepted: surge,\n claritiOverageCount: claritiOverage\n };\n default:\n return state;\n }\n}\n","import { DATASOURCE } from 'Constants'\nimport { initializePatterns } from 'helpers/device_helper'\n\nconst initialState = {\n received: false,\n patterns: [],\n loading: false\n};\n\nexport default (state = initialState, action) => {\n switch (action.type) {\n case DATASOURCE.AGENT_NORMALIZER.LOADING:\n return {\n ...state,\n loading: true\n };\n case DATASOURCE.AGENT_NORMALIZER.KEY:\n let patterns = processPatterns(action.data.patterns);\n initializePatterns(patterns);\n return {\n ...state,\n loading: false,\n received: true,\n patterns: patterns\n };\n default:\n return state;\n }\n};\n\nfunction processPatterns(patterns) {\n let namePatterns = [];\n patterns.forEach(patternObj => {\n let order = [];\n patternObj.order.forEach(item => {\n if (item !== null && item !== -1) {\n order.push(item);\n }\n });\n namePatterns.push({pattern: new RegExp(patternObj.pattern), order: order});\n });\n return namePatterns;\n};\n","import { DATASOURCE } from 'Constants'\n\nconst initialState = {\n hasAccess: false,\n loading: false,\n userCompany: \"\",\n searchedCompany: {}\n};\n\nexport default ( state = initialState, action) => {\n switch (action.type) {\n case DATASOURCE.TENANT_INFO.KEY:\n return {\n ...state,\n hasAccess: action.data.hasAccess,\n userCompany: action.data.userCompany,\n searchedCompany: action.data.searchedCompany,\n loading: false\n };\n case DATASOURCE.TENANT_INFO.LOADING:\n return {\n ...state,\n loading: true,\n };\n default:\n return state;\n }\n};\n","import {DATASOURCE} from 'Constants'\n\nconst initialState = {\n data: [],\n loading: false\n};\n\nexport default (state = initialState, action) => {\n switch (action.type) {\n case DATASOURCE.PACKET_DATA_T.RESET:\n return {\n ...state,\n loading: false,\n data: []\n };\n case DATASOURCE.PACKET_DATA_T.LOADING:\n return {\n ...state,\n loading: true,\n data: []\n };\n case DATASOURCE.PACKET_DATA_T.KEY:\n return {\n ...state,\n loading: false,\n data: process(action.data)\n };\n default:\n return state;\n }\n}\n\nfunction process(data) {\n const inbound = {name: \"To RealConnect\", data: []};\n const outbound = {name: \"From RealConnect\", data: []};\n const output = [inbound, outbound];\n if (!data.aggregations || !data.aggregations.lossPerMinute ||\n !data.aggregations.lossPerMinute.buckets || data.aggregations.lossPerMinute.buckets.length <= 1) {\n return output;\n }\n const buckets = data.aggregations.lossPerMinute.buckets;\n let maxCumPktLoss = {atx: 0, arx: 0, pvtx: 0, pvrx: 0, cvtx: 0, cvrx: 0}\n buckets.forEach(bucket => {\n const maxPktLoss = {atx: 0, arx: 0, pvtx: 0, pvrx: 0, cvtx: 0, cvrx: 0}\n for (const key of Object.keys(maxPktLoss)) {\n maxPktLoss[key] = Math.max(maxCumPktLoss[key], bucket[key].value);\n }\n const pktLossOutboundDer = maxPktLoss.atx - maxCumPktLoss.atx +\n maxPktLoss.pvtx - maxCumPktLoss.pvtx +\n maxPktLoss.cvtx - maxCumPktLoss.cvtx;\n\n const pktLossInboundDer = maxPktLoss.arx - maxCumPktLoss.arx +\n maxPktLoss.pvrx - maxCumPktLoss.pvrx +\n maxPktLoss.cvrx - maxCumPktLoss.cvrx;\n\n inbound.data.push([bucket.key, pktLossInboundDer]);\n outbound.data.push([bucket.key, pktLossOutboundDer]);\n maxCumPktLoss = maxPktLoss;\n });\n return output;\n}\n","import { DATASOURCE } from 'Constants'\n\nconst initialState = {\n data: [], \n loading: false\n};\n\nexport default (state = initialState, action) => {\n switch (action.type) {\n case DATASOURCE.PACKET_DATA_S.RESET:\n return {\n ...state,\n loading:false,\n data:[]\n };\n case DATASOURCE.PACKET_DATA_S.LOADING:\n return {\n ...state,\n loading: true,\n data:[] \n };\n case DATASOURCE.PACKET_DATA_S.KEY:\n return {\n ...state,\n data: process(action.data),\n loading: false\n };\n default:\n return state;\n }\n}\n\nfunction process(data) {\n let inbound = {name: \"To RealConnect\", data:[]}; \n let outbound = {name: \"From RealConnect\", data:[]}; \n let output = [inbound,outbound];\n if (!data.aggregations || !data.aggregations.lossPerMinute || \n !data.aggregations.lossPerMinute.buckets || data.aggregations.lossPerMinute.buckets.length <= 1) { \n return output; \n } \n let buckets = data.aggregations.lossPerMinute.buckets; \n buckets.forEach( bucket => { \n if (bucket.inboundDerivative && bucket.inboundDerivative.value >= 0) \n { \n inbound.data.push([bucket.key,bucket.inboundDerivative.value]); \n } \n if (bucket.outboundDerivative && bucket.outboundDerivative.value >= 0) \n { \n outbound.data.push([bucket.key,bucket.outboundDerivative.value]); \n } \n }); \n return output; \n}\n","import { DATASOURCE } from 'Constants'\n\nconst initialState = {\n data:{},\n loading: false\n};\n\nexport default (state = initialState, action) => {\n switch (action.type) {\n case DATASOURCE.MODALITY.KEY:\n let data = action.data;\n return {\n ...state,\n data: data,\n loading: false\n };\n case DATASOURCE.MODALITY.LOADING:\n return {\n ...state,\n data: {},\n loading: true\n };\n default:\n return state;\n }\n};\n\n","import { DATASOURCE } from 'Constants'\n\nconst initialState = {\n data: [],\n loading: false\n};\n\nexport default (state = initialState, action) => {\n switch (action.type) {\n case DATASOURCE.LADDER.RESET:\n return {\n ...state,\n data:[],\n loading:false\n };\n case DATASOURCE.LADDER.KEY:\n return {\n ...state,\n data: loadData(action.data),\n loading: false\n };\n case DATASOURCE.LADDER.LOADING:\n return {\n ...state,\n data:[],\n loading:true\n };\n default:\n return state;\n } \n};\n\n// Currently, all 0.0.0.0 messages are duplicates that are elsewhere. Filtering here.\nfunction loadData(messages) {\n let retval = [];\n messages.forEach( message => {\n if (message.dst_ip !== \"0.0.0.0\" && message.src_ip !== \"0.0.0.0\") {\n retval.push(message);\n }\n });\n return retval;\n}\n","import { combineReducers } from 'redux'\nimport { connectRouter } from 'connected-react-router'\nimport userSession from './UserSession'\nimport message from './messageStore'\nimport activeCalls from './activeCalls'\nimport summary from './summary'\nimport calls from './calls'\nimport geoRegions from './geoRegions'\nimport geoCount from './geoCount'\nimport callDetail from './callDetail'\nimport licenseOverage from './licenseOverage'\nimport agentIds from './agentIds'\nimport tenantInfo from './tenantInfo'\nimport packetDataT from './packetDataT'\nimport packetDataS from './packetDataS'\nimport modality from './modality'\nimport ladder from './ladder'\n\nexport default history => \n combineReducers({\n router: connectRouter(history),\n userSession,\n message,\n activeCalls,\n summary,\n calls,\n geoRegions,\n geoCount,\n callDetail,\n licenseOverage,\n agentIds,\n tenantInfo,\n packetDataT,\n packetDataS,\n modality,\n ladder\n });\n","import { createStore, applyMiddleware, compose } from 'redux'\nimport { routerMiddleware } from 'connected-react-router'\nimport { createBrowserHistory } from 'history'\nimport rootReducer from 'store'\n\nexport const history = createBrowserHistory()\n\nconst initialState = {}\nconst enhancers = []\nconst middleware = [\n routerMiddleware(history)\n]\n\nif (process.env.NODE_ENV === 'development') {\n const devToolsExtension = window.__REDUX_DEVTOOLS_EXTENSION__;\n\n if (typeof devToolsExtension === 'function') {\n enhancers.push(devToolsExtension())\n }\n}\n\nconst composedEnhancers = compose(\n applyMiddleware(...middleware),\n ...enhancers\n)\n\nexport const store = createStore(\n rootReducer(history),\n initialState,\n composedEnhancers\n)\n","import i18n from \"i18next\";\nimport XHR from \"i18next-xhr-backend\";\n//import Cache from 'i18next-localstorage-cache';\nimport LanguageDetector from \"i18next-browser-languagedetector\";\n\ni18n\n .use(XHR)\n .use(LanguageDetector)\n .init({\n fallbackLng: \"en-us\",\n\n // have a common namespace used around the full app\n ns: [\"common\"],\n defaultNS: \"common\",\n lowerCaseLng: true,\n\n cache: {\n enabled: false\n },\n\n interpolation: {\n escapeValue: false, // not needed for react!!\n formatSeparator: \",\",\n format: function(value, format, lng) {\n if (format === \"uppercase\") {\n return value.toUpperCase();\n }\n return value;\n }\n }\n });\n\nexport default i18n;\n","// creates a mapping of pathname (eg: \"/calls/list\") to properties that represent it (eg:\n// pathname: /calls/list, title: Calls | List, app: app)\nexport function createUrlMap(SUBMENU) {\n return _createUrlMap(SUBMENU, {}, [], []);\n};\n\nfunction _createUrlMap(SUBMENU, URL, paths, titles) {\n SUBMENU.forEach((element) => {\n let myPaths = [...paths,element.url];\n let myTitles = [...titles,element.title];\n let fullUrl = '/' + myPaths.join('/');\n let isSelector = element.isSelector;\n\n if (element.hasOwnProperty('children') && element.children.length > 0) {\n _createUrlMap(element.children, URL, myPaths, myTitles);\n } else {\n URL[fullUrl] = {url: fullUrl, app: element.app, title: element.title, titles: myTitles, isSelector: isSelector};\n }\n });\n\n return URL;\n};\n\n// Check we have all required attributes, and generate the 'fullPath' attribute\nexport function testAndSet(SUBMENU, STAGE) {\n _testAndSet(SUBMENU, [], STAGE);\n};\n\nfunction _testAndSet (SUBMENU, paths, STAGE) {\n let requiredProperties = [\"title\",\"url\",\"icon\"];\n let removables = [];\n\n for (let idx = 0; idx < SUBMENU.length; idx++) {\n let element = SUBMENU[idx];\n if (element.devOnly && STAGE !== \"dev\") {\n removables.push(idx); \n } \n if (!element.hasOwnProperty('app') && !element.hasOwnProperty('children')) {\n console.error(\"Menu is not properly formatted. Must have either [app] or \" + \n \"[children] on object [%O].\", element);\n return;\n }\n requiredProperties.forEach((req) => {\n if (!element.hasOwnProperty(req)) {\n console.error(\"Menu is not properly formatted. [\" + req + \n \"] property missing from an object [%O].\", element);\n return;\n }\n });\n\n let myPaths = [...paths, element.url];\n element.fullPath = '/' + myPaths.join('/');\n\n if (element.hasOwnProperty('children') && element.children.length > 0) {\n _testAndSet(element.children, myPaths, STAGE);\n }\n };\n\n for (let r_idx = removables.length-1; r_idx >= 0; r_idx--) {\n SUBMENU.splice(removables[r_idx],1);\n }\n};\n\n// create a map of urls for Constants ... assume flattenedURLMap is already created\nexport function createNameMap(SUBMENU) {\n return _createNameMap(\"\",SUBMENU);\n};\n\nfunction _createNameMap(baseStr,SUBMENU) {\n let URL = {};\n SUBMENU.forEach((element) => {\n let key = element.url.toUpperCase();\n let url = baseStr + \"/\" + element.url;\n\n if (URL.hasOwnProperty(key) && (!Array.isArray(URL[key]) || element.children.length === 0)) {\n console.err(\"Found an instance of an exact path as well as a parent path on key [\" + \n key + \"]. Eg: /calls is not allowed an app along with /calls/list having an app.\")\n }\n\n if (!element.hasOwnProperty('children') || element.children.length === 0) {\n URL[key] = url;\n } else {\n URL[key] = _createNameMap(url, element.children);\n }\n });\n\n return URL;\n};\n\nexport function getUpdatedDate(timePeriodKey) {\n let d = new Date();\n let currentHours = d.getUTCHours();\n d.setUTCMinutes(0);\n d.setUTCSeconds(0);\n d.setUTCMilliseconds(0);\n d.setUTCHours(0);\n switch (timePeriodKey) {\n case 'DAY':\n break;\n case 'HOURS':\n d.setUTCHours(currentHours-24);\n break;\n case 'WEEK':\n d.setUTCDate(d.getUTCDate()-7);\n break;\n default:\n case 'MONTH':\n d.setUTCMonth(d.getUTCMonth()-1);\n break;\n case 'THREEMONTH':\n// d.setUTCMonth(d.getUTCMonth()-3,1);\n d.setUTCMonth(d.getUTCMonth()-3);\n break;\n case 'SIXMONTH':\n// d.setUTCMonth(d.getUTCMonth()-6,1);\n d.setUTCMonth(d.getUTCMonth()-6);\n break;\n case 'YEAR':\n// d.setUTCMonth(d.getUTCMonth()-12,1);\n d.setUTCMonth(d.getUTCMonth()-12);\n break;\n }\n return d;\n};\n","import axios from \"axios\"\nimport qs from \"query-string\"\nimport { useLocalQueryService, TIMEPERIOD, DEFAULT_TIME_PERIOD, URL } from 'Constants'\nimport { store } from 'store/store';\nimport { UPDATE_MESSAGE} from 'store/messageStore'\nimport { UPDATE_SESSION_STORAGE } from 'store/UserSession'\nimport { getUpdatedDate } from 'helpers/constants_helper'\nimport { Event } from 'components/Event'\n\n// for direct connection through sshuttle ... click chrome shield and allow insecure\n\n// These are internal state. Nothing else interacts with them except through initAxios.\nlet refreshAccessTokenRequest;\nlet authenticatingInterceptor;\nlet sessionId;\nlet accessToken;\nlet defaultMaxRefresh = 5;\nlet debouncer = {activeQueries: 0, attemptedQueries: 0, awaitingRefresh: false, maxRefresh: defaultMaxRefresh};\nlet debouncerTimeout = 60000;\n\nconst getAPIParams = (RESOURCE,search,params) => {\n \n if (!params) {\n params = {};\n }\n if (!params.limit) {\n params.limit = 100;\n }\n let searchParams = qs.parse(search);\n Object.keys(searchParams).forEach(key => {\n // strip out known UI parameters\n if (key !== \"timePeriod\" && key !== \"dataSource\") {\n params[key] = searchParams[key];\n }\n });\n let timeKey = DEFAULT_TIME_PERIOD;\n if (searchParams) {\n if (searchParams.timePeriod) {\n timeKey = searchParams.timePeriod.toUpperCase();\n }\n }\n\n let TIME = TIMEPERIOD[timeKey];\n if (!TIME) {\n console.log(\"There is no set of sources for timePeriod [%s]\", timeKey);\n return false;\n }\n if (!params.startOnAfter) {\n let startOnAfter = getUpdatedDate(timeKey);\n params.startOnAfter = startOnAfter.toISOString();\n }\n if (!params.timeInterval) {\n params.timeInterval = TIMEPERIOD[timeKey].INTERVAL;\n }\n // strip out UI params\n return {params: params, RESOURCE: RESOURCE, startOnAfter: params.startOnAfter};\n};\n\nconst clearDebouncerResource = (resource) => {\n let query = qs.stringify(resource.params);\n let key = resource.RESOURCE.KEY;\n if (debouncer[key] && debouncer[key].query === query) {\n debouncer.activeQueries--;\n if (debouncer.activeQueries === 0) {\n debouncer.attemptedQueries = 0;\n }\n delete debouncer[key];\n }\n}\n\n// return true if we debounce the request\nconst debounce = (resource,requestFinished=false) => {\n // debouncer structure:\n // debouncer {\n // activeQueries: integer (0 when done accessing)\n // attemptedQueries: integer (0 when latest block is done)\n // resource: {\n // query: source:queryString\n // inProgress: boolean\n // lastUpdated: ssep\n // }\n // }\n\n let query = qs.stringify(resource.params);\n let key = resource.RESOURCE.KEY;\n let now = (new Date()).getTime();\n\n // finishing a request\n if (requestFinished) {\n if (debouncer[key] && debouncer[key].query === query) {\n debouncer[key].inProgress = false;\n debouncer[key].lastUpdated = now;\n debouncer.activeQueries--;\n } \n if (debouncer.activeQueries === 0) {\n debouncer.attemptedQueries = 0;\n } \n return false;\n }\n\n // adding a request\n if (!debouncer[key]) {\n debouncer[key] = {inProgress:true, lastUpdated:now, query:query};\n debouncer.activeQueries++;\n debouncer.attemptedQueries++;\n return false;\n }\n\n // different data source/filter on the same resource\n if (debouncer[key].query !== query) {\n debouncer[key] = {inProgress:true, lastUpdated:now, query:query}\n debouncer.activeQueries++;\n debouncer.attemptedQueries++;\n return false;\n }\n\n // in progress already\n if (debouncer[key].inProgress) {\n console.debug(\"Search for [%s] already in progress. Debouncing.\",key);\n return true;\n }\n\n // too soon\n if (now - debouncer[key].lastUpdated < debouncerTimeout) {\n console.debug(\"Data for [%s] was already recently grabbed. Debouncing.\",key);\n return true;\n } \n\n // this is a repeat of a previous query, but after an acceptable time window\n debouncer[key] = {inProgress:true, lastUpdated:now, query:query};\n debouncer.activeQueries++;\n debouncer.attemptedQueries++;\n return false;\n};\n\nexport const resetQuery = (RESOURCE,search,params) => {\n let resource = getAPIParams(RESOURCE,search,params);\n clearDebouncerResource(resource);\n store.dispatch({ \n type: resource.RESOURCE.RESET \n }); \n};\n\nexport const dataApiRequest = axios.create({\n paramsSerializer: qs.stringify\n});\n\nexport const getApiData = (RESOURCE,search,params) => {\n let resource = getAPIParams(RESOURCE,search,params);\n if (debounce(resource)) {\n return false;\n }\n let headers = Object.assign({},dataApiRequest.defaults.headers.common);\n\n if (useLocalQueryService && \n resource.RESOURCE.URL.includes(\"localhost\") &&\n !dataApiRequest.defaults.headers.common[\"x-plcm-tid\"]) \n {\n let tid = store.getState().userSession.tenantId;\n if (tid === \"\") {\n console.warn(\"No tenant ID yet\");\n }\n headers[\"x-plcm-tid\"] =\n store.getState().userSession.tenantId;\n } \n if (useLocalQueryService && \n resource.RESOURCE.URL.includes(\"localhost\") && \n resource.params[\"x-plcm-tid\"]) \n {\n let tid = resource.params[\"x-plcm-tid\"];\n headers[\"x-plcm-tid\"] = tid;\n }\n\n console.log(\"Query: [%s] %O\",resource.RESOURCE.KEY,\n { URL: resource.RESOURCE.URL,\n Headers: headers,\n Parameters: resource.params}\n );\n\n store.dispatch({\n type: resource.RESOURCE.LOADING\n });\n\n dataApiRequest\n .get(resource.RESOURCE.URL, { params: resource.params, headers: headers })\n .then(response => {\n console.log(\"API Response: [%s] %O\",resource.RESOURCE.KEY,response);\n if (response && response.data) {\n store.dispatch({\n type: resource.RESOURCE.KEY,\n data: response.data\n });\n }\n })\n .catch((error) => {\n clearDebouncerResource(resource);\n if (error && error.response) {\n if (error.response.data &&\n 401 === error.response.data.http_status_code &&\n error.config &&\n error.config.__isRetryRequest)\n {\n // do nothing if it's a 401 and IS one we're already retrying...\n } else {\n console.log(\"Error response: %O\",error.response);\n console.log(\"Error status: %O\",error.response.status); \n Event(\"Api Error\",true,\"RESP:\"+JSON.stringify(error.response));\n store.dispatch({\n type: UPDATE_MESSAGE,\n message: { \n doDisplay: true,\n header: \"Status \" + error.response.status,\n color: \"red\",\n text: error.response.data.description ? error.response.data.description : error.response.statusText\n }\n });\n }\n } else if (error.request) {\n console.log(\"Error message: %O\", error);\n console.log(\"Error in request: %O\", error.request);\n Event(\"Api Error\",true,\"REQ:\"+JSON.stringify(error.request));\n store.dispatch({\n type: UPDATE_MESSAGE,\n message: { \n doDisplay: true,\n header: \"No reponse received\",\n color: \"red\",\n text: \"Check [\" + resource.RESOURCE.URL + \"]\"\n }\n });\n } else {\n console.log(\"Unknown error: %O\", error);\n Event(\"Api Error\",true,\"UNK:\"+JSON.stringify(error));\n store.dispatch({\n type: UPDATE_MESSAGE,\n message: { \n doDisplay: true,\n header: \"Error in API Request\",\n color: \"red\",\n text: \"Unknown error in API.\"\n }\n });\n }\n debounce(resource,true);\n })\n .then(() => {\n debounce(resource,true);\n });\n return true; // not debounced \n}\n\nexport const orionApiRequest = axios.create({ baseURL: URL.ORION_API });\norionApiRequest.defaults.withCredentials = true;\n\nexport const isAuthenticated = () => sessionId && accessToken;\n\nexport const initAxios = (orionResponse, newsessionId) => {\n console.debug(\"Orion Auth Response: \",orionResponse);\n let newAccessToken = orionResponse.access_token;\n // If we're already initialized, don't do anything\n if (accessToken && sessionId) {\n console.warn(\"Attempted to reinitailize Axios\");\n return;\n }\n\n dataApiRequest.interceptors.request.use(config => {\n for (const key of Object.keys(config.params)) {\n if ([null, undefined, \"\"].includes(config.params[key])) {\n delete config.params[key];\n }\n }\n // Add the Version specifier to the API URL\n const { version, ...params } = config.params;\n if (version) {\n console.warn(\n '\"version\" parameter supplied to API call. This can cause problems, it will be ignored.'\n );\n }\n return { ...config, params: { version: 1, ...params } };\n });\n\n // Set the state variables that hold the access and refresh tokens\n sessionId = newsessionId;\n // Set the auth header\n setAuth(newAccessToken);\n doFutureRefresh(orionResponse.expires_in-10000);\n\n dataApiRequest.interceptors.response.eject(authenticatingInterceptor);\n authenticatingInterceptor = dataApiRequest.interceptors.response.use(\n // Nothing on success\n null,\n // On error, check if it's a 401.\n error => {\n // Make sure all properties of the response object exist - if not, rethrow\n if (!(error && error.response && error.response.data)) {\n throw error;\n }\n\n if (\n 401 === error.response.data.http_status_code &&\n // If it's a 401 and ISN'T one we're already retrying...\n error.config &&\n !error.config.__isRetryRequest\n ) {\n // Try to refresh the access token and rerun the request.\n return refreshAccessToken(true).then(() => {\n error.config.__isRetryRequest = true;\n // Update the header for this request\n error.config.headers[\"Authorization\"] = \"BEARER \" + accessToken;\n // And retry it\n return axios(error.config);\n })\n } else {\n console.log(\"API Error: %O\",error.response.data);\n Event(\"Orion Error\",true,\"AUTH:\"+JSON.stringify(error.response));\n }\n throw error;\n }\n );\n};\n\n// can throw an error (throwing so promise can catch it later)\nexport const logout = () => {\n setAuth(null);\n return axios\n .post(\n URL.AUTHLOGOUT,\n {},\n {\n withCredentials: true,\n header: {\n accept: \"json\"\n }\n }\n )\n .then(res => {\n console.log(\"Session Removed\", res);\n sessionId = null;\n })\n};\n\nconst setAuth = newToken => {\n if (newToken) {\n accessToken = newToken;\n dataApiRequest.defaults.headers.common[\"Authorization\"] = \"BEARER \" + newToken;\n } else {\n dataApiRequest.defaults.headers.common[\"Authorization\"] = \"\";\n }\n};\n\nconst doFutureRefresh = (ms) => {\n if (!debouncer.awaitingRefresh) {\n debouncer.awaitingRefresh = true;\n setTimeout(() => {\n console.debug(\"Orion auth timeout\");\n },ms-2500);\n setTimeout(() => {\n debouncer.maxRefresh--;\n refreshAccessToken();\n debouncer.awaitingRefresh = false;\n },ms-2000);\n }\n};\n\nconst refreshAccessToken = (manual = false) => {\n // If there's an outstanding refresh request, just return that one.\n if (refreshAccessTokenRequest) {\n return refreshAccessTokenRequest;\n }\n if (debouncer.maxRefresh <= 0 && !manual) {\n console.debug(\"Max auto-refresh time exceeded.\");\n return null;\n }\n if (manual) {\n debouncer.maxRefresh = defaultMaxRefresh;\n }\n\n // If not, send off for a new Access Token.\n console.debug(\"Sending OAuth refresh request\");\n refreshAccessTokenRequest = axios\n .get(URL.OAUTH_REFRESH, {\n withCredentials: true,\n params: {\n SessionId: sessionId\n },\n header: {\n accept: \"json\"\n }\n })\n .then(res => {\n if (res.data && res.data.OrionResponse && res.data.OrionResponse.expires_in) {\n doFutureRefresh(res.data.OrionResponse.expires_in-10000);\n }\n // Update the state and clear the outstanding request\n let { \n OrionResponse: { access_token },\n SessionId\n } = res.data;\n\n setAuth(access_token);\n sessionId = SessionId;\n return res;\n })\n .catch(error => {\n console.error(\"Error occurred while refreshing access token\", error);\n Event(\"Orion Error\",true,\"REFRESH:\"+JSON.stringify(error));\n refreshRejected();\n })\n .finally(() => {\n refreshAccessTokenRequest = null;\n });\n return refreshAccessTokenRequest;\n};\n\nconst refreshRejected = () => {\n store.dispatch({\n type: UPDATE_SESSION_STORAGE,\n tenantId: store.getState().userSession.tenantId,\n userId: \"\",\n userName: \"\",\n rawUser: {}\n });\n store.dispatch({\n type: UPDATE_MESSAGE,\n message: { \n doDisplay: true,\n header: \"Authorization Expired\",\n color: \"red\",\n text: \"Please log in again to continue.\"\n }\n });\n}\n","import ReactGA from 'react-ga'\nimport { store } from 'store/store'\n\nexport const Event = (id, nonInteraction=false, label=\"\") => {\n let user = store.getState().userSession.tenantId;\n user = user ? user : \"unk\";\n let e = {category:user, action:id};\n if (nonInteraction) {\n e.nonInteraction = true;\n }\n if (label !== \"\") {\n e.label = label;\n }\n console.debug(\"GA Event: \" + JSON.stringify(e));\n ReactGA.event(e);\n};\n","import React, { Component } from \"react\";\n\nclass Waiting extends Component {\n render() {\n const { t } = this.props;\n return (\n
\n
\n

{t(\"Initializer.Welcome\") !== \"Initializer.Welcome\" ? t(\"Initializer.Welcome\") : \"\"}

\n
\n
\n
\n
\n
\n
\n );\n }\n}\n\nexport default Waiting;\n","import React, { Component } from 'react'\nimport { translate } from 'react-i18next'\nimport { Menu, Image, Icon, Dropdown, Message } from 'semantic-ui-react'\nimport { connect } from 'react-redux'\nimport { Link } from 'react-router-dom'\nimport { URL } from 'Constants'\n\nclass TopBar extends Component {\n gotoHelpHref() {\n let path = window.location.pathname.toLowerCase();\n let helpPath = \"tenant_report-overview\";\n if (path.startsWith(\"/calls/summary\")) {\n helpPath = \"calls_summary\";\n } else if (path.startsWith(\"/calls/list\")) {\n helpPath = \"calls_list\";\n } else if (path.startsWith(\"/calls/chloroplethmap\")) {\n helpPath = \"calls_map\";\n }\n \n window.open(URL.HELP + helpPath, \"_blank\");\n }\n\n render() {\n const { t } = this.props;\n return (\n
\n \n \n \n \n \n \n \n \"Poly\n
{t(\"Polycom.CloudServices\")}
\n
\n
\n
{t(\"Polycom.RCTenantReport\")}
\n \n \n \n \n \n \n English\n \n }>\n \n \n \n \n \n \n
\n
\n );\n }\n};\n\nclass UserButton extends Component {\n render() {\n const { t } = this.props;\n if (this.props.isRejected) {\n return (\n \n Log Out\n \n );\n }\n if (this.props.userName === \"\") {\n return (\n \n Log In\n \n );\n }\n return (\n \n {this.props.userName}\n \n }>\n \n \n \n \n \n )\n }\n};\n\nclass Messenger extends Component {\n render() {\n if (!this.props.message.doDisplay) {\n return null;\n }\n return (\n
\n \n {this.props.message.header}\n

{this.props.message.text}

\n
\n
\n )\n }\n};\n\nconst mapToProps = state => {\n return {\n message: state.message.message,\n userName: state.userSession.userName,\n isRejected: state.userSession.rejected\n }\n};\n\nexport default translate()(\n connect(\n mapToProps,\n null\n )(TopBar)\n);\n","import React, { Component } from \"react\"\nimport { Icon } from 'semantic-ui-react'\nimport { COLORS } from 'Constants'\nimport HeaderBar from 'screens/HeaderBar'\nimport { translate } from 'react-i18next'\n\nclass SiteDownPage extends Component {\n render() {\n const { t } = this.props;\n return (\n \n \n \n
\n
\n
\n

{t(\"SiteDown.p1\")}

\n
\n
\n
\n
\n );\n }\n}\n\nexport default translate()(SiteDownPage);\n","import React, { Component } from \"react\"\nimport { Icon, Button } from 'semantic-ui-react'\nimport { COLORS } from 'Constants'\nimport HeaderBar from 'screens/HeaderBar'\nimport { translate } from 'react-i18next'\n\nclass ErrorPage extends Component {\n constructor(props) {\n super(props);\n\n this.state={\n showDetails: false\n };\n }\n\n render() {\n const { t } = this.props;\n return (\n \n \n \n
\n

Server Error

\n
\n
\n

{t(\"Error.p1\")}

\n

{t(\"Error.p2\")}

\n \n \n
\n { this.state.showDetails &&\n
{JSON.stringify(this.props.error, undefined, 2)}
\n }\n
\n \n \n );\n }\n}\n\nexport default translate()(ErrorPage);\n","import React, { Component } from \"react\"\nimport { Icon } from 'semantic-ui-react'\nimport { COLORS } from 'Constants'\nimport HeaderBar from 'screens/HeaderBar'\nimport { translate } from 'react-i18next'\n\nclass RejectPage extends Component {\n render() {\n const { t } = this.props;\n return (\n \n \n \n
\n

Unauthorized

\n
\n
\n

{t(\"Reject.p1\")}

\n

{t(\"Reject.a1\")}

\n \n
\n
\n \n \n );\n }\n}\n\nexport default translate()(RejectPage);\n","/**\n * Created by ndantnarayana on 2018-09-11.\n */\nimport React, { Component } from 'react'\nimport { connect } from \"react-redux\";\nimport qs from 'query-string'\nimport axios from 'axios'\nimport { logout, initAxios, isAuthenticated } from 'helpers/api'\nimport Error from 'auth/Error'\nimport Reject from 'auth/Reject'\nimport { UPDATE_SESSION_STORAGE } from 'store/UserSession'\nimport { URL } from 'Constants'\nimport { Event } from 'components/Event'\n\nclass AuthWrapper extends Component {\n constructor() {\n super();\n this.state = {\n isError: false,\n isRejected: false,\n myError: {}\n };\n }\n\n componentDidMount() {\n if (!isAuthenticated()) {\n if (window.location.href.endsWith(\"logout\")) {\n logout().then(() => {\n console.log(\"Heading to orion to logout\");\n window.location = URL.ORIONLOGOUT;\n })\n .catch(error => {\n console.log(\"Logout call to [%s] failed: %O\",URL.AUTHLOGOUT,error);\n });\n } else {\n let params = qs.parse(this.props.location.search);\n if (params.error) {\n let err = { error : params.error };\n if (params.error_description) {\n err.error_description = params.error_description;\n }\n console.log(err);\n this.setState({ isError: true, myError: err })\n } else {\n this.authenticateUser();\n }\n }\n }\n }\n\n\n authenticateUser = () => {\n const { code, ...rest } = qs.parse(this.props.location.search);\n if (code) {\n console.debug(\"Orion grant returned: \",code);\n this.props.history.push({\n pathname: this.props.location.pathname,\n search: qs.stringify(rest)\n });\n Event(\"Login Grant\", true);\n axios\n .get(URL.OAUTH_TOKEN, {\n withCredentials: true,\n params: {\n code: code,\n redirect_uri: window.location.href\n },\n header: {\n accept: \"json\"\n }\n })\n .then(res => {\n let resp = res.data.OrionResponse;\n initAxios(resp, res.data.SessionId);\n this.props.updateUserSession(resp);\n Event(\"Login Success\", true);\n })\n .catch(this.handleAuthenticationErrors);\n } else {\n window.location =\n URL.ORION_OAUTH + \"&redirect_uri=\" + encodeURIComponent(window.location.href);\n }\n };\n\n handleAuthenticationErrors = err => {\n console.log(\"Caught: %O\",err);\n if (err.status === 401 || err.status === 403) {\n //Need better error handling?\n console.error(\"Authentication error \" + JSON.stringify(err));\n Event(\"Login Error\",true,\"AuthError \" + JSON.stringify(err));\n this.setState({ isError: true, myError: err });\n } else if (err.response && err.response.status === 403) {\n this.setState({isRejected: true});\n this.props.updateUserRejected();\n } else {\n let errstr = \" \";\n if (err.response && err.response.data) {\n errstr = \" \" + JSON.stringify(err.response.data) + \" \";\n }\n Event(\"Login Failure\",true,errstr);\n console.error(\"Non-401 Error thrown!%s[%O]\",errstr,err);\n this.setState({ isError: true, myError: err });\n }\n throw err;\n };\n\n render = () => {\n if (this.state.isError) {\n return ;\n } else if (this.state.isRejected) {\n return ;\n }\n return this.props.children;\n };\n}\n\nconst mapDispatch = dispatch => ({\n updateUserSession: orionResponse => {\n let user = orionResponse.user;\n dispatch({\n type: UPDATE_SESSION_STORAGE,\n tenantId: user.tid,\n userId: user.uuid,\n userName: user.name,\n rawUser: user,\n rejected: false\n });\n },\n updateUserRejected: () => {\n dispatch({\n type: UPDATE_SESSION_STORAGE,\n rejected: true\n });\n }\n});\n\nexport default connect(\n null,\n mapDispatch\n)(AuthWrapper);\n","import React, { Component } from 'react'\nimport { connect } from 'react-redux'\nimport { translate } from 'react-i18next'\nimport { DATASOURCE } from 'Constants'\nimport { getApiData } from 'helpers/api'\nimport Waiting from 'screens/Waiting'\nimport SiteDown from 'auth/SiteDown'\nimport AuthWrapper from 'auth/AuthWrapper'\nimport { Event } from 'components/Event'\n\nclass Initializer extends Component {\n constructor(props) {\n super(props);\n this.state = { \n isLoaded: false,\n isFailed: false\n };\n }\n\n componentDidMount() {\n const { t } = this.props;\n setTimeout(() => {\n if (!this.state.isLoaded) {\n this.setState({isFailed: true});\n let s = \"\";\n console.log(\"Awaiting Initializer:\");\n let str = \"DataReceived [\" + this.props.dataReceived + \"]\";\n if (! this.props.dataRecived) {\n console.warn(\"Data not received. Check API Gateway and Query Service.\");\n }\n s = s + str;\n if (this.props.tenant === \"\") {\n console.warn(\"Tenant info not received. Check Orion and AzureOauthToken App.\");\n }\n str = \" Tenant [\" + this.props.tenant + \"]\";\n s = s + str;\n if (t(\"Initializer.Welcome\") === \"Initializer.Welcome\") {\n str = \" Locale json not initialized. Likely dev issue.\";\n console.warn(str);\n } else {\n str = \" Message [\" + t(\"Initializer.Welcome\") + \"]\";\n }\n s = s + str;\n Event(\"initializer failed on timeout\", true, s);\n }\n },20000);\n }\n\n didUpdate = false;\n\n componentDidUpdate(prevProps) {\n const { t } = this.props;\n if (!this.state.isLoaded && this.props.dataReceived && \n this.props.tenant !== \"\" && t(\"Initializer.Welcome\") !== \"Initializer.Welcome\") {\n this.setState({isLoaded: true, isFailed: false});\n }\n if (this.props.tenant !== \"\" && prevProps.tenant === \"\" && !this.didUpdate) {\n this.didUpdate = true; // wait for data but only do this update once\n getApiData(DATASOURCE.AGENT_NORMALIZER);\n getApiData(DATASOURCE.TENANT_INFO, this.props.location.search);\n }\n }\n\n render() {\n // if you're in here looking for why the loading page \"blinks\", it's redirecting to\n // orion's oauth in that time. Design choice (so far) to have the loading page before\n // the redirect rather than a blank page\n if (this.state.isFailed) {\n return (\n \n \n \n );\n } else if (!this.state.isLoaded) {\n return (\n \n \n \n );\n }\n return (\n \n {this.props.children}\n \n );\n };\n}\n\nconst mapToProps = state => {\n return {\n agentPatterns: state.agentIds.patterns,\n dataReceived: state.agentIds.received,\n tenant: state.userSession.tenantId\n }\n};\n\nexport default translate()(\n connect(\n mapToProps,\n null\n )(Initializer)\n);\n","import React, { Component } from \"react\";\nimport { translate } from \"react-i18next\";\nimport { Divider } from \"semantic-ui-react\";\nimport { COLORS, URL } from \"Constants\";\n\nclass Footer extends Component {\n render() {\n const { t } = this.props;\n\n return (\n
\n \n
\n \n {t(\"Footer.copyright\")}\n \n {t(\"Separators.vertical\")}\n \n \n {t(\"Footer.tos\")}\n \n {t(\"Separators.vertical\")}\n \n {t(\"Footer.privacy\")}\n \n \n
\n
\n );\n }\n}\n\nexport default translate()(Footer);\n","import proj4 from 'proj4';\n\nif (typeof window !== 'undefined') {\n window.proj4 = window.proj4 || proj4;\n}\n\nexport default proj4;\n","import React, { PureComponent } from 'react'\nimport 'lib/proj4hack'\nimport Highcharts from 'highcharts'\nimport HighchartsReact from \"highcharts-react-official\"\nimport HighchartsMap from \"highcharts/modules/map\"\nimport mapData from \"@highcharts/map-collection/custom/world.geo.json\"\nHighchartsMap(Highcharts); // initialize the map module\n\n// To use MapView, pass in the following props:\n//\n\nclass MapView extends PureComponent {\n constructor(props) {\n super(props);\n this.reboundChart = this.reboundChart.bind(this);\n this.resetChart = this.resetChart.bind(this);\n this.clickedSeries = this.clickedSeries.bind(this);\n this.clickedOutsideSeries = this.clickedOutsideSeries.bind(this);\n this.getCurrentViewData = this.getCurrentViewData.bind(this);\n }\n\n zoomLevel = 1;\n highZoomLevel = 0.1;\n \n\n reboundChart(x,y) {\n if (!this.chart) {\n return;\n }\n if (this.zoomLevel === 1) {\n console.debug(\"Rebounding map ... awaiting data\");\n this.chart.mapZoom(this.highZoomLevel,this.chart.xAxis[0].toValue(x),this.chart.yAxis[0].toValue(y),x,y);\n this.zoomLevel = this.highZoomLevel;\n this.getCurrentViewData();\n }\n }\n\n getCurrentViewData() {\n let sw = this.chart.transformToLatLon({x:this.chart.xAxis[0].min,y:this.chart.yAxis[0].max},this.chart.mapTransforms.default);\n let ne = this.chart.transformToLatLon({x:this.chart.xAxis[0].max,y:this.chart.yAxis[0].min},this.chart.mapTransforms.default);\n this.props.seriesClickCallback(sw,ne);\n }\n\n resetChart()\n {\n if (this.zoomLevel !== 1) {\n console.debug(\"Rebounding map to default ... awaiting data\");\n this.chart.mapZoom();\n this.zoomLevel = 1;\n this.props.seriesClickCallback(\n {lat: -90, lon: -180},{lat:90, lon: 180}\n );\n }\n }\n\n clickedSeries(event) {\n if (!event.point || !event.point.marker) {\n return;\n }\n // click event bubbles multiple times, make sure we process just one\n this.reboundChart(event.point.plotX, event.point.plotY);\n }\n\n clickedOutsideSeries(event) {\n this.resetChart();\n }\n \n getOptions() {\n let bgColor = this.props.isDarkMode ? \"#010001\" : \"#ffffff\";\n let fgColor = this.props.isDarkMode ? \"#191819\" : \"#e7e6e7\";\n return {\n title: {\n text: ''\n },\n legend: {\n enabled: false\n },\n chart: {\n backgroundColor: bgColor,\n panning: false,\n events: {\n click: (event) => {this.clickedOutsideSeries(event)}\n }\n },\n credits: {\n enabled: false\n },\n series: [\n {\n name: \"mapProjection\",\n mapData: mapData,\n borderColor: fgColor,\n nullColor: fgColor,\n }, \n {\n name: \"Calls\",\n type: 'mapbubble',\n dataLabels: {\n enabled: true,\n format: '{point.z}'\n },\n data: this.props.data,\n// maxSize: \"12%\",\n color: \"#4f98fd\", // unselected is 98c5ff if something is selected\n events: {\n click: (event) => {this.clickedSeries(event)}\n }\n }\n ],\n mapNavigation: {\n enabled: false\n }\n };\n }\n\n componentDidMount() {\n this.chart = this.refs.chartComponent.chart;\n }\n\n render() {\n return(\n
\n \n
\n )\n }\n}\n\nexport default MapView;\n","import React, { Component } from 'react'\nimport { Card, Dimmer, Loader } from 'semantic-ui-react'\n\nclass CardWrapper extends Component {\n\n render() {\n const { t } = this.props;\n return (\n \n {this.props.title ?\n (\n \n \n

{t(this.props.title)}

\n
\n
\n ) : (\n null\n )\n }\n \n {this.props.children}\n \n \n \n \n
\n )\n }\n}\n\nexport default CardWrapper\n","import React, { Component } from 'react'\nimport MapView from 'components/MapHighmaps'\nimport { translate } from 'react-i18next'\nimport { getApiData,resetQuery } from 'helpers/api'\nimport { DATASOURCE } from 'Constants'\nimport { connect } from 'react-redux'\nimport { Dimmer, Loader, Grid, Statistic, Popup } from 'semantic-ui-react'\nimport CardWrapper from 'screens/common/CardWrapper'\nimport qs from 'query-string'\n\nclass AssetMap extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n bounds:[[-90,-180],[90,180]]\n }\n\n this.getQueryBounds = this.getQueryBounds.bind(this);\n this.seriesClickCallback = this.seriesClickCallback.bind(this);\n }\n\n lastPropertyCount = 0;\n\n getQueryBounds() {\n let params = {};\n params.topRightLat = this.state.bounds[1][0];\n params.topRightLon = this.state.bounds[1][1];\n params.bottomLeftLat = this.state.bounds[0][0];\n params.bottomLeftLon = this.state.bounds[0][1];\n return params;\n }\n\n componentDidMount() {\n getApiData(DATASOURCE.GEOCOUNT,this.props.location.search,this.getQueryBounds());\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.location.search !== prevProps.location.search) {\n let p1 = qs.parse(this.props.location.search);\n let p2 = qs.parse(prevProps.location.search);\n if (p1.timePeriod !== p2.timePeriod || p1.tid !== p2.tid) {\n getApiData(DATASOURCE.GEOCOUNT,this.props.location.search,this.getQueryBounds());\n }\n }\n }\n\n seriesClickCallback(swPoint, nePoint) {\n resetQuery(DATASOURCE.GEOCOUNT,this.props.location.search,this.getQueryBounds());\n this.setState({bounds: [[swPoint.lat,swPoint.lon],[nePoint.lat,nePoint.lon]]});\n getApiData(DATASOURCE.GEOCOUNT,this.props.location.search,this.getQueryBounds());\n }\n\n statSize = \"small\";\n\n render() {\n const { t } = this.props;\n return (\n
\n
\n \n \n \n \n
\n \n \n \n
\n \n
\n
\n
\n \n \n
\n \n } \n />\n
\n
\n
\n \n \n
\n \n }\n />\n
\n
\n
\n
\n
\n )\n }\n};\n\n// REDUX STATE\nconst mapToProps = state => {\n return {\n count: state.geoCount.count,\n totalCalls: state.geoCount.totalCalls,\n uniqueCities: state.geoCount.uniqueCities,\n uniqueCountries: state.geoCount.uniqueCountries,\n loading: state.geoCount.loading\n }\n};\n\nexport default translate()(\n connect(\n mapToProps,\n null\n )(AssetMap)\n);\n","// search for whether a property exists by (\"key\",idx,\"key\",\"key\",...).\n// For example, a property of calls[idx1]._source.leg[idx2].agent would be called:\n// deepHasOwnProperty(calls,idx1,\"_source\",\"leg\",idx2,\"agent\")\nexport function deepHasOwnProperty(obj, ...vars) {\n if (vars.length === 0) {\n return true;\n }\n if (vars[0].substring) {\n if (obj.hasOwnProperty(vars[0])) {\n return deepHasOwnProperty(obj[vars[0]],...vars.slice(1));\n }\n return false;\n }\n\n let i = parseInt(vars[0]);\n if (isNaN(i)) {\n console.warn(\"Passed in a non-string NaN [\" + (vars[0]) + \"]\");\n return false;\n }\n if (!Array.isArray(obj) || i >= obj.length) {\n return false;\n }\n return deepHasOwnProperty(obj[i],...vars.slice(1));\n}\n\n// remove the \"_source\" layer and get to the call data directly, also\n// remove the yCallLegs and zCallTraceMsgs if they're present\nexport function formatCallData(data) {\n for (let ii = 0; ii < data.length; ii++) {\n data[ii] = data[ii]._source;\n delete data[ii].yCallLegs;\n delete data[ii].zCallTraceMsgs;\n };\n}\n\n// sort calls by start time in data[].startTime\nexport function sortCallData(data) {\n return data.sort((a,b) => {\n if (a) {\n if (!b) {\n return 1;\n }\n if (a.startTime) {\n if (!b.startTime) {\n return 1;\n }\n var d1 = new Date(a.startTime).getTime();\n var d2 = new Date(b.startTime).getTime();\n return d1-d2;\n } else {\n if (b.startTime) {\n return -1;\n }\n return 0;\n }\n } else {\n if (b) {\n return -1;\n }\n return 0;\n }\n });\n}\n","import { sortCallData } from './json_helper'\n\nexport function formatData(dataSource, data) {\n switch(dataSource) {\n default:\n case \"CALLS\":\n return formatCallData(data);\n case \"SUMMARY\":\n return data;\n }\n}\n\nfunction formatCallData(data) {\n let calls = [];\n if (!data) {\n return calls;\n }\n\n let arr = data;\n\n if (data.records) {\n arr = data.records;\n }\n\n if (arr.length === 0) {\n return calls;\n }\n\n let embedded = arr[0].hasOwnProperty(\"data\");\n\n arr.forEach(element => {\n let datum = element;\n if (embedded) {\n datum = element.data;\n }\n if (datum.hasOwnProperty(\"deployment\")) {\n if (datum.deployment.includes(\"prod\")) {\n calls.push(datum);\n }\n }\n });\n\n return sortCallData(calls);\n}\n\nexport function getFormattedTime(ms) {\n let s = Math.round(ms/1000);\n if (s < 60) {\n return [\"\" + s,\"Seconds\"];\n }\n let m = Math.floor(s/60);\n s = s % 60;\n if (m < 60) {\n return [m + \":\" + pad(s),\"mm:ss\"]\n }\n let h = Math.floor(m/60);\n m = m % 60;\n return [h + \":\" + pad(m) + \":\" + pad(s),\"hh:mm:ss\"];\n}\n\nfunction pad(t) {\n if (t < 10) {\n return \"0\" + t;\n }\n return \"\" + t;\n}\n","import React, { Component } from 'react'\nimport CardWrapper from 'screens/common/CardWrapper'\nimport { Grid, Statistic } from 'semantic-ui-react'\nimport { translate } from 'react-i18next'\nimport { getFormattedTime } from 'helpers/dataFormatter'\n\n\nclass Summary extends Component {\n\n render() {\n const { t } = this.props;\n let teams = this.props.summary.raw.teams;\n let skype = this.props.summary.raw.skype;\n let total = this.props.summary.raw.total;\n\n return (\n \n \n \n \n \n \n \n );\n }\n\n getProp(key,prop) {\n return prop ? (prop[key] && !isNaN(prop[key]) ? prop[key] : 0) : 0;\n }\n}\n\n\nclass SummaryGrid extends Component {\n statSize = \"small\";\n colWidth = 4\n\n pad(t) {\n if (t < 10) {\n return \"0\" + t;\n }\n return \"\" + t;\n }\n\n render() {\n const { t } = this.props;\n if (!this.props.show) {\n return null;\n }\n return (\n \n \n

{this.props.title}

\n
\n \n \n
\n \n
\n \n
\n \n \n
\n \n
\n \n
\n \n \n
\n \n
\n \n
\n \n \n
\n \n
\n \n
\n
\n );\n }\n};\n\nexport default translate()(Summary);\n","import React from \"react\"\nimport Highcharts from \"highcharts\"\nimport HighchartsReact from \"highcharts-react-official\"\nimport withSize from \"react-sizeme\"\nimport PropTypes from \"prop-types\"\nimport { highchartsColors } from 'Constants'\n\n// changed tooltip to include point name\n\nimport css from \"./BaseChart.module.css\";\nvoid css;\n\nclass BaseChart extends React.Component {\n static propTypes = {\n decimals: PropTypes.number,\n colors: PropTypes.arrayOf(PropTypes.string)\n }\n\n static defaultProps = {\n decimals: 2,\n colors: highchartsColors\n }\n\n componentDidUpdate({ size: { height, width } }) {\n if (\n (width !== this.props.width || height !== this.props.height) &&\n this.refs.highchart &&\n this.refs.highchart.chart\n ) {\n this.refs.highchart.chart.reflow();\n }\n }\n\n render() {\n let { options, decimals, colors } = this.props;\n // TODO ... for some reason, colors exists in props and is undefined. Fix this so \n // we can use defaultProps rather than ternary operator in colors. There, we should just\n // have \"colors,\", not \"colors: colors?colors:highchartsColors,\"\n/* console.log(\"Base hasowncolors [%O]\",this.props.hasOwnProperty(\"colors\"));\n console.log(\"Base colors [%O]\",this.props.colors);\n console.log(\"Base props [%O]\",this.props);\n console.log(\"Constants Colors [%O]\",highchartsColors);*/\n return (\n \\u25CF {point.series.name} {point.name}: {point.y:.${decimals}f}`\n },\n time: {\n useUTC: true\n }\n }}\n />\n );\n }\n}\n\nexport default withSize()(BaseChart);\n","import React from \"react\"\nimport PropTypes from \"prop-types\"\nimport BaseChart from \"./BaseChart\"\n\n// made xAxisCategories options. This lets you use the series name if you use multiple\n// series rather than just naming a single series' data.\n// added drilldown\n// added stackBars option\n\nexport class BarChart extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n pageNumber: 1\n };\n }\n\n static propTypes = {\n height: PropTypes.number,\n yAxisMin: PropTypes.number,\n yAxisText: PropTypes.string.isRequired,\n xAxisCategories: PropTypes.array,\n series: PropTypes.array.isRequired,\n drilldown: PropTypes.array,\n colors: PropTypes.array,\n type: PropTypes.oneOf([\"bar\", \"column\"]).isRequired,\n decimals: PropTypes.number,\n showLegend: PropTypes.bool,\n stackBars: PropTypes.oneOf([undefined, \"normal\", \"percent\"])\n };\n\n render() {\n let {\n xAxisCategories,\n series,\n drilldown,\n height,\n yAxisMin,\n yAxisText,\n colors,\n type,\n decimals,\n showLegend,\n stackBars\n } = this.props;\n\n yAxisMin = yAxisMin || 0;\n showLegend = showLegend || false;\n\n return (\n \n );\n }\n}\n\nexport default BarChart;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport BaseChart from \"./BaseChart\";\n\n// had to change this up a bit from the DeviceAnalytics version to support drilldown.\n// Might be able to use their version, but would need a lot more work.\n\nexport class DonutChart extends React.Component {\n static propTypes = {\n height: PropTypes.number,\n series: PropTypes.array.isRequired,\n colors: PropTypes.arrayOf(PropTypes.string),\n decimals: PropTypes.number,\n verticalLegend: PropTypes.bool\n };\n\n render() {\n let { series, drilldown, height, colors, decimals, verticalLegend } = this.props;\n\n return (\n ({\n innerSize: \"40%\",\n ...s\n })),\n drilldown: { series: drilldown }\n }}\n />\n );\n }\n}\n\nexport default DonutChart;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport BaseChart from \"./BaseChart\";\n\n// change yLabel to yAxisText for consistancy \n// add default export for consistancy\n\nexport class LineChart extends React.Component {\n static propTypes = {\n height: PropTypes.number,\n series: PropTypes.arrayOf(\n PropTypes.shape({\n data: PropTypes.array\n })\n ).isRequired,\n colors: PropTypes.array,\n decimals: PropTypes.number,\n xMax: PropTypes.number,\n xMin: PropTypes.number,\n xAxisType: PropTypes.oneOf([\n \"linear\",\n \"logarithmic\",\n \"datetime\",\n \"category\"\n ]),\n yMin: PropTypes.number,\n yMax: PropTypes.number,\n yAxisType: PropTypes.oneOf([\n \"linear\",\n \"logarithmic\",\n \"datetime\",\n \"category\"\n ]),\n categories: PropTypes.array,\n yAxisText: PropTypes.string,\n zoomType: PropTypes.string\n };\n\n render() {\n const {\n // name,\n height,\n colors,\n series,\n decimals,\n xMax,\n xMin,\n xAxisType,\n yMin,\n yMax,\n yAxisType,\n categories,\n yAxisText,\n zoomType\n } = this.props;\n\n return (\n \n );\n }\n}\n\nexport default LineChart\n","import React, { Component } from 'react'\nimport { Grid, Card, Dimmer, Loader, Statistic } from 'semantic-ui-react'\nimport { Link } from 'react-router-dom'\nimport { connect } from 'react-redux'\nimport { getApiData } from 'helpers/api'\nimport { DATASOURCE } from 'Constants'\nimport { translate } from 'react-i18next'\nimport qs from 'query-string'\nimport CardWrapper from 'screens/common/CardWrapper'\nimport Summary from './Summary'\nimport BarChart from 'components/BarChart'\nimport DonutChart from 'components/DonutChart'\nimport LineChart from 'components/LineChart'\n\n\nclass CallSummary extends Component {\n\n componentDidMount() {\n getApiData(DATASOURCE.SUMMARY,this.props.location.search);\n getApiData(DATASOURCE.ACTIVE_CALLS,this.props.location.search);\n getApiData(DATASOURCE.LICENSE_OVERAGE,this.props.location.search);\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.location.search !== prevProps.location.search) {\n getApiData(DATASOURCE.SUMMARY,this.props.location.search);\n getApiData(DATASOURCE.ACTIVE_CALLS,this.props.location.search);\n getApiData(DATASOURCE.LICENSE_OVERAGE,this.props.location.search);\n }\n }\n\n getLicenseLink(arg) {\n let myUrl = this.props.location.pathname.replace(this.props.location.search,'');\n let params = {};\n if (this.props.location.search) {\n params = qs.parse(this.props.location.search);\n }\n params[\"exceedLicenseCapacity\"] = arg;\n myUrl = myUrl.replace(\"summary\",\"\");\n return myUrl + \"list?\" + qs.stringify(params);\n }\n\n render() {\n const { t } = this.props;\n return (\n \n\n \n \n \n\n \n \n \n \n \n\n \n \n \n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n
\n \n
\n \n \n \n
\n
\n \n \n
\n \n
\n \n \n \n
\n
\n \n \n
\n \n
\n \n \n \n
\n
\n
\n\n \n {this.props.activeCalls.series && this.props.activeCalls.series.length > 0 ?\n (\n \n \n \n ) : (\n \n \n
\n \n
\n \n \n \n
\n
\n )\n }\n
\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n );\n }\n}\n\n// REDUX STATE\nconst mapToProps = state => {\n return {\n summary: state.summary,\n activeCalls: state.activeCalls,\n licenseOverage: state.licenseOverage\n }\n};\n \nexport default translate()(\n connect(\n mapToProps,\n null\n )(CallSummary)\n);\n\n","// ordered list of object and name substitutions for the headers of the CSV. This is\n// so users aren't confused by the columns being out of order or by them being named\n// slightly differently than the table displays. It's a map of the name coming from\n// the query service to the translation string, with mouseover if applicable\nexport const ListHeaderMap = [\n {data:\"from\",trans:\"Screens.Calls.List.From\"},\n {data:\"dialNumber\",trans:\"Screens.Calls.List.DialNumber\",title:\"dialString\",titleTrans:\"Screens.Calls.List.DialNumberMouseover\"},\n {data:\"conferenceId\",trans:\"Screens.Calls.List.ConferenceId\"},\n {data:\"startTime\",trans:\"Screens.Calls.List.StartTime\"},\n {data:\"duration\",trans:\"Screens.Calls.List.Duration\"},\n {data:\"endReason\",trans:\"Screens.Calls.List.EndReason\"},\n {data:\"agent\",trans:\"Screens.Calls.List.Agent\"},\n {data:\"deploymentType\",trans:\"Screens.Calls.List.Deployment\"},\n {data:\"region\",trans:\"Screens.Calls.List.Region\"},\n {data:\"protocol\",trans:\"Screens.Calls.List.Protocol\"}\n];\n\nconst ignoredDataFields = [\"bookmark\",\"deployment\"];\n\n// flatten a list of objects to a CSV. This currently assumes we only want to \n// output keyed objects, so any list within the object will be printed directly\n// to that keyed cell\nexport function convertToCsv(objectList, translate) {\n if (!Array.isArray(objectList) || objectList.length < 1) {\n console.log(\"No data or empty dataset in CSV conversion request\");\n return \"\";\n }\n\n // get all the possible headers to flatten this csv\n let headerPaths = getHeaderList(objectList);\n let headerTitles;\n [headerPaths,headerTitles] = doCSVSort(headerPaths, translate);\n\n let CSV = [];\n CSV.push(headerTitles.join(','));\n\n objectList.forEach((element) => {\n let line = [];\n headerPaths.forEach((path) => {\n line.push(getDatum(element,path,0));\n });\n CSV.push(line.join(','));\n });\n\n return CSV.join('\\n');\n}\n\nfunction doCSVSort(headerPaths,translate) {\n let newPaths = [];\n let titles = [];\n let parsed = [];\n ListHeaderMap.forEach(item => {\n // might be a bug here since we moved from a multidimensional array to flat array ... if\n // we go back to the data having layers, check here first.\n newPaths.push([item.data]);\n titles.push(translate(item.trans));\n parsed.push(item.data);\n });\n headerPaths.forEach(path => {\n let title = path.join('.');\n title.replace(',',';');\n if (!parsed.includes(title) && !ignoredDataFields.includes(title)) {\n newPaths.push(path);\n titles.push(title);\n }\n });\n return [newPaths,titles];\n}\n\nfunction getDatum(element,path,pathIdx) {\n if (pathIdx === path.length-1) {\n if (!element || !element.hasOwnProperty(path[pathIdx])) {\n return \"\";\n }\n let e = element[path[pathIdx]];\n if (!e) {\n e = \"\";\n }\n return e.toString().replace(/,/g, ' ');\n }\n\n if (element.hasOwnProperty(path[pathIdx])) {\n return getDatum(element[path[pathIdx]],path,pathIdx+1);\n }\n\n return \"\";\n}\n\n// Get the headers as a list of lists. This should return a list that contains a list \"path\"\n// to get to every object in the list. Not all objects will have all header paths, but we\n// need the total so we can make CSV headers\nfunction getHeaderList(list) {\n let headerMap = {};\n\n list.forEach((element) => {\n getHeaderMap(element, headerMap);\n });\n\n return flattenHeaderMap(headerMap, []);\n}\n\n// helper for getHeaderList: makes a map of all keys in all objects so if we have an object\n// with an element at obj.mediaStart.VTC.protocol, this object will have obj.mediaStart.VTC.protocol\n// = true. This is to consolidate all keys into one object that we can then flatten to lists.\nfunction getHeaderMap(element, headerMap) {\n if (typeof element === 'object' && element !== null) {\n Object.keys(element).forEach((key) => {\n if (typeof element[key] === 'object' && element[key] !== null) {\n headerMap[key] = {};\n getHeaderMap(element[key], headerMap[key]);\n } else {\n headerMap[key] = true;\n }\n });\n }\n}\n\n// helper for getHeaderList: Takes a map of all keys in all objects and returns a list of lists\n// where those keys are mapped to a list of keys for how each piece of data is found. For example,\n// if the headermap has map.mediaStart.VTC.protocol=true, then this will have a list element of\n// list[idx] = [mediaStart,VTC,protocol]\nfunction flattenHeaderMap(headerMap, path) {\n let paths = [];\n Object.keys(headerMap).forEach((key) => {\n let myPath = [...path,key];\n if (typeof headerMap[key] === 'object') {\n paths.push(...flattenHeaderMap(headerMap[key],myPath));\n } else {\n paths.push(myPath);\n }\n });\n return paths;\n}\n\nexport function downloadFile(data,name, mimeType) {\n const a = document.createElement(\"a\");\n mimeType = mimeType || \"application/octet-stream\";\n\n if (navigator.msSaveBlob) {\n // IE10\n navigator.msSaveBlob(\n new Blob([data], {\n type: mimeType\n }),\n name\n );\n } else if (URL && \"download\" in a) {\n //html5 A[download]\n a.href = URL.createObjectURL(\n new Blob([data], {\n type: mimeType\n })\n );\n a.setAttribute(\"download\", name);\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n } else {\n window.location.href =\n \"data:application/octet-stream,\" + encodeURIComponent(data); // only this mime type is supported\n }\n}\n\n","import React, { Component } from 'react'\nimport { Button, Dropdown, Icon, Input, Popup } from 'semantic-ui-react'\nimport DateRangePicker from 'react-daterange-picker'\nimport Moment from 'moment'\nimport { extendMoment } from \"moment-range\"\nimport { translate } from 'react-i18next'\nimport qs from 'query-string'\nimport \"./TimeRangeFilter.css\"\nimport { getUpdatedDate } from 'helpers/constants_helper'\n\nconst moment = extendMoment(Moment); // extends moment as a part of moment-range\n\nconst MIN_DATE = moment()\n .subtract(1,\"years\")\n .toDate();\nconst MAX_DATE = moment()\n .add(1,\"days\")\n .toDate();\n\nclass FilterBar extends Component {\n\n constructor(props) {\n super(props);\n \n if (this.props.location.search) {\n this.params = qs.parse(this.props.location.search);\n }\n\n this.pushProps = this.pushProps.bind(this);\n this.twiddleDate = this.twiddleDate.bind(this);\n this.dateSelection = this.dateSelection.bind(this);\n this.getCalendarDateRange = this.getCalendarDateRange.bind(this);\n\n this.state = {\n isCalendarOpen: false\n }\n }\n\n input = {};\n params = {};\n\n pushProps() {\n let newParams = qs.parse(this.props.location.search);\n let found = false;\n const input = this.input\n const params = this.params\n Object.keys(input).forEach( key => {\n let value = \"\"\n if (input[key].inputRef && input[key].inputRef.current) {\n value = input[key].inputRef.current.value;\n } else if (input[key].state) {\n value = input[key].state.value;\n }\n if (value.trim() !== \"\") {\n newParams[key] = value;\n if (newParams[key] !== params[key]) {\n found = true;\n }\n } else {\n if (newParams[key]) {\n delete newParams[key];\n if (newParams[key] !== params[key]) {\n found = true;\n }\n }\n }\n });\n if (found) {\n let myUrl = this.props.location.pathname.replace(this.props.location.search,'');\n this.props.history.push(myUrl + \"?\" + qs.stringify(newParams));\n }\n }\n\n dateSelection(dates) {\n let startMoment = moment.utc(dates.start).startOf(\"day\");\n let endMoment = moment.utc(dates.end).endOf(\"day\");\n\n this.input.startOnAfter.inputRef.current.value = startMoment.toISOString();\n this.input.startBefore.inputRef.current.value = endMoment.toISOString();\n this.setState({isCalendarOpen: false});\n }\n\n paginationArrow = properties => {\n let iconName, opacity, left, right;\n if (properties.direction === \"previous\") {\n iconName = \"arrow left\";\n left = 20;\n } else {\n iconName = \"arrow right\";\n right = 20;\n }\n\n opacity = properties.disabled ? 0.5 : 1;\n\n const iconStyle = {\n opacity: opacity,\n left: left,\n right: right \n }; \n return ( \n \n ); \n }; \n\n getCalendarDateRange() {\n let startMoment,endMoment;\n\n if (this.input.startOnAfter) {\n let ms = Date.parse(this.input.startOnAfter.inputRef.current.value);\n if (!isNaN(ms) && ms > 0) {\n startMoment = moment.utc(ms);\n } \n }\n if (!startMoment && this.params.startOnAfter) {\n startMoment = moment(this.params.startOnAfter);\n }\n if (!startMoment) {\n if (this.params.timePeriod) {\n startMoment = moment.utc(getUpdatedDate(this.params.timePeriod));\n } else {\n startMoment = moment.utc(getUpdatedDate(\"WEEK\"));\n }\n }\n\n if (this.input.startBefore) {\n let ms = Date.parse(this.input.startBefore.inputRef.current.value);\n if (!isNaN(ms) && ms > 0) {\n endMoment = moment.utc(ms);\n } \n }\n if (!endMoment && this.params.startBefore) {\n endMoment = moment(this.params.startBefore);\n }\n if (!endMoment) {\n endMoment = moment.utc();\n }\n\n return moment.range(startMoment,endMoment);\n }\n\n twiddleDate(item) {\n let ms = Date.parse(item.inputRef.current.value);\n if (!isNaN(ms) && ms > 0) {\n item.inputRef.current.value = new Date(ms).toISOString();\n } else {\n item.inputRef.current.value = null;\n }\n }\n\n render() {\n const { t } = this.props;\n if (this.props.filterHidden) {\n return null;\n }\n return (\n
\n
\n this.input.from = ref} icon={}\n defaultValue={this.params.from}\n />\n this.input.dialNumber = ref}\n defaultValue={this.params.dialNumber}\n />\n this.input.dialString = ref}\n defaultValue={this.params.dialString}\n />\n this.input.conferenceId = ref}\n defaultValue={this.params.conferenceId}\n />\n
\n
\n \n Date Selector\n \n \n }\n content={\n \n }\n flowing\n on=\"click\"\n position=\"bottom center\"\n value={this.getCalendarDateRange()}\n open={this.state.isCalendarOpen}\n onClose={() => this.setState({isCalendarOpen: false})}\n onOpen={() => this.setState({isCalendarOpen: true})}\n />\n this.input.startOnAfter = ref}\n defaultValue={this.params.startOnAfter}\n onBlur={() => this.twiddleDate(this.input.startOnAfter)}\n />\n this.input.startBefore = ref}\n defaultValue={this.params.startBefore}\n onBlur={() => this.twiddleDate(this.input.startBefore)}\n />\n
\n
\n this.input.shorterThan = ref}\n defaultValue={this.params.shorterThan}\n />\n this.input.longerThan = ref}\n defaultValue={this.params.longerThan}\n />\n this.input.endReason = ref} \n icon={}\n defaultValue={this.params.endReason}\n />\n this.input.region = ref}\n defaultValue={this.params.region}\n />\n this.input.protocol = ref}\n defaultValue={this.params.protocol}\n />\n this.input.exceedLicenseCapacity = ref}\n defaultValue={this.params.exceededLicenseCapacity}\n />\n
\n
\n \n ( {t(\"Screens.Calls.List.FilterBar.Asterisk\")})\n
\n
\n );\n }\n}\n\nexport default translate()(FilterBar);\n","import React, { Component } from 'react'\nimport { Button, Dimmer, Icon, Loader, Table, Visibility } from 'semantic-ui-react'\nimport { connect } from 'react-redux'\nimport { getApiData } from 'helpers/api'\nimport { DATASOURCE } from 'Constants'\nimport { convertToCsv, downloadFile, ListHeaderMap } from 'helpers/download_helper'\nimport { translate } from 'react-i18next'\nimport qs from 'query-string'\nimport FilterBar from './FilterBar'\n\nclass CallList extends Component {\n\n constructor(props) {\n super(props);\n\n let params = {};\n if (this.props.location.search) {\n params = qs.parse(this.props.location.search);\n }\n let sortAsc = params.sortOrder ? params.sortOrder.toLowerCase() !== \"desc\" : false;\n\n this.state = {\n rowsDisplayed: 20,\n filterHidden: true,\n sortAscending: sortAsc\n };\n\n this.getAllData = this.getAllData.bind(this);\n this.getCallDetails = this.getCallDetails.bind(this);\n this.getBookmarkParameter = this.getBookmarkParameter.bind(this);\n }\n\n pageSize = 20;\n\n myUrl = this.props.location.pathname.replace(this.props.location.search,'');\n\n componentDidMount() {\n getApiData(DATASOURCE.CALLSREFRESH, this.props.location.search);\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.location.search !== prevProps.location.search) {\n getApiData(DATASOURCE.CALLSREFRESH, this.props.location.search);\n }\n }\n\n getCallDetails(callId) {\n let myUrl = this.props.location.pathname.replace(this.props.location.search,'');\n let params = {};\n if (this.props.location.search) {\n params = qs.parse(this.props.location.search);\n }\n params[\"callId\"] = callId;\n this.props.history.push(myUrl + \"/CallDetail?\" + qs.stringify(params));\n }\n\n getBookmarkParameter(bookmark) {\n let params = {};\n if (this.props.location.search) {\n params = qs.parse(this.props.location.search);\n }\n let ret = null;\n if (params[\"sortOrder\"] && params[\"sortOrder\"].toLowerCase() === \"asc\") {\n ret = {searchAfter:bookmark};\n } else {\n ret = {searchBefore:bookmark};\n }\n return ret;\n }\n\n getAllData() {\n if (this.props.totalCalls > 0 && this.props.calls.length < this.props.totalCalls) {\n getApiData(DATASOURCE.CALLSREFRESH,this.props.location.search,{limit:this.props.totalCalls});\n }\n }\n\n changeSortOrder() {\n let sortAsc = this.state.sortAscending;\n let myUrl = this.props.location.pathname.replace(this.props.location.search,'');\n let params = {};\n if (this.props.location.search) {\n params = qs.parse(this.props.location.search);\n }\n if (sortAsc) {\n delete(params.sortOrder);\n } else {\n params.sortOrder = \"asc\";\n }\n this.setState({sortAscending: !sortAsc});\n this.props.history.push(myUrl + \"?\" + qs.stringify(params));\n }\n\n // TODO - add table sorting when clicking the header columns. Sorting applied as query parameter\n render() {\n let isFullData = this.props.calls.length === this.props.totalCalls;\n const { t } = this.props;\n return (\n
\n \n \n \n \n \n \n { !isFullData && this.props.totalCalls > 0 && this.props.totalCalls <= 10000 &&\n \n }\n

\n {this.props.calls.length} / {this.props.totalCalls} calls loaded \n {this.props.totalCalls > 10000 ? \" (Can't bulk load more than 10k)\" : \"\"}\n

\n
\n
\n \n \n \n {t(\"Screens.Calls.List.Link\")}\n {ListHeaderMap.map((entry,index) => {\n if (entry.title) {\n return(\n {t(entry.trans)}\n \n \n );\n }\n return (\n {t(entry.trans)}\n );\n })}\n \n \n\n {\n if (this.state.rowsDisplayed + this.pageSize <= this.props.calls.length) {\n this.setState({rowsDisplayed: this.state.rowsDisplayed + this.pageSize});\n } else if (this.props.calls.length === this.props.totalCalls) {\n if (this.state.rowsDisplayed !== this.props.calls.length) {\n this.setState({rowsDisplayed: this.props.calls.length === 0 ? 20 : this.props.calls.length});\n }\n } else {\n // need more data\n let bookmark = this.props.calls[this.props.calls.length-1].bookmark;\n \n getApiData(DATASOURCE.CALLSUPDATE,this.props.location.search,this.getBookmarkParameter(bookmark));\n if (this.state.rowsDisplayed + this.pageSize <= this.props.totalCalls) {\n this.setState({rowsDisplayed: this.state.rowsDisplayed + this.pageSize});\n } else {\n this.setState({rowsDisplayed: this.props.totalCalls});\n }\n }\n }}\n >\n {this.props.calls.map((entry, index) => {\n if (index < this.state.rowsDisplayed) {\n return (\n \n \n \n \n {ListHeaderMap.map((data,index) => {\n if (data.title) {\n return (\n {entry[data.data]}\n );\n }\n return (\n {entry[data.data]}\n );\n })}\n \n )\n } else {\n return null;\n }\n })}\n \n
\n \n \n \n
\n
\n
\n )\n }\n\n}\n\n// REDUX STATE\nconst mapToProps = state => {\n return {\n calls: state.calls.data,\n loading: state.calls.loading,\n totalCalls: state.calls.total\n }\n};\n\nexport default translate()(\n connect(\n mapToProps,\n null\n )(CallList)\n);\n","export default __webpack_public_path__ + \"static/media/PolycomEndUserLicenseAgreementALLPRODUCTS.c20ef14a.pdf\";","export default __webpack_public_path__ + \"static/media/PolycomExportRestrictions.ee9cb98b.pdf\";","export default __webpack_public_path__ + \"static/media/RC_Invite_Dep_Guide.4159c6ba.docx\";","import React, { Component } from 'react'\nimport { Button, Checkbox, Dimmer, Grid, Icon, Segment, Form, Loader } from 'semantic-ui-react'\nimport { connect } from 'react-redux'\nimport { translate } from 'react-i18next'\nimport { DATASOURCE } from 'Constants'\nimport { getApiData } from 'helpers/api'\nimport EULA from 'lib/docs/PolycomEndUserLicenseAgreementALLPRODUCTS.pdf'\nimport EXPORT from 'lib/docs/PolycomExportRestrictions.pdf'\nimport DOCS from 'lib/docs/RC_Invite_Dep_Guide.docx'\n\nclass Modality extends Component {\n constructor(props) {\n super(props);\n this.state = {\n agreed:false\n }\n };\n\n code = \"RIWak2CKsaL1kv8ZLacaU6WUKYeOOrgMGBrGsbLt24zsPzIY0TadFw%3D%3D\"\n\n componentDidMount() {\n getApiData(DATASOURCE.MODALITY,\"code=\" + this.code);\n }\n\n render() {\n const { t } = this.props;\n return (\n
\n

{t(\"Screens.Modality.Paragraph\")}

\n this.setState({ agreed: !this.state.agreed})}\n /> I agree to the License Agreement and Export Restrictions \n \n \n {this.props.modalityLoading && }\n \n \n {Object.keys(this.props.modalityDetail).map(arch => { \n return (\n \n \n
\n \n \n \n \n \n \n \n \n
\n
\n \n {this.props.modalityDetail[arch].file}\n \n \n MD5: {this.props.modalityDetail[arch].md5}\n \n \n {this.props.modalityDetail[arch].date}\n \n
\n )\n })}\n
\n
\n\n
\n )\n }\n}\n\n// REDUX STATE\nconst mapToProps = state => {\n return {\n modalityDetail: state.modality.data,\n modalityLoading: state.modality.loading\n }\n};\n\nexport default translate()(\n connect(\n mapToProps,\n null\n )(Modality)\n);\n","import React, { Component } from 'react'\nimport { Dimmer, Loader } from 'semantic-ui-react'\n\nclass WidgetCardWrapper extends Component {\n\n render() {\n return (\n
\n {this.props.children}\n \n \n \n
\n )\n }\n}\n\nexport default WidgetCardWrapper\n","import { Component } from 'react'\nimport { getApiData } from 'helpers/api'\n\nclass BaseWidget extends Component {\n constructor(props,dataSource) {\n super(props);\n this.state = {\n searchLoc: window.location.search\n };\n this.dataSource = dataSource;\n }\n\n componentDidMount() {\n getApiData(this.dataSource,window.location.search);\n }\n\n componentDidUpdate(prevProps) {\n if (window.location.search !== this.state.searchLoc) {\n getApiData(this.dataSource,window.location.search);\n this.setState( {searchLoc: window.location.search } );\n }\n }\n\n render() {\n return null\n }\n}\n \nexport default BaseWidget;\n\n","import React from 'react'\nimport { connect } from 'react-redux'\nimport Wrapper from './WidgetCardWrapper'\nimport { translate } from 'react-i18next'\nimport { DATASOURCE } from 'Constants'\nimport BaseWidget from './BaseWidget'\nimport DonutChart from 'components/DonutChart'\n\nclass EndreasonPie extends BaseWidget {\n constructor(props) {\n super(props,DATASOURCE.SUMMARY);\n }\n\n static defaultGridItemProps(){\n return {\n w: 4,\n h: 12,\n maxW: 6,\n maxH: 16\n };\n }\n\n render() {\n return (\n \n \n \n );\n }\n}\n\n// Helper functions\nconst mapToProps = state => {\n return {\n summary: state.summary,\n history: state.router\n }\n};\n \nexport default translate()(\n connect(\n mapToProps,\n null\n )(EndreasonPie)\n);\n\n","import React from 'react'\nimport { connect } from 'react-redux'\nimport Wrapper from './WidgetCardWrapper'\nimport { translate } from 'react-i18next'\nimport { DATASOURCE } from 'Constants'\nimport BaseWidget from './BaseWidget'\nimport DonutChart from 'components/DonutChart'\n\nclass DevicesPie extends BaseWidget {\n constructor(props) {\n super(props,DATASOURCE.SUMMARY);\n }\n\n static defaultGridItemProps(){\n return {\n w: 4,\n h: 12,\n maxW: 6,\n maxH: 16\n };\n }\n\n render() {\n return (\n \n \n \n );\n }\n}\n\n// Helper functions\nconst mapToProps = state => {\n return {\n summary: state.summary,\n history: state.router\n }\n};\n \nexport default translate()(\n connect(\n mapToProps,\n null\n )(DevicesPie)\n);\n\n","import React from 'react'\nimport { connect } from 'react-redux'\nimport Wrapper from './WidgetCardWrapper'\nimport { translate } from 'react-i18next'\nimport { DATASOURCE } from 'Constants'\nimport BaseWidget from './BaseWidget'\nimport BarChart from 'components/BarChart'\n\nclass DevicesBar extends BaseWidget {\n constructor(props) {\n super(props,DATASOURCE.SUMMARY);\n }\n\n static defaultGridItemProps(){\n return {\n w: 4,\n h: 12,\n maxW: 6,\n maxH: 16\n };\n }\n\n render() {\n const { t } = this.props;\n return (\n \n \n \n );\n }\n}\n\n// Helper functions\nconst mapToProps = state => {\n return {\n summary: state.summary,\n history: state.router\n }\n};\n \nexport default translate()(\n connect(\n mapToProps,\n null\n )(DevicesBar)\n);\n\n","import React from 'react'\nimport { connect } from 'react-redux'\nimport Wrapper from './WidgetCardWrapper'\nimport { translate } from 'react-i18next'\nimport { DATASOURCE } from 'Constants'\nimport BaseWidget from './BaseWidget'\nimport BarChart from 'components/BarChart'\n\nclass ActiveCallsChart extends BaseWidget {\n constructor(props) {\n super(props,DATASOURCE.ACTIVE_CALLS);\n }\n\n static defaultGridItemProps(){\n return {\n w: 4,\n h: 12,\n maxW: 6,\n maxH: 16\n };\n }\n\n render() {\n const { t } = this.props;\n return (\n \n \n \n );\n }\n}\n\n// Helper functions\nconst mapToProps = state => {\n return {\n activeCalls: state.activeCalls,\n history: state.router\n }\n};\n \nexport default translate()(\n connect(\n mapToProps,\n null\n )(ActiveCallsChart)\n);\n\n","import React from 'react'\nimport { connect } from 'react-redux'\nimport Wrapper from './WidgetCardWrapper'\nimport { translate } from 'react-i18next'\nimport { DATASOURCE } from 'Constants'\nimport BaseWidget from './BaseWidget'\nimport LineChart from 'components/LineChart'\n\nclass ActiveCallsPer extends BaseWidget {\n constructor(props) {\n super(props,DATASOURCE.SUMMARY);\n }\n\n static defaultGridItemProps(){\n return {\n w: 4,\n h: 12,\n maxW: 6,\n maxH: 16\n };\n }\n\n render() {\n const { t } = this.props;\n return (\n \n \n \n );\n }\n}\n\n// Helper functions\nconst mapToProps = state => {\n return {\n summary: state.summary,\n history: state.router\n }\n};\n \nexport default translate()(\n connect(\n mapToProps,\n null\n )(ActiveCallsPer)\n);\n\n","import React from 'react'\nimport { connect } from 'react-redux'\nimport Wrapper from './WidgetCardWrapper'\nimport { translate } from 'react-i18next'\nimport { DATASOURCE } from 'Constants'\nimport BaseWidget from './BaseWidget'\nimport BarChart from 'components/BarChart'\n\nclass TopConferences extends BaseWidget {\n constructor(props) {\n super(props,DATASOURCE.SUMMARY);\n }\n\n static defaultGridItemProps(){\n return {\n w: 4,\n h: 12,\n maxW: 6,\n maxH: 16\n };\n }\n\n render() {\n const { t } = this.props;\n return (\n \n \n \n );\n }\n}\n\n// Helper functions\nconst mapToProps = state => {\n return {\n summary: state.summary,\n history: state.router\n }\n};\n \nexport default translate()(\n connect(\n mapToProps,\n null\n )(TopConferences)\n);\n\n","import React from 'react'\nimport { connect } from 'react-redux'\nimport Wrapper from './WidgetCardWrapper'\nimport { translate } from 'react-i18next'\nimport { DATASOURCE } from 'Constants'\nimport BaseWidget from './BaseWidget'\nimport BarChart from 'components/BarChart'\n\nclass CallDuration extends BaseWidget {\n constructor(props) {\n super(props,DATASOURCE.SUMMARY);\n }\n\n static defaultGridItemProps(){\n return {\n w: 4,\n h: 12,\n maxW: 6,\n maxH: 16\n };\n }\n\n render() {\n const { t } = this.props;\n return (\n \n \n \n );\n }\n}\n\n// Helper functions\nconst mapToProps = state => {\n return {\n summary: state.summary,\n history: state.router\n }\n};\n \nexport default translate()(\n connect(\n mapToProps,\n null\n )(CallDuration)\n);\n\n","import React from 'react'\nimport { connect } from 'react-redux'\nimport Wrapper from './WidgetCardWrapper'\nimport { translate } from 'react-i18next'\nimport { DATASOURCE } from 'Constants'\nimport BaseWidget from './BaseWidget'\nimport { deepHasOwnProperty } from 'helpers/json_helper'\nimport { Statistic } from 'semantic-ui-react'\n\nclass ActiveCallsCount extends BaseWidget {\n constructor(props) {\n super(props,DATASOURCE.ACTIVE_CALLS);\n }\n\n static defaultGridItemProps(){\n return {\n w: 2,\n h: 4,\n maxW: 6,\n maxH: 16\n };\n }\n\n render() {\n const { t } = this.props;\n let total = deepHasOwnProperty(this.props.activeCalls,\"raw\",\"hits\") ? this.props.activeCalls.raw.hits: 0;\n if (isNaN(total)) {\n total = 0;\n }\n\n return (\n \n
\n \n
\n
\n );\n }\n}\n\n// Helper functions\nconst mapToProps = state => {\n return {\n activeCalls: state.activeCalls,\n history: state.router\n }\n};\n \nexport default translate()(\n connect(\n mapToProps,\n null\n )(ActiveCallsCount)\n);\n\n","import React from 'react'\nimport { connect } from 'react-redux'\nimport Wrapper from './WidgetCardWrapper'\nimport { translate } from 'react-i18next'\nimport { DATASOURCE } from 'Constants'\nimport BaseWidget from './BaseWidget'\nimport { deepHasOwnProperty } from 'helpers/json_helper'\nimport { Statistic } from 'semantic-ui-react'\n\nclass TotalCalls extends BaseWidget {\n constructor(props) {\n super(props,DATASOURCE.SUMMARY);\n }\n\n static defaultGridItemProps(){\n return {\n w: 2,\n h: 4,\n maxW: 6,\n maxH: 16\n };\n }\n\n render() {\n const { t } = this.props;\n let total = deepHasOwnProperty(this.props.summary,\"raw\",\"total\",\"doc_count\") ? this.props.summary.raw.total.doc_count : 0;\n if (isNaN(total)) {\n total = 0;\n }\n\n return (\n \n
\n \n
\n
\n );\n }\n}\n\n// Helper functions\nconst mapToProps = state => {\n return {\n summary: state.summary,\n history: state.router\n }\n};\n \nexport default translate()(\n connect(\n mapToProps,\n null\n )(TotalCalls)\n);\n\n","import React from 'react'\nimport { connect } from 'react-redux'\nimport Wrapper from './WidgetCardWrapper'\nimport { translate } from 'react-i18next'\nimport { DATASOURCE } from 'Constants'\nimport BaseWidget from './BaseWidget'\nimport { deepHasOwnProperty } from 'helpers/json_helper'\nimport { Statistic } from 'semantic-ui-react'\n\nclass TeamsCalls extends BaseWidget {\n constructor(props) {\n super(props,DATASOURCE.SUMMARY);\n }\n\n static defaultGridItemProps(){\n return {\n w: 2,\n h: 4,\n maxW: 6,\n maxH: 16\n };\n }\n\n render() {\n const { t } = this.props;\n let total = deepHasOwnProperty(this.props.summary,\"raw\",\"teams\",\"doc_count\") ? this.props.summary.raw.teams.doc_count : 0;\n if (isNaN(total)) {\n total = 0;\n }\n\n return (\n \n
\n \n
\n
\n );\n }\n}\n\n// Helper functions\nconst mapToProps = state => {\n return {\n summary: state.summary,\n history: state.router\n }\n};\n \nexport default translate()(\n connect(\n mapToProps,\n null\n )(TeamsCalls)\n);\n\n","import React from 'react'\nimport { connect } from 'react-redux'\nimport Wrapper from './WidgetCardWrapper'\nimport { translate } from 'react-i18next'\nimport { DATASOURCE } from 'Constants'\nimport BaseWidget from './BaseWidget'\nimport { deepHasOwnProperty } from 'helpers/json_helper'\nimport { Statistic } from 'semantic-ui-react'\n\nclass SkypeCalls extends BaseWidget {\n constructor(props) {\n super(props,DATASOURCE.SUMMARY);\n }\n\n static defaultGridItemProps(){\n return {\n w: 2,\n h: 4,\n maxW: 6,\n maxH: 16\n };\n }\n\n render() {\n const { t } = this.props;\n let total = deepHasOwnProperty(this.props.summary,\"raw\",\"skype\",\"doc_count\") ? this.props.summary.raw.skype.doc_count : 0;\n if (isNaN(total)) {\n total = 0;\n }\n\n return (\n \n
\n \n
\n
\n );\n }\n}\n\n// Helper functions\nconst mapToProps = state => {\n return {\n summary: state.summary,\n history: state.router\n }\n};\n \nexport default translate()(\n connect(\n mapToProps,\n null\n )(SkypeCalls)\n);\n\n","import React from 'react'\nimport { connect } from 'react-redux'\nimport Wrapper from './WidgetCardWrapper'\nimport { translate } from 'react-i18next'\nimport { DATASOURCE } from 'Constants'\nimport BaseWidget from './BaseWidget'\nimport { getFormattedTime } from 'helpers/dataFormatter'\nimport { deepHasOwnProperty } from 'helpers/json_helper'\nimport { Statistic } from 'semantic-ui-react'\n\nclass TotalDuration extends BaseWidget {\n constructor(props) {\n super(props,DATASOURCE.SUMMARY);\n }\n\n static defaultGridItemProps(){\n return {\n w: 2,\n h: 4,\n maxW: 6,\n maxH: 16\n };\n }\n\n render() {\n const { t } = this.props;\n let total = deepHasOwnProperty(this.props.summary,\"raw\",\"total\",\"total_ms\") ? this.props.summary.raw.total.total_ms : 0;\n if (isNaN(total)) {\n total = 0;\n }\n\n return (\n \n
\n \n
\n
\n );\n }\n}\n\n// Helper functions\nconst mapToProps = state => {\n return {\n summary: state.summary,\n history: state.router\n }\n};\n \nexport default translate()(\n connect(\n mapToProps,\n null\n )(TotalDuration)\n);\n\n","import React from 'react'\nimport { connect } from 'react-redux'\nimport Wrapper from './WidgetCardWrapper'\nimport { translate } from 'react-i18next'\nimport { DATASOURCE } from 'Constants'\nimport BaseWidget from './BaseWidget'\nimport { getFormattedTime } from 'helpers/dataFormatter'\nimport { deepHasOwnProperty } from 'helpers/json_helper'\nimport { Statistic } from 'semantic-ui-react'\n\nclass TeamsDuration extends BaseWidget {\n constructor(props) {\n super(props,DATASOURCE.SUMMARY);\n }\n\n static defaultGridItemProps(){\n return {\n w: 2,\n h: 4,\n maxW: 6,\n maxH: 16\n };\n }\n\n render() {\n const { t } = this.props;\n let total = deepHasOwnProperty(this.props.summary,\"raw\",\"teams\",\"total_ms\") ? this.props.summary.raw.teams.total_ms : 0;\n if (isNaN(total)) {\n total = 0;\n }\n\n return (\n \n
\n \n
\n
\n );\n }\n}\n\n// Helper functions\nconst mapToProps = state => {\n return {\n summary: state.summary,\n history: state.router\n }\n};\n \nexport default translate()(\n connect(\n mapToProps,\n null\n )(TeamsDuration)\n);\n\n","import React from 'react'\nimport { connect } from 'react-redux'\nimport Wrapper from './WidgetCardWrapper'\nimport { translate } from 'react-i18next'\nimport { DATASOURCE } from 'Constants'\nimport BaseWidget from './BaseWidget'\nimport { getFormattedTime } from 'helpers/dataFormatter'\nimport { deepHasOwnProperty } from 'helpers/json_helper'\nimport { Statistic } from 'semantic-ui-react'\n\nclass SkypeDuration extends BaseWidget {\n constructor(props) {\n super(props,DATASOURCE.SUMMARY);\n }\n\n static defaultGridItemProps(){\n return {\n w: 2,\n h: 4,\n maxW: 6,\n maxH: 16\n };\n }\n\n render() {\n const { t } = this.props;\n let total = deepHasOwnProperty(this.props.summary,\"raw\",\"skype\",\"total_ms\") ? this.props.summary.raw.skype.total_ms : 0;\n if (isNaN(total)) {\n total = 0;\n }\n\n return (\n \n
\n \n
\n
\n );\n }\n}\n\n// Helper functions\nconst mapToProps = state => {\n return {\n summary: state.summary,\n history: state.router\n }\n};\n \nexport default translate()(\n connect(\n mapToProps,\n null\n )(SkypeDuration)\n);\n\n","import React from 'react'\nimport { connect } from 'react-redux'\nimport Wrapper from './WidgetCardWrapper'\nimport { translate } from 'react-i18next'\nimport { DATASOURCE } from 'Constants'\nimport BaseWidget from './BaseWidget'\nimport { getFormattedTime } from 'helpers/dataFormatter'\nimport { deepHasOwnProperty } from 'helpers/json_helper'\nimport { Statistic } from 'semantic-ui-react'\n\nclass TotalMedian extends BaseWidget {\n constructor(props) {\n super(props,DATASOURCE.SUMMARY);\n }\n\n static defaultGridItemProps(){\n return {\n w: 2,\n h: 4,\n maxW: 6,\n maxH: 16\n };\n }\n\n render() {\n const { t } = this.props;\n let total = deepHasOwnProperty(this.props.summary,\"raw\",\"total\",\"median_ms\") ? this.props.summary.raw.total.median_ms : 0;\n if (isNaN(total)) {\n total = 0;\n }\n\n return (\n \n
\n \n
\n
\n );\n }\n}\n\n// Helper functions\nconst mapToProps = state => {\n return {\n summary: state.summary,\n history: state.router\n }\n};\n \nexport default translate()(\n connect(\n mapToProps,\n null\n )(TotalMedian)\n);\n\n","import React from 'react'\nimport { connect } from 'react-redux'\nimport Wrapper from './WidgetCardWrapper'\nimport { translate } from 'react-i18next'\nimport { DATASOURCE } from 'Constants'\nimport BaseWidget from './BaseWidget'\nimport { getFormattedTime } from 'helpers/dataFormatter'\nimport { deepHasOwnProperty } from 'helpers/json_helper'\nimport { Statistic } from 'semantic-ui-react'\n\nclass TeamsMedian extends BaseWidget {\n constructor(props) {\n super(props,DATASOURCE.SUMMARY);\n }\n\n static defaultGridItemProps(){\n return {\n w: 2,\n h: 4,\n maxW: 6,\n maxH: 16\n };\n }\n\n render() {\n const { t } = this.props;\n let total = deepHasOwnProperty(this.props.summary,\"raw\",\"teams\",\"median_ms\") ? this.props.summary.raw.teams.median_ms : 0;\n if (isNaN(total)) {\n total = 0;\n }\n\n return (\n \n
\n \n
\n
\n );\n }\n}\n\n// Helper functions\nconst mapToProps = state => {\n return {\n summary: state.summary,\n history: state.router\n }\n};\n \nexport default translate()(\n connect(\n mapToProps,\n null\n )(TeamsMedian)\n);\n\n","import React from 'react'\nimport { connect } from 'react-redux'\nimport Wrapper from './WidgetCardWrapper'\nimport { translate } from 'react-i18next'\nimport { DATASOURCE } from 'Constants'\nimport BaseWidget from './BaseWidget'\nimport { getFormattedTime } from 'helpers/dataFormatter'\nimport { deepHasOwnProperty } from 'helpers/json_helper'\nimport { Statistic } from 'semantic-ui-react'\n\nclass SkypeMedian extends BaseWidget {\n constructor(props) {\n super(props,DATASOURCE.SUMMARY);\n }\n\n static defaultGridItemProps(){\n return {\n w: 2,\n h: 4,\n maxW: 6,\n maxH: 16\n };\n }\n\n render() {\n const { t } = this.props;\n let total = deepHasOwnProperty(this.props.summary,\"raw\",\"skype\",\"median_ms\") ? this.props.summary.raw.skype.median_ms : 0;\n if (isNaN(total)) {\n total = 0;\n }\n\n return (\n \n
\n \n
\n
\n );\n }\n}\n\n// Helper functions\nconst mapToProps = state => {\n return {\n summary: state.summary,\n history: state.router\n }\n};\n \nexport default translate()(\n connect(\n mapToProps,\n null\n )(SkypeMedian)\n);\n\n","import React from 'react'\nimport { connect } from 'react-redux'\nimport Wrapper from './WidgetCardWrapper'\nimport { translate } from 'react-i18next'\nimport { DATASOURCE } from 'Constants'\nimport BaseWidget from './BaseWidget'\nimport { getFormattedTime } from 'helpers/dataFormatter'\nimport { deepHasOwnProperty } from 'helpers/json_helper'\nimport { Statistic } from 'semantic-ui-react'\n\nclass TotalMax extends BaseWidget {\n constructor(props) {\n super(props,DATASOURCE.SUMMARY);\n }\n\n static defaultGridItemProps(){\n return {\n w: 2,\n h: 4,\n maxW: 6,\n maxH: 16\n };\n }\n\n render() {\n const { t } = this.props;\n let total = deepHasOwnProperty(this.props.summary,\"raw\",\"total\",\"max_ms\") ? this.props.summary.raw.total.max_ms : 0;\n if (isNaN(total)) {\n total = 0;\n }\n\n return (\n \n
\n \n
\n
\n );\n }\n}\n\n// Helper functions\nconst mapToProps = state => {\n return {\n summary: state.summary,\n history: state.router\n }\n};\n \nexport default translate()(\n connect(\n mapToProps,\n null\n )(TotalMax)\n);\n\n","import React from 'react'\nimport { connect } from 'react-redux'\nimport Wrapper from './WidgetCardWrapper'\nimport { translate } from 'react-i18next'\nimport { DATASOURCE } from 'Constants'\nimport BaseWidget from './BaseWidget'\nimport { getFormattedTime } from 'helpers/dataFormatter'\nimport { deepHasOwnProperty } from 'helpers/json_helper'\nimport { Statistic } from 'semantic-ui-react'\n\nclass TeamsMax extends BaseWidget {\n constructor(props) {\n super(props,DATASOURCE.SUMMARY);\n }\n\n static defaultGridItemProps(){\n return {\n w: 2,\n h: 4,\n maxW: 6,\n maxH: 16\n };\n }\n\n render() {\n const { t } = this.props;\n let total = deepHasOwnProperty(this.props.summary,\"raw\",\"teams\",\"max_ms\") ? this.props.summary.raw.teams.max_ms : 0;\n if (isNaN(total)) {\n total = 0;\n }\n\n return (\n \n
\n \n
\n
\n );\n }\n}\n\n// Helper functions\nconst mapToProps = state => {\n return {\n summary: state.summary,\n history: state.router\n }\n};\n \nexport default translate()(\n connect(\n mapToProps,\n null\n )(TeamsMax)\n);\n\n","import React from 'react'\nimport { connect } from 'react-redux'\nimport Wrapper from './WidgetCardWrapper'\nimport { translate } from 'react-i18next'\nimport { DATASOURCE } from 'Constants'\nimport BaseWidget from './BaseWidget'\nimport { getFormattedTime } from 'helpers/dataFormatter'\nimport { deepHasOwnProperty } from 'helpers/json_helper'\nimport { Statistic } from 'semantic-ui-react'\n\nclass SkypeMax extends BaseWidget {\n constructor(props) {\n super(props,DATASOURCE.SUMMARY);\n }\n\n static defaultGridItemProps(){\n return {\n w: 2,\n h: 4,\n maxW: 6,\n maxH: 16\n };\n }\n\n render() {\n const { t } = this.props;\n let total = deepHasOwnProperty(this.props.summary,\"raw\",\"skype\",\"max_ms\") ? this.props.summary.raw.skype.max_ms : 0;\n if (isNaN(total)) {\n total = 0;\n }\n\n return (\n \n
\n \n
\n
\n );\n }\n}\n\n// Helper functions\nconst mapToProps = state => {\n return {\n summary: state.summary,\n history: state.router\n }\n};\n \nexport default translate()(\n connect(\n mapToProps,\n null\n )(SkypeMax)\n);\n\n","import React from 'react'\nimport { connect } from 'react-redux'\nimport Wrapper from './WidgetCardWrapper'\nimport { translate } from 'react-i18next'\nimport { DATASOURCE } from 'Constants'\nimport BaseWidget from './BaseWidget'\nimport { Statistic } from 'semantic-ui-react'\n\nclass LicenseOverage extends BaseWidget {\n constructor(props) {\n super(props,DATASOURCE.LICENSE_OVERAGE);\n }\n\n static defaultGridItemProps(){\n return {\n w: 2,\n h: 3,\n maxW: 6,\n maxH: 16\n };\n }\n\n render() {\n const { t } = this.props;\n let total = this.props.licenseOverage.accepted + this.props.licenseOverage.rejected;\n\n return (\n \n
\n \n
\n
\n );\n }\n}\n\n// Helper functions\nconst mapToProps = state => {\n return {\n licenseOverage: state.licenseOverage,\n history: state.router\n }\n};\n \nexport default translate()(\n connect(\n mapToProps,\n null\n )(LicenseOverage)\n);\n\n","import React from 'react'\nimport { connect } from 'react-redux'\nimport Wrapper from './WidgetCardWrapper'\nimport { translate } from 'react-i18next'\nimport { DATASOURCE } from 'Constants'\nimport BaseWidget from './BaseWidget'\nimport { Statistic } from 'semantic-ui-react'\n\nclass LicenseRejected extends BaseWidget {\n constructor(props) {\n super(props,DATASOURCE.LICENSE_OVERAGE);\n }\n\n static defaultGridItemProps(){\n return {\n w: 2,\n h: 3,\n maxW: 6,\n maxH: 16\n };\n }\n\n render() {\n const { t } = this.props;\n let total = this.props.licenseOverage.rejected;\n\n return (\n \n
\n \n
\n
\n );\n }\n}\n\n// Helper functions\nconst mapToProps = state => {\n return {\n licenseOverage: state.licenseOverage,\n history: state.router\n }\n};\n \nexport default translate()(\n connect(\n mapToProps,\n null\n )(LicenseRejected)\n);\n\n","import React from 'react'\nimport { connect } from 'react-redux'\nimport Wrapper from './WidgetCardWrapper'\nimport { translate } from 'react-i18next'\nimport { DATASOURCE } from 'Constants'\nimport BaseWidget from './BaseWidget'\nimport { Statistic } from 'semantic-ui-react'\n\nclass LicenseSurged extends BaseWidget {\n constructor(props) {\n super(props,DATASOURCE.LICENSE_OVERAGE);\n }\n\n static defaultGridItemProps(){\n return {\n w: 2,\n h: 3,\n maxW: 6,\n maxH: 16\n };\n }\n\n render() {\n const { t } = this.props;\n let total = this.props.licenseOverage.accepted;\n\n return (\n \n
\n \n
\n
\n );\n }\n}\n\n// Helper functions\nconst mapToProps = state => {\n return {\n licenseOverage: state.licenseOverage,\n history: state.router\n }\n};\n \nexport default translate()(\n connect(\n mapToProps,\n null\n )(LicenseSurged)\n);\n\n","import React from 'react'\nimport { connect } from 'react-redux'\nimport Wrapper from './WidgetCardWrapper'\nimport { translate } from 'react-i18next'\nimport { DATASOURCE } from 'Constants'\nimport BaseWidget from './BaseWidget'\nimport { Statistic } from 'semantic-ui-react'\n\nclass LicenseOverage extends BaseWidget {\n constructor(props) {\n super(props,DATASOURCE.LICENSE_OVERAGE);\n }\n\n static defaultGridItemProps(){\n return {\n w: 2,\n h: 3,\n maxW: 6,\n maxH: 16\n };\n }\n\n render() {\n const { t } = this.props;\n let total = this.props.licenseOverage.claritiOverageCount;\n\n return (\n \n
\n \n
\n
\n );\n }\n}\n\n// Helper functions\nconst mapToProps = state => {\n return {\n licenseOverage: state.licenseOverage,\n history: state.router\n }\n};\n\nexport default translate()(\n connect(\n mapToProps,\n null\n )(LicenseOverage)\n);\n\n","import React from 'react'\nimport { connect } from 'react-redux'\nimport Wrapper from './WidgetCardWrapper'\nimport { translate } from 'react-i18next'\nimport { DATASOURCE } from 'Constants'\nimport BaseWidget from './BaseWidget'\nimport BarChart from 'components/BarChart'\n\nclass MostUsed extends BaseWidget {\n constructor(props) {\n super(props,DATASOURCE.SUMMARY);\n }\n\n static defaultGridItemProps(){\n return {\n w: 4,\n h: 12,\n maxW: 6,\n maxH: 16\n };\n }\n\n render() {\n const { t } = this.props;\n return (\n \n \n \n );\n }\n}\n\n// Helper functions\nconst mapToProps = state => {\n return {\n summary: state.summary,\n history: state.router\n }\n};\n \nexport default translate()(\n connect(\n mapToProps,\n null\n )(MostUsed)\n);\n\n","import React, { Component } from 'react';\nimport { Dashboard, LocalStorage, WidgetDefinition } from \"@plcm/dynamic-dashboards\"\nimport EndreasonPie from './widgets/EndreasonPie'\nimport DevicesPie from './widgets/DevicesPie'\nimport DevicesBar from './widgets/DevicesBar'\nimport ActiveCallsChart from './widgets/ActiveCallsChart'\nimport ActiveCallsPer from './widgets/ActiveCallsPer'\nimport TopConferences from './widgets/TopConferences'\nimport CallDuration from './widgets/CallDuration'\nimport ActiveCallsCount from './widgets/ActiveCallsCount'\nimport TotalCalls from './widgets/TotalCalls'\nimport TeamsCalls from './widgets/TeamsCalls'\nimport SkypeCalls from './widgets/SkypeCalls'\nimport TotalDuration from './widgets/TotalDuration'\nimport TeamsDuration from './widgets/TeamsDuration'\nimport SkypeDuration from './widgets/SkypeDuration'\nimport TotalMedian from './widgets/TotalMedian'\nimport TeamsMedian from './widgets/TeamsMedian'\nimport SkypeMedian from './widgets/SkypeMedian'\nimport TotalMax from './widgets/TotalMax'\nimport TeamsMax from './widgets/TeamsMax'\nimport SkypeMax from './widgets/SkypeMax'\nimport LicenseOverage from './widgets/LicenseOverage'\nimport LicenseRejected from './widgets/LicenseRejected'\nimport LicenseSurged from './widgets/LicenseSurged'\nimport ClaritiLicenseOverage from './widgets/ClaritiLicenseOverage'\nimport MostUsed from './widgets/MostUsed'\nimport { translate } from 'react-i18next'\n\nclass DynamicDashboard extends Component {\n constructor(props) {\n super(props);\n\n this.saveCallback = this.saveCallback.bind(this);\n\n let empty = false;\n let ls = localStorage.getItem(this.dbKey);\n if (ls === null || ls.length === 0) {\n empty = true;\n } else {\n let lsObj = JSON.parse(ls);\n if (lsObj.widgets && lsObj.widgets.length === 0) {\n empty = true;\n }\n }\n\n if (empty) {\n console.log(\"Creating new localStorage[\" + this.dbKey + \"] with defaults.\");\n let widgetMap = {};\n this.widgetTypes.forEach((w) => widgetMap[w.name] = w);\n\n // get unique ids\n let idSet = new Set([]);\n for (let ii = 0; ii < this.defaultLayout.length; ii++) {\n let id = Math.floor(Math.random()*1000000000);\n if (idSet.has(id)) {\n ii--;\n } else {\n idSet.add(id);\n }\n }\n idSet = Array.from(idSet);\n let idIdx = 0;\n this.defaultLayout.forEach((w) => {\n w.i = idSet[idIdx++];\n });\n\n // create string object\n let obj = {\"widgets\":[], \"layouts\":{\"md\":[]}};\n this.defaultLayout.forEach((w) => {\n obj.widgets.push({id:w.i + \"\", name:w.widget});\n obj.layouts.md.push({w:w.w, h:w.h, x:w.x, y:w.y, i:w.i + \"\", moved:false, static:false,\n minW:widgetMap[w.widget].defaultGridItemProps.w,\n maxW:widgetMap[w.widget].defaultGridItemProps.maxW,\n minH:widgetMap[w.widget].defaultGridItemProps.h,\n maxH:widgetMap[w.widget].defaultGridItemProps.maxH\n });\n });\n localStorage.setItem(this.dbKey,JSON.stringify(obj));\n }\n }\n\n dbKey = \"aquaAnalyticsDashboard\";\n\n defaultLayout = [\n { widget: \"EndReasonPie\", w:4, h:12, x:0, y:0 },\n { widget: \"ActiveCallsPer\", w:4, h:12, x:4, y:0 },\n { widget: \"TotalCalls\", w:2, h:4, x:0, y:13 },\n { widget: \"TotalDuration\", w:2, h:4, x:2, y:13 },\n { widget: \"TotalMedian\", w:2, h:4, x:4, y:13 },\n { widget: \"TotalMax\", w:2, h:4, x:6, y:13 },\n { widget: \"TeamsCalls\", w:2, h:4, x:0, y:15 },\n { widget: \"TeamsDuration\", w:2, h:4, x:2, y:15 },\n { widget: \"TeamsMedian\", w:2, h:4, x:4, y:15 },\n { widget: \"TeamsMax\", w:2, h:4, x:6, y:15 },\n { widget: \"SkypeCalls\", w:2, h:4, x:0, y:17 },\n { widget: \"SkypeDuration\", w:2, h:4, x:2, y:17 },\n { widget: \"SkypeMedian\", w:2, h:4, x:4, y:17 },\n { widget: \"SkypeMax\", w:2, h:4, x:6, y:17 },\n { widget: \"DevicesPie\", w:4, h:12, x:0, y:19 }, \n { widget: \"DevicesBar\", w:4, h:12, x:4, y:19 }, \n { widget: \"TopConferences\", w:4, h:12, x:0, y:31 }, \n { widget: \"CallDuration\", w:4, h:12, x:4, y:31 }, \n { widget: \"ActiveCallsChart\", w:4, h:12, x:0, y:43 }, \n { widget: \"ActiveCallsCount\", w:2, h:4, x:4, y:43 }, \n { widget: \"LicenseOverage\", w:2, h:4, x:6, y:43 }, \n { widget: \"LicenseRejected\", w:2, h:4, x:4, y:47 }, \n { widget: \"LicenseSurged\", w:2, h:4, x:6, y:47 },\n { widget: \"ClaritiLicenseOverage\", w:2, h:4, x:4, y:51 },\n { widget: \"MostUsed\", w:4, h:12, x:0, y:55 }\n ]\n\n widgetTypes = [\n new WidgetDefinition(\"EndReasonPie\", EndreasonPie),\n new WidgetDefinition(\"DevicesPie\", DevicesPie),\n new WidgetDefinition(\"DevicesBar\", DevicesBar),\n new WidgetDefinition(\"ActiveCallsChart\", ActiveCallsChart),\n new WidgetDefinition(\"ActiveCallsPer\", ActiveCallsPer),\n new WidgetDefinition(\"TopConferences\", TopConferences),\n new WidgetDefinition(\"CallDuration\", CallDuration),\n new WidgetDefinition(\"ActiveCallsCount\", ActiveCallsCount),\n new WidgetDefinition(\"TotalCalls\", TotalCalls),\n new WidgetDefinition(\"TotalDuration\", TotalDuration),\n new WidgetDefinition(\"TotalMedian\", TotalMedian),\n new WidgetDefinition(\"TotalMax\", TotalMax),\n new WidgetDefinition(\"TeamsCalls\", TeamsCalls),\n new WidgetDefinition(\"TeamsDuration\", TeamsDuration),\n new WidgetDefinition(\"TeamsMedian\", TeamsMedian),\n new WidgetDefinition(\"TeamsMax\", TeamsMax),\n new WidgetDefinition(\"SkypeCalls\", SkypeCalls),\n new WidgetDefinition(\"SkypeDuration\", SkypeDuration),\n new WidgetDefinition(\"SkypeMedian\", SkypeMedian),\n new WidgetDefinition(\"SkypeMax\", SkypeMax),\n new WidgetDefinition(\"LicenseOverage\", LicenseOverage),\n new WidgetDefinition(\"LicenseRejected\", LicenseRejected),\n new WidgetDefinition(\"LicenseSurged\", LicenseSurged),\n new WidgetDefinition(\"ClaritiLicenseOverage\", ClaritiLicenseOverage),\n new WidgetDefinition(\"MostUsed\", MostUsed)\n ];\n\n dbStorage = new LocalStorage(this.dbKey);\n\n saveCallback(layoutsObj, widgetsObj) {\n // checking to see if the when layouts prop is enabled ... check out index.js2\n console.log(\"EDIT ME NOW: New layouts[%O] and widgets [%O]\",layoutsObj, widgetsObj);\n }\n\n render() {\n return (\n \n );\n }\n}\n\nexport default translate()(DynamicDashboard);\n","//import HeatMap from 'screens/calls/map/heat'\nimport HighMap from 'screens/calls/map/highmaps'\nimport CallSummary from 'screens/calls/summary/index'\nimport CallList from 'screens/calls/list/index'\nimport Modality from 'screens/modality/index'\nimport DynamicDashboard from 'screens/dashboard/index'\nimport { testAndSet, createNameMap, createUrlMap } from 'helpers/constants_helper'\nimport { STAGE } from 'Constants'\n\n// Menu structure. Edit here to update the sidebar everywhere. Add property \"devOnly:true\" \n// to create an item only viewable by dev\nexport const MENU = {\n sidebar: [\n { \n url: \"\",\n title: \"Menu.Dashboard\",\n icon: \"polycom home\",\n isSelector: true,\n app: DynamicDashboard\n },\n {\n url: \"calls\",\n title: \"Menu.Calls.Title\",\n icon: \"polycom call\",\n children: [\n {\n url: \"summary\",\n title: \"Menu.Calls.Summary\",\n icon: null,\n isSelector: true,\n app: CallSummary,\n },\n { \n url: \"map\",\n title: \"Map\",\n icon: null,\n isSelector: true,\n app: HighMap,\n },\n {\n url: \"list\",\n title: \"Menu.Calls.List\",\n icon: null,\n isSelector: true,\n app: CallList,\n }\n ]\n },\n { \n url: \"realconnect-invite-addin\",\n title: \"Menu.Modality.Title\",\n icon: \"polycom download\",\n app: Modality,\n }\n ]\n};\n\n// make sure we have the links set up correctly, add in fullpath to each object\ntestAndSet(MENU.sidebar, STAGE);\n\n// used if you want to find links by: URL.CALLS.LIST (for example)\nexport const URLName = createNameMap(MENU.sidebar);\n\n// returns a map of urL:{url: full_path, app: app_name, title: title, fullTitle: fullTitle}\nexport const URLMap = createUrlMap(MENU.sidebar);\n\n","import React, { Component } from 'react'\nimport { Menu, Icon, Sidebar } from 'semantic-ui-react'\nimport { MENU } from 'Menu'\nimport qs from 'query-string'\nimport { translate } from 'react-i18next'\n\nclass SideBar extends Component {\n\n constructor(props) {\n super(props);\n\n this.state = {\n currentlyExpanded: \"\"\n };\n\n }\n\n componentDidMount() {\n MENU.sidebar.forEach((entry) => {\n if (this.props.location.pathname.startsWith(entry.fullPath) && entry.fullPath.length > 1) {\n this.setState({ currentlyExpanded: entry.fullPath });\n }\n });\n }\n\n childIsActive = entry => this.props.location.pathname.startsWith(entry.fullPath) && this.props.location.pathname.length > entry.fullPath.length\n\n setHistory(path) {\n let dataParams = {};\n if (this.props.location.search) {\n let params = qs.parse(this.props.location.search);\n let found = false;\n if (params.dataSource) {\n dataParams.dataSource = params.dataSource;\n found = true;\n }\n if (params.timePeriod) {\n dataParams.timePeriod = params.timePeriod;\n found = true;\n }\n if (params.domain) {\n dataParams.domain = params.domain;\n found = true;\n }\n if (params.tid) {\n dataParams.tid = params.tid;\n found = true;\n }\n if (found) {\n path += \"?\" + qs.stringify(dataParams);\n }\n }\n this.props.history.push(path);\n }\n\n render = () => {\n const { t } = this.props;\n return (\n \n {MENU.sidebar.map((entry, index) => {\n if (entry.children && entry.children.length > 0) {\n return (\n {\n if (entry.fullPath === this.state.currentlyExpanded) {\n this.setState({ currentlyExpanded: \"\" });\n } else {\n this.setState({ currentlyExpanded: entry.fullPath });\n }\n }}\n key={index}\n id={t(entry.title)}\n >\n {entry.icon && (\n \n )}\n {t(entry.title)}\n \n {entry.fullPath === this.state.currentlyExpanded && \n (\n \n {entry.children.map((child, innerIndex) => (\n {\n this.setHistory(child.fullPath);\n e.stopPropagation();\n }}\n key={innerIndex}\n id={t(child.title)}\n >\n {t(child.title)}\n \n ))}\n \n )}\n \n );\n } else {\n return (\n {\n this.setHistory(entry.fullPath);\n }}\n key={index}\n id={t(entry.title)}\n >\n {entry.icon && }\n {t(entry.title)} \n \n );\n }\n })}\n \n );\n };\n}\n\nexport default translate()(SideBar);\n\n","import React, { Component } from 'react'\nimport { connect } from 'react-redux'\nimport { Dropdown, Grid, Icon, Input} from 'semantic-ui-react'\nimport { DATASOURCE } from 'Constants'\nimport qs from 'query-string'\nimport { translate } from 'react-i18next'\nimport { getApiData } from 'helpers/api'\n\nclass TenantFilter extends Component {\n constructor(props) {\n super(props);\n this.state = ({inputVal:\"\"});\n }\n\n params = qs.parse(this.props.location.search);\n\n addTidToParams = (tid) => {\n let newParam = null === tid || undefined === tid ? undefined : tid.toLowerCase();\n if (newParam !== this.params.tid) {\n this.params.tid = newParam;\n let myUrl = this.props.location.pathname.replace(this.props.location.search,'');\n this.props.history.push(myUrl + \"?\" + qs.stringify(this.params));\n }\n }\n\n doSearch = () => {\n let newParam = this.state.inputVal ? this.state.inputVal : undefined;\n if (newParam !== this.params.domain) {\n this.params.domain = newParam;\n let myUrl = this.props.location.pathname.replace(this.props.location.search,'');\n this.props.history.push(myUrl + \"?\" + qs.stringify(this.params));\n }\n }\n\n doSearchWrapper = e => {\n if (e.key === \"Enter\") {\n this.doSearch();\n e.preventDefault()\n e.stopPropagation()\n }\n }\n\n handleInputChange = e => {\n this.setState({inputVal: e.target.value });\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.location.search !== prevProps.location.search) {\n let p1 = qs.parse(this.props.location.search);\n let p2 = qs.parse(prevProps.location.search);\n if (p1.domain !== p2.domain && p1.domain !== \"\") {\n getApiData(DATASOURCE.TENANT_INFO, this.props.location.search);\n }\n }\n if (this.props.searchedCompany.name !== prevProps.searchedCompany.name) {\n this.addTidToParams(this.props.searchedCompany.stratusId);\n }\n }\n\n render() {\n const { t } = this.props;\n\n if (!this.props.hasAccess) {\n return null;\n }\n\n let userCompany = this.props.userCompany ? this.props.userCompany : t(\"TenantFilter.Mine\");\n let currentSelection = userCompany;\n if (this.params.tid) {\n if (this.props.searchedCompany.stratusId === this.params.tid) {\n currentSelection = this.props.searchedCompany.name;\n } else if (this.params.tid === \"all\") {\n currentSelection = t(\"TenantFilter.All\");\n }\n }\n\n return (\n \n  \n \n \n \n this.doSearch()}}\n onClick={(e) => {\n e.preventDefault()\n e.stopPropagation()\n }}\n onKeyDown={this.doSearchWrapper}\n onChange={this.handleInputChange}\n />\n \n {this.addTidToParams(null)}}\n />\n {this.addTidToParams(\"all\")}}\n />\n {this.props.searchedCompany.name && this.props.searchedCompany.stratusId ? \n (\n {this.addTidToParams(this.props.searchedCompany.stratusId)}}\n />\n ) : null\n }\n \n \n \n )\n }\n}\n\nconst mapToProps = state => {\n return {\n tenantId: state.userSession.tenantId,\n userCompany: state.tenantInfo.userCompany,\n loading: state.tenantInfo.loading,\n hasAccess: state.tenantInfo.hasAccess,\n searchedCompany: state.tenantInfo.searchedCompany\n }\n};\n\nexport default translate()(\n connect(\n mapToProps,\n null\n )(TenantFilter)\n);\n\n\n","import React, { Component } from 'react'\nimport { connect } from 'react-redux'\nimport { Dropdown, Grid, Icon} from 'semantic-ui-react'\nimport { TIMEPERIOD, DEFAULT_TIME_PERIOD } from 'Constants'\nimport qs from 'query-string'\nimport { translate } from 'react-i18next'\nimport TenantFilter from './TenantFilter'\n\nclass Selector extends Component {\n\n render() {\n const { t } = this.props;\n if (this.props.doRender) {\n let params = qs.parse(this.props.location.search);\n let timePeriod = DEFAULT_TIME_PERIOD;\n if (params) {\n if (params.timePeriod) {\n timePeriod = params.timePeriod.toUpperCase();\n }\n }\n\n return (\n \n \n  \n {\n return {\n value: key, \n text: t(TIMEPERIOD[key].TEXT),\n icon: TIMEPERIOD[key].ICON\n }\n })\n }\n value={ timePeriod }\n text={ t(TIMEPERIOD[timePeriod].TEXT) }\n onChange={(e, {value}) => {\n params.timePeriod = (value.toUpperCase() === DEFAULT_TIME_PERIOD) ? undefined : value.toLowerCase();\n let myUrl = this.props.location.pathname.replace(this.props.location.search,'');\n this.props.history.push(myUrl + \"?\" + qs.stringify(params));\n }} \n />\n \n \n \n );\n }\n return null;\n }\n}\n\nconst mapToProps = state => {\n return {\n tenantId: state.userSession.tenantId\n }\n};\n\nexport default translate()(\n connect(\n mapToProps,\n null\n )(Selector)\n);\n","import React, { Component } from 'react'\nimport { Header } from 'semantic-ui-react'\nimport { translate } from 'react-i18next'\n\nclass ViewTitle extends Component {\n\n render() {\n const { t } = this.props;\n if (this.props.title === null) {\n return null;\n }\n let myTitles = this.props.title.map(title => t(title));\n return (\n
{myTitles.join(t(\"Separators.vertical\"))}
\n );\n }\n}\n\nexport default translate()(ViewTitle);\n","import React from \"react\";\n\nimport { Dimmer, Loader } from \"semantic-ui-react\";\n\nimport { URL } from 'Constants'\nimport { logout } from 'helpers/api'\n\nclass Logout extends React.Component {\n componentDidMount() {\n logout().then(() => {\n console.log(\"Heading to orion to logout\");\n window.location = URL.ORIONLOGOUT;\n })\n .catch(error => {\n console.log(\"Logout call to [%s] failed: %O\",URL.AUTHLOGOUT,error);\n });\n }\n\n render() {\n return (\n \n \n \n );\n }\n}\n\nexport default Logout;\n","import React, { Component } from 'react'\nimport { connect } from 'react-redux'\nimport { translate } from 'react-i18next'\nimport { Accordion } from 'semantic-ui-react'\n\nclass AccordionContent extends Component {\n constructor(props) {\n super(props);\n this.state = {openKeys: {}};\n this.getPanelContent = this.getPanelContent.bind(this);\n this.handleTitleClick = this.handleTitleClick.bind(this);\n }\n\n handleTitleClick(key,itemProps) {\n const { active } = itemProps;\n let newKeyState = this.state.openKeys;\n newKeyState[key] = active ? -1 : 0;\n this.setState({openKeys: newKeyState});\n }\n\n getPanelContent(data, isOpen) {\n if (Object.keys(data).length === 0) {\n return (\n
\n

Not Applicable\n

\n
\n )\n } else {\n return (\n
\n {\n Object.keys(data).sort((a,b) => {\n return a.localeCompare(b, undefined, { sensitivity: 'base'})\n }).map((key,idx) => {\n let value = data[key];\n let myIsOpen = isOpen;\n if (this.state.openKeys.hasOwnProperty(key+idx)) {\n myIsOpen = this.state.openKeys[key+idx];\n } \n if (value === null) {\n return (\n

\n {key}: Not Applicable\n

\n );\n } else if (value.constructor === Object || Array.isArray(value)) {\n return (\n this.handleTitleClick(key+idx,itemProps)}\n />\n )\n }\n return (\n

\n {key}: {value.toString()}\n

\n );\n })\n }\n
\n );\n }\n }\n\n render() {\n const { t } = this.props;\n if (!this.props.callDetail || Object.keys(this.props.callDetail).length === 0) {\n return null;\n }\n return (\n
\n \n
\n )\n }\n}\n\n// REDUX STATE\nconst mapToProps = state => {\n return {\n // packetData: state.packetData.raw\n }\n};\n\nexport default translate()(\n connect(\n mapToProps,\n null\n )(AccordionContent)\n);\n","import React, { Component } from 'react'\nimport { connect } from 'react-redux'\nimport { translate } from 'react-i18next'\nimport qs from 'query-string'\nimport { Button, Icon } from 'semantic-ui-react'\nimport { getApiData, resetQuery } from 'helpers/api'\nimport { STAGE, DATASOURCE } from 'Constants'\nimport AccordionContent from './AccordionContent'\nimport CardWrapper from 'screens/common/CardWrapper'\nimport LineChart from 'components/LineChart'\n\nclass CallDetail extends Component {\n constructor(props) {\n super(props);\n let isData = \n this.props.packetData.length === 2 && \n (this.props.packetData[0].data.length > 0 || this.props.packetData[1].length > 0);\n this.state = {\n packetDataExists: isData,\n };\n }\n componentDidMount() {\n let querying = getApiData(DATASOURCE.DETAIL,this.props.location.search);\n if (querying) {\n resetQuery(DATASOURCE.PACKET_DATA_T, this.props.location.search);\n resetQuery(DATASOURCE.PACKET_DATA_S, this.props.location.search);\n resetQuery(DATASOURCE.LADDER, this.props.location.search);\n this.setState({packetDataExists:false});\n }\n }\n\n componentDidUpdate(prevProps) {\n if (!prevProps.callDetail.plcmTraceId && this.props.callDetail.plcmTraceId) {\n if (this.props.duration >= 120) {\n getApiData(this.props.isTeams ? DATASOURCE.PACKET_DATA_T : DATASOURCE.PACKET_DATA_S, this.props.location.search);\n }\n }\n if (prevProps.packetsLoading && !this.props.packetsLoading)\n {\n if (this.props.packetData.length === 2 && (this.props.packetData[0].data.length > 0 || this.props.packetData[1].length > 0)) {\n this.setState({packetDataExists: true});\n }\n }\n }\n\n returnToSender() {\n let myUrl = this.props.location.pathname.replace(\"/CallDetail\",'');\n myUrl.replace(this.props.location.search,'');\n let params = qs.parse(this.props.location.search);\n delete params[\"callId\"];\n this.props.history.push(myUrl + \"?\" + qs.stringify(params));\n }\n\n gotoLadder() {\n let myUrl = this.props.location.pathname.replace(this.props.location.search,'');\n myUrl = myUrl.replace(\"CallDetail\",\"CallLadder\");\n this.props.history.push(myUrl + this.props.location.search);\n }\n\n render() {\n const { t } = this.props;\n let callId = this.props.callDetail.plcmTraceId ? this.props.callDetail.plcmTraceId : \"Loading...\";\n return (\n
\n \n

Call Detail [{callId}]

\n \n {(this.state.packetDataExists || this.props.packetsLoading) &&\n \n \n \n }\n {!(this.state.packetDataExists || this.props.packetsLoading) &&\n

No packet loss data for this call

\n }\n {this.props.callDetail.startTime && STAGE === \"dev\" &&\n Date.now() - Date.parse(this.props.callDetail.startTime) < 30*24*60*60*1000 &&\n \n }\n
\n )\n }\n}\n\n// REDUX STATE\nconst mapToProps = state => {\n return {\n callDetail: state.callDetail.data,\n isTeams: state.callDetail.isTeams,\n duration: state.callDetail.duration,\n packetData: state.callDetail.isTeams ? state.packetDataT.data : state.packetDataS.data,\n packetsLoading: state.packetDataT.loading || state.packetDataS.loading\n }\n};\n\nexport default translate()(\n connect(\n mapToProps,\n null\n )(CallDetail)\n);\n","import React, { Component } from 'react' \n//import { translate } from 'react-i18next'\n//import * as scale from 'd3-scale'\n//import * as shape from 'd3-shape'\n//import * as d3Array from 'd3-array' \nimport {Button, Icon, Dimmer, Loader } from 'semantic-ui-react'\nimport { select } from 'd3-selection'\nimport './LadderChart.css'\n\nclass LadderChart extends Component {\n topMargin = 50;\n bottomMargin = 50;\n padLeft = 100;\n padRight = 100;\n ySpacing = 50;\n \n\n constructor(props) {\n super(props);\n this.state = {\n dataBoxText: \"\",\n dataBoxIdx: -1\n }\n this.createChart = this.createChart.bind(this);\n }\n\n componentDidMount() {\n this.createChart();\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.loading && !this.props.loading) {\n this.createChart();\n }\n }\n\n getJsMonth(m) {\n switch(m) {\n case 0: return \"Jan\";\n case 1: return \"Feb\";\n case 2: return \"Mar\";\n case 3: return \"Apr\";\n case 4: return \"May\";\n case 5: return \"Jun\";\n case 6: return \"Jul\";\n case 7: return \"Aug\";\n case 8: return \"Sep\";\n case 9: return \"Oct \";\n case 10: return \"Nov\";\n case 11: return \"Dec\";\n default: return \"XXX\";\n }\n }\n\n createChart() {\n // TODO need to handle replace\n const chartRef = select(this.chartRef);\n var reactSelf = this;\n const highlightColor = \"#00f\";\n const nonHighlightColor = \"#000\";\n let padLeft = this.padLeft;\n let padRight = this.padRight;\n // there is probably a nice way to do this with selects, but going procedural for now\n // let g = chartRef.append('g');\n // gather IPs\n let nodeKeys = {};\n let nodes = [];\n this.props.data.forEach(datum => {\n if (!nodeKeys.hasOwnProperty(datum.src_ip)) {\n nodeKeys[datum.src_ip] = nodes.push(datum.src_ip)-1;\n }\n if (!nodeKeys.hasOwnProperty(datum.dst_ip)) {\n nodeKeys[datum.dst_ip] = nodes.push(datum.dst_ip)-1;\n }\n });\n \n if (nodes.length === 0) {\n return;\n }\n let topMargin = this.topMargin;\n let xSpacing = (this.props.width - padLeft - padRight)/(nodes.length-1);\n let ySpacing = this.ySpacing;\n let yBottom = this.props.data.length*this.ySpacing + this.topMargin + this.bottomMargin;\n nodes.forEach((node,ii) => {\n let xPoint = padLeft + xSpacing*ii;\n // add the vertical node lines\n chartRef.append(\"line\")\n .style(\"stroke\", \"#333\")\n .attr(\"x1\",xPoint)\n .attr(\"x2\",xPoint)\n .attr(\"y1\",topMargin)\n .attr(\"y2\",yBottom);\n // add the node \"boxes\" for the labels\n // guaranteed to get messy with ipv6 ... TODO fix that\n chartRef.append(\"g\")\n .attr(\"transform\", \"translate(\" + xPoint + \",\" + topMargin + \")\")\n .attr(\"class\", \"class-rect\")\n .append(\"rect\")\n .attr(\"x\",\"-5em\")\n .attr(\"y\",\"-2em\")\n .attr(\"width\",\"10em\")\n .attr(\"height\",\"2em\")\n // add the node labels\n chartRef.append(\"g\")\n .attr(\"transform\", \"translate(\" + xPoint + \",\" + topMargin + \")\")\n .append(\"text\")\n .attr(\"class\", \"class-label\")\n .attr(\"text-anchor\", \"middle\")\n .text(function(d) { return node })\n .attr(\"dy\",\"-.66em\")\n });\n this.props.data.forEach((datum,idx) => {\n let x1 = padLeft + nodeKeys[datum.src_ip]*xSpacing;\n let x2 = padLeft + nodeKeys[datum.dst_ip]*xSpacing;\n let y = (idx+1)*ySpacing + topMargin;\n let centerLoc = x2 + (x1= 0) {\n chartRef.selectAll(\".datum\" + myIdx)\n .style(\"fill\", nonHighlightColor);\n }\n reactSelf.setState({dataBoxText:datum.body,dataBoxIdx:idx});\n chartRef.selectAll(\".datum\"+idx)\n .style(\"fill\", highlightColor);\n })\n .append(\"svg:title\")\n .text(function(d) { return datum.body });\n // add the message lines and direction\n chartRef.append(\"line\")\n .style(\"stroke\", \"#000\")\n .attr(\"x1\",x1)\n .attr(\"x2\",x2)\n .attr(\"y1\",y)\n .attr(\"y2\",y)\n .attr(\"marker-end\",\"url(#end)\");\n // add the message timestamps\n chartRef.append(\"g\")\n .attr(\"transform\", \"translate(\" + 0 + \",\" + y + \")\")\n .attr(\"class\", \"first\")\n .attr(\"text-anchor\", \"begin\")\n .append(\"text\")\n .style(\"font-size\", \"0.8em\")\n .attr(\"class\",\"datum\"+idx)\n .text(function(d) {\n let date = new Date(datum.mssep);\n let s = \"\";\n s = date.getUTCHours() + \":\" + date.getUTCMinutes() + \":\" + \n date.getUTCSeconds() + \".\" + date.getMilliseconds() + \"Z\";\n return s;\n })\n .append(\"svg:title\")\n .text(function(d) { return datum.body });\n // message labels\n chartRef.append(\"g\")\n .attr(\"transform\", \"translate(\" + centerLoc + \",\" + y + \")\")\n .append(\"text\")\n .attr(\"dy\",\"-0.5em\")\n .attr(\"text-anchor\",\"middle\")\n .attr(\"class\",\"datum\"+idx)\n .text(function (d) { return datum.msgType })\n .on(\"click\", function(d) {\n let myIdx = reactSelf.state.dataBoxIdx;\n if (myIdx >= 0) {\n chartRef.selectAll(\".datum\" + myIdx)\n .style(\"fill\", nonHighlightColor);\n }\n reactSelf.setState({dataBoxText:datum.body,dataBoxIdx:idx});\n chartRef.selectAll(\".datum\"+idx)\n .style(\"fill\", highlightColor);\n })\n .append(\"svg:title\")\n .text(function(d) { return datum.body });\n });\n\n // add the message arrows ... done here to use \"end\" on the final side of the line\n chartRef.append(\"svg:defs\").selectAll(\"marker\")\n .data([\"end\"]) \n .enter().append(\"svg:marker\")\n .attr(\"id\", String)\n .attr(\"viewBox\", \"0 -5 10 10\")\n .attr(\"refX\", 10)\n .attr(\"refY\", 0)\n .attr(\"markerWidth\", 10)\n .attr(\"markerHeight\", 10)\n .attr(\"orient\", \"auto\")\n .append(\"svg:path\")\n .attr(\"d\", \"M0,-5L10,0L0,5\");\n }\n\n render() {\n const chartRef = select(this.chartRef); \n return (\n
\n {this.state.dataBoxIdx >= 0 &&\n
\n
\n Message Content\n
\n\n {this.state.dataBoxText}\n
\n }\n this.chartRef = chartRef}\n width={this.props.width}\n height={this.props.data.length*this.ySpacing + this.topMargin + this.bottomMargin}>\n \n \n \n \n
\n )\n }\n}\n\nexport default LadderChart;\n","import React, { Component } from 'react'\nimport { connect } from 'react-redux'\nimport { translate } from 'react-i18next'\nimport { getApiData } from 'helpers/api'\nimport { DATASOURCE } from 'Constants'\nimport { Button, Icon } from 'semantic-ui-react'\nimport LadderChart from 'components/LadderChart'\n\nclass CallLadder extends Component {\n\n constructor(props) {\n super(props);\n this.getData = this.getData.bind(this);\n this.state = {noData: false};\n }\n\n componentDidMount() {\n if (this.props.callDetail.startTime)\n {\n if (this.props.ladderStore.data.length === 0) {\n this.getData();\n }\n } else {\n getApiData(DATASOURCE.DETAIL,this.props.location.search);\n }\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.callDetail.startTime !== this.props.callDetail.startTime) {\n this.getData();\n }\n if (prevProps.ladderStore.loading && !this.props.ladderStore.loading && this.props.ladderStore.data.length === 0) {\n this.setState({noData: true});\n }\n }\n\n getData() {\n let region = \"SCUS\";\n if (this.props.callDetail.startTime && \n this.props.callDetail.protocol && this.props.callDetail.region)\n {\n switch(this.props.callDetail.region) {\n case \"southcentralus\": region = \"SCUS\"; break;\n case \"westeurope\": region = \"WEU\"; break;\n case \"australiasoutheast\": region=\"AUSE\"; break;\n case \"westus2\": \n default: region = \"WUS2\"; break;\n }\n let endDate = this.props.callDetail.endTime;\n if (!endDate) {\n let endms = (new Date()).getTime();\n endDate = new Date(endms + 5*60000).toISOString();\n } else {\n let endms = Date.parse(endDate);\n endDate = new Date(endms + 5*60000).toISOString();\n }\n let startms = Date.parse(this.props.callDetail.startTime);\n let startDate = new Date(startms - 5*60000).toISOString();\n if (!getApiData(DATASOURCE.LADDER,\"\",{\n \"callId\":this.props.callDetail.plcmTraceId,\n \"type\":this.props.callDetail.protocol,\n \"startDate\":startDate,\n \"endDate\":endDate,\n \"region\":region\n }) && this.props.ladderStore.data.length === 0)\n {\n this.setState({noData: true});\n }\n }\n }\n\n returnToSender() {\n let myUrl = this.props.location.pathname.replace(\"/CallLadder\",'/CallDetail');\n this.props.history.push(myUrl + this.props.location.search);\n }\n\n render() {\n return (\n
\n \n

Call Ladder [{this.props.callDetail.plcmTraceId}]

\n {this.state.noData && \n

No data for this call. Very recent calls and calls older than 30 days may not be in the records.

\n }\n \n
\n )\n }\n}\n\n//REDUX STATE\nconst mapToProps = state => {\n return {\n ladderStore: state.ladder,\n callDetail: state.callDetail.data,\n detailLoading: state.callDetail.loading\n }\n}\n\nexport default translate()(\n connect(\n mapToProps,\n null\n )(CallLadder)\n);\n","import React, { Component } from 'react'\nimport Error from 'auth/Error'\nimport { Event } from 'components/Event'\n\nclass ErrorCatcher extends Component {\n constructor(props) {\n super(props);\n this.state = {\n isError: false\n };\n }\n \n componentDidCatch(error, info) {\n console.log(\"WOAH!!!\");\n Event(\"ERROR\",true,error.toString() + \":::\" + info.toString());\n this.setState({isError: true});\n }\n\n render() {\n if (this.state.isError) {\n return (\n \n );\n }\n return this.props.children;\n }\n}\n\nexport default ErrorCatcher;\n\nexport const ErrorWrapper = WrappedComponent => props => (\n \n \n \n);\n","import React, { Component } from 'react'\nimport { Route, Switch } from 'react-router-dom'\nimport HeaderBar from 'screens/HeaderBar'\nimport Footer from 'screens/Footer'\nimport SideBar from 'screens/SideBar'\nimport Selector from 'screens/Selector'\nimport ViewTitle from 'screens/ViewTitle'\nimport { URLMap } from 'Menu'\nimport Logout from 'auth/Logout'\nimport CallDetail from 'screens/calls/list/CallDetail'\nimport CallLadder from 'screens/calls/list/Ladder'\nimport Drilldown from 'highcharts/modules/drilldown'\nimport Highcharts from 'highcharts'\nimport { translate } from 'react-i18next'\nimport { Segment, Sidebar, Responsive } from 'semantic-ui-react'\nimport { ErrorWrapper } from 'components/ErrorCatcher'\nimport { STAGE } from 'Constants'\n\nclass MainPage extends Component {\n\n // initialize the highcharts modules in a single location and get data period set\n constructor(props) {\n super(props);\n\n this.state = {\n menuOpen: window.innerWidth > 1080,\n currentWidth: window.innerWidth\n };\n\n Drilldown(Highcharts);\n }\n\n handleHideClick = () => {\n this.setState({menuOpen: false});\n };\n\n handleShowClick = () => {\n this.setState({menuOpen: true});\n };\n\n windowResized = (event, data) => {\n if (data.width <= 1080 && this.state.currentWidth > 1080 && this.state.menuOpen) {\n this.handleHideClick();\n } else if (data.width > 1080 && this.state.currentWidth <= 1080 && !this.state.menuOpen) {\n this.handleShowClick();\n }\n this.setState({currentWidth: data.width});\n };\n\n // Render\n render() {\n let myPath = this.props.location.pathname.replace(this.props.location.search,'');\n let toggleMenu = this.state.menuOpen ? this.handleHideClick : this.handleShowClick;\n\n return (\n
\n \n \n \n \n\n \n \n
\n \n \n\n \n \n { STAGE === \"dev\" && \n \n }\n \n {Object.values(URLMap).map((entry, index) => {\n return (\n )\n })}\n \n
\n
\n \n \n \n
\n );\n }\n}\n\nexport default translate()(MainPage);\n","import React from 'react'\nimport ReactDOM from 'react-dom'\nimport { Route } from 'react-router-dom'\nimport { ConnectedRouter } from 'connected-react-router'\nimport { Provider } from 'react-redux'\nimport { store, history } from 'store/store'\nimport { I18nextProvider } from \"react-i18next\"\nimport i18n from \"./i18n\"\nimport Initializer from \"screens/Initializer\"\nimport MainPage from 'screens/MainPage'\nimport ErrorCatcher from 'components/ErrorCatcher'\n\nconsole.log(`${process.env.REACT_APP_NAME} version ${process.env.REACT_APP_VERSION}`)\n\n\nconst target = document.querySelector('#root')\n\nReactDOM.render(\n \n \n \n (\n \n \n \n \n \n )}\n />\n \n \n ,\n target\n)\n"],"sourceRoot":""}