{"version":3,"sources":["webpack:///./app/components/AccountSelector/index.js","webpack:///./app/components/DateRangePicker/index.js","webpack:///./app/components/GaugeWidget/gauge.min.js","webpack:///./app/containers/SolutionCenter/constants.js","webpack:///./app/containers/SolutionCenterCards/reducer.js","webpack:///./app/containers/SolutionCenter/actions.js","webpack:///./app/containers/SolutionCenter/selectors.js","webpack:///./app/containers/SolutionCenterCards/selectors.js","webpack:///./app/containers/SolutionCenterCards/SolutionCenterTabs.js","webpack:///./app/containers/SolutionCenterCards/messages.js","webpack:///./app/containers/SolutionCenterCards/ModalAddSolutionCard.js","webpack:///./app/containers/SolutionCenterCards/constants.js","webpack:///./app/containers/SolutionCenterCards/index.js","webpack:///./app/containers/WidgetModal/selectors.js","webpack:///./app/containers/WidgetModal/reducer.js","webpack:///./app/containers/WidgetModal/constants.js","webpack:///./app/containers/WidgetModal/messages.js","webpack:///./app/containers/WidgetModal/actions.js","webpack:///./app/containers/WidgetModal/sagas.js","webpack:///./app/components/RatioWidget/index.js","webpack:///./app/containers/WidgetModal/PreviewContainer.js","webpack:///./app/containers/WidgetModal/RatioConfig.js","webpack:///./app/components/ColorPicker/messages.js","webpack:///./app/components/ColorPicker/index.js","webpack:///./app/containers/WidgetModal/BigCountConfig.js","webpack:///./app/components/GaugeWidget/Gauge.js","webpack:///./app/components/GaugeWidget/index.js","webpack:///./app/containers/WidgetModal/GaugeConfig.js","webpack:///./app/containers/WidgetModal/RegionsWidgetConfig.js","webpack:///./app/containers/WidgetModal/TableConfig.js","webpack:///./app/components/ListWidget/index.js","webpack:///./app/containers/WidgetModal/ListWidgetConfig.js","webpack:///./app/components/Chart/SizedChart.js","webpack:///./app/components/Chart/index.js","webpack:///./app/components/PieChartWidget/index.js","webpack:///./app/containers/WidgetModal/PieChartWidgetConfig.js","webpack:///./app/components/BarChartWidget/index.js","webpack:///./app/containers/WidgetModal/BarChartWidgetConfig.js","webpack:///./app/containers/WidgetModal/AdvMapWidgetConfig.js","webpack:///./app/components/AlertWidget/messages.js","webpack:///./app/components/AlertWidget/SingleAlert.js","webpack:///./app/components/AlertWidget/index.js","webpack:///./app/containers/WidgetModal/AlertWidgetConfig.js","webpack:///./app/containers/WidgetModal/WidgetModalErrorBoundary.js","webpack:///./app/containers/WidgetModal/WidgetType.js","webpack:///./app/containers/WidgetModal/WidgetTypePicker.js","webpack:///./app/components/SparkWidget/messages.js","webpack:///./app/components/SparkWidget/index.js","webpack:///./app/containers/WidgetModal/SparkWidgetConfig.js","webpack:///./app/components/ComplianceWidget/messages.js","webpack:///./app/components/ComplianceWidget/index.js","webpack:///./app/containers/WidgetModal/ComplianceWidgetConfig.js","webpack:///./app/containers/WidgetModal/TextWidgetConfig.js","webpack:///./app/containers/WidgetModal/index.js","webpack:///./app/containers/SolutionCenterWidgets/reducer.js","webpack:///./app/containers/SolutionCenterWidgets/selectors.js","webpack:///./app/components/RegionsWidget/messages.js","webpack:///./app/components/RegionsWidget/RegionsMap.js","webpack:///./app/components/RegionsWidget/index.js","webpack:///./app/components/ArcMapWidget/ArcMap.js","webpack:///./app/components/ArcMapWidget/index.js","webpack:///./app/components/TextWidget/index.js","webpack:///./app/containers/SolutionCenterWidgets/messages.js","webpack:///./app/containers/SolutionCenterWidgets/WidgetErrorBoundry.js","webpack:///./app/containers/SolutionCenterWidgets/Widget.js","webpack:///./app/containers/SolutionCenterWidgets/index.js","webpack:///./app/components/FilterPanel/Filter.js","webpack:///./app/components/FilterPanel/TypeaheadFilter.js","webpack:///./app/components/FilterPanel/index.js","webpack:///./app/containers/SolutionCenterFilterPanel/constants.js","webpack:///./app/containers/SolutionCenterFilterPanel/reducer.js","webpack:///./app/containers/SolutionCenterFilterPanel/messages.js","webpack:///./app/containers/SolutionCenterFilterPanel/actions.js","webpack:///./app/containers/SolutionCenterFilterPanel/selectors.js","webpack:///./app/containers/SolutionCenterFilterPanel/index.js","webpack:///./app/containers/SolutionCenterCardActions/messages.js","webpack:///./app/containers/SolutionCenterCardActions/ModalRenameSC.js","webpack:///./app/containers/SolutionCenterCardActions/ModalConfirmDelete.js","webpack:///./app/containers/SolutionCenterCardActions/ModalHiddenSCManager.js","webpack:///./app/containers/SolutionCenterCardActions/ModalCopySC.js","webpack:///./app/containers/SolutionCenterCardActions/CardActionsMenu.js","webpack:///./app/containers/SolutionCenterCardActions/index.js","webpack:///./app/containers/SolutionCenter/reducer.js","webpack:///./app/containers/SolutionCenter/queries.js","webpack:///./app/containers/SolutionCenter/sagas.js","webpack:///./app/containers/SolutionCenter/messages.js","webpack:///./app/containers/SolutionCenter/SolutionCenterToolbar.js","webpack:///./app/containers/SolutionCenter/SolutionCenterErrorBoundry.js","webpack:///./app/containers/SolutionCenter/SolutionCenterFilterStatus.js","webpack:///./app/containers/SolutionCenter/index.js"],"names":["triggerAsyncLimit","asyncSlice","AccountSelector","props","id","accounts","find","a","get","endsWith","Map","toJS","account","friendlyName","name","getAccountIdFromAccountSrn","srn","accountId","getAccountForAccountId","toLowerCase","hasTooltip","accountSrn","hasAccountNumber","inputValue","data","lower","label","includes","value","selectedOptions","onChange","map","opt","callback","getAccountDisplayName","filter","i","slice","sort","b","localeCompare","size","state","enableAsync","accountOptions","this","cacheOptions","loadOptions","defaultOptions","isLoading","isEmpty","options","getOptionLabel","option","getAccountBadge","isClearable","creatable","styles","isMulti","isDisabled","disabled","getOptionValue","filterOption","getNewOptionData","React","Component","defaultProps","DateRangePicker","startDate","endDate","formattedStartDate","format","FILTER_DATE_FORMAT","formattedEndDate","setState","moment","focusedInput","oldProps","style","padding","display","alignItems","justifyContent","noBorder","startDateId","endDateId","onFocusChange","onDatesChange","isOutsideRange","date","isAfter","endOf","displayFormat","AnimatedText","BaseDonut","BaseGauge","Donut","Gauge","GaugePointer","TextRenderer","ValueUpdater","addCommas","cutHex","formatNumber","mergeObjects","secondsToString","hasProp","hasOwnProperty","extend","child","parent","key","call","ctor","constructor","prototype","__super__","browserRequestAnimationFrame","isCancelled","j","lastId","len","vendor","vendors","length","window","requestAnimationFrame","cancelAnimationFrame","element","myId","currTime","lastTime","timeToCall","Date","getTime","Math","max","setTimeout","clearTimeout","sec","hr","min","floor","digits","num","arguments","toFixed","obj1","obj2","out","val","nStr","rgx","x","x1","x2","split","test","replace","charAt","substring","superClass","apply","displayScale","forceUpdate","setTextField","textField","fractionDigits","setMinValue","minValue","updateStartValue","gauge","ref","results","displayedValue","gp","push","setOptions","el","fontSize","angle","configDisplayScale","backingStorePixelRatio","devicePixelRatio","height","prevDisplayScale","width","highDpiSupport","ctx","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","canvas","G__width","G__height","parseValue","parseFloat","Number","isFinite","addToAnimationQueue","clear","AnimationUpdater","add","animationSpeed","update","force","diff","clearRect","abs","render","fractionDigits1","innerHTML","elem1","text","elem","Error","setVal","textVal","gauge1","onmouseenter","setHovered","onmouseleave","hovered","strokeWidth","color","iconPath","iconScale","iconAngle","img","hoverValue","radius","radiusScale","maxValue","Image","src","endX","endY","imgX","imgY","startX","startY","y","getAngle","round","cos","sin","PI","beginPath","fillStyle","hoveredColor","arc","fill","moveTo","lineTo","save","translate","rotate","drawImage","restore","font","textWidth","measureText","textX","textY","shadowColor","shadowBlur","shadowOffsetY","lineWidth","strokeStyle","valueCircleColor","stroke","valueColor","fillText","Bar","updateValues","arrValues","avgValue","avgPercent","valPercent","$","css","h","w","percentColors","G_vmlCanvasManager","initElement","getContext","clientHeight","clientWidth","displayedAngle","paddingTop","paddingBottom","colorStart","colorStop","gradientType","strokeColor","pointer","limitMax","limitMin","phi","configPercentColors","extraPadding","availableHeight","bval","gval","rval","Array","parseInt","pct","r","g","set","k","l","ref1","run","getColorForPercentage","grad","endColor","rangePct","startColor","join","getColorForValue","renderStaticLabels","staticLabels","fontsize","match","re","rest","rotationAngle","textBaseline","textAlign","labels","renderTicks","ticksOptions","currentDivision","currentSubDivision","divColor","divLength","divWidth","divisionCount","range","rangeDivisions","scaleMutate","subColor","subDivisions","subLength","subWidth","subdivisionCount","t","tmpRadius","divisions","results1","len1","zone","lineCap","staticZones","offset","customFillStyle","generateGradient","createRadialGradient","createLinearGradient","addColorStop","grdFill","strokeGradient","start","stop","grd","_orgStrokeColor","elements","animId","addAll","list","object","finished","define","amd","module","exports","GET_SOLUTION_CARDS","ADD_SC_WIDGET","REMOVE_SC_WIDGET","HANDLE_SC_ADD","DELETE_SOLUTION_CARD","UPDATE_WIDGET","SET_WIDGET_OPTIONS","SAVE_LAYOUT","ADD_WIDGET_SUCCESS","UPDATE_EDIT_WIDGET","UPDATE_SOLUTION_CARD","START_UPDATE_SC_POLL","STOP_UPDATE_SC_POLL","COPY_SOLUTION_CARD","initialState","fromJS","savingLayout","addingSolutionCard","hasUnsavedChanges","lastSaved","savingScEdits","solutionCenterCardsReducer","handleActions","updateWidget","createAction","cardId","widget","setWidgetOptions","widgetId","deleteSolutionCard","handleTabSeqChange","type","index","oldIndex","newIndex","handleSCAdd","loadSolutionCards","cards","addSCWidget","card","toggleSCWidgetStatic","removeSCWidget","saveLayout","saveLayoutSuccess","removeWidgetSuccess","addSolutionCardSuccess","deleteSolutionCardSuccess","addWidgetSuccess","updateEditWidget","updateWidgetSuccess","updateSolutionCard","updateSolutionCardSuccess","startUpdateScPoll","stopUpdateScPoll","setShowCreateWidgetModal","copySolutionCard","copySolutionCardSuccess","selectSolutionCenterDomain","selectCards","createSelector","solutionCenter","List","selectShowCreateWidgetModal","selectIsScCopySaving","selectSolutionCenterCardsDomain","selectAddingSolutionCard","selectHasUnsavedChanges","selectSavingScEdits","selectSavingLayout","selectSortedCards","selectUserProfile","userProfile","hiddenCards","visibleCards","filterNot","sortCards","selectSelectedCardIndex","search","getIn","qs","parse","tabId","cardIndex","findIndex","selectSelectedCard","selectSelectedCardName","SolutionCenterTabs","solutionCards","selectedSolutionCard","setSolutionCard","TabBar","changeTab","handleChangeTab","activeTab","selectedCardIndex","tabs","getTabs","showModal","showArrow","ImmutablePureComponent","propTypes","ImmutablePropTypes","mapStateToProps","createStructuredSelector","withConnect","connect","dispatch","bindActionCreators","compose","defineMessages","header","defaultMessage","nameLabel","titlePlaceholder","titlePlaceholderErr","createButton","cancelButton","noDup","Icon","fa","spin","ModalAddSolutionCard","title","showMessage","description","e","target","sortedCardNames","sortedCards","toggle","Modal","isOpen","ModalHeader","messages","ModalBody","FormLabel","for","required","Input","placeholder","intl","formatMessage","setTitle","onKeyUp","handleReturn","keyCode","ModalFooter","TextLink","onClick","Button","margin","injectIntl","TOOLBAR_HEIGHT","IHelp","help","position","helpKey","SolutionCenterCards","toolbar","background","borderBottom","gridTemplateColumns","gridTemplateAreas","gridArea","actions","toolbarButton","showAddSCModal","currentState","selectedSolutionCardId","stringify","toggleAddSCModal","className","top","left","right","bottom","WithPermission","permissionName","resourceId","org","BorderlessButton","withReducer","injectReducer","reducer","withRouter","selectWidgetModalDomain","selectWidgetType","selectWidgetTitle","selectWidgetSubTitle","selectWidgetSize","selectWidgetSelector","selectWidgetResultLayout","selectWidgetOptions","selectSearchCardsBySearchId","selectSavedSearches","savedSearches","toList","selectPreviewWidget","widgetFormatter","widgetResultLayout","indexedSearches","searchCards","widgetOptions","widgetSelector","widgetSize","widgetSubTitle","widgetTitle","widgetType","sonraiSearches","previewWidget","WidgetModalReducer","payload","widgetIndex","searchId","savedSearch","field","setIn","deleteIn","mergeIn","input","updateHeader","widgetPreview","clearWidgetModal","setWidgetSavedSearch","searches","setWidgetSonraiSearch","setWidgetSearchField","setWidgetTitle","setWidgetSubTitle","setWidgetType","setWidgetSelector","setWidgetFormatter","setWidgetSize","loadWidget","togglePreviewWidget","mySaga","numerator","fontWeight","denominator","number","percentNumber","averageNumber","percentSign","searchLink","cursor","RatioWidget","numQueryConfig","getQueryConfig","denomQueryConfig","combineQueries","hasSonraiSearch","gqlStatement","getBareSearchQueryString","getSavedQuery","searchIndex","getQueryBuilder","resultLayout","fields","getFields","queryBuilder","countsOnly","rootField","statement","variables","getVariables","queryString","buildPivotableSourceForField","undefined","selectFromSonraiSearchData","selectFromSavedSearchData","_","Object","keys","Query","searchCard","getSearchCard","path","getSelection","layout","numDigitsAdjusted","toString","numSize","denomSize","maxDigitsPerWidth","denom","onclick","sonraionclick","hasOnclick","onClickSearch","savedSearchId","sonraiSearchName","searchTitle","fontSizes","getFontSizes","getNumSearchName","getDenomSearchName","numChars","percent","getFontSize","avg","denomSelection","getSelectionPath","numSelection","displayType","getPercentNumber","getAverageNumber","getRatioNumber","searchObj","uiSearch","advancedSearch","getSearchIdForSonraiSearches","getSearchId","queryConfig","getQuery","WidgetCard","loading","allowDelete","allowUpdate","onRemove","onEdit","filtered","queryHasPivotFilter","query","gql","notifyOnNetworkStatusChange","pollInterval","context","queryName","snakeCase","JSON","error","refetch","networkStatus","createdBy","disableToolbar","toggleStatic","static","Card","overflow","overflowX","getNumber","getTitleFontSize","getTitleSearchName","previewContainer","flexDirection","backgroundColor","borderRadius","previewTitle","marginBottom","PreviewContainer","children","wrapperWithPreview","gridColumnGap","RatioConfig","hasNumSonraiSearch","widgetSonraiSearches","hasNumSavedSearch","widgetSavedSearches","widgetSearchCards","hasDenomSonraiSearch","hasValidNumSearch","hasValidDenomSearch","hasTitle","valid","setValidity","string","selectedOption","updateValidity","denominatorSearchId","denominatorField","numeratorSearchId","numeratorField","onclickSearchId","sonraiOnclickSearch","numeratorSonraiSearchName","denomSonraiSearchName","denomSearchFieldsList","numSearchFieldsList","minWidth","maxHeight","fontStyle","setDescription","updateDisplayType","CombinedSearches","savedSonraiSearches","setSonraiSearch","setSonraiSearchNum","selectedSonraiValue","selectedSearchId","selectSavedSearch","setNumeratorSearch","savedSearchDisabled","selectedFieldId","searchFieldDisabled","selectSearchField","setNumeratorField","setSonraiSearchDenom","setDenominatorSearch","setDenominatorField","setOnclickSearch","setSonraiOnclickSearch","noColor","colorPreview","border","marginRight","colorContainer","ColorPicker","onPickColor","hex","showColorPicker","newVisibility","uuid","Popover","onToggle","onPopoverToggle","noColorMessage","onChangeComplete","colors","theme","chartColors","triangle","default","boxShadow","themeable","sectionTitle","addThresholdButton","addThresholdIcon","cancelAddThreshold","marginLeft","newThresholdWrapper","newcolorWrapper","thresholdButton","outline","bigCountPreview","config","Label","info","infoMsg","BigCountConfig","showAddThreshold","startOfThreshold","endOfThreshold","newThresholdColor","operatorSign","operatorVal","boundary","bigcountsearch","hasSavedSearch","thresholds","splice","event","BOUNDARY_OPTIONS","GREATER","end","resetAddThreshold","Table","threshold","removeMarker","handleRangeButton","handleBoundaryButton","handleStartOfThreshold","handleEndOfThreshold","marginTop","handleSelect","LESS","EQUAL","handleOpperator","addThreshold","BigStatWidget","savedSearchField","searchFieldsList","renderPreview","searchFieldRequired","renderThresholdsConfig","renderNewThresholdConfig","toggleAddThreshold","GaugeComponent","Promise","resolve","wait","canvasRef","current","opts","primary","secondary","markers","marker","tipLabel","createRef","waitForRef","then","drawGauge","newProps","isEqual","GaugeWidget","total","configuredMarkers","slices","percentValue","getPercentValue","getMarkers","data-sonrai-id","cancelAddSlice","container","addSliceButton","addSliceIcon","configs","addMarkerContainer","markerInput","maxWidth","GaugeConfig","sliceId","newColor","striped","editSliceColor","bind","newSliceMarker","newSliceColor","resetAddSlice","showAddSlice","intValue","Form","setNewSliceMarker","addMarker","editMode","checkBoxValue","renderSlicesConfig","renderAddNewSlice","toggleAddSlice","RegionsWidgetConfig","setSubTitle","href","SUPPORT_EMAIL","REGION_MAP_SEARCH_NAME","setSavedSearch","TableConfig","table","setSearchField","searchFieldLabel","containerStyle","listContainer","listItem","listStyleType","listNumber","noitems","EmptyWidgetResults","ListWidget","numberOfItems","exists","items","item","onMouseEnter","setHover","onMouseLeave","handleOnClick","transition","hoveredId","emphasis","newId","onClickNodeView","getTypeFromSrn","getSonraiSearchQuery","getTableSavedSearchQuery","limit","selection","savedSearchResults","property","properties","getDataFromSonraiSearch","searchData","getSonraiSearchData","getWidgetResultsExplorerSavedSearchQuery","values","getData","getSearchName","handleOnClickSearch","renderListItems","SelectBar","ListWidgetConfig","hasDisplayField","selectedValue","QueryBuilder","types","queryTypes","getSonraiSearchQueryString","getSearchQuery","getSampleItemFromData","setListField","setNumberOfItems","renderPropertyDropDown","PIE_LEGEND_HEIGHT","SizedChart","legendColor","legendEntry","wordBreak","uniq","yValues","maxYValue","yaxis","tickAmount","chart","show","animations","enabled","events","mounted","onChartReady","beforeMount","apexChartInstance","dataPointSelection","onClickPoint","yLabels","dataPointIndex","dataLabels","xaxis","categories","getPieBarChartColors","legend","states","active","plotOptions","bar","distributed","radialBar","offsetX","offsetY","startAngle","endAngle","track","gradient","shade","gradientToColors","stops","zoom","xLabels","hover","grid","clipMarkers","lines","curve","subtract","axisBorder","tooltip","axisTicks","minY","maxY","pointsAreTheSame","fixed","formatter","seriesName","getSparkOptions","getRadialBarOptions","getBarPieOptions","getOptionsForType","merge","stripTags","yTitle","series","toggleSeriesOnHover","colorForEntityString","typeColors","Scrollable","noShadow","rel","onMouseMove","onHoverLegend","onMouseOut","chartHeight","hasCustomLegend","minHeight","chartWrapperStyle","getOptions","getSeries","getType","renderScrollableLegend","Chart","PieChartWidget","pie","getGroupedSavedSearchQuery","params","clickedLabel","targetSliceValue","savedSearchFilterCardId","flattened","flattenData","counts","forEach","countKeys","orderBy","count","noAnimate","PieChartWidgetConfig","BarChartWidget","bars","BarChartWidgetConfig","AdvMapWidgetConfig","advmapsearch","validSavedSearches","locations","has","ARC_MAP_SEARCH_NAME","findings","noData","SingleAlert","alertContainer","numberContainer","borderBottomLeftRadius","borderTopLeftRadius","getAlertColors","level","alertCount","lineHeight","secondaryContainer","policyName","alignSelf","policyText","whiteSpace","textOverflow","iconCont","time","onClickAlert","SonraiCountDisplay","alertsMainContainer","AlertWidget","policy","alertingLevel","ALERT_LEVELS","INFO","WARN","ERROR","PolicyEvalLogs","logs","pass","policyId","controlPolicy","unix","fromNow","setLevel","alerts","alert","CONTROL_FRAMEWORKS","ALL_CONTROL_FRAMEWORKS","renderHeader","renderAlerts","Radium","alertPreview","placeholderData","guidGen","random","AlertWidgetConfig","hasControlFrameWork","handleSuggestedTitle","getSuggestedTitle","enabledControlFrameworks","controlGroupOptions","cf","sortBy","autoSort","handleSelectControlFrameWork","WidgetModalErrorBoundary","console","log","json","hasError","errorMessage","errorSource","componentStack","errorStack","errorWrapper","message","stack","source","body","localStorage","getItem","logError","COMPOUND_ICONS","BIG_STAT","WidgetType","commonIconProps","neutralDark","icon","transform","transformIcon","compoundIcon","IconLayer","pickerIcon","pickerTitle","wrapper","content","gridTemplateRows","tooltipContent","Tooltip","anchor","Hoverable","renderContent","highlight","getIcon","neutralMedium","PureComponent","pickerContainer","gridRowGap","WidgetTypePicker","selectType","WIDGET_TYPES","BIG_COUNT","TABLE","RATIO","GAUGE","LIST","REGIONS","PIE_CHART","BAR_CHART","ADVMAP","TEXT","noHistory","mainContain","subtitle","chartContain","SparkWidget","ControlFrameworkEvalLogs","controlFrameworkId","controlFramework","percentPass","onClickControlFramework","handleClick","doc","sparkTimeFrame","getId","renderChart","sparkPreview","SparkWidgetConfig","hasTimeFrame","framework","controlFrameWorkOptions","handleSelectSparkTimeFrame","chartContainer","ComplianceWidgets","percentage","compliancePreview","ComplianceWidgetConfig","ComplianceWidget","TextWidgetConfig","hasMarkdown","isValid","MarkdownEditor","hasPreview","footerTextContainer","previewModalContainer","footerContainer","breadcrumbContainer","WidgetModal","sid","editingWidget","getSelector","contains","searchSID","widgetLocation","ALERT","SPARK","COMPLIANCE","MapWidgetConfig","ConfigComponent","getConfigComponent","saveCheckBox","Breadcrumb","resetType","getWidgetTypeLabel","getWidgetInputs","widgetCanPreview","saving","onClose","backdrop","addWidget","selectControlGroups","selectQueryTypes","selectSonraiSearches","withSaga","injectSaga","saga","sagas","savingWidget","SolutionCenterWidgetsReducer","selectSavingWidget","getMinWidgetHeight","getMinWidgetWidth","selectWidgets","selectLayout","widgets","moved","isResizable","isDraggable","maxH","maxW","minH","minW","err","dx","dy","stdDeviation","floodColor","floodOpacity","points","RegionsMap","activeMarker","selectedMarker","scale","coordConf","getCoordConf","coordinates","handleMarkerHover","handleMarkerExit","handleOnClickRegion","cx","cy","Color","alpha","rgb","substr","itemsHover","rx","ry","handleDeselect","svg","svgItemsHighlight","svgItems","onClickRegion","enterItems","leaveItems","getRegionSvgLabel","geographies","projection","baseStyle","neutralLight","geo","NAME","geography","pressed","regionCounts","maxCount","toArray","pop","scaleLinear","domain","clamp","selectedMarkerCount","getMarker","node","getToolTip","all","byType","region","conf","cloudType","legendHighlight","onPointerEnter","onPointerOut","startCase","legendHeader","paddingLeft","thisLeg","nextProps","nextState","mapContainer","mapGrid","zoomButton","zoomBtnCont","overflowY","fontFamily","userSelect","sizes","getLegend","center","geoObj","renderGeography","handleZoomIn","handleZoomOut","SizedRegionsMap","SizeMe","RegionsWidget","enableFlattenMode","skipCounts","propList","buildPivotableSource","flatten","allData","regionName","baseData","getBaseSonraiSearchData","dataType","baseQuery","finalQuery","baseQueryContent","hasWhereClauseRegex","RegExp","whereMatch","originalWhereClause","advancedQuery","onClickSonraiSearchRegion","groupResults","group","formatted","result","countBy","throttle","thisHeight","thisWidth","getWidgetQueryConfig","queryObj","getUsedRegionInfo","small","onSize","handleSizeChange","clickedRegionName","ArcMap","line","x0","y0","y1","goesUp","pointOfControlUp","pointOfControlDown","thickness","innerCurve","from","to","stopColor","arcsWithCount","arcs","arcStyle","opacity","combine","getArcs","maxLocation","defs","getGradient","preserveMarkerAspect","buildPath","buildCurves","ArcMapWidget","locs","Set","nme","indexOf","loc","longitude","latitude","nodeType","getSavedSearchData","first","getText","TextWidget","MarkdownDisplay","widgetError","widgetNoPermission","WidgetErrorBoundry","errorImg","canViewData","fail","Widget","TableWidget","removeWidget","widgetObj","canRender","WidgetComponent","getWidgetComponent","canEdit","userHasPermission","editWidget","pivot","selectPivot","permissionChecker","SizedGridLayout","GridLayout","SolutionCenterWidgets","showWidgetModal","editingWidgetId","renderLocks","pathname","alertId","controlGroupId","nodeId","getNodeViewPushParams","newLayout","widgetLayout","oldWidgetLayout","updatedWidget","oldItem","old","canUpdateSolutionCard","BorderedCard","CenterContent","cols","rowHeight","onLayoutChange","handleLayoutChange","draggableHandle","useCSSTransforms","onResizeStart","lockRender","onResizeStop","unlockRender","data-grid","setEditingWidget","toggleEditWidgetModal","permissionsChecker","Filter","selected","borderLeft","unSelected","light","TypeaheadFilter","valObj","addNew","optionsLoaded","getFilteredOptions","getSelectedValues","isCreatable","formatCreateLabel","FilterPanel","panel","flex","headerContent","footerButton","borderTop","hasChanges","applyFilters","ADD_TAG_FILTER","selectedPivots","tagFilters","solutionCenterReducer","updateIn","filtersTitle","dateRange","days1","days7","days30","days90","accountFilterTitle","tagFilterTitle","setSelectedPivot","clearSelectedPivots","addTagFilter","selectSolutionCenterFilterPanelDomain","selectSelectedPivots","selectTagFilters","SolutionCenterFilterPanel","selectedAccounts","PIVOT_FILEDS","ACCOUNTS","isArray","newDates","SPECIFIC_DATES","isImmutable","setPivot","pivotValue","serverTags","tags","tag","additionalOptions","tagStr","concat","getSelectedValue","RELATIVE_DATE","onChangePivotFilter","onChangeSpecificDates","onChangeAccountFilter","HAS_TAGS","getTagOptions","fetchTags","CLOUD","CLOUD_TYPES","AWS","GCP","AZURE","HASHICORP","KUBERNETES","subscriptions","selectSubscriptions","selectAccounts","dataContainers","selectDataContainers","selectTags","fetchDataContainers","fetchAccounts","fetchSubscriptions","cancelScEditButton","saveScEditButton","hideCard","renameCard","deleteCard","copyCard","saveLayoutButton","manageHiddenCards","ModalRenameSC","editCardId","originalName","setName","ModalConfirmDelete","handleDeleteSc","ModalHiddenSCManager","reVisibleCards","arr","oldState","srns","unhideSolutionCards","hiddenCardIds","solutionCard","toggleCard","handleUnHideSCCards","ModalCopySC","selectedCard","moreButton","link","paddingRight","CardActionsMenu","dropdownExpanded","action","toggleActionMenu","canCreate","doCardAction","hideSolutionCard","renameSolutionCard","hasHiddenCards","toggleHiddenSCManagerModal","CreatedByBadge","Dropdown","DropdownToggle","getActions","SolutionCenterCardActions","saveButton","animation","cardActions","editingScNameId","deletingScId","showHiddenScManagerModal","copyingScModalOpen","canUpdateCurrentCard","toggleRenameScModal","toggleCopyingScModal","toggleShowDeleteConfirmationModal","renderSaveButton","toggleFiltersPanel","IconCount","showConfirmDelete","showCreateWidgetModal","solutionCardIndex","cardsrn","FETCH_SOLUTION_CARDS_QUERY","getSolnCards","addSolutionCard","runSolutionCenterFetcher","client","getClient","SolutionCards","sysCard","__typename","createdDate","put","mutate","mutation","forceFetch","fetchPolicy","response","newCard","CreateSolutioncard","widg","assign","containedBy","CreateWidget","fetchSavedSearches","poll","omit","updateResult","UpdateWidget","widgetsByIndex","variableNames","queryStrings","UpdateSolutioncard","newSolutionCard","widgetsJS","coolWidg","newWidgets","unpackedWidgets","guy","delay","takeLatest","take","race","identity","infrastructure","cloud","createSC","errorContact","statusDaysAll","statusDays1","statusDays7","statusDays30","statusDays90","filterApplied","newWidget","button","SolutionCenterToolbar","toggleAddWidgetModal","SolutionCenterErrorBoundry","appliedFilter","filterStatus","SolutionCenterFilterStatus","appliedFilters","CloudAccount","isList","LoadingAnim","SolutionCenter","showFiltersPanel","scToolbar","zIndex","mode","DAEMON"],"mappings":"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","file":"30.821c22344e96f67a0661.chunk.js","sourcesContent":["import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { Map } from 'immutable'\nimport Creatable from 'react-select/creatable'\nimport AsyncSelect from 'react-select/async'\n\nimport CloudAccount from 'components/CloudAccount'\nimport { getAccountIdFromAccountSrn } from 'utils/sonraiUtils'\n\nconst triggerAsyncLimit = 100\nconst asyncSlice = 100\n\nclass AccountSelector extends React.Component {\n constructor(props) {\n super(props)\n if (props.accounts.size > triggerAsyncLimit) {\n this.state = {\n enableAsync: true,\n accountOptions: props.accounts\n .toJS()\n .map(account => ({\n label: this.getAccountDisplayName(account),\n value: getAccountIdFromAccountSrn(account.srn),\n }))\n .sort((a, b) => a.label.localeCompare(b.label))\n .slice(0, asyncSlice),\n }\n } else {\n this.state = {\n enableAsync: false,\n }\n }\n }\n\n getAccountForAccountId = id => {\n return this.props.accounts\n .find(a => a.get('srn').endsWith(id), null, Map())\n .toJS()\n }\n\n getAccountDisplayName = account => {\n return (\n account.friendlyName ||\n account.name ||\n getAccountIdFromAccountSrn(account.srn) ||\n account.srn\n )\n }\n\n getAccountBadge = accountId => {\n const account = this.getAccountForAccountId(accountId.toLowerCase())\n if (!account.srn) {\n return accountId\n }\n\n return (\n \n )\n }\n\n filterOption = ({ data }, inputValue) => {\n const lower = inputValue.toLowerCase()\n\n return (\n data.label.toLowerCase().includes(lower) ||\n data.value.toLowerCase().includes(lower)\n )\n }\n\n onChange = selectedOptions => {\n if (!selectedOptions) {\n this.props.onChange([])\n return\n }\n\n this.props.onChange(selectedOptions.map(opt => opt.value))\n }\n\n getNewOptionData = inputValue => {\n return { value: inputValue, label: inputValue }\n }\n\n loadOptions = (inputValue, callback) => {\n callback(\n this.props.accounts\n .toJS()\n .map(account => ({\n label: this.getAccountDisplayName(account),\n value: getAccountIdFromAccountSrn(account.srn),\n }))\n .filter(\n i =>\n i.label.toLowerCase().includes(inputValue.toLowerCase()) ||\n i.value.toLowerCase().includes(inputValue.toLowerCase())\n )\n .slice(0, asyncSlice)\n .sort((a, b) => a.label.localeCompare(b.label))\n )\n }\n\n render() {\n // if there are over triggerAsyncLimit accounts we can load the results async... or adjust this later\n if (this.state.enableAsync) {\n return (\n this.getAccountBadge(option.value)}\n isClearable\n creatable\n value={this.props.value}\n styles={this.props.styles}\n isMulti={this.props.isMulti}\n isDisabled={this.props.disabled}\n />\n )\n }\n // under triggerAsyncLimit just do yo thang\n const accountOptions = this.props.accounts\n .toJS()\n .map(account => ({\n label: this.getAccountDisplayName(account),\n value: getAccountIdFromAccountSrn(account.srn),\n }))\n .sort((a, b) => a.label.localeCompare(b.label))\n\n return (\n option.value}\n getOptionLabel={option => this.getAccountBadge(option.value)}\n filterOption={this.filterOption}\n getNewOptionData={this.getNewOptionData}\n isClearable\n styles={this.props.styles}\n isDisabled={this.props.disabled}\n />\n )\n }\n}\n\nAccountSelector.defaultProps = {\n isMulti: true,\n}\n\nAccountSelector.propTypes = {\n accounts: ImmutablePropTypes.iterable.isRequired,\n value: PropTypes.any,\n onChange: PropTypes.func.isRequired,\n isMulti: PropTypes.bool,\n styles: PropTypes.object,\n disabled: PropTypes.bool,\n hasAccountNumber: PropTypes.bool,\n}\nexport default AccountSelector\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { FILTER_DATE_FORMAT } from 'appConstants'\nimport moment from 'moment'\nimport { DateRangePicker as DateRangePickerLib } from 'react-dates'\n\nclass DateRangePicker extends React.Component {\n constructor(props) {\n super(props)\n\n this.state = {\n startDate: props.startDate ? moment(props.startDate) : null,\n endDate: props.endDate ? moment(props.endDate) : null,\n focusedInput: null,\n }\n }\n\n componentDidUpdate(oldProps) {\n if (oldProps.startDate !== this.props.startDate) {\n this.setState({\n startDate: this.props.startDate ? moment(this.props.startDate) : null,\n })\n }\n\n if (oldProps.endDate !== this.props.endDate) {\n this.setState({\n endDate: this.props.startDate ? moment(this.props.endDate) : null,\n })\n }\n }\n\n onDatesChange = ({ startDate, endDate }) => {\n const formattedStartDate = startDate\n ? startDate.format(FILTER_DATE_FORMAT)\n : null\n\n const formattedEndDate = endDate ? endDate.format(FILTER_DATE_FORMAT) : null\n\n this.props.onChange({\n startDate: formattedStartDate,\n endDate: formattedEndDate,\n })\n\n this.setState({\n startDate,\n endDate,\n })\n }\n\n render() {\n return (\n \n this.setState({ focusedInput })}\n onDatesChange={this.onDatesChange}\n isOutsideRange={date => moment(date).isAfter(moment().endOf('day'))}\n displayFormat={'MMMM D YYYY'}\n />\n \n )\n }\n}\n\nDateRangePicker.propTypes = {\n onChange: PropTypes.func.isRequired,\n startDate: PropTypes.string,\n endDate: PropTypes.string,\n}\n\nexport default DateRangePicker\n","//http://bernii.github.io/gauge.js/\n//MIT licensed\n// Generated by CoffeeScript 1.10.0\n;(function() {\n var AnimatedText,\n AnimatedTextFactory,\n Bar,\n BaseDonut,\n BaseGauge,\n Donut,\n Gauge,\n GaugePointer,\n TextRenderer,\n ValueUpdater,\n addCommas,\n cutHex,\n formatNumber,\n mergeObjects,\n secondsToString,\n slice = [].slice,\n hasProp = {}.hasOwnProperty,\n extend = function(child, parent) {\n for (var key in parent) {\n if (hasProp.call(parent, key)) child[key] = parent[key]\n }\n function ctor() {\n this.constructor = child\n }\n ctor.prototype = parent.prototype\n child.prototype = new ctor()\n child.__super__ = parent.prototype\n return child\n }\n ;(function() {\n var browserRequestAnimationFrame,\n isCancelled,\n j,\n lastId,\n len,\n vendor,\n vendors\n vendors = ['ms', 'moz', 'webkit', 'o']\n for (j = 0, len = vendors.length; j < len; j++) {\n vendor = vendors[j]\n if (window.requestAnimationFrame) {\n break\n }\n window.requestAnimationFrame = window[vendor + 'RequestAnimationFrame']\n window.cancelAnimationFrame =\n window[vendor + 'CancelAnimationFrame'] ||\n window[vendor + 'CancelRequestAnimationFrame']\n }\n browserRequestAnimationFrame = null\n lastId = 0\n isCancelled = {}\n if (!requestAnimationFrame) {\n window.requestAnimationFrame = function(callback, element) {\n var currTime, id, lastTime, timeToCall\n currTime = new Date().getTime()\n timeToCall = Math.max(0, 16 - (currTime - lastTime))\n id = window.setTimeout(function() {\n return callback(currTime + timeToCall)\n }, timeToCall)\n lastTime = currTime + timeToCall\n return id\n }\n return (window.cancelAnimationFrame = function(id) {\n return clearTimeout(id)\n })\n } else if (!window.cancelAnimationFrame) {\n browserRequestAnimationFrame = window.requestAnimationFrame\n window.requestAnimationFrame = function(callback, element) {\n var myId\n myId = ++lastId\n browserRequestAnimationFrame(function() {\n if (!isCancelled[myId]) {\n return callback()\n }\n }, element)\n return myId\n }\n return (window.cancelAnimationFrame = function(id) {\n return (isCancelled[id] = true)\n })\n }\n })()\n\n secondsToString = function(sec) {\n var hr, min\n hr = Math.floor(sec / 3600)\n min = Math.floor((sec - hr * 3600) / 60)\n sec -= hr * 3600 + min * 60\n sec += ''\n min += ''\n while (min.length < 2) {\n min = '0' + min\n }\n while (sec.length < 2) {\n sec = '0' + sec\n }\n hr = hr ? hr + ':' : ''\n return hr + min + ':' + sec\n }\n\n formatNumber = function() {\n var digits, num, value\n num = 1 <= arguments.length ? slice.call(arguments, 0) : []\n value = num[0]\n digits = 0 || num[1]\n return addCommas(value.toFixed(digits))\n }\n\n mergeObjects = function(obj1, obj2) {\n var key, out, val\n out = {}\n for (key in obj1) {\n if (!hasProp.call(obj1, key)) continue\n val = obj1[key]\n out[key] = val\n }\n for (key in obj2) {\n if (!hasProp.call(obj2, key)) continue\n val = obj2[key]\n out[key] = val\n }\n return out\n }\n\n addCommas = function(nStr) {\n var rgx, x, x1, x2\n nStr += ''\n x = nStr.split('.')\n x1 = x[0]\n x2 = ''\n if (x.length > 1) {\n x2 = '.' + x[1]\n }\n rgx = /(\\d+)(\\d{3})/\n while (rgx.test(x1)) {\n x1 = x1.replace(rgx, '$1' + ',' + '$2')\n }\n return x1 + x2\n }\n\n cutHex = function(nStr) {\n if (nStr.charAt(0) === '#') {\n return nStr.substring(1, 7)\n }\n return nStr\n }\n\n ValueUpdater = (function() {\n ValueUpdater.prototype.animationSpeed = 32\n\n function ValueUpdater(addToAnimationQueue, clear) {\n if (addToAnimationQueue == null) {\n addToAnimationQueue = true\n }\n this.clear = clear != null ? clear : true\n if (addToAnimationQueue) {\n AnimationUpdater.add(this)\n }\n }\n\n ValueUpdater.prototype.update = function(force) {\n var diff\n if (force == null) {\n force = false\n }\n if (force || this.displayedValue !== this.value) {\n if (this.ctx && this.clear) {\n this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height)\n }\n diff = this.value - this.displayedValue\n if (Math.abs(diff / this.animationSpeed) <= 0.001) {\n this.displayedValue = this.value\n } else {\n this.displayedValue = this.displayedValue + diff / this.animationSpeed\n }\n this.render()\n return true\n }\n return false\n }\n\n return ValueUpdater\n })()\n\n BaseGauge = (function(superClass) {\n extend(BaseGauge, superClass)\n\n function BaseGauge() {\n return BaseGauge.__super__.constructor.apply(this, arguments)\n }\n\n BaseGauge.prototype.displayScale = 1\n\n BaseGauge.prototype.forceUpdate = true\n\n BaseGauge.prototype.setTextField = function(textField, fractionDigits) {\n return (this.textField =\n textField instanceof TextRenderer\n ? textField\n : new TextRenderer(textField, fractionDigits))\n }\n\n BaseGauge.prototype.setMinValue = function(minValue, updateStartValue) {\n var gauge, j, len, ref, results\n this.minValue = minValue\n if (updateStartValue == null) {\n updateStartValue = true\n }\n if (updateStartValue) {\n this.displayedValue = this.minValue\n ref = this.gp || []\n results = []\n for (j = 0, len = ref.length; j < len; j++) {\n gauge = ref[j]\n results.push((gauge.displayedValue = this.minValue))\n }\n return results\n }\n }\n\n BaseGauge.prototype.setOptions = function(options) {\n if (options == null) {\n options = null\n }\n this.options = mergeObjects(this.options, options)\n if (this.textField) {\n this.textField.el.style.fontSize = options.fontSize + 'px'\n }\n if (this.options.angle > 0.5) {\n this.options.angle = 0.5\n }\n this.configDisplayScale()\n return this\n }\n\n BaseGauge.prototype.configDisplayScale = function() {\n var backingStorePixelRatio,\n devicePixelRatio,\n height,\n prevDisplayScale,\n width\n prevDisplayScale = this.displayScale\n if (this.options.highDpiSupport === false) {\n delete this.displayScale\n } else {\n devicePixelRatio = window.devicePixelRatio || 1\n backingStorePixelRatio =\n this.ctx.webkitBackingStorePixelRatio ||\n this.ctx.mozBackingStorePixelRatio ||\n this.ctx.msBackingStorePixelRatio ||\n this.ctx.oBackingStorePixelRatio ||\n this.ctx.backingStorePixelRatio ||\n 1\n this.displayScale = devicePixelRatio / backingStorePixelRatio\n }\n if (this.displayScale !== prevDisplayScale) {\n width = this.canvas.G__width || this.canvas.width\n height = this.canvas.G__height || this.canvas.height\n this.canvas.width = width * this.displayScale\n this.canvas.height = height * this.displayScale\n this.canvas.style.width = width + 'px'\n this.canvas.style.height = height + 'px'\n this.canvas.G__width = width\n this.canvas.G__height = height\n }\n return this\n }\n\n BaseGauge.prototype.parseValue = function(value) {\n value = parseFloat(value) || Number(value)\n if (isFinite(value)) {\n return value\n } else {\n return 0\n }\n }\n\n return BaseGauge\n })(ValueUpdater)\n\n TextRenderer = (function() {\n function TextRenderer(el, fractionDigits1) {\n this.el = el\n this.fractionDigits = fractionDigits1\n }\n\n TextRenderer.prototype.render = function(gauge) {\n return (this.el.innerHTML = formatNumber(\n gauge.displayedValue,\n this.fractionDigits\n ))\n }\n\n return TextRenderer\n })()\n\n AnimatedText = (function(superClass) {\n extend(AnimatedText, superClass)\n\n AnimatedText.prototype.displayedValue = 0\n\n AnimatedText.prototype.value = 0\n\n AnimatedText.prototype.setVal = function(value) {\n return (this.value = 1 * value)\n }\n\n function AnimatedText(elem1, text) {\n this.elem = elem1\n this.text = text != null ? text : false\n AnimatedText.__super__.constructor.call(this)\n if (this.elem === void 0) {\n throw new Error(\"The element isn't defined.\")\n }\n this.value = 1 * this.elem.innerHTML\n if (this.text) {\n this.value = 0\n }\n }\n\n AnimatedText.prototype.render = function() {\n var textVal\n if (this.text) {\n textVal = secondsToString(this.displayedValue.toFixed(0))\n } else {\n textVal = addCommas(formatNumber(this.displayedValue))\n }\n return (this.elem.innerHTML = textVal)\n }\n\n return AnimatedText\n })(ValueUpdater)\n\n AnimatedTextFactory = {\n create: function(objList) {\n var elem, j, len, out\n out = []\n for (j = 0, len = objList.length; j < len; j++) {\n elem = objList[j]\n out.push(new AnimatedText(elem))\n }\n return out\n },\n }\n\n GaugePointer = (function(superClass) {\n extend(GaugePointer, superClass)\n\n GaugePointer.prototype.displayedValue = 0\n\n GaugePointer.prototype.value = 0\n\n GaugePointer.prototype.hovered = false\n\n GaugePointer.prototype.options = {\n strokeWidth: 0.035,\n length: 0.1,\n color: '#000000',\n iconPath: null,\n iconScale: 1.0,\n iconAngle: 0,\n }\n\n GaugePointer.prototype.img = null\n\n function GaugePointer(gauge1) {\n this.gauge = gauge1\n if (this.gauge === void 0) {\n throw new Error(\"The element isn't defined.\")\n }\n this.ctx = this.gauge.ctx\n this.canvas = this.gauge.canvas\n GaugePointer.__super__.constructor.call(this, false, false)\n this.setOptions()\n\n this.canvas.onmouseenter = () => {\n this.setHovered(true)\n this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height)\n this.gauge.render()\n }\n this.canvas.onmouseleave = () => {\n this.setHovered(false)\n this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height)\n this.gauge.render()\n }\n }\n\n GaugePointer.prototype.setHovered = function(hoverValue) {\n this.hovered = hoverValue\n }\n\n GaugePointer.prototype.setOptions = function(options) {\n if (options == null) {\n options = null\n }\n this.options = mergeObjects(this.options, options)\n this.length =\n 2 *\n this.gauge.radius *\n this.gauge.options.radiusScale *\n this.options.length\n this.strokeWidth = this.canvas.height * this.options.strokeWidth\n this.maxValue = this.gauge.maxValue\n this.minValue = this.gauge.minValue\n this.animationSpeed = this.gauge.animationSpeed\n this.options.angle = this.gauge.options.angle\n if (this.options.iconPath) {\n this.img = new Image()\n return (this.img.src = this.options.iconPath)\n }\n }\n\n GaugePointer.prototype.render = function() {\n var angle, endX, endY, imgX, imgY, startX, startY, x, y\n angle = this.gauge.getAngle.call(this, this.displayedValue)\n x = Math.round(this.length * Math.cos(angle))\n y = Math.round(this.length * Math.sin(angle))\n startX = Math.round(this.strokeWidth * Math.cos(angle - Math.PI / 2))\n startY = Math.round(this.strokeWidth * Math.sin(angle - Math.PI / 2))\n endX = Math.round(this.strokeWidth * Math.cos(angle + Math.PI / 2))\n endY = Math.round(this.strokeWidth * Math.sin(angle + Math.PI / 2))\n this.ctx.beginPath()\n this.ctx.fillStyle = this.hovered\n ? this.options.hoveredColor\n : this.options.color\n this.ctx.arc(0, 0, this.strokeWidth, 0, Math.PI * 2, false)\n this.ctx.fill()\n this.ctx.beginPath()\n this.ctx.moveTo(startX, startY)\n this.ctx.lineTo(x, y)\n this.ctx.lineTo(endX, endY)\n this.ctx.fill()\n if (this.img) {\n imgX = Math.round(this.img.width * this.options.iconScale)\n imgY = Math.round(this.img.height * this.options.iconScale)\n this.ctx.save()\n this.ctx.translate(x, y)\n this.ctx.rotate(\n angle + (Math.PI / 180.0) * (90 + this.options.iconAngle)\n )\n this.ctx.drawImage(this.img, -imgX / 2, -imgY / 2, imgX, imgY)\n return this.ctx.restore()\n }\n\n if (this.hovered) {\n this.ctx.save()\n this.ctx.translate(x, y)\n this.ctx.font = '15px sans-serif'\n const label = `${formatNumber(this.value, 0)}%`\n const textWidth = this.ctx.measureText('Hello').width\n const textX = -textWidth / 2\n const textY = -30 / 2\n this.ctx.beginPath()\n this.ctx.arc(textX + 15, textY - 5, (textWidth + 4) / 2, 0, 2 * Math.PI)\n this.ctx.save()\n this.ctx.shadowColor = '#888'\n this.ctx.shadowBlur = 8\n this.ctx.shadowOffsetY = 4\n this.ctx.fillStyle = '#fff'\n this.ctx.fill()\n this.ctx.restore()\n this.ctx.lineWidth = 2\n this.ctx.strokeStyle = this.options.valueCircleColor || '#ccc'\n this.ctx.stroke()\n\n this.ctx.fillStyle = this.options.valueColor || '#555'\n this.ctx.fillText(label, textX, textY)\n this.ctx.fillStyle = 'black'\n return this.ctx.restore()\n }\n }\n\n return GaugePointer\n })(ValueUpdater)\n\n Bar = (function() {\n function Bar(elem1) {\n this.elem = elem1\n }\n\n Bar.prototype.updateValues = function(arrValues) {\n this.value = arrValues[0]\n this.maxValue = arrValues[1]\n this.avgValue = arrValues[2]\n return this.render()\n }\n\n Bar.prototype.render = function() {\n var avgPercent, valPercent\n if (this.textField) {\n this.textField.text(formatNumber(this.value))\n }\n if (this.maxValue === 0) {\n this.maxValue = this.avgValue * 2\n }\n valPercent = (this.value / this.maxValue) * 100\n avgPercent = (this.avgValue / this.maxValue) * 100\n $('.bar-value', this.elem).css({\n width: valPercent + '%',\n })\n return $('.typical-value', this.elem).css({\n width: avgPercent + '%',\n })\n }\n\n return Bar\n })()\n\n Gauge = (function(superClass) {\n extend(Gauge, superClass)\n\n Gauge.prototype.elem = null\n\n Gauge.prototype.value = [20]\n\n Gauge.prototype.maxValue = 80\n\n Gauge.prototype.minValue = 0\n\n Gauge.prototype.displayedAngle = 0\n\n Gauge.prototype.displayedValue = 0\n\n Gauge.prototype.lineWidth = 40\n\n Gauge.prototype.paddingTop = 0.1\n\n Gauge.prototype.paddingBottom = 0.1\n\n Gauge.prototype.percentColors = null\n\n Gauge.prototype.options = {\n colorStart: '#6fadcf',\n colorStop: void 0,\n gradientType: 0,\n strokeColor: '#e0e0e0',\n pointer: {\n length: 0.8,\n strokeWidth: 0.035,\n iconScale: 1.0,\n },\n angle: 0.15,\n lineWidth: 0.44,\n radiusScale: 1.0,\n fontSize: 40,\n limitMax: false,\n limitMin: false,\n }\n\n function Gauge(canvas) {\n var h, w\n this.canvas = canvas\n Gauge.__super__.constructor.call(this)\n this.percentColors = null\n if (typeof G_vmlCanvasManager !== 'undefined') {\n this.canvas = window.G_vmlCanvasManager.initElement(this.canvas)\n }\n this.ctx = this.canvas.getContext('2d')\n h = this.canvas.clientHeight\n w = this.canvas.clientWidth\n this.canvas.height = h\n this.canvas.width = w\n this.gp = [new GaugePointer(this)]\n this.setOptions()\n }\n\n Gauge.prototype.setOptions = function(options) {\n var gauge, j, len, phi, ref\n if (options == null) {\n options = null\n }\n Gauge.__super__.setOptions.call(this, options)\n this.configPercentColors()\n this.extraPadding = 0\n if (this.options.angle < 0) {\n phi = Math.PI * (1 + this.options.angle)\n this.extraPadding = Math.sin(phi)\n }\n this.availableHeight =\n this.canvas.height * (1 - this.paddingTop - this.paddingBottom)\n this.lineWidth = this.availableHeight * this.options.lineWidth\n this.radius =\n (this.availableHeight - this.lineWidth / 2) / (1.0 + this.extraPadding)\n this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height)\n ref = this.gp\n for (j = 0, len = ref.length; j < len; j++) {\n gauge = ref[j]\n gauge.setOptions(this.options.pointer)\n //gauge.render()\n }\n this.render()\n return this\n }\n\n Gauge.prototype.configPercentColors = function() {\n var bval, gval, i, j, ref, results, rval\n this.percentColors = null\n if (this.options.percentColors !== void 0) {\n this.percentColors = new Array()\n results = []\n for (\n i = j = 0, ref = this.options.percentColors.length - 1;\n 0 <= ref ? j <= ref : j >= ref;\n i = 0 <= ref ? ++j : --j\n ) {\n rval = parseInt(\n cutHex(this.options.percentColors[i][1]).substring(0, 2),\n 16\n )\n gval = parseInt(\n cutHex(this.options.percentColors[i][1]).substring(2, 4),\n 16\n )\n bval = parseInt(\n cutHex(this.options.percentColors[i][1]).substring(4, 6),\n 16\n )\n results.push(\n (this.percentColors[i] = {\n pct: this.options.percentColors[i][0],\n color: {\n r: rval,\n g: gval,\n b: bval,\n },\n })\n )\n }\n return results\n }\n }\n\n Gauge.prototype.set = function(value) {\n var gp, i, j, k, l, len, ref, ref1, val\n if (!(value instanceof Array)) {\n value = [value]\n }\n for (\n i = j = 0, ref = value.length - 1;\n 0 <= ref ? j <= ref : j >= ref;\n i = 0 <= ref ? ++j : --j\n ) {\n value[i] = this.parseValue(value[i])\n }\n if (value.length > this.gp.length) {\n for (\n i = k = 0, ref1 = value.length - this.gp.length;\n 0 <= ref1 ? k < ref1 : k > ref1;\n i = 0 <= ref1 ? ++k : --k\n ) {\n gp = new GaugePointer(this)\n gp.setOptions(this.options.pointer)\n this.gp.push(gp)\n }\n } else if (value.length < this.gp.length) {\n this.gp = this.gp.slice(this.gp.length - value.length)\n }\n i = 0\n for (l = 0, len = value.length; l < len; l++) {\n val = value[l]\n if (val > this.maxValue) {\n if (this.options.limitMax) {\n val = this.maxValue\n } else {\n this.maxValue = val + 1\n }\n } else if (val < this.minValue) {\n if (this.options.limitMin) {\n val = this.minValue\n } else {\n this.minValue = val - 1\n }\n }\n this.gp[i].value = val\n this.gp[i++].setOptions({\n minValue: this.minValue,\n maxValue: this.maxValue,\n angle: this.options.angle,\n })\n }\n this.value = Math.max(\n Math.min(value[value.length - 1], this.maxValue),\n this.minValue\n )\n AnimationUpdater.run(this.forceUpdate)\n return (this.forceUpdate = false)\n }\n\n Gauge.prototype.getAngle = function(value) {\n return (\n (1 + this.options.angle) * Math.PI +\n ((value - this.minValue) / (this.maxValue - this.minValue)) *\n (1 - this.options.angle * 2) *\n Math.PI\n )\n }\n\n Gauge.prototype.getColorForPercentage = function(pct, grad) {\n var color, endColor, i, j, rangePct, ref, startColor\n if (pct === 0) {\n color = this.percentColors[0].color\n } else {\n color = this.percentColors[this.percentColors.length - 1].color\n for (\n i = j = 0, ref = this.percentColors.length - 1;\n 0 <= ref ? j <= ref : j >= ref;\n i = 0 <= ref ? ++j : --j\n ) {\n if (pct <= this.percentColors[i].pct) {\n if (grad === true) {\n startColor = this.percentColors[i - 1] || this.percentColors[0]\n endColor = this.percentColors[i]\n rangePct =\n (pct - startColor.pct) / (endColor.pct - startColor.pct)\n color = {\n r: Math.floor(\n startColor.color.r * (1 - rangePct) +\n endColor.color.r * rangePct\n ),\n g: Math.floor(\n startColor.color.g * (1 - rangePct) +\n endColor.color.g * rangePct\n ),\n b: Math.floor(\n startColor.color.b * (1 - rangePct) +\n endColor.color.b * rangePct\n ),\n }\n } else {\n color = this.percentColors[i].color\n }\n break\n }\n }\n }\n return 'rgb(' + [color.r, color.g, color.b].join(',') + ')'\n }\n\n Gauge.prototype.getColorForValue = function(val, grad) {\n var pct\n pct = (val - this.minValue) / (this.maxValue - this.minValue)\n return this.getColorForPercentage(pct, grad)\n }\n\n Gauge.prototype.renderStaticLabels = function(staticLabels, w, h, radius) {\n var font, fontsize, j, len, match, re, ref, rest, rotationAngle, value\n this.ctx.save()\n this.ctx.translate(w, h)\n font = staticLabels.font || '10px Times'\n re = /\\d+\\.?\\d?/\n match = font.match(re)[0]\n rest = font.slice(match.length)\n fontsize = parseFloat(match) * this.displayScale\n this.ctx.font = fontsize + rest\n this.ctx.fillStyle = staticLabels.color || '#000000'\n this.ctx.textBaseline = 'bottom'\n this.ctx.textAlign = 'center'\n ref = staticLabels.labels\n for (j = 0, len = ref.length; j < len; j++) {\n value = ref[j]\n if (value.label !== void 0) {\n if (\n (!this.options.limitMin || value >= this.minValue) &&\n (!this.options.limitMax || value <= this.maxValue)\n ) {\n font = value.font || staticLabels.font\n match = font.match(re)[0]\n rest = font.slice(match.length)\n fontsize = parseFloat(match) * this.displayScale\n this.ctx.font = fontsize + rest\n rotationAngle = this.getAngle(value.label) - (3 * Math.PI) / 2\n this.ctx.rotate(rotationAngle)\n this.ctx.fillText(\n formatNumber(value.label, staticLabels.fractionDigits),\n 0,\n -radius - this.lineWidth / 2\n )\n this.ctx.rotate(-rotationAngle)\n }\n } else {\n if (\n (!this.options.limitMin || value >= this.minValue) &&\n (!this.options.limitMax || value <= this.maxValue)\n ) {\n rotationAngle = this.getAngle(value) - (3 * Math.PI) / 2\n this.ctx.rotate(rotationAngle)\n this.ctx.fillText(\n formatNumber(value, staticLabels.fractionDigits),\n 0,\n -radius - this.lineWidth / 2\n )\n this.ctx.rotate(-rotationAngle)\n }\n }\n }\n return this.ctx.restore()\n }\n\n Gauge.prototype.renderTicks = function(ticksOptions, w, h, radius) {\n var currentDivision,\n currentSubDivision,\n divColor,\n divLength,\n divWidth,\n divisionCount,\n j,\n lineWidth,\n range,\n rangeDivisions,\n ref,\n results,\n scaleMutate,\n st,\n subColor,\n subDivisions,\n subLength,\n subWidth,\n subdivisionCount,\n t,\n tmpRadius\n if (ticksOptions !== {}) {\n divisionCount = ticksOptions.divisions || 0\n subdivisionCount = ticksOptions.subDivisions || 0\n divColor = ticksOptions.divColor || '#fff'\n subColor = ticksOptions.subColor || '#fff'\n divLength = ticksOptions.divLength || 0.7\n subLength = ticksOptions.subLength || 0.2\n range = parseFloat(this.maxValue) - parseFloat(this.minValue)\n rangeDivisions = parseFloat(range) / parseFloat(ticksOptions.divisions)\n subDivisions =\n parseFloat(rangeDivisions) / parseFloat(ticksOptions.subDivisions)\n currentDivision = parseFloat(this.minValue)\n currentSubDivision = 0.0 + subDivisions\n lineWidth = range / 400\n divWidth = lineWidth * (ticksOptions.divWidth || 1)\n subWidth = lineWidth * (ticksOptions.subWidth || 1)\n results = []\n for (t = j = 0, ref = divisionCount + 1; j < ref; t = j += 1) {\n this.ctx.lineWidth = this.lineWidth * divLength\n scaleMutate = (this.lineWidth / 2) * (1 - divLength)\n tmpRadius = this.radius * this.options.radiusScale + scaleMutate\n this.ctx.strokeStyle = divColor\n this.ctx.beginPath()\n this.ctx.arc(\n 0,\n 0,\n tmpRadius,\n this.getAngle(currentDivision - divWidth),\n this.getAngle(currentDivision + divWidth),\n false\n )\n this.ctx.stroke()\n currentSubDivision = currentDivision + subDivisions\n currentDivision += rangeDivisions\n if (t !== ticksOptions.divisions && subdivisionCount > 0) {\n results.push(\n function() {\n var k, ref1, results1\n results1 = []\n for (\n st = k = 0, ref1 = subdivisionCount - 1;\n k < ref1;\n st = k += 1\n ) {\n this.ctx.lineWidth = this.lineWidth * subLength\n scaleMutate = (this.lineWidth / 2) * (1 - subLength)\n tmpRadius =\n this.radius * this.options.radiusScale + scaleMutate\n this.ctx.strokeStyle = subColor\n this.ctx.beginPath()\n this.ctx.arc(\n 0,\n 0,\n tmpRadius,\n this.getAngle(currentSubDivision - subWidth),\n this.getAngle(currentSubDivision + subWidth),\n false\n )\n this.ctx.stroke()\n results1.push((currentSubDivision += subDivisions))\n }\n return results1\n }.call(this)\n )\n } else {\n results.push(void 0)\n }\n }\n return results\n }\n }\n\n Gauge.prototype.render = function() {\n var displayedAngle,\n fillStyle,\n gauge,\n h,\n j,\n k,\n len,\n len1,\n max,\n min,\n radius,\n ref,\n ref1,\n scaleMutate,\n tmpRadius,\n w,\n zone\n w = this.canvas.width / 2\n h =\n this.canvas.height * this.paddingTop +\n this.availableHeight -\n (this.radius + this.lineWidth / 2) * this.extraPadding\n displayedAngle = this.getAngle(this.displayedValue)\n if (this.textField) {\n this.textField.render(this)\n }\n this.ctx.lineCap = 'butt'\n radius = this.radius * this.options.radiusScale\n if (this.options.staticLabels) {\n this.renderStaticLabels(this.options.staticLabels, w, h, radius)\n }\n if (this.options.staticZones) {\n this.ctx.save()\n this.ctx.translate(w, h)\n this.ctx.lineWidth = this.lineWidth\n ref = this.options.staticZones\n for (j = 0, len = ref.length; j < len; j++) {\n zone = ref[j]\n min = zone.min\n if (this.options.limitMin && min < this.minValue) {\n min = this.minValue\n }\n max = zone.max\n if (this.options.limitMax && max > this.maxValue) {\n max = this.maxValue\n }\n tmpRadius = this.radius * this.options.radiusScale\n if (zone.height) {\n this.ctx.lineWidth = this.lineWidth * zone.height\n scaleMutate =\n (this.lineWidth / 2) * (zone.offset || 1 - zone.height)\n tmpRadius = this.radius * this.options.radiusScale + scaleMutate\n }\n this.ctx.strokeStyle = zone.strokeStyle\n this.ctx.beginPath()\n this.ctx.arc(\n 0,\n 0,\n tmpRadius,\n this.getAngle(min),\n this.getAngle(max),\n false\n )\n this.ctx.stroke()\n }\n } else {\n if (this.options.customFillStyle !== void 0) {\n fillStyle = this.options.customFillStyle(this)\n } else if (this.percentColors !== null) {\n fillStyle = this.getColorForValue(\n this.displayedValue,\n this.options.generateGradient\n )\n } else if (this.options.colorStop !== void 0) {\n if (this.options.gradientType === 0) {\n fillStyle = this.ctx.createRadialGradient(w, h, 9, w, h, 70)\n } else {\n fillStyle = this.ctx.createLinearGradient(0, 0, w, 0)\n }\n fillStyle.addColorStop(0, this.options.colorStart)\n fillStyle.addColorStop(1, this.options.colorStop)\n } else {\n fillStyle = this.options.colorStart\n }\n this.ctx.strokeStyle = fillStyle\n this.ctx.beginPath()\n this.ctx.arc(\n w,\n h,\n radius,\n (1 + this.options.angle) * Math.PI,\n displayedAngle,\n false\n )\n this.ctx.lineWidth = this.lineWidth\n this.ctx.stroke()\n this.ctx.strokeStyle = this.options.strokeColor\n this.ctx.beginPath()\n this.ctx.arc(\n w,\n h,\n radius,\n displayedAngle,\n (2 - this.options.angle) * Math.PI,\n false\n )\n this.ctx.stroke()\n this.ctx.save()\n this.ctx.translate(w, h)\n }\n if (this.options.renderTicks) {\n this.renderTicks(this.options.renderTicks, w, h, radius)\n }\n this.ctx.restore()\n this.ctx.translate(w, h)\n ref1 = this.gp\n for (k = 0, len1 = ref1.length; k < len1; k++) {\n gauge = ref1[k]\n gauge.update(true)\n }\n return this.ctx.translate(-w, -h)\n }\n\n return Gauge\n })(BaseGauge)\n\n BaseDonut = (function(superClass) {\n extend(BaseDonut, superClass)\n\n BaseDonut.prototype.lineWidth = 15\n\n BaseDonut.prototype.displayedValue = 0\n\n BaseDonut.prototype.value = 33\n\n BaseDonut.prototype.maxValue = 80\n\n BaseDonut.prototype.minValue = 0\n\n BaseDonut.prototype.options = {\n lineWidth: 0.1,\n colorStart: '#6f6ea0',\n colorStop: '#c0c0db',\n strokeColor: '#eeeeee',\n shadowColor: '#d5d5d5',\n angle: 0.35,\n radiusScale: 1.0,\n }\n\n function BaseDonut(canvas) {\n this.canvas = canvas\n BaseDonut.__super__.constructor.call(this)\n if (typeof G_vmlCanvasManager !== 'undefined') {\n this.canvas = window.G_vmlCanvasManager.initElement(this.canvas)\n }\n this.ctx = this.canvas.getContext('2d')\n this.setOptions()\n this.render()\n }\n\n BaseDonut.prototype.getAngle = function(value) {\n return (\n (1 - this.options.angle) * Math.PI +\n ((value - this.minValue) / (this.maxValue - this.minValue)) *\n (2 + this.options.angle - (1 - this.options.angle)) *\n Math.PI\n )\n }\n\n BaseDonut.prototype.setOptions = function(options) {\n if (options == null) {\n options = null\n }\n BaseDonut.__super__.setOptions.call(this, options)\n this.lineWidth = this.canvas.height * this.options.lineWidth\n this.radius =\n this.options.radiusScale * (this.canvas.height / 2 - this.lineWidth / 2)\n return this\n }\n\n BaseDonut.prototype.set = function(value) {\n this.value = this.parseValue(value)\n if (this.value > this.maxValue) {\n if (this.options.limitMax) {\n this.value = this.maxValue\n } else {\n this.maxValue = this.value\n }\n } else if (this.value < this.minValue) {\n if (this.options.limitMin) {\n this.value = this.minValue\n } else {\n this.minValue = this.value\n }\n }\n AnimationUpdater.run(this.forceUpdate)\n return (this.forceUpdate = false)\n }\n\n BaseDonut.prototype.render = function() {\n var displayedAngle, grdFill, h, start, stop, w\n displayedAngle = this.getAngle(this.displayedValue)\n w = this.canvas.width / 2\n h = this.canvas.height / 2\n if (this.textField) {\n this.textField.render(this)\n }\n grdFill = this.ctx.createRadialGradient(w, h, 39, w, h, 70)\n grdFill.addColorStop(0, this.options.colorStart)\n grdFill.addColorStop(1, this.options.colorStop)\n start = this.radius - this.lineWidth / 2\n stop = this.radius + this.lineWidth / 2\n this.ctx.strokeStyle = this.options.strokeColor\n this.ctx.beginPath()\n this.ctx.arc(\n w,\n h,\n this.radius,\n (1 - this.options.angle) * Math.PI,\n (2 + this.options.angle) * Math.PI,\n false\n )\n this.ctx.lineWidth = this.lineWidth\n this.ctx.lineCap = 'round'\n this.ctx.stroke()\n this.ctx.strokeStyle = grdFill\n this.ctx.beginPath()\n this.ctx.arc(\n w,\n h,\n this.radius,\n (1 - this.options.angle) * Math.PI,\n displayedAngle,\n false\n )\n return this.ctx.stroke()\n }\n\n return BaseDonut\n })(BaseGauge)\n\n Donut = (function(superClass) {\n extend(Donut, superClass)\n\n function Donut() {\n return Donut.__super__.constructor.apply(this, arguments)\n }\n\n Donut.prototype.strokeGradient = function(w, h, start, stop) {\n var grd\n grd = this.ctx.createRadialGradient(w, h, start, w, h, stop)\n grd.addColorStop(0, this.options.shadowColor)\n grd.addColorStop(0.12, this.options._orgStrokeColor)\n grd.addColorStop(0.88, this.options._orgStrokeColor)\n grd.addColorStop(1, this.options.shadowColor)\n return grd\n }\n\n Donut.prototype.setOptions = function(options) {\n var h, start, stop, w\n if (options == null) {\n options = null\n }\n Donut.__super__.setOptions.call(this, options)\n w = this.canvas.width / 2\n h = this.canvas.height / 2\n start = this.radius - this.lineWidth / 2\n stop = this.radius + this.lineWidth / 2\n this.options._orgStrokeColor = this.options.strokeColor\n this.options.strokeColor = this.strokeGradient(w, h, start, stop)\n return this\n }\n\n return Donut\n })(BaseDonut)\n\n window.AnimationUpdater = {\n elements: [],\n animId: null,\n addAll: function(list) {\n var elem, j, len, results\n results = []\n for (j = 0, len = list.length; j < len; j++) {\n elem = list[j]\n results.push(AnimationUpdater.elements.push(elem))\n }\n return results\n },\n add: function(object) {\n return AnimationUpdater.elements.push(object)\n },\n run: function(force) {\n var elem, finished, isCallback, j, len, ref\n if (force == null) {\n force = false\n }\n isCallback = isFinite(parseFloat(force))\n if (isCallback || force === true) {\n finished = true\n ref = AnimationUpdater.elements\n for (j = 0, len = ref.length; j < len; j++) {\n elem = ref[j]\n if (elem.update(force === true)) {\n finished = false\n }\n }\n return (AnimationUpdater.animId = finished\n ? null\n : requestAnimationFrame(AnimationUpdater.run))\n } else if (force === false) {\n if (AnimationUpdater.animId === !null) {\n cancelAnimationFrame(AnimationUpdater.animId)\n }\n return (AnimationUpdater.animId = requestAnimationFrame(\n AnimationUpdater.run\n ))\n }\n },\n }\n\n if (typeof window.define === 'function' && window.define.amd != null) {\n define(function() {\n return {\n Gauge: Gauge,\n Donut: Donut,\n BaseDonut: BaseDonut,\n TextRenderer: TextRenderer,\n }\n })\n } else if (typeof module !== 'undefined' && module.exports != null) {\n module.exports = {\n Gauge: Gauge,\n Donut: Donut,\n BaseDonut: BaseDonut,\n TextRenderer: TextRenderer,\n }\n } else {\n window.Gauge = Gauge\n window.Donut = Donut\n window.BaseDonut = BaseDonut\n window.TextRenderer = TextRenderer\n }\n}.call(this))\n","/*\n *\n * SolutionCenter constants\n *\n */\n\nexport const LOAD_SOLUTION_CARDS = 'app/SoltuionCenter/LOAD_SOLUTION_CARDS'\nexport const GET_SOLUTION_CARDS = 'app/SolutionCenter/GET_SOLUTION_CARDS'\nexport const ADD_SC_WIDGET = 'app/SolutionCenter/ADD_SC_WIDGET'\nexport const TOGGLE_SC_WIDGET_STATIC = 'app/SolutionCenter/TOGGLE_WIDGET_STATIC'\nexport const REMOVE_SC_WIDGET = 'app/SolutionCenter/REMOVE_SC_WIDGET'\nexport const HANDLE_TAB_EDIT = 'app/SolutionCenter/HANDLE_TAB_EDIT'\nexport const HANDLE_TAB_SEQ_CHANGE = 'app/SolutionCenter/HANDLE_TAB_SEQ_CHANGE'\nexport const HANDLE_SC_ADD = 'app/SolutionCenter/HANDLE_TAB_ADD'\nexport const DELETE_SOLUTION_CARD = 'app/SolutionCenter/DELETE_SOLUTION_CARD'\nexport const UPDATE_WIDGET = 'app/SolutionCenter/UPDATE_WIDGET'\nexport const UPDATE_WIDGET_SUCCESS = 'app/SolutionCenter/UPDATE_WIDGET_SUCCESS'\nexport const SET_WIDGET_OPTIONS = 'app/SolutionCenter/SET_WIDGET_OPTIONS'\nexport const SAVE_LAYOUT = 'app/SolutionCenter/SAVE_LAYOUT'\nexport const SAVE_LAYOUT_SUCCESS = 'app/SolutionCenter/SAVE_LAYOUT_SUCCESS'\nexport const REMOVE_WIDGET_SUCCESS = 'app/SolutionCenter/REMOVE_WIDGET_SUCCESS'\nexport const ADD_SOLUTION_CARD_SUCCESS =\n 'app/SolutionCenter/ADD_SOLUTION_CARD_SUCCESS'\nexport const DELETE_SOLUTION_CARD_SUCCESS =\n 'app/SolutionCenter/DELETE_SOLUTION_CARD_SUCCESS'\nexport const ADD_WIDGET_SUCCESS = 'app/SolutionCenter/ADD_WIDGET_SUCCESS'\nexport const UPDATE_EDIT_WIDGET = 'app/SolutionCenter/UPDATE_EDIT_WIDGET'\nexport const UPDATE_SOLUTION_CARD = 'app/SolutionCenter/UPDATE_SOLUTION_CARD'\nexport const UPDATE_SOLUTION_CARD_SUCCESS =\n 'app/SolutionCenter/UPDATE_SOLUTION_CARD_SUCCESS'\nexport const START_UPDATE_SC_POLL = 'app/SolutionCenter/START_UPDATE_SC_POLL'\nexport const STOP_UPDATE_SC_POLL = 'app/SolutionCenter/STOP_UPDATE_SC_POLL'\nexport const SET_SHOW_CREATE_WIDGET_MODAL =\n 'app/SolutionCenter/SET_SHOW_CREATE_WIDGET_MODAL'\nexport const COPY_SOLUTION_CARD = 'app/SolutionCenter/COPY_SOLUTION_CARD'\nexport const COPY_SOLUTION_CARD_SUCCESS =\n 'app/SolutionCenter/COPY_SOLUTION_CARD_SUCCESS'\n","import { fromJS } from 'immutable'\nimport { handleActions } from 'redux-actions'\nimport moment from 'moment'\n\nimport {\n HANDLE_SC_ADD,\n ADD_SOLUTION_CARD_SUCCESS,\n SAVE_LAYOUT,\n SAVE_LAYOUT_SUCCESS,\n TOGGLE_SC_WIDGET_STATIC,\n UPDATE_SOLUTION_CARD,\n UPDATE_SOLUTION_CARD_SUCCESS,\n SET_WIDGET_OPTIONS,\n UPDATE_WIDGET,\n} from 'containers/SolutionCenter/constants'\n\nconst initialState = fromJS({\n savingLayout: false,\n addingSolutionCard: false,\n hasUnsavedChanges: false,\n lastSaved: null,\n savingScEdits: false,\n})\n\nconst solutionCenterCardsReducer = handleActions(\n {\n [ADD_SOLUTION_CARD_SUCCESS]: state =>\n state.set('addingSolutionCard', false),\n [HANDLE_SC_ADD]: state => state.set('addingSolutionCard', true),\n [SAVE_LAYOUT]: state => state.set('savingLayout', true),\n [SAVE_LAYOUT_SUCCESS]: state =>\n state\n .set('savingLayout', false)\n .set('hasUnsavedChanges', false)\n .set('lastSavedLayout', moment()),\n [SET_WIDGET_OPTIONS]: state => state.set('hasUnsavedChanges', true),\n [TOGGLE_SC_WIDGET_STATIC]: state => state.set('hasUnsavedChanges', true),\n [UPDATE_SOLUTION_CARD]: state => state.set('savingScEdits', true),\n [UPDATE_SOLUTION_CARD_SUCCESS]: state => state.set('savingScEdits', false),\n [UPDATE_WIDGET]: state => state.set('hasUnsavedChanges', true),\n },\n initialState\n)\n\nexport default solutionCenterCardsReducer\n","/*\n *\n * SolutionCenter actions\n *\n */\n\nimport {\n LOAD_SOLUTION_CARDS,\n ADD_SC_WIDGET,\n TOGGLE_SC_WIDGET_STATIC,\n REMOVE_SC_WIDGET,\n HANDLE_TAB_EDIT,\n HANDLE_TAB_SEQ_CHANGE,\n HANDLE_SC_ADD,\n GET_SOLUTION_CARDS,\n DELETE_SOLUTION_CARD,\n UPDATE_WIDGET,\n UPDATE_WIDGET_SUCCESS,\n UPDATE_EDIT_WIDGET,\n SET_WIDGET_OPTIONS,\n SAVE_LAYOUT,\n SAVE_LAYOUT_SUCCESS,\n REMOVE_WIDGET_SUCCESS,\n ADD_SOLUTION_CARD_SUCCESS,\n DELETE_SOLUTION_CARD_SUCCESS,\n ADD_WIDGET_SUCCESS,\n UPDATE_SOLUTION_CARD,\n UPDATE_SOLUTION_CARD_SUCCESS,\n START_UPDATE_SC_POLL,\n STOP_UPDATE_SC_POLL,\n SET_SHOW_CREATE_WIDGET_MODAL,\n COPY_SOLUTION_CARD,\n COPY_SOLUTION_CARD_SUCCESS,\n} from './constants'\nimport { createAction } from 'redux-actions'\n\nexport const updateWidget = createAction(UPDATE_WIDGET, (cardId, widget) => ({\n cardId,\n widget,\n}))\n\nexport const setWidgetOptions = createAction(\n SET_WIDGET_OPTIONS,\n (cardId, widgetId, options) => ({\n cardId,\n widgetId,\n options,\n })\n)\nexport const deleteSolutionCard = createAction(DELETE_SOLUTION_CARD, srn => ({\n srn,\n}))\nexport const getSolutionCards = createAction(GET_SOLUTION_CARDS)\nexport const handleTabEdit = createAction(\n HANDLE_TAB_EDIT,\n ({ type, index }) => ({\n type,\n index,\n })\n)\nexport const handleTabSeqChange = createAction(\n HANDLE_TAB_SEQ_CHANGE,\n ({ oldIndex, newIndex }) => ({\n oldIndex,\n newIndex,\n })\n)\nexport const handleSCAdd = createAction(HANDLE_SC_ADD, name => ({\n name,\n}))\n\nexport const loadSolutionCards = createAction(LOAD_SOLUTION_CARDS, cards => ({\n cards,\n}))\nexport const addSCWidget = createAction(ADD_SC_WIDGET, (card, widget) => ({\n card,\n widget,\n}))\nexport const toggleSCWidgetStatic = createAction(\n TOGGLE_SC_WIDGET_STATIC,\n (cardId, widgetId) => ({\n cardId,\n widgetId,\n })\n)\nexport const removeSCWidget = createAction(REMOVE_SC_WIDGET, (cardId, srn) => ({\n cardId,\n srn,\n}))\n\nexport const saveLayout = createAction(SAVE_LAYOUT, card => ({ card }))\nexport const saveLayoutSuccess = createAction(SAVE_LAYOUT_SUCCESS)\nexport const removeWidgetSuccess = createAction(REMOVE_WIDGET_SUCCESS)\nexport const addSolutionCardSuccess = createAction(ADD_SOLUTION_CARD_SUCCESS)\nexport const deleteSolutionCardSuccess = createAction(\n DELETE_SOLUTION_CARD_SUCCESS\n)\nexport const addWidgetSuccess = createAction(ADD_WIDGET_SUCCESS)\n\nexport const updateEditWidget = createAction(\n UPDATE_EDIT_WIDGET,\n (card, widget) => ({\n card,\n widget,\n })\n)\n\nexport const updateWidgetSuccess = createAction(UPDATE_WIDGET_SUCCESS)\nexport const updateSolutionCard = createAction(UPDATE_SOLUTION_CARD)\nexport const updateSolutionCardSuccess = createAction(\n UPDATE_SOLUTION_CARD_SUCCESS\n)\nexport const startUpdateScPoll = createAction(START_UPDATE_SC_POLL)\nexport const stopUpdateScPoll = createAction(STOP_UPDATE_SC_POLL)\nexport const setShowCreateWidgetModal = createAction(\n SET_SHOW_CREATE_WIDGET_MODAL\n)\nexport const copySolutionCard = createAction(COPY_SOLUTION_CARD)\nexport const copySolutionCardSuccess = createAction(COPY_SOLUTION_CARD_SUCCESS)\n","import { createSelector } from 'reselect'\nimport { List } from 'immutable'\n\nexport const selectSolutionCenterDomain = state => state.get('solutionCenter')\n\nexport const selectCards = createSelector(\n selectSolutionCenterDomain,\n solutionCenter => solutionCenter.get('solutionCards', List())\n)\n\nexport const selectShowCreateWidgetModal = createSelector(\n selectSolutionCenterDomain,\n solutionCenter => {\n return solutionCenter.get('showCreateWidgetModal')\n }\n)\n\nexport const selectIsScCopySaving = createSelector(\n selectSolutionCenterDomain,\n solutionCenter => solutionCenter.get('copySolutionCardSaving')\n)\n","import { createSelector } from 'reselect'\nimport qs from 'query-string'\nimport { fromJS, List } from 'immutable'\nimport { Map } from 'immutable'\n\nimport { selectCards } from 'containers/SolutionCenter/selectors'\nimport { sortCards } from 'utils/sonraiUtils'\nimport { selectUserProfile } from 'containers/UserProfileData/selectors'\n\nconst selectSolutionCenterCardsDomain = state =>\n state.get('solutionCenterCards') || Map()\n\nexport const selectAddingSolutionCard = createSelector(\n selectSolutionCenterCardsDomain,\n state => state.get('addingSolutionCard')\n)\n\nexport const selectLastSaved = createSelector(\n selectSolutionCenterCardsDomain,\n state => {\n return state.get('lastSaved')\n }\n)\n\nexport const selectHasUnsavedChanges = createSelector(\n selectSolutionCenterCardsDomain,\n solutionCenter => solutionCenter.get('hasUnsavedChanges', false)\n)\n\nexport const selectSavingScEdits = createSelector(\n selectSolutionCenterCardsDomain,\n solutionCenter => solutionCenter.get('savingScEdits', false)\n)\n\nexport const selectSavingLayout = createSelector(\n selectSolutionCenterCardsDomain,\n solutionCenter => solutionCenter.get('savingLayout', false)\n)\n\nexport const selectSortedCards = createSelector(\n [selectCards, selectUserProfile],\n (cards, userProfile) => {\n const hiddenCards = userProfile.get('hiddenSolutionCards', List())\n\n const visibleCards = cards.filterNot(card =>\n hiddenCards.includes(card.get('srn'))\n )\n\n return fromJS(sortCards(visibleCards.toJS()))\n }\n)\n\nexport const selectSortedCardIds = createSelector(\n [selectSortedCards],\n cards => cards.map(card => card.get('srn'))\n)\n\nexport const selectUrlTabId = state => {\n const search = state.getIn(['router', 'location', 'search']) || ''\n return qs.parse(search).tabId\n}\n\nexport const selectSelectedCardIndex = createSelector(\n [selectUrlTabId, selectSortedCards],\n (tabId, cards) => {\n if (tabId) {\n const cardIndex = cards.findIndex(card => card.get('srn') === tabId)\n if (cardIndex < 0) {\n return 0\n } else {\n return cardIndex\n }\n } else {\n return 0\n }\n }\n)\n\nexport const selectSelectedCard = createSelector(\n [selectSortedCards, selectSelectedCardIndex],\n (cards, index) => cards.get(index, Map())\n)\n\nexport const selectSelectedCardSrn = createSelector(\n selectSelectedCard,\n card => card.get('srn')\n)\n\nexport const selectSelectedCardName = createSelector(\n selectSelectedCard,\n card => card.get('name')\n)\n","import React from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { Map } from 'immutable'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\n\nimport TabBar from 'components/TabBar'\nimport ImmutablePureComponent from 'components/ImmutablePureComponent'\nimport { selectUserProfile } from 'containers/UserProfileData/selectors'\nimport { handleTabSeqChange } from 'containers/SolutionCenter/actions'\n\nimport {\n selectSortedCards,\n selectSelectedCard,\n selectSelectedCardIndex,\n} from './selectors'\n\nexport class SolutionCenterTabs extends ImmutablePureComponent {\n getTabs = () => {\n return this.props.solutionCards\n .map(card => {\n return Map({\n id: card.get('srn'),\n text: card.get('name'),\n date: card.get('createdDate'),\n })\n })\n .toJS()\n }\n\n handleChangeTab = index => {\n const selectedSolutionCard = this.props.solutionCards.get(index) || Map()\n this.props.setSolutionCard(selectedSolutionCard.get('srn'))\n }\n\n render() {\n if (this.props.solutionCards.isEmpty()) {\n return null\n }\n\n return (\n \n )\n }\n}\n\nSolutionCenterTabs.propTypes = {\n solutionCards: ImmutablePropTypes.list,\n}\n\nconst mapStateToProps = createStructuredSelector({\n userProfile: selectUserProfile,\n selectedSolutionCard: selectSelectedCard,\n selectedCardIndex: selectSelectedCardIndex,\n solutionCards: selectSortedCards,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n handleTabSeqChange,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(\n mapStateToProps,\n mapDispatchToProps\n)\n\nexport default compose(withConnect)(SolutionCenterTabs)\n","import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n header: {\n id: 'app.containers.AddSolutionCardModal.header',\n defaultMessage: 'Create Solution Card',\n },\n nameLabel: {\n id: 'app.containers.AddSolutionCardModal.nameLabel',\n defaultMessage: 'Name',\n },\n titlePlaceholder: {\n id: 'app.containers.AddSolutionCardModal.titlePlaceholder',\n defaultMessage: 'E.g. Identities',\n },\n titlePlaceholderErr: {\n id: 'app.containers.AddSolutionCardModal.titlePlaceholder',\n defaultMessage: 'Please Enter A Name...',\n },\n createButton: {\n id: 'app.containers.AddSolutionCardModal.createButton',\n defaultMessage: 'Create',\n },\n cancelButton: {\n id: 'app.containers.AddSolutionCardModal.cancelButton',\n defaultMessage: 'Cancel',\n },\n noDup: {\n id: 'app.containers.AddSolutionCardModal.noDup',\n defaultMessage: 'This card name already exists.',\n },\n})\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { FormattedMessage, injectIntl, intlShape } from 'react-intl'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport { Modal, ModalHeader, ModalBody, ModalFooter, Input } from 'reactstrap'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport Button from 'components/Button'\nimport TextLink from 'components/TextLink'\nimport Icon from 'components/Icon'\nimport FormLabel from 'components/FormLabel'\nimport { handleSCAdd } from 'containers/SolutionCenter/actions'\n\nimport { selectAddingSolutionCard, selectSortedCards } from './selectors'\nimport messages from './messages'\n\nexport class ModalAddSolutionCard extends React.Component {\n state = {\n title: '',\n showMessage: false,\n }\n\n styles = {\n description: {\n fontSize: '0.9em',\n },\n }\n\n componentDidUpdate(oldProps) {\n if (oldProps.addingSolutionCard && !this.props.addingSolutionCard) {\n this.props.toggle()\n this.setState({\n title: '',\n })\n }\n }\n\n setTitle = e => {\n this.setState({\n title: e.target.value,\n showMessage: false,\n })\n }\n\n handleReturn = key => {\n if (key === 13) {\n if (this.state.title !== '') {\n this.props.handleSCAdd(this.state.title)\n }\n }\n }\n\n handleSCAdd = () => {\n const title =\n this.state.title !== ''\n ? this.state.title.toLowerCase()\n : this.state.title\n const sortedCardNames = this.props.sortedCards.map(card =>\n card.get('name').toLowerCase()\n )\n if (title !== '' && !sortedCardNames.includes(title)) {\n this.props.handleSCAdd(this.state.title)\n } else {\n this.setState({ showMessage: true })\n }\n }\n\n render() {\n return (\n \n \n \n \n \n

\n Solution Cards enable you to create a visual representation of\n information or details about your cloud account.\n

\n

\n Widgets on the Solution Card display the results of saved searches,\n or framework status and summary information from the Control Center\n

\n \n \n \n this.handleReturn(e.keyCode)}\n />\n
\n \n {this.state.showMessage && (\n this.setState({ title: '' })}\n >\n \n \n )}\n
\n \n \n \n \n {this.props.addingSolutionCard ? (\n \n ) : (\n \n )}\n \n
\n \n
\n )\n }\n}\n\nModalAddSolutionCard.propTypes = {\n addingSolutionCard: PropTypes.bool,\n handleSCAdd: PropTypes.func.isRequired,\n intl: intlShape,\n isOpen: PropTypes.bool,\n toggle: PropTypes.func.isRequired,\n sortedCards: ImmutablePropTypes.iterable,\n}\n\nconst mapStateToProps = createStructuredSelector({\n addingSolutionCard: selectAddingSolutionCard,\n sortedCards: selectSortedCards,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n handleSCAdd,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(\n mapStateToProps,\n mapDispatchToProps\n)\n\nexport default compose(\n withConnect,\n injectIntl\n)(ModalAddSolutionCard)\n","export const TOOLBAR_HEIGHT = 51\n","import React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport qs from 'query-string'\nimport { push } from 'connected-react-router'\nimport { withRouter } from 'react-router'\n\nimport injectReducer from 'utils/injectReducer'\nimport WithPermission from 'containers/PermissionChecker/WithPermission'\nimport BorderlessButton from 'components/BorderlessButton'\nimport Icon from 'components/Icon'\nimport IHelp from 'containers/IHelp'\n\nimport reducer from './reducer'\nimport SolutionCenterTabs from './SolutionCenterTabs'\nimport ModalAddSolutionCard from './ModalAddSolutionCard'\nimport { TOOLBAR_HEIGHT } from './constants'\n\nexport class SolutionCenterCards extends React.Component {\n styles = {\n toolbar: {\n display: 'grid',\n background: '#FFFFFF',\n borderBottom: '1px solid #C0C0C0',\n fontSize: '30px',\n height: `${TOOLBAR_HEIGHT}px`,\n gridTemplateColumns: `1fr auto`,\n gridTemplateAreas: '\"tabs actions\"',\n },\n tabs: {\n gridArea: 'tabs',\n },\n actions: {\n gridArea: 'actions',\n },\n toolbarButton: {\n padding: '0 0.5em',\n },\n }\n\n state = {\n showAddSCModal: false,\n }\n\n toggleAddSCModal = () => {\n this.setState(currentState => ({\n showAddSCModal: !currentState.showAddSCModal,\n }))\n }\n\n setSolutionCard = selectedSolutionCardId => {\n const { push } = this.props\n\n push({\n search: qs.stringify({\n tabId: selectedSolutionCardId,\n }),\n })\n }\n\n render() {\n return (\n \n \n
\n
\n \n \n \n
\n
\n \n\n
\n `/org/${org}/`}\n >\n \n Add Card\n \n \n \n \n \n
\n
\n
\n
\n )\n }\n}\n\nSolutionCenterCards.propTypes = {\n push: PropTypes.func.isRequired,\n}\n\nconst mapStateToProps = createStructuredSelector({})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n push,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nconst withReducer = injectReducer({ key: 'solutionCenterCards', reducer })\n\nexport default compose(\n withReducer,\n withConnect,\n withRouter\n)(SolutionCenterCards)\n","import { createSelector } from 'reselect'\nimport { List, Map } from 'immutable'\n\nimport { selectSavedSearches } from 'containers/SonraiData/selectors'\n\nexport const selectWidgetModalDomain = state => state.get('WidgetModal')\n\nexport const selectWidgetType = createSelector(\n selectWidgetModalDomain,\n state => state.get('widgetType')\n)\n\nexport const selectWidgetTitle = createSelector(\n selectWidgetModalDomain,\n state => state.get('widgetTitle')\n)\n\nexport const selectWidgetSubTitle = createSelector(\n selectWidgetModalDomain,\n state => state.get('widgetSubTitle')\n)\n\nexport const selectWidgetSize = createSelector(\n selectWidgetModalDomain,\n state => state.get('widgetSize', List()).toJS()\n)\n\nexport const selectWidgetSelector = createSelector(\n selectWidgetModalDomain,\n state => state.get('widgetSelector')\n)\n\nexport const selectWidgetResultLayout = createSelector(\n selectWidgetModalDomain,\n state => state.get('widgetResultLayout', Map()).toJS()\n)\n\nexport const selectWidgetPreviewData = createSelector(\n selectWidgetModalDomain,\n state => state.get('widgetPreviewData')\n)\n\nexport const selectWidgetOptions = createSelector(\n selectWidgetModalDomain,\n state => state.get('widgetOptions', Map()).toJS()\n)\n\nexport const selectSearchCardsBySearchId = createSelector(\n selectSavedSearches,\n savedSearches =>\n savedSearches.map(search =>\n search.getIn(['query', 'fields'], Map()).toList()\n )\n)\n\nexport const selectPreviewWidget = createSelector(\n selectWidgetModalDomain,\n state => state.get('previewWidget')\n)\n","/*\n *\n * WidgetModal reducer\n *\n */\n\nimport { fromJS, Map } from 'immutable'\nimport {\n LOAD_WIDGET,\n SET_WIDGET_TITLE,\n SET_WIDGET_SUB_TITLE,\n SET_WIDGET_TYPE,\n SET_WIDGET_SELECTOR,\n SET_WIDGET_FORMATTER,\n SET_WIDGET_SEARCH_FIELD,\n SET_WIDGET_SAVED_SEARCH,\n CLEAR_WIDGET_MODAL,\n SET_WIDGET_SIZE,\n SET_WIDGET_OPTIONS,\n SET_WIDGET_SONRAI_SAVED_SEARCH,\n TOGGLE_PREVIEW_WIDGET,\n} from './constants'\nimport { handleActions } from 'redux-actions'\n\nconst initialState = fromJS({\n widgetFormatter: null,\n widgetResultLayout: {\n indexedSearches: {},\n searchCards: {},\n widgetOptions: {},\n },\n widgetSelector: '',\n widgetSize: [],\n widgetSubTitle: '',\n widgetTitle: '',\n widgetType: null,\n widgetOptions: {\n sonraiSearches: {},\n },\n previewWidget: false,\n})\n\nconst WidgetModalReducer = handleActions(\n {\n [CLEAR_WIDGET_MODAL]: () => initialState,\n [SET_WIDGET_SEARCH_FIELD]: (state, { payload }) => {\n const widgetIndex = payload.index ? payload.index : 'search'\n const searchId = state.getIn([\n 'widgetResultLayout',\n 'indexedSearches',\n widgetIndex,\n ])\n const savedSearch = payload.savedSearches.find(\n search => search.get('sid') === searchId,\n null,\n Map()\n )\n if (payload.field) {\n return state.setIn(\n ['widgetResultLayout', 'searchCards', widgetIndex],\n savedSearch.getIn(['query', 'fields', payload.field], Map())\n )\n } else {\n return state.deleteIn([\n 'widgetResultLayout',\n 'searchCards',\n widgetIndex,\n ])\n }\n },\n [SET_WIDGET_SAVED_SEARCH]: (state, { payload }) => {\n if (payload.search) {\n return state.setIn(\n [\n 'widgetResultLayout',\n 'indexedSearches',\n payload.index ? payload.index : 'search',\n ],\n payload.search\n )\n } else {\n return state.deleteIn([\n 'widgetResultLayout',\n 'indexedSearches',\n payload.index ? payload.index : 'search',\n ])\n }\n },\n [LOAD_WIDGET]: (state, { payload }) => {\n return state\n .set('widgetType', payload.get('type'))\n .set('widgetTitle', payload.get('title'))\n .set('widgetSubTitle', payload.get('subtitle'))\n .set('widgetResultLayout', payload.get('resultLayout'))\n .set('widgetOptions', payload.get('options'))\n .set('widgetSize', payload.get('widgetSize'))\n },\n [SET_WIDGET_SONRAI_SAVED_SEARCH]: (state, { payload }) => {\n if (payload.search) {\n return state.setIn(\n [\n 'widgetOptions',\n 'sonraiSearches',\n payload.index ? payload.index : 'search',\n ],\n payload.search\n )\n } else {\n return state.deleteIn([\n 'widgetOptions',\n 'sonraiSearches',\n payload.index ? payload.index : 'search',\n ])\n }\n },\n [SET_WIDGET_OPTIONS]: (state, { payload }) => {\n return state.mergeIn(\n ['widgetResultLayout', 'widgetOptions'],\n fromJS(payload)\n )\n },\n [SET_WIDGET_TITLE]: (state, { payload }) =>\n state.set('widgetTitle', payload.input),\n [SET_WIDGET_SUB_TITLE]: (state, { payload }) => {\n return state.set('widgetSubTitle', payload.input)\n },\n [SET_WIDGET_TYPE]: (state, { payload }) => {\n return state.set('widgetType', payload.input)\n },\n [SET_WIDGET_SIZE]: (state, { payload }) =>\n state.set('widgetSize', fromJS(payload)),\n [SET_WIDGET_SELECTOR]: (state, { payload }) => {\n return state.set('widgetSelector', payload.input)\n },\n [SET_WIDGET_FORMATTER]: (state, { payload }) => {\n return state.set('widgetFormatter', payload.input)\n },\n [TOGGLE_PREVIEW_WIDGET]: state => {\n return state.set('previewWidget', !state.get('previewWidget'))\n },\n },\n initialState\n)\n\nexport default WidgetModalReducer\n","/*\n *\n * WidgetModal constants\n *\n */\n\nexport const SET_WIDGET_TITLE = 'app/WidgetModal/SET_WIDGET_NAME'\nexport const SET_WIDGET_SUB_TITLE = 'app/WidgetModal/SET_WIDGET_SUB_TITLE'\nexport const SET_WIDGET_TYPE = 'app/WidgetModal/SET_WIDGET_TYPE'\nexport const SET_WIDGET_SELECTOR = 'app/WidgetModal/SET_WIDGET_SELECTOR'\nexport const SET_WIDGET_FORMATTER = 'app/WidgetModal/SET_WIDGET_FORMATTER'\nexport const SET_WIDGET_SEARCH_FIELD = 'app/WidgetModal/SET_WIDGET_SEARCH_FIELD'\nexport const SET_WIDGET_SAVED_SEARCH = 'app/WidgetModal/SET_WIDGET_SAVED_SEARCH'\nexport const CLEAR_WIDGET_MODAL = 'app/WidgetModal/CLEAR_WIDGET_MODAL'\nexport const SET_WIDGET_ONCLICK_SEARCH =\n 'app/WidgetModal/SET_WIDGET_ONCLICK_SEARCH'\nexport const SET_WIDGET_SIZE = 'app/WidgetModal/SET_WIDGET_SIZE'\nexport const SET_WIDGET_OPTIONS = 'app/WidgetModal/SET_WIDGET_OPTIONS'\nexport const GET_SONRAI_SAVED_SEARCHES =\n 'app/WidgetModal/GET_SONRAI_SAVED_SEARCHES'\nexport const SET_SONRAI_SAVED_SEARCHES =\n 'app/WidgetModal/SET_SONRAI_SAVED_SEARCHES'\nexport const SET_WIDGET_SONRAI_SAVED_SEARCH =\n 'app/WidgetModal/SET_WIDGET_SONRAI_SAVED_SEARCH'\nexport const LOAD_WIDGET = 'app/WidgetModal/LOAD_WIDGET'\nexport const WIDGET_SONRAI_MASTER_QUERY = 'WIDGET_SONRAI_MASTER_QUERY'\nexport const TOGGLE_PREVIEW_WIDGET = 'app/WidgetModal/TOGGLE_PREVIEW_WIDGET'\n","/*\n * WidgetModal Messages\n *\n * This contains all the text for the WidgetModal component.\n */\nimport { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n header: {\n id: 'app.containers.WidgetModal.header',\n defaultMessage: 'Add Widget',\n },\n updateHeader: {\n id: 'app.containers.WidgetModal.updateHeader',\n defaultMessage: 'Edit Widget',\n },\n widgetPreview: {\n id: 'app.containers.WidgetModal.widgetPreview',\n defaultMessage: 'Widget Preview',\n },\n})\n","/*\n *\n * WidgetModal actions\n *\n */\n\nimport {\n LOAD_WIDGET,\n SET_WIDGET_TITLE,\n SET_WIDGET_SUB_TITLE,\n SET_WIDGET_TYPE,\n SET_WIDGET_SELECTOR,\n SET_WIDGET_FORMATTER,\n SET_WIDGET_SEARCH_FIELD,\n SET_WIDGET_SAVED_SEARCH,\n CLEAR_WIDGET_MODAL,\n SET_WIDGET_SIZE,\n SET_WIDGET_OPTIONS,\n SET_SONRAI_SAVED_SEARCHES,\n SET_WIDGET_SONRAI_SAVED_SEARCH,\n GET_SONRAI_SAVED_SEARCHES,\n TOGGLE_PREVIEW_WIDGET,\n} from './constants'\nimport { createAction } from 'redux-actions'\n\nexport const clearWidgetModal = createAction(CLEAR_WIDGET_MODAL)\nexport const getSavedSonraiSearches = createAction(GET_SONRAI_SAVED_SEARCHES)\nexport const setSonraiSavedSearches = createAction(\n SET_SONRAI_SAVED_SEARCHES,\n searches => ({\n searches,\n })\n)\n\nexport const setWidgetSavedSearch = createAction(\n SET_WIDGET_SAVED_SEARCH,\n (search, index) => {\n return {\n search,\n index,\n }\n }\n)\n\nexport const setWidgetSonraiSearch = createAction(\n SET_WIDGET_SONRAI_SAVED_SEARCH,\n (search, index) => {\n return {\n search,\n index,\n }\n }\n)\n\nexport const setWidgetSearchField = createAction(\n SET_WIDGET_SEARCH_FIELD,\n (field, index, savedSearches) => ({\n field,\n index,\n savedSearches,\n })\n)\nexport const setWidgetTitle = createAction(SET_WIDGET_TITLE, input => ({\n input,\n}))\nexport const setWidgetSubTitle = createAction(SET_WIDGET_SUB_TITLE, input => ({\n input,\n}))\nexport const setWidgetType = createAction(SET_WIDGET_TYPE, input => ({\n input,\n}))\nexport const setWidgetSelector = createAction(SET_WIDGET_SELECTOR, input => ({\n input,\n}))\nexport const setWidgetFormatter = createAction(SET_WIDGET_FORMATTER, input => ({\n input,\n}))\n\nexport const setWidgetSize = createAction(SET_WIDGET_SIZE)\nexport const setWidgetOptions = createAction(SET_WIDGET_OPTIONS)\nexport const loadWidget = createAction(LOAD_WIDGET)\nexport const togglePreviewWidget = createAction(TOGGLE_PREVIEW_WIDGET)\n","import { all, put, takeLatest } from 'redux-saga/effects'\n\nimport { getClient } from 'apolloClient'\nimport gql from 'graphql-tag'\n\nfunction* mySaga() {\n // yield all(([])\n}\n\nexport default mySaga\n","/**\n *\n * RatioWidget\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { Query } from 'react-apollo'\nimport _ from 'lodash'\nimport gql from 'graphql-tag'\nimport TextLink from 'components/TextLink'\nimport Card, { BottomTitle, CardBody } from 'components/Card'\nimport WidgetCard from 'components/WidgetCard'\nimport { queryHasPivotFilter } from 'query-builder'\nimport { getSearchIdForSonraiSearches } from 'utils/sonraiUtils'\nimport { Map } from 'immutable'\nimport {\n getFields,\n getSearchCard,\n getSelection,\n hasSonraiSearch,\n combineQueries,\n getBareSearchQueryString,\n} from 'query-builder'\n\nconst styles = {\n numerator: {\n fontWeight: '300',\n },\n denominator: {\n color: '#555',\n },\n number: {\n textAlign: 'center',\n },\n percentNumber: {\n fontWeight: '300',\n },\n averageNumber: {\n fontWeight: '300',\n },\n percentSign: {\n fontSize: '80%',\n color: '#555',\n },\n searchLink: {\n fontWeight: '300',\n cursor: 'pointer',\n // marginTop: '-0.5em',\n },\n}\n\nclass RatioWidget extends React.Component {\n getQuery = () => {\n const numQueryConfig = this.getQueryConfig('num')\n const denomQueryConfig = this.getQueryConfig('denom')\n\n return combineQueries('ratioQuery', numQueryConfig, denomQueryConfig)\n }\n\n getQueryConfig = key => {\n if (hasSonraiSearch(this.props.options, key)) {\n return {\n gqlStatement: `\n ${key}: ${getBareSearchQueryString(\n this.props.options.sonraiSearches[key]\n )}`,\n }\n } else {\n return this.getSavedQuery(key)\n }\n }\n\n getSavedQuery = searchIndex => {\n const { getQueryBuilder, savedSearches, resultLayout } = this.props\n\n const fields = getFields(\n savedSearches,\n resultLayout.indexedSearches[searchIndex]\n )\n if (fields.isEmpty()) {\n return {}\n }\n\n const queryBuilder = getQueryBuilder(fields)\n queryBuilder.countsOnly()\n\n const rootField = queryBuilder.fields.find(\n statement => !statement.get('parentId'),\n null,\n Map()\n )\n\n const variables = queryBuilder.getVariables()\n const queryString = queryBuilder.buildPivotableSourceForField(\n rootField.toJS(),\n undefined,\n undefined,\n variables\n )\n\n return {\n gqlStatement: `${searchIndex}: ${queryString}`,\n variables,\n }\n }\n\n getSelectionPath = (searchIndex, data) => {\n if (hasSonraiSearch(this.props.options, searchIndex)) {\n return this.selectFromSonraiSearchData(searchIndex, data)\n } else {\n return this.selectFromSavedSearchData(searchIndex)\n }\n }\n\n selectFromSonraiSearchData = (searchIndex, data) => {\n if (_.isEmpty(data)) {\n return []\n } else {\n let key = Object.keys(data[searchIndex].Query)[0]\n let str = `${searchIndex}.Query.${key}.count`\n\n return str\n }\n }\n\n selectFromSavedSearchData = searchIndex => {\n const fields = getFields(\n this.props.savedSearches,\n this.props.resultLayout.indexedSearches[searchIndex]\n ).toJS()\n\n const searchCard = getSearchCard(this.props.resultLayout, searchIndex)\n\n const path = getSelection(fields, searchCard, 'count')\n path[0] = searchIndex //Root select type becomes aliased to the searchIndex\n return path\n }\n\n getFontSizes = (numerator, denominator) => {\n const width = this.props.layout.w\n const numNumChars = numerator.toString().length\n const numDenomChars = denominator.toString().length + 1\n\n const numDigitsAdjusted = numNumChars + numDenomChars\n let numSize = 70\n let denomSize = 50\n\n let maxDigitsPerWidth = 0.5\n\n while (numDigitsAdjusted > maxDigitsPerWidth * width && numSize > 15) {\n maxDigitsPerWidth = maxDigitsPerWidth + 0.5\n numSize = numSize - 13\n denomSize = denomSize - 9\n }\n\n return {\n num: { fontSize: `${numSize > 12 ? numSize : 12}px` },\n denom: { fontSize: `${denomSize > 12 ? denomSize : 12}px` },\n }\n }\n\n getTitleFontSize = title => {\n const width = this.props.layout.w\n const numChars = title.length\n\n let fontSize = 16\n\n let textToWidthRatio = numChars / width\n\n if (textToWidthRatio > 5) {\n fontSize = 13\n }\n\n return {\n fontSize: `${fontSize}px`,\n }\n }\n\n hasOnclick = () => {\n return (\n !!this.props.resultLayout.indexedSearches.onclick ||\n !!this.props.options.sonraiSearches.sonraionclick\n )\n }\n\n getNumSearchName = () => {\n return hasSonraiSearch(this.props.options, 'num')\n ? this.props.options.sonraiSearches.num\n : this.props.savedSearches.getIn([\n this.props.resultLayout.indexedSearches.num,\n 'name',\n ])\n }\n\n getDenomSearchName = () => {\n return hasSonraiSearch(this.props.options, 'denom')\n ? this.props.options.sonraiSearches.denom\n : this.props.savedSearches.getIn([\n this.props.resultLayout.indexedSearches.denom,\n 'name',\n ])\n }\n\n getTitleSearchName = () => {\n if (this.hasOnclick()) {\n return hasSonraiSearch(this.props.options, 'sonraionclick')\n ? this.props.options.sonraiSearches.sonraionclick\n : this.props.savedSearches.getIn([\n this.props.resultLayout.indexedSearches.onclick,\n 'name',\n ])\n }\n\n return hasSonraiSearch(this.props.options, 'num')\n ? this.props.options.sonraiSearches.num\n : this.props.savedSearches.getIn([\n this.props.resultLayout.indexedSearches.num,\n 'name',\n ])\n }\n\n onClickSearch = type => {\n if (type) {\n this.props.onClickSearch({\n savedSearchId: this.props.resultLayout.indexedSearches[type],\n sonraiSearchName: this.props.options.sonraiSearches[type],\n searchTitle: this.props.title,\n })\n } else if (this.hasOnclick()) {\n this.props.onClickSearch({\n savedSearchId: this.props.resultLayout.indexedSearches.onclick,\n sonraiSearchName: this.props.options.sonraiSearches.sonraionclick,\n searchTitle: this.props.title,\n })\n } else {\n this.props.onClickSearch({\n savedSearchId: this.props.resultLayout.indexedSearches.num,\n sonraiSearchName: this.props.options.sonraiSearches.num,\n searchTitle: this.props.title,\n })\n }\n }\n\n getRatioNumber = (numerator, denominator) => {\n const fontSizes = this.getFontSizes(numerator, denominator)\n return (\n
\n this.onClickSearch('num')}\n >\n \n {numerator}\n \n \n /\n this.onClickSearch('denom')}\n >\n \n {denominator}\n \n \n
\n )\n }\n\n getFontSize = display => {\n const width = this.props.layout.w\n const numChars = display.length\n\n let maxDigitsPerWidth = 1\n let fontSize = 50\n\n while (numChars > maxDigitsPerWidth * width && fontSize > 20) {\n maxDigitsPerWidth++\n fontSize = fontSize - 4\n }\n\n return {\n fontSize: `${fontSize}px`,\n }\n }\n\n getPercentNumber = (numerator, denominator) => {\n let percent = ((numerator / denominator) * 100).toFixed(2)\n const fontSize = this.getFontSize(`${percent}%`)\n if (percent === 'NaN') {\n percent = 0\n }\n if (denominator < 1) {\n percent = 'N/A'\n }\n return (\n this.onClickSearch()}\n >\n \n {percent}\n \n \n {percent !== 0 && percent !== 'N/A' && '%'}\n \n \n )\n }\n\n getAverageNumber = (numerator, denominator) => {\n let avg = (numerator / denominator).toFixed(2)\n const fontSize = this.getFontSize(`${avg}`)\n if (avg === 'NaN') {\n avg = 0\n }\n return (\n this.onClickSearch()}\n >\n {avg}\n \n )\n }\n\n getNumber = data => {\n if (_.isEmpty(data)) {\n return ''\n }\n\n const denomSelection = this.getSelectionPath('denom', data)\n const numSelection = this.getSelectionPath('num', data)\n\n const denominator = _.get(data, denomSelection) || 0\n const numerator = _.get(data, numSelection) || 0\n\n if (\n this.props.resultLayout.widgetOptions &&\n this.props.resultLayout.widgetOptions.displayType === 'percentage'\n ) {\n return this.getPercentNumber(numerator, denominator)\n } else if (\n this.props.resultLayout.widgetOptions &&\n this.props.resultLayout.widgetOptions.displayType === 'average'\n ) {\n return this.getAverageNumber(numerator, denominator)\n } else {\n return this.getRatioNumber(numerator, denominator)\n }\n }\n\n getSearchId = () => {\n const { options, sonraiSearches, resultLayout } = this.props\n let searchObj = Map({ uiSearch: null, advancedSearch: null })\n if (hasSonraiSearch(options, 'sonraionclick')) {\n const searches = getSearchIdForSonraiSearches(options, sonraiSearches)\n searchObj = searchObj.set('advancedSearch', searches)\n } else {\n searchObj = searchObj.set(\n 'uiSearch',\n resultLayout.indexedSearches.onclick\n )\n }\n return searchObj\n }\n\n render() {\n if (this.props.data === undefined) {\n const searchId = this.getSearchId()\n const queryConfig = this.getQuery()\n\n if (!queryConfig.gqlStatement) {\n return (\n \n )\n }\n\n const filtered = queryHasPivotFilter(queryConfig.gqlStatement)\n return (\n \n {({ error, data, refetch, networkStatus }) => {\n return (\n this.onClickSearch()}>\n {this.props.title}\n \n }\n filtered={filtered}\n description={_.get(this.props.resultLayout, [\n 'widgetOptions',\n 'description',\n ])}\n >\n \n
\n {this.getNumber(data)}\n
\n
\n \n this.onClickSearch()}\n >\n {this.props.title}\n \n \n \n )\n }}\n \n )\n } else {\n return (\n \n \n
\n {this.getNumber(this.props.data)}\n
\n
\n \n {this.props.title}\n \n
\n )\n }\n }\n}\n\nRatioWidget.defaultProps = {\n layout: {\n w: 10,\n },\n}\n\nRatioWidget.propTypes = {\n allowDelete: PropTypes.bool,\n allowUpdate: PropTypes.bool,\n disableToolbar: PropTypes.bool,\n data: PropTypes.object,\n getQueryBuilder: PropTypes.func.isRequired,\n layout: PropTypes.shape({\n w: PropTypes.number,\n }),\n onRemove: PropTypes.func.isRequired,\n resultLayout: PropTypes.object.isRequired,\n savedSearches: ImmutablePropTypes.map.isRequired,\n options: PropTypes.shape({\n sonraiSearches: PropTypes.objectOf(PropTypes.string),\n }),\n static: PropTypes.bool.isRequired,\n title: PropTypes.string,\n toggleStatic: PropTypes.func.isRequired,\n onEdit: PropTypes.func,\n onClickSearch: PropTypes.func,\n widget: PropTypes.object,\n sonraiSearches: ImmutablePropTypes.iterable,\n}\n\nexport default RatioWidget\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nconst styles = {\n previewContainer: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n backgroundColor: '#fafafa',\n borderRadius: '5px',\n padding: '2em',\n },\n previewTitle: {\n marginBottom: '1em',\n color: '#aaa',\n },\n}\n\nexport const PreviewContainer = ({ children }) => {\n return (\n
\n

Preview

\n {children}\n
\n )\n}\n\nPreviewContainer.propTypes = {\n children: PropTypes.node,\n}\n\nexport default PreviewContainer\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Input } from 'reactstrap'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { List } from 'immutable'\nimport _ from 'lodash'\nimport FormLabel from 'components/FormLabel'\nimport CombinedSearches from 'components/CombinedSearches'\nimport RatioWidget from 'components/RatioWidget'\nimport PreviewContainer from './PreviewContainer'\n\nconst styles = {\n wrapperWithPreview: {\n display: 'grid',\n gridTemplateColumns: '35% 1fr',\n gridColumnGap: '2em',\n },\n}\nexport class RatioConfig extends React.Component {\n componentDidUpdate() {\n this.updateValidity()\n }\n\n updateValidity = () => {\n const hasNumSonraiSearch = !!this.props.widgetSonraiSearches.num\n const hasNumSavedSearch =\n !!this.props.widgetSavedSearches.num && !!this.props.widgetSearchCards.num\n\n const hasDenomSonraiSearch = !!this.props.widgetSonraiSearches.denom\n const hasDenomSavedSearch =\n !!this.props.widgetSavedSearches.denom &&\n !!this.props.widgetSearchCards.denom\n\n const hasValidNumSearch = hasNumSavedSearch || hasNumSonraiSearch\n const hasValidDenomSearch = hasDenomSavedSearch || hasDenomSonraiSearch\n\n const hasTitle = this.props.widgetTitle\n\n const valid = hasValidNumSearch && hasValidDenomSearch && hasTitle\n this.props.setValidity(valid)\n }\n\n setTitle = e => {\n this.props.setWidgetTitle(e.target.value)\n }\n\n setDescription = e => {\n const string = e.target.value\n\n this.props.setWidgetOptions({\n description: string,\n })\n }\n\n setNumeratorSearch = option => {\n this.props.setWidgetSavedSearch(option ? option.value : null, 'num')\n }\n\n setDenominatorSearch = option => {\n this.props.setWidgetSavedSearch(option ? option.value : null, 'denom')\n }\n\n setOnclickSearch = option => {\n this.props.setWidgetSavedSearch(option ? option.value : null, 'onclick')\n }\n\n setSonraiOnclickSearch = selectedOption => {\n this.props.setWidgetSonraiSearch(\n selectedOption ? selectedOption.value : null,\n 'sonraionclick'\n )\n }\n\n setNumeratorField = option => {\n this.props.setWidgetSearchField(option ? option.value : null, 'num')\n }\n\n setDenominatorField = option => {\n this.props.setWidgetSearchField(option ? option.value : null, 'denom')\n }\n\n updateDisplayType = e => {\n this.props.setWidgetOptions({\n displayType: e.target.value,\n })\n }\n\n setSonraiSearchDenom = selectedOption => {\n this.props.setWidgetSonraiSearch(\n selectedOption ? selectedOption.value : null,\n 'denom'\n )\n }\n\n setSonraiSearchNum = selectedOption => {\n this.props.setWidgetSonraiSearch(\n selectedOption ? selectedOption.value : null,\n 'num'\n )\n }\n\n render() {\n const denominatorSearchId = this.props.widgetSavedSearches['denom']\n const denominatorField = this.props.widgetSearchCards['denom']\n\n const numeratorSearchId = this.props.widgetSavedSearches['num']\n const numeratorField = this.props.widgetSearchCards['num']\n\n const onclickSearchId = this.props.widgetSavedSearches['onclick']\n const sonraiOnclickSearch = this.props.widgetSonraiSearches['sonraionclick']\n\n const numeratorSonraiSearchName = this.props.widgetSonraiSearches['num']\n const denomSonraiSearchName = this.props.widgetSonraiSearches['denom']\n\n const denomSearchFieldsList = this.props.searchCards.get(\n denominatorSearchId,\n List()\n )\n const numSearchFieldsList = this.props.searchCards.get(\n numeratorSearchId,\n List()\n )\n return (\n
\n {this.props.previewWidget && (\n \n \n Widget 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\nRatioConfig.propTypes = {\n getQueryBuilder: PropTypes.func.isRequired,\n previewWidget: PropTypes.bool,\n savedSearches: ImmutablePropTypes.mapOf(\n ImmutablePropTypes.contains({\n sid: PropTypes.string,\n name: PropTypes.string,\n })\n ),\n searchCards: ImmutablePropTypes.mapOf(\n ImmutablePropTypes.contains({\n id: PropTypes.string,\n name: PropTypes.string,\n })\n ),\n setWidgetOptions: PropTypes.func.isRequired,\n setWidgetSavedSearch: PropTypes.func,\n setWidgetSearchField: PropTypes.func,\n setWidgetTitle: PropTypes.func,\n setValidity: PropTypes.func,\n widgetSavedSearches: PropTypes.objectOf(PropTypes.array),\n widgetSearchCards: PropTypes.objectOf(PropTypes.object),\n widgetSonraiSearches: PropTypes.objectOf(PropTypes.string),\n widgetTitle: PropTypes.string,\n widgetOptions: PropTypes.shape({\n description: PropTypes.string,\n displayType: PropTypes.string,\n }),\n savedSonraiSearches: ImmutablePropTypes.iterableOf(\n ImmutablePropTypes.contains({\n sid: PropTypes.string,\n name: PropTypes.string,\n })\n ),\n setWidgetSonraiSearch: PropTypes.func,\n}\n\nexport default RatioConfig\n","import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n noColor: {\n id: 'app.components.ColorPicker.noColor',\n defaultMessage: 'Random Color',\n },\n})\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { TwitterPicker } from 'react-color'\nimport uuid from 'uuid/v4'\nimport { FormattedMessage } from 'react-intl'\n\nimport Popover, { PopoverAnchor, PopoverBody } from 'components/Popover'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport messages from './messages'\n\nconst styles = {\n colorPreview: {\n width: '1em',\n height: '1em',\n border: '1px solid #888',\n display: 'inline-block',\n marginRight: '0.5em',\n borderRadius: '0',\n },\n colorContainer: {\n display: 'flex',\n alignItems: 'center',\n },\n noColor: {\n fontStyle: 'italic',\n color: '#777',\n },\n}\n\nexport class ColorPicker extends React.Component {\n constructor(props) {\n super(props)\n\n this.state = {\n showColorPicker: false,\n }\n\n this.uuid = uuid()\n }\n\n onPickColor = color => {\n this.props.onPickColor(color.hex)\n this.setState({\n showColorPicker: false,\n })\n }\n\n toggleColorPicker = () => {\n this.setState(state => ({\n showColorPicker: !state.showColorPicker,\n }))\n }\n\n onPopoverToggle = newVisibility => {\n this.setState({\n showColorPicker: newVisibility,\n })\n }\n\n render() {\n return (\n
\n \n \n
\n \n\n {this.props.color ? (\n this.props.color\n ) : (\n \n {' '}\n {this.props.noColorMessage || (\n \n )}\n \n )}\n
\n
\n \n \n \n \n
\n )\n }\n}\n\nColorPicker.propTypes = {\n onPickColor: PropTypes.func,\n color: PropTypes.string,\n noColorMessage: PropTypes.string,\n theme: themeShape,\n}\n\nexport default themeable(ColorPicker)\n","import React, { Fragment } from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\nimport { Table, Input, Label } from 'reactstrap'\nimport { List } from 'immutable'\nimport _ from 'lodash'\n\nimport IHelp from 'containers/IHelp'\nimport BigStatWidget from 'components/BigStatWidget'\nimport TextLink from 'components/TextLink'\nimport Button from 'components/Button'\nimport ColorPicker from 'components/ColorPicker'\nimport BorderlessButton from 'components/BorderlessButton'\nimport Icon from 'components/Icon'\nimport FormLabel from 'components/FormLabel'\nimport CombinedSearches from 'components/CombinedSearches'\nimport { BOUNDARY_OPTIONS } from 'appConstants'\nimport PreviewContainer from './PreviewContainer'\n\nconst styles = {\n sectionTitle: {\n fontSize: '1em',\n fontWeight: '400',\n display: 'grid',\n gridTemplateColumns: '1fr auto',\n },\n addThresholdButton: {\n display: 'flex',\n alignItems: 'center',\n },\n addThresholdIcon: {\n marginRight: '0.5em',\n fontSize: '20px',\n },\n colorPreview: {\n width: '1em',\n height: '1em',\n border: '1px solid #888',\n display: 'inline-block',\n marginRight: '0.5em',\n borderRadius: '0',\n },\n cancelAddThreshold: {\n marginLeft: '0.5em',\n },\n colorContainer: {\n display: 'flex',\n alignItems: 'center',\n },\n newThresholdWrapper: {\n display: 'grid',\n gridTemplateColumns: '1fr 1fr',\n },\n newcolorWrapper: {\n margin: '1em 0',\n },\n thresholdButton: {\n marginBottom: '15px',\n marginRight: '10px',\n width: '45%',\n outline: 'none',\n },\n bigCountPreview: {\n minWidth: '225px',\n height: '225px',\n },\n wrapperWithPreview: {\n display: 'grid',\n gridTemplateColumns: '35% 1fr',\n gridColumnGap: '2em',\n },\n config: {\n display: 'grid',\n gridTemplateColumns: '1fr 1fr',\n gridColumnGap: '2em',\n },\n}\n\nexport class BigCountConfig extends React.Component {\n state = {\n showAddThreshold: false,\n startOfThreshold: 0,\n endOfThreshold: 0,\n showColorPicker: false,\n newThresholdColor: '#FFFFFF',\n operatorSign: '',\n operatorVal: 0,\n range: true,\n boundary: false,\n }\n\n componentDidUpdate() {\n this.updateValidity()\n }\n\n updateValidity = () => {\n const hasSonraiSearch = !!this.props.widgetSonraiSearches.bigcountsearch\n const hasSavedSearch =\n !!this.props.widgetSavedSearches.bigcountsearch &&\n !!this.props.widgetSearchCards.bigcountsearch\n const hasTitle = this.props.widgetTitle\n\n const valid = (hasSonraiSearch || hasSavedSearch) && hasTitle\n this.props.setValidity(valid)\n }\n\n setTitle = e => {\n this.props.setWidgetTitle(e.target.value)\n }\n\n selectSavedSearch = selectedOption => {\n this.props.setWidgetSavedSearch(\n selectedOption ? selectedOption.value : null,\n 'bigcountsearch'\n )\n }\n\n selectSearchField = selectedOption => {\n this.props.setWidgetSearchField(\n selectedOption ? selectedOption.value : null,\n 'bigcountsearch'\n )\n }\n\n setSonraiSearch = selectedOption => {\n this.props.setWidgetSonraiSearch(\n selectedOption ? selectedOption.value : null,\n 'bigcountsearch'\n )\n }\n\n setDescription = e => {\n const string = e.target.value\n\n this.props.setWidgetOptions({\n description: string,\n })\n }\n\n removeMarker = index => {\n const thresholds = [...this.props.widgetOptions.thresholds]\n\n thresholds.splice(index, 1)\n this.props.setWidgetOptions({\n thresholds,\n })\n }\n\n handleStartOfThreshold = e => {\n this.setState({\n startOfThreshold: e.target.value,\n })\n }\n\n showColorPicker = () => {\n this.setState({\n showColorPicker: true,\n })\n }\n\n onPickColor = color => {\n this.setState({\n newThresholdColor: color,\n })\n }\n\n toggleColorPicker = () => {\n this.setState(state => ({\n showColorPicker: !state.showColorPicker,\n }))\n }\n\n handleEndOfThreshold = e => {\n this.setState({\n endOfThreshold: e.target.value,\n })\n }\n\n toggleAddThreshold = () => {\n this.setState(state => ({\n showAddThreshold: !state.showAddThreshold,\n }))\n }\n\n handleSelect = event => {\n this.setState({\n operatorSign: event.target.value,\n })\n }\n\n handleOpperator = event => {\n this.setState({\n operatorVal: event.target.value,\n })\n }\n\n handleBoundaryButton = () => {\n this.setState({\n boundary: true,\n range: false,\n newThresholdColor: '#FFFFFF',\n startOfThreshold: 0,\n endOfThreshold: 0,\n operatorSign: BOUNDARY_OPTIONS.GREATER,\n operatorVal: 0,\n })\n }\n\n handleRangeButton = () => {\n this.setState({\n range: true,\n boundary: false,\n newThresholdColor: '#FFFFFF',\n startOfThreshold: 0,\n endOfThreshold: 0,\n operatorSign: '',\n operatorVal: 0,\n })\n }\n\n resetAddThreshold = () => {\n this.setState({\n showAddThreshold: false,\n showColorPicker: false,\n newThresholdColor: '#FFFFFF',\n startOfThreshold: 0,\n endOfThreshold: 0,\n operatorSign: '',\n operatorVal: 0,\n })\n }\n\n addThreshold = type => {\n const options = this.props.widgetOptions || {}\n const thresholds = options.thresholds || []\n\n if (type === 'between') {\n thresholds.push({\n start: this.state.startOfThreshold,\n end: this.state.endOfThreshold,\n color: this.state.newThresholdColor,\n type: type,\n })\n } else {\n thresholds.push({\n operatorSign: this.state.operatorSign,\n operatorVal: this.state.operatorVal,\n color: this.state.newThresholdColor,\n type: type,\n })\n }\n\n this.props.setWidgetOptions({\n thresholds,\n })\n\n this.resetAddThreshold()\n }\n\n renderThresholdsConfig = () => {\n const thresholds = this.props.widgetOptions.thresholds || []\n return (\n \n \n {thresholds.map((threshold, index) => (\n \n {threshold.type === 'between' ? (\n \n \n \n \n \n \n \n ) : (\n \n \n \n \n \n \n )}\n \n ))}\n \n
\n this.removeMarker(index)}\n >\n \n \n {threshold.start}To{threshold.end}\n
\n \n {threshold.color}\n
\n
\n this.removeMarker(index)}\n >\n \n \n {threshold.operatorSign}{threshold.operatorVal}\n
\n \n {threshold.color}\n
\n
\n )\n }\n\n renderNewThresholdConfig = () => {\n return (\n
\n
\n \n Range\n \n \n Boundary\n \n
\n {this.state.range ? (\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.addThreshold(\n this.state.endOfThreshold !== 0 ? 'between' : 'operator'\n )\n }\n >\n Add Threshold\n \n \n Cancel\n \n
\n \n )\n }\n\n renderPreview = () => {\n return (\n \n
\n Widget Title\n )\n }\n />\n
\n
\n )\n }\n\n render() {\n const sonraiSearchName = this.props.widgetSonraiSearches['bigcountsearch']\n const savedSearchId = this.props.widgetSavedSearches['bigcountsearch']\n const savedSearchField = this.props.widgetSearchCards['bigcountsearch']\n const searchFieldsList = this.props.searchCards.get(\n this.props.widgetSavedSearches['bigcountsearch'],\n List()\n )\n\n return (\n
\n {this.props.previewWidget && this.renderPreview()}\n\n
\n
\n \n \n\n \n \n\n \n \n
\n\n
\n

\n Border Color Thresholds\n \n

\n {this.renderThresholdsConfig()}\n {this.state.showAddThreshold ? (\n this.renderNewThresholdConfig()\n ) : (\n \n Add new\n Threshold\n \n )}\n
\n
\n
\n )\n }\n}\n\nBigCountConfig.propTypes = {\n getQueryBuilder: PropTypes.func,\n previewWidget: PropTypes.bool,\n savedSearches: ImmutablePropTypes.iterableOf(\n ImmutablePropTypes.contains({\n sid: PropTypes.string,\n name: PropTypes.string,\n })\n ),\n searchCards: ImmutablePropTypes.mapOf(\n PropTypes.oneOfType([\n ImmutablePropTypes.contains({\n id: PropTypes.string,\n name: PropTypes.string,\n }),\n PropTypes.array,\n ])\n ),\n setWidgetOptions: PropTypes.func,\n setWidgetSavedSearch: PropTypes.func,\n setWidgetSearchField: PropTypes.func,\n setWidgetTitle: PropTypes.func,\n setValidity: PropTypes.func,\n widgetSavedSearches: PropTypes.object,\n widgetSearchCards: PropTypes.object,\n widgetSonraiSearches: PropTypes.object,\n widgetTitle: PropTypes.string,\n widgetOptions: PropTypes.shape({\n thresholds: PropTypes.arrayOf(\n PropTypes.shape({\n start: PropTypes.number,\n end: PropTypes.number,\n color: PropTypes.string,\n })\n ),\n description: PropTypes.string,\n }).isRequired,\n savedSonraiSearches: ImmutablePropTypes.iterableOf(\n ImmutablePropTypes.contains({\n sid: PropTypes.string,\n name: PropTypes.string,\n })\n ),\n setWidgetSonraiSearch: PropTypes.func,\n}\n\nexport default BigCountConfig\n","/**\n *\n * GaugeWidget\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { Gauge } from './gauge.min'\nimport _ from 'lodash'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\n\nclass GaugeComponent extends React.Component {\n constructor(props) {\n super(props)\n this.canvasRef = React.createRef()\n }\n\n waitForRef = () => {\n return new Promise(resolve => {\n const wait = () => {\n if (!this.canvasRef.current) {\n setTimeout(wait, 200)\n return\n }\n\n return resolve()\n }\n\n wait()\n })\n }\n\n componentDidMount() {\n this.waitForRef().then(this.drawGauge)\n }\n\n shouldComponentUpdate(newProps) {\n return (\n !_.isEqual(newProps.markers, this.props.markers) ||\n newProps.value !== this.props.value\n )\n }\n\n componentDidUpdate() {\n if (this.gauge) {\n this.setOptions(this.gauge)\n this.gauge.set(this.props.value) // set actual value\n this.gauge.render()\n }\n }\n\n setOptions = gauge => {\n const opts = {\n angle: 0, // The span of the gauge arc\n lineWidth: 0.3, // The line thickness\n radiusScale: 0.8,\n pointer: {\n length: 0.5, // // Relative to gauge radius\n strokeWidth: 0.035, // The thickness\n color: '#333', // Fill color\n hoveredColor: '#000000',\n valueColor: this.props.theme.primary,\n valueCircleColor: this.props.theme.secondary,\n },\n limitMax: true, // If false, max value increases automatically if value > maxValue\n limitMin: true, // If true, the min value of the gauge will be fixed\n highDpiSupport: true, // High resolution support\n staticZones: this.props.markers.map(marker => {\n return {\n strokeStyle: marker.color,\n min: marker.start,\n max: marker.end,\n }\n }),\n tipLabel: true,\n }\n\n gauge.setOptions(opts)\n }\n\n drawGauge = () => {\n if (!this.gauge && this.canvasRef.current) {\n const ref = this.canvasRef.current\n\n var gauge = new Gauge(ref)\n this.setOptions(gauge)\n\n gauge.maxValue = 100\n gauge.setMinValue(0)\n gauge.animationSpeed = 32\n gauge.set(this.props.value)\n gauge.render()\n\n this.gauge = gauge\n }\n }\n\n render() {\n return (\n \n )\n }\n}\n\nGaugeComponent.propTypes = {\n markers: PropTypes.arrayOf(\n PropTypes.shape({\n start: PropTypes.number,\n end: PropTypes.number,\n color: PropTypes.string,\n })\n ),\n onClick: PropTypes.func,\n value: PropTypes.number,\n theme: themeShape,\n}\n\nexport default themeable(GaugeComponent)\n","/**\n *\n * GaugeWidget\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { Query } from 'react-apollo'\nimport _ from 'lodash'\nimport gql from 'graphql-tag'\nimport Gauge from './Gauge'\nimport uuid from 'uuid/v4'\n\nimport TextLink from 'components/TextLink'\nimport Card, { BottomTitle, CardBody } from 'components/Card'\nimport WidgetCard from 'components/WidgetCard'\nimport { queryHasPivotFilter } from 'query-builder'\nimport { getSearchIdForSonraiSearches } from 'utils/sonraiUtils'\nimport { Map } from 'immutable'\nimport {\n getFields,\n getSearchCard,\n getSelection,\n hasSonraiSearch,\n combineQueries,\n getBareSearchQueryString,\n} from 'query-builder'\n\nclass GaugeWidget extends React.Component {\n constructor(props) {\n super(props)\n this.uuid = uuid()\n }\n\n getQuery = () => {\n const numQueryConfig = this.getQueryConfig('num')\n const denomQueryConfig = this.getQueryConfig('denom')\n\n return combineQueries('gaugeQuery', numQueryConfig, denomQueryConfig)\n }\n\n getQueryConfig = key => {\n if (hasSonraiSearch(this.props.options, key)) {\n return {\n gqlStatement: `\n ${key}: ${getBareSearchQueryString(\n this.props.options.sonraiSearches[key]\n )}\n `,\n }\n } else {\n return this.getSavedQuery(key)\n }\n }\n\n getSavedQuery = searchIndex => {\n const { getQueryBuilder, savedSearches, resultLayout } = this.props\n\n const fields = getFields(\n savedSearches,\n resultLayout.indexedSearches[searchIndex]\n )\n if (fields.isEmpty()) {\n return {}\n }\n\n const queryBuilder = getQueryBuilder(fields)\n queryBuilder.countsOnly()\n\n const rootField = queryBuilder.fields.find(\n statement => !statement.get('parentId'),\n null,\n Map()\n )\n\n const variables = queryBuilder.getVariables()\n const queryString = queryBuilder.buildPivotableSourceForField(\n rootField.toJS(),\n undefined,\n undefined,\n variables\n )\n\n return {\n gqlStatement: `${searchIndex}: ${queryString}`,\n variables,\n }\n }\n\n hasOnclick = () => {\n return (\n !!this.props.resultLayout.indexedSearches.onclick ||\n !!this.props.options.sonraiSearches.sonraionclick\n )\n }\n\n onClickSearch = () => {\n if (this.hasOnclick()) {\n this.props.onClickSearch({\n savedSearchId: this.props.resultLayout.indexedSearches.onclick,\n sonraiSearchName: this.props.options.sonraiSearches.sonraionclick,\n searchTitle: this.props.title,\n })\n }\n }\n\n getTitleSearchName = () => {\n if (this.hasOnclick()) {\n return hasSonraiSearch(this.props.options, 'sonraionclick')\n ? this.props.options.sonraiSearches.sonraionclick\n : this.props.savedSearches.getIn([\n this.props.resultLayout.indexedSearches.onclick,\n 'name',\n ])\n }\n }\n\n getSelection = (searchIndex, data) => {\n if (hasSonraiSearch(this.props.options, searchIndex)) {\n return this.selectFromSonraiSearchData(searchIndex, data)\n } else {\n return this.selectFromSavedSearchData(searchIndex)\n }\n }\n\n selectFromSonraiSearchData = (searchIndex, data) => {\n if (\n _.isEmpty(data) ||\n _.isEmpty(data[searchIndex]) ||\n _.isEmpty(data[searchIndex].Query)\n ) {\n return []\n } else {\n let key = Object.keys(data[searchIndex].Query)[0]\n let str = `${searchIndex}.Query.${key}.count`\n\n return str\n }\n }\n\n selectFromSavedSearchData = searchIndex => {\n const fields = getFields(\n this.props.savedSearches,\n this.props.resultLayout.indexedSearches[searchIndex]\n ).toJS()\n\n const searchCard = getSearchCard(this.props.resultLayout, searchIndex)\n\n const path = getSelection(fields, searchCard, 'count')\n path[0] = searchIndex //Root select type becomes aliased to the searchIndex\n return path\n }\n\n getPercentValue = data => {\n const denomSelection = this.getSelection('denom', data)\n const numSelection = this.getSelection('num', data)\n\n const total = _.get(data, denomSelection) || 0\n const numerator = _.get(data, numSelection) || 0\n\n if (total === 0) {\n return 0\n }\n\n const value = (numerator / total) * 100\n\n return value > 100 ? 100 : value\n }\n\n getMarkers = () => {\n const { resultLayout } = this.props\n\n const widgetOptions = resultLayout.widgetOptions || {}\n const configuredMarkers = widgetOptions.slices || []\n\n const markers = configuredMarkers.map((slice, index) => {\n const previousVal = index > 0 ? configuredMarkers[index - 1].marker : 0\n return {\n start: previousVal,\n end: slice.marker,\n color: slice.color,\n }\n })\n\n // const gaugeLabels = configuredMarkers.map((slice, index) => {\n // const previousVal = index > 0 ? configuredMarkers[index - 1].marker : 0\n // return `${previousVal}% - ${slice.marker}%`\n // })\n\n return markers\n }\n\n getSearchId = () => {\n const { options, sonraiSearches, resultLayout } = this.props\n let searchObj = Map({ uiSearch: null, advancedSearch: null })\n if (hasSonraiSearch(options, 'sonraionclick')) {\n const searches = getSearchIdForSonraiSearches(options, sonraiSearches)\n searchObj = searchObj.set('advancedSearch', searches)\n } else {\n searchObj = searchObj.set(\n 'uiSearch',\n resultLayout.indexedSearches.onclick\n )\n }\n return searchObj\n }\n\n render() {\n if (this.props.data === undefined) {\n const searchId = this.getSearchId()\n const queryConfig = this.getQuery()\n\n if (!queryConfig.gqlStatement) {\n return (\n \n )\n }\n\n const filtered = queryHasPivotFilter(queryConfig.gqlStatement)\n return (\n \n {({ error, data, refetch, networkStatus }) => {\n const percentValue = this.getPercentValue(data)\n\n return (\n \n {this.props.title}\n \n }\n filtered={filtered}\n error={error}\n description={_.get(this.props.resultLayout, [\n 'widgetOptions',\n 'description',\n ])}\n >\n \n \n \n \n \n {this.props.title}\n \n \n \n )\n }}\n \n )\n } else {\n return (\n \n \n \n \n \n {this.props.title}\n \n \n )\n }\n }\n}\n\nGaugeWidget.propTypes = {\n allowDelete: PropTypes.bool,\n allowUpdate: PropTypes.bool,\n data: PropTypes.number,\n disableToolbar: PropTypes.bool,\n getQueryBuilder: PropTypes.func.isRequired,\n onRemove: PropTypes.func.isRequired,\n options: PropTypes.object,\n resultLayout: PropTypes.shape({\n indexedSearches: PropTypes.objectOf(PropTypes.string).isRequired,\n widgetOptions: PropTypes.shape({\n slices: PropTypes.arrayOf(\n PropTypes.shape({\n marker: PropTypes.number.isRequired,\n color: PropTypes.string,\n })\n ),\n checkBoxValue: PropTypes.string,\n }).isRequired,\n }).isRequired,\n savedSearches: ImmutablePropTypes.map.isRequired,\n static: PropTypes.bool,\n title: PropTypes.string,\n toggleStatic: PropTypes.func.isRequired,\n onClickSearch: PropTypes.func,\n onEdit: PropTypes.func,\n sonraiSearches: ImmutablePropTypes.iterable,\n widget: PropTypes.object,\n}\n\nexport default GaugeWidget\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Input, Label } from 'reactstrap'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { List } from 'immutable'\nimport { Table, Form } from 'reactstrap'\nimport _ from 'lodash'\n\nimport TextLink from 'components/TextLink'\nimport Button from 'components/Button'\nimport ColorPicker from 'components/ColorPicker'\nimport BorderlessButton from 'components/BorderlessButton'\nimport Icon from 'components/Icon'\nimport CombinedSearches from 'components/CombinedSearches'\nimport FormLabel from 'components/FormLabel'\nimport GaugeWidget from 'components/GaugeWidget'\nimport PreviewContainer from './PreviewContainer'\n\nconst styles = {\n cancelAddSlice: {\n marginLeft: '0.5em',\n },\n container: {\n display: 'grid',\n gridTemplateColumns: '50% 1fr',\n gridColumnGap: '1em',\n },\n sectionTitle: {\n fontSize: '1em',\n fontWeight: '400',\n margin: '0',\n padding: '1em 0 0 0',\n },\n colorContainer: {\n display: 'flex',\n alignItems: 'center',\n },\n addSliceButton: {\n display: 'flex',\n alignItems: 'center',\n },\n addSliceIcon: {\n marginRight: '0.5em',\n fontSize: '20px',\n },\n configs: {\n marginTop: '1em',\n backgroundColor: '#fff',\n borderBottom: '1px solid #dee2e6',\n },\n addMarkerContainer: {\n display: 'grid',\n gridTemplateColumns: '30% 1fr',\n padding: '0.5em 0',\n },\n markerInput: {\n maxWidth: '100px',\n },\n wrapperWithPreview: {\n display: 'grid',\n gridTemplateColumns: '35% 1fr',\n gridColumnGap: '2em',\n },\n config: {\n display: 'grid',\n gridTemplateColumns: '1fr 1fr',\n gridColumnGap: '2em',\n },\n}\n\nexport class GaugeConfig extends React.Component {\n constructor(props) {\n super(props)\n\n !this.props.editMode\n ? this.props.setWidgetOptions({\n slices: [{ marker: 100 }],\n checkBoxValue: '',\n })\n : null\n\n this.state = {\n showAddSlice: false,\n newSliceMarker: '',\n newSliceColor: '',\n denom: false,\n num: false,\n }\n }\n\n componentDidUpdate() {\n this.updateValidity()\n }\n\n updateValidity = () => {\n const hasNumSonraiSearch = !!this.props.widgetSonraiSearches.num\n const hasNumSavedSearch =\n !!this.props.widgetSavedSearches.num && !!this.props.widgetSearchCards.num\n\n const hasDenomSonraiSearch = !!this.props.widgetSonraiSearches.denom\n const hasDenomSavedSearch =\n !!this.props.widgetSavedSearches.denom &&\n !!this.props.widgetSearchCards.denom\n\n const hasValidNumSearch = hasNumSavedSearch || hasNumSonraiSearch\n const hasValidDenomSearch = hasDenomSavedSearch || hasDenomSonraiSearch\n\n const hasTitle = this.props.widgetTitle\n\n const valid = hasValidNumSearch && hasValidDenomSearch && hasTitle\n this.props.setValidity(valid)\n }\n\n setTitle = e => {\n this.props.setWidgetTitle(e.target.value)\n }\n\n setDescription = e => {\n const string = e.target.value\n\n this.props.setWidgetOptions({\n description: string,\n })\n }\n\n setNumeratorSearch = option => {\n this.props.setWidgetSavedSearch(option ? option.value : null, 'num')\n }\n\n setDenominatorSearch = option => {\n this.props.setWidgetSavedSearch(option ? option.value : null, 'denom')\n }\n\n setOnclickSearch = option => {\n this.props.setWidgetSavedSearch(option ? option.value : null, 'onclick')\n }\n\n setSonraiOnclickSearch = selectedOption => {\n this.props.setWidgetSonraiSearch(\n selectedOption ? selectedOption.value : null,\n 'sonraionclick'\n )\n }\n\n setNumeratorField = option => {\n this.props.setWidgetSearchField(option ? option.value : null, 'num')\n }\n\n setDenominatorField = option => {\n this.props.setWidgetSearchField(option ? option.value : null, 'denom')\n }\n\n setSonraiSearchDenom = selectedOption => {\n this.props.setWidgetSonraiSearch(\n selectedOption ? selectedOption.value : null,\n 'denom'\n )\n }\n\n setSonraiSearchNum = selectedOption => {\n this.props.setWidgetSonraiSearch(\n selectedOption ? selectedOption.value : null,\n 'num'\n )\n }\n\n editSliceColor = (sliceId, newColor) => {\n const slices = [...this.props.widgetOptions.slices]\n slices[sliceId].color = newColor\n\n this.props.setWidgetOptions({\n ...this.props.widgetOptions,\n slices,\n })\n }\n\n renderSlicesConfig = () => {\n const slices = this.props.widgetOptions.slices || []\n return (\n \n \n {slices.map((slice, index) => (\n \n \n \n\n \n \n ))}\n \n
\n = 100}\n onClick={() => this.removeMarker(index)}\n >\n \n \n Ending at {slice.marker}%\n \n
\n )\n }\n\n removeMarker = index => {\n const slices = [...this.props.widgetOptions.slices]\n\n if (slices[index].marker === 100) {\n return\n }\n\n slices.splice(index, 1)\n this.props.setWidgetOptions({\n ...this.props.widgetOptions,\n slices,\n })\n }\n\n addMarker = () => {\n const value = parseInt(this.state.newSliceMarker)\n if (value < 0 || value > 100) {\n return\n }\n\n const color = this.state.newSliceColor\n\n const slices = [...this.props.widgetOptions.slices]\n\n slices.push({\n marker: value,\n color,\n })\n\n slices.sort((a, b) => a.marker - b.marker)\n\n this.props.setWidgetOptions({\n ...this.props.widgetOptions,\n slices,\n })\n\n this.resetAddSlice()\n }\n\n toggleAddSlice = () => {\n this.setState(state => ({\n showAddSlice: !state.showAddSlice,\n }))\n }\n\n resetAddSlice = () => {\n this.setState({\n showAddSlice: false,\n newSliceMarker: '',\n newSliceColor: '',\n })\n }\n\n setNewSliceMarker = e => {\n const intValue = parseInt(e.target.value)\n if (intValue > 100 || intValue < 0) {\n return\n }\n\n this.setState({\n newSliceMarker: e.target.value,\n })\n }\n\n onPickColor = color => {\n this.setState({\n newSliceColor: color,\n })\n }\n\n renderAddNewSlice = () => {\n return (\n
\n
\n \n
\n \n
\n
\n\n
\n \n \n
\n\n \n Add Slice\n \n \n Cancel\n \n \n )\n }\n\n render() {\n const denominatorSearchId = this.props.widgetSavedSearches['denom']\n const denominatorField = this.props.widgetSearchCards['denom']\n\n const numeratorSearchId = this.props.widgetSavedSearches['num']\n const numeratorField = this.props.widgetSearchCards['num']\n\n const onclickSearchId = this.props.widgetSavedSearches['onclick']\n const sonraiOnclickSearch = this.props.widgetSonraiSearches['sonraionclick']\n\n const numeratorSonraiSearchName = this.props.widgetSonraiSearches['num']\n const denomSonraiSearchName = this.props.widgetSonraiSearches['denom']\n\n const denomSearchFieldsList = this.props.searchCards.get(\n denominatorSearchId,\n List()\n )\n const numSearchFieldsList = this.props.searchCards.get(\n numeratorSearchId,\n List()\n )\n\n return (\n
\n {this.props.previewWidget && (\n \n \n Widget 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

Slices

\n {this.renderSlicesConfig()}\n {this.state.showAddSlice ? (\n this.renderAddNewSlice()\n ) : (\n \n Add new\n slice\n \n )}\n
\n
\n \n )\n }\n}\n\nGaugeConfig.propTypes = {\n editMode: PropTypes.bool,\n getQueryBuilder: PropTypes.func,\n previewWidget: PropTypes.bool,\n savedSearches: ImmutablePropTypes.mapOf(\n ImmutablePropTypes.contains({\n sid: PropTypes.string,\n name: PropTypes.string,\n })\n ),\n searchCards: ImmutablePropTypes.mapOf(\n ImmutablePropTypes.contains({\n id: PropTypes.string,\n name: PropTypes.string,\n })\n ),\n setWidgetOptions: PropTypes.func.isRequired,\n setWidgetSavedSearch: PropTypes.func.isRequired,\n setWidgetSearchField: PropTypes.func.isRequired,\n setWidgetTitle: PropTypes.func.isRequired,\n setValidity: PropTypes.func.isRequired,\n widgetSavedSearches: PropTypes.objectOf(PropTypes.array),\n widgetSearchCards: PropTypes.objectOf(PropTypes.object),\n widgetTitle: PropTypes.string,\n widgetOptions: PropTypes.shape({\n slices: PropTypes.array,\n checkBoxValue: PropTypes.string,\n description: PropTypes.string,\n }).isRequired,\n widgetSonraiSearches: PropTypes.object,\n savedSonraiSearches: ImmutablePropTypes.iterableOf(\n ImmutablePropTypes.contains({\n sid: PropTypes.string,\n name: PropTypes.string,\n })\n ),\n setWidgetSonraiSearch: PropTypes.func,\n}\n\nexport default GaugeConfig\n","import React, { Fragment } from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\nimport { Input } from 'reactstrap'\nimport { List } from 'immutable'\nimport CombinedSearches from 'components/CombinedSearches'\nimport FormLabel from 'components/FormLabel'\nimport { REGION_MAP_SEARCH_NAME, SUPPORT_EMAIL } from 'appConstants'\n\nexport class RegionsWidgetConfig extends React.Component {\n componentDidUpdate() {\n this.updateValidity()\n }\n\n updateValidity = () => {\n const hasSonraiSearch = !!this.props.widgetSonraiSearches.search\n const hasSavedSearch = !!this.props.widgetSavedSearches.search\n const hasTitle = this.props.widgetTitle\n\n const valid = (hasSonraiSearch || hasSavedSearch) && hasTitle\n this.props.setValidity(valid)\n }\n\n setTitle = e => {\n this.props.setWidgetTitle(e.target.value)\n }\n\n setDescription = e => {\n const string = e.target.value\n\n this.props.setWidgetOptions({\n description: string,\n })\n }\n\n setSubTitle = e => {\n this.props.setWidgetSubTitle(e.target.value)\n }\n\n setSavedSearch = selectedOption => {\n this.props.setWidgetSavedSearch(\n selectedOption ? selectedOption.value : null,\n 'search'\n )\n }\n\n selectSearchField = selectedOption => {\n this.props.setWidgetSearchField(\n selectedOption ? selectedOption.value : null,\n 'search'\n )\n }\n\n setSonraiSearch = selectedOption => {\n this.props.setWidgetSonraiSearch(\n selectedOption ? selectedOption.value : null,\n 'search'\n )\n }\n\n render() {\n const sonraiSearchName = this.props.widgetSonraiSearches['search']\n\n const savedSearchId = this.props.widgetSavedSearches['search']\n const savedSearchField = this.props.widgetSearchCards['search']\n const searchFieldsList = this.props.searchCards.get(\n this.props.widgetSavedSearches['search'],\n List()\n )\n\n return (\n \n \n \n\n \n \n\n \n \n\n \n

\n Note: This widget only supports resources with a region property. For\n help, please contact support\n

\n \n search.get('name').includes(REGION_MAP_SEARCH_NAME)\n )}\n setSonraiSearch={this.setSonraiSearch}\n selectedSonraiValue={sonraiSearchName}\n name=\"widgetSearch\"\n savedSearches={this.props.savedSearches}\n selectedSearchId={savedSearchId}\n selectSavedSearch={this.setSavedSearch}\n savedSearchDisabled={!!sonraiSearchName}\n selectedFieldId={savedSearchField ? savedSearchField.id : null}\n searchCards={searchFieldsList}\n searchFieldDisabled={searchFieldsList.isEmpty()}\n selectSearchField={this.selectSearchField}\n searchFieldRequired\n />\n
\n )\n }\n}\n\nRegionsWidgetConfig.propTypes = {\n savedSearches: ImmutablePropTypes.iterable,\n savedSonraiSearches: ImmutablePropTypes.iterableOf(\n ImmutablePropTypes.contains({\n sid: PropTypes.string,\n name: PropTypes.string,\n })\n ),\n searchCards: ImmutablePropTypes.map,\n setWidgetOptions: PropTypes.func,\n setWidgetSavedSearch: PropTypes.func,\n setWidgetSearchField: PropTypes.func,\n setWidgetSonraiSearch: PropTypes.func,\n setWidgetSubTitle: PropTypes.func,\n setWidgetTitle: PropTypes.func,\n setValidity: PropTypes.func,\n widgetOptions: PropTypes.shape({\n description: PropTypes.string,\n }),\n widgetSavedSearches: PropTypes.objectOf(PropTypes.array),\n widgetSearchCards: PropTypes.objectOf(PropTypes.object),\n widgetSonraiSearches: PropTypes.object,\n widgetSubTitle: PropTypes.string,\n widgetTitle: PropTypes.string,\n}\n\nexport default RegionsWidgetConfig\n","import React from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\nimport { Input } from 'reactstrap'\nimport { List } from 'immutable'\nimport CombinedSearches from 'components/CombinedSearches'\nimport FormLabel from 'components/FormLabel'\n\nexport class TableConfig extends React.Component {\n componentDidUpdate() {\n this.updateValidity()\n }\n\n updateValidity = () => {\n const hasSonraiSearch = !!this.props.widgetSonraiSearches.table\n const hasSavedSearch = !!this.props.widgetSavedSearches.table\n const hasTitle = this.props.widgetTitle\n\n const valid = (hasSonraiSearch || hasSavedSearch) && hasTitle\n this.props.setValidity(valid)\n }\n\n setTitle = e => {\n this.props.setWidgetTitle(e.target.value)\n }\n\n setDescription = e => {\n const string = e.target.value\n\n this.props.setWidgetOptions({\n description: string,\n })\n }\n\n setSubTitle = e => {\n this.props.setWidgetSubTitle(e.target.value)\n }\n\n setSavedSearch = selectedOption => {\n this.props.setWidgetSavedSearch(\n selectedOption ? selectedOption.value : null,\n 'table'\n )\n }\n\n setSonraiSearch = selectedOption => {\n this.props.setWidgetSonraiSearch(\n selectedOption ? selectedOption.value : null,\n 'table'\n )\n }\n\n setSearchField = selectedOption => {\n this.props.setWidgetSearchField(\n selectedOption ? selectedOption.value : null,\n 'table'\n )\n }\n\n render() {\n const sonraiSearchName = this.props.widgetSonraiSearches['table']\n const savedSearchId = this.props.widgetSavedSearches['table']\n const savedSearchField = this.props.widgetSearchCards['table']\n const searchFieldsList = this.props.searchCards.get(\n this.props.widgetSavedSearches['table'],\n List()\n )\n\n return (\n
\n \n \n\n \n \n\n \n \n\n \n \n
\n )\n }\n}\n\nTableConfig.propTypes = {\n savedSearches: ImmutablePropTypes.iterableOf(\n ImmutablePropTypes.contains({\n sid: PropTypes.string,\n name: PropTypes.string,\n })\n ),\n savedSonraiSearches: ImmutablePropTypes.iterableOf(\n ImmutablePropTypes.contains({\n sid: PropTypes.string,\n name: PropTypes.string,\n })\n ),\n searchCards: ImmutablePropTypes.mapOf(\n PropTypes.oneOfType([\n ImmutablePropTypes.contains({\n id: PropTypes.string,\n name: PropTypes.string,\n }),\n PropTypes.array,\n ])\n ),\n setWidgetOptions: PropTypes.func,\n setWidgetSavedSearch: PropTypes.func,\n setWidgetSonraiSearch: PropTypes.func,\n setWidgetSearchField: PropTypes.func,\n setWidgetSubTitle: PropTypes.func,\n setWidgetTitle: PropTypes.func,\n setValidity: PropTypes.func,\n widgetOptions: PropTypes.shape({\n description: PropTypes.string,\n }),\n widgetSavedSearches: PropTypes.object,\n widgetSonraiSearches: PropTypes.object,\n widgetSearchCards: PropTypes.object,\n widgetSubTitle: PropTypes.string,\n widgetTitle: PropTypes.string,\n}\n\nexport default TableConfig\n","/**\n *\n * ListWidget\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport _ from 'lodash'\nimport { Map } from 'immutable'\nimport { Query } from 'react-apollo'\nimport gql from 'graphql-tag'\nimport TextLink from 'components/TextLink'\nimport Card, { TopTitle, CardBody } from 'components/Card'\nimport WidgetCard from 'components/WidgetCard'\nimport {\n getFields,\n getTableSavedSearchQuery,\n getSonraiSearchQuery,\n getSearchCard,\n hasSonraiSearch,\n getSonraiSearchData,\n getSelection,\n getWidgetResultsExplorerSavedSearchQuery,\n} from 'query-builder'\nimport { getTypeFromSrn } from 'utils/graphDataUtils'\nimport { getSearchIdForSonraiSearches } from 'utils/sonraiUtils'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport { queryHasPivotFilter } from 'query-builder'\nimport EmptyWidgetResults from 'components/EmptyWidgetResults'\nimport { exists } from 'utils/sonraiUtils'\n\nconst styles = {\n title: {\n fontSize: '20px',\n fontWeight: '300',\n borderBottom: '1px solid #eee',\n cursor: 'pointer',\n marginRight: '0px',\n },\n containerStyle: {\n overflow: 'auto',\n },\n listContainer: {\n alignItems: 'start',\n },\n list: {\n margin: 0,\n padding: 0,\n width: '100%',\n },\n listItem: {\n listStyleType: 'none',\n padding: '0.5em 1em',\n fontSize: '14px',\n },\n listNumber: {\n color: '#888',\n fontSize: '1.2em',\n },\n noitems: {\n color: '#888',\n textAlign: 'center',\n marginTop: '1em',\n },\n}\n\nclass ListWidget extends React.Component {\n constructor(props) {\n super(props)\n\n this.state = {\n hoveredId: null,\n }\n }\n\n renderListItems = data => {\n if (!data || data.length === 0) {\n return \n }\n\n let numberOfItems =\n this.props.resultLayout &&\n exists(this.props.resultLayout.widgetOptions.items)\n ? this.props.resultLayout.widgetOptions.items\n : data.length\n\n let cutArr = data.slice(0, numberOfItems)\n return cutArr.map((item, index) => (\n \n {index + 1}. \n \n {item.label}\n \n \n ))\n }\n\n setHover = newId => {\n this.setState({\n hoveredId: newId,\n })\n }\n\n handleOnClick = srn => {\n if (srn && this.props.onClickNodeView) {\n this.props.onClickNodeView(srn, getTypeFromSrn(srn))\n }\n }\n\n getQuery = () => {\n if (hasSonraiSearch(this.props.options, 'list')) {\n return getSonraiSearchQuery(this.props.options.sonraiSearches.list)\n } else {\n return getTableSavedSearchQuery(\n this.props.getQueryBuilder,\n this.props.savedSearches,\n this.props.resultLayout.indexedSearches.list,\n { limit: this.props.resultLayout.widgetOptions.items }\n )\n }\n }\n\n getData = data => {\n if (!_.isEmpty(this.props.options.sonraiSearches.list)) {\n return this.getDataFromSonraiSearch(data)\n } else {\n const fields = getFields(\n this.props.savedSearches,\n this.props.resultLayout.indexedSearches.list\n ).toJS()\n const searchCard = getSearchCard(this.props.resultLayout, 'list')\n const selection = getSelection(fields, searchCard, 'items')\n const savedSearchResults = _.get(data, selection) || []\n\n const property = this.props.resultLayout.widgetOptions.properties.value\n\n return savedSearchResults.map(item => ({\n label: item[property],\n srn: item.srn,\n }))\n }\n }\n\n getDataFromSonraiSearch = data => {\n const searchData = getSonraiSearchData(data)\n if (searchData.items) {\n const property = this.props.resultLayout.widgetOptions.properties.value\n return searchData.items.map(item => ({\n label: item[property],\n srn: item.srn,\n }))\n }\n }\n\n getSearchName = () => {\n if (!this.props.savedSearches) {\n return\n }\n\n return hasSonraiSearch(this.props.options, 'list')\n ? this.props.options.sonraiSearches.list\n : this.props.savedSearches.getIn([\n this.props.resultLayout.indexedSearches.list,\n 'name',\n ])\n }\n\n getExploreResultsQuery = () => {\n if (hasSonraiSearch(this.props.options, 'list')) {\n return getSonraiSearchQuery(this.props.options.sonraiSearches.list)\n } else {\n return getWidgetResultsExplorerSavedSearchQuery(\n this.props.getQueryBuilder,\n this.props.savedSearches,\n this.props.resultLayout.indexedSearches.list\n )\n }\n }\n\n handleOnClickSearch = () => {\n this.props.onClickSearch({\n savedSearchId: this.props.resultLayout.indexedSearches.list,\n sonraiSearchName: this.props.options.sonraiSearches.list,\n searchTitle: this.props.title,\n })\n }\n\n getSearchId = () => {\n const { options, sonraiSearches, resultLayout } = this.props\n let searchObj = Map({ uiSearch: null, advancedSearch: null })\n if (hasSonraiSearch(options, 'list')) {\n const searches = getSearchIdForSonraiSearches(options, sonraiSearches)\n searchObj = searchObj.set('advancedSearch', searches)\n } else {\n searchObj = searchObj.set('uiSearch', resultLayout.indexedSearches.list)\n }\n return searchObj\n }\n\n render() {\n if (this.props.data === undefined) {\n const queryConfig = this.getQuery()\n if (!queryConfig.gqlStatement) {\n return \n }\n const searchId = this.getSearchId()\n const filtered = queryHasPivotFilter(queryConfig.gqlStatement)\n\n return (\n \n {({ error, data, refetch, networkStatus }) => {\n const values = this.getData(data)\n return (\n \n \n \n {this.props.title}\n \n \n 0 ? styles.listContainer : {}\n }\n >\n
    {this.renderListItems(values)}
\n \n
\n )\n }}\n \n )\n } else {\n const items =\n this.props.data.length > 0 && typeof this.props.data[0] === 'object'\n ? this.props.data\n : this.props.data.map(data => ({ label: data, srn: null }))\n return (\n \n \n \n {this.props.title}\n \n {' '}\n 0 ? styles.listContainer : {}}\n >\n
    {this.renderListItems(items)}
\n \n
\n )\n }\n }\n}\n\nListWidget.propTypes = {\n allowDelete: PropTypes.bool,\n allowUpdate: PropTypes.bool,\n disableToolbar: PropTypes.bool,\n title: PropTypes.string.isRequired,\n onRemove: PropTypes.func,\n theme: themeShape,\n toggleStatic: PropTypes.func,\n savedSearches: ImmutablePropTypes.map,\n static: PropTypes.bool,\n sonraiSearches: ImmutablePropTypes.iterable.isRequired,\n onClickNodeView: PropTypes.func,\n options: PropTypes.object,\n resultLayout: PropTypes.object,\n getQueryBuilder: PropTypes.func,\n data: PropTypes.array,\n onClickSearch: PropTypes.func,\n onEdit: PropTypes.func,\n widget: PropTypes.object,\n}\n\nexport default themeable(ListWidget)\n","import React from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\nimport { Input } from 'reactstrap'\nimport { Query } from 'react-apollo'\nimport gql from 'graphql-tag'\nimport SelectBar from 'components/SelectBar'\nimport _ from 'lodash'\nimport { List } from 'immutable'\nimport CombinedSearches from 'components/CombinedSearches'\nimport FormLabel from 'components/FormLabel'\nimport { QueryBuilder } from 'query-builder'\nimport {\n getFields,\n getTableSavedSearchQuery,\n getSelection,\n getSonraiSearchQueryString,\n getSonraiSearchData,\n} from 'query-builder'\nimport ListWidget from 'components/ListWidget'\nimport PreviewContainer from './PreviewContainer'\n\nconst styles = {\n wrapperWithPreview: {\n display: 'grid',\n gridTemplateColumns: '35% 1fr',\n gridColumnGap: '2em',\n },\n}\n\nclass ListWidgetConfig extends React.Component {\n componentDidUpdate() {\n this.updateValidity()\n }\n\n updateValidity = () => {\n const hasSonraiSearch = !!this.props.widgetSonraiSearches.list\n const hasSavedSearch =\n !!this.props.widgetSavedSearches.list &&\n !!this.props.widgetSearchCards.list\n const hasTitle = this.props.widgetTitle\n\n const hasDisplayField = !!this.props.widgetOptions.properties\n\n const valid =\n (hasSonraiSearch || hasSavedSearch) && hasTitle && hasDisplayField\n\n this.props.setValidity(valid)\n }\n\n setTitle = e => {\n this.props.setWidgetTitle(e.target.value)\n }\n\n setDescription = e => {\n const string = e.target.value\n\n this.props.setWidgetOptions({\n description: string,\n })\n }\n\n setSavedSearch = selectedOption => {\n this.props.setWidgetSavedSearch(\n selectedOption ? selectedOption.value : null,\n 'list'\n )\n }\n\n setSearchField = selectedOption => {\n this.props.setWidgetSearchField(\n selectedOption ? selectedOption.value : null,\n 'list'\n )\n }\n\n setSonraiSearch = selectedValue => {\n this.props.setWidgetSonraiSearch(\n selectedValue ? selectedValue.value : undefined,\n 'list'\n )\n }\n\n setNumberOfItems = e => {\n this.props.setWidgetOptions({\n ...this.props.widgetOptions,\n items: e.target.value,\n })\n }\n\n setListField = selectedOption => {\n this.props.setWidgetOptions({\n ...this.props.widgetOptions,\n properties: selectedOption,\n })\n }\n\n getQueryBuilder = query => {\n return new QueryBuilder({\n query,\n types: this.props.queryTypes,\n })\n }\n\n getSearchQuery = () => {\n if (this.props.widgetSonraiSearches.list) {\n return getSonraiSearchQueryString(this.props.widgetSonraiSearches.list)\n } else if (\n this.props.widgetSavedSearches['list'] &&\n !!this.getSearchCard()\n ) {\n const queryConfig = getTableSavedSearchQuery(\n this.getQueryBuilder,\n this.props.savedSearches,\n this.props.widgetSavedSearches['list'],\n { limit: 1 }\n )\n\n return queryConfig.gqlStatement\n }\n }\n\n getSearchCard = () => {\n return this.props.widgetSearchCards['list']\n }\n\n getSampleItemFromData = data => {\n if (this.props.widgetSonraiSearches.list) {\n const results = getSonraiSearchData(data).items\n return results ? results[0] : {}\n } else {\n const fields = getFields(\n this.props.savedSearches,\n this.props.widgetSavedSearches['list']\n ).toJS()\n\n const path = getSelection(fields, this.getSearchCard(), 'items')\n\n const results = _.get(data, path) || []\n return results.length > 0 ? results[0] : {}\n }\n }\n\n renderPropertyDropDown = () => {\n const query = this.getSearchQuery()\n\n if (!query) {\n return (\n \n )\n }\n\n return (\n \n {({ data, networkStatus }) => {\n if (networkStatus === 1) {\n return (\n \n )\n }\n\n if (!_.isEmpty(data)) {\n const item = this.getSampleItemFromData(data)\n\n if (!_.isEmpty(item)) {\n const fields = Object.keys(item).map(val => ({\n label: val,\n value: val,\n }))\n\n return (\n \n )\n }\n }\n\n return (\n \n )\n }}\n \n )\n }\n\n render() {\n const sonraiSearchName = this.props.widgetSonraiSearches['list']\n const savedSearchId = this.props.widgetSavedSearches['list']\n const savedSearchField = this.props.widgetSearchCards['list']\n const searchFieldsList = this.props.searchCards.get(\n this.props.widgetSavedSearches['list'],\n List()\n )\n\n return (\n
\n {this.props.previewWidget && (\n \n \n Widget Title\n )\n }\n />\n
\n \n )}\n\n
\n \n \n \n \n \n \n \n \n \n {this.renderPropertyDropDown()}\n
\n \n )\n }\n}\n\nListWidgetConfig.propTypes = {\n getQueryBuilder: PropTypes.func.isRequired,\n previewWidget: PropTypes.bool,\n queryTypes: ImmutablePropTypes.map,\n savedSearches: ImmutablePropTypes.mapOf(\n ImmutablePropTypes.contains({\n sid: PropTypes.string,\n name: PropTypes.string,\n })\n ),\n savedSonraiSearches: ImmutablePropTypes.list,\n searchCards: ImmutablePropTypes.mapOf(\n ImmutablePropTypes.contains({\n id: PropTypes.string,\n name: PropTypes.string,\n })\n ),\n setWidgetSavedSearch: PropTypes.func,\n setWidgetSearchField: PropTypes.func,\n setWidgetSonraiSearch: PropTypes.func,\n setWidgetOptions: PropTypes.func,\n setWidgetTitle: PropTypes.func,\n setValidity: PropTypes.func,\n widgetOptions: PropTypes.shape({\n items: PropTypes.array,\n properties: PropTypes.array,\n description: PropTypes.string,\n }).isRequired,\n widgetSavedSearches: PropTypes.objectOf(PropTypes.array),\n widgetSearchCards: PropTypes.objectOf(PropTypes.object),\n widgetSonraiSearches: PropTypes.object,\n widgetTitle: PropTypes.string,\n}\n\nexport default ListWidgetConfig\n","import React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport ApexChart from 'react-apexcharts'\nimport _ from 'lodash'\nimport moment from 'moment'\nimport Scrollable from 'components/Scrollable'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport EmptyWidgetResults from 'components/EmptyWidgetResults'\nimport { colorForEntityString, stripTags } from 'utils/sonraiUtils'\n\nconst PIE_LEGEND_HEIGHT = 45\n\nexport class SizedChart extends React.Component {\n styles = {\n legendColor: {\n width: '10px',\n height: '10px',\n borderRadius: '50%',\n marginTop: '4px',\n },\n legendEntry: {\n display: 'inline-grid',\n padding: '0 0.3em',\n fontSize: '0.9em',\n wordBreak: 'break-word',\n gridTemplateColumns: '10px 1fr',\n gridColumnGap: '0.5em',\n },\n }\n pointsAreTheSame = () => {\n return _.uniq(this.props.yValues).length === 1\n }\n\n getBarPieOptions = () => {\n const maxYValue = _.max(this.props.yValues)\n const numGridLines = maxYValue < 6 ? maxYValue + 1 : 6 //Default value is 6\n\n return {\n yaxis: {\n //If the yValues are all less than 6, apexgrid will, by default, duplicate them to get 6 gridlines\n tickAmount: numGridLines,\n },\n width: this.props.width,\n chart: {\n toolbar: {\n show: false,\n },\n animations: {\n enabled: !this.props.static,\n },\n events: {\n mounted: this.props.onChartReady,\n beforeMount: apexChartInstance => {\n this.apexChartInstance = apexChartInstance\n },\n dataPointSelection: (e, chart, options) => {\n if (\n (this.props.onClickPoint &&\n this.props.yLabels[options.dataPointIndex] !== 'null') ||\n this.props.yLabels[options.dataPointIndex] !== '-'\n ) {\n this.props.onClickPoint({\n values: this.props.yValues,\n labels: this.props.yLabels,\n index: options.dataPointIndex,\n })\n }\n },\n },\n },\n dataLabels: {\n enabled: false,\n },\n xaxis: {\n categories: this.props.yLabels ? this.props.yLabels : [],\n },\n colors: this.props.colors || this.getPieBarChartColors(),\n labels: this.props.yLabels ? this.props.yLabels : [],\n legend: {\n show: false,\n },\n states: {\n active: {\n filter: 'lighten',\n },\n },\n plotOptions: {\n bar: {\n distributed: true,\n },\n },\n }\n }\n\n getRadialBarOptions = () => {\n return {\n chart: {\n type: 'radialBar',\n events: {\n mounted: this.props.onChartReady,\n },\n animations: {\n enabled: !this.props.static,\n },\n },\n colors: [this.props.theme.secondary],\n plotOptions: {\n radialBar: {\n offsetX: 0,\n offsetY: 0,\n size: undefined,\n startAngle: -135,\n endAngle: 135,\n track: {\n background: '#eaeef3',\n startAngle: -135,\n endAngle: 135,\n padding: 20,\n },\n dataLabels: {\n name: {\n show: false,\n },\n value: {\n fontSize: '20px',\n offsetY: 7,\n show: true,\n },\n },\n },\n },\n fill: {\n type: 'gradient',\n gradient: {\n shade: 'light',\n gradientToColors: [this.props.theme.secondary],\n stops: [0, 100],\n },\n },\n stroke: {\n lineCap: 'butt',\n },\n }\n }\n\n getSparkOptions = () => {\n return {\n chart: {\n toolbar: {\n show: false,\n },\n zoom: {\n enabled: false,\n },\n events: {\n mounted: this.props.onChartReady,\n },\n animations: {\n enabled: !this.props.static,\n },\n },\n markers: {\n size: this.props.xLabels.length <= 1 ? 5 : 0,\n hover: {\n size: this.props.xLabels.length <= 1 ? 6 : 5,\n },\n },\n grid: {\n clipMarkers: false,\n padding: {\n top: -25,\n bottom: -25,\n left: 20,\n right: 20,\n },\n xaxis: {\n lines: {\n show: true,\n },\n },\n yaxis: {\n lines: {\n show: this.props.xLabels.length <= 1 ? true : false,\n },\n },\n },\n stroke: {\n width: 3,\n curve: 'smooth',\n },\n xaxis: {\n min:\n this.props.xLabels.length <= 1\n ? moment(this.props.xLabels[0]).subtract(1, 'd').format('LLL')\n : undefined,\n max:\n this.props.xLabels.length <= 1\n ? moment(this.props.xLabels[0]).add(1, 'd').format('LLL')\n : undefined,\n axisBorder: {\n show: this.props.yValues.length <= 1 ? true : false,\n },\n tooltip: {\n enabled: false,\n },\n axisTicks: {\n show: false,\n },\n type: this.props.xLabels.length <= 1 ? '' : 'datetime',\n categories: this.props.xLabels ? this.props.xLabels : [],\n labels: {\n offsetY: this.props.xLabels.length <= 1 ? -4 : -5,\n },\n },\n yaxis: {\n min: this.props.minY,\n max: this.props.yValues.length <= 1 ? 100 : this.props.maxY,\n show: this.props.yValues.length <= 1 ? true : false,\n axisTicks: {\n show: false,\n },\n axisBorder: {\n show: this.props.yValues.length <= 1 ? true : false,\n },\n labels: {\n show: false,\n },\n },\n colors: [this.props.theme.secondary, ...this.props.theme.chartColors],\n fill: {\n type: this.pointsAreTheSame() ? 'solid' : 'gradient', //If all the data values are the same, for some reason using 'gradient' will not draw a line at all\n gradient: {\n gradientToColors: [this.props.theme.emphasis],\n shade: 'light',\n type: 'vertical',\n stops: [0, 100, 100, 100],\n },\n },\n tooltip: {\n marker: {\n show: false,\n },\n fixed: {\n enabled: false,\n },\n x: {\n show: false,\n },\n y: {\n title: {\n formatter: seriesName => seriesName,\n },\n },\n },\n }\n }\n\n getOptionsForType = () => {\n if (this.props.type === 'spark') {\n return this.getSparkOptions()\n }\n\n if (this.props.type === 'radialBar') {\n return this.getRadialBarOptions()\n }\n\n return this.getBarPieOptions()\n }\n\n getOptions = () => {\n const defaultOptions = this.getOptionsForType()\n\n return _.merge(defaultOptions, this.props.options)\n }\n\n getSeries = () => {\n if (this.props.type === 'spark') {\n return [\n {\n name: stripTags(this.props.yTitle),\n data: this.props.yValues,\n },\n ]\n }\n\n if (this.props.type === 'radialBar') {\n return this.props.yValues\n }\n\n if (this.props.type === 'bar') {\n return [\n {\n name: stripTags(this.props.yTitle),\n data: this.props.yValues,\n },\n ]\n }\n\n return this.props.yValues\n }\n\n getType = () => {\n if (this.props.type === 'spark') {\n return 'line'\n }\n\n return this.props.type\n }\n\n onHoverLegend = e => {\n let series = this.apexChartInstance.series\n series.toggleSeriesOnHover(e, e.target)\n }\n\n getPieBarChartColors = () => {\n return this.props.yLabels.map(label => {\n return colorForEntityString(label, this.props.typeColors)\n })\n }\n\n renderScrollableLegend = () => {\n const colors = this.props.colors || this.getPieBarChartColors()\n\n return (\n \n {this.props.yLabels.map((label, index) => (\n \n \n {label}\n \n ))}\n \n )\n }\n\n hasCustomLegend = () => {\n return this.props.type === 'donut'\n }\n\n render() {\n const chartHeight = this.hasCustomLegend()\n ? this.props.height - PIE_LEGEND_HEIGHT\n : this.props.height\n\n return (\n \n \n {this.props.yValues.length === 0 ? (\n \n ) : (\n \n )}\n \n {this.props.type === 'donut' && this.renderScrollableLegend()}\n \n )\n }\n}\n\nSizedChart.propTypes = {\n yTitle: '',\n yLabels: [],\n options: {},\n chartWrapperStyle: {},\n}\n\nSizedChart.propTypes = {\n colors: PropTypes.arrayOf(PropTypes.string),\n yTitle: PropTypes.string,\n yLabels: PropTypes.arrayOf(PropTypes.string),\n yValues: PropTypes.arrayOf(PropTypes.number),\n xLabels: PropTypes.arrayOf(PropTypes.string),\n onClickPoint: PropTypes.func,\n onChartReady: PropTypes.func,\n options: PropTypes.object,\n static: PropTypes.bool,\n theme: themeShape,\n type: PropTypes.oneOf(['bar', 'pie', 'donut', 'spark', 'radialBar'])\n .isRequired,\n typeColors: PropTypes.object,\n width: PropTypes.number.isRequired,\n height: PropTypes.number.isRequired,\n minY: PropTypes.number,\n maxY: PropTypes.number,\n}\n\nexport default themeable(SizedChart)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ContainerDimensions from 'react-container-dimensions'\nimport SizedChart from './SizedChart'\n\nexport class Chart extends React.Component {\n render() {\n return (\n \n {this.props.type !== 'radialBar' ? (\n \n \n \n ) : (\n \n )}\n \n )\n }\n}\n\nChart.propTypes = {\n yTitle: '',\n}\n\nChart.propTypes = {\n yTitle: PropTypes.string,\n yLabels: PropTypes.arrayOf(PropTypes.string),\n yValues: PropTypes.arrayOf(PropTypes.number),\n onClickPoint: PropTypes.func,\n type: PropTypes.oneOf(['bar', 'pie', 'donut', 'spark', 'radialBar'])\n .isRequired,\n}\n\nexport default Chart\n","/**\n *\n * PieChartWidget\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport _ from 'lodash'\nimport { Query } from 'react-apollo'\nimport gql from 'graphql-tag'\nimport { Map } from 'immutable'\nimport TextLink from 'components/TextLink'\nimport Chart from 'components/Chart'\nimport Card, { CardBody, BottomTitle } from 'components/Card'\nimport WidgetCard from 'components/WidgetCard'\nimport {\n getFields,\n getGroupedSavedSearchQuery,\n getSearchCard,\n hasSonraiSearch,\n getSelection,\n getSonraiSearchQuery,\n getSonraiSearchData,\n} from 'query-builder'\nimport { queryHasPivotFilter } from 'query-builder'\nimport { flattenData, getSearchIdForSonraiSearches } from 'utils/sonraiUtils'\n\nclass PieChartWidget extends React.Component {\n getQuery = () => {\n if (hasSonraiSearch(this.props.options, 'pie')) {\n return getSonraiSearchQuery(this.props.options.sonraiSearches.pie)\n } else {\n return getGroupedSavedSearchQuery(\n this.props.getQueryBuilder,\n this.props.savedSearches,\n this.props.resultLayout.indexedSearches.pie,\n {},\n 'piechartQuery',\n this.props.resultLayout.widgetOptions.properties.value\n )\n }\n }\n\n onClickSearch = () => {\n this.props.onClickSearch({\n savedSearchId: this.props.resultLayout.indexedSearches.pie,\n sonraiSearchName: this.props.options.sonraiSearches.pie,\n searchTitle: this.props.title,\n })\n }\n\n getSearchName = () => {\n return hasSonraiSearch(this.props.options, 'pie')\n ? this.props.options.sonraiSearches.pie\n : this.props.savedSearches.getIn([\n this.props.resultLayout.indexedSearches.pie,\n 'name',\n ])\n }\n\n onClickPoint = (params, data) => {\n const clickedLabel = params.labels[params.index]\n const sliceRepresentsNull = clickedLabel === 'null' || clickedLabel === '-'\n const targetSliceValue = sliceRepresentsNull ? null : clickedLabel\n const property = this.props.resultLayout.widgetOptions.properties.value\n\n let filter\n\n if (hasSonraiSearch(this.props.options, 'pie')) {\n filter = {\n label: data.property,\n value: targetSliceValue,\n }\n } else {\n filter = {\n label: property,\n value: targetSliceValue,\n }\n }\n\n this.props.onClickSearch({\n savedSearchId: this.props.resultLayout.indexedSearches.pie,\n sonraiSearchName: this.props.options.sonraiSearches.pie,\n searchTitle: this.props.title,\n savedSearchFilterCardId: getSearchCard(this.props.resultLayout, 'pie').id,\n filter: filter,\n })\n }\n\n getData = data => {\n if (hasSonraiSearch(this.props.options, 'pie')) {\n const items = getSonraiSearchData(data).items\n const flattened = flattenData(items)\n const property = this.props.resultLayout.widgetOptions.properties.value\n const counts = {}\n flattened.forEach(\n item => (counts[item[property]] = 1 + (counts[item[property]] || 0))\n )\n\n const countKeys = _.orderBy(\n Object.keys(counts),\n key => counts[key],\n 'desc'\n )\n return {\n data: { flattened, property, counts },\n labels: countKeys,\n slices: countKeys.map(key => counts[key]),\n }\n } else {\n const fields = getFields(\n this.props.savedSearches,\n this.props.resultLayout.indexedSearches.pie\n ).toJS()\n const searchCard = getSearchCard(this.props.resultLayout, 'pie')\n const selection = getSelection(fields, searchCard, 'group')\n const savedSearchResults = _.get(data, selection) || []\n\n const labels = []\n const slices = []\n\n !_.isEmpty(this.props.resultLayout.widgetOptions.properties.value) &&\n _.orderBy(savedSearchResults, item => item.count, 'desc').map(item => {\n const label =\n item.key[this.props.resultLayout.widgetOptions.properties.value]\n labels.push(label === null ? 'null' : label)\n slices.push(item.count)\n })\n\n return {\n data,\n labels,\n slices,\n }\n }\n }\n\n getSearchId = () => {\n const { options, sonraiSearches, resultLayout } = this.props\n let searchObj = Map({ uiSearch: null, advancedSearch: null })\n if (hasSonraiSearch(options, 'pie')) {\n const searches = getSearchIdForSonraiSearches(options, sonraiSearches)\n searchObj = searchObj.set('advancedSearch', searches)\n } else {\n searchObj = searchObj.set('uiSearch', resultLayout.indexedSearches.pie)\n }\n return searchObj\n }\n\n render() {\n if (this.props.data === undefined) {\n const searchId = this.getSearchId()\n const queryConfig = this.getQuery()\n if (!queryConfig.gqlStatement) {\n return (\n \n )\n }\n\n const filtered = queryHasPivotFilter(queryConfig.gqlStatement)\n return (\n \n {({ error, data, refetch, networkStatus }) => {\n const results = this.getData(data)\n return (\n \n {this.props.title}\n \n }\n filtered={filtered}\n error={error}\n containerStyle={{ padding: 0 }}\n description={_.get(this.props.resultLayout, [\n 'widgetOptions',\n 'description',\n ])}\n >\n {networkStatus !== 1 && !error && (\n \n \n this.onClickPoint(params, results.data)\n }\n colors={results.colors}\n yValues={results.slices}\n yLabels={results.labels}\n type=\"donut\"\n />\n \n )}\n \n \n {this.props.title}\n \n \n \n )\n }}\n \n )\n } else {\n return (\n \n \n \n \n\n \n {this.props.title}\n \n \n )\n }\n }\n}\n\nPieChartWidget.propTypes = {\n allowDelete: PropTypes.bool,\n allowUpdate: PropTypes.bool,\n data: PropTypes.shape({\n colors: PropTypes.arrayOf(PropTypes.string),\n slices: PropTypes.array,\n labels: PropTypes.array,\n }),\n disableToolbar: PropTypes.bool,\n noAnimate: PropTypes.bool,\n title: PropTypes.string.isRequired,\n onClickSearch: PropTypes.func,\n onRemove: PropTypes.func,\n toggleStatic: PropTypes.func,\n savedSearches: ImmutablePropTypes.map.isRequired,\n static: PropTypes.bool,\n options: PropTypes.object,\n onChartReady: PropTypes.func,\n resultLayout: PropTypes.object,\n getQueryBuilder: PropTypes.func,\n onEdit: PropTypes.func,\n sonraiSearches: ImmutablePropTypes.iterable,\n widget: PropTypes.object,\n}\n\nexport default PieChartWidget\n","import React from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\nimport { Input } from 'reactstrap'\nimport { Query } from 'react-apollo'\nimport gql from 'graphql-tag'\nimport SelectBar from 'components/SelectBar'\nimport _ from 'lodash'\nimport { List } from 'immutable'\nimport FormLabel from 'components/FormLabel'\nimport { QueryBuilder } from 'query-builder'\nimport {\n getFields,\n getTableSavedSearchQuery,\n getSelection,\n getSonraiSearchQueryString,\n getSonraiSearchData,\n} from 'query-builder'\nimport CombinedSearches from 'components/CombinedSearches'\nimport { flattenData } from 'utils/sonraiUtils'\nimport PieChartWidget from 'components/PieChartWidget'\nimport PreviewContainer from './PreviewContainer'\n\nconst styles = {\n wrapperWithPreview: {\n display: 'grid',\n gridTemplateColumns: '35% 1fr',\n gridColumnGap: '2em',\n },\n}\n\nclass PieChartWidgetConfig extends React.Component {\n componentDidUpdate() {\n this.updateValidity()\n }\n\n updateValidity = () => {\n const hasSonraiSearch = !!this.props.widgetSonraiSearches.pie\n const hasSavedSearch =\n !!this.props.widgetSavedSearches.pie && !!this.props.widgetSearchCards.pie\n const hasTitle = this.props.widgetTitle\n\n const hasDisplayField = !!this.props.widgetOptions.properties\n\n const valid =\n (hasSonraiSearch || hasSavedSearch) && hasTitle && hasDisplayField\n\n this.props.setValidity(valid)\n }\n\n setTitle = e => {\n this.props.setWidgetTitle(e.target.value)\n }\n\n setDescription = e => {\n const string = e.target.value\n\n this.props.setWidgetOptions({\n description: string,\n })\n }\n\n setSavedSearch = selectedOption => {\n this.props.setWidgetSavedSearch(\n selectedOption ? selectedOption.value : null,\n 'pie'\n )\n\n this.setListField(null)\n }\n\n setSearchField = selectedOption => {\n this.props.setWidgetSearchField(\n selectedOption ? selectedOption.value : null,\n 'pie'\n )\n\n this.setListField(null)\n }\n\n setSonraiSearch = selectedValue => {\n this.props.setWidgetSonraiSearch(\n selectedValue ? selectedValue.value : undefined,\n 'pie'\n )\n\n this.setListField(null)\n }\n\n setListField = selectedOption => {\n this.props.setWidgetOptions({\n ...this.props.widgetOptions,\n properties: selectedOption,\n })\n }\n\n getQueryBuilder = query => {\n return new QueryBuilder({\n query,\n types: this.props.queryTypes,\n })\n }\n\n getSearchQuery = () => {\n if (this.props.widgetSonraiSearches.pie) {\n return getSonraiSearchQueryString(this.props.widgetSonraiSearches.pie)\n } else if (\n this.props.widgetSavedSearches['pie'] &&\n !!this.getSearchCard()\n ) {\n const queryConfig = getTableSavedSearchQuery(\n this.getQueryBuilder,\n this.props.savedSearches,\n this.props.widgetSavedSearches['pie'],\n { limit: 1 }\n )\n\n return queryConfig.gqlStatement\n }\n }\n\n getSearchCard = () => {\n return this.props.widgetSearchCards['pie']\n }\n\n getSampleItemFromData = data => {\n if (this.props.widgetSonraiSearches.pie) {\n const results = getSonraiSearchData(data).items\n return results ? flattenData(results)[0] : {}\n } else {\n const fields = getFields(\n this.props.savedSearches,\n this.props.widgetSavedSearches['pie']\n ).toJS()\n\n const path = getSelection(fields, this.getSearchCard(), 'items')\n\n const results = _.get(data, path) || []\n return results.length > 0 ? results[0] : {}\n }\n }\n\n renderPropertyDropDown = () => {\n const query = this.getSearchQuery()\n\n if (!query) {\n return (\n \n )\n }\n\n return (\n \n {({ data, networkStatus }) => {\n if (networkStatus === 1) {\n return (\n \n )\n }\n\n if (!_.isEmpty(data)) {\n const item = this.getSampleItemFromData(data)\n\n if (!_.isEmpty(item)) {\n const fields = Object.keys(item).map(val => ({\n label: val,\n value: val,\n }))\n\n return (\n \n )\n }\n }\n\n return (\n \n )\n }}\n \n )\n }\n\n render() {\n const sonraiSearchName = this.props.widgetSonraiSearches['pie']\n const savedSearchId = this.props.widgetSavedSearches['pie']\n const savedSearchField = this.props.widgetSearchCards['pie']\n const searchFieldsList = this.props.searchCards.get(\n this.props.widgetSavedSearches['pie'],\n List()\n )\n\n return (\n
\n {this.props.previewWidget && (\n \n \n Widget Title\n )\n }\n />\n
\n \n )}\n
\n \n \n\n \n \n\n \n \n\n \n {this.renderPropertyDropDown()}\n
\n \n )\n }\n}\n\nPieChartWidgetConfig.propTypes = {\n getQueryBuilder: PropTypes.func,\n previewWidget: PropTypes.bool,\n queryTypes: ImmutablePropTypes.map,\n savedSearches: ImmutablePropTypes.mapOf(\n ImmutablePropTypes.contains({\n sid: PropTypes.string,\n name: PropTypes.string,\n })\n ),\n savedSonraiSearches: ImmutablePropTypes.list,\n searchCards: ImmutablePropTypes.mapOf(\n ImmutablePropTypes.contains({\n id: PropTypes.string,\n name: PropTypes.string,\n })\n ),\n setWidgetSavedSearch: PropTypes.func,\n setWidgetSearchField: PropTypes.func,\n setWidgetSonraiSearch: PropTypes.func,\n setWidgetOptions: PropTypes.func,\n setWidgetTitle: PropTypes.func,\n setValidity: PropTypes.func,\n widgetOptions: PropTypes.shape({\n items: PropTypes.array,\n properties: PropTypes.array,\n description: PropTypes.string,\n }).isRequired,\n widgetSavedSearches: PropTypes.objectOf(PropTypes.array),\n widgetSearchCards: PropTypes.objectOf(PropTypes.object),\n widgetSonraiSearches: PropTypes.object,\n widgetTitle: PropTypes.string,\n}\n\nexport default PieChartWidgetConfig\n","/**\n *\n * BarChartWidget\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport _ from 'lodash'\nimport { Query } from 'react-apollo'\nimport gql from 'graphql-tag'\n\nimport TextLink from 'components/TextLink'\nimport Chart from 'components/Chart'\nimport Card, { CardBody, BottomTitle } from 'components/Card'\nimport WidgetCard from 'components/WidgetCard'\nimport { Map } from 'immutable'\nimport {\n getFields,\n getGroupedSavedSearchQuery,\n getSearchCard,\n hasSonraiSearch,\n getSelection,\n getSonraiSearchQuery,\n getSonraiSearchData,\n} from 'query-builder'\nimport { queryHasPivotFilter } from 'query-builder'\nimport { flattenData, getSearchIdForSonraiSearches } from 'utils/sonraiUtils'\n\nclass BarChartWidget extends React.Component {\n getQuery = () => {\n if (hasSonraiSearch(this.props.options, 'bar')) {\n return getSonraiSearchQuery(this.props.options.sonraiSearches.bar)\n } else {\n return getGroupedSavedSearchQuery(\n this.props.getQueryBuilder,\n this.props.savedSearches,\n this.props.resultLayout.indexedSearches.bar,\n {},\n 'barchartQuery',\n this.props.resultLayout.widgetOptions.properties.value\n )\n }\n }\n\n onClickSearch = () => {\n this.props.onClickSearch({\n savedSearchId: this.props.resultLayout.indexedSearches.bar,\n sonraiSearchName: this.props.options.sonraiSearches.bar,\n searchTitle: this.props.title,\n })\n }\n\n getSearchName = () => {\n return hasSonraiSearch(this.props.options, 'bar')\n ? this.props.options.sonraiSearches.bar\n : this.props.savedSearches.getIn([\n this.props.resultLayout.indexedSearches.bar,\n 'name',\n ])\n }\n\n onClickPoint = params => {\n const clickedLabel = params.labels[params.index]\n const sliceRepresentsNull = clickedLabel === 'null' || clickedLabel === '-'\n const targetSliceValue = sliceRepresentsNull ? null : clickedLabel\n const property = this.props.resultLayout.widgetOptions.properties.value\n\n const filter = {\n label: property,\n value: targetSliceValue,\n }\n\n this.props.onClickSearch({\n savedSearchId: this.props.resultLayout.indexedSearches.bar,\n sonraiSearchName: this.props.options.sonraiSearches.bar,\n searchTitle: this.props.title,\n savedSearchFilterCardId: getSearchCard(this.props.resultLayout, 'bar').id,\n filter: filter,\n })\n }\n\n getData = data => {\n if (hasSonraiSearch(this.props.options, 'bar')) {\n const items = getSonraiSearchData(data).items\n const flattened = flattenData(items)\n\n const property = this.props.resultLayout.widgetOptions.properties.value\n const counts = {}\n flattened.forEach(\n item => (counts[item[property]] = 1 + (counts[item[property]] || 0))\n )\n\n const countKeys = Object.keys(counts)\n return {\n x: countKeys,\n y: countKeys.map(key => counts[key]),\n }\n } else {\n const fields = getFields(\n this.props.savedSearches,\n this.props.resultLayout.indexedSearches.bar\n ).toJS()\n const searchCard = getSearchCard(this.props.resultLayout, 'bar')\n const selection = getSelection(fields, searchCard, 'group')\n const savedSearchResults = _.get(data, selection) || []\n\n const labels = []\n const bars = []\n !_.isEmpty(this.props.resultLayout.widgetOptions.properties.value) &&\n savedSearchResults.map(item => {\n const label =\n item.key[this.props.resultLayout.widgetOptions.properties.value]\n labels.push(label === null ? 'null' : label)\n bars.push(item.count)\n })\n\n return {\n x: labels,\n y: bars,\n }\n }\n }\n\n getSearchId = () => {\n const { options, sonraiSearches, resultLayout } = this.props\n let searchObj = Map({ uiSearch: null, advancedSearch: null })\n if (hasSonraiSearch(options, 'bar')) {\n const searches = getSearchIdForSonraiSearches(options, sonraiSearches)\n searchObj = searchObj.set('advancedSearch', searches)\n } else {\n searchObj = searchObj.set('uiSearch', resultLayout.indexedSearches.bar)\n }\n return searchObj\n }\n\n render() {\n if (this.props.data === undefined) {\n const searchId = this.getSearchId()\n const queryConfig = this.getQuery()\n if (!queryConfig.gqlStatement) {\n return (\n \n )\n }\n\n const filtered = queryHasPivotFilter(queryConfig.gqlStatement)\n\n return (\n \n {({ error, data, refetch, networkStatus }) => {\n const results = this.getData(data)\n\n return (\n \n {this.props.title}\n \n }\n filtered={filtered}\n error={error}\n containerStyle={{ padding: 0 }}\n description={_.get(this.props.resultLayout, [\n 'widgetOptions',\n 'description',\n ])}\n >\n \n this.onClickPoint(params, data)}\n yValues={results.y}\n yLabels={results.x}\n type=\"bar\"\n yTitle={this.props.title}\n />\n \n \n \n {this.props.title}\n \n \n \n )\n }}\n \n )\n } else {\n return (\n \n \n \n \n\n \n {this.props.title}\n \n \n )\n }\n }\n}\n\nBarChartWidget.propTypes = {\n allowDelete: PropTypes.bool,\n allowUpdate: PropTypes.bool,\n disableToolbar: PropTypes.bool,\n title: PropTypes.string.isRequired,\n onRemove: PropTypes.func,\n toggleStatic: PropTypes.func,\n savedSearches: ImmutablePropTypes.map.isRequired,\n static: PropTypes.bool,\n noAnimate: PropTypes.bool,\n options: PropTypes.object,\n onClickSearch: PropTypes.func.isRequired,\n onChartReady: PropTypes.func,\n resultLayout: PropTypes.object,\n getQueryBuilder: PropTypes.func,\n data: PropTypes.shape({\n x: PropTypes.array,\n y: PropTypes.array,\n }),\n onEdit: PropTypes.func,\n sonraiSearches: ImmutablePropTypes.iterable,\n widget: PropTypes.object,\n}\n\nexport default BarChartWidget\n","import React from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\nimport { Input } from 'reactstrap'\nimport { Query } from 'react-apollo'\nimport gql from 'graphql-tag'\nimport SelectBar from 'components/SelectBar'\nimport _ from 'lodash'\nimport { List } from 'immutable'\nimport FormLabel from 'components/FormLabel'\nimport { QueryBuilder } from 'query-builder'\nimport {\n getFields,\n getTableSavedSearchQuery,\n getSelection,\n getSonraiSearchQueryString,\n getSonraiSearchData,\n} from 'query-builder'\nimport CombinedSearches from 'components/CombinedSearches'\nimport { flattenData } from 'utils/sonraiUtils'\nimport BarChartWidget from 'components/BarChartWidget'\nimport PreviewContainer from './PreviewContainer'\n\nconst styles = {\n wrapperWithPreview: {\n display: 'grid',\n gridTemplateColumns: '45% 1fr',\n gridColumnGap: '2em',\n },\n}\nclass BarChartWidgetConfig extends React.Component {\n componentDidUpdate() {\n this.updateValidity()\n }\n\n setTitle = e => {\n this.props.setWidgetTitle(e.target.value)\n }\n\n setDescription = e => {\n const string = e.target.value\n\n this.props.setWidgetOptions({\n description: string,\n })\n }\n\n selectSavedSearch = selectedOption => {\n this.props.setWidgetSavedSearch(\n selectedOption ? selectedOption.value : null,\n 'bar'\n )\n\n this.setListField(null)\n }\n\n selectSearchField = selectedOption => {\n this.props.setWidgetSearchField(\n selectedOption ? selectedOption.value : null,\n 'bar'\n )\n\n this.setListField(null)\n }\n\n setSonraiSearch = selectedValue => {\n this.props.setWidgetSonraiSearch(\n selectedValue ? selectedValue.value : undefined,\n 'bar'\n )\n\n this.setListField(null)\n }\n\n setListField = selectedOption => {\n this.props.setWidgetOptions({\n ...this.props.widgetOptions,\n properties: selectedOption,\n })\n }\n\n getQueryBuilder = query => {\n return new QueryBuilder({\n query,\n types: this.props.queryTypes,\n })\n }\n\n getSearchQuery = () => {\n if (this.props.widgetSonraiSearches.bar) {\n return getSonraiSearchQueryString(this.props.widgetSonraiSearches.bar)\n } else if (\n this.props.widgetSavedSearches['bar'] &&\n !!this.getSearchCard()\n ) {\n const queryConfig = getTableSavedSearchQuery(\n this.getQueryBuilder,\n this.props.savedSearches,\n this.props.widgetSavedSearches['bar'],\n { limit: 1 }\n )\n\n return queryConfig.gqlStatement\n }\n }\n\n getSearchCard = () => {\n return this.props.widgetSearchCards['bar']\n }\n\n getSampleItemFromData = data => {\n if (this.props.widgetSonraiSearches.bar) {\n const results = getSonraiSearchData(data).items\n return results ? flattenData(results)[0] : {}\n } else {\n const fields = getFields(\n this.props.savedSearches,\n this.props.widgetSavedSearches['bar']\n ).toJS()\n\n const path = getSelection(fields, this.getSearchCard(), 'items')\n\n const results = _.get(data, path) || []\n return results.length > 0 ? results[0] : {}\n }\n }\n\n updateValidity = () => {\n const hasSonraiSearch = !!this.props.widgetSonraiSearches.bar\n const hasSavedSearch =\n !!this.props.widgetSavedSearches.bar && !!this.getSearchCard()\n const hasTitle = this.props.widgetTitle\n const hasDisplayField = !!this.props.widgetOptions.properties\n\n const valid =\n (hasSonraiSearch || hasSavedSearch) && hasTitle && hasDisplayField\n this.props.setValidity(valid)\n }\n\n renderPropertyDropDown = () => {\n const query = this.getSearchQuery()\n if (!query) {\n return (\n \n )\n }\n\n return (\n \n {({ data, networkStatus }) => {\n if (networkStatus === 1) {\n return (\n \n )\n }\n\n if (!_.isEmpty(data)) {\n const item = this.getSampleItemFromData(data)\n\n if (!_.isEmpty(item)) {\n const fields = Object.keys(item).map(val => ({\n label: val,\n value: val,\n }))\n\n return (\n \n )\n }\n }\n\n return (\n \n )\n }}\n \n )\n }\n\n render() {\n const sonraiSearchName = this.props.widgetSonraiSearches['bar']\n const savedSearchId = this.props.widgetSavedSearches['bar']\n const savedSearchField = this.props.widgetSearchCards['bar']\n const searchFieldsList = this.props.searchCards.get(\n this.props.widgetSavedSearches['bar'],\n List()\n )\n\n return (\n
\n {this.props.previewWidget && (\n \n \n \n
\n \n )}\n\n
\n \n \n\n \n \n\n \n \n\n \n {this.renderPropertyDropDown()}\n
\n \n )\n }\n}\n\nBarChartWidgetConfig.propTypes = {\n getQueryBuilder: PropTypes.func,\n queryTypes: ImmutablePropTypes.map,\n savedSearches: ImmutablePropTypes.mapOf(\n ImmutablePropTypes.contains({\n sid: PropTypes.string,\n name: PropTypes.string,\n })\n ),\n savedSonraiSearches: ImmutablePropTypes.list,\n searchCards: ImmutablePropTypes.mapOf(\n ImmutablePropTypes.contains({\n id: PropTypes.string,\n name: PropTypes.string,\n })\n ),\n setWidgetSavedSearch: PropTypes.func,\n setWidgetSearchField: PropTypes.func,\n setWidgetSonraiSearch: PropTypes.func,\n setWidgetOptions: PropTypes.func,\n setWidgetTitle: PropTypes.func,\n setValidity: PropTypes.func,\n previewWidget: PropTypes.bool,\n widgetOptions: PropTypes.shape({\n items: PropTypes.array,\n properties: PropTypes.array,\n description: PropTypes.string,\n }).isRequired,\n widgetSavedSearches: PropTypes.objectOf(PropTypes.array),\n widgetSearchCards: PropTypes.objectOf(PropTypes.object),\n widgetSonraiSearches: PropTypes.object,\n widgetTitle: PropTypes.string,\n}\n\nexport default BarChartWidgetConfig\n","import React from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\nimport { Input } from 'reactstrap'\nimport { Map } from 'immutable'\n\nimport { ARC_MAP_SEARCH_NAME, SUPPORT_EMAIL } from 'appConstants'\nimport CombinedSearches from 'components/CombinedSearches'\nimport FormLabel from 'components/FormLabel'\n\nexport class AdvMapWidgetConfig extends React.Component {\n componentDidUpdate() {\n this.updateValidity()\n }\n\n updateValidity = () => {\n const hasSonraiSearch = !!this.props.widgetSonraiSearches.advmapsearch\n const hasSavedSearch = !!this.props.widgetSavedSearches.advmapsearch\n\n const hasTitle = this.props.widgetTitle\n\n const valid = (hasSonraiSearch || hasSavedSearch) && hasTitle\n this.props.setValidity(valid)\n }\n\n setTitle = e => {\n this.props.setWidgetTitle(e.target.value)\n }\n\n setDescription = e => {\n const string = e.target.value\n\n this.props.setWidgetOptions({\n description: string,\n })\n }\n\n setSonraiSearch = selectedValue => {\n this.props.setWidgetSonraiSearch(\n selectedValue ? selectedValue.value : undefined,\n 'advmapsearch'\n )\n }\n\n selectSavedSearch = selectedOption => {\n this.props.setWidgetSavedSearch(\n selectedOption ? selectedOption.value : null,\n 'advmapsearch'\n )\n }\n\n selectSearchField = selectedOption => {\n this.props.setWidgetSearchField(\n selectedOption ? selectedOption.value : null,\n 'advmapsearch'\n )\n }\n\n render() {\n const sonraiSearchName = this.props.widgetSonraiSearches['advmapsearch']\n const savedSearchId = this.props.widgetSavedSearches['advmapsearch']\n\n const validSavedSearches = this.props.savedSearches.filter(search => {\n const fields = search.getIn(['query', 'fields'], Map())\n const actions = fields.filter(field => {\n return field.getIn(['definition', 'name'], '') === 'Actions'\n })\n\n const locations = fields.filter(field => {\n return (\n field.getIn(['definition', 'name'], '') === 'performedAt' &&\n actions.has(field.get('parentId'))\n )\n })\n\n return !actions.isEmpty() && !locations.isEmpty()\n })\n\n return (\n
\n \n \n\n \n \n\n \n

\n Note: The search must contain Actions attached to Locations. For help\n crafting these searches, please contact{' '}\n support\n

\n \n search.get('name').includes(ARC_MAP_SEARCH_NAME)\n )}\n setSonraiSearch={this.setSonraiSearch}\n selectedSonraiValue={sonraiSearchName}\n savedSearches={validSavedSearches}\n selectedSearchId={savedSearchId}\n selectSavedSearch={this.selectSavedSearch}\n savedSearchDisabled={!!sonraiSearchName}\n />\n
\n )\n }\n}\n\nAdvMapWidgetConfig.propTypes = {\n savedSearches: ImmutablePropTypes.iterable.isRequired,\n savedSonraiSearches: ImmutablePropTypes.list.isRequired,\n setWidgetSavedSearch: PropTypes.func.isRequired,\n setWidgetSearchField: PropTypes.func.isRequired,\n setWidgetSonraiSearch: PropTypes.func,\n setWidgetOptions: PropTypes.func,\n setWidgetTitle: PropTypes.func,\n setValidity: PropTypes.func,\n widgetOptions: PropTypes.shape({\n items: PropTypes.array,\n properties: PropTypes.array,\n description: PropTypes.string,\n }).isRequired,\n widgetSavedSearches: PropTypes.object,\n widgetSonraiSearches: PropTypes.object,\n widgetTitle: PropTypes.string,\n}\n\nexport default AdvMapWidgetConfig\n","/*\n * AlertWidget Messages\n *\n * This contains all the text for the AlertWidget component.\n */\nimport { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n header: {\n id: 'app.components.AlertWidget.header',\n defaultMessage: 'This is the AlertWidget component !',\n },\n findings: {\n id: 'app.components.AlertWidget.findings',\n defaultMessage: 'Findings',\n },\n noData: {\n id: 'app.components.AlertWidget.noData',\n defaultMessage: 'No Data to show',\n },\n})\n","import React, { Component } from 'react'\nimport Icon from 'components/Icon'\nimport PropTypes from 'prop-types'\nimport { getAlertColors } from 'utils/widgetUtils'\nimport messages from './messages'\nimport { FormattedMessage } from 'react-intl'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport SonraiCountDisplay from 'components/SonraiCountDisplay'\n\nclass SingleAlert extends Component {\n constructor(props) {\n super(props)\n\n this.styles = {\n alertContainer: {\n minWidth: '100%',\n border: '1px solid whitesmoke',\n display: 'flex',\n borderRadius: 10,\n minHeight: '4.25rem',\n margin: '0.25rem 0rem',\n },\n numberContainer: {\n width: '25%',\n height: '100%',\n minHeight: '4.25rem',\n minWidth: '5rem',\n padding: '0.25rem 1rem',\n display: 'flex',\n alignItems: 'center',\n borderBottomLeftRadius: 10,\n borderTopLeftRadius: 10,\n flexDirection: 'column',\n backgroundColor: getAlertColors(props.level, props.theme)\n .backgroundColor,\n },\n alertCount: {\n fontSize: '1.85rem',\n fontWeight: '500',\n color: getAlertColors(props.level, props.theme).color,\n },\n findings: {\n fontSize: '0.8rem',\n fontWeight: '400',\n color: getAlertColors(props.level, props.theme).color,\n lineHeight: 0,\n },\n secondaryContainer: {\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n minWidth: '270px',\n },\n policyName: {\n alignSelf: 'flex-start',\n overflow: 'hidden',\n padding: '0.8rem 0rem 0rem 0.7rem',\n },\n policyText: {\n fontSize: '0.8rem',\n margin: 0,\n width: '235px',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n iconCont: {\n padding: '0rem 0.7rem 0.8rem 0.7rem',\n display: 'flex',\n alignSelf: 'flex-start',\n alignItems: 'center',\n },\n time: { fontSize: '0.65rem', marginLeft: '0.5rem' },\n }\n }\n render() {\n return (\n
\n this.props.onClickAlert(this.props.id)}\n style={this.styles.numberContainer}\n >\n
\n \n
\n
\n \n
\n
\n
\n
\n

{this.props.name}

\n
\n
\n \n
{this.props.time}
\n
\n
\n \n )\n }\n}\n\nSingleAlert.propTypes = {\n id: PropTypes.string.isRequired,\n onClickAlert: PropTypes.func.isRequired,\n style: PropTypes.object.isRequired,\n count: PropTypes.number.isRequired,\n name: PropTypes.string.isRequired,\n level: PropTypes.number.isRequired,\n time: PropTypes.string.isRequired,\n theme: themeShape,\n}\n\nexport default themeable(SingleAlert)\n","/**\n *\n * AlertWidget\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport Radium from 'radium'\nimport { Query } from 'react-apollo'\nimport { exists } from 'utils/sonraiUtils'\nimport Card, { TopTitle, CardBody } from 'components/Card'\nimport moment from 'moment'\nimport _ from 'lodash'\nimport gql from 'graphql-tag'\nimport WidgetCard from 'components/WidgetCard'\nimport { ALERT_LEVELS, CONTROL_FRAMEWORKS } from '../../appConstants'\nimport SingleAlert from './SingleAlert'\nimport messages from './messages'\nimport { FormattedMessage } from 'react-intl'\nimport { Map } from 'immutable'\n\nconst styles = {\n header: { fontSize: '22px', fontWeight: '300' },\n alertsMainContainer: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n height: '100%',\n maxHeight: '5rem',\n margin: '0.5rem 0rem',\n },\n}\n\nclass AlertWidget extends React.Component {\n setLevel = policy => {\n switch (policy.alertingLevel) {\n case ALERT_LEVELS.INFO:\n return 1\n case ALERT_LEVELS.WARN:\n return 2\n case ALERT_LEVELS.ERROR:\n return 3\n default:\n return 3\n }\n }\n\n getData = data => {\n if (exists(data)) {\n if (exists(data.PolicyEvalLogs)) {\n const logs = data.PolicyEvalLogs.items.filter(item => !item.pass)\n if (!_.isEmpty(logs)) {\n return logs\n .map(policy => ({\n id: policy.policyId,\n key: policy.id,\n // default title just put an empty tick mark\n name: (policy.controlPolicy || { title: '-' }).title,\n count: policy.count || '-', // This is here until the count: null bug is fixed :)\n time: moment.unix(policy.time).fromNow(),\n level: this.setLevel(policy),\n }))\n .sort((a, b) => b.level - a.level)\n .sort((a, b) => new Date(b.time - new Date(a.time)))\n } else {\n return []\n }\n }\n } else []\n }\n\n renderAlerts = alerts => {\n if (exists(alerts)) {\n if (_.isEmpty(alerts)) {\n return (\n
\n {' '}\n {' '}\n
\n )\n } else {\n return (\n
\n {alerts.map(alert => (\n \n ))}\n
\n )\n }\n }\n }\n\n getQuery = () => {\n const { widgetOptions } = this.props.resultLayout\n if (exists(widgetOptions)) {\n if (widgetOptions.alert) {\n if (\n widgetOptions.alert.value !==\n CONTROL_FRAMEWORKS.ALL_CONTROL_FRAMEWORKS\n ) {\n const query = gql`\n query getAlertsByControlFramework {\n PolicyEvalLogs(where: { \n controlFrameworkId: \"${widgetOptions.alert.value}\", \n collapse: true\n }) {\n count\n items {\n policyId\n controlPolicy {\n title\n srn\n }\n pass\n time\n alertingLevel\n count\n srnList\n id\n }\n }\n }\n `\n return query\n } else {\n return gql`\n query getAllAlerts {\n PolicyEvalLogs(where: { collapse: true }) {\n count\n items {\n policyId\n controlPolicy {\n title\n srn\n }\n pass\n time\n alertingLevel\n count\n srnList\n id\n }\n }\n }\n `\n }\n }\n }\n }\n\n renderHeader = () => {\n return (\n
\n
{this.props.title}
\n
\n )\n }\n\n getSearchId = () => {\n //Because it doesn't support saved or sonrai searches - just control frameworks\n return Map({\n uiSearch: null,\n advancedSearch: null,\n })\n }\n render() {\n if (this.props.data === undefined) {\n const searchId = this.getSearchId()\n const query = this.getQuery()\n if (!query) {\n return (\n \n )\n }\n\n return (\n \n {({ error, loading, data, networkStatus, refetch }) => {\n const alerts = loading ? null : this.getData(data)\n\n return (\n \n {this.renderHeader()}\n \n {this.renderAlerts(alerts)}\n \n \n )\n }}\n \n )\n } else {\n return (\n \n {this.props.title && {this.renderHeader()}}\n \n {this.renderAlerts(this.props.data)}\n \n \n )\n }\n }\n}\n\nAlertWidget = Radium(AlertWidget) // eslint-disable-line\n\nAlertWidget.propTypes = {\n title: PropTypes.string.isRequired,\n onClickAlert: PropTypes.func.isRequired,\n data: PropTypes.object,\n resultLayout: PropTypes.object,\n allowDelete: PropTypes.bool,\n allowUpdate: PropTypes.bool,\n onRemove: PropTypes.func,\n onEdit: PropTypes.func,\n static: PropTypes.bool,\n disableToolbar: PropTypes.bool,\n toggleStatic: PropTypes.func,\n widget: PropTypes.object,\n}\n\nexport default AlertWidget\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Input } from 'reactstrap'\nimport { Map } from 'immutable'\nimport moment from 'moment'\nimport _ from 'lodash'\n\nimport AlertWidget from 'components/AlertWidget'\nimport FormLabel from 'components/FormLabel'\nimport SelectBar from 'components/SelectBar'\nimport { guidGen } from 'utils/sonraiUtils'\nimport { CONTROL_FRAMEWORKS } from 'appConstants'\nimport PreviewContainer from './PreviewContainer'\n\nconst styles = {\n wrapperWithPreview: {\n display: 'grid',\n gridTemplateColumns: '45% 1fr',\n gridColumnGap: '2em',\n },\n alertPreview: { minWidth: '225px', height: '350px', maxHeight: '350px' },\n}\n\nconst placeholderData = [\n {\n id: guidGen(),\n key: guidGen(),\n name: 'Placeholder',\n count: 4,\n time: moment().fromNow(),\n level: Math.floor(Math.random() * 3) + 1,\n },\n {\n id: guidGen(),\n key: guidGen(),\n name: 'Placeholder',\n count: Math.floor(Math.random() * 10) + 1,\n time: moment().fromNow(),\n level: Math.floor(Math.random() * 3) + 1,\n },\n {\n id: guidGen(),\n key: guidGen(),\n name: 'Placeholder',\n count: Math.floor(Math.random() * 10) + 1,\n time: moment().fromNow(),\n level: Math.floor(Math.random() * 3) + 1,\n },\n].sort((a, b) => b.level - a.level)\n\nclass AlertWidgetConfig extends React.Component {\n componentDidUpdate() {\n this.updateValidity()\n }\n\n updateValidity = () => {\n const hasControlFrameWork = !!this.props.widgetOptions.alert\n const hasTitle = this.props.widgetTitle\n\n const valid = hasControlFrameWork && hasTitle\n this.props.setValidity(valid)\n }\n\n handleSelectControlFrameWork = val => {\n this.props.setWidgetOptions({\n alert: val,\n })\n\n this.handleSuggestedTitle(this.getSuggestedTitle(val))\n }\n\n setTitle = e => {\n this.props.setWidgetTitle(e.target.value)\n }\n\n setDescription = e => {\n this.props.setWidgetOptions({\n description: e.target.value,\n })\n }\n\n handleSuggestedTitle = title => this.props.setWidgetTitle(title)\n\n getSuggestedTitle = selection => {\n if (selection !== null) {\n const message =\n selection.label === CONTROL_FRAMEWORKS.ALL_CONTROL_FRAMEWORKS\n ? 'All Alerts'\n : `Alerts for ${selection.label}`\n return message\n }\n }\n\n render() {\n const enabledControlFrameworks = this.props.controlGroupOptions\n .filter(cf => cf.get('enabled'))\n .toList()\n .map(cf =>\n Map({\n value: cf.get('srn'),\n label: cf.get('title'),\n })\n )\n .sortBy(cf => cf.get('label').toLowerCase())\n\n const options =\n enabledControlFrameworks.size > 1\n ? [\n {\n value: CONTROL_FRAMEWORKS.ALL_CONTROL_FRAMEWORKS,\n label: 'All Control Frameworks',\n },\n ...enabledControlFrameworks.toJS(),\n ]\n : enabledControlFrameworks.toJS()\n\n return (\n
\n {this.props.previewWidget && (\n \n
\n Widget Title\n )\n }\n />\n
\n
\n )}\n
\n \n\n \n\n \n \n\n \n \n
\n
\n )\n }\n}\n\nAlertWidgetConfig.propTypes = {\n previewWidget: PropTypes.bool,\n setWidgetOptions: PropTypes.func,\n setWidgetTitle: PropTypes.func,\n setValidity: PropTypes.func,\n widgetOptions: PropTypes.shape({\n alert: PropTypes.string,\n description: PropTypes.string,\n }),\n\n widgetTitle: PropTypes.string,\n controlGroupOptions: PropTypes.object,\n}\n\nexport default AlertWidgetConfig\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\n\nexport default class WidgetModalErrorBoundary extends Component {\n constructor(props) {\n super(props)\n this.state = {\n hasError: false,\n errorMessage: '',\n errorSource: '',\n componentStack: '',\n errorStack: '',\n }\n\n this.styles = {\n errorWrapper: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n height: '20vh',\n color: '#666666',\n },\n }\n }\n\n componentDidCatch(error, info) {\n this.setState({\n hasError: true,\n errorMessage: error.message,\n errorStack: error.stack,\n componentStack: info.componentStack,\n errorSource: error.source ? error.source.body : '',\n })\n }\n\n logError = () => {\n // eslint-disable-next-line no-console\n console.log({ json: JSON.stringify(this.state), ...this.state })\n }\n\n render() {\n if (this.state.hasError) {\n return (\n
\n
\n

\n Oops... An error occured while editing this widget\n

\n
\n {localStorage.getItem('sonraiDebugMode') && (\n \n \n \n \n

\n {this.state.errorMessage}\n

\n \n
{this.state.errorSource}
\n
{this.state.errorStack}
\n
{this.state.componentStack}
\n
\n
\n )}\n
\n )\n }\n\n return this.props.children\n }\n}\nWidgetModalErrorBoundary.propTypes = {\n children: PropTypes.node.isRequired,\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport Icon from 'components/Icon'\nimport Hoverable from 'components/Hoverable'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport IconLayer from 'components/IconLayer'\nimport Tooltip from 'components/Tooltip'\n\nexport const COMPOUND_ICONS = {\n BIG_STAT: 'bigstat',\n}\n\nclass WidgetType extends React.PureComponent {\n constructor(props) {\n super(props)\n\n this.styles = {\n pickerIcon: {\n display: 'flex',\n justifyContent: 'center',\n },\n pickerTitle: {\n gridArea: 'title',\n paddingTop: '1.5em',\n display: 'flex',\n justifyContent: 'center',\n },\n tooltip: {\n position: 'absolute',\n top: '3px',\n right: '3px',\n },\n wrapper: {\n borderRadius: '3px',\n padding: '1em',\n position: 'relative',\n height: '100%',\n },\n content: {\n display: 'grid',\n gridTemplateRows: '1fr auto',\n gridTemplateAreas: '\"icon\" \"title\"',\n justifyContent: 'center',\n height: '100%',\n },\n }\n }\n\n getIcon = hovered => {\n const commonIconProps = {\n color: hovered ? this.props.theme.primary : this.props.theme.neutralDark,\n style: { fontSize: '40px' },\n }\n\n if (this.props.icon) {\n return (\n \n )\n }\n\n if (this.props.compoundIcon) {\n switch (this.props.compoundIcon) {\n case COMPOUND_ICONS.BIG_STAT:\n return (\n \n \n \n \n \n )\n }\n }\n }\n\n render() {\n const { label, onClick, theme, tooltipContent } = this.props\n return (\n {\n return (\n \n
\n
\n {this.getIcon(hovered)}\n
\n \n {label}\n
\n \n {tooltipContent && (\n \n }\n />\n \n )}\n \n )\n }}\n />\n )\n }\n}\n\nWidgetType.propTypes = {\n icon: PropTypes.string,\n compoundIcon: PropTypes.string,\n label: PropTypes.node,\n onClick: PropTypes.func,\n theme: themeShape,\n tooltipContent: PropTypes.node,\n transformIcon: PropTypes.string,\n}\n\nexport default themeable(WidgetType)\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport { WIDGET_TYPES } from 'appConstants'\nimport WidgetType, { COMPOUND_ICONS } from './WidgetType'\n\nconst styles = {\n pickerContainer: {\n display: 'grid',\n gridTemplateColumns: '1fr 1fr 1fr',\n gridColumnGap: '2em',\n gridRowGap: '2em',\n },\n}\n\nexport const WidgetTypePicker = ({ selectType }) => {\n return (\n
\n

\n Widgets can display the results of saved searches in multiple different\n formats, or can display Control Framework status and summary\n information. Select a display type to configure a new widget\n

\n
\n selectType(WIDGET_TYPES.BIG_COUNT)}\n compoundIcon={COMPOUND_ICONS.BIG_STAT}\n tooltipContent=\"The count of results returned by a saved search\"\n />\n selectType(WIDGET_TYPES.TABLE)}\n tooltipContent=\"Display the results of a saved search as a table. You can save the table configuration, such as grouping and hidden columns.\"\n />\n selectType(WIDGET_TYPES.RATIO)}\n tooltipContent=\"A comparison of the count of results returned by two saved searches. May be formatted as a percentage, a ratio, or an average.\"\n />\n selectType(WIDGET_TYPES.GAUGE)}\n tooltipContent=\"Display the results of two saved search as a percentage on a gauge. You can configure the marked ranges on the gauge.\"\n />\n selectType(WIDGET_TYPES.LIST)}\n tooltipContent=\"A numbered list of the first results returned from a saved search. You can configure how many items to show and which field will be displayed\"\n />\n selectType(WIDGET_TYPES.REGIONS)}\n tooltipContent=\"A map of cloud region data returned from an advanced search. These searches must be specially formatted and named. \"\n />\n selectType(WIDGET_TYPES.PIE_CHART)}\n tooltipContent=\"A pie chart that displays all the unique result values of the selected field in a saved search\"\n />\n selectType(WIDGET_TYPES.BAR_CHART)}\n tooltipContent=\"A bar chart that displays all the unique result values of the selected field in a saved search\"\n />\n selectType(WIDGET_TYPES.ADVMAP)}\n tooltipContent=\"An map of activity data returned from an advanced search. These searches must be specially formatted and named. \"\n />\n\n {/* \n ---------These are out for now------------\n selectType(WIDGET_TYPES.ALERT)}\n tooltipContent=\"A list of the active alerts for a control framework\"\n />\n selectType(WIDGET_TYPES.SPARK)}\n tooltipContent=\"A chart of the historical compliance level for a control framework\"\n />\n selectType(WIDGET_TYPES.COMPLIANCE)}\n tooltipContent=\"A gauge showing the current compliance percentage of a control framework\"\n /> \n ---------These are out for now------------\n */}\n selectType(WIDGET_TYPES.TEXT)}\n tooltipContent=\"A customizable text widget\"\n />\n
\n
\n )\n}\n\nWidgetTypePicker.propTypes = {\n selectType: PropTypes.func.isRequired,\n}\n\nexport default WidgetTypePicker\n","/*\n * SparkWidget Messages\n * This contains all the text for the SparkWidget component.\n */\nimport { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n header: {\n id: 'app.components.SparkWidget.header',\n defaultMessage: 'This is the SparkWidget component !',\n },\n noHistory: {\n id: 'app.components.SparkWidget.noHistory',\n defaultMessage: 'No History to show',\n },\n total: {\n id: 'app.components.SparkWidget.total',\n defaultMessage: 'Total: ',\n },\n logs: {\n id: 'app.components.SparkWidget.logs',\n defaultMessage: 'Logs',\n },\n})\n","/**\n *\n * SparkWidget\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport Radium from 'radium'\nimport { FormattedMessage } from 'react-intl'\nimport { Query } from 'react-apollo'\nimport { Map } from 'immutable'\nimport messages from './messages'\nimport { exists } from 'utils/sonraiUtils'\nimport Chart from 'components/Chart'\nimport Card, { TopTitle, CardBody } from 'components/Card'\nimport _ from 'lodash'\nimport gql from 'graphql-tag'\nimport WidgetCard from 'components/WidgetCard'\nimport moment from 'moment'\nimport TextLink from 'components/TextLink'\nconst styles = {\n header: { fontSize: '22px', fontWeight: '300' },\n mainContain: {\n height: '100%',\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n },\n subtitle: {\n alignSelf: 'flex-start',\n fontSize: '1.1rem',\n marginLeft: '0.25rem',\n color: 'rgb(125, 120, 120)',\n },\n chartContain: { height: '90%', width: '100%', padding: '0.5rem' },\n}\n\nclass SparkWidget extends React.Component {\n getData = data => {\n if (exists(data.ControlFrameworkEvalLogs)) {\n const logs = data.ControlFrameworkEvalLogs.items.filter(\n x =>\n x.controlFrameworkId ==\n this.props.resultLayout.widgetOptions.controlFramework.value\n )\n if (!_.isEmpty(logs)) {\n const x = logs.map(log => moment.unix(log.time).format())\n const y = logs.map(log => log.percentPass)\n return { x, y }\n } else {\n return {}\n }\n }\n }\n\n getId = data => {\n if (exists(data.ControlFrameworkEvalLogs)) {\n if (!_.isEmpty(data.ControlFrameworkEvalLogs.items)) {\n return this.props.resultLayout.widgetOptions.controlFramework.value\n }\n }\n }\n\n handleClick = id => {\n this.props.onClickControlFramework(id)\n }\n\n renderChart = (logs, id) => {\n if (_.isEmpty(logs)) {\n return (\n
\n \n
\n )\n } else {\n return (\n
\n
\n this.handleClick(id)}>\n \n {logs.x.length} \n \n
\n
\n _.round(num, 1)) : logs.y\n }\n xLabels={logs.x}\n />\n
\n
\n )\n }\n }\n\n getQuery = () => {\n const { widgetOptions } = this.props.resultLayout\n if (exists(widgetOptions)) {\n if (widgetOptions.controlFramework) {\n const query = {\n doc: gql`\n query controlFrameLogsOverTime {\n ControlFrameworkEvalLogs(where: { \n controlFrameworkId: \"${widgetOptions.controlFramework.value}\", \n from: \"${moment()\n .subtract(widgetOptions.sparkTimeFrame.value, 'days')\n .format('YYYY-MM-DD')}\"\n }) {\n items {\n id\n controlFrameworkId\n percentPass\n time\n }\n }\n }\n `,\n }\n return query\n }\n }\n }\n\n renderHeader = id => {\n if (exists(id)) {\n return (\n this.handleClick(id)}>\n
{this.props.title}
\n
\n )\n } else {\n return (\n
\n
{this.props.title}
\n
\n )\n }\n }\n\n getSearchId = () => {\n //Because it doesn't support saved or sonrai searches - just control frameworks\n return Map({\n uiSearch: null,\n advancedSearch: null,\n })\n }\n\n render() {\n if (this.props.data === undefined) {\n const searchId = this.getSearchId()\n const query = this.getQuery()\n if (!query.doc) {\n return (\n \n )\n }\n\n return (\n \n {({ loading, error, data, networkStatus, refetch }) => {\n const logs = loading ? null : this.getData(data)\n const id = loading ? null : this.getId(data)\n\n return (\n this.handleClick(id)}>\n {this.props.title}\n \n }\n description={_.get(this.props.resultLayout, [\n 'widgetOptions',\n 'description',\n ])}\n >\n {this.renderHeader(id)}\n {this.renderChart(logs, id)}\n \n )\n }}\n \n )\n } else {\n return (\n \n {this.props.title && {this.renderHeader()}}\n {this.renderChart(this.props.data)}\n \n )\n }\n }\n}\n\nSparkWidget = Radium(SparkWidget) // eslint-disable-line\n\nSparkWidget.propTypes = {\n allowDelete: PropTypes.bool,\n allowUpdate: PropTypes.bool,\n disableToolbar: PropTypes.bool,\n title: PropTypes.string.isRequired,\n onRemove: PropTypes.func,\n toggleStatic: PropTypes.func,\n static: PropTypes.bool,\n resultLayout: PropTypes.object,\n data: PropTypes.object,\n onEdit: PropTypes.func,\n onClickControlFramework: PropTypes.func,\n widget: PropTypes.object,\n}\n\nexport default SparkWidget\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Input } from 'reactstrap'\nimport { Map } from 'immutable'\nimport _ from 'lodash'\n\nimport SparkWidget from 'components/SparkWidget'\nimport FormLabel from 'components/FormLabel'\nimport SelectBar from 'components/SelectBar'\nimport PreviewContainer from './PreviewContainer'\n\nconst styles = {\n wrapperWithPreview: {\n display: 'grid',\n gridTemplateColumns: '50% 1fr',\n gridColumnGap: '2em',\n },\n sparkPreview: { minWidth: '450px', height: '260px', maxHeight: '260px' },\n}\n\nconst placeholderData = {\n x: ['01-01', '01-02', '01-03', '01-04', '01-05', '01-06', '01-07'],\n y: [43, 23, 54, 77, 99, 21, 4],\n}\n\nclass SparkWidgetConfig extends React.Component {\n componentDidUpdate() {\n this.updateValidity()\n }\n\n updateValidity = () => {\n const hasControlFrameWork = !!this.props.widgetOptions.controlFramework\n const hasTitle = this.props.widgetTitle\n const hasTimeFrame = !!this.props.widgetOptions.sparkTimeFrame\n\n const valid = hasControlFrameWork && hasTitle && hasTimeFrame\n this.props.setValidity(valid)\n }\n\n handleSelectControlFrameWork = val => {\n this.props.setWidgetOptions({\n controlFramework: val,\n })\n\n this.props.widgetOptions.sparkTimeFrame &&\n this.handleSuggestedTitle(\n this.getSuggestedTitle(val, this.props.widgetOptions.sparkTimeFrame)\n )\n }\n\n handleSelectSparkTimeFrame = val => {\n this.props.setWidgetOptions({\n sparkTimeFrame: val,\n })\n\n this.props.widgetOptions.controlFramework &&\n this.handleSuggestedTitle(\n this.getSuggestedTitle(this.props.widgetOptions.controlFramework, val)\n )\n }\n\n setTitle = e => {\n this.props.setWidgetTitle(e.target.value)\n }\n\n setDescription = e => {\n this.props.setWidgetOptions({\n description: e.target.value,\n })\n }\n\n handleSuggestedTitle = title => this.props.setWidgetTitle(title)\n\n getSuggestedTitle = (framework, time) => {\n if (framework !== null && time !== null) {\n const message = `${time.label} of ${framework.label}`\n return message\n }\n }\n\n render() {\n const controlFrameWorkOptions = this.props.controlGroupOptions\n .filter(cf => cf.get('enabled'))\n .toList()\n .map(cf =>\n Map({\n value: cf.get('srn'),\n label: cf.get('title'),\n })\n )\n .toJS()\n\n const timeFrameOptions = [\n { value: 1, label: 'Last 24 Hours' },\n { value: 7, label: 'Last 7 Days' },\n {\n value: 30,\n label: 'Last 30 Days',\n },\n {\n value: 90,\n label: 'Last 90 Days',\n },\n ]\n\n return (\n
\n {this.props.previewWidget && (\n \n
\n Widget 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\nSparkWidgetConfig.propTypes = {\n previewWidget: PropTypes.bool,\n setWidgetOptions: PropTypes.func,\n setWidgetTitle: PropTypes.func,\n setValidity: PropTypes.func,\n widgetOptions: PropTypes.shape({\n controlFramework: PropTypes.object,\n description: PropTypes.string,\n sparkTimeFrame: PropTypes.object,\n }),\n\n widgetTitle: PropTypes.string,\n controlGroupOptions: PropTypes.object,\n}\n\nexport default SparkWidgetConfig\n","/*\n * ComplianceWidget Messages\n *\n * This contains all the text for the ComplianceWidget component.\n */\nimport { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n header: {\n id: 'app.components.ComplianceWidget.header',\n defaultMessage: 'This is the ComplianceWidget component !',\n },\n noData: {\n id: 'app.components.ComplianceWidget.noData',\n defaultMessage: 'No Data to show',\n },\n})\n","/**\n *\n * ComplianceWidget\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { Query } from 'react-apollo'\nimport messages from './messages'\nimport { exists } from 'utils/sonraiUtils'\nimport Chart from 'components/Chart'\nimport Card, { TopTitle, CardBody } from 'components/Card'\nimport _ from 'lodash'\nimport gql from 'graphql-tag'\nimport WidgetCard from 'components/WidgetCard'\nimport { round } from 'utils/widgetUtils'\nimport { FormattedMessage } from 'react-intl'\nimport TextLink from 'components/TextLink'\nimport { Map } from 'immutable'\nconst styles = {\n header: { fontSize: '1.1rem', fontWeight: '300' },\n chartContainer: {\n width: '100%',\n height: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n },\n}\n\nclass ComplianceWidgets extends React.Component {\n getData = data => {\n if (exists(data.ControlFrameworkEvalLogs)) {\n if (!_.isEmpty(data.ControlFrameworkEvalLogs.items)) {\n const percentage = data.ControlFrameworkEvalLogs.items[0].percentPass\n if (exists(percentage)) {\n return [round(percentage, 1)]\n } else {\n return []\n }\n }\n }\n }\n\n renderChart = value => {\n if (_.isEmpty(value)) {\n return (\n
\n \n
\n )\n } else {\n return (\n \n )\n }\n }\n\n getQuery = () => {\n const { widgetOptions } = this.props.resultLayout\n if (exists(widgetOptions)) {\n if (widgetOptions.controlFramework) {\n return gql`\n query getCompliancePercentage {\n ControlFrameworkEvalLogs(\n where: {\n controlFrameworkId: \"${\n this.props.resultLayout.widgetOptions.controlFramework.value\n }\"\n limit: 1\n }\n ) {\n items {\n \n percentPass\n }\n }\n }\n `\n }\n }\n }\n\n renderHeader = id => {\n if (exists(id)) {\n return (\n this.props.onClickControlFramework(id)}>\n
{this.props.title}
\n
\n )\n } else {\n return (\n
\n
{this.props.title}
\n
\n )\n }\n }\n\n getSearchId = () => {\n //Because it doesn't support saved or sonrai searches - just control frameworks\n return Map({\n uiSearch: null,\n advancedSearch: null,\n })\n }\n\n render() {\n if (this.props.data === undefined) {\n const searchId = this.getSearchId()\n const query = this.getQuery()\n if (!query) {\n return (\n \n )\n }\n\n return (\n \n {({ loading, error, data, networkStatus }) => {\n const value = loading ? null : this.getData(data)\n const id = exists(this.props.resultLayout.widgetOptions)\n ? this.props.resultLayout.widgetOptions.controlFramework.value\n : undefined\n\n return (\n this.props.onClickControlFramework(id)}\n >\n {this.props.title}\n \n }\n description={_.get(this.props.resultLayout, [\n 'widgetOptions',\n 'description',\n ])}\n >\n {this.renderHeader(id)}\n \n
\n {this.renderChart(value)}\n
\n
\n \n )\n }}\n \n )\n } else {\n return (\n \n {this.props.title && {this.renderHeader()}}\n \n
\n {this.renderChart(this.props.data)}\n
\n
\n
\n )\n }\n }\n}\n\nComplianceWidgets.propTypes = {\n allowDelete: PropTypes.bool,\n allowUpdate: PropTypes.bool,\n data: PropTypes.object,\n disableToolbar: PropTypes.bool,\n noAnimate: PropTypes.bool,\n title: PropTypes.string,\n onChartReady: PropTypes.func,\n onClickControlFramework: PropTypes.func,\n onEdit: PropTypes.func,\n onRemove: PropTypes.func,\n resultLayout: PropTypes.shape({\n widgetOptions: PropTypes.shape({\n controlFramework: PropTypes.shape({\n value: PropTypes.string,\n }),\n }),\n }),\n static: PropTypes.bool,\n toggleStatic: PropTypes.bool,\n widget: PropTypes.object,\n}\n\nexport default ComplianceWidgets\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Input } from 'reactstrap'\nimport { Map } from 'immutable'\nimport _ from 'lodash'\n\nimport ComplianceWidget from 'components/ComplianceWidget'\nimport FormLabel from 'components/FormLabel'\nimport SelectBar from 'components/SelectBar'\nimport PreviewContainer from './PreviewContainer'\n\nconst styles = {\n wrapperWithPreview: {\n display: 'grid',\n gridTemplateColumns: '45% 1fr',\n gridColumnGap: '2em',\n },\n compliancePreview: { minWidth: '225px', height: '350px', maxHeight: '350px' },\n}\n\nclass ComplianceWidgetConfig extends React.Component {\n componentDidUpdate(oldProps) {\n if (\n _.get(this.props.widgetOptions.controlFramework, 'value') !==\n _.get(oldProps.widgetOptions.controlFramework, 'value') ||\n this.props.widgetTitle !== oldProps.widgetTitle\n ) {\n this.updateValidity()\n }\n }\n\n updateValidity = () => {\n const hasControlFrameWork = !!this.props.widgetOptions.controlFramework\n const hasTitle = this.props.widgetTitle\n\n const valid = hasControlFrameWork && hasTitle\n this.props.setValidity(valid)\n }\n\n handleSelectControlFrameWork = val => {\n this.props.setWidgetOptions({\n controlFramework: val,\n })\n\n this.handleSuggestedTitle(this.getSuggestedTitle(val))\n }\n\n setTitle = e => {\n this.props.setWidgetTitle(e.target.value)\n }\n\n setDescription = e => {\n this.props.setWidgetOptions({\n description: e.target.value,\n })\n }\n\n handleSuggestedTitle = title => this.props.setWidgetTitle(title)\n\n getSuggestedTitle = selection => {\n if (selection !== null) {\n const message = `${selection.label} Compliance`\n return message\n }\n }\n\n render() {\n const controlFrameWorkOptions = this.props.controlGroupOptions\n .filter(cf => cf.get('enabled'))\n .toList()\n .map(cf =>\n Map({\n value: cf.get('srn'),\n label: cf.get('title'),\n })\n )\n .toJS()\n\n return (\n
\n {this.props.previewWidget && (\n \n
\n Widget Title\n )\n }\n />\n
\n
\n )}\n\n
\n \n \n \n \n\n \n \n
\n
\n )\n }\n}\n\nComplianceWidgetConfig.propTypes = {\n previewWidget: PropTypes.bool,\n setWidgetOptions: PropTypes.func,\n setWidgetTitle: PropTypes.func,\n setValidity: PropTypes.func,\n widgetOptions: PropTypes.shape({\n controlFramework: PropTypes.object,\n description: PropTypes.string,\n }),\n\n widgetTitle: PropTypes.string,\n controlGroupOptions: PropTypes.object,\n}\n\nexport default ComplianceWidgetConfig\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Input } from 'reactstrap'\nimport FormLabel from 'components/FormLabel'\nimport MarkdownEditor from 'components/MarkdownEditor'\n\nclass TextWidgetConfig extends React.Component {\n setTitle = e => {\n this.props.setWidgetTitle(e.target.value)\n }\n\n componentDidUpdate() {\n this.updateValidity()\n }\n\n updateValidity = () => {\n const hasTitle = !!this.props.widgetTitle\n const hasMarkdown = !!this.props.widgetOptions.description\n const isValid = hasTitle && hasMarkdown\n this.props.setValidity(isValid)\n }\n\n render() {\n return (\n
\n
\n \n \n\n \n\n \n this.props.setWidgetOptions({\n description: value,\n })\n }\n />\n
\n
\n )\n }\n}\n\nTextWidgetConfig.propTypes = {\n setWidgetOptions: PropTypes.func,\n setWidgetTitle: PropTypes.func,\n widgetOptions: PropTypes.shape({\n description: PropTypes.string,\n }),\n setValidity: PropTypes.func,\n widgetTitle: PropTypes.string,\n}\n\nexport default TextWidgetConfig\n","/**\n *\n * WidgetModal\n *\n */\n\nimport React from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { FormattedMessage } from 'react-intl'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'\nimport { Map } from 'immutable'\n\nimport Breadcrumb, { BreadcrumbItem } from 'components/Breadcrumb'\nimport TextLink from 'components/TextLink'\nimport Button from 'components/Button'\nimport { WIDGET_TYPES } from 'appConstants'\nimport {\n selectSavedSearches,\n selectSonraiSearches,\n selectQueryTypes,\n} from 'containers/SonraiData/selectors'\nimport { selectControlGroups } from 'containers/ControlFrameworkData/selectors'\n\nimport injectReducer from 'utils/injectReducer'\nimport injectSaga from 'utils/injectSaga'\nimport {\n updateEditWidget,\n addSCWidget,\n} from 'containers/SolutionCenter/actions'\nimport Icon from 'components/Icon'\n\nimport {\n selectSearchCardsBySearchId,\n selectWidgetSize,\n selectWidgetType,\n selectWidgetTitle,\n selectWidgetOptions,\n selectWidgetSelector,\n selectWidgetSubTitle,\n selectPreviewWidget,\n selectWidgetResultLayout,\n} from './selectors'\nimport reducer from './reducer'\nimport messages from './messages'\nimport {\n setWidgetTitle,\n setWidgetSubTitle,\n setWidgetType,\n setWidgetSelector,\n setWidgetFormatter,\n setWidgetSearchField,\n setWidgetSavedSearch,\n clearWidgetModal,\n togglePreviewWidget,\n setWidgetSize,\n setWidgetOptions,\n setWidgetSonraiSearch,\n loadWidget,\n} from './actions'\nimport sagas from './sagas'\nimport RatioConfig from './RatioConfig'\nimport BigCountConfig from './BigCountConfig'\nimport GaugeConfig from './GaugeConfig'\nimport RegionsWidgetConfig from './RegionsWidgetConfig'\nimport TableConfig from './TableConfig'\nimport ListWidgetConfig from './ListWidgetConfig'\nimport PieChartWidgetConfig from './PieChartWidgetConfig'\nimport BarChartWidgetConfig from './BarChartWidgetConfig'\nimport MapWidgetConfig from './AdvMapWidgetConfig'\nimport AlertWidgetConfig from './AlertWidgetConfig'\nimport WidgetModalErrorBoundary from './WidgetModalErrorBoundary'\nimport WidgetTypePicker from './WidgetTypePicker'\nimport SparkWidgetConfig from './SparkWidgetConfig'\nimport ComplianceWidgetConfig from './ComplianceWidgetConfig'\nimport TextWidgetConfig from './TextWidgetConfig'\n\nconst hasPreview = [\n 'bigCount',\n 'barChart',\n 'pieChart',\n 'alert',\n 'spark',\n 'compliance',\n 'gauge',\n 'ratio',\n 'list',\n]\n\nconst styles = {\n footerTextContainer: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n width: '100%',\n },\n previewModalContainer: {\n display: 'flex',\n justifyContent: 'center',\n minWidth: '1100px',\n },\n footerContainer: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n position: 'relative',\n },\n breadcrumbContainer: {\n marginBottom: '1em',\n },\n}\n\nexport class WidgetModal extends React.PureComponent {\n state = {\n valid: false,\n }\n\n componentDidUpdate(oldProps) {\n if (\n !oldProps.isOpen &&\n this.props.isOpen &&\n !this.props.editingWidget.isEmpty()\n ) {\n this.props.loadWidget(this.props.editingWidget)\n }\n\n if (oldProps.isOpen && !this.props.isOpen) {\n this.props.clearWidgetModal()\n }\n }\n\n componentWillUnmount() {\n this.props.clearWidgetModal()\n }\n\n setValidity = valid => {\n this.setState({\n valid,\n })\n }\n\n getSelector = (widgetSelector, widgetType) => {\n if (widgetSelector) {\n return `${widgetSelector}`\n } else {\n return WIDGET_TYPES[widgetType]\n }\n }\n\n updateWidget = () => {\n const {\n widgetType,\n widgetTitle,\n widgetSubTitle,\n widgetSize,\n widgetSelector,\n widgetResultLayout,\n widgetOptions,\n } = this.props\n\n this.props.updateEditWidget(this.props.card, {\n sid: this.props.editingWidget.get('sid'),\n srn: this.props.editingWidget.get('srn'),\n title: widgetTitle,\n subtitle: widgetSubTitle,\n type: widgetType,\n widgetSize: widgetSize,\n resultLayout: widgetResultLayout,\n selection: this.getSelector(widgetSelector, widgetType),\n contains: {\n add: Object.values(widgetResultLayout.indexedSearches),\n },\n options: widgetOptions,\n })\n }\n\n addWidget = () => {\n const {\n widgetType,\n widgetTitle,\n widgetSubTitle,\n widgetSize,\n widgetSelector,\n widgetResultLayout,\n widgetOptions,\n } = this.props\n\n const searches = Object.values(\n widgetResultLayout.indexedSearches\n ).map(searchSID => this.props.savedSearches.get(searchSID).get('srn'))\n\n this.props.addSCWidget(this.props.card, {\n title: widgetTitle,\n subtitle: widgetSubTitle,\n type: widgetType,\n resultLayout: widgetResultLayout,\n selection: this.getSelector(widgetSelector, widgetType),\n widgetSize: [widgetSize[0], widgetSize[1]],\n widgetLocation: [0, 0],\n static: false,\n contains: { add: searches },\n options: widgetOptions,\n })\n }\n\n setWidgetType = e => {\n const type = e.target.value\n this.selectType(type)\n }\n\n resetType = () => {\n this.props.setWidgetType(null)\n if (this.props.previewWidget) {\n this.props.togglePreviewWidget()\n }\n }\n\n selectType = type => {\n this.props.setWidgetType(type)\n if (\n (hasPreview.includes(type) && !this.props.previewWidget) ||\n (!hasPreview.includes(type) && this.props.previewWidget)\n ) {\n this.props.togglePreviewWidget()\n }\n\n // [Width, Height]\n if (type === WIDGET_TYPES.TABLE || type === WIDGET_TYPES.TEXT) {\n this.props.setWidgetSize([20, 12])\n } else if (type === WIDGET_TYPES.GAUGE) {\n this.props.setWidgetSize([12, 8])\n } else if (type === WIDGET_TYPES.REGIONS) {\n this.props.setWidgetSize([20, 12])\n } else if (type === WIDGET_TYPES.ALERT) {\n this.props.setWidgetSize([14, 11])\n } else if (type === WIDGET_TYPES.ADVMAP) {\n this.props.setWidgetSize([30, 18])\n } else if (type === WIDGET_TYPES.LIST) {\n this.props.setWidgetSize([8, 12])\n } else if (type === WIDGET_TYPES.SPARK) {\n this.props.setWidgetSize([28, 8])\n } else if (type === WIDGET_TYPES.COMPLIANCE) {\n this.props.setWidgetSize([10, 8])\n } else {\n this.props.setWidgetSize([8, 6])\n }\n }\n\n setWidgetSearchField = (field, index) => {\n this.props.setWidgetSearchField(field, index, this.props.savedSearches)\n }\n\n getConfigComponent = () => {\n const type = this.props.widgetType\n switch (type) {\n case WIDGET_TYPES.BIG_COUNT:\n return BigCountConfig\n case WIDGET_TYPES.TABLE:\n return TableConfig\n case WIDGET_TYPES.RATIO:\n return RatioConfig\n case WIDGET_TYPES.GAUGE:\n return GaugeConfig\n case WIDGET_TYPES.LIST:\n return ListWidgetConfig\n case WIDGET_TYPES.REGIONS:\n return RegionsWidgetConfig\n case WIDGET_TYPES.PIE_CHART:\n return PieChartWidgetConfig\n case WIDGET_TYPES.BAR_CHART:\n return BarChartWidgetConfig\n case WIDGET_TYPES.ADVMAP:\n return MapWidgetConfig\n case WIDGET_TYPES.ALERT:\n return AlertWidgetConfig\n case WIDGET_TYPES.SPARK:\n return SparkWidgetConfig\n case WIDGET_TYPES.COMPLIANCE:\n return ComplianceWidgetConfig\n case WIDGET_TYPES.TEXT:\n return TextWidgetConfig\n default:\n return null\n }\n }\n\n getWidgetTypeLabel = () => {\n switch (this.props.widgetType) {\n case WIDGET_TYPES.BIG_COUNT:\n return 'Big Count'\n case WIDGET_TYPES.TABLE:\n return 'Table'\n case WIDGET_TYPES.RATIO:\n return 'Ratio'\n case WIDGET_TYPES.GAUGE:\n return 'Gauge'\n case WIDGET_TYPES.LIST:\n return 'List'\n case WIDGET_TYPES.REGIONS:\n return 'Regions'\n case WIDGET_TYPES.PIE_CHART:\n return 'Pie Chart'\n case WIDGET_TYPES.BAR_CHART:\n return 'Bar Chart'\n case WIDGET_TYPES.ADVMAP:\n return 'Arc Map'\n case WIDGET_TYPES.ALERT:\n return 'Alerts'\n case WIDGET_TYPES.SPARK:\n return 'Compliance over Time'\n case WIDGET_TYPES.COMPLIANCE:\n return 'Current Compliance'\n case WIDGET_TYPES.TEXT:\n return 'Text'\n default:\n return ''\n }\n }\n\n getWidgetInputs = () => {\n const ConfigComponent = this.getConfigComponent()\n\n if (!ConfigComponent) {\n return null\n }\n\n return (\n \n \n \n )\n }\n\n renderContent = () => {\n if (!this.props.widgetType) {\n return \n }\n\n return (\n
\n {this.props.editingWidget.isEmpty() && (\n
\n \n \n \n Widget Types\n \n \n {this.getWidgetTypeLabel()}\n \n
\n )}\n
{this.getWidgetInputs()}
\n
\n )\n }\n\n render() {\n const widgetCanPreview = hasPreview.includes(this.props.widgetType)\n const isDisabled =\n !this.state.valid || this.props.saving || !this.props.widgetType\n\n return (\n \n \n {this.props.editingWidget.isEmpty() ? (\n \n ) : (\n \n )}\n \n\n {this.renderContent()}\n \n
\n {widgetCanPreview && (\n \n {this.props.previewWidget\n ? 'Hide Widget Preview'\n : 'Show Widget Preview'}\n \n )}\n
\n \n Cancel\n \n \n {this.props.saving ? (\n \n ) : this.props.editingWidget.isEmpty() ? (\n 'Add'\n ) : (\n 'Update'\n )}\n {' '}\n
\n
\n
\n \n )\n }\n}\n\nWidgetModal.defaultProps = {\n editingWidget: Map(),\n}\n\nWidgetModal.propTypes = {\n controlGroupOptions: PropTypes.object,\n editingWidget: ImmutablePropTypes.map.isRequired,\n getQueryBuilder: PropTypes.func.isRequired,\n isOpen: PropTypes.bool,\n onClose: PropTypes.func.isRequired,\n loadWidget: PropTypes.func.isRequired,\n previewWidget: PropTypes.bool,\n queryTypes: ImmutablePropTypes.map,\n savedSearches: ImmutablePropTypes.map.isRequired,\n saving: PropTypes.bool,\n searchCards: ImmutablePropTypes.map.isRequired,\n setWidgetOptions: PropTypes.func.isRequired,\n setWidgetTitle: PropTypes.func.isRequired,\n setWidgetSize: PropTypes.func.isRequired,\n setWidgetSubTitle: PropTypes.func.isRequired,\n setWidgetType: PropTypes.func.isRequired,\n setWidgetSelector: PropTypes.func.isRequired,\n setWidgetFormatter: PropTypes.func.isRequired,\n setWidgetSearchField: PropTypes.func.isRequired,\n setWidgetSavedSearch: PropTypes.func.isRequired,\n card: PropTypes.shape({\n sid: PropTypes.string.isRequired,\n srn: PropTypes.string.isRequired,\n }).isRequired,\n layout: PropTypes.array.isRequired,\n clearWidgetModal: PropTypes.func.isRequired,\n addSCWidget: PropTypes.func.isRequired,\n setWidgetSonraiSearch: PropTypes.func.isRequired,\n sonraiSearches: ImmutablePropTypes.list.isRequired,\n saveCheckBox: PropTypes.func,\n togglePreviewWidget: PropTypes.func.isRequired,\n updateEditWidget: PropTypes.func,\n widgetType: PropTypes.string,\n widgetTitle: PropTypes.string,\n widgetSubTitle: PropTypes.string,\n widgetSize: PropTypes.array,\n widgetSelector: PropTypes.string,\n widgetResultLayout: PropTypes.object,\n widgetOptions: PropTypes.object,\n}\n\nconst mapStateToProps = createStructuredSelector({\n controlGroupOptions: selectControlGroups,\n previewWidget: selectPreviewWidget,\n queryTypes: selectQueryTypes,\n savedSearches: selectSavedSearches,\n sonraiSearches: selectSonraiSearches,\n searchCards: selectSearchCardsBySearchId,\n widgetType: selectWidgetType,\n widgetTitle: selectWidgetTitle,\n widgetSubTitle: selectWidgetSubTitle,\n widgetSize: selectWidgetSize,\n widgetSelector: selectWidgetSelector,\n widgetResultLayout: selectWidgetResultLayout,\n widgetOptions: selectWidgetOptions,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n addSCWidget,\n setWidgetOptions,\n setWidgetTitle,\n setWidgetSize,\n setWidgetSubTitle,\n setWidgetType,\n togglePreviewWidget,\n setWidgetSelector,\n setWidgetFormatter,\n setWidgetSearchField,\n setWidgetSavedSearch,\n clearWidgetModal,\n setWidgetSonraiSearch,\n loadWidget,\n updateEditWidget,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\nconst withReducer = injectReducer({ key: 'WidgetModal', reducer })\nconst withSaga = injectSaga({ key: 'WidgetModal', saga: sagas })\n\nexport default compose(withReducer, withConnect, withSaga)(WidgetModal)\n","import { fromJS } from 'immutable'\nimport { handleActions } from 'redux-actions'\n\nimport {\n ADD_SC_WIDGET,\n UPDATE_EDIT_WIDGET,\n UPDATE_WIDGET_SUCCESS,\n ADD_WIDGET_SUCCESS,\n} from 'containers/SolutionCenter/constants'\n\nconst initialState = fromJS({\n savingWidget: false,\n})\n\nconst SolutionCenterWidgetsReducer = handleActions(\n {\n [ADD_SC_WIDGET]: state => state.set('savingWidget', true),\n [ADD_WIDGET_SUCCESS]: state => state.set('savingWidget', false),\n [UPDATE_EDIT_WIDGET]: state => state.set('savingWidget', true),\n [UPDATE_WIDGET_SUCCESS]: state => state.set('savingWidget', false),\n },\n initialState\n)\n\nexport default SolutionCenterWidgetsReducer\n","import { createSelector } from 'reselect'\nimport { List } from 'immutable'\nimport { WIDGET_TYPES } from 'appConstants'\n\nexport const selectSolutionCenterWidgetsDomain = state =>\n state.get('SolutionCenterWidgets')\n\nexport const selectSavingWidget = createSelector(\n selectSolutionCenterWidgetsDomain,\n state => state.get('savingWidget', false)\n)\n\nconst getMinWidgetHeight = widgetType => {\n switch (widgetType) {\n case WIDGET_TYPES.LIST:\n return 6\n case WIDGET_TYPES.TABLE:\n return 5\n case WIDGET_TYPES.REGIONS:\n return 8\n case WIDGET_TYPES.PIE_CHART:\n return 6\n case WIDGET_TYPES.BAR_CHART:\n return 6\n default:\n return 4\n }\n}\n\nconst getMinWidgetWidth = widgetType => {\n switch (widgetType) {\n case WIDGET_TYPES.LIST:\n return 6\n case WIDGET_TYPES.TABLE:\n return 12\n case WIDGET_TYPES.GAUGE:\n return 8\n case WIDGET_TYPES.REGIONS:\n return 15\n case WIDGET_TYPES.PIE_CHART:\n return 6\n case WIDGET_TYPES.BAR_CHART:\n return 6\n default:\n return 4\n }\n}\n\nexport const selectCard = (state, props) => props.card\nexport const selectWidgets = createSelector(\n selectCard,\n card => card.get('widgets', List()).toJS() || []\n)\n\nexport const selectLayout = createSelector(\n selectWidgets,\n widgets => {\n return widgets\n .map(widget => {\n if (widget.widgetSize) {\n return {\n w: widget.widgetSize[0],\n h: widget.widgetSize[1],\n x: widget.widgetLocation[0],\n y: widget.widgetLocation[1],\n i: widget.sid,\n static: widget.static,\n moved: false,\n isResizable: undefined,\n isDraggable: undefined,\n maxH: undefined,\n maxW: undefined,\n minH: getMinWidgetHeight(widget.type),\n minW: getMinWidgetWidth(widget.type),\n }\n }\n })\n .filter(widget => !!widget)\n }\n)\n","import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n err: {\n id: 'app.components.RegionsWidget.err',\n defaultMessage: 'This widget has been misconfigured.',\n },\n})\n","/**\n *\n * RegionsMap\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport _ from 'lodash'\nimport { scaleLinear } from 'd3-scale'\nimport Color from 'color'\nimport Button from 'components/Button'\nimport geoObj from 'assets/world-50m.json'\nimport Icon from 'components/Icon'\n\nimport {\n ComposableMap,\n ZoomableGroup,\n Geographies,\n Geography,\n Markers,\n Marker,\n} from 'react-simple-maps'\nimport { getCoordConf } from 'utils/widgetUtils'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\n\nclass RegionsMap extends React.Component {\n constructor(props) {\n super(props)\n this.state = {\n zoom: 1,\n activeMarker: null,\n selectedMarker: null,\n itemsHover: false,\n }\n this.styles = {\n mapContainer: {\n overflow: 'hidden',\n },\n mapGrid: {\n display: 'grid',\n gridTemplateColumns: 'auto auto',\n overflow: 'hidden',\n },\n tooltip: {\n fill: '#fff',\n filter: 'url(#shadow)',\n },\n zoomButton: {\n color: 'white',\n padding: '0.5rem 1rem',\n },\n zoomBtnCont: {\n bottom: '0px',\n right: '0px',\n position: 'absolute',\n },\n legendHighlight: {\n color: this.props.theme.primary,\n borderRadius: '1em',\n cursor: 'pointer',\n },\n legendHeader: {\n paddingLeft: '5px',\n backgroundColor: this.props.theme.neutralLight,\n },\n legend: {\n overflowY: 'auto',\n padding: '0.5em',\n height: '100%',\n },\n svg: {\n fontFamily: '\"Font Awesome 5 Pro\"',\n fontWeight: 300,\n userSelect: 'none',\n cursor: 'pointer',\n },\n svgItems: {\n fontSize: '11px',\n cursor: 'pointer',\n },\n svgItemsHighlight: {\n fontSize: '11px',\n cursor: 'pointer',\n color: this.props.theme.primary,\n },\n }\n }\n\n handleZoomIn = () => {\n this.setState(currentState => ({\n zoom: currentState.zoom * 1.25,\n }))\n }\n\n handleZoomOut = () => {\n this.setState(currentState => ({\n zoom: currentState.zoom / 1.25,\n }))\n }\n\n handleMarkerHover = value => {\n this.setState({\n activeMarker: value,\n })\n }\n\n handleMarkerExit = value => {\n if (value === this.state.activeMarker) {\n this.setState({\n activeMarker: null,\n })\n }\n }\n\n handleOnClickRegion = value => {\n if (this.state.selectedMarker === value) {\n this.setState({ selectedMarker: null })\n } else {\n this.setState({ selectedMarker: value })\n }\n }\n\n handleDeselect = () => {\n this.setState({ selectedMarker: null })\n }\n\n getMarker = (value, count, scale) => {\n const coordConf = getCoordConf(value, this.props.theme)\n const coordinates = coordConf.coordinates\n\n if (coordinates) {\n const hovered = this.state.activeMarker === value\n return (\n \n \n \n )\n } else {\n return null\n }\n }\n\n getRegionSvgLabel = title => {\n const limit = 21 // the legal age of booze in america\n return title.length > limit ? `${title.substr(0, limit - 1)}...` : title\n }\n\n enterItems = () => {\n this.setState({ itemsHover: true })\n }\n\n leaveItems = () => {\n this.setState({ itemsHover: false })\n }\n\n getToolTip = (value, count) => {\n const coordConf = getCoordConf(value, this.props.theme)\n const coordinates = coordConf.coordinates\n\n if (!coordinates) {\n return null\n }\n\n return (\n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n {count} items\n \n \n {this.getRegionSvgLabel(coordConf.label)}\n \n \n {coordConf.type}\n \n \n \n \n )\n }\n\n renderGeography = (geographies, projection) => {\n const baseStyle = {\n fill: this.props.theme.neutralLight,\n stroke: this.props.theme.neutralMedium,\n strokeWidth: 0.5,\n outline: 'none',\n }\n\n return geographies\n .filter(geo => geo.properties.NAME !== 'Antarctica')\n .map((geography, i) => (\n \n ))\n }\n\n getMarkers = () => {\n const { regionCounts } = this.props\n const counts = _.toArray(regionCounts).sort((a, b) => a - b)\n const maxCount = counts.pop()\n\n const scale = scaleLinear()\n .domain([0, maxCount])\n .range([4, 20])\n\n scale.clamp(true)\n\n const selectedMarkerCount = this.state.selectedMarker\n ? regionCounts[this.state.selectedMarker]\n : null\n\n const markers = Object.keys(regionCounts)\n .map(key => this.getMarker(key, regionCounts[key], scale))\n .filter(node => !!node)\n\n if (this.state.selectedMarker) {\n markers.push(\n this.getToolTip(this.state.selectedMarker, selectedMarkerCount)\n )\n }\n\n return {markers}\n }\n\n getLegend = () => {\n let { regionCounts } = this.props\n\n const all = Object.keys(regionCounts)\n .filter(key => key !== 'null')\n .sort()\n let byType = {}\n\n all.forEach(region => {\n const conf = getCoordConf(region)\n if (!byType[conf.type]) {\n byType[conf.type] = []\n }\n byType[conf.type].push(region)\n })\n\n let legend = {}\n\n Object.keys(byType).forEach(cloudType => {\n if (!legend[cloudType]) {\n legend[cloudType] = []\n }\n\n byType[cloudType].forEach(region => {\n legend[cloudType].push(\n this.handleMarkerHover(region)}\n onPointerOut={() => this.handleMarkerExit(region)}\n onClick={() => this.handleOnClickRegion(region)}\n >\n {_.startCase(region)}\n \n )\n })\n })\n\n return (\n
\n {Object.keys(legend).map(type => {\n return (\n
\n
{type}
\n
\n {legend[type].map(thisLeg => {\n return thisLeg\n })}\n
\n
\n )\n })}\n
\n )\n }\n\n shouldComponentUpdate = (nextProps, nextState) => {\n let wwjd =\n Math.abs(nextProps.size.width - this.props.size.width) > 10 ||\n Math.abs(nextProps.size.height - this.props.size.height) > 10\n if (\n wwjd ||\n nextState.zoom !== this.state.zoom ||\n this.state.activeMarker !== nextState.activeMarker ||\n this.state.selectedMarker !== nextState.selectedMarker ||\n this.state.itemsHover !== nextState.itemsHover\n ) {\n return true\n } else {\n return false\n }\n }\n\n render() {\n let sizes = {}\n\n if (!this.props.size.height || !this.props.size.width) {\n sizes = {\n height: '100%',\n width: '100%',\n }\n } else {\n sizes = {\n height: `${this.props.size.height}px`,\n width: `${this.props.size.width * 0.8}px`,\n }\n }\n\n return (\n \n
\n {this.getLegend()}\n \n \n \n {this.renderGeography}\n \n {this.getMarkers()}\n \n \n
\n
\n \n \n \n \n \n \n
\n \n )\n }\n}\n\nRegionsMap.defaultProps = {\n onClickRegion: () => {},\n}\n\nRegionsMap.propTypes = {\n onClickRegion: PropTypes.func.isRequired,\n regionCounts: PropTypes.objectOf(PropTypes.number),\n theme: themeShape,\n size: PropTypes.shape({\n width: PropTypes.number,\n height: PropTypes.number,\n }),\n}\n\nexport default themeable(RegionsMap)\n","/**\n *\n * RegionsWidget\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport _ from 'lodash'\nimport { List } from 'immutable'\n\nimport messages from './messages'\nimport { TopTitle, CardBody } from 'components/Card'\nimport WidgetCard from 'components/WidgetCard'\nimport gql from 'graphql-tag'\nimport { Query } from 'react-apollo'\nimport { queryHasPivotFilter } from 'query-builder'\nimport SizeMe from 'components/SizeMe'\nimport { getSearchIdForSonraiSearches } from 'utils/sonraiUtils'\nimport { Map } from 'immutable'\nimport {\n hasSonraiSearch,\n getSonraiSearchQuery,\n getSonraiSearchData,\n getBaseSonraiSearchData,\n getFields,\n getSearchCard,\n getSelection,\n} from 'query-builder'\nimport RegionsMap from './RegionsMap'\nimport { FormattedMessage } from 'react-intl'\nimport TextLink from 'components/TextLink'\nconst styles = {\n title: {\n fontSize: '22px',\n fontWeight: '300',\n marginBottom: '5px',\n },\n subtitle: {\n fontSize: '14px',\n fontWeight: '300',\n color: '#777777',\n },\n}\n\nconst SizedRegionsMap = SizeMe(RegionsMap)\n\nclass RegionsWidget extends React.Component {\n constructor(props) {\n super(props)\n this.state = {\n thisHeight: null,\n thisWidth: null,\n }\n }\n\n getTableSavedSearchQuery = () => {\n let fields = getFields(\n this.props.savedSearches,\n this.props.resultLayout.indexedSearches.search\n )\n\n if (fields.isEmpty()) {\n return {}\n }\n\n const rootField = fields.find(\n statement => !statement.get('parentId'),\n null,\n Map()\n )\n\n const queryBuilder = this.props.getQueryBuilder(fields)\n queryBuilder.enableFlattenMode()\n queryBuilder.skipCounts()\n\n //Force-add the required columns if they are not present\n const searchCard = getSearchCard(this.props.resultLayout, 'search')\n\n queryBuilder.fields = queryBuilder.fields.update(searchCard.id, field => {\n if (!field.get('displayFields', List()).includes('region')) {\n field = field.update('displayFields', List(), propList =>\n propList.push('region')\n )\n }\n\n return field\n })\n\n const query = queryBuilder.buildPivotableSource(\n rootField.get('id'),\n 'regionmapwidget',\n { limit: 1000 }\n )\n\n return { ...query, flatten: true }\n }\n\n getWidgetQueryConfig = () => {\n if (hasSonraiSearch(this.props.options, 'search')) {\n return getSonraiSearchQuery(this.props.options.sonraiSearches.search)\n } else {\n return this.getTableSavedSearchQuery()\n }\n }\n\n getRootItem = data => {\n const keys = Object.keys(data)\n const rootKey = keys[0]\n\n return data[rootKey]\n }\n\n onClickSearch = () => {\n this.props.onClickSearch({\n savedSearchId: this.props.resultLayout.indexedSearches.search,\n sonraiSearchName: this.props.options.sonraiSearches.search,\n searchTitle: this.props.title,\n })\n }\n\n getSearchName = () => {\n return hasSonraiSearch(this.props.options, 'search')\n ? this.props.options.sonraiSearches.search\n : ''\n }\n\n onClickSonraiSearchRegion = (allData, regionName) => {\n const baseData = getBaseSonraiSearchData(allData)\n const dataType = Object.keys(baseData)[0]\n const baseQuery = this.props.sonraiSearches.find(\n search => search.get('name') === this.props.options.sonraiSearches.search\n )\n\n if (!baseQuery) {\n return\n }\n\n const baseQueryContent = baseQuery.get('query')\n\n let finalQuery\n\n const hasWhereClauseRegex = new RegExp(\n `${dataType}\\\\s*\\\\(.*where\\\\s*:\\\\s*(\\\\{.*\\\\})\\\\).*\\\\{`\n )\n const whereMatch = baseQueryContent.match(hasWhereClauseRegex)\n if (whereMatch && whereMatch.length > 1) {\n //The sonrai search has a built-in where clause, so we want to preserve that\n const originalWhereClause = whereMatch[1]\n finalQuery = `\n {\n ${dataType} ( where: {\n and: [\n {region: {op: EQ, value: \"${regionName}\"}},\n ${originalWhereClause}\n ]\n }) {\n items {\n name\n region\n srn\n }\n }\n }\n `\n } else {\n finalQuery = `\n {\n ${dataType} ( where: {\n region: {op: EQ, value: \"${regionName}\"}\n }) {\n items {\n name\n region\n srn\n }\n }\n }\n `\n }\n\n this.props.onClickSearch({\n advancedQuery: finalQuery,\n sonraiSearchName: this.props.options.sonraiSearches.search,\n searchTitle: `${this.props.title} - ${regionName}`,\n })\n }\n\n onClickRegion = (allData, regionName) => {\n if (!regionName || !this.props.onClickSearch) {\n return\n }\n\n if (hasSonraiSearch(this.props.options, 'search')) {\n this.onClickSonraiSearchRegion(allData, regionName)\n } else {\n const filter = {\n label: 'region',\n value: regionName,\n }\n\n this.props.onClickSearch({\n savedSearchId: this.props.resultLayout.indexedSearches.search,\n searchTitle: this.props.title,\n filter: filter,\n })\n }\n }\n\n getUsedRegionInfo = data => {\n if (_.isEmpty(data)) {\n return {}\n }\n\n if (hasSonraiSearch(this.props.options, 'search')) {\n //This widget expects the results to be a shape like:\n // {\n // \"data\": {\n // \"Data\": {\n // \"group\": [\n // {\n // \"key\": {\n // \"region\": \"eu-west-2\"\n // },\n // \"count\": 7\n // },\n // {\n // \"key\": {\n // \"region\": \"eastus\"\n // },\n // \"count\": 1\n // }\n // ]\n // }\n // }\n // }\n\n const rootData = getSonraiSearchData(data)\n const groupResults = rootData.group || []\n const formatted = {}\n\n groupResults.forEach(result => {\n const regionName = _.get(result, ['key', 'region'], 'UNMAPPED')\n formatted[regionName] = result.count\n })\n\n return formatted\n } else {\n const fields = getFields(\n this.props.savedSearches,\n this.props.resultLayout.indexedSearches.search\n ).toJS()\n\n const searchCard = getSearchCard(this.props.resultLayout, 'search')\n const selection = getSelection(fields, searchCard, 'items', 'items')\n\n if (!selection) {\n return 'DATA ERROR'\n }\n\n const items = _.get(data, [...selection])\n const counts = _.countBy(items, 'region')\n return counts\n }\n }\n\n handleSizeChange = _.throttle(size => {\n this.setState({ thisHeight: size.height })\n\n this.setState({ thisWidth: size.width })\n }, 100)\n\n getSearchId = () => {\n const { options, sonraiSearches, resultLayout } = this.props\n let searchObj = Map({ uiSearch: null, advancedSearch: null })\n if (hasSonraiSearch(options, 'search')) {\n const searches = getSearchIdForSonraiSearches(options, sonraiSearches)\n searchObj = searchObj.set('advancedSearch', searches)\n } else {\n searchObj = searchObj.set('uiSearch', resultLayout.indexedSearches.search)\n }\n return searchObj\n }\n\n render() {\n if (this.props.data === undefined) {\n const queryConfig = this.getWidgetQueryConfig()\n const searchId = this.getSearchId()\n\n if (queryConfig) {\n if (!queryConfig.gqlStatement) {\n return (\n \n )\n }\n\n const queryObj = gql`\n ${queryConfig.gqlStatement}\n `\n\n const filtered = queryHasPivotFilter(queryConfig.gqlStatement)\n return (\n \n {({ error, data, refetch, networkStatus }) => {\n const regionCounts = this.getUsedRegionInfo(data)\n return (\n \n \n \n {this.props.title}\n \n

{this.props.subtitle}

\n
\n \n {networkStatus !== 1 && !error && (\n \n this.onClickRegion(data, clickedRegionName)\n }\n />\n )}\n \n \n )\n }}\n \n )\n } else {\n return (\n \n \n

{this.props.title}

\n

{this.props.subtitle}

\n
\n \n
\n {' '}\n
\n \n \n )\n }\n } else {\n const regionCounts = this.props.data\n return (\n \n \n {this.props.title}\n \n \n \n this.onClickRegion(this.props.data, clickedRegionName)\n }\n />\n \n \n )\n }\n }\n}\n\nRegionsWidget.propTypes = {\n allowDelete: PropTypes.bool,\n allowUpdate: PropTypes.bool,\n data: PropTypes.array,\n getQueryBuilder: PropTypes.func,\n resultLayout: PropTypes.object,\n onClickSearch: PropTypes.func,\n onRemove: PropTypes.func,\n options: PropTypes.object,\n toggleStatic: PropTypes.func,\n savedSearches: ImmutablePropTypes.map.isRequired,\n sonraiSearches: ImmutablePropTypes.list,\n static: PropTypes.bool,\n title: PropTypes.string,\n subtitle: PropTypes.string,\n onEdit: PropTypes.func,\n widget: PropTypes.object,\n}\n\nexport default RegionsWidget\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { scaleLinear } from 'd3-scale'\nimport ContainerDimensions from 'react-container-dimensions'\nimport Button from 'components/Button'\nimport geoObj from 'assets/world-50m.json'\nimport Icon from 'components/Icon'\nimport {\n ComposableMap,\n ZoomableGroup,\n Geographies,\n Geography,\n Lines,\n Line,\n} from 'react-simple-maps'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\n\nclass ArcMap extends React.Component {\n constructor(props) {\n super(props)\n\n this.state = {\n zoom: 1.5,\n activeMarker: null,\n }\n\n this.styles = {\n zoomButton: {\n color: 'white',\n padding: '0 6px',\n },\n arcStyle: {\n stroke: this.props.theme.primary,\n fill: this.props.theme.primary,\n opacity: 0.8,\n strokeWidth: 1,\n },\n }\n }\n\n handleZoomIn = () => {\n this.setState(currentState => ({\n zoom: currentState.zoom * 1.25,\n }))\n }\n\n handleZoomOut = () => {\n this.setState(currentState => ({\n zoom: currentState.zoom / 1.25,\n }))\n }\n\n renderGeography = (geographies, projection) => {\n const baseStyle = {\n fill: this.props.theme.neutralLight,\n stroke: this.props.theme.neutralMedium,\n strokeWidth: 0.5,\n outline: 'none',\n }\n\n return geographies\n .filter(geo => geo.properties.NAME !== 'Antarctica')\n .map((geography, i) => (\n \n ))\n }\n\n // This funtion returns a curve command that builds a quadratic curve.\n // And depending on the line's curveStyle property it curves in one direction or the other.\n buildCurves = (scale, start, end, line) => {\n const x0 = start[0]\n const x1 = end[0]\n const y0 = start[1]\n const y1 = end[1]\n\n const dy = y1 - y0\n\n const goesUp = dy > 0\n\n const curve = {\n pointOfControlUp: `${x1} ${y0}`,\n pointOfControlDown: `${x0} ${y1}`,\n }[goesUp ? 'pointOfControlUp' : 'pointOfControlDown']\n\n const thickness = scale(line.count) / 2\n\n const innerCurve = {\n pointOfControlUp: `${x1} ${y0 + thickness}`,\n pointOfControlDown: `${x0} ${y1 - thickness}`,\n }[goesUp ? 'pointOfControlUp' : 'pointOfControlDown']\n\n return `\n M ${x0 + thickness} ${y0 + thickness}\n Q ${curve} ${x1} ${y1}\n L ${x1} ${y1}\n Q ${innerCurve} ${x0} ${y0}\n L ${x0 + thickness} ${y0 + thickness}\n `\n }\n\n getGradient = (conf, index) => {\n const x0 = conf.from.coordinates[0]\n const x1 = conf.to.coordinates[0]\n const dx = x1 - x0\n\n return (\n 0 ? 'rotate(90)' : undefined}\n >\n 0 ? this.props.theme.primary : this.props.theme.emphasis\n }\n />\n 0 ? this.props.theme.emphasis : this.props.theme.primary\n }\n />\n \n )\n }\n\n getArcs = () => {\n const arcsWithCount = {}\n this.props.arcs.forEach(config => {\n const from = config.from.coordinates.join('-')\n const to = config.to.coordinates.join('-')\n if (from === '-' || to === '-') {\n return\n }\n\n const key = `${from},${to}`\n\n if (!arcsWithCount[key]) {\n arcsWithCount[key] = { ...config, count: 1 }\n } else {\n arcsWithCount[key].count = arcsWithCount[key].count + 1\n }\n })\n\n return Object.values(arcsWithCount)\n }\n\n render() {\n const arcs = this.props.combine ? this.getArcs() : this.props.arcs\n let scale\n\n if (this.props.combine && arcs.length > 0) {\n const counts = arcs.sort((a, b) => b.count - a.count)\n const maxLocation = counts[0]\n\n scale = scaleLinear()\n .domain([0, maxLocation.count])\n .range([1, 10])\n\n scale.clamp(true)\n }\n\n return (\n \n
\n \n this.getGradient(conf, index))}\n >\n \n \n {this.renderGeography}\n \n\n \n {arcs.map((conf, index) => (\n \n ))}\n \n \n \n \n
\n
\n \n \n \n \n \n \n
\n \n )\n }\n}\n\nArcMap.defaultProps = {\n arcs: [],\n combine: true,\n onClickRegion: () => {},\n}\n\nArcMap.propTypes = {\n arcs: PropTypes.array,\n combine: PropTypes.bool,\n theme: themeShape,\n}\n\nexport default themeable(ArcMap)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { Query } from 'react-apollo'\nimport gql from 'graphql-tag'\nimport _ from 'lodash'\nimport { Map, List } from 'immutable'\n\nimport { TopTitle, CardBody } from 'components/Card'\nimport WidgetCard from 'components/WidgetCard'\nimport { getCoordConf } from 'utils/widgetUtils'\nimport { getSearchIdForSonraiSearches } from 'utils/sonraiUtils'\nimport TextLink from 'components/TextLink'\n\nimport {\n getSonraiSearchQuery,\n getSonraiSearchData,\n hasSonraiSearch,\n queryHasPivotFilter,\n getFields,\n getSelection,\n} from 'query-builder'\nimport ArcMap from './ArcMap'\n\nexport class ArcMapWidget extends React.Component {\n styles = {\n title: {\n fontSize: '22px',\n fontWeight: '300',\n },\n }\n\n getText = locations => {\n if (_.isEmpty(locations)) {\n return []\n }\n\n const points = []\n const locs = new Set() //eslint-disable-line no-restricted-globals\n locations.items.forEach(item => {\n const name = _.get(item, ['isInRegion', 'items', 0, 'name'])\n locs.add(name)\n })\n locs.forEach(name => {\n const { coordinates } = getCoordConf(name)\n const nme = name || 'null'\n if (\n coordinates &&\n coordinates[0] !== null &&\n coordinates[1] !== null &&\n nme !== null\n ) {\n points.push({ position: coordinates, name: nme })\n }\n })\n\n return points\n }\n\n getArcs = locations => {\n if (_.isEmpty(locations)) {\n return []\n }\n\n const arcs = []\n\n locations.items.forEach(item => {\n const name = item.region\n const { coordinates } = getCoordConf(name)\n if (coordinates !== null && coordinates.indexOf(null) === -1) {\n const attachedLocations = _.get(item, ['performedAt', 'items'])\n attachedLocations.forEach(loc => {\n arcs.push({\n from: {\n name: loc.srn,\n coordinates: [loc.longitude, loc.latitude],\n },\n to: {\n name,\n coordinates,\n },\n })\n })\n }\n })\n\n return arcs\n }\n\n getTableSavedSearchQuery = () => {\n let fields = getFields(\n this.props.savedSearches,\n this.props.resultLayout.indexedSearches.advmapsearch\n )\n\n if (fields.isEmpty()) {\n return {}\n }\n\n const rootField = fields.find(\n statement => !statement.get('parentId'),\n null,\n Map()\n )\n\n const queryBuilder = this.props.getQueryBuilder(fields)\n queryBuilder.enableFlattenMode()\n queryBuilder.skipCounts()\n\n //Force-add the required columns if they are not present\n queryBuilder.fields = queryBuilder.fields.map(field => {\n const nodeType = field.getIn(['definition', 'type', 'name'])\n if (nodeType === 'LocationEdgeRelation') {\n if (!field.get('displayFields', List()).includes('latitude')) {\n field = field.update('displayFields', List(), propList =>\n propList.push('latitude')\n )\n }\n\n if (!field.get('displayFields', List()).includes('longitude')) {\n field = field.update('displayFields', List(), propList =>\n propList.push('longitude')\n )\n }\n } else if (nodeType === 'ActionEdgeRelation') {\n if (!field.get('displayFields', List()).includes('region')) {\n field = field.update('displayFields', List(), propList =>\n propList.push('region')\n )\n }\n }\n\n return field\n })\n\n const query = queryBuilder.buildPivotableSource(\n rootField.get('id'),\n 'arcmapQuery',\n { limit: 500 }\n )\n\n return {\n ...query,\n flatten: true,\n }\n }\n\n getQuery = () => {\n if (hasSonraiSearch(this.props.options, 'advmapsearch')) {\n return getSonraiSearchQuery(\n this.props.options.sonraiSearches.advmapsearch\n )\n } else {\n return this.getTableSavedSearchQuery()\n }\n }\n\n getSearchName = () => {\n return hasSonraiSearch(this.props.options, 'advmapsearch')\n ? this.props.options.sonraiSearches.advmapsearch\n : this.props.savedSearches.getIn([\n this.props.resultLayout.indexedSearches.advmapsearch,\n 'name',\n ])\n }\n\n onClickSearch = () => {\n this.props.onClickSearch({\n savedSearchId: this.props.resultLayout.indexedSearches.advmapsearch,\n sonraiSearchName: this.props.options.sonraiSearches.advmapsearch,\n searchTitle: this.props.title,\n })\n }\n\n getData = data => {\n if (!_.isEmpty(this.props.options.sonraiSearches.advmapsearch)) {\n return getSonraiSearchData(data)\n } else {\n return this.getSavedSearchData(data)\n }\n }\n\n getSavedSearchData = data => {\n const fields = getFields(\n this.props.savedSearches,\n this.props.resultLayout.indexedSearches.advmapsearch\n )\n\n const hasPerformedAts = fields\n .filter(\n field => field.getIn(['definition', 'name'], '') === 'performedAt'\n )\n .map(field => field.get('parentId'))\n .toList()\n\n const actions = hasPerformedAts\n .map(id => fields.get(id))\n .filter(field => field.getIn(['definition', 'name'], '') === 'Actions')\n\n if (actions.isEmpty()) {\n return []\n }\n\n const selection = getSelection(\n fields.toJS(),\n actions.first().toJS(),\n undefined,\n 'items'\n )\n\n if (!selection) {\n return []\n }\n\n return _.get(data, [...selection], [])\n }\n\n getSearchId = () => {\n const { options } = this.props\n let searchObj = Map({ uiSearch: null, advancedSearch: null })\n if (hasSonraiSearch(options, 'advmapsearch')) {\n const searches = getSearchIdForSonraiSearches(\n options,\n this.props.sonraiSearches\n )\n searchObj = searchObj.set('advancedSearch', searches)\n } else {\n searchObj = searchObj.set(\n 'uiSearch',\n this.props.resultLayout.indexedSearches.advmapsearch\n )\n }\n\n return searchObj\n }\n\n render() {\n if (this.props.data === undefined) {\n const query = this.getQuery()\n const searchId = this.getSearchId()\n if (!query.gqlStatement) {\n return \n }\n\n const filtered = queryHasPivotFilter(query.gqlStatement)\n\n return (\n \n {({ error, data, refetch, networkStatus }) => {\n const results = this.getData(data)\n return (\n \n \n \n {this.props.title}\n \n \n \n \n \n \n )\n }}\n \n )\n } else {\n const { arcs, text } = this.props.data\n return (\n \n {' '}\n \n {this.props.title}\n \n \n \n \n \n )\n }\n }\n}\n\nArcMapWidget.propTypes = {\n allowDelete: PropTypes.bool,\n allowUpdate: PropTypes.bool,\n getQueryBuilder: PropTypes.func.isRequired,\n title: PropTypes.string.isRequired,\n onClickSearch: PropTypes.func,\n onRemove: PropTypes.func,\n toggleStatic: PropTypes.func,\n static: PropTypes.bool,\n options: PropTypes.object,\n resultLayout: PropTypes.object,\n savedSearches: ImmutablePropTypes.map.isRequired,\n sonraiSearches: ImmutablePropTypes.iterable.isRequired,\n onEdit: PropTypes.func,\n data: PropTypes.object,\n widget: PropTypes.object,\n}\n\nexport default ArcMapWidget\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport WidgetCard from 'components/WidgetCard'\nimport MarkdownDisplay from 'components/MarkdownDisplay'\n\nclass TextWidget extends Component {\n styles = {\n title: {\n fontWeight: '400',\n fontSize: '1.15rem',\n overflow: 'hidden',\n marginBottom: '0.5rem',\n },\n description: {\n overflow: 'hidden',\n },\n }\n\n render() {\n const {\n title,\n resultLayout: {\n widgetOptions: { description },\n },\n } = this.props\n return (\n \n
{title}
\n
\n \n
\n \n )\n }\n}\n\nTextWidget.propTypes = {\n resultLayout: PropTypes.shape({\n widgetOptions: PropTypes.shape({\n description: PropTypes.string,\n }),\n }),\n title: PropTypes.string,\n allowDelete: PropTypes.bool,\n allowUpdate: PropTypes.bool,\n onRemove: PropTypes.func,\n onEdit: PropTypes.func,\n static: PropTypes.bool,\n widget: PropTypes.object,\n}\n\nexport default TextWidget\n","import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n widgetError: {\n id: 'app.containers.SolutionCenterWidgets.widgetError',\n defaultMessage: 'Oops...There was an error loading your widget data',\n },\n widgetNoPermission: {\n id: 'app.containers.SolutionCenterWidgets.widgetNoPermission',\n defaultMessage: 'Insufficent Permissions to view data',\n },\n logError: {\n id: 'app.containers.SolutionCenterWidgets.logError',\n defaultMessage: 'Click to Log',\n },\n})\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { FormattedMessage } from 'react-intl'\n\nimport WidgetCard from 'components/WidgetCard'\nimport fail from 'assets/sadcloud.png'\n\nimport messages from './messages'\n\nexport default class WidgetErrorBoundry extends Component {\n constructor(props) {\n super(props)\n this.state = {\n hasError: false,\n errorMessage: '',\n errorSource: '',\n componentStack: '',\n errorStack: '',\n }\n\n this.styles = {\n errorWrapper: {\n overflow: 'auto',\n color: '#666666',\n textAlign: 'center',\n },\n errorImg: {\n height: '40px',\n maxWidth: '150px',\n },\n }\n }\n\n componentDidCatch(error, info) {\n this.setState({\n hasError: true,\n errorMessage: error.message,\n errorStack: error.stack,\n componentStack: info.componentStack,\n errorSource: error.source ? error.source.body : '',\n })\n }\n\n render() {\n if (this.state.hasError || !this.props.canViewData) {\n return (\n \n
\n {this.props.canViewData && (\n \n )}\n

\n {!this.props.canViewData ? (\n `${messages.widgetNoPermission.defaultMessage} for Widget: ${\n this.props.title\n }`\n ) : (\n \n )}\n

\n

{this.state.errorMessage}

\n
\n \n )\n }\n\n return this.props.children\n }\n}\n\nWidgetErrorBoundry.defaultProps = {\n allowDelete: true,\n allowUpdate: false,\n}\n\nWidgetErrorBoundry.propTypes = {\n allowDelete: PropTypes.bool,\n allowUpdate: PropTypes.bool,\n onEdit: PropTypes.func,\n onRemove: PropTypes.func,\n children: PropTypes.oneOfType([\n PropTypes.object,\n PropTypes.arrayOf(PropTypes.object),\n ]).isRequired,\n title: PropTypes.string,\n canViewData: PropTypes.bool,\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport permissionChecker from 'containers/PermissionChecker'\nimport {\n selectSavedSearches,\n selectSonraiSearches,\n selectPivot,\n} from 'containers/SonraiData/selectors'\nimport { WIDGET_TYPES } from 'appConstants'\nimport BigStatWidget from 'components/BigStatWidget'\nimport TableWidget from 'components/TableWidget'\nimport RatioWidget from 'components/RatioWidget'\nimport GaugeWidget from 'components/GaugeWidget'\nimport RegionsWidget from 'components/RegionsWidget'\nimport ListWidget from 'components/ListWidget'\nimport PieChartWidget from 'components/PieChartWidget'\nimport BarChartWidget from 'components/BarChartWidget'\nimport ArcMapWidget from 'components/ArcMapWidget'\nimport AlertWidget from 'components/AlertWidget'\nimport SparkWidget from 'components/SparkWidget'\nimport ComplianceWidget from 'components/ComplianceWidget'\nimport TextWidget from 'components/TextWidget'\nimport WidgetErrorBoundry from './WidgetErrorBoundry'\nimport _ from 'lodash'\n\nexport class Widget extends React.Component {\n getWidgetComponent = widgetType => {\n switch (widgetType) {\n case WIDGET_TYPES.LIST:\n return ListWidget\n case WIDGET_TYPES.BIG_COUNT:\n return BigStatWidget\n case WIDGET_TYPES.TABLE:\n return TableWidget\n case WIDGET_TYPES.RATIO:\n return RatioWidget\n case WIDGET_TYPES.GAUGE:\n return GaugeWidget\n case WIDGET_TYPES.REGIONS:\n return RegionsWidget\n case WIDGET_TYPES.PIE_CHART:\n return PieChartWidget\n case WIDGET_TYPES.BAR_CHART:\n return BarChartWidget\n case WIDGET_TYPES.ADVMAP:\n return ArcMapWidget\n case WIDGET_TYPES.ALERT:\n return AlertWidget\n case WIDGET_TYPES.SPARK:\n return SparkWidget\n case WIDGET_TYPES.COMPLIANCE:\n return ComplianceWidget\n case WIDGET_TYPES.TEXT:\n return TextWidget\n default:\n return null\n }\n }\n\n removeWidget = () => {\n this.props.removeWidget(this.props.widget.get('srn'))\n }\n\n editWidget = () => {\n this.props.onEdit(this.props.widget.get('srn'))\n }\n\n toggleStatic = () => {\n this.props.toggleStatic(this.props.widget.get('srn'))\n }\n\n getWidgetResultsTitle = (searchTitle, sonraiSearchName) => {\n const { widget } = this.props\n let widgetObj = widget.toJS()\n\n if (\n widgetObj.resultLayout &&\n widgetObj.resultLayout.indexedSearches &&\n widgetObj.resultLayout.indexedSearches\n ) {\n const key = _.keys(widgetObj.resultLayout.indexedSearches)\n const id = widgetObj.resultLayout.indexedSearches[key]\n const search = this.props.savedSearches.get(id)\n if (search && !sonraiSearchName) {\n return search.get('name')\n }\n }\n\n return searchTitle || sonraiSearchName\n }\n\n setWidgetOptions = options => {\n this.props.setWidgetOptions(this.props.widget.get('srn'), options)\n }\n\n shouldComponentUpdate(nextProps) {\n let render = nextProps.canRender === false ? false : true\n return render\n }\n\n render() {\n const WidgetComponent = this.getWidgetComponent(\n this.props.widget.get('type')\n )\n\n if (!WidgetComponent) {\n return
\n }\n const canEdit = this.props.userHasPermission({\n permissionName: 'edit.solutioncards',\n resourceId: this.props.widget.get('resourceId'),\n })\n\n const canViewData = this.props.canViewData\n\n return (\n \n \n \n )\n }\n}\n\nWidget.propTypes = {\n getQueryBuilder: PropTypes.func.isRequired,\n layout: PropTypes.object.isRequired,\n onClickAlert: PropTypes.func.isRequired,\n onClickControlFramework: PropTypes.func.isRequired,\n onClickNodeView: PropTypes.func.isRequired,\n onClickSearch: PropTypes.func.isRequired,\n pivot: ImmutablePropTypes.map.isRequired,\n removeWidget: PropTypes.func.isRequired,\n savedSearches: ImmutablePropTypes.iterable.isRequired,\n onEdit: PropTypes.func.isRequired,\n setWidgetOptions: PropTypes.func.isRequired,\n sonraiSearches: ImmutablePropTypes.iterable.isRequired,\n toggleStatic: PropTypes.func.isRequired,\n userHasPermission: PropTypes.func.isRequired,\n widget: ImmutablePropTypes.map.isRequired,\n canRender: PropTypes.bool,\n canViewData: PropTypes.bool,\n}\nconst mapStateToProps = createStructuredSelector({\n pivot: selectPivot,\n savedSearches: selectSavedSearches,\n sonraiSearches: selectSonraiSearches,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators({}, dispatch)\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nexport default compose(withConnect, permissionChecker)(Widget)\n","import React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport injectReducer from 'utils/injectReducer'\nimport GridLayout from 'react-grid-layout'\nimport _ from 'lodash'\nimport qs from 'query-string'\nimport { push } from 'connected-react-router'\nimport { List, Map } from 'immutable'\n\nimport CenterContent from 'components/CenterContent'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport Icon from 'components/Icon'\nimport BorderlessButton from 'components/BorderlessButton'\nimport BorderedCard from 'components/BorderedCard'\nimport SizeMe from 'components/SizeMe'\nimport { getNodeViewPushParams } from 'utils/sonraiUtils'\nimport {\n setWidgetOptions,\n removeSCWidget,\n toggleSCWidgetStatic,\n updateWidget,\n setShowCreateWidgetModal,\n} from 'containers/SolutionCenter/actions'\nimport { selectQueryTypes, selectPivot } from 'containers/SonraiData/selectors'\nimport { QueryBuilder } from 'query-builder'\nimport WidgetModal from 'containers/WidgetModal'\nimport permissionsChecker from 'containers/PermissionChecker'\n\nimport reducer from './reducer'\nimport { selectLayout, selectSavingWidget } from './selectors'\nimport Widget from './Widget'\n\nconst SizedGridLayout = SizeMe(GridLayout)\n\nexport class SolutionCenterWidgets extends React.Component {\n state = {\n showWidgetModal: false,\n editingWidgetId: null,\n renderLocks: Map(),\n }\n\n componentDidUpdate(oldProps) {\n if (oldProps.savingWidget && !this.props.savingWidget) {\n this.setState({\n showWidgetModal: false,\n editingWidgetId: null,\n })\n }\n }\n\n setEditingWidget = widgetId => {\n this.setState({\n showWidgetModal: true,\n editingWidgetId: widgetId,\n })\n }\n\n toggleEditWidgetModal = () => {\n this.setState(currentState => ({\n showWidgetModal: !currentState.showWidgetModal,\n editingWidgetId: null,\n }))\n }\n\n setWidgetOptions = (widgetId, options) => {\n this.props.setWidgetOptions(this.props.card.get('srn'), widgetId, options)\n }\n\n onClickSearch = params => {\n const pathname = '/App/WidgetResultExplorer/'\n this.props.push({\n pathname: pathname,\n state: params,\n })\n }\n\n onClickAlert = id => {\n this.props.push({\n pathname: '/App/Alert',\n search: qs.stringify({\n alertId: id,\n }),\n })\n }\n\n onClickControlFramework = srn => {\n this.props.push({\n pathname: '/App/ControlCenter/ControlGroup',\n search: qs.stringify({\n controlGroupId: srn,\n }),\n })\n }\n\n removeWidget = widgetId => {\n this.props.removeSCWidget(this.props.card.get('srn'), widgetId)\n }\n\n toggleStatic = widgetId => {\n this.props.toggleSCWidgetStatic(this.props.card.get('srn'), widgetId)\n }\n\n onClickNodeView = (nodeId, type) => {\n this.props.push(getNodeViewPushParams(nodeId, type))\n }\n\n handleLayoutChange = newLayout => {\n newLayout.forEach(widgetLayout => {\n const oldWidgetLayout =\n _.find(this.props.layout, layout => layout.i === widgetLayout.i) || {}\n\n const oldProps = {\n h: oldWidgetLayout.h,\n w: oldWidgetLayout.w,\n x: oldWidgetLayout.x,\n y: oldWidgetLayout.y,\n }\n\n const newProps = {\n h: widgetLayout.h,\n w: widgetLayout.w,\n x: widgetLayout.x,\n y: widgetLayout.y,\n }\n\n if (!_.isEqual(oldProps, newProps)) {\n const widget = this.props.card\n .get('widgets')\n .toJS()\n .find(widget => widget.sid === widgetLayout.i)\n\n let updatedWidget = {\n ...widget,\n }\n\n updatedWidget.widgetSize = [widgetLayout.w, widgetLayout.h]\n updatedWidget.widgetLocation = [widgetLayout.x, widgetLayout.y]\n this.props.updateWidget(this.props.card.get('srn'), updatedWidget)\n }\n })\n }\n\n getQueryBuilder = fields => {\n const queryBuilder = new QueryBuilder({\n query: fields,\n types: this.props.queryTypes,\n pivot: this.props.pivot,\n })\n\n return queryBuilder\n }\n\n lockRender = (layout, oldItem) => {\n this.setState(old => {\n return { renderLocks: old.renderLocks.set(oldItem.i, false) }\n })\n }\n\n unlockRender = (layout, oldItem) => {\n this.setState(old => {\n return { renderLocks: old.renderLocks.set(oldItem.i, true) }\n })\n }\n\n render() {\n const canUpdateSolutionCard = this.props.userHasPermission({\n permissionName: 'edit.solutioncards',\n resourceId: this.props.card.get('resourceId'),\n })\n\n const canViewData = this.props.userHasPermission({\n permissionName: 'view.data',\n })\n\n if (\n this.props.card.get('widgets', List()).isEmpty() &&\n canUpdateSolutionCard\n ) {\n return (\n \n \n \n this.props.setShowCreateWidgetModal(true)}\n style={{ width: '100%', height: '100%' }}\n >\n \n \n
\n Create new Widget\n \n \n \n \n )\n }\n\n const editingWidget = this.props.card\n .get('widgets', List())\n .find(\n widget => widget.get('srn') === this.state.editingWidgetId,\n null,\n Map()\n )\n return (\n \n {/*Setting useCSSTransforms makes widget dropdowns not be covered up by other widgets*/}\n \n {this.props.card.get('widgets', List()).map((widget, index) => {\n const canEdit = this.props.userHasPermission({\n permissionName: 'edit.solutioncards',\n resourceId: widget.get('resourceId'),\n })\n\n return (\n
\n \n
\n )\n })}\n \n {canUpdateSolutionCard && (\n \n \n \n )}\n
\n )\n }\n}\n\nSolutionCenterWidgets.propTypes = {\n card: ImmutablePropTypes.contains({\n sid: PropTypes.string.isRequired,\n srn: PropTypes.string.isRequired,\n widgets: ImmutablePropTypes.listOf(\n ImmutablePropTypes.contains({\n sid: PropTypes.string.isRequired,\n title: PropTypes.string.isRequired,\n subtitle: PropTypes.string.isRequired,\n type: PropTypes.oneOf([\n 'bigCount',\n 'table',\n 'pieChart',\n 'lineChart',\n 'ratio',\n 'barChart',\n 'list',\n 'gauge',\n 'map',\n 'regions',\n 'advMap',\n 'compliance',\n 'spark',\n 'alert',\n ]).isRequired,\n options: ImmutablePropTypes.map,\n query: ImmutablePropTypes.map,\n selection: PropTypes.string,\n formatter: PropTypes.func,\n widgetSize: ImmutablePropTypes.list.isRequired,\n widgetLocation: ImmutablePropTypes.list.isRequired,\n static: PropTypes.bool.isRequired,\n })\n ),\n }).isRequired,\n layout: PropTypes.array.isRequired,\n pivot: ImmutablePropTypes.map.isRequired,\n push: PropTypes.func.isRequired,\n queryTypes: ImmutablePropTypes.iterable.isRequired,\n removeSCWidget: PropTypes.func.isRequired,\n savingWidget: PropTypes.bool,\n setShowCreateWidgetModal: PropTypes.func.isRequired,\n setWidgetOptions: PropTypes.func.isRequired,\n theme: themeShape,\n toggleSCWidgetStatic: PropTypes.func.isRequired,\n updateWidget: PropTypes.func.isRequired,\n userHasPermission: PropTypes.func,\n}\n\nconst mapStateToProps = createStructuredSelector({\n layout: selectLayout,\n pivot: selectPivot,\n queryTypes: selectQueryTypes,\n savingWidget: selectSavingWidget,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n push,\n removeSCWidget,\n setWidgetOptions,\n toggleSCWidgetStatic,\n updateWidget,\n setShowCreateWidgetModal,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\nconst withReducer = injectReducer({ key: 'SolutionCenterWidgets', reducer })\n\nexport default compose(\n withReducer,\n withConnect,\n permissionsChecker,\n themeable\n)(SolutionCenterWidgets)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Label } from 'reactstrap'\n\nimport { exists } from 'utils/sonraiUtils'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\n\nexport class Filter extends React.Component {\n constructor(props) {\n super(props)\n\n this.styles = {\n container: {\n padding: '0 0.3em',\n margin: '1em 0',\n },\n selected: {\n borderLeft: `2px solid ${props.theme.secondary}`,\n },\n unSelected: {\n borderLeft: `2px solid ${props.theme.light}`,\n },\n }\n }\n\n render() {\n return (\n \n \n {this.props.children}\n \n )\n }\n}\n\nFilter.propTypes = {\n children: PropTypes.node,\n selectedValue: PropTypes.any,\n label: PropTypes.node,\n theme: themeShape,\n}\n\nexport default themeable(Filter)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport AsyncSelect from 'react-select/async-creatable'\n\nexport class TypeaheadFilter extends React.Component {\n componentDidUpdate() {\n if (this.optionsLoaded() && this.callback) {\n this.callback(this.props.options)\n this.callback = null\n }\n }\n\n onChange = value => {\n if (!value || value.length === 0) {\n this.props.onChange(null)\n return\n }\n\n this.props.onChange({\n value: value.map(valObj => valObj.value),\n })\n }\n\n onCreateOption = value => {\n this.props.onChange({\n value: value,\n })\n\n this.props.addNew(value)\n }\n\n getSelectedValues = () => {\n if (!this.props.value || this.props.value.length === 0) {\n return null\n }\n\n return this.props.value.map(val => ({\n label: val,\n value: val,\n }))\n }\n\n optionsLoaded = () => {\n return this.props.options && this.props.options.length > 0\n }\n\n loadOptions = (inputValue, callback) => {\n if (this.props.loadOptions) {\n if (!this.optionsLoaded()) {\n this.props.loadOptions()\n this.callback = callback\n return\n }\n }\n\n callback(this.getFilteredOptions(inputValue))\n }\n\n getFilteredOptions = inputValue => {\n const { options } = this.props\n if (inputValue) {\n return options.filter(option =>\n option.label.toLowerCase().includes(inputValue.toLowerCase())\n )\n }\n return options\n }\n\n formatCreateLabel = inputValue => {\n return `\"${inputValue}\"`\n }\n\n render() {\n return (\n \n )\n }\n}\n\nTypeaheadFilter.defaultProps = {\n style: {},\n}\n\nTypeaheadFilter.propTypes = {\n addNew: PropTypes.func,\n onChange: PropTypes.func.isRequired,\n name: PropTypes.string,\n value: PropTypes.arrayOf(PropTypes.string),\n options: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string,\n value: PropTypes.any,\n })\n ),\n loadOptions: PropTypes.func,\n}\n\nexport default TypeaheadFilter\n","/**\n *\n * FilterPanel\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\n\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport Button from 'components/Button'\nimport BorderlessButton from 'components/BorderlessButton'\nimport Icon from 'components/Icon'\nimport IHelp from 'containers/IHelp'\n\nclass FilterPanel extends React.Component {\n constructor(props) {\n super(props)\n\n this.styles = {\n panel: {\n backgroundColor: props.theme.light,\n boxShadow: '-1px 0 3px 0 rgba(0, 0, 0, 0.25)',\n position: 'absolute',\n right: 0,\n top: 0,\n height: '100%',\n width: '30em',\n margin: 0,\n display: 'grid',\n gridTemplateRows: 'auto 1fr 12%',\n },\n body: {\n padding: '1em',\n flex: 1,\n },\n header: {\n borderBottom: `1px solid ${props.theme.neutralLight}`,\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: '1em 0.2em',\n },\n headerContent: {\n display: 'flex',\n alignItems: 'center',\n padding: '0 1em',\n },\n footerButton: {\n display: 'block',\n height: '100%',\n width: '100%',\n borderTop: `1px solid ${props.theme.neutralLight}`,\n },\n title: {\n fontSize: '1.1em',\n paddingLeft: '1em',\n },\n }\n }\n\n render() {\n return (\n
\n
\n
\n \n
{this.props.title}
\n
\n
\n \n \n \n
\n
\n
{this.props.children}
\n
\n \n Apply Filters\n \n
\n
\n )\n }\n}\n\nFilterPanel.propTypes = {\n applyFilters: PropTypes.func,\n children: PropTypes.node,\n hasChanges: PropTypes.bool,\n theme: themeShape,\n title: PropTypes.node,\n toggle: PropTypes.func,\n}\n\nexport default themeable(FilterPanel)\nexport { default as Filter } from './Filter'\nexport { default as TypeaheadFilter } from './TypeaheadFilter'\n","export const SET_SELECTED_PIVOT =\n 'app/SolutionCenterFilterPanel/SET_SELECTED_PIVOT'\nexport const CLEAR_SELECTED_PIVOTS =\n 'app/SolutionCenterFilterPanel/CLEAR_SELECTED_PIVOTS'\nexport const ADD_TAG_FILTER = 'app/SolutionCenterFilterPanel/ADD_TAG_FILTER'\n","import { fromJS, Map } from 'immutable'\nimport { handleActions } from 'redux-actions'\nimport {\n SET_SELECTED_PIVOT,\n CLEAR_SELECTED_PIVOTS,\n ADD_TAG_FILTER,\n} from './constants'\n\nconst initialState = fromJS({\n selectedPivots: {},\n tagFilters: [],\n})\n\nconst solutionCenterReducer = handleActions(\n {\n [ADD_TAG_FILTER]: (state, { payload }) =>\n state.updateIn(['tagFilters'], tagFilters => tagFilters.push(payload)),\n [CLEAR_SELECTED_PIVOTS]: state => state.set('selectedPivots', Map()),\n [SET_SELECTED_PIVOT]: (state, { payload }) => {\n return state.setIn(\n ['selectedPivots', payload.type],\n fromJS(payload.value)\n )\n },\n },\n initialState\n)\n\nexport default solutionCenterReducer\n","import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n filtersTitle: {\n id: 'app.containers.SolutionCenterFilterPanel.filtersTitle',\n defaultMessage: 'Filters',\n },\n dateRange: {\n id: 'app.containers.SolutionCenterFilterPanel.dateRange',\n defaultMessage: 'Date Range',\n },\n days1: {\n id: 'app.containers.SolutionCenterFilterPanel.days1',\n defaultMessage: 'Since 24 Hours',\n },\n days7: {\n id: 'app.containers.SolutionCenterFilterPanel.days7',\n defaultMessage: 'Since 7 Days Ago',\n },\n days30: {\n id: 'app.containers.SolutionCenterFilterPanel.days30',\n defaultMessage: 'Since 30 Days Ago',\n },\n days90: {\n id: 'app.containers.SolutionCenterFilterPanel.days90',\n defaultMessage: 'Since 90 Days Ago',\n },\n accountFilterTitle: {\n id: 'app.containers.SolutionCenterFilterPanel.accountFilterTitle',\n defaultMessage: 'Account',\n },\n tagFilterTitle: {\n id: 'app.containers.SolutionCenterFilterPanel.tagFilterTitle',\n defaultMessage: 'Tag Set',\n },\n})\n","import {\n SET_SELECTED_PIVOT,\n CLEAR_SELECTED_PIVOTS,\n ADD_TAG_FILTER,\n} from './constants'\nimport { createAction } from 'redux-actions'\n\nexport const setSelectedPivot = createAction(SET_SELECTED_PIVOT)\nexport const clearSelectedPivots = createAction(CLEAR_SELECTED_PIVOTS)\nexport const addTagFilter = createAction(ADD_TAG_FILTER)\n","import { createSelector } from 'reselect'\nimport { Map, List } from 'immutable'\n\nexport const selectSolutionCenterFilterPanelDomain = state =>\n state.get('solutionCenterFilterPanel') || Map()\n\nexport const selectSelectedPivots = createSelector(\n selectSolutionCenterFilterPanelDomain,\n state => state.get('selectedPivots') || Map()\n)\n\nexport const selectTagFilters = createSelector(\n selectSolutionCenterFilterPanelDomain,\n state => state.get('tagFilters') || List()\n)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport { isImmutable } from 'immutable'\nimport { FormattedMessage, injectIntl } from 'react-intl'\n\nimport SelectBar from 'components/SelectBar'\nimport DateRangePicker from 'components/DateRangePicker'\nimport { CLOUD_TYPES } from 'appConstants'\nimport IHelp from 'containers/IHelp'\nimport AccountSelector from 'components/AccountSelector'\nimport injectReducer from 'utils/injectReducer'\nimport { selectPivot } from 'containers/SonraiData/selectors'\nimport { exists } from 'utils/sonraiUtils'\nimport {\n setPivot,\n fetchTags,\n fetchDataContainers,\n fetchAccounts,\n fetchSubscriptions,\n} from 'containers/SonraiData/actions'\nimport FilterPanel, { Filter, TypeaheadFilter } from 'components/FilterPanel'\nimport { PIVOT_FILEDS } from 'query-builder'\nimport {\n selectAccounts,\n selectDataContainers,\n selectTags,\n selectSubscriptions,\n} from 'containers/SonraiData/selectors'\nimport _ from 'lodash'\nimport reducer from './reducer'\nimport messages from './messages'\nimport { setSelectedPivot, clearSelectedPivots, addTagFilter } from './actions'\nimport { selectSelectedPivots, selectTagFilters } from './selectors'\n\nexport class SolutionCenterFilterPanel extends React.Component {\n onChangeAccountFilter = selectedAccounts => {\n this.props.setSelectedPivot({\n type: PIVOT_FILEDS.ACCOUNTS,\n value:\n Array.isArray(selectedAccounts) && selectedAccounts.length > 0\n ? selectedAccounts\n : null,\n })\n }\n\n onChangeSpecificDates = (newDates = {}) => {\n this.props.setSelectedPivot({\n type: PIVOT_FILEDS.SPECIFIC_DATES,\n value: newDates.startDate && newDates.endDate ? newDates : null,\n })\n }\n\n onChangePivotFilter = (type, selectedOption) => {\n if (Array.isArray(selectedOption)) {\n this.props.setSelectedPivot({\n type,\n value:\n selectedOption.length === 0\n ? null\n : selectedOption.map(option => option.value),\n })\n } else {\n this.props.setSelectedPivot({\n type,\n value: _.isEmpty(selectedOption) ? null : selectedOption.value,\n })\n }\n }\n\n onChangeSpecificDate = newDates => {\n this.props.setSelectedPivot({\n type: PIVOT_FILEDS.SPECIFIC_DATES,\n value: newDates,\n })\n }\n\n hasChanges = () => {\n const nonEmptyPivots = this.props.selectedPivots.filter(pivot => {\n if (isImmutable(pivot)) {\n return !pivot.isEmpty()\n } else {\n return exists(pivot)\n }\n })\n\n return !nonEmptyPivots.isEmpty()\n }\n\n applyFilters = () => {\n this.props.selectedPivots.forEach((value, key) => {\n this.props.setPivot({\n type: key,\n value,\n })\n })\n\n this.props.clearSelectedPivots()\n }\n\n getSelectedValue = type => {\n const pivotValue = this.props.selectedPivots.has(type)\n ? this.props.selectedPivots.get(type)\n : this.props.pivot.get(type)\n\n return isImmutable(pivotValue) ? pivotValue.toJS() : pivotValue\n }\n\n getTagOptions = () => {\n const serverTags = this.props.tags\n .filter(tag => !!tag.get('key'))\n .sortBy(tag => tag.get('key').toLowerCase())\n .toJS()\n .map(tag => ({ value: tag.key, label: tag.key }))\n\n const additionalOptions = this.props.tagFilters\n .toJS()\n .map(tagStr => ({ value: tagStr, label: tagStr }))\n\n return serverTags.concat(additionalOptions)\n }\n\n render() {\n if (!this.props.isOpen) {\n return null\n }\n\n return (\n \n \n \n \n\n \n \n \n\n \n ({\n label: value,\n value,\n }))\n : []\n }\n onChange={this.onChangeAccountFilter}\n isMulti\n />\n \n\n \n \n  \n \n \n }\n >\n \n \n\n \n \n \n \n )\n }\n}\n\nSolutionCenterFilterPanel.propTypes = {\n addTagFilter: PropTypes.func.isRequired,\n accounts: ImmutablePropTypes.list.isRequired,\n clearSelectedPivots: PropTypes.func.isRequired,\n dataContainers: ImmutablePropTypes.list.isRequired,\n fetchDataContainers: PropTypes.func.isRequired,\n fetchTags: PropTypes.func.isRequired,\n fetchAccounts: PropTypes.func.isRequired,\n subscriptions: ImmutablePropTypes.list.isRequired,\n fetchSubscriptions: PropTypes.func.isRequired,\n intl: PropTypes.shape({\n formatMessage: PropTypes.func.isRequired,\n }).isRequired,\n isOpen: PropTypes.bool,\n pivot: ImmutablePropTypes.map.isRequired,\n selectedPivots: ImmutablePropTypes.map.isRequired,\n setPivot: PropTypes.func.isRequired,\n setSelectedPivot: PropTypes.func,\n tags: ImmutablePropTypes.listOf(\n ImmutablePropTypes.contains({\n key: PropTypes.string,\n })\n ).isRequired,\n tagFilters: ImmutablePropTypes.listOf(PropTypes.string).isRequired,\n toggle: PropTypes.func,\n}\n\nconst mapStateToProps = createStructuredSelector({\n subscriptions: selectSubscriptions,\n accounts: selectAccounts,\n dataContainers: selectDataContainers,\n pivot: selectPivot,\n selectedPivots: selectSelectedPivots,\n tags: selectTags,\n tagFilters: selectTagFilters,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n addTagFilter,\n clearSelectedPivots,\n setPivot,\n fetchDataContainers,\n fetchTags,\n fetchAccounts,\n fetchSubscriptions,\n setSelectedPivot,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nconst withReducer = injectReducer({ key: 'solutionCenterFilterPanel', reducer })\n\nexport default compose(\n withConnect,\n injectIntl,\n withReducer\n)(SolutionCenterFilterPanel)\n","import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n cancelScEditButton: {\n id: 'app.containers.RenameSCModal.cancelScEditButton',\n defaultMessage: 'Cancel',\n },\n saveScEditButton: {\n id: 'app.containers.RenameSCModal.saveScEditButton',\n defaultMessage: 'Save',\n },\n hideCard: {\n id: 'app.containers.CardActionsMenu.hideCard',\n defaultMessage: 'Hide Solution Card',\n },\n renameCard: {\n id: 'app.containers.CardActionsMenu.renameCard',\n defaultMessage: 'Rename Solution Card',\n },\n deleteCard: {\n id: 'app.containers.CardActionsMenu.deleteCard',\n defaultMessage: 'Delete Solution Card',\n },\n copyCard: {\n id: 'app.containers.CardActionsMenu.copyCard',\n defaultMessage: 'Copy Solution Card',\n },\n saveLayoutButton: {\n id: 'app.containers.SolutionCenterActions.saveLayoutButton',\n defaultMessage: 'Save layout changes',\n },\n manageHiddenCards: {\n id: 'app.containers.SolutionCenterActions.manageHiddenCards',\n defaultMessage: 'Manage Hidden Solution Cards',\n },\n})\n","import React from 'react'\n\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport { FormattedMessage } from 'react-intl'\nimport { Modal, ModalHeader, ModalBody, ModalFooter, Input } from 'reactstrap'\n\nimport TextLink from 'components/TextLink'\nimport Icon from 'components/Icon'\nimport FormLabel from 'components/FormLabel'\nimport Button from 'components/Button'\nimport { updateSolutionCard } from 'containers/SolutionCenter/actions'\n\nimport {\n selectSavingScEdits,\n selectSelectedCardName,\n} from 'containers/SolutionCenterCards/selectors'\nimport messages from './messages.js'\n\nexport class ModalRenameSC extends React.Component {\n constructor(props) {\n super(props)\n this.state = {\n name: props.originalName,\n }\n }\n\n componentDidUpdate(oldProps) {\n if (oldProps.savingScEdits && !this.props.savingScEdits) {\n this.props.toggle()\n }\n\n if (oldProps.originalName !== this.props.originalName) {\n this.setState({\n name: this.props.originalName,\n })\n }\n }\n\n setName = e => {\n this.setState({\n name: e.target.value,\n })\n }\n\n updateSolutionCard = () => {\n this.props.updateSolutionCard({\n srn: this.props.editCardId,\n name: this.state.name,\n })\n }\n\n render() {\n return (\n \n \n Rename Solution Card\n \n \n \n New Name\n \n \n \n \n \n \n \n \n {this.props.savingScEdits ? (\n \n ) : (\n \n )}\n {' '}\n \n \n )\n }\n}\n\nModalRenameSC.propTypes = {\n isOpen: PropTypes.bool,\n originalName: PropTypes.string,\n savingScEdits: PropTypes.bool,\n toggle: PropTypes.func,\n updateSolutionCard: PropTypes.func,\n}\n\nconst mapStateToProps = createStructuredSelector({\n originalName: selectSelectedCardName,\n savingScEdits: selectSavingScEdits,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n updateSolutionCard,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(\n mapStateToProps,\n mapDispatchToProps\n)\n\nexport default compose(withConnect)(ModalRenameSC)\n","import React from 'react'\n\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { compose, bindActionCreators } from 'redux'\nimport { Modal, ModalHeader, ModalFooter, ModalBody } from 'reactstrap'\n\nimport { TextLink } from 'components/TextLink'\nimport Button from 'components/Button'\nimport { deleteSolutionCard } from 'containers/SolutionCenter/actions'\n\nexport class ModalConfirmDelete extends React.Component {\n handleDeleteSc = () => {\n this.props.deleteSolutionCard(this.props.cardId)\n this.props.toggle()\n }\n\n render() {\n return (\n \n \n Are You Sure You Want To Delete This Solution Card?\n \n\n Deleting a Solution Card cannot be undone\n \n \n Cancel\n \n \n \n \n )\n }\n}\n\nModalConfirmDelete.propTypes = {\n deleteSolutionCard: PropTypes.func.isRequired,\n cardId: PropTypes.string,\n isOpen: PropTypes.bool,\n toggle: PropTypes.func,\n}\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n deleteSolutionCard,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(\n undefined,\n mapDispatchToProps\n)\n\nexport default compose(withConnect)(ModalConfirmDelete)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { List } from 'immutable'\nimport { FormattedMessage } from 'react-intl'\nimport { Modal, ModalHeader, ModalBody, ModalFooter, Table } from 'reactstrap'\n\nimport { selectUserProfile } from 'containers/UserProfileData/selectors'\nimport Button from 'components/Button'\nimport TextLink from 'components/TextLink'\nimport { selectCards } from 'containers/SolutionCenter/selectors'\nimport { unhideSolutionCards } from 'containers/UserProfileData/actions'\n\nimport messages from './messages.js'\n\nexport class ModalHiddenSCManager extends React.Component {\n constructor(props) {\n super(props)\n\n this.state = {\n reVisibleCards: [],\n }\n }\n\n toggleCard = srn => {\n let { reVisibleCards } = this.state\n if (reVisibleCards.includes(srn)) {\n let arr = [...reVisibleCards]\n var index = arr.indexOf(srn)\n arr.splice(index, 1)\n this.setState({ reVisibleCards: arr })\n } else {\n this.setState(oldState => ({\n reVisibleCards: [...oldState.reVisibleCards, srn],\n }))\n }\n }\n\n handleUnHideSCCards = () => {\n const srns = this.state.reVisibleCards\n\n if (srns.length > 0) {\n this.props.unhideSolutionCards(srns)\n }\n\n this.props.toggle()\n this.setState({ reVisibleCards: [] })\n }\n\n render() {\n const hiddenCardIds = this.props.userProfile.get(\n 'hiddenSolutionCards',\n List()\n )\n\n const hiddenCards = this.props.solutionCards\n .filter(solutionCard => hiddenCardIds.includes(solutionCard.get('srn')))\n .toJS()\n\n return (\n \n \n Edit Hidden Solution Cards\n \n \n \n \n \n \n \n \n \n {hiddenCards.map(card => (\n \n \n \n \n \n \n ))}\n \n
Card NameWidgetsStatus\n
{card.name}{card.widgets && card.widgets.length} Widgets\n {this.state.reVisibleCards.includes(card.srn)\n ? 'Visible'\n : 'Hidden'}\n \n this.toggleCard(card.srn)}\n >\n {this.state.reVisibleCards.includes(card.srn)\n ? 'Hide'\n : 'Show'}\n \n
\n
\n \n \n \n \n\n \n Save\n \n \n
\n )\n }\n}\n\nModalHiddenSCManager.propTypes = {\n isOpen: PropTypes.bool,\n solutionCards: ImmutablePropTypes.list.isRequired,\n toggle: PropTypes.func,\n unhideSolutionCards: PropTypes.func.isRequired,\n userProfile: ImmutablePropTypes.map.isRequired,\n}\n\nconst mapStateToProps = createStructuredSelector({\n userProfile: selectUserProfile,\n solutionCards: selectCards,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n unhideSolutionCards,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(\n mapStateToProps,\n mapDispatchToProps\n)\n\nexport default compose(withConnect)(ModalHiddenSCManager)\n","import React from 'react'\n\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport { FormattedMessage } from 'react-intl'\nimport { Modal, ModalHeader, ModalBody, ModalFooter, Input } from 'reactstrap'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport TextLink from 'components/TextLink'\nimport Icon from 'components/Icon'\nimport FormLabel from 'components/FormLabel'\nimport Button from 'components/Button'\nimport { copySolutionCard } from 'containers/SolutionCenter/actions'\nimport { selectIsScCopySaving } from 'containers/SolutionCenter/selectors'\nimport {\n selectSelectedCardName,\n selectSelectedCard,\n selectSortedCards,\n} from 'containers/SolutionCenterCards/selectors'\nimport messages from './messages.js'\n\nexport class ModalCopySC extends React.Component {\n constructor(props) {\n super(props)\n this.state = {\n name: props.originalName,\n }\n }\n\n componentDidUpdate(oldProps) {\n if (oldProps.saving && !this.props.saving) {\n this.props.toggle()\n }\n\n if (oldProps.originalName !== this.props.originalName) {\n this.setState({\n name: this.props.originalName,\n })\n }\n }\n\n copySolutionCard = () => {\n const title =\n this.state.name !== '' ? this.state.name.toLowerCase() : this.state.name\n const sortedCardNames = this.props.sortedCards.map(card =>\n card.get('name').toLowerCase()\n )\n if (title !== '' && !sortedCardNames.includes(title)) {\n this.props.copySolutionCard({\n title: this.state.name,\n widgets: this.props.selectedCard.get('widgets'),\n })\n } else {\n this.setState({ showMessage: true })\n }\n }\n\n setName = e => {\n this.setState({\n name: e.target.value,\n })\n }\n\n render() {\n return (\n \n Copy Solution Card\n \n \n New Solution Card Name\n \n \n \n \n \n \n \n \n {this.props.saving ? (\n \n ) : (\n \n )}\n {' '}\n \n \n )\n }\n}\n\nModalCopySC.propTypes = {\n isOpen: PropTypes.bool,\n originalName: PropTypes.string,\n saving: PropTypes.bool,\n toggle: PropTypes.func,\n sortedCards: ImmutablePropTypes.iterable,\n selectedCard: ImmutablePropTypes.map.isRequired,\n copySolutionCard: PropTypes.func,\n}\n\nconst mapStateToProps = createStructuredSelector({\n originalName: selectSelectedCardName,\n selectedCard: selectSelectedCard,\n sortedCards: selectSortedCards,\n saving: selectIsScCopySaving,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n copySolutionCard,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(\n mapStateToProps,\n mapDispatchToProps\n)\n\nexport default compose(withConnect)(ModalCopySC)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport { Dropdown, DropdownToggle } from 'reactstrap'\nimport { FormattedMessage } from 'react-intl'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { List } from 'immutable'\nimport CreatedByBadge from 'components/CreatedByBadge'\nimport permissionChecker from 'containers/PermissionChecker'\nimport { hideSolutionCard } from 'containers/UserProfileData/actions'\nimport Icon from 'components/Icon'\nimport BorderlessButton from 'components/BorderlessButton'\nimport { selectUserProfile } from 'containers/UserProfileData/selectors'\nimport DropdownMenu from 'components/StyledReactstrapDropdownMenu'\n\nimport messages from './messages'\nimport { selectSelectedCard } from 'containers/SolutionCenterCards/selectors'\n\nconst styles = {\n moreButton: {\n border: 'none',\n display: 'inline',\n padding: '0.3em',\n },\n link: {\n display: 'block',\n width: '100%',\n marginBottom: '0.5em',\n paddingTop: '0.25em',\n paddingBottom: '0.25em',\n paddingLeft: '1em',\n paddingRight: '1em',\n cursor: 'pointer',\n ':hover': { backgroundColor: 'rgba(116, 180, 223, 0.4)' },\n textAlign: 'left',\n border: 'none',\n boxShadow: 'none',\n },\n}\n\nexport class CardActionsMenu extends React.Component {\n constructor(props) {\n super(props)\n this.state = {\n dropdownExpanded: false,\n }\n }\n\n toggleActionMenu = () => {\n this.setState(oldState => {\n return {\n dropdownExpanded: !oldState.dropdownExpanded,\n }\n })\n }\n\n doCardAction = action => {\n action(this.props.card.get('srn'))\n this.toggleActionMenu()\n }\n\n getActions = () => {\n const canEdit = this.props.userHasPermission({\n permissionName: 'edit.solutioncards',\n resourceId: this.props.card.get('resourceId'),\n })\n\n const canCreate = this.props.userHasPermission({\n permissionName: 'edit.solutioncards',\n resourceId: ({ org }) => `/org/${org}/`,\n })\n\n const actions = [\n this.doCardAction(this.props.hideSolutionCard)}\n style={styles.link}\n >\n \n ,\n ]\n\n if (canEdit) {\n actions.push(\n this.doCardAction(this.props.renameSolutionCard)}\n style={styles.link}\n >\n \n \n )\n }\n\n if (canEdit) {\n actions.push(\n this.doCardAction(this.props.deleteSolutionCard)}\n style={styles.link}\n >\n \n \n )\n }\n\n if (canCreate) {\n actions.push(\n this.doCardAction(this.props.copySolutionCard)}\n style={styles.link}\n >\n \n \n )\n }\n\n const hasHiddenCards = !this.props.userProfile\n .get('hiddenSolutionCards', List())\n .isEmpty()\n\n actions.push(\n this.doCardAction(this.props.toggleHiddenSCManagerModal)}\n style={styles.link}\n disabled={!hasHiddenCards}\n >\n \n \n )\n\n actions.push(\n \n Created By: \n \n \n )\n\n return actions\n }\n\n render() {\n return (\n \n \n \n \n \n {this.getActions()}\n \n \n )\n }\n}\n\nCardActionsMenu.propTypes = {\n card: ImmutablePropTypes.map.isRequired,\n deleteSolutionCard: PropTypes.func.isRequired,\n copySolutionCard: PropTypes.func.isRequired,\n hideSolutionCard: PropTypes.func.isRequired,\n userHasPermission: PropTypes.func.isRequired,\n renameSolutionCard: PropTypes.func.isRequired,\n toggleHiddenSCManagerModal: PropTypes.func,\n userProfile: ImmutablePropTypes.map.isRequired,\n}\n\nconst mapStateToProps = createStructuredSelector({\n card: selectSelectedCard,\n userProfile: selectUserProfile,\n})\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n hideSolutionCard,\n },\n dispatch\n )\n}\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nexport default compose(withConnect, permissionChecker)(CardActionsMenu)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { injectIntl } from 'react-intl'\n\nimport BorderlessButton from 'components/BorderlessButton'\nimport Icon from 'components/Icon'\nimport { saveLayout } from 'containers/SolutionCenter/actions'\nimport {\n selectSelectedCard,\n selectSavingLayout,\n selectHasUnsavedChanges,\n} from 'containers/SolutionCenterCards/selectors'\nimport permissionChecker from 'containers/PermissionChecker'\nimport { selectPivot } from 'containers/SonraiData/selectors'\nimport IconLayer from 'components/IconLayer'\nimport IconCount from 'components/IconCount'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\n\nimport ModalRenameSC from './ModalRenameSC'\nimport ModalConfirmDelete from './ModalConfirmDelete'\nimport ModalHiddenSCManager from './ModalHiddenSCManager'\nimport ModalCopySC from './ModalCopySC'\nimport messages from './messages'\nimport CardActionsMenu from './CardActionsMenu'\n\nexport class SolutionCenterCardActions extends React.Component {\n styles = {\n toolbarButton: {\n padding: '0 0.5em',\n },\n saveButton: {\n boxShadow: ' 0 0 0 rgba(204,169,44, 0.4)',\n animation: 'pulse 2s infinite',\n },\n cardActions: {\n display: 'flex',\n },\n }\n\n state = {\n editingScNameId: null,\n deletingScId: null,\n showHiddenScManagerModal: false,\n copyingScModalOpen: false,\n }\n\n toggleShowDeleteConfirmationModal = () => {\n this.setState({\n deletingScId: null,\n })\n }\n\n showConfirmDelete = cardId => {\n this.setState({\n deletingScId: cardId,\n })\n }\n\n toggleHiddenSCManagerModal = () => {\n this.setState(currentState => ({\n showHiddenScManagerModal: !currentState.showHiddenScManagerModal,\n }))\n }\n\n toggleRenameScModal = () => {\n this.setState({\n editingScNameId: null,\n })\n }\n\n renameSolutionCard = cardId => {\n this.setState({\n editingScNameId: cardId,\n })\n }\n\n copySolutionCard = () => {\n this.setState({\n copyingScModalOpen: true,\n })\n }\n\n saveLayout = () => {\n this.props.saveLayout(this.props.selectedSolutionCard)\n }\n\n renderSaveButton = () => {\n if (this.props.savingLayout) {\n return (\n \n \n \n )\n }\n\n const canUpdateCurrentCard = this.props.userHasPermission({\n permissionName: 'edit.solutioncards',\n resourceId: this.props.selectedSolutionCard.get('resourceId'),\n })\n\n if (!this.props.hasUnsavedChanges || !canUpdateCurrentCard) {\n return null\n }\n\n return (\n \n \n \n )\n }\n\n toggleCopyingScModal = () => {\n this.setState(old => {\n return {\n copyingScModalOpen: !old.copyingScModalOpen,\n }\n })\n }\n\n render() {\n return (\n
\n \n \n \n \n {this.renderSaveButton()}\n \n {!this.props.pivot.isEmpty() ? (\n \n \n \n \n ) : (\n \n )}\n \n \n
\n )\n }\n}\n\nSolutionCenterCardActions.propTypes = {\n hasUnsavedChanges: PropTypes.bool,\n pivot: ImmutablePropTypes.map.isRequired,\n savingLayout: PropTypes.bool,\n saveLayout: PropTypes.func.isRequired,\n selectedSolutionCard: ImmutablePropTypes.map.isRequired,\n theme: themeShape,\n toggleFiltersPanel: PropTypes.func,\n userHasPermission: PropTypes.func,\n}\n\nconst mapStateToProps = createStructuredSelector({\n hasUnsavedChanges: selectHasUnsavedChanges,\n pivot: selectPivot,\n savingLayout: selectSavingLayout,\n selectedSolutionCard: selectSelectedCard,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n saveLayout,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nexport default compose(\n withConnect,\n injectIntl,\n permissionChecker,\n themeable\n)(SolutionCenterCardActions)\n","/*\n *\n * SolutionCenter reducer\n *\n */\n\nimport { fromJS, List } from 'immutable'\nimport { handleActions } from 'redux-actions'\nimport {\n LOAD_SOLUTION_CARDS,\n TOGGLE_SC_WIDGET_STATIC,\n UPDATE_WIDGET,\n UPDATE_WIDGET_SUCCESS,\n ADD_SOLUTION_CARD_SUCCESS,\n DELETE_SOLUTION_CARD_SUCCESS,\n ADD_WIDGET_SUCCESS,\n REMOVE_WIDGET_SUCCESS,\n SET_WIDGET_OPTIONS,\n UPDATE_SOLUTION_CARD_SUCCESS,\n SET_SHOW_CREATE_WIDGET_MODAL,\n COPY_SOLUTION_CARD,\n COPY_SOLUTION_CARD_SUCCESS,\n} from './constants'\n\nconst initialState = fromJS({\n solutionCards: [],\n showCreateWidgetModal: false,\n})\n\nconst solutionCenterReducer = handleActions(\n {\n [ADD_SOLUTION_CARD_SUCCESS]: (state, { payload }) =>\n state\n .update('solutionCards', cards => cards.push(fromJS(payload)))\n .set('showCreateWidgetModal', true),\n [ADD_WIDGET_SUCCESS]: (state, { payload }) => {\n const solutionCardIndex = state\n .get('solutionCards')\n .findIndex(card => card.get('srn') === payload.cardsrn)\n\n return state\n .updateIn(['solutionCards', solutionCardIndex, 'widgets'], widgets =>\n widgets.push(fromJS(payload.widget))\n )\n .set('showCreateWidgetModal', false)\n },\n [DELETE_SOLUTION_CARD_SUCCESS]: (state, { payload }) => {\n const solutionCardIndex = state\n .get('solutionCards')\n .findIndex(card => card.get('srn') === payload)\n\n return state.deleteIn(['solutionCards', solutionCardIndex])\n },\n [LOAD_SOLUTION_CARDS]: (state, { payload }) => {\n return state.set('solutionCards', fromJS(payload.cards))\n },\n [REMOVE_WIDGET_SUCCESS]: (state, { payload }) => {\n const solutionCardIndex = state\n .get('solutionCards')\n .findIndex(card => card.get('srn') === payload.cardId)\n const widgetIndex = state\n .getIn(['solutionCards', solutionCardIndex, 'widgets'], List())\n .findIndex(widget => widget.get('srn') === payload.widgetId)\n\n return state.deleteIn([\n 'solutionCards',\n solutionCardIndex,\n 'widgets',\n widgetIndex,\n ])\n },\n [SET_SHOW_CREATE_WIDGET_MODAL]: (state, { payload }) =>\n state.set('showCreateWidgetModal', payload),\n [TOGGLE_SC_WIDGET_STATIC]: (state, { payload }) => {\n const solutionCardIndex = state\n .get('solutionCards')\n .findIndex(card => card.get('srn') === payload.cardId)\n const widgetIndex = state\n .getIn(['solutionCards', solutionCardIndex, 'widgets'], List())\n .findIndex(widget => widget.get('srn') === payload.widgetId)\n\n return state.updateIn(\n ['solutionCards', solutionCardIndex, 'widgets', widgetIndex],\n widget => widget.set('static', !widget.get('static'))\n )\n },\n [UPDATE_SOLUTION_CARD_SUCCESS]: (state, { payload }) => {\n const solutionCardIndex = state\n .get('solutionCards')\n .findIndex(card => card.get('srn') === payload.srn)\n\n return state.mergeIn(['solutionCards', solutionCardIndex], payload)\n },\n [UPDATE_WIDGET]: (state, { payload }) => {\n const solutionCardIndex = state\n .get('solutionCards')\n .findIndex(card => card.get('srn') === payload.cardId)\n const widgetIndex = state\n .getIn(['solutionCards', solutionCardIndex, 'widgets'], List())\n .findIndex(widget => widget.get('srn') === payload.widget.srn)\n\n return state.setIn(\n ['solutionCards', solutionCardIndex, 'widgets', widgetIndex],\n fromJS(payload.widget)\n )\n },\n [UPDATE_WIDGET_SUCCESS]: (state, { payload }) => {\n const solutionCardIndex = state\n .get('solutionCards')\n .findIndex(card => card.get('srn') === payload.cardsrn)\n const widgetIndex = state\n .getIn(['solutionCards', solutionCardIndex, 'widgets'], List())\n .findIndex(widget => widget.get('srn') === payload.widget.srn)\n\n return state.mergeIn(\n ['solutionCards', solutionCardIndex, 'widgets', widgetIndex],\n fromJS(payload.widget)\n )\n },\n [SET_WIDGET_OPTIONS]: (state, { payload }) => {\n const solutionCardIndex = state\n .get('solutionCards')\n .findIndex(card => card.get('srn') === payload.cardId)\n const widgetIndex = state\n .getIn(['solutionCards', solutionCardIndex, 'widgets'], List())\n .findIndex(widget => widget.get('srn') === payload.widgetId)\n\n return state.mergeIn(\n ['solutionCards', solutionCardIndex, 'widgets', widgetIndex, 'options'],\n fromJS(payload.options)\n )\n },\n [COPY_SOLUTION_CARD]: state => state.set('copySolutionCardSaving', true),\n [COPY_SOLUTION_CARD_SUCCESS]: (state, { payload }) => {\n const solutionCardIndex = state\n .get('solutionCards')\n .findIndex(card => card.get('srn') === payload.card.srn)\n\n return state\n .update('solutionCards', cards => cards.push(fromJS(payload.card)))\n .setIn(\n ['solutionCards', solutionCardIndex, 'widgets'],\n fromJS(payload.widgets)\n )\n .set('copySolutionCardSaving', false)\n },\n },\n initialState\n)\n\nexport default solutionCenterReducer\n","export const FETCH_SOLUTION_CARDS_QUERY = `\n query getSCCards {\n SolutionCards {\n count\n items {\n __typename\n name\n createdDate\n sid\n srn\n lastModified\n resourceId\n createdBy\n contains {\n items {\n resourceId\n title\n subtitle\n name\n resultLayout\n static\n type\n widgetLocation\n createdDate\n createdBy\n sid\n srn\n lastModified\n widgetSize\n selection\n options\n contains {\n items {\n name\n sid\n srn\n ... on Search {\n rootQueryName\n lastModified\n createdDate\n query\n resourceId\n }\n }\n }\n }\n }\n }\n }\n }\n`\n","import { all, put, takeLatest, take, race, call } from 'redux-saga/effects'\nimport { Map, List } from 'immutable'\nimport { fetchSavedSearches } from 'containers/SonraiData/sagas'\nimport { push } from 'connected-react-router'\nimport qs from 'query-string'\nimport omit from 'lodash/omit'\nimport { delay } from 'redux-saga'\nimport {\n loadSolutionCards,\n handleSCAdd,\n saveLayoutSuccess,\n addSolutionCardSuccess,\n deleteSolutionCardSuccess,\n addWidgetSuccess,\n removeWidgetSuccess,\n updateWidgetSuccess,\n updateSolutionCardSuccess,\n copySolutionCardSuccess,\n} from './actions'\nimport {\n GET_SOLUTION_CARDS,\n UPDATE_EDIT_WIDGET,\n HANDLE_SC_ADD,\n DELETE_SOLUTION_CARD,\n ADD_SC_WIDGET,\n REMOVE_SC_WIDGET,\n SAVE_LAYOUT,\n UPDATE_SOLUTION_CARD,\n START_UPDATE_SC_POLL,\n STOP_UPDATE_SC_POLL,\n COPY_SOLUTION_CARD,\n} from './constants'\nimport { FETCH_SOLUTION_CARDS_QUERY } from './queries'\nimport { getClient } from 'apolloClient'\nimport gql from 'graphql-tag'\n\nfunction* getSolnCards() {\n try {\n const client = getClient()\n const result = yield client.query({\n query: gql`\n ${FETCH_SOLUTION_CARDS_QUERY}\n `,\n })\n\n if (result.data.SolutionCards.items === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n let cards = result.data.SolutionCards.items.map(sysCard => {\n return {\n __typename: sysCard.__typename,\n sid: sysCard.sid,\n srn: sysCard.srn,\n name: sysCard.name,\n resourceId: sysCard.resourceId,\n createdDate: sysCard.createdDate,\n createdBy: sysCard.createdBy,\n widgets: sysCard.contains.items.map(widget => {\n if (widget.contains.items.length > 0) {\n return {\n ...widget,\n query: widget.contains.items[0], // TODO: Handle multiple widget queries\n }\n } else {\n return widget\n }\n }),\n }\n })\n\n if (cards.length === 0) {\n yield put(handleSCAdd('Dashboard 1'))\n } else {\n yield put(loadSolutionCards(cards))\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error loading solution cards', e)\n }\n}\n\nfunction* addSolutionCard(action) {\n try {\n const client = getClient()\n const response = yield client.mutate({\n mutation: gql`\n mutation createSolutionCard {\n CreateSolutioncard(value: {\n name: \"${action.payload.name}\"\n }) {\n name\n sid\n srn\n lastModified\n createdDate\n resourceId\n }\n }\n `,\n forceFetch: true,\n fetchPolicy: 'no-cache',\n })\n\n const newCard = response.data.CreateSolutioncard\n newCard.widgets = []\n\n yield put(\n push({\n search: qs.stringify({ tabId: newCard.srn }),\n })\n )\n\n yield put(addSolutionCardSuccess(newCard))\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error adding solution card', e)\n }\n}\n\nfunction* deleteSolutionCard(action) {\n try {\n const client = getClient()\n yield client.mutate({\n mutation: gql`\n mutation deleteSolutionCard {\n DeleteSolutioncard(srn: \"${action.payload.srn}\")\n }\n `,\n })\n yield put(deleteSolutionCardSuccess(action.payload.srn))\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error deleting solution card', e)\n }\n}\n\nfunction* addWidget(action) {\n try {\n let widg = Object.assign({}, action.payload.widget, {\n containedBy: {\n add: [action.payload.card.srn],\n },\n })\n\n delete widg.query\n const client = getClient()\n const result = yield client.mutate({\n mutation: gql`\n mutation addWidget($widget: WidgetCreator!) {\n CreateWidget(value: $widget) {\n sid\n srn\n label\n type\n icon\n title\n lastModified\n createdDate\n widgetSize\n subtitle\n selection\n resultLayout\n static\n options\n widgetLocation\n name\n resourceId\n contains {\n items {\n name\n sid\n srn\n }\n }\n }\n }\n `,\n variables: { widget: widg },\n })\n\n if (!result.data.CreateWidget) {\n throw new Error('received null in response to CreateWidget')\n }\n\n yield put(\n addWidgetSuccess({\n cardsrn: action.payload.card.srn,\n widget: result.data.CreateWidget,\n })\n )\n\n yield call(fetchSavedSearches, { poll: false })\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error adding widget to solution card', e)\n }\n}\n\nfunction* updateEditWidget(action) {\n const values = omit(action.payload.widget, [\n '__typename',\n 'query',\n 'sid',\n 'srn',\n 'lastModified',\n 'createdDate',\n 'contains',\n 'name',\n 'selection',\n 'resourceId',\n ])\n\n const { srn } = action.payload.widget\n\n try {\n const client = getClient()\n const updateResult = yield client.mutate({\n mutation: gql`\n mutation updateWidget($widget: WidgetUpdater!) {\n UpdateWidget(srn: \"${srn}\", value: $widget) {\n title\n subtitle\n name\n resultLayout\n static\n type\n widgetLocation\n createdDate \n sid\n srn\n lastModified\n widgetSize\n options\n selection\n resourceId\n contains {\n items {\n name\n sid\n }\n }\n }\n }\n `,\n variables: {\n widget: values,\n },\n })\n\n yield put(\n updateWidgetSuccess({\n cardsrn: action.payload.card.srn,\n widget: updateResult.data.UpdateWidget,\n })\n )\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error updating widget', e)\n }\n}\n\nfunction* removeWidget(action) {\n try {\n const client = getClient()\n yield client.mutate({\n mutation: gql`\n mutation delWidget{\n DeleteWidget(srn:\"${action.payload.srn}\")\n }\n `,\n })\n yield put(\n removeWidgetSuccess({\n cardId: action.payload.cardId,\n widgetId: action.payload.srn,\n })\n )\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error removing widget from solution card', e)\n }\n}\n\nfunction* saveLayout(action) {\n try {\n const widgets = action.payload.card.get('widgets')\n if (!widgets.isEmpty()) {\n const widgetsByIndex = Map(\n widgets.map((widget, index) => List([`widget${index}`, widget]))\n )\n\n const variables = widgetsByIndex\n .map(widget =>\n Map({\n widgetLocation: widget.get('widgetLocation'),\n static: widget.get('static'),\n widgetSize: widget.get('widgetSize'),\n options: widget.get('options'),\n })\n )\n .toJS()\n\n const variableNames = widgets.map(\n (widget, index) => `\n $widget${index}: WidgetUpdater!\n `\n )\n\n const queryStrings = widgets.map(\n (widget, index) => `\n widget${index}: UpdateWidget(\n srn: \"${widget.get('srn')}\",\n value: $widget${index}\n ) { sid srn }\n `\n )\n const client = getClient()\n yield client.mutate({\n mutation: gql`\n mutation updateWidgets(${variableNames.join(', ')}) {\n ${queryStrings.join(',')}\n }\n `,\n variables: variables,\n })\n }\n\n yield put(saveLayoutSuccess())\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error saving widget layout', e)\n }\n}\n\nfunction* updateSolutionCard(action) {\n try {\n const client = getClient()\n const updateResult = yield client.mutate({\n mutation: gql`\n mutation updateCard($card: SolutioncardUpdater!){\n UpdateSolutioncard(\n srn:\"${action.payload.srn}\"\n value: $card\n ) {\n srn,\n name,\n lastModified\n }\n }\n `,\n variables: {\n card: {\n name: action.payload.name,\n },\n },\n })\n\n yield put(updateSolutionCardSuccess(updateResult.data.UpdateSolutioncard))\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error editing solution card', e)\n }\n}\n\nfunction* copySolutionCard(action) {\n const { title, widgets } = action.payload\n\n try {\n const client = getClient()\n const newSolutionCard = yield client.mutate({\n mutation: gql`\n mutation createSolutionCard {\n CreateSolutioncard(value: {\n name: \"${title}\"\n }) {\n name\n sid\n srn\n lastModified\n createdDate\n resourceId\n }\n }\n `,\n })\n\n if (!newSolutionCard.data) {\n throw new Error('No copied solution card returned')\n }\n\n const srn = newSolutionCard.data.CreateSolutioncard.srn\n const widgetsJS = widgets.toJS()\n\n const newWidgets = yield all(\n widgetsJS.map(widg => {\n const contains = []\n widg.contains.items.forEach(item => {\n contains.push(item.srn)\n })\n const coolWidg = {\n title: widg.title,\n subtitle: '',\n type: widg.type,\n resultLayout: widg.resultLayout,\n widgetSize: widg.widgetSize,\n widgetLocation: widg.widgetLocation,\n static: widg.static,\n contains: { add: contains },\n options: widg.options,\n containedBy: { add: [srn] },\n }\n\n return client.mutate({\n mutation: gql`\n mutation addWidget($widget: WidgetCreator!) {\n CreateWidget(value: $widget) {\n sid\n srn\n label\n type\n icon\n title\n lastModified\n createdDate\n widgetSize\n subtitle\n selection\n resultLayout\n static\n options\n widgetLocation\n name\n resourceId\n contains {\n items {\n name\n sid\n srn\n }\n }\n }\n }\n `,\n variables: { widget: coolWidg },\n })\n })\n )\n\n const unpackedWidgets = []\n newWidgets.forEach(guy => {\n unpackedWidgets.push(guy.data.CreateWidget)\n })\n\n yield put(\n push({\n search: qs.stringify({\n tabId: newSolutionCard.data.CreateSolutioncard.srn,\n }),\n })\n )\n\n yield put(\n copySolutionCardSuccess({\n card: newSolutionCard.data.CreateSolutioncard,\n widgets: unpackedWidgets,\n })\n )\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error copying solution card', e)\n }\n}\n\nfunction* runSolutionCenterFetcher() {\n while (true) {\n yield call(getSolnCards)\n yield call(delay, 300000)\n }\n}\n\nfunction* mySaga() {\n yield all([\n takeLatest(GET_SOLUTION_CARDS, getSolnCards),\n takeLatest(HANDLE_SC_ADD, addSolutionCard),\n takeLatest(DELETE_SOLUTION_CARD, deleteSolutionCard),\n takeLatest(ADD_SC_WIDGET, addWidget),\n takeLatest(REMOVE_SC_WIDGET, removeWidget),\n takeLatest(SAVE_LAYOUT, saveLayout),\n takeLatest(UPDATE_EDIT_WIDGET, updateEditWidget),\n takeLatest(UPDATE_SOLUTION_CARD, updateSolutionCard),\n takeLatest(COPY_SOLUTION_CARD, copySolutionCard),\n ])\n\n while (true) {\n yield take(START_UPDATE_SC_POLL)\n yield race([call(runSolutionCenterFetcher), take(STOP_UPDATE_SC_POLL)])\n }\n}\n\nexport default mySaga\n","/*\n * SolutionCenter Messages\n *\n * This contains all the text for the SolutionCenter component.\n */\nimport { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n identity: {\n id: 'app.container.SolutionCenter.header',\n defaultMessage: 'Identity',\n },\n infrastructure: {\n id: 'app.container.SolutionCenter.infrastructure',\n defaultMessage: 'Infrastructure',\n },\n data: {\n id: 'app.container.SolutionCenter.data',\n defaultMessage: 'Data',\n },\n cloud: {\n id: 'app.container.SolutionCenter.cloud',\n defaultMessage: 'Cloud',\n },\n header: {\n id: 'app.containers.SolutionCenter.header',\n defaultMessage: 'This is SolutionCenter container !',\n },\n createSC: {\n id: 'app.containers.SolutionCenter.createSC',\n defaultMessage: 'Create New Solution Card',\n },\n saveLayoutButton: {\n id: 'app.containers.SolutionCenter.saveLayoutButton',\n defaultMessage: 'Save Layout',\n },\n saveScEditButton: {\n id: 'app.containers.SolutionCenter.saveScEditButton',\n defaultMessage: 'Update',\n },\n cancelScEditButton: {\n id: 'app.containers.SolutionCenter.cancelScEditButton',\n defaultMessage: 'Cancel',\n },\n error: {\n id: 'app.containers.SolutionCenter.error',\n defaultMessage: \"Ooops...that wasn't supposed to happen!\",\n },\n errorContact: {\n id: 'app.containers.SolutionCenter.contact',\n defaultMessage:\n \"We'd love to hear about it, though! You can contact support at\",\n },\n statusDaysAll: {\n id: 'app.containers.SolutionCenterFilterStatus.statusDaysAll',\n defaultMessage: 'all time',\n },\n statusDays1: {\n id: 'app.containers.SolutionCenterFilterStatus.statusDays1',\n defaultMessage: 'the past 24 hours',\n },\n statusDays7: {\n id: 'app.containers.SolutionCenterFilterStatus.statusDays7',\n defaultMessage: 'the past 7 days',\n },\n statusDays30: {\n id: 'app.containers.SolutionCenterFilterStatus.statusDays30',\n defaultMessage: 'the past 30 days',\n },\n statusDays90: {\n id: 'app.containers.SolutionCenterFilterStatus.statusDays90',\n defaultMessage: 'the past 90 days',\n },\n filterApplied: {\n id: 'app.containers.SolutionCenterFilterStatus.filterApplied',\n defaultMessage: 'Filter Applied',\n },\n newWidget: {\n id: 'app.container.SolutionCenterToolbar.newWidget',\n defaultMessage: 'New Widget',\n },\n})\n","import React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport { Map } from 'immutable'\nimport { injectIntl } from 'react-intl'\nimport { selectShowCreateWidgetModal } from './selectors'\nimport { setShowCreateWidgetModal } from './actions'\nimport {\n selectSavingWidget,\n selectLayout,\n} from 'containers/SolutionCenterWidgets/selectors'\nimport { selectQueryTypes, selectPivot } from 'containers/SonraiData/selectors'\nimport Icon from 'components/Icon'\nimport { FormattedMessage } from 'react-intl'\nimport messages from './messages'\nimport WidgetModal from 'containers/WidgetModal'\nimport Button from 'components/Button'\nimport { QueryBuilder } from 'query-builder'\n\nconst styles = {\n button: {\n margin: '0.15rem 0rem 0rem 0.15rem',\n padding: '0.5rem',\n fontSize: '0.8rem',\n },\n}\n\nexport class SolutionCenterToolbar extends React.Component {\n toggleAddWidgetModal = () => {\n this.props.setShowCreateWidgetModal(!this.props.showCreateWidgetModal)\n }\n\n getQueryBuilder = fields => {\n const queryBuilder = new QueryBuilder({\n query: fields,\n types: this.props.queryTypes,\n pivot: this.props.pivot,\n })\n\n return queryBuilder\n }\n\n render() {\n return (\n \n \n \n \n \n \n \n )\n }\n}\n\nSolutionCenterToolbar.propTypes = {\n card: ImmutablePropTypes.contains({\n sid: PropTypes.string.isRequired,\n srn: PropTypes.string.isRequired,\n widgets: ImmutablePropTypes.listOf(\n ImmutablePropTypes.contains({\n sid: PropTypes.string.isRequired,\n title: PropTypes.string.isRequired,\n subtitle: PropTypes.string.isRequired,\n type: PropTypes.oneOf([\n 'bigCount',\n 'table',\n 'pieChart',\n 'lineChart',\n 'ratio',\n 'barChart',\n 'list',\n 'gauge',\n 'map',\n 'regions',\n 'advMap',\n 'compliance',\n 'spark',\n 'alert',\n ]).isRequired,\n options: ImmutablePropTypes.map,\n query: ImmutablePropTypes.map,\n selection: PropTypes.string,\n formatter: PropTypes.func,\n widgetSize: ImmutablePropTypes.list.isRequired,\n widgetLocation: ImmutablePropTypes.list.isRequired,\n static: PropTypes.bool.isRequired,\n })\n ),\n }).isRequired,\n savingWidget: PropTypes.bool,\n setShowCreateWidgetModal: PropTypes.func,\n showCreateWidgetModal: PropTypes.bool,\n layout: PropTypes.array.isRequired,\n pivot: ImmutablePropTypes.map.isRequired,\n queryTypes: ImmutablePropTypes.iterable.isRequired,\n}\n\nconst mapStateToProps = createStructuredSelector({\n savingWidget: selectSavingWidget,\n layout: selectLayout,\n pivot: selectPivot,\n queryTypes: selectQueryTypes,\n showCreateWidgetModal: selectShowCreateWidgetModal,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators({ setShowCreateWidgetModal }, dispatch)\n}\n\nconst withConnect = connect(\n mapStateToProps,\n mapDispatchToProps\n)\n\nexport default compose(\n withConnect,\n injectIntl\n)(SolutionCenterToolbar)\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { FormattedMessage } from 'react-intl'\n\nimport { SUPPORT_EMAIL } from 'appConstants'\nimport Error from 'components/Error'\nimport messages from './messages'\n\nexport default class SolutionCenterErrorBoundry extends Component {\n constructor(props) {\n super(props)\n this.state = {\n hasError: false,\n errorMessage: '',\n errorSource: '',\n componentStack: '',\n errorStack: '',\n }\n }\n\n componentDidCatch(error, info) {\n this.setState({\n hasError: true,\n errorMessage: error.message,\n errorStack: error.stack,\n componentStack: info.componentStack,\n errorSource: error.source ? error.source.body : '',\n })\n\n // eslint-disable-next-line no-console\n console.error({ json: JSON.stringify(this.state), ...this.state })\n }\n\n render() {\n if (this.state.hasError) {\n return (\n \n

\n \n

\n

\n {' '}\n {SUPPORT_EMAIL}\n

\n \n }\n errorMessage={this.state.errorMessage}\n />\n )\n }\n\n return this.props.children\n }\n}\n\nSolutionCenterErrorBoundry.propTypes = {\n children: PropTypes.node,\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose } from 'redux'\nimport { injectIntl } from 'react-intl'\nimport { List } from 'immutable'\n\nimport CloudAccount from 'components/CloudAccount'\nimport { PIVOT_FILEDS } from 'query-builder'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport Icon from 'components/Icon'\nimport messages from './messages'\nimport { selectPivot } from 'containers/SonraiData/selectors'\n\nconst styles = {\n appliedFilter: {\n fontWeight: 400,\n },\n filterStatus: {\n textAlign: 'center',\n margin: 'auto',\n borderBottom: '1px solid #eee',\n padding: '1em 0',\n fontSize: '1em',\n },\n}\n\nexport class SolutionCenterFilterStatus extends React.Component {\n render() {\n if (this.props.pivot.isEmpty()) {\n return
\n }\n\n const appliedFilters = this.props.pivot\n .map((value, key) => {\n if (key === PIVOT_FILEDS.RELATIVE_DATE) {\n switch (value) {\n case 1:\n return this.props.intl.formatMessage(messages.statusDays1)\n case 7:\n return this.props.intl.formatMessage(messages.statusDays7)\n case 30:\n return this.props.intl.formatMessage(messages.statusDays30)\n case 90:\n return this.props.intl.formatMessage(messages.statusDays90)\n }\n\n return null\n }\n\n if (key === PIVOT_FILEDS.ACCOUNTS) {\n const accounts = value.map(accountId => {\n return (\n \n \n
\n )\n })\n\n return (\n
\n {key}:  {accounts}\n
\n )\n }\n\n if (key === PIVOT_FILEDS.HAS_TAGS) {\n const tags = value || List()\n\n return `${key}: ${tags.toJS().join('; ')}`\n }\n\n if (key === PIVOT_FILEDS.SPECIFIC_DATES) {\n return `${key}: ${value.get('startDate')} - ${value.get('endDate')}`\n }\n\n if (List.isList(value)) {\n return `${key}: ${value.toJS().join('; ')}`\n }\n\n return `${key}: ${value}`\n })\n .toList()\n\n return (\n
\n {' '}\n Filtering By {appliedFilters}\n
\n )\n }\n}\n\nSolutionCenterFilterStatus.propTypes = {\n intl: PropTypes.shape({\n formatMessage: PropTypes.func.isRequired,\n }).isRequired,\n pivot: ImmutablePropTypes.map,\n theme: themeShape,\n}\n\nconst mapStateToProps = createStructuredSelector({\n pivot: selectPivot,\n})\n\nconst withConnect = connect(mapStateToProps)\n\nexport default compose(\n withConnect,\n themeable,\n injectIntl\n)(SolutionCenterFilterStatus)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { DAEMON } from 'utils/constants'\nimport LoadingAnim from 'components/LoadingAnim'\nimport injectReducer from 'utils/injectReducer'\nimport injectSaga from 'utils/injectSaga'\nimport { selectQueryTypes } from 'containers/SonraiData/selectors'\nimport SolutionCenterCards from 'containers/SolutionCenterCards'\nimport { selectSelectedCard } from 'containers/SolutionCenterCards/selectors'\nimport SolutionCenterWidgets from 'containers/SolutionCenterWidgets'\nimport SolutionCenterFilterPanel from 'containers/SolutionCenterFilterPanel'\nimport SolutionCenterCardActions from 'containers/SolutionCenterCardActions'\nimport WithPermission from 'containers/PermissionChecker/WithPermission'\nimport { selectCards } from './selectors'\nimport reducer from './reducer'\nimport { startUpdateScPoll, stopUpdateScPoll } from './actions'\nimport sagas from './sagas'\nimport SolutionCenterToolbar from './SolutionCenterToolbar'\nimport SolutionCenterErrorBoundry from './SolutionCenterErrorBoundry'\nimport SolutionCenterFilterStatus from './SolutionCenterFilterStatus'\nexport class SolutionCenter extends React.Component {\n constructor(props) {\n super(props)\n\n this.state = {\n error: false,\n showFiltersPanel: false,\n }\n\n this.styles = {\n wrapper: {\n height: '100%',\n display: 'grid',\n gridTemplateRows: 'auto 1fr',\n gridTemplateAreas: '\"toolbar\" \"content\"',\n position: 'relative',\n },\n toolbar: {\n gridArea: 'toolbar',\n },\n content: {\n gridArea: 'content',\n display: 'grid',\n gridTemplateRows: 'auto auto 1fr',\n gridTemplateAreas: '\"scToolbar\" \"widgets\"',\n overflow: 'hidden',\n },\n\n scToolbar: {\n gridArea: 'scToolbar',\n display: 'grid',\n gridTemplateColumns: 'auto 1fr auto',\n gridTemplateAreas: '\"add filterstatus cardActions\"',\n },\n filterStatus: {\n gridArea: 'filterstatus',\n },\n cardActions: {\n gridArea: 'cardActions',\n },\n widgets: {\n gridArea: 'widgets',\n overflow: 'auto',\n position: 'relative',\n zIndex: 0,\n },\n }\n }\n\n componentDidMount() {\n this.props.startUpdateScPoll()\n }\n\n componentDidCatch(error) {\n this.setState({ error })\n }\n\n componentWillUnmount() {\n this.props.stopUpdateScPoll()\n }\n\n toggleFiltersPanel = () => {\n this.setState(currentState => ({\n showFiltersPanel: !currentState.showFiltersPanel,\n }))\n }\n\n render() {\n if (this.state.error) {\n return \n }\n const dataLoaded =\n !this.props.solutionCards.isEmpty() && !this.props.queryTypes.isEmpty()\n\n if (!dataLoaded) {\n return \n }\n\n return (\n \n
\n
\n {!this.props.selectedCard.isEmpty() && (\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\nSolutionCenter.propTypes = {\n queryTypes: ImmutablePropTypes.iterable.isRequired,\n selectedCard: ImmutablePropTypes.map.isRequired,\n solutionCards: ImmutablePropTypes.iterable.isRequired,\n startUpdateScPoll: PropTypes.func.isRequired,\n stopUpdateScPoll: PropTypes.func.isRequired,\n}\n\nconst mapStateToProps = createStructuredSelector({\n selectedCard: selectSelectedCard,\n solutionCards: selectCards,\n queryTypes: selectQueryTypes,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n startUpdateScPoll,\n stopUpdateScPoll,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nconst withReducer = injectReducer({ key: 'solutionCenter', reducer })\nconst withSaga = injectSaga({\n key: 'solutionCenter',\n saga: sagas,\n mode: DAEMON,\n})\n\nexport default compose(withReducer, withConnect, withSaga)(SolutionCenter)\n"],"sourceRoot":""}