{"version":3,"sources":["webpack:///./Scripts/View/Core/AlertMessageFilter.ts","webpack:///./Scripts/View/Components/Menus/SearchMenuItemControl.ts","webpack:///./Scripts/View/Components/Menus/MenuVisualizer.ts","webpack:///./Scripts/View/Core/ComponentDescriptors/ComponentDescriptorFactory.ts","webpack:///./Scripts/View/Helpers/FilterHelper.ts","webpack:///./Scripts/View/Dialogs/ChangePasswordDialog.ts","webpack:///./Scripts/View/Core/ComponentDescriptors/ComponentChangeGroup.ts","webpack:///./Scripts/View/Helpers/Charts/ProcessChartsHelper.ts","webpack:///./Scripts/View/Helpers/ComponentDescriptorHelper.ts","webpack:///./Scripts/View/Core/FiltrationProvider.ts","webpack:///./Scripts/View/Core/ComponentDescriptors/ComponentDescriptors.ts","webpack:///./Scripts/View/Core/Scroll.ts"],"names":["getAlertMessageFilter","filters","projectId","alerts","getDocuments","alert","filteredAlertIds","Set","timeFiltersOperation","_","stubTrue","filterValuesByFieldId","Map","entityFilter","dimensionValues","correctEntryFilter","alertsId","getFilterByEntity","map","a","id","partition","isTimeFilter","timeFilters","otherFilters","timeFilter","timeIntervals","values","parse","operation","getOperationForFilter","message","i","dateTimeInInterval","moment","collection","byDimensionsWithFieldsMessage","fields","field","filterValues","get","key","fv","v","byDimensionsMetricMessage","dimension","byEntity","size","has","alertId","byTime","every","op","byDimension","isInstanceOfType","whereIn","some","negate","filter","isTimeDrillDown","dateTimeFilterName","recordId","metricId","isGuidValue","type","record","metric","ra","settingsId","SearchTextTemplate","params","mask","jointHeight","popupWidth","popupHeight","this","init","css","padding","margin","rightmost","position","right","wrapper","$","input","className","borderStyleName","textStyle","width","placeholder","strings","searchPlaceholder","clearIcon","searchClearImage","searchIcon","searchImage","isSearchPending","inputControl","getControl","on","results","onLoadItems","tree","items","getTreeItems","displayResults","e","code","keyCode","which","keyCodes","UP_ARROW","preventDefault","selectPrevItem","DOWN_ARROW","selectNextItem","ENTER","selectedItems","length","onClick","data","popup","hide","onChange","append","root","mls","itemDefaultStyle","itemOpenedStyle","resultMenuItemStyleName","itemSelectedStyle","itemHoverStyle","resultMenuItemHoverStyleName","cloneItems","sortable","checkable","selectable","openByClick","height","contentStyle","levelStyle","defaultLevelStyle","possibleRightAlign","visibilityComparer","checkIfDisabledByGroup","actionItem","hasMaskInString","name","fullName","tags","onItemClick","item","isHidden","popupBackground","empty","addClass","noDataString","lineHeight","textAlign","res","menuItemName","view","children","reduce","array","result","index","processed","processTemplates","push","title","componentId","expanded","extractTags","quickSearchText","template","text","processSingleTemplate","SearchText","Description","description","trim","replace","match","group","join","replaceMultipleWhitespaces","source","value","removeBrackets","removeEmptyBrackets","test","str","toLowerCase","indexOf","getValue","setNodesVisibility","visibleNodes","getVisibleNodes","isEmpty","forEach","node","charSpaceWidth","lastIndex","lastIndexOf","substr","parent","visibility","add","control","setContent","offset","left","top","show","Math","min","getRealContentHeight","classNameVertical","classNameHorizontal","component","eventsBag","create","onSelectionChanged","appearance","styleHelper","stylesHelper","menuLevelStyles","getMenuLevelStyles","isVertical","menuStyle","verticalMenu","getMenuParams","staticParams","align","highlightAllSelectedWay","isDesktop","isDesktopBrowser","first","allowScroll","itemSpacing","horizontalMenu","itemSpacingType","specific","menuParam","showContainerIndicator","getStyleName","componentStyleName","itemsAlign","assign","MenuLevelStyle","defaultStyleName","hoverStyleName","selectedStyleName","openedStyleName","itemDefaultBorderStyle","defaultBorderStyleName","itemHoverBorderStyle","hoverBorderStyleName","itemSelectedBorderStyle","selectedBorderStyleName","itemOpenedBorderStyle","openedBorderStyleName","adjust","w","h","menu","createHandlers","createMenuComponent","getMenu","beforeProcessAction","applyItemRules","componentDescriptorFactory","allCommands","commands","dataWizard","timeWizard","displayWizard","actionWizard","commonChangableGroup","areaRange","rangeBar","pareto","splineRange","horizontalRangeBar","doughnut","pie","dialGauge","linearGauge","chartWithRange","processControl","pyramid","funnel","pieSemiCircle","searchTree","ei","createComponentDescriptor","param","extend","componentGroup","canHaveDrillDown","componentToolBarCommands","defaultComponentWidth","descriptorConstants","defaultComponentHeight","defaultDimension","showTitleByDefault","hasChartRanges","seriesSettings","showAllTimeIntervals","none","isuiComponent","isPercentComponent","componentInstanceType","getName","componentType","createBaseComponentDescriptor","createChartDescriptor","componentGroups","chartComponents","changableGroup","changeGroupCommon","createProcessComponentDescriptor","seriesDescriptorSettings","processComponents","hasSeriesSettingsTab","hasCellPaintingSettings","sparkSettingsDescriptor","hasBulletSettings","createDataDescriptor","specialSeriesCount","dimensionTitles","descriptors","dimensionDescriptor","dimension1","dimension2","dimensionDescriptors","reverse","canChooseCurrentDimensions","filterHelper","getGroupName","groupName","viewId","isCurrentGroup","getFilterGroup","parentId","FilterGroup","find","getAllDriverGroups","isLocal","isLocalGroupName","isCurrentView","currentViewGroupName","endWithGuid","isGuid","slice","isPrint","mergeGroupFilters","groupFilter1","groupFilter2","mergeFilters","mergeEntityFilters","parameterValues","processFilters","mergeProcessFilters","dimensionConditions","recordsData","mergeRecordsData","dimensionAllValuesExcluded","mergeDimensionAllValuesExcluded","groupFilter","seriesId","dimensionAllValuesExcluded1","dimensionAllValuesExcluded2","contains","newProcessFilters","existingProcessFilters","noFilterId","chain","unionBy","entityFilter1","entityFilter2","guidEmpty","recordsData1","recordsData2","rd","filterValues1","filterValues2","filterValue2","existedFilter","mergeDimensionFilterValues","splice","inArray","filterValue1","includes","whereNotIn","filterType","union","firstFilterValue","secondFilterValue","difference","differenceBy","interval1","unionIntervals","interval2","resultInterval","intersectIntervals","toString","intersection","intersectionBy","processSubPathToString","subPath","process","getStepNameByIndex","getLocalGroupsName","currentViewsGroupId","getAffectedDriverGroups","affectedDriverGroups","parentIds","resultGroups","currentViewGroups","filterGroup","uniqBy","g","groupValue","mergeGroupFiltersList","groupsFilters1","groupsFilters2","filter2","filter1","remove","isDriverGroup","groups","getParentIds","getOutgoingGroupName","processFilterToDimensionFilter","pathFilterValue","getProcess","selectionOptions","originalProcess","paths","path","step","transition","from","to","filterString","globalFilters","processFilterQueued","processFilterOutcoming","processFilterIncoming","steps","s","number","stepName","getStepTitle","format","processPathFilterName","dimensionFilterToString","dimensionFilter","filterTypeId","seriesFilterToString","series","filterItem","dataDefinition","operatorType","unknown","operatorName","fieldPath","getFilterTypes","typeKind","emptyItem","filterTypes","string","starts","ends","equal","notEqual","like","dateTime","less","lessOrEqual","greater","greaterOrEqual","range","between","float","int","bool","guid","getFilterTypesInner","isNull","isNotNull","unshift","cloneDeep","getValues","resources","loginControl","dataServiceProvider","enforcedPolicy","current","model","user","enforcePasswordPolicy","oldPasswordWrong","dialog","changePasswordTitle","hideCancel","closeByEnter","createLayout","ok","onChangePassword","setOkButtonState","open","wrap","layout","validate","oldPassword","attr","newPassword","confirmPassword","loginInput","canEdit","setValue","altosoft","parameters","Login","setState","b","addControl","usernameTitle","passwordTitle","newPasswordTitle","confirmPasswordTitle","pStrength","changeBackground","onPasswordStrengthChanged","onValidatePassword","valid","setError","passwordIsEmpty","wrongPassword","removeError","newPasswordIsEmpty","passwordMustDiffer","confirmMustMatch","Promise","changePassword","close","dialogTitle","setting","loadingTimeout","changingPassword","polarGroup","stickGroup","processChartsHelper","getDataByType","transitionData","timeData","average","timeStatistics","averageTime","deviation","stdDevTime","median","medianTime","percentile75","percentile75Time","percentile90","percentile90Time","isTransitionData","count","formatTimeSpanByType","timeType","timestamp","formatTimeValue","processTimeTypes","formatValueByDefault","toLower","days","dayTimeSpanFormat","defaultTimeSpanFormat","formatMilliseconds","getStepByIndex","stepData","localizedTitle","fieldId","fieldValue","fieldDisplayValue","processDialog","newStep","getSubProcess","subProcessId","subProcesses","sp","getSubProcessOutgoingTransitions","subProcess","transitions","sourceNumber","sinkNumber","getTransitionForSubStep","preparedProcess","startStep","transitionOutgoing","stepOutgoing","detectedSides","getNearestSidesOfRectangles","coordinates","sourceOrientation","sinkOrientation","tolerance","coordinatesSource","coordinatesSink","flatMap","sideSource","sideSink","pointSource","getPointBySide","pointSink","orderBy","getDistanceBetweenPoints","take","side","x","x1","x2","y","y1","y2","bottom","sqrt","getSwimlaneGroups","processId","swimlaneGroup","object","undefined","isSwimlaneAppearance","tooltipTimeData","formatTransitionLabel","chartAppearance","timeText","transitionTimeData","currentValue","firstLine","returnText","secondLine","showTransitionLabels","displayMetricValues","formatNumberByFormatName","metricValue","countFormatName","numberNoDecimalFormatName","formatTooltip","fromStepTitle","toStepTitle","tooltipItems","tooltipTimeDataItems","uniq","tooltipData","formatStepTooltip","getFormat","stepTooltipFormat","formatNumberByFormat","instancesCount","startedFromCount","incomingCount","outgoingCount","formatLaneCaption","pathData","captionType","max","maxTime","minTime","cost","getMetricDataByType","isMinTransition","minBy","isMaxTransition","maxBy","getStepFromSelection","processSelectionOptions","getNewStepNumber","isAsyncStep","isAsynchronous","getParentSubProcess","isSubProcessStep","getSubProcessNameById","getSubProcessIncomingTransitions","prepareSubProcess","rootProcesses","subProcessTransitions","stepsEnumerable","cookieStudioSettings","gridSize","compact","getSwimlaneGroupsNames","getProcessFilterDefinitions","pfd","setAutoLayoutForChart","autoLayout","isAutogenerated","horizontal","hours","minutes","seconds","componentDescriptorHelper","componentDescriptors","Object","keys","descriptorTypeName","isFunction","descriptor","componentAppearances","getOwnPropertyNames","typeName","typeInst","appearanceComponentType","getComponentDescriptor","getComponentDescriptorProperty","readProperty","defaultValue","readPropertyImpl","desc","property","getDimensionDescriptors","componentDescriptor","componentDataDescriptor","getToolbarComponentDescriptors","toolbarComponentTypes","toolBarType","createAppearance","createComponent","isHorisontalMenuStyledDriver","isSimpleMode","ComponentType","entityDriver","displayMode","simpleModeSettings","menuOrientation","getComponentChangeTypes","findChangeTypesId","componentTypeId","descType","bar","line","stackedBar","area","horizontalBar","bubble","scatter","sparkLine","trafficLight","candleStick","waterfall","treeMap","metricGrid","recordGrid","alertsGrid","alertMessagesGrid","markerGrid","driver","timeDriver","periodDriver","aggregationDriver","timeWindow","parameterDriver","label","image","uiLine","button","viewHolder","searchPanel","reportSelfSubscription","recordForm","swimlane","processChart","processStepChart","processGrid","languageSelection","trellisChart","processTrellisChart","polarChartColumn","boxPlot","fileUploader","urlFilters","FiltrationProvider","getUrlFilters","getGlobalFilters","dimensionFilters","dimensions","urlParameters","pair","urlGroupParameterPrefix","urlDimensionParameterPrefix","urlValueParameterPrefix","setGlobalFilter","globalFilter","dimensionFilterValue","existedDimensionFilterValue","hasNoFilterValue","parameterValue","existedParameterValue","filterValue","resetFilters","groupIds","toRemove","gf","getAllGroupFilters","viewFilters","globalDimensionFilters","getAllFilters","localFilters","selfGroupFilter","removeComponentOwnFilters","globalDimensionFilter","dimensionValue","aggregationFilterName","getDimensionFilter","driverGroup","selfDimensionFilterValue","urlFilter","viewFilter","action","dimensionIds","actionDefinition","getActionDefinition","actionType","hasFlag","driverOfDimension","filterIds","useCurrentDimension","getFilterIds","specialDimension","filterId","addSeriesFilters","dataRequestConfiguration","parentViewIds","seriesFilters","seriesFilter","currentSeries","parentViewId","needDisplayData","parameter","shapeRequestConfiguration","isProcessDataParam","configuration","componentDefinition","commonFilters","displayData","hideDataUntilSpecialGroupFilterSet","specialFilterGroup","hasGroupFilter","hideDataUntilSpecialDimensionSet","hasDimensionFilter","specialDimensionId","getFilterValues","dimensionId","metricDriverDimensionId","recordDriverDimensionId","filterTypeOption","parameterFilter","processFilter","entityId","applyMapFilters","pinLayers","layer","drillDownId","actions","drillDownIds","applyFilters","requestConfiguration","getComponentTimeInterval","interval","minDate","maxDate","getIntervalFromFilters","defaultInterval","intervals","getEntityIdForGroups","entityType","groupValueSet","f","getAggregationForGroups","dv","av","Boolean","setGlobalFilters","alertMessagesGridDescriptor","toolBarIcon","gridComponents","refreshAfterCreated","alertsGridDescriptor","bubbleDescriptor","bubbles","highchartType","highchartTypes","buttonDescriptor","controlComponents","lineDescriptor","internal","clientInstanceType","extendedChart","xAxis","lines","extendedChartDescriptor","breakdown","barDescriptor","waterfallDescriptor","bars","pyramidDescriptor","hasAxisAndBreakdownsTab","hasDrillDownOptionTab","funnelDescriptor","boxPlotDescriptor","polarChartColumnDescriptor","column","polarChartBasicSetting","polarChartLineDescriptor","lineDimentions","polarChartLine","polarChartAreaDescriptor","areaDimentions","areas","polarChartArea","polarChartScatterDescriptor","polarChartScatter","rangeBarDescriptor","mirrorrange","paretoDescriptor","groupBarDescriptor","groupBar","trellisChartDescriptor","stackedBarDescriptor","stackedBars","stackedBar100Descriptor","stackedBar100","stackedBars100","areaDescriptor","areaRangeDescriptor","arearange","invertedAreaDescriptor","invertedArea","splineDescriptor","spline","splines","invertedSplineDescriptor","invertedSpline","splineAreaDescriptor","splineArea","splineAreas","stackedAreaDescriptor","stackedArea","stackedAreas","stackedArea100Descriptor","stackedArea100","stackedAreas100","stackedLineDescriptor","stackedLine","stackedLines","stackedSplineDescriptor","stackedSpline","stackedSplines","stackedSplineAreaDescriptor","stackedSplineArea","stackedSplineAreas","stackedSplineArea100Descriptor","stackedSplineArea100","stackedSplineAreas100","rangeDescriptor","splineRangeDescriptor","areasplinerange","candleStickDescriptor","candlestick","stickDescriptor","stick","ohlc","horizontalBarDescriptor","horizontalRangeBarDescriptor","horizontalBars","horizontalGroupBarDescriptor","horizontalGroupBar","horizontalStackedBarDescriptor","horizontalStackedBar","horizontalStackedBars","horizontalStackedBar100Descriptor","horizontalStackedBar100","horizontalStackedBars100","processControlDescriptor","chartWithRangeDescriptor","driverDescriptor","defaultDriverWidth","defaultDriverHeight","driverComponents","entityDriverDescriptor","dialGaugeDescriptor","linearGaugeDescriptor","globalFiltersDescriptor","imageDescriptor","uiComponents","labelDescriptor","languageSelectionDescriptor","otherComponents","fileUploaderDescriptor","logViewerDescriptor","logViewer","mapPinDescriptor","mapPin","instanceName","hasMainSparkSettings","hasAdditionalSparkSettings","wholeRow","mapDescriptor","markerGridDescriptor","menuDescriptor","metricGridDescriptor","rows","columns","parameterDriverDescriptor","periodDriverDescriptor","aggregationDriverDescriptor","processGridDescriptor","useIntervalMatching","pieDescriptor","doughnutDescriptor","pieSemiCircleDescriptor","recordFormDescriptor","recordGridDescriptor","recordTimeDescriptor","recordTime","columnrange","reportSelfSubscriptionDescriptor","scatterDescriptor","searchPanelDescriptor","sparkLineDescriptor","timeDriverDescriptor","timeWindowDescriptor","trafficLightDescriptor","treeMapDescriptor","treemap","uiLineDescriptor","viewHolderDescriptor","processAgingChartDescriptor","processAgingChart","processChartDescriptor","hasBottleneckSetting","processActions","processStepChartDescriptor","swimlaneDescriptor","processTrellisChartDescriptor","defaultLabelRotation","ScrollUtils","element","settings","_paddingClass","_overlay","_isInEndArea","_settings","defaults","bounceTime","disableMouse","disableTouch","disablePointer","allowDragScroll","hasTouch","freeScroll","mouseWheel","interactiveScrollbars","hasMouse","fadeScrollbars","scrollbars","probeType","scrollX","scrollY","scrollbarX","scrollbarY","endSensitivity","disableTranslate","canScroll","onScrolledToEnd","noop","onScrollStart","onScrollMove","overrideCaret","scroller","rightPadding","overlayedScroll","scrollToSelection","_scrollElement","getElement","style","overflow","_iScroll","bind","onScroll","onScrollEnd","onIndicatorScrollStart","onIndicatorScrollEnd","_indicatorX","indicators","options","listenX","_indicatorY","listenY","_scroller","nodeType","jQuery","document","querySelector","_previousVScrollState","hasVerticalScrollbar","call","maxScrollY","deltaX","deltaY","_scrollToCallback","appendTo","detach","refresh","callback","bypassTimeout","localRefreshFn","prevX","prevY","_hasPadding","removeClass","setTimeout","ensureVisible","el","time","setScrollbarsVisibility","isVisible","classList","toggle","subscribeToWheelEvent","wheelFunc","isPassiveSupported","passive","addEventListener","setScale","scale","Error","getScrollPosition","setScrollPosition","point","scrollTo","relative","instantScrollTo","_instantScrollTo","scrollToEnd","destroy","hasVerticalScroll","getVerticalScrollbarSize","offsetWidth","hasHorizontalScrollbar","hasHorizontalScroll","getHorizontalScrollbarSize","offsetHeight","updateSettings","maxScrollX","getScrollSize","scroll","Scroll","verticalSize","horizontalSize","extendIScroll","func","utils","minScrollbarSize","_init","scrollerStyle","selectionInterval","vertical","handlers","keyDown","target","nodeName","_checkOrigin","focus","currentTarget","scrollTop","touchMove","selectionStart","addEvent","window","prefixPointerEvent","selectionMove","selectionEnd","wrapperRect","getBoundingClientRect","needScrollLeft","clientX","needScrollRight","clearInterval","setInterval","needScrollTop","clientY","needScrollBottom","removeEvent","computedStyle","getComputedStyle","scrollerOffsetLeft","parseInt","getPropertyValue","scrollerOffsetRight","scrollerOffsetTop","scrollerOffsetBottom","rect","wrapperWidth","ceil","wrapperHeight","bBox","scrollerWidth","scrollerHeight","setAttribute","apply","args","_events","_initIndicators","indicator","parentNode","appendChild","interactive","setOpacity","wrapperStyle","transitionDuration","opacity","visible","marginLeft","marginRight","marginTop","marginBottom","oldHasHorizontal","oldHasVertical","_defaultOffset","offsetLeft","_defaultSize","browser","mozilla","offsetRight","offsetTop","offsetBottom","display","indicatorStyle","clientWidth","resize","indicatorWidth","round","maxPosX","shrink","minBoundaryX","maxBoundaryX","sizeRatioX","speedRatioX","clientHeight","indicatorHeight","maxPosY","minBoundaryY","maxBoundaryY","sizeRatioY","speedRatioY","updatePosition","_start","_execEvent","_end","initiated","pos","wrapperOffset","abs","_getScrollTarget","hasAttribute","skipScroll","parents","KeyboardEvent","ownerDocument","defaultView","_preventScroll","prohibitedClassList","body","_stop","momentum","pointerId","pointerDownEvent","_wheel","shiftKey","defineProperties","wheelDeltaX","wheelDeltaY","wheelDelta","detail","hadVerticalScroll","stopPropagation","configurable","isPrimary","getPointerType","pointerType","mouse","def","tagName","_initPointerEvents","done","removeData","_move","preventClick","_initEvents","eventType","hasPointer","_translate","resetPosition","bindToWrapper","_rAF","vendor","easing","isAnimating","_onStopAnimation","_animate","destX","destY","duration","easingFn","startX","startY","startTime","getTime","destTime","now","newX","newY"],"mappings":"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","file":"view-admin-alertMessage-dataLoadManager-error-mtConsole-studio-themeManager-viewer.js","sourcesContent":["import constants from '@Common/Core/Constant';\r\nimport { documentCategories } from '@Common/Core/DocumentCategories';\r\nimport Guid from '@Common/Core/Guid';\r\nimport { EntityDriverType, FilterType } from '@Common/Enums';\r\nimport { toMultiMap } from '@Common/Helpers/CollectionUtils';\r\nimport { DataTimeIntervalHelper } from '@Common/Helpers/DataTimeIntervalHelper';\r\nimport documentHelper from '@Common/Helpers/DocumentHelper';\r\nimport timeHelper from '@Common/Helpers/TimeHelper';\r\nimport {\r\n AlertMessageWithFields,\r\n BaseAlertDocument,\r\n BaseAlertMessage,\r\n DimensionFilterValues,\r\n GroupFilter,\r\n MetricAlertDocument,\r\n MetricAlertMessage,\r\n RecordAlertDocument\r\n} from '@InstanceFactory';\r\n\r\nexport type AlertMessageFilter = (message: BaseAlertMessage) => boolean;\r\n\r\nexport function getAlertMessageFilter(filters: GroupFilter[], projectId: Guid): AlertMessageFilter {\r\n const alerts = documentHelper.getDocuments(projectId, documentCategories.alert);\r\n let filteredAlertIds = new Set();\r\n let timeFiltersOperation = [_.stubTrue] as AlertMessageFilter[];\r\n let filterValuesByFieldId = new Map();\r\n\r\n for (const { entityFilter, dimensionValues } of filters) {\r\n for (const correctedFilter of correctEntryFilter(entityFilter || {})) {\r\n const alertsId = getFilterByEntity(correctedFilter)(alerts).map(a => a.id);\r\n filteredAlertIds = new Set([...filteredAlertIds, ...alertsId]);\r\n }\r\n const [timeFilters, otherFilters] = _.partition(dimensionValues, isTimeFilter);\r\n for (const timeFilter of timeFilters) {\r\n const timeIntervals = timeFilter.values.map(({ id }) => DataTimeIntervalHelper.parse(id));\r\n const operation = getOperationForFilter(timeFilter);\r\n const timeOperation = message => operation(timeIntervals, i => timeHelper.dateTimeInInterval(message.moment, i));\r\n timeFiltersOperation = [...timeFiltersOperation, timeOperation];\r\n }\r\n\r\n const collection = [...otherFilters, ...filterValuesByFieldId.values()] as DimensionFilterValues[];\r\n filterValuesByFieldId = toMultiMap(collection);\r\n }\r\n\r\n const byDimensionsWithFieldsMessage = ({ fields }: Pick) => {\r\n for (const field of fields) {\r\n const filterValues = filterValuesByFieldId.get(field.key);\r\n if (filterValues) {\r\n for (const fv of filterValues) {\r\n const operation = getOperationForFilter(fv);\r\n if (!operation(fv.values, v => v.id === field.id)) {\r\n return false;\r\n }\r\n }\r\n }\r\n }\r\n return true;\r\n };\r\n\r\n const byDimensionsMetricMessage = ({ dimension }: Pick) => {\r\n return byDimensionsWithFieldsMessage({ fields: [dimension] });\r\n };\r\n\r\n const byEntity = (message: BaseAlertMessage) => filteredAlertIds.size === 0 || filteredAlertIds.has(message.alertId);\r\n const byTime = (message: BaseAlertMessage) => timeFiltersOperation.every(op => op(message));\r\n\r\n return message => {\r\n const byDimension: AlertMessageFilter =\r\n filterValuesByFieldId.size === 0\r\n ? _.stubTrue\r\n : MetricAlertMessage.isInstanceOfType(message)\r\n ? (byDimensionsMetricMessage as any)\r\n : byDimensionsWithFieldsMessage;\r\n return [byEntity, byTime, byDimension].every(op => op(message));\r\n };\r\n}\r\n\r\nconst getOperationForFilter = ({ filterType }: Pick) =>\r\n filterType === FilterType.whereIn ? _.some : _.negate(_.some);\r\n\r\nconst isTimeFilter = (filter: DimensionFilterValues) => timeHelper.isTimeDrillDown(filter.id) || filter.id === constants.dateTimeFilterName;\r\n\r\nfunction* correctEntryFilter({ recordId, metricId }: GroupFilter['entityFilter']): IterableIterator {\r\n if (Guid.isGuidValue(recordId)) {\r\n yield { recordId, type: EntityDriverType.record };\r\n }\r\n if (Guid.isGuidValue(metricId)) {\r\n yield { metricId, type: EntityDriverType.metric };\r\n }\r\n}\r\n\r\nfunction getFilterByEntity(filter: GroupFilter['entityFilter']): (alerts: BaseAlertDocument[]) => BaseAlertDocument[] {\r\n switch (filter.type) {\r\n case EntityDriverType.record:\r\n return alerts => alerts.filter(RecordAlertDocument.isInstanceOfType()).filter(ra => ra.recordId === filter.recordId);\r\n case EntityDriverType.metric:\r\n return alerts => alerts.filter(MetricAlertDocument.isInstanceOfType()).filter(ra => ra.settingsId === filter.metricId);\r\n default:\r\n return alerts => alerts;\r\n }\r\n}\r\n","import { IMenuParameters, Popup, SearchControl, Tree } from '@Common/Controls';\r\nimport constants from '@Common/Core/Constant';\r\nimport { MenuSearchResult, SearchResultItem } from '@InstanceFactory';\r\nimport { IMenuItemSearch } from '@View/Components/Menus/MenuComponent';\r\nimport { MenuLevelStyle } from './MenuVisualizer';\r\n\r\nenum SearchTextTemplate {\r\n SearchText = 'SearchText',\r\n Description = 'Description'\r\n}\r\n\r\nexport class SearchMenuItemControl {\r\n private root: JQuery;\r\n private tree: Tree;\r\n private popup: Popup;\r\n private input: SearchControl;\r\n private results: MenuSearchResult[];\r\n private mask = '';\r\n private empty: JQuery;\r\n\r\n private readonly jointHeight = 30;\r\n private readonly popupWidth = 300;\r\n private readonly popupHeight = 300;\r\n\r\n constructor(private readonly params: IMenuItemSearch) {\r\n this.init();\r\n }\r\n\r\n private init() {\r\n const css: any = {\r\n padding: this.params.margin\r\n };\r\n if (this.params.rightmost) {\r\n css.position = 'absolute';\r\n css.right = 0;\r\n }\r\n const wrapper = $('
').css(css);\r\n\r\n this.input = new SearchControl({\r\n className: `${this.params.borderStyleName} inherit-placeholder inverted`,\r\n css: this.params.textStyle,\r\n width: this.params.width,\r\n placeholder: strings.searchPlaceholder,\r\n clearIcon: this.params.searchClearImage,\r\n searchIcon: this.params.searchImage\r\n });\r\n\r\n let isSearchPending = false;\r\n const inputControl = this.input.getControl();\r\n inputControl\r\n .on('click', async () => {\r\n if (!this.results) {\r\n this.results = await this.params.onLoadItems();\r\n this.tree.items(this.getTreeItems());\r\n isSearchPending && this.displayResults();\r\n } else {\r\n this.displayResults();\r\n }\r\n })\r\n .on('keydown', e => {\r\n const code = e.keyCode ? e.keyCode : e.which;\r\n if (code === constants.keyCodes.UP_ARROW) {\r\n e.preventDefault();\r\n this.tree.selectPrevItem();\r\n }\r\n if (code === constants.keyCodes.DOWN_ARROW) {\r\n e.preventDefault();\r\n this.tree.selectNextItem();\r\n }\r\n if (code === constants.keyCodes.ENTER) {\r\n e.preventDefault();\r\n const selectedItems = this.tree.selectedItems();\r\n if (selectedItems.length) {\r\n this.params.onClick(selectedItems[0].data);\r\n this.popup.hide();\r\n }\r\n }\r\n });\r\n this.input.onChange(e => {\r\n if (this.results) {\r\n this.displayResults();\r\n } else {\r\n isSearchPending = true;\r\n }\r\n });\r\n wrapper.append(inputControl);\r\n\r\n this.root = $('
  • ').append(wrapper);\r\n\r\n const mls = new MenuLevelStyle();\r\n mls.itemDefaultStyle = mls.itemOpenedStyle = this.params.resultMenuItemStyleName;\r\n mls.itemSelectedStyle = mls.itemHoverStyle = this.params.resultMenuItemHoverStyleName;\r\n\r\n this.tree = new Tree({\r\n cloneItems: true,\r\n sortable: false,\r\n checkable: false,\r\n selectable: false,\r\n openByClick: false,\r\n width: this.popupWidth,\r\n height: this.popupHeight,\r\n contentStyle: 'no-expand-arrow component-menu-children',\r\n levelStyle: [mls],\r\n defaultLevelStyle: mls,\r\n possibleRightAlign: true,\r\n visibilityComparer: i => {\r\n return !this.params.checkIfDisabledByGroup(i.data.actionItem) &&\r\n (\r\n this.hasMaskInString(i.name) ||\r\n (i.data.fullName && this.hasMaskInString(i.data.fullName)) ||\r\n (i.data.tags && this.hasMaskInString(i.data.tags))\r\n );\r\n }\r\n } as IMenuParameters);\r\n this.tree.onItemClick(item => {\r\n this.params.onClick(item.data);\r\n this.tree.selectedItems([]);\r\n this.popup.hide();\r\n });\r\n\r\n this.popup = new Popup({\r\n padding: 0,\r\n isHidden: true,\r\n jointHeight: this.jointHeight,\r\n css: this.params.popupBackground\r\n });\r\n\r\n this.empty = $('
    ')\r\n .css({ width: this.popupWidth })\r\n .addClass(this.params.resultMenuItemStyleName)\r\n .append(\r\n $(`

    ${strings.noDataString}

    `).css({\r\n margin: 0,\r\n lineHeight: 3,\r\n textAlign: 'center'\r\n })\r\n );\r\n }\r\n\r\n private getTreeItems(): any[] {\r\n return this.results.map(res => ({\r\n id: res.menuItemName,\r\n className: 'text-bold-important',\r\n name: res.menuItemName,\r\n data: {\r\n view: res.view,\r\n actionItem: res.actionItem\r\n },\r\n children: res.results.reduce((array, result, index) => {\r\n const processed = this.processTemplates(result);\r\n array.push({\r\n id: `${res.menuItemName}-${index}`,\r\n name: processed.name,\r\n title: processed.title,\r\n data: {\r\n view: res.view,\r\n componentId: result.componentId,\r\n actionItem: res.actionItem,\r\n fullName: processed.fullName,\r\n tags: processed.tags\r\n }\r\n });\r\n return array;\r\n }, []),\r\n expanded: true\r\n }));\r\n }\r\n\r\n private processTemplates(result: SearchResultItem): { name: string; fullName: string; title: string; tags: string; } {\r\n const { tags, template } = this.extractTags(result.quickSearchText);\r\n const text = this.processSingleTemplate(template, SearchTextTemplate.SearchText, result.title, false);\r\n const name = this.processSingleTemplate(text, SearchTextTemplate.Description, '');\r\n\r\n return {\r\n name,\r\n tags,\r\n fullName: this.processSingleTemplate(text, SearchTextTemplate.Description, result.description),\r\n title: (result.description || name).trim()\r\n };\r\n }\r\n\r\n private extractTags(text: string) {\r\n const tags = [];\r\n const template = text.replace(/##(\\w+)/g, (match, group) => {\r\n tags.push(group);\r\n return '';\r\n });\r\n return {\r\n tags: tags.join(', '),\r\n template: this.replaceMultipleWhitespaces(template)\r\n };\r\n }\r\n\r\n private processSingleTemplate(source: string, template: SearchTextTemplate, value: string, removeBrackets = true): string {\r\n const result = source.replace(`[${template}]`, (value || '').trim());\r\n return removeBrackets ? this.removeEmptyBrackets(result) : result;\r\n }\r\n\r\n private removeEmptyBrackets(source: string): string {\r\n return source.replace(/\\[([^[]*?)\\]/g, (match, group) => {\r\n return (/\\w/g).test(match) ? group : '';\r\n }).trim();\r\n }\r\n\r\n private replaceMultipleWhitespaces(source: string): string {\r\n return source.replace(/(\\s)\\1+/g, '$1').trim();\r\n }\r\n\r\n private hasMaskInString(str) {\r\n return str.toLowerCase().indexOf(this.mask.toLowerCase()) != -1;\r\n }\r\n\r\n private displayResults() {\r\n const value = this.input.getValue();\r\n\r\n this.mask = value;\r\n this.tree.setNodesVisibility();\r\n\r\n if (value) {\r\n const visibleNodes = this.tree.getVisibleNodes();\r\n const isEmpty = !visibleNodes.length;\r\n const parentItems = {};\r\n\r\n visibleNodes.forEach(node => {\r\n if (node.data.children) {\r\n return;\r\n }\r\n\r\n let text = this.hasMaskInString(node.data.name) ? node.data.name : node.data.data.fullName;\r\n const textLength = text.length;\r\n const maskLength = this.mask.length;\r\n const charSpaceWidth = 10;\r\n\r\n if (textLength > maskLength + charSpaceWidth * 2) {\r\n const index = text.toLowerCase().indexOf(this.mask.toLowerCase());\r\n const lastIndex = text.lastIndexOf(' ', index - charSpaceWidth);\r\n if (index != -1 && lastIndex != -1) {\r\n text = '...' + text.substr(lastIndex + 1);\r\n }\r\n }\r\n\r\n const values = parentItems[node.parent.data.id] || (parentItems[node.parent.data.id] = new Set());\r\n if (values.has(text)) {\r\n node.visibility(false);\r\n } else {\r\n values.add(text);\r\n node.control.name.text(text);\r\n }\r\n });\r\n\r\n this.popup.setContent(isEmpty ? this.empty : this.tree.getControl());\r\n\r\n const { left, top } = this.input.getControl().offset();\r\n this.popup.show(left, top);\r\n\r\n const height = isEmpty ? this.empty.height() : Math.min(this.tree.getRealContentHeight(), this.popupHeight);\r\n this.popup.show(left, top, null, height);\r\n } else {\r\n this.popup.hide();\r\n }\r\n }\r\n\r\n public getControl(): JQuery {\r\n return this.root;\r\n }\r\n}\r\n","import { IMenuParameters, Menu } from '@Common/Controls';\r\nimport { MulticastDelegateBag } from '@Common/Core/MulticastDelegate';\r\nimport { properties } from '@Common/Core/Properties';\r\nimport { MenuItemSpacing, MenuStyle } from '@Common/Enums';\r\nimport StylesHelper from '@Common/Helpers/StylesHelper';\r\nimport { MenuAppearance, MenuComponent } from '@InstanceFactory';\r\nimport { View } from '@View/Core/View';\r\nimport { enumerable } from '@Common/Core/CoreDecorator';\r\n\r\nexport const classNameVertical = 'vertical';\r\nexport const classNameHorizontal = 'horizontal';\r\n\r\nexport class MenuLevelStyle {\r\n public itemDefaultStyle: string;\r\n public itemHoverStyle: string;\r\n public itemSelectedStyle: string;\r\n public itemOpenedStyle: string;\r\n public itemDefaultBorderStyle: string;\r\n public itemHoverBorderStyle: string;\r\n public itemSelectedBorderStyle: string;\r\n public itemOpenedBorderStyle: string;\r\n}\r\n\r\nexport class MenuVisualizer {\r\n protected menuLevelStyles: MenuLevelStyle[];\r\n protected appearance: MenuAppearance;\r\n protected styleHelper: StylesHelper;\r\n protected menu;\r\n private readonly eventsBag = new MulticastDelegateBag();\r\n\r\n public readonly onClick = this.eventsBag.create<(item, leftToRight: boolean) => void>();\r\n public readonly onSelectionChanged = this.eventsBag.create<(item1, item2) => void>();\r\n\r\n constructor(protected component: MenuComponent, protected view: View) {\r\n this.appearance = component.appearance as MenuAppearance;\r\n this.styleHelper = view.stylesHelper;\r\n this.menuLevelStyles = this.getMenuLevelStyles();\r\n }\r\n\r\n protected isVertical(): boolean {\r\n return this.appearance.menuStyle === MenuStyle.verticalMenu || this.appearance.menuStyle === MenuStyle.popup;\r\n }\r\n\r\n protected getMenuParams(): IMenuParameters {\r\n const staticParams = {\r\n align: null,\r\n cloneItems: true,\r\n highlightAllSelectedWay: true,\r\n isDesktop: properties.isDesktopBrowser,\r\n width: this.appearance.width,\r\n height: this.appearance.height,\r\n levelStyle: this.menuLevelStyles,\r\n defaultLevelStyle: _.first(this.menuLevelStyles),\r\n allowScroll: false,\r\n possibleRightAlign: true\r\n } as IMenuParameters;\r\n\r\n const needApplySpacing =\r\n this.appearance.menuStyle === MenuStyle.horizontalMenu && this.appearance.itemSpacingType === MenuItemSpacing.specific;\r\n const itemSpacing = needApplySpacing ? this.appearance.itemSpacing : '';\r\n\r\n const menuParam: any = {\r\n itemSpacingType: this.appearance.itemSpacingType,\r\n itemSpacing: itemSpacing,\r\n showContainerIndicator: this.appearance.showContainerIndicator,\r\n isVertical: this.appearance.menuStyle === MenuStyle.verticalMenu || this.appearance.menuStyle === MenuStyle.popup,\r\n contentStyle: this.styleHelper.getStyleName(this.appearance.componentStyleName) + ' component-menu-children'\r\n };\r\n if (!this.isVertical() && this.appearance.align) {\r\n menuParam.itemsAlign = this.appearance.align;\r\n menuParam.align = null;\r\n }\r\n\r\n return _.assign(staticParams, menuParam);\r\n }\r\n\r\n protected getMenuLevelStyles(): MenuLevelStyle[] {\r\n return _.map(this.appearance.menuLevelStyles, i => {\r\n const mls = new MenuLevelStyle();\r\n mls.itemDefaultStyle = this.styleHelper.getStyleName(i.defaultStyleName);\r\n mls.itemHoverStyle = this.styleHelper.getStyleName(i.hoverStyleName);\r\n mls.itemSelectedStyle = this.styleHelper.getStyleName(i.selectedStyleName);\r\n mls.itemOpenedStyle = this.styleHelper.getStyleName(i.openedStyleName);\r\n\r\n mls.itemDefaultBorderStyle = this.styleHelper.getStyleName(i.defaultBorderStyleName);\r\n mls.itemHoverBorderStyle = this.styleHelper.getStyleName(i.hoverBorderStyleName);\r\n mls.itemSelectedBorderStyle = this.styleHelper.getStyleName(i.selectedBorderStyleName);\r\n mls.itemOpenedBorderStyle = this.styleHelper.getStyleName(i.openedBorderStyleName);\r\n return mls;\r\n });\r\n }\r\n\r\n public adjust(w: number, h: number): void {\r\n this.menu && this.menu.adjust(w, h);\r\n }\r\n\r\n @enumerable\r\n public get className(): string {\r\n if (this.isVertical()) {\r\n return classNameVertical;\r\n }\r\n return classNameHorizontal;\r\n }\r\n\r\n public createHandlers(): void {\r\n this.menu.onItemClick && this.menu.onItemClick(this.onClick);\r\n this.menu.onSelectionChanged && this.menu.onSelectionChanged(this.onSelectionChanged);\r\n }\r\n\r\n public createMenuComponent(): void {\r\n this.menu = new Menu(this.getMenuParams() as any);\r\n }\r\n\r\n public getMenu() {\r\n return this.menu;\r\n }\r\n\r\n public getControl(): JQuery {\r\n return this.menu.getControl();\r\n }\r\n\r\n public beforeProcessAction() {}\r\n\r\n public applyItemRules(items) {}\r\n}\r\n","import constants from '@Common/Core/Constant';\r\nimport { ComponentType, ShowAllTimeIntervals } from '@Common/Enums/Enum';\r\n\r\nimport { ComponentChangeGroup } from './ComponentChangeGroup';\r\n\r\nexport class ComponentDescriptorFactory {\r\n allCommands = [constants.commands.dataWizard, constants.commands.timeWizard, constants.commands.displayWizard, constants.commands.actionWizard];\r\n\r\n createComponentDescriptor(param) {\r\n param = $.extend(\r\n {\r\n componentGroup: null,\r\n canHaveDrillDown: false,\r\n componentToolBarCommands: [],\r\n defaultComponentWidth: constants.descriptorConstants.defaultComponentWidth,\r\n defaultComponentHeight: constants.descriptorConstants.defaultComponentHeight,\r\n defaultDimension: '',\r\n showTitleByDefault: true,\r\n hasChartRanges: false,\r\n seriesSettings: null,\r\n showAllTimeIntervals: ShowAllTimeIntervals.none,\r\n isuiComponent: false,\r\n isPercentComponent: false,\r\n componentInstanceType: 'Component'\r\n },\r\n param\r\n );\r\n param.name = ComponentType.getName(param.componentType);\r\n return param;\r\n }\r\n\r\n createBaseComponentDescriptor(param) {\r\n param.componentInstanceType = 'BaseComponent';\r\n return this.createComponentDescriptor(param);\r\n }\r\n\r\n createChartDescriptor(param) {\r\n param = $.extend(\r\n {\r\n componentToolBarCommands: this.allCommands,\r\n componentGroup: constants.componentGroups.chartComponents,\r\n canHaveDrillDown: true,\r\n hasChartRanges: true,\r\n changableGroup: param.changableGroup || this.commonChangableGroup[param.componentType] ? ComponentChangeGroup.changeGroupCommon : null\r\n },\r\n param\r\n );\r\n return this.createComponentDescriptor(param);\r\n }\r\n\r\n createProcessComponentDescriptor(param) {\r\n param = $.extend(\r\n {\r\n seriesSettings: this.seriesDescriptorSettings(true, null, false),\r\n componentToolBarCommands: this.allCommands,\r\n componentGroup: constants.componentGroups.processComponents,\r\n hasSeriesSettingsTab: true,\r\n componentInstanceType: 'ProcessComponent'\r\n },\r\n param\r\n );\r\n return this.createComponentDescriptor(param);\r\n }\r\n\r\n seriesDescriptorSettings(hasCellPaintingSettings, sparkSettingsDescriptor, hasBulletSettings) {\r\n return {\r\n hasCellPaintingSettings: hasCellPaintingSettings,\r\n sparkSettingsDescriptor: sparkSettingsDescriptor,\r\n hasBulletSettings: hasBulletSettings\r\n };\r\n }\r\n\r\n createDataDescriptor(specialSeriesCount, dimensionTitles?) {\r\n const descriptors = [];\r\n if (dimensionTitles != null && dimensionTitles.length > 0) {\r\n descriptors.push(this.dimensionDescriptor(constants.dimension1, dimensionTitles[0]));\r\n if (dimensionTitles.length > 1) {\r\n descriptors.push(this.dimensionDescriptor(constants.dimension2, dimensionTitles[1]));\r\n }\r\n }\r\n return {\r\n specialSeriesCount: specialSeriesCount,\r\n dimensionDescriptors: descriptors.reverse(),\r\n canChooseCurrentDimensions: true\r\n };\r\n }\r\n\r\n dimensionDescriptor(id, title) {\r\n return {\r\n id: id,\r\n title: title\r\n };\r\n }\r\n\r\n private commonChangableGroup = [\r\n ComponentType.areaRange,\r\n ComponentType.rangeBar,\r\n ComponentType.pareto,\r\n ComponentType.splineRange,\r\n ComponentType.horizontalRangeBar,\r\n ComponentType.doughnut,\r\n ComponentType.pie,\r\n ComponentType.dialGauge,\r\n ComponentType.linearGauge,\r\n ComponentType.chartWithRange,\r\n ComponentType.processControl,\r\n ComponentType.pyramid,\r\n ComponentType.funnel,\r\n ComponentType.pieSemiCircle\r\n ]\r\n .map(v => ComponentType.getValue(v))\r\n .searchTree(ei => ei.id);\r\n}\r\n\r\nexport let componentDescriptorFactory: ComponentDescriptorFactory = new ComponentDescriptorFactory();\r\n","import constants from '@Common/Core/Constant';\r\nimport Guid from '@Common/Core/Guid';\r\nimport { EntityFilter } from '@Common/Core/InstanceFactory/Instances.Correcter';\r\nimport { properties } from '@Common/Core/Properties';\r\nimport { dimensionFilterValue, filterValue } from '@Common/Entities/FilterEntities';\r\nimport { EnumValue, FilterType, TypeKind } from '@Common/Enums';\r\nimport { DataTimeIntervalHelper } from '@Common/Helpers/DataTimeIntervalHelper';\r\nimport documentHelper from '@Common/Helpers/DocumentHelper';\r\n\r\nimport timeHelper from '@Common/Helpers/TimeHelper';\r\nimport { DimensionFilter, DimensionFilterValues, GroupFilter, Process, ProcessConfiguration, RecordData, RecordSeries } from '@InstanceFactory';\r\nimport { Base } from '@View/Components/Base';\r\nimport { processChartsHelper } from '@View/Helpers/Charts/ProcessChartsHelper';\r\n\r\nexport namespace filterHelper {\r\n export function getGroupName(groupName: string, viewId: Guid, projectId: Guid): string {\r\n if (isCurrentGroup(groupName, projectId)) {\r\n return groupName + viewId;\r\n }\r\n return groupName;\r\n }\r\n\r\n export function getLocalGroupsName(viewId: string): string {\r\n return constants.currentViewsGroupId + viewId;\r\n }\r\n\r\n export function getFilterGroup(group: string, parentId?: string, projectId?: Guid): FilterGroup {\r\n return new FilterGroup(group, getGroupName(group, parentId, projectId));\r\n }\r\n\r\n export function getAffectedDriverGroups(affectedDriverGroups: FilterGroup[], parentIds: string[], projectId: Guid): FilterGroup[] {\r\n const resultGroups = affectedDriverGroups.slice();\r\n const currentViewGroups = _.filter(affectedDriverGroups, item => isCurrentGroup(item.groupName, projectId));\r\n for (const parentId of parentIds) {\r\n for (const currentViewGroup of currentViewGroups) {\r\n const filterGroup = getFilterGroup(currentViewGroup.groupName, parentId, projectId);\r\n resultGroups.push(filterGroup);\r\n }\r\n }\r\n return _.uniqBy(resultGroups, g => g.groupName + '|' + g.groupValue);\r\n }\r\n\r\n export function isCurrentGroup(groupName: string, projectId: Guid): boolean {\r\n if (groupName == null) {\r\n return false;\r\n }\r\n const { isLocal } = _.find(documentHelper.getAllDriverGroups(projectId), { name: groupName }) || {\r\n isLocal: isLocalGroupName(groupName)\r\n };\r\n return isLocal;\r\n }\r\n\r\n function isLocalGroupName(groupName: string): boolean {\r\n const isCurrentView = groupName.indexOf(constants.currentViewGroupName) !== -1;\r\n const endWithGuid = Guid.isGuid(groupName.slice(-Guid.empty.length));\r\n return !(properties.isPrint && endWithGuid) && isCurrentView;\r\n }\r\n\r\n export function mergeGroupFiltersList(groupsFilters1: GroupFilter[], groupsFilters2: GroupFilter[]): GroupFilter[] {\r\n for (const filter2 of groupsFilters2) {\r\n const filter1 = _.find(groupsFilters1, item => item.groupName === filter2.groupName);\r\n if (filter1) {\r\n groupsFilters1.remove(filter1);\r\n groupsFilters1.push(mergeGroupFilters(filter1, filter2));\r\n } else {\r\n groupsFilters1.push(filter2);\r\n }\r\n }\r\n return groupsFilters1;\r\n }\r\n\r\n export function mergeGroupFilters(groupFilter1: GroupFilter, groupFilter2: GroupFilter): GroupFilter {\r\n const groupName = groupFilter1.groupName || groupFilter2.groupName;\r\n const dimensionValues = mergeFilters(groupFilter1.dimensionValues, groupFilter2.dimensionValues);\r\n const entityFilter = mergeEntityFilters(groupFilter1.entityFilter, groupFilter2.entityFilter);\r\n const parameterValues = mergeFilters(groupFilter1.parameterValues, groupFilter2.parameterValues);\r\n const processFilters = mergeProcessFilters(groupFilter1.processFilters, groupFilter2.processFilters);\r\n const dimensionConditions = mergeFilters(groupFilter1.dimensionConditions, groupFilter2.dimensionConditions);\r\n const recordsData = mergeRecordsData(groupFilter1.recordsData, groupFilter2.recordsData);\r\n const dimensionAllValuesExcluded = mergeDimensionAllValuesExcluded(\r\n groupFilter1.dimensionAllValuesExcluded,\r\n groupFilter2.dimensionAllValuesExcluded\r\n );\r\n const seriesId = groupFilter1.seriesId || groupFilter2.seriesId;\r\n return groupFilter({\r\n groupName,\r\n dimensionValues,\r\n entityFilter,\r\n parameterValues,\r\n dimensionConditions,\r\n recordsData,\r\n seriesId,\r\n processFilters,\r\n dimensionAllValuesExcluded\r\n });\r\n }\r\n\r\n export function mergeDimensionAllValuesExcluded(dimensionAllValuesExcluded1: string[], dimensionAllValuesExcluded2: string[]): string[] {\r\n if (dimensionAllValuesExcluded1 == null && dimensionAllValuesExcluded2 == null) {\r\n return null;\r\n } else if (dimensionAllValuesExcluded1 == null) {\r\n return dimensionAllValuesExcluded2.slice();\r\n } else if (dimensionAllValuesExcluded2 == null) {\r\n return dimensionAllValuesExcluded1.slice();\r\n }\r\n const dimensionAllValuesExcluded = dimensionAllValuesExcluded1.slice();\r\n for (const dimension of dimensionAllValuesExcluded2) {\r\n if (!dimensionAllValuesExcluded.contains(dimension)) {\r\n dimensionAllValuesExcluded.push(dimension);\r\n }\r\n }\r\n\r\n return dimensionAllValuesExcluded;\r\n }\r\n\r\n export function mergeProcessFilters(newProcessFilters: any[], existingProcessFilters: any[]): any[] {\r\n if (newProcessFilters && newProcessFilters.length && newProcessFilters[0].id === constants.noFilterId) {\r\n return [];\r\n }\r\n return _.chain(newProcessFilters)\r\n .unionBy(existingProcessFilters, filter => filter.componentId)\r\n .filter(filter => filter)\r\n .value();\r\n }\r\n\r\n export function mergeEntityFilters(entityFilter1: EntityFilter, entityFilter2: EntityFilter): EntityFilter {\r\n let entityFilter: EntityFilter = entityFilter1 || entityFilter2 ? ({} as any) : null;\r\n if (entityFilter) {\r\n entityFilter.metricId =\r\n entityFilter2 && entityFilter2.metricId != null && entityFilter2.metricId !== constants.guidEmpty\r\n ? entityFilter2.metricId\r\n : entityFilter1\r\n ? entityFilter1.metricId\r\n : constants.guidEmpty;\r\n entityFilter.recordId =\r\n entityFilter2 && entityFilter2.recordId != null && entityFilter2.recordId !== constants.guidEmpty\r\n ? entityFilter2.recordId\r\n : entityFilter1\r\n ? entityFilter1.recordId\r\n : constants.guidEmpty;\r\n } else {\r\n entityFilter = {\r\n metricId: constants.guidEmpty,\r\n recordId: constants.guidEmpty\r\n };\r\n }\r\n return entityFilter;\r\n }\r\n\r\n export function mergeRecordsData(recordsData1: RecordData[], recordsData2: RecordData[]): RecordData[] {\r\n if (recordsData1 == null && recordsData2 == null) {\r\n return null;\r\n } else if (recordsData1 == null) {\r\n return recordsData2.slice();\r\n } else if (recordsData2 == null) {\r\n return recordsData1.slice();\r\n }\r\n return _.unionBy(recordsData1, recordsData2, rd => rd.recordId);\r\n }\r\n\r\n export function mergeFilters(filterValues1: DimensionFilterValues[], filterValues2: DimensionFilterValues[]): DimensionFilterValues[] {\r\n if (filterValues1 == null && filterValues2 == null) {\r\n return null;\r\n } else if (filterValues1 == null) {\r\n return filterValues2.slice();\r\n } else if (filterValues2 == null) {\r\n return filterValues1.slice();\r\n }\r\n const filterValues = filterValues1.slice();\r\n for (const filterValue2 of filterValues2) {\r\n const existedFilter = _.find(filterValues, item => item.id == filterValue2.id);\r\n if (existedFilter != null) {\r\n const filter = mergeDimensionFilterValues(existedFilter, filterValue2);\r\n filterValues.splice($.inArray(existedFilter, filterValues), 1);\r\n filterValues.push(filter);\r\n } else {\r\n filterValues.push(filterValue2);\r\n }\r\n }\r\n\r\n return filterValues;\r\n }\r\n\r\n export function mergeDimensionFilterValues(filterValue1: DimensionFilterValues, filterValue2: DimensionFilterValues): DimensionFilterValues {\r\n let values;\r\n const canMerge =\r\n _.includes([FilterType.whereNotIn, FilterType.whereIn], filterValue1.filterType) ||\r\n _.includes([FilterType.whereNotIn, FilterType.whereIn], filterValue2.filterType);\r\n if (!canMerge) {\r\n return filterValue1;\r\n }\r\n if (filterValue1.filterType === FilterType.whereNotIn && filterValue2.filterType === FilterType.whereNotIn) {\r\n const union = _.unionBy(filterValue2.values, filterValue1.values, value => value.id);\r\n values = _.map(union, value => filterValue(value.id, value.value));\r\n } else if (filterValue1.filterType === FilterType.whereNotIn || filterValue2.filterType === FilterType.whereNotIn) {\r\n const firstFilterValue = filterValue1.filterType === FilterType.whereNotIn ? filterValue2 : filterValue1;\r\n const secondFilterValue = filterValue1.filterType === FilterType.whereNotIn ? filterValue1 : filterValue2;\r\n\r\n const difference = _.differenceBy(firstFilterValue.values, secondFilterValue.values, value => value.id);\r\n values = _.map(difference, value => filterValue(value.id, value.value));\r\n } else {\r\n if (timeHelper.isTimeDrillDown(filterValue1.id) || filterValue1.id === constants.dateTimeFilterName) {\r\n const interval1 = timeHelper.unionIntervals(_.map(filterValue1.values, value => DataTimeIntervalHelper.parse(value.id)));\r\n const interval2 = timeHelper.unionIntervals(_.map(filterValue2.values, value => DataTimeIntervalHelper.parse(value.id)));\r\n const timeIntervals = [];\r\n if (interval1) {\r\n timeIntervals.push(interval1);\r\n }\r\n if (interval2) {\r\n timeIntervals.push(interval2);\r\n }\r\n const resultInterval = timeHelper.intersectIntervals(timeIntervals);\r\n values = resultInterval ? [filterValue(DataTimeIntervalHelper.toString(resultInterval))] : filterValue1.values;\r\n } else {\r\n const intersection = _.intersectionBy(filterValue2.values, filterValue1.values, value => value.id);\r\n values = _.map(intersection, value => filterValue(value.id, value.value));\r\n }\r\n }\r\n\r\n const filterType =\r\n filterValue1.filterType === FilterType.whereIn || filterValue2.filterType === FilterType.whereIn\r\n ? FilterType.whereIn\r\n : FilterType.whereNotIn;\r\n\r\n return dimensionFilterValue(filterValue1.id, values, filterType);\r\n }\r\n\r\n export function isDriverGroup(component: Base, groups: string[]): boolean {\r\n const parentIds = component.getParentIds();\r\n return (\r\n groups == null ||\r\n groups.length === 0 ||\r\n (groups.length === 1 && !groups[0]) ||\r\n _.includes(groups, component.getOutgoingGroupName()) ||\r\n _.some(parentIds, parentId => _.includes(groups, filterHelper.getLocalGroupsName(parentId)))\r\n );\r\n }\r\n\r\n export function processFilterToDimensionFilter(\r\n processFilters: (ProcessConfiguration & { id?: string })[],\r\n projectId: Guid\r\n ): DimensionFilterValues[] {\r\n return _(processFilters)\r\n .filter(value => value.id !== constants.noFilterId)\r\n .map(value => {\r\n let pathFilterValue;\r\n const process = documentHelper.getProcess(projectId, value.process);\r\n\r\n if (value.selectionOptions.subPath) {\r\n pathFilterValue = filterValue(\r\n value.process.id,\r\n value.process.name + '; ' + processSubPathToString(value.selectionOptions.subPath, process.originalProcess)\r\n );\r\n } else if (value.selectionOptions.paths) {\r\n pathFilterValue = filterValue(\r\n value.process.id,\r\n value.process.name +\r\n '; ' +\r\n _.map(value.selectionOptions.paths as any, (path: number[]) =>\r\n processSubPathToString(path, process.originalProcess)\r\n ).join(', ')\r\n );\r\n } else if (value.selectionOptions.step != null || value.selectionOptions.transition) {\r\n const stepIndex =\r\n value.selectionOptions.step != null\r\n ? value.selectionOptions.step\r\n : value.selectionOptions.transition.from != null\r\n ? value.selectionOptions.transition.from\r\n : value.selectionOptions.transition.to;\r\n const filterString =\r\n value.selectionOptions.step != null\r\n ? strings.globalFilters.processFilterQueued\r\n : value.selectionOptions.transition.from != null\r\n ? strings.globalFilters.processFilterOutcoming\r\n : strings.globalFilters.processFilterIncoming;\r\n const step = _.find(process.originalProcess.steps, s => s.number === stepIndex) || {\r\n title: stepIndex\r\n };\r\n const stepName = processChartsHelper.getStepTitle(step as any);\r\n pathFilterValue = filterValue(value.process.id, value.process.name + '; ' + filterString.format(stepName));\r\n } else {\r\n // Default\r\n pathFilterValue = filterValue(value.process.id);\r\n }\r\n\r\n return dimensionFilterValue(constants.processPathFilterName, [pathFilterValue]);\r\n })\r\n .value();\r\n }\r\n\r\n export function processSubPathToString(subPath: number[], process: Process): string {\r\n return _.map(subPath, index => `${processChartsHelper.getStepNameByIndex(index, process)}`).join('—');\r\n }\r\n\r\n export function dimensionFilterToString(dimensionFilter: DimensionFilter): string {\r\n return _(dimensionFilter.dimensionValues)\r\n .filter(filter => !timeHelper.isTimeDrillDown(filter.id) && filter.id !== constants.dateTimeFilterName)\r\n .map(filter => {\r\n const filterTypeId = filter.filterType ? filter.filterType : FilterType.whereIn;\r\n const filterType = FilterType.getValue(filterTypeId);\r\n const values = _.map(filter.values, value => value.value).join(', ');\r\n return `\"${filter.id}\" ${filterType.name} (${values})`;\r\n })\r\n .join('; ');\r\n }\r\n\r\n export function seriesFilterToString(series: RecordSeries[]): string {\r\n return series\r\n .filter(s => {\r\n const filterItem = s.dataDefinition.filterItem;\r\n return filterItem && filterItem.operatorType !== FilterType.unknown && _.size(filterItem.values) > 0;\r\n })\r\n .map(s => {\r\n const filterItem = s.dataDefinition.filterItem;\r\n const operatorName = FilterType.getValue(filterItem.operatorType);\r\n return '{0} {1} {2}'.format(s.fieldPath, operatorName.name, filterItem.values.join(','));\r\n })\r\n .join('; ');\r\n }\r\n\r\n export function getFilterTypes(typeKind: TypeKind, emptyItem?: boolean): EnumValue[] {\r\n const filterTypes = [...(getFilterTypesInner(typeKind) || []), FilterType.isNull, FilterType.isNotNull];\r\n\r\n if (emptyItem) {\r\n filterTypes.unshift(FilterType.unknown);\r\n }\r\n\r\n return _.cloneDeep(FilterType.getValues(...filterTypes));\r\n }\r\n\r\n function getFilterTypesInner(typeKind: TypeKind): FilterType[] {\r\n switch (typeKind) {\r\n case TypeKind.string:\r\n case TypeKind.text:\r\n return [\r\n FilterType.starts,\r\n FilterType.ends,\r\n FilterType.equal,\r\n FilterType.notEqual,\r\n FilterType.includes,\r\n FilterType.like,\r\n FilterType.whereIn,\r\n FilterType.whereNotIn\r\n ];\r\n case TypeKind.dateTime:\r\n return [\r\n FilterType.equal,\r\n FilterType.less,\r\n FilterType.lessOrEqual,\r\n FilterType.greater,\r\n FilterType.greaterOrEqual,\r\n FilterType.range,\r\n FilterType.between\r\n ];\r\n case TypeKind.float:\r\n case TypeKind.int:\r\n return [\r\n FilterType.equal,\r\n FilterType.notEqual,\r\n FilterType.less,\r\n FilterType.lessOrEqual,\r\n FilterType.greater,\r\n FilterType.greaterOrEqual,\r\n FilterType.between\r\n ];\r\n case TypeKind.bool:\r\n case TypeKind.guid:\r\n return [FilterType.equal, FilterType.notEqual];\r\n }\r\n }\r\n}\r\n\r\nexport class FilterGroup {\r\n constructor(public readonly groupName: string, public readonly groupValue: string = groupName) {}\r\n}\r\n\r\nexport function groupFilter({\r\n groupName = '',\r\n dimensionValues = [],\r\n entityFilter = {},\r\n parameterValues = [],\r\n dimensionConditions,\r\n recordsData = [],\r\n seriesId,\r\n processFilters = [],\r\n dimensionAllValuesExcluded = []\r\n}: Partial = {}): GroupFilter {\r\n return {\r\n groupName: groupName == null ? '' : groupName,\r\n dimensionValues: dimensionValues == null ? [] : dimensionValues,\r\n dimensionAllValuesExcluded: dimensionAllValuesExcluded == null ? [] : dimensionAllValuesExcluded,\r\n entityFilter: entityFilter == null ? {} : entityFilter,\r\n parameterValues: parameterValues == null ? [] : parameterValues,\r\n dimensionConditions: dimensionConditions,\r\n recordsData: recordsData == null ? [] : recordsData,\r\n processFilters: processFilters == null ? [] : processFilters,\r\n seriesId: seriesId\r\n } as any;\r\n}\r\n","import Application from '@Common/ApplicationCore/Application';\r\nimport { Dialog, IControl, IDialog, Input, LayoutBuilder } from '@Common/Controls';\r\nimport { DataServiceProvider } from '@Common/Core/DataServiceProvider';\r\nimport { asyncUI } from '@Common/Core/Decorators';\r\nimport { MessageBox } from '@Common/Dialogs/MessageBox';\r\nimport { InsightExceptionType } from '@Common/Enums/Enum';\r\n\r\nconst resources = strings.loginControl;\r\n\r\nexport class ChangePasswordDialog {\r\n private dialog: IDialog;\r\n private layout: IControl;\r\n\r\n private oldPassword: Input;\r\n private newPassword: Input;\r\n private confirmPassword: Input;\r\n\r\n private enforcedPolicy: boolean = !Application.current.model.user.enforcePasswordPolicy;\r\n private oldPasswordWrong = false;\r\n\r\n constructor(private dataServiceProvider: DataServiceProvider) {\r\n this.dialog = Dialog({\r\n className: 'wizard',\r\n title: resources.changePasswordTitle,\r\n width: 300,\r\n height: 440,\r\n hideCancel: false,\r\n closeByEnter: false\r\n });\r\n this.createLayout();\r\n this.dialog.ok(() => {\r\n this.onChangePassword();\r\n return true;\r\n });\r\n this.dialog.setOkButtonState(false);\r\n }\r\n\r\n public open(): void {\r\n this.dialog.wrap(this.layout);\r\n this.validate();\r\n }\r\n\r\n private createLayout(): void {\r\n this.oldPassword = new Input({ width: '100%' });\r\n this.oldPassword.getControl().attr('type', 'password');\r\n this.oldPassword.onChange(() => {\r\n this.oldPasswordWrong = false;\r\n this.validate();\r\n });\r\n\r\n this.newPassword = new Input({ width: '100%' });\r\n this.newPassword.getControl().attr('type', 'password');\r\n\r\n this.confirmPassword = new Input({ width: '100%' });\r\n this.confirmPassword.getControl().attr('type', 'password');\r\n this.confirmPassword.onChange(() => this.validate());\r\n\r\n const loginInput = new Input({ width: '100%', canEdit: false });\r\n loginInput.setValue(altosoft.model.user.parameters.Login);\r\n loginInput.setState(false);\r\n\r\n const b = new LayoutBuilder(false);\r\n b.addControl(resources.usernameTitle, loginInput);\r\n b.addControl(resources.passwordTitle, this.oldPassword);\r\n b.addControl(resources.newPasswordTitle, this.newPassword);\r\n b.addControl(resources.confirmPasswordTitle, this.confirmPassword);\r\n\r\n this.layout = b.createLayout();\r\n\r\n if (!this.enforcedPolicy) {\r\n this.newPassword.getControl().pStrength({\r\n changeBackground: false,\r\n onPasswordStrengthChanged: () => {\r\n this.enforcedPolicy = false;\r\n this.validate();\r\n },\r\n onValidatePassword: () => {\r\n this.enforcedPolicy = true;\r\n this.validate();\r\n }\r\n });\r\n } else {\r\n this.newPassword.onChange(() => this.validate());\r\n }\r\n }\r\n\r\n private validate(): void {\r\n let valid = true;\r\n if (this.oldPassword.getValue() === '') {\r\n this.oldPassword.setError(resources.passwordIsEmpty);\r\n valid = false;\r\n } else if (this.oldPasswordWrong) {\r\n this.oldPassword.setError(resources.wrongPassword);\r\n valid = false;\r\n } else {\r\n this.oldPassword.removeError();\r\n }\r\n\r\n if (this.newPassword.getValue() === '') {\r\n this.newPassword.setError(resources.newPasswordIsEmpty);\r\n valid = false;\r\n } else if (!this.enforcedPolicy) {\r\n this.newPassword.setError(resources.pStrength);\r\n valid = false;\r\n } else if (this.newPassword.getValue() === this.oldPassword.getValue()) {\r\n this.newPassword.setError(resources.passwordMustDiffer);\r\n valid = false;\r\n } else {\r\n this.newPassword.removeError();\r\n }\r\n\r\n if (this.newPassword.getValue() !== this.confirmPassword.getValue()) {\r\n this.confirmPassword.setError(resources.confirmMustMatch);\r\n valid = false;\r\n } else {\r\n this.confirmPassword.removeError();\r\n }\r\n\r\n this.dialog.setOkButtonState(valid);\r\n }\r\n\r\n @asyncUI('dialog', { setting: { loadingTimeout: 0, message: resources.changingPassword } })\r\n public async onChangePassword(): Promise {\r\n try {\r\n await this.dataServiceProvider.changePassword(this.oldPassword.getValue(), this.newPassword.getValue());\r\n this.dialog.close();\r\n const { passwordChanged: text, changePasswordTitle: dialogTitle } = resources;\r\n const messageBox = new MessageBox({ text, dialogTitle });\r\n messageBox.show();\r\n } catch (errorType) {\r\n this.oldPasswordWrong = errorType === InsightExceptionType.wrongPassword;\r\n this.validate();\r\n }\r\n }\r\n}\r\n","export class ComponentChangeGroup {\r\n public static changeGroupCommon = 'commonChangeGroup';\r\n public static polarGroup = 'polarChangeGroup';\r\n public static stickGroup = 'stickChangeGroup';\r\n}\r\n","import AppHelper from '@Common/ApplicationCore/AppHelper';\r\nimport constants from '@Common/Core/Constant';\r\nimport { findPropertyById } from '@Common/Enums';\r\nimport { LaneCaptionType, ProcessChartLayout, TimeType, TransitionOrientation, TransitionTimeData, TrellisMetricType } from '@Common/Enums/Enum';\r\nimport documentHelper from '@Common/Helpers/DocumentHelper';\r\nimport {\r\n ComponentCoordinates,\r\n GeometryPoint,\r\n Process,\r\n ProcessChartAppearance,\r\n ProcessFilterDefinition,\r\n ProcessPath,\r\n ProcessSelectionOptions,\r\n ProcessStep,\r\n ProcessStepTransition,\r\n ProcessTransition,\r\n ProcessTransitionData,\r\n SubProcess,\r\n SwimlaneChartAppearance,\r\n SwimlaneGroup\r\n} from '@InstanceFactory';\r\nimport formatHelper, { IFormat } from '@Common/Helpers/FormatHelper';\r\n\r\nexport namespace processChartsHelper {\r\n /*\r\n * Formatting\r\n */\r\n\r\n export function formatTransitionLabel(\r\n transitionData: ProcessTransition | ProcessTransitionData | ProcessPath,\r\n chartAppearance: ProcessChartAppearance | SwimlaneChartAppearance\r\n ): { firstLine: string; secondLine?: string } {\r\n let timeText = null;\r\n\r\n if (chartAppearance.transitionTimeData !== TransitionTimeData.none) {\r\n const currentValue = getDataByType(transitionData, chartAppearance.transitionTimeData);\r\n\r\n if (currentValue != null) {\r\n timeText = formatTimeSpanByType(currentValue, chartAppearance.timeType);\r\n }\r\n }\r\n\r\n if (isSwimlaneAppearance(chartAppearance)) {\r\n return {\r\n firstLine: timeText\r\n };\r\n } else {\r\n const returnText = {\r\n firstLine: null,\r\n secondLine: null\r\n };\r\n\r\n if (!chartAppearance.showTransitionLabels && !chartAppearance.displayMetricValues) {\r\n returnText.firstLine = '';\r\n } else if (!transitionData) {\r\n returnText.firstLine = '0';\r\n } else {\r\n if (isTransitionData(transitionData)) {\r\n if (chartAppearance.displayMetricValues) {\r\n returnText.firstLine = formatHelper.formatNumberByFormatName(transitionData.metricValue, chartAppearance.countFormatName);\r\n } else {\r\n returnText.firstLine = formatHelper.formatNumberByFormatName(transitionData.count, constants.numberNoDecimalFormatName);\r\n }\r\n }\r\n\r\n if (timeText) {\r\n returnText.secondLine = '({0})'.format(timeText);\r\n }\r\n }\r\n\r\n return returnText;\r\n }\r\n }\r\n\r\n export function formatTooltip(\r\n transitionData: ProcessTransitionData | ProcessPath,\r\n chartAppearance: ProcessChartAppearance | SwimlaneChartAppearance\r\n ): string {\r\n let returnText = '';\r\n\r\n if (transitionData) {\r\n returnText += `${(transitionData as any).fromStepTitle || ''} → ${(transitionData as any).toStepTitle || ''}
    `;\r\n\r\n if (isTransitionData(transitionData)) {\r\n returnText += transitionData ? formatHelper.formatNumberByFormatName(transitionData.count, chartAppearance.countFormatName) : '0';\r\n }\r\n\r\n const tooltipItems = isSwimlaneAppearance(chartAppearance) ? chartAppearance.tooltipTimeData : chartAppearance.tooltipTimeDataItems;\r\n\r\n if (transitionData && transitionData.timeStatistics) {\r\n _(tooltipItems)\r\n .uniq()\r\n .forEach((value: TransitionTimeData, index) => {\r\n if (value !== TransitionTimeData.none) {\r\n const tooltipData = getDataByType(transitionData, value);\r\n\r\n if (tooltipData != null) {\r\n returnText +=\r\n (returnText.length ? '
    ' : '') +\r\n '{0}: {1}'.format(TransitionTimeData.getName(value), formatTimeSpanByType(tooltipData, chartAppearance.timeType));\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n return returnText;\r\n }\r\n\r\n export function formatStepTooltip(data: IStepTooltipData): string {\r\n const format = formatHelper.getFormat(constants.numberNoDecimalFormatName);\r\n\r\n return strings.processChartsHelper.stepTooltipFormat.format(\r\n data.title,\r\n formatHelper.formatNumberByFormat(data.instancesCount, format),\r\n formatHelper.formatNumberByFormat(data.startedFromCount, format),\r\n formatHelper.formatNumberByFormat(data.incomingCount, format),\r\n formatHelper.formatNumberByFormat(data.outgoingCount, format)\r\n );\r\n }\r\n\r\n export function formatLaneCaption(pathData: ProcessPath, captionType: LaneCaptionType, format: IFormat): string {\r\n let value = '';\r\n\r\n switch (captionType) {\r\n case LaneCaptionType.max:\r\n value = formatTimeValue(pathData.timeStatistics.maxTime);\r\n break;\r\n case LaneCaptionType.min:\r\n value = formatTimeValue(pathData.timeStatistics.minTime);\r\n break;\r\n case LaneCaptionType.average:\r\n value = formatTimeValue(pathData.timeStatistics.averageTime);\r\n break;\r\n case LaneCaptionType.cost:\r\n value = formatHelper.formatNumberByFormat(pathData.cost * pathData.instancesCount, format);\r\n break;\r\n case LaneCaptionType.deviation:\r\n value = formatTimeValue(pathData.timeStatistics.stdDevTime);\r\n break;\r\n case LaneCaptionType.median:\r\n value = formatTimeValue(pathData.timeStatistics.medianTime);\r\n break;\r\n case LaneCaptionType.percentile75:\r\n value = formatTimeValue(pathData.timeStatistics.percentile75Time);\r\n break;\r\n case LaneCaptionType.percentile90:\r\n value = formatTimeValue(pathData.timeStatistics.percentile90Time);\r\n break;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n export function getDataByType(transitionData: ProcessTransition | ProcessTransitionData | ProcessPath, timeData: TransitionTimeData): any {\r\n if (transitionData) {\r\n switch (timeData) {\r\n case TransitionTimeData.average:\r\n return transitionData.timeStatistics.averageTime;\r\n case TransitionTimeData.deviation:\r\n return transitionData.timeStatistics.stdDevTime;\r\n case TransitionTimeData.median:\r\n return transitionData.timeStatistics.medianTime;\r\n case TransitionTimeData.percentile75:\r\n return transitionData.timeStatistics.percentile75Time;\r\n case TransitionTimeData.percentile90:\r\n return transitionData.timeStatistics.percentile90Time;\r\n case TransitionTimeData.none:\r\n if (isTransitionData(transitionData)) {\r\n return transitionData.count;\r\n } else {\r\n return null;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n export function getMetricDataByType(transitionData: ProcessTransitionData, timeData: TrellisMetricType): number {\r\n switch (timeData) {\r\n case TrellisMetricType.average:\r\n return transitionData.timeStatistics.averageTime / 1000;\r\n case TrellisMetricType.deviation:\r\n return transitionData.timeStatistics.stdDevTime / 1000;\r\n case TrellisMetricType.median:\r\n return transitionData.timeStatistics.medianTime / 1000;\r\n case TrellisMetricType.percentile75:\r\n return transitionData.timeStatistics.percentile75Time / 1000;\r\n case TrellisMetricType.percentile90:\r\n return transitionData.timeStatistics.percentile90Time / 1000;\r\n case TrellisMetricType.max:\r\n return transitionData.timeStatistics.maxTime / 1000;\r\n case TrellisMetricType.min:\r\n return transitionData.timeStatistics.minTime / 1000;\r\n case TrellisMetricType.metric:\r\n if (isTransitionData(transitionData)) {\r\n return transitionData.metricValue;\r\n } else {\r\n return null;\r\n }\r\n case TrellisMetricType.count:\r\n if (isTransitionData(transitionData)) {\r\n return transitionData.count;\r\n } else {\r\n return null;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n export function formatTimeSpanByType(value: number, timeType: TimeType): string {\r\n if (timeType === TimeType.timestamp) {\r\n return formatTimeValue(value);\r\n } else {\r\n const type = findPropertyById(processTimeTypes, timeType);\r\n return formatHelper.formatValueByDefault(value / type.value) + _.toLower(type.text[0]);\r\n }\r\n }\r\n\r\n export function formatTimeValue(value: number): string {\r\n const format = value >= processTimeTypes.days.value ? constants.dayTimeSpanFormat : constants.defaultTimeSpanFormat;\r\n\r\n return formatHelper.formatMilliseconds(value, format);\r\n }\r\n\r\n /*\r\n * Swimlane\r\n */\r\n\r\n export function isMinTransition(\r\n pathData: ProcessTransition | ProcessPath,\r\n transitions: (ProcessTransition | ProcessPath)[],\r\n timeData: TransitionTimeData\r\n ): boolean {\r\n const min = _.minBy(transitions, data => getDataByType(data, timeData));\r\n return pathData === min;\r\n }\r\n\r\n export function isMaxTransition(\r\n pathData: ProcessTransition | ProcessPath,\r\n transitions: (ProcessTransition | ProcessPath)[],\r\n timeData: TransitionTimeData\r\n ): boolean {\r\n const max = _.maxBy(transitions, data => getDataByType(data, timeData));\r\n return pathData === max;\r\n }\r\n\r\n /*\r\n * Steps utils\r\n */\r\n\r\n export function getStepFromSelection(processSelectionOptions: Partial): number {\r\n if (processSelectionOptions.step !== undefined) {\r\n return processSelectionOptions.step;\r\n }\r\n if (processSelectionOptions.transition) {\r\n if (processSelectionOptions.transition.from === null) {\r\n return processSelectionOptions.transition.to;\r\n } else if (processSelectionOptions.transition.to === null) {\r\n return processSelectionOptions.transition.from;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n export function getStepByIndex(index: number, process: Process): ProcessStep {\r\n if (process && process.steps && process.steps.length) {\r\n return process.steps.find(step => step.number === index);\r\n }\r\n return null;\r\n }\r\n\r\n export function getStepNameByIndex(index: number, process: Process): string {\r\n const step = getStepByIndex(index, process);\r\n if (step) {\r\n return getStepTitle(step);\r\n }\r\n return '';\r\n }\r\n\r\n export function getStepTitle(stepData: ProcessStep): string {\r\n if (stepData.localizedTitle) {\r\n return stepData.localizedTitle;\r\n }\r\n if (stepData.title) {\r\n return stepData.title;\r\n }\r\n if (stepData.fieldId && stepData.fieldValue) {\r\n return stepData.fieldDisplayValue ? stepData.fieldDisplayValue : stepData.fieldValue;\r\n }\r\n if (stepData.record != null) {\r\n return stepData.record.name;\r\n }\r\n return strings.processDialog.newStep;\r\n }\r\n\r\n export function getNewStepNumber(process: Process): number {\r\n return (\r\n _(process.steps)\r\n .map(step => step.number - (step.number % 10) + 10)\r\n .max() || 0\r\n );\r\n }\r\n\r\n export function isAsyncStep(index: number, process: Process): boolean {\r\n const step = getStepByIndex(index, process);\r\n return step.isAsynchronous;\r\n }\r\n\r\n /*\r\n * Subprocesses\r\n */\r\n\r\n export function getParentSubProcess(process: Process, stepData: ProcessStep): SubProcess {\r\n return _.find(process.subProcesses, sp => sp.steps.contains(stepData.number));\r\n }\r\n\r\n export function isSubProcessStep(stepData: ProcessStep): boolean {\r\n return stepData && stepData.subProcessId && stepData.subProcessId !== constants.guidEmpty;\r\n }\r\n\r\n export function getSubProcessNameById(id: Guid, process: Process): string {\r\n if (process && process.subProcesses) {\r\n return (_.find(process.subProcesses, sp => sp.id === id) || { name: id }).name;\r\n }\r\n return '';\r\n }\r\n\r\n export function getSubProcess(process: Process, subProcessId: string): SubProcess {\r\n return _.find(process.subProcesses, sp => sp.id === subProcessId);\r\n }\r\n\r\n export function getSubProcessIncomingTransitions(process: Process, subProcess: SubProcess): ProcessStepTransition[] {\r\n return _.filter(\r\n process.transitions,\r\n transition => !subProcess.steps.contains(transition.sourceNumber) && subProcess.steps.contains(transition.sinkNumber)\r\n );\r\n }\r\n\r\n export function getSubProcessOutgoingTransitions(process: Process, subProcess: SubProcess): ProcessStepTransition[] {\r\n return _.filter(\r\n process.transitions,\r\n transition => subProcess.steps.contains(transition.sourceNumber) && !subProcess.steps.contains(transition.sinkNumber)\r\n );\r\n }\r\n\r\n export function getTransitionForSubStep(preparedProcess: Process, subProcess: SubProcess, startStep: ProcessStep): ProcessStepTransition {\r\n const transitionOutgoing = getSubProcessOutgoingTransitions(preparedProcess, subProcess)[0];\r\n const stepOutgoing = transitionOutgoing && getStepByIndex(transitionOutgoing.sinkNumber, preparedProcess);\r\n\r\n if (stepOutgoing) {\r\n const detectedSides = getNearestSidesOfRectangles(startStep.coordinates, stepOutgoing.coordinates);\r\n\r\n return {\r\n sourceNumber: startStep.number,\r\n sourceOrientation: detectedSides.sourceOrientation,\r\n sinkNumber: transitionOutgoing.sinkNumber,\r\n sinkOrientation: detectedSides.sinkOrientation,\r\n tolerance: null\r\n };\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n export function prepareSubProcess(process: Process, subProcessId: string, rootProcesses?: string[]): Process {\r\n let preparedProcess = Process.create();\r\n let subProcessTransitions;\r\n preparedProcess.name = process.name;\r\n preparedProcess.id = process.id;\r\n preparedProcess.steps = process.steps;\r\n preparedProcess.transitions = process.transitions;\r\n\r\n if (subProcessId == null) {\r\n subProcessId = constants.guidEmpty;\r\n }\r\n\r\n if (subProcessId !== constants.guidEmpty) {\r\n const subProcess = getSubProcess(process, subProcessId);\r\n\r\n if (subProcess) {\r\n const stepsEnumerable = _(preparedProcess.steps).filter(step => subProcess.steps.contains(step.number));\r\n const minX = stepsEnumerable.minBy(step => step.coordinates.x1).coordinates.x1;\r\n const minY = stepsEnumerable.minBy(step => step.coordinates.y1).coordinates.y1;\r\n const gridSize = AppHelper.cookieStudioSettings().gridSize * 5;\r\n\r\n preparedProcess.steps = stepsEnumerable\r\n .map(step =>\r\n $.extend({}, step, {\r\n coordinates: {\r\n x1: step.coordinates.x1 - minX + gridSize,\r\n y1: step.coordinates.y1 - minY + gridSize,\r\n x2: step.coordinates.x2 - minX + gridSize,\r\n y2: step.coordinates.y2 - minY + gridSize\r\n }\r\n })\r\n )\r\n .value();\r\n\r\n subProcessTransitions = stepsEnumerable\r\n .filter(step => step.subProcessId != null)\r\n .map(step => {\r\n const sp = getSubProcess(process, step.subProcessId);\r\n\r\n return getTransitionForSubStep(preparedProcess, sp, step);\r\n })\r\n .compact()\r\n .value();\r\n\r\n preparedProcess.transitions = _.chain(preparedProcess.transitions)\r\n .filter(transition => subProcess.steps.contains(transition.sourceNumber) && subProcess.steps.contains(transition.sinkNumber))\r\n .union(subProcessTransitions)\r\n .value();\r\n }\r\n } else {\r\n if (process.subProcesses.length) {\r\n preparedProcess.subProcesses = process.subProcesses;\r\n\r\n _.forEach(process.subProcesses, sp => {\r\n if (rootProcesses == null || !rootProcesses.contains(sp.id)) {\r\n preparedProcess.steps = _.filter(preparedProcess.steps, step => !sp.steps.contains(step.number));\r\n\r\n subProcessTransitions = _.chain(preparedProcess.steps)\r\n .filter(step => step.subProcessId === sp.id)\r\n .map(step => getTransitionForSubStep(preparedProcess, sp, step))\r\n .compact()\r\n .value();\r\n\r\n preparedProcess.transitions = _.chain(preparedProcess.transitions)\r\n .filter(transition => !sp.steps.contains(transition.sourceNumber) && !sp.steps.contains(transition.sinkNumber))\r\n .union(subProcessTransitions ? subProcessTransitions : null)\r\n .value();\r\n }\r\n });\r\n } else {\r\n preparedProcess = process;\r\n }\r\n }\r\n\r\n return preparedProcess;\r\n }\r\n\r\n export function getNearestSidesOfRectangles(\r\n coordinatesSource: ComponentCoordinates,\r\n coordinatesSink: ComponentCoordinates\r\n ): Partial {\r\n return _.chain(TransitionOrientation.getValues())\r\n .flatMap(sideSource =>\r\n _.map(TransitionOrientation.getValues(), sideSink => ({\r\n sourceOrientation: sideSource.id,\r\n pointSource: getPointBySide(sideSource.id, coordinatesSource),\r\n sinkOrientation: sideSink.id,\r\n pointSink: getPointBySide(sideSink.id, coordinatesSink)\r\n }))\r\n )\r\n .filter(transition => transition.pointSource != null && transition.pointSink != null)\r\n .orderBy(transition => getDistanceBetweenPoints(transition.pointSource, transition.pointSink))\r\n .take()\r\n .value()[0];\r\n }\r\n\r\n export function getPointBySide(side: TransitionOrientation, coordinates: ComponentCoordinates): IPoint {\r\n switch (side) {\r\n case TransitionOrientation.top:\r\n return {\r\n x: coordinates.x1 + (coordinates.x2 - coordinates.x1) / 2,\r\n y: coordinates.y1\r\n };\r\n case TransitionOrientation.right:\r\n return {\r\n x: coordinates.x2,\r\n y: coordinates.y1 + (coordinates.y2 - coordinates.y1) / 2\r\n };\r\n case TransitionOrientation.bottom:\r\n return {\r\n x: coordinates.x1 + (coordinates.x2 - coordinates.x1) / 2,\r\n y: coordinates.y2\r\n };\r\n case TransitionOrientation.left:\r\n return {\r\n x: coordinates.x1,\r\n y: coordinates.y1 + (coordinates.y2 - coordinates.y1) / 2\r\n };\r\n default:\r\n return null;\r\n }\r\n }\r\n\r\n export function getDistanceBetweenPoints(pointSource: GeometryPoint, pointSink: GeometryPoint): number {\r\n return Math.sqrt((pointSink.x -= pointSource.x) * pointSink.x + (pointSink.y -= pointSource.y) * pointSink.y);\r\n }\r\n\r\n /*\r\n * Documents\r\n */\r\n\r\n export function getSwimlaneGroups(processId: Guid, projectId: Guid): SwimlaneGroup[] {\r\n return _.filter(\r\n documentHelper.getSwimlaneGroups(projectId),\r\n swimlaneGroup => swimlaneGroup.process && swimlaneGroup.process.id === processId\r\n );\r\n }\r\n\r\n export function getSwimlaneGroupsNames(processId: Guid, projectId: Guid): string[] {\r\n return _.map(getSwimlaneGroups(processId, projectId), group => group.name);\r\n }\r\n\r\n export function getProcessFilterDefinitions(processId: Guid, projectId: Guid): ProcessFilterDefinition[] {\r\n const allPFD = documentHelper.getProcessFilterDefinitions(projectId) || [];\r\n return allPFD.filter(pfd => pfd.process && pfd.process.id === processId);\r\n }\r\n\r\n export function setAutoLayoutForChart(appearance: ProcessChartAppearance, process: Process): void {\r\n appearance.autoLayout = process.isAutogenerated ? ProcessChartLayout.horizontal : ProcessChartLayout.none;\r\n }\r\n\r\n /*\r\n * Helper functions\r\n */\r\n\r\n function isTransitionData(object: ProcessTransition | ProcessTransitionData | ProcessPath): object is ProcessTransitionData {\r\n return (object as ProcessTransitionData).count !== undefined;\r\n }\r\n\r\n function isSwimlaneAppearance(object: ProcessChartAppearance | SwimlaneChartAppearance): object is SwimlaneChartAppearance {\r\n return (object as SwimlaneChartAppearance).tooltipTimeData !== undefined;\r\n }\r\n\r\n export const processTimeTypes = {\r\n days: { value: 86400000, text: strings.processChartsHelper.days, id: 'Days' },\r\n hours: { value: 3600000, text: strings.processChartsHelper.hours, id: 'Hours' },\r\n minutes: { value: 60000, text: strings.processChartsHelper.minutes, id: 'Minutes' },\r\n seconds: { value: 1000, text: strings.processChartsHelper.seconds, id: 'Seconds' }\r\n };\r\n\r\n export interface IStepTooltipData {\r\n title: string;\r\n instancesCount: number;\r\n startedFromCount: number;\r\n incomingCount: number;\r\n outgoingCount: number;\r\n }\r\n}\r\n","import instanceFactory from '@InstanceFactory';\r\nimport { ComponentType, EnumValue } from '@Common/Enums';\r\nimport { DriverDisplayMode, SingleSelectionMenuOrientation } from '@Common/Enums/Enum';\r\nimport { componentDescriptors } from '@View/Core/ComponentDescriptors/ComponentDescriptors';\r\n\r\nexport interface IComponentDescriptorHelper {\r\n getComponentDescriptor(componentType);\r\n\r\n getComponentDescriptorProperty(componentType: string, readProperty: (desc: any) => T, defaultValue?: T): T;\r\n\r\n getComponentDescriptorProperty(componentType: string, readPropertyPath: string, defaultValue?: T): T;\r\n\r\n getDimensionDescriptors(componentType): { id: string; title: string }[];\r\n\r\n getToolbarComponentDescriptors(componentGroup);\r\n\r\n createComponent(componentType);\r\n\r\n createAppearance(componentType);\r\n\r\n isHorisontalMenuStyledDriver(appearance);\r\n\r\n getComponentChangeTypes(componentType: string): EnumValue[];\r\n}\r\n\r\nexport interface IComponentDescriptor {\r\n componentType: string;\r\n componentGroup: string;\r\n componentInstanceType: string;\r\n toolBarIcon?: string;\r\n changableGroup?: string;\r\n componentDataDescriptor?: {\r\n dimensionDescriptors: any[];\r\n };\r\n}\r\n\r\nclass ComponentDescriptorHelper implements IComponentDescriptorHelper {\r\n componentDescriptors: { [key: string]: IComponentDescriptor };\r\n componentAppearances: { [key: string]: any };\r\n\r\n constructor() {\r\n this.componentDescriptors = {};\r\n Object.keys(componentDescriptors)\r\n .filter(descriptorTypeName => _.isFunction(componentDescriptors[descriptorTypeName]))\r\n .forEach(descriptorTypeName => {\r\n const descriptor = componentDescriptors[descriptorTypeName]();\r\n if (!descriptor.componentType) {\r\n throw 'Undefined componentType for descriptor ' + descriptorTypeName;\r\n }\r\n this.componentDescriptors[descriptor.componentType] = descriptor;\r\n });\r\n\r\n this.componentAppearances = Object.getOwnPropertyNames(instanceFactory)\r\n .map(typeName => instanceFactory[typeName])\r\n .filter(typeInst => typeInst.appearanceComponentType !== undefined)\r\n .searchTree(typeInst => typeInst.appearanceComponentType);\r\n }\r\n\r\n getComponentDescriptor(componentType) {\r\n const descriptor = this.componentDescriptors[componentType];\r\n if (descriptor !== undefined) {\r\n return descriptor;\r\n } else {\r\n throw 'Cannot find descriptor for ' + componentType;\r\n }\r\n }\r\n\r\n getComponentDescriptorProperty(componentType, readProperty, defaultValue) {\r\n const readPropertyImpl = typeof readProperty === 'string' ? desc => _.get(desc, readProperty) : readProperty;\r\n const descriptor = this.componentDescriptors[componentType];\r\n const property = descriptor && readPropertyImpl(descriptor);\r\n if (typeof descriptor === 'undefined' || typeof property === 'undefined') {\r\n return defaultValue;\r\n }\r\n return property;\r\n }\r\n\r\n getDimensionDescriptors(componentType) {\r\n const componentDescriptor = this.getComponentDescriptor(componentType);\r\n return componentDescriptor && componentDescriptor.componentDataDescriptor\r\n ? componentDescriptor.componentDataDescriptor.dimensionDescriptors\r\n : [];\r\n }\r\n\r\n getToolbarComponentDescriptors(componentGroup) {\r\n const descriptors = toolbarComponentTypes\r\n .map(toolBarType => this.getComponentDescriptor(toolBarType))\r\n .filter(desc => desc.componentGroup === componentGroup);\r\n return descriptors;\r\n }\r\n\r\n createAppearance(componentType) {\r\n const appearanceType = this.componentAppearances[componentType];\r\n return appearanceType.create();\r\n }\r\n\r\n createComponent(componentType) {\r\n const descriptor = this.getComponentDescriptor(componentType);\r\n return instanceFactory[descriptor.componentInstanceType].create();\r\n }\r\n\r\n isHorisontalMenuStyledDriver(appearance) {\r\n return (\r\n (appearance.isSimpleMode || appearance.ComponentType === ComponentType.entityDriver) &&\r\n appearance.displayMode === DriverDisplayMode.menuStyle &&\r\n appearance.simpleModeSettings.menuOrientation === SingleSelectionMenuOrientation.horizontal\r\n );\r\n }\r\n\r\n getComponentChangeTypes(componentType: string): EnumValue[] {\r\n return this.findChangeTypesId(componentType).map(componentTypeId => ComponentType.getValue(componentTypeId));\r\n }\r\n\r\n private findChangeTypesId(componentType: string): string[] {\r\n const descriptor = this.componentDescriptors[componentType];\r\n if (!descriptor.changableGroup) {\r\n return [componentType];\r\n }\r\n return Object.getOwnPropertyNames(this.componentDescriptors)\r\n .filter(descType => this.componentDescriptors[descType].changableGroup === descriptor.changableGroup)\r\n .map(descType => this.componentDescriptors[descType].componentType);\r\n }\r\n}\r\n\r\nexport const componentDescriptorHelper: IComponentDescriptorHelper = new ComponentDescriptorHelper();\r\n\r\nconst toolbarComponentTypes = [\r\n ComponentType.bar,\r\n ComponentType.line,\r\n ComponentType.stackedBar,\r\n ComponentType.chartWithRange,\r\n ComponentType.area,\r\n ComponentType.areaRange,\r\n ComponentType.horizontalBar,\r\n ComponentType.bubble,\r\n ComponentType.scatter,\r\n ComponentType.sparkLine,\r\n ComponentType.trafficLight,\r\n ComponentType.dialGauge,\r\n ComponentType.linearGauge,\r\n // ComponentType.recordTime,\r\n ComponentType.candleStick,\r\n ComponentType.pareto,\r\n ComponentType.waterfall,\r\n ComponentType.pie,\r\n ComponentType.treeMap,\r\n ComponentType.map,\r\n ComponentType.processControl,\r\n ComponentType.metricGrid,\r\n ComponentType.recordGrid,\r\n ComponentType.alertsGrid,\r\n ComponentType.alertMessagesGrid,\r\n ComponentType.markerGrid,\r\n ComponentType.driver,\r\n ComponentType.timeDriver,\r\n ComponentType.periodDriver,\r\n ComponentType.aggregationDriver,\r\n ComponentType.timeWindow,\r\n ComponentType.globalFilters,\r\n ComponentType.entityDriver,\r\n ComponentType.parameterDriver,\r\n ComponentType.label,\r\n ComponentType.image,\r\n ComponentType.uiLine,\r\n ComponentType.button,\r\n ComponentType.viewHolder,\r\n ComponentType.menu,\r\n ComponentType.searchPanel,\r\n ComponentType.reportSelfSubscription,\r\n ComponentType.recordForm,\r\n ComponentType.swimlane,\r\n ComponentType.processChart,\r\n ComponentType.processStepChart,\r\n ComponentType.processGrid,\r\n ComponentType.languageSelection,\r\n ComponentType.trellisChart,\r\n ComponentType.processTrellisChart,\r\n ComponentType.polarChartColumn,\r\n ComponentType.pyramid,\r\n ComponentType.pieSemiCircle,\r\n ComponentType.funnel,\r\n ComponentType.boxPlot,\r\n ComponentType.fileUploader\r\n];\r\n","import constants from '@Common/Core/Constant';\r\nimport { DataParameter, IProcessDataParam } from '@Common/Core/DataServiceProvider';\r\nimport Guid from '@Common/Core/Guid';\r\nimport { dimensionFilterValue, filterValue } from '@Common/Entities/FilterEntities';\r\nimport { ActionType, EntityDriverType } from '@Common/Enums';\r\n\r\nimport { findById } from '@Common/Helpers/CollectionUtils';\r\nimport * as commonUtils from '@Common/Helpers/CommonUtils';\r\nimport { DataTimeIntervalHelper } from '@Common/Helpers/DataTimeIntervalHelper';\r\nimport timeHelper, { dateTimeInterval } from '@Common/Helpers/TimeHelper';\r\nimport urlHelper from '@Common/Helpers/UrlHelper';\r\nimport {\r\n BaseDataDefinition,\r\n DataRequestConfiguration,\r\n DateTimeInterval,\r\n DimensionFilter,\r\n DimensionFilterValue,\r\n DimensionFilterValues,\r\n GroupFilter,\r\n MapComponent,\r\n MapParameter,\r\n ProcessConfiguration\r\n} from '@InstanceFactory';\r\nimport { Base } from '@View/Components/Base';\r\nimport { FilterGroup, filterHelper, groupFilter } from '@View/Helpers/FilterHelper';\r\nimport { AlertMessageFilter, getAlertMessageFilter } from '@View/Core/AlertMessageFilter';\r\nimport { getRequestObject } from '@Common/Helpers/JsonUtils';\r\n\r\ntype ComponentParameter = DataRequestConfiguration;\r\ntype AnyParam = MapParameter | ComponentParameter;\r\n\r\nexport class FiltrationProvider {\r\n private globalFilters: GroupFilter[] = [];\r\n private readonly urlFilters = FiltrationProvider.getUrlFilters();\r\n\r\n public getGlobalFilters(): GroupFilter[] {\r\n return this.globalFilters;\r\n }\r\n\r\n public getUrlFilters(): GroupFilter[] {\r\n return this.urlFilters;\r\n }\r\n\r\n private static getUrlFilters(): GroupFilter[] {\r\n const dimensionFilters = [];\r\n\r\n const groups = [];\r\n const dimensions = [];\r\n const values = [];\r\n _(urlHelper.urlParameters()).forEach(pair => {\r\n if (pair.key.indexOf(constants.urlGroupParameterPrefix) == 0) {\r\n if (pair.key.indexOf(constants.urlDimensionParameterPrefix) != -1) {\r\n if (pair.key.indexOf(constants.urlValueParameterPrefix) != -1) {\r\n values.push(pair);\r\n } else {\r\n dimensions.push(pair);\r\n }\r\n } else {\r\n groups.push(pair);\r\n }\r\n }\r\n });\r\n _(groups).forEach(group => {\r\n let filter = _(dimensionFilters).find(item => item.groupName == group.value);\r\n if (filter == null) {\r\n filter = groupFilter({ groupName: group.value, dimensionValues: [] });\r\n dimensionFilters.push(filter);\r\n }\r\n _(dimensions).forEach(dimension => {\r\n if (dimension.key.indexOf(group.key) == 0) {\r\n const filterValues = dimensionFilterValue(dimension.value, []);\r\n filter.dimensionValues.push(filterValues);\r\n _.forEach(values, value => {\r\n if (value.key.indexOf(dimension.key) == 0) {\r\n filterValues.values.push(filterValue(value.value));\r\n }\r\n });\r\n }\r\n });\r\n });\r\n\r\n return dimensionFilters;\r\n }\r\n\r\n public setGlobalFilter(globalFilter: GroupFilter): void {\r\n const existedFilter = _(this.globalFilters).find(item => item.groupName == globalFilter.groupName);\r\n if (existedFilter != null) {\r\n _(globalFilter.dimensionValues).forEach(dimensionFilterValue => {\r\n const existedDimensionFilterValue = _(existedFilter.dimensionValues).find(item => dimensionFilterValue.id == item.id);\r\n const hasNoFilterValue =\r\n dimensionFilterValue.values.length == 0 || _(dimensionFilterValue.values).some(value => value.id == constants.noFilterId);\r\n if (existedDimensionFilterValue != null) {\r\n existedFilter.dimensionValues.splice($.inArray(existedDimensionFilterValue, existedFilter.dimensionValues), 1);\r\n }\r\n if (!hasNoFilterValue) {\r\n existedFilter.dimensionValues.push(dimensionFilterValue);\r\n }\r\n existedFilter.dimensionAllValuesExcluded.remove(dimensionFilterValue.id);\r\n });\r\n if (!_.isEmpty(globalFilter.dimensionAllValuesExcluded)) {\r\n existedFilter.dimensionAllValuesExcluded.push(...globalFilter.dimensionAllValuesExcluded);\r\n }\r\n if (globalFilter.dimensionConditions != null && globalFilter.dimensionConditions.length == 0) {\r\n existedFilter.dimensionConditions = null;\r\n } else if (globalFilter.dimensionConditions != null) {\r\n existedFilter.dimensionConditions = globalFilter.dimensionConditions;\r\n }\r\n _(globalFilter.parameterValues).forEach(parameterValue => {\r\n if (parameterValue == null) {\r\n return;\r\n }\r\n\r\n const existedParameterValue = _(existedFilter.parameterValues).find(item => parameterValue.id == item.id);\r\n const hasNoFilterValue =\r\n parameterValue.values.length == 0 || _(parameterValue.values).some(value => value.id == constants.noFilterId);\r\n if (existedParameterValue != null) {\r\n existedFilter.parameterValues.splice($.inArray(existedParameterValue, existedFilter.parameterValues), 1);\r\n }\r\n if (!hasNoFilterValue) {\r\n existedFilter.parameterValues.push(parameterValue);\r\n }\r\n });\r\n if (globalFilter.entityFilter) {\r\n if (existedFilter.entityFilter) {\r\n if (globalFilter.entityFilter.type == EntityDriverType.record) {\r\n existedFilter.entityFilter.recordId = globalFilter.entityFilter.recordId;\r\n }\r\n if (globalFilter.entityFilter.type == EntityDriverType.metric) {\r\n existedFilter.entityFilter.metricId = globalFilter.entityFilter.metricId;\r\n }\r\n } else {\r\n existedFilter.entityFilter = globalFilter.entityFilter;\r\n }\r\n }\r\n if (globalFilter.recordsData != null) {\r\n if (existedFilter.recordsData == null) {\r\n existedFilter.recordsData = globalFilter.recordsData;\r\n } else {\r\n existedFilter.recordsData = filterHelper.mergeRecordsData(globalFilter.recordsData, existedFilter.recordsData);\r\n }\r\n }\r\n if (globalFilter.processFilters) {\r\n existedFilter.processFilters = filterHelper.mergeProcessFilters(globalFilter.processFilters, existedFilter.processFilters);\r\n }\r\n } else {\r\n globalFilter.dimensionValues = _(globalFilter.dimensionValues)\r\n .filter(item => item.values && item.values.length > 0 && !_(item.values).some(filterValue => filterValue.id == constants.noFilterId))\r\n .value();\r\n\r\n globalFilter.dimensionConditions = _(globalFilter.dimensionConditions)\r\n .filter(item => item.values && item.values.length > 0 && !_(item.values).some(filterValue => filterValue.id == constants.noFilterId))\r\n .value();\r\n if (!globalFilter.entityFilter) {\r\n globalFilter.entityFilter = {\r\n metricId: constants.guidEmpty,\r\n recordId: constants.guidEmpty\r\n };\r\n }\r\n\r\n this.globalFilters.push(globalFilter);\r\n }\r\n }\r\n\r\n public resetFilters(groupIds: string[]): void {\r\n const toRemove = new Set(groupIds);\r\n _.remove(this.globalFilters, gf => toRemove.has(gf.groupName));\r\n }\r\n\r\n public getAllGroupFilters(viewFilters: GroupFilter[]): GroupFilter[] {\r\n let globalDimensionFilters = this.globalFilters.slice();\r\n globalDimensionFilters = filterHelper.mergeGroupFiltersList(globalDimensionFilters, this.urlFilters);\r\n if (viewFilters) {\r\n globalDimensionFilters = filterHelper.mergeGroupFiltersList(globalDimensionFilters, viewFilters);\r\n }\r\n return globalDimensionFilters;\r\n }\r\n\r\n public getAllFilters(\r\n localFilters: GroupFilter,\r\n affectedDriverGroups: FilterGroup[],\r\n viewFilters: GroupFilter[],\r\n selfGroupFilter: GroupFilter,\r\n control?: Base\r\n ): GroupFilter {\r\n let globalDimensionFilters = this.globalFilters;\r\n if (control) {\r\n globalDimensionFilters = commonUtils.clone(this.globalFilters);\r\n this.removeComponentOwnFilters(control, globalDimensionFilters);\r\n _(globalDimensionFilters).forEach(globalDimensionFilter => {\r\n globalDimensionFilter.dimensionValues = _(globalDimensionFilter.dimensionValues)\r\n .filter(dimensionValue => dimensionValue.id != constants.aggregationFilterName)\r\n .value();\r\n });\r\n }\r\n\r\n return this.getDimensionFilter(localFilters, affectedDriverGroups, viewFilters, selfGroupFilter, globalDimensionFilters);\r\n }\r\n\r\n private getDimensionFilter(localFilters, affectedDriverGroups, viewFilters, selfGroupFilter, globalDimensionFilters): GroupFilter {\r\n if (!selfGroupFilter) {\r\n selfGroupFilter = groupFilter();\r\n }\r\n let filter = groupFilter({\r\n groupName: null,\r\n dimensionValues: [],\r\n entityFilter: null,\r\n parameterValues: []\r\n });\r\n _(affectedDriverGroups).forEach(driverGroup => {\r\n const existedFilter = _(globalDimensionFilters).find(item => item.groupName == driverGroup.groupValue);\r\n if (existedFilter != null) {\r\n filter = filterHelper.mergeGroupFilters(filter, existedFilter);\r\n if (selfGroupFilter.groupName == driverGroup.groupValue) {\r\n filter.dimensionValues = _(filter.dimensionValues)\r\n .filter(\r\n dimensionFilterValue =>\r\n !_(selfGroupFilter.dimensionValues).some(\r\n selfDimensionFilterValue => selfDimensionFilterValue.id == dimensionFilterValue.id\r\n )\r\n )\r\n .value();\r\n }\r\n }\r\n const urlFilter = _(this.urlFilters).find(item => item.groupName == driverGroup.groupValue);\r\n if (urlFilter != null) {\r\n filter = filterHelper.mergeGroupFilters(filter, urlFilter);\r\n }\r\n const viewFilter = _(viewFilters).find(item => item.groupName == driverGroup.groupValue);\r\n if (viewFilter != null) {\r\n filter = filterHelper.mergeGroupFilters(filter, viewFilter);\r\n }\r\n });\r\n\r\n return localFilters ? filterHelper.mergeGroupFilters(filter, localFilters) : filter;\r\n }\r\n\r\n public removeComponentOwnFilters(control, globalDimensionFilters, action?, dimensionIds?): void {\r\n if (control) {\r\n const actionDefinition = action ? action : control.getActionDefinition();\r\n if (actionDefinition && actionDefinition.actionType.hasFlag(ActionType.driverOfDimension)) {\r\n const outgoingGroupName = control.getOutgoingGroupName(actionDefinition);\r\n const groupFilter = _(globalDimensionFilters).find(globalDimensionFilter => outgoingGroupName == globalDimensionFilter.groupName);\r\n if (groupFilter) {\r\n let filterIds;\r\n if (actionDefinition.useCurrentDimension) {\r\n filterIds = dimensionIds ? dimensionIds : control.getFilterIds();\r\n } else {\r\n filterIds = [actionDefinition.specialDimension];\r\n }\r\n let filterValues;\r\n _(filterIds).forEach(filterId => {\r\n filterValues = _(groupFilter.dimensionValues).find(filterValue => filterValue.id == filterId);\r\n if (filterValues) {\r\n groupFilter.dimensionValues.remove(filterValues);\r\n }\r\n });\r\n if (groupFilter.processFilters) {\r\n groupFilter.processFilters = _(groupFilter.processFilters)\r\n .filter(filterValue => filterValue.componentId != control.component.id)\r\n .value();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n private addSeriesFilters(dataRequestConfiguration, filters, series, parentViewIds, projectId): void {\r\n _(dataRequestConfiguration.seriesFilters).forEach(seriesFilter => {\r\n const currentSeries = _(series).find(item => item.seriesId == seriesFilter.seriesId);\r\n if (currentSeries != null && currentSeries.metric && currentSeries.metric.id != undefined) {\r\n _(currentSeries.affectedDriverGroups).forEach(group => {\r\n _.forEach(parentViewIds, parentViewId => {\r\n const filterGroup = filterHelper.getFilterGroup(group, parentViewId, projectId);\r\n const filter = _(filters).find(filter => filter.groupName == filterGroup.groupValue);\r\n if (filter != null) {\r\n seriesFilter.processFilters = filterHelper.mergeProcessFilters(seriesFilter.processFilters, filter.processFilters);\r\n seriesFilter.dimensionValues = filterHelper.mergeFilters(seriesFilter.dimensionValues, filter.dimensionValues);\r\n }\r\n });\r\n });\r\n }\r\n });\r\n }\r\n\r\n public needDisplayData(\r\n parameter: DataParameter | IProcessDataParam,\r\n projectId: string,\r\n shapeRequestConfiguration?\r\n ): boolean {\r\n let dataDefinition: BaseDataDefinition;\r\n let filters: DimensionFilter;\r\n if (this.isProcessDataParam(parameter)) {\r\n dataDefinition = parameter.configuration.componentDefinition;\r\n filters = parameter.configuration.filter;\r\n } else {\r\n dataDefinition = parameter.component.dataDefinition;\r\n const configuration = shapeRequestConfiguration ? shapeRequestConfiguration : parameter.dataRequestConfiguration;\r\n filters = configuration.commonFilters;\r\n }\r\n\r\n let displayData = !dataDefinition.hideDataUntilSpecialGroupFilterSet;\r\n\r\n if (dataDefinition.hideDataUntilSpecialGroupFilterSet) {\r\n const filterGroup = filterHelper.getFilterGroup(dataDefinition.specialFilterGroup, parameter.parentId, projectId);\r\n displayData = this.hasGroupFilter(filterGroup.groupValue) || this.hasGroupFilter(filterGroup.groupValue, parameter.viewFilters);\r\n }\r\n\r\n if (displayData && dataDefinition.hideDataUntilSpecialDimensionSet) {\r\n displayData = this.hasDimensionFilter(filters, dataDefinition.specialDimensionId);\r\n if (!displayData && parameter.viewFilters) {\r\n displayData = _.some(parameter.viewFilters, filter => this.hasDimensionFilter(filter, dataDefinition.specialDimensionId));\r\n }\r\n }\r\n\r\n return displayData;\r\n }\r\n\r\n private hasGroupFilter(groupName: string, filters: GroupFilter[] = null): boolean {\r\n if (!filters) {\r\n filters = this.globalFilters ?? [];\r\n }\r\n const groupFilter = filters.find(filter => filter.groupName == groupName);\r\n if (!groupFilter) {\r\n return false;\r\n }\r\n if (\r\n _.isEmpty(groupFilter.dimensionValues) &&\r\n _.isEmpty(groupFilter.dimensionAllValuesExcluded) &&\r\n _.isEmpty(groupFilter.parameterValues) &&\r\n _.isEmpty(groupFilter.dimensionConditions) &&\r\n _.isEmpty(groupFilter.processFilters)\r\n ) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n private hasDimensionFilter(filter: DimensionFilter, dimension: string): boolean {\r\n if (filter == null) {\r\n return false;\r\n }\r\n return (\r\n _.some(filter.dimensionValues, dimensionFilterValue => dimensionFilterValue.id == dimension) ||\r\n _.some(filter.dimensionConditions, dimensionFilterValue => dimensionFilterValue.id == dimension) ||\r\n filter.dimensionAllValuesExcluded.contains(dimension)\r\n );\r\n }\r\n\r\n private isProcessDataParam(param: any): param is IProcessDataParam {\r\n return param.configuration !== undefined;\r\n }\r\n\r\n public getFilterValues(\r\n groupName: string,\r\n dimensionId: string | null,\r\n viewFilters: GroupFilter[],\r\n filterType: typeof constants.filterTypeOption.processFilter\r\n ): ProcessConfiguration[];\r\n public getFilterValues(\r\n groupName: string,\r\n dimensionId: string | null,\r\n viewFilters: GroupFilter[],\r\n filterType: typeof constants.filterTypeOption.searchPanel\r\n ): DimensionFilterValues[];\r\n public getFilterValues(\r\n groupName: string,\r\n dimensionId: string | null,\r\n viewFilters: GroupFilter[],\r\n filterType: typeof constants.filterTypeOption[keyof typeof constants.filterTypeOption]\r\n ): DimensionFilterValue[];\r\n public getFilterValues(groupName: string, dimensionId: string | null, viewFilters: GroupFilter[]): DimensionFilterValue[];\r\n public getFilterValues(\r\n groupName: string,\r\n dimensionId: string | null,\r\n viewFilters: GroupFilter[],\r\n filterType?: typeof constants.filterTypeOption[keyof typeof constants.filterTypeOption]\r\n ): DimensionFilterValues[] | DimensionFilterValue[] | ProcessConfiguration[] {\r\n let globalFilter = _.find(this.getAllGroupFilters(null), { groupName }) || groupFilter({ groupName });\r\n viewFilters = viewFilters || [];\r\n\r\n for (const viewFilter of viewFilters) {\r\n if (!groupName || viewFilter.groupName === groupName) {\r\n globalFilter = filterHelper.mergeGroupFilters(globalFilter, viewFilter);\r\n }\r\n }\r\n\r\n if (\r\n (dimensionId === constants.metricDriverDimensionId || dimensionId === constants.recordDriverDimensionId) &&\r\n globalFilter.entityFilter != null\r\n ) {\r\n const entityId =\r\n dimensionId === constants.metricDriverDimensionId ? globalFilter.entityFilter.metricId : globalFilter.entityFilter.recordId;\r\n return entityId && entityId !== Guid.empty ? [filterValue(entityId)] : [];\r\n } else if (filterType === constants.filterTypeOption.parameterFilter) {\r\n return findById(globalFilter.parameterValues, dimensionId, dimensionFilterValue(dimensionId, [])).values;\r\n } else if (filterType === constants.filterTypeOption.searchPanel) {\r\n return globalFilter.dimensionConditions;\r\n } else if (filterType === constants.filterTypeOption.processFilter) {\r\n return _.filter(globalFilter.processFilters, processFilter => processFilter.process.id === dimensionId);\r\n } else {\r\n return findById(globalFilter.dimensionValues, dimensionId, dimensionFilterValue(dimensionId, [])).values;\r\n }\r\n }\r\n\r\n public applyMapFilters(parameter: DataParameter): void {\r\n let globalFilters = this.globalFilters;\r\n if (parameter.control) {\r\n globalFilters = commonUtils.clone(globalFilters);\r\n _((parameter.component as MapComponent).pinLayers).forEach(layer => {\r\n const filterIds = [layer.drillDownId];\r\n this.removeComponentOwnFilters(parameter.control, globalFilters, layer.appearance.actions[0], filterIds);\r\n });\r\n\r\n this.removeComponentOwnFilters(\r\n parameter.control,\r\n globalFilters,\r\n parameter.component.appearance.actions[0],\r\n parameter.dataRequestConfiguration.shapeRequestConfiguration.drillDownIds\r\n );\r\n }\r\n parameter.dataRequestConfiguration.shapeRequestConfiguration.commonFilters = this.getDimensionFilter(\r\n parameter.dataRequestConfiguration.shapeRequestConfiguration.commonFilters,\r\n parameter.affectedDriverGroups,\r\n parameter.viewFilters,\r\n parameter.selfGroupFilter,\r\n globalFilters\r\n );\r\n }\r\n\r\n public applyFilters(parameter: DataParameter): void {\r\n const requestConfiguration = parameter.dataRequestConfiguration;\r\n requestConfiguration.commonFilters = this.getAllFilters(\r\n requestConfiguration.commonFilters as GroupFilter,\r\n parameter.affectedDriverGroups,\r\n parameter.viewFilters,\r\n parameter.selfGroupFilter,\r\n parameter.control\r\n );\r\n requestConfiguration.commonFilters.recordsData = null;\r\n requestConfiguration.commonFilters.processFilters = getRequestObject(requestConfiguration.commonFilters.processFilters);\r\n this.addSeriesFilters(\r\n requestConfiguration,\r\n this.getAllGroupFilters(parameter.viewFilters),\r\n parameter.component.dataDefinition.series,\r\n parameter.parentIds,\r\n parameter.projectId\r\n );\r\n requestConfiguration.seriesFilters = getRequestObject(requestConfiguration.seriesFilters);\r\n }\r\n\r\n public getComponentTimeInterval(\r\n localFilters: GroupFilter,\r\n affectedDriverGroups: FilterGroup[],\r\n viewFilters: GroupFilter[],\r\n selfGroupFilter: GroupFilter\r\n ): DateTimeInterval {\r\n const filterValues = this.getAllFilters(localFilters, affectedDriverGroups, viewFilters, selfGroupFilter).dimensionValues;\r\n const interval = dateTimeInterval(constants.minDate, constants.maxDate);\r\n\r\n return this.getIntervalFromFilters(filterValues, interval);\r\n }\r\n\r\n public getIntervalFromFilters(filterValues: DimensionFilterValues[], defaultInterval: DateTimeInterval): DateTimeInterval {\r\n const intervals = filterValues\r\n .filter(value => timeHelper.isTimeDrillDown(value.id) || value.id === constants.dateTimeFilterName)\r\n .map(value => timeHelper.unionIntervals(_.map(value.values, value => DataTimeIntervalHelper.parse(value.id))));\r\n if (intervals.length > 0) {\r\n return timeHelper.intersectIntervals(intervals);\r\n }\r\n\r\n return defaultInterval;\r\n }\r\n\r\n public getEntityIdForGroups(groups: FilterGroup[], entityType: EntityDriverType): Guid {\r\n const groupValueSet = new Set(groups.map(g => g.groupValue));\r\n return (\r\n this.globalFilters\r\n .filter(f => !!f.entityFilter)\r\n .filter(f => groupValueSet.has(f.groupName))\r\n .map(({ entityFilter }) => (entityType === EntityDriverType.metric ? entityFilter.metricId : entityFilter.recordId))\r\n .find(v => Guid.isGuidValue(v)) || Guid.empty\r\n );\r\n }\r\n\r\n public getAggregationForGroups(groups: FilterGroup[]): any {\r\n const groupValueSet = new Set(groups.map(g => g.groupValue));\r\n return (\r\n this.globalFilters\r\n .filter(f => groupValueSet.has(f.groupName) && f.dimensionValues)\r\n .map(f => f.dimensionValues.find(dv => dv.id === constants.aggregationFilterName))\r\n .filter(av => av && av.values && av.values.length > 0)\r\n .map(av => av.values[0].id)\r\n .find(Boolean) || null\r\n );\r\n }\r\n\r\n public setGlobalFilters(filters: GroupFilter[]): void {\r\n this.globalFilters = filters;\r\n }\r\n\r\n public getAlertMessageFilter(groups: FilterGroup[], projectId: Guid): AlertMessageFilter {\r\n const groupValueSet = new Set(groups.map(g => g.groupValue));\r\n const filters = this.globalFilters.filter(f => groupValueSet.has(f.groupName));\r\n if (filters.length === 0) {\r\n return _.stubTrue;\r\n }\r\n\r\n return getAlertMessageFilter(filters, projectId);\r\n }\r\n}\r\n","import constants from '@Common/Core/Constant';\r\nimport { ComponentType, ShowAllTimeIntervals } from '@Common/Enums/Enum';\r\nimport { MapComponent, MapPinComponent } from '@InstanceFactory';\r\n\r\nimport { ComponentChangeGroup } from '@View/Core/ComponentDescriptors/ComponentChangeGroup';\r\nimport { componentDescriptorFactory } from './ComponentDescriptorFactory';\r\nimport { enumerable } from '@Common/Core/CoreDecorator';\r\n\r\nexport class componentDescriptors {\r\n @enumerable\r\n public static alertMessagesGridDescriptor() {\r\n const param = {\r\n componentType: ComponentType.alertMessagesGrid,\r\n toolBarIcon: 'alerts-message.png',\r\n componentGroup: constants.componentGroups.gridComponents,\r\n refreshAfterCreated: true,\r\n componentToolBarCommands: [constants.commands.actionWizard]\r\n };\r\n return componentDescriptorFactory.createBaseComponentDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static alertsGridDescriptor() {\r\n const param = {\r\n componentType: ComponentType.alertsGrid,\r\n toolBarIcon: 'alerts.png',\r\n componentGroup: constants.componentGroups.gridComponents\r\n };\r\n return componentDescriptorFactory.createBaseComponentDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static bubbleDescriptor() {\r\n const param = {\r\n componentType: ComponentType.bubble,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(2, [strings.dimensionTitles.bubbles]),\r\n toolBarIcon: 'bubbleChart.png',\r\n highchartType: constants.highchartTypes.bubble,\r\n hasSeriesSettingsTab: true,\r\n seriesSettings: componentDescriptorFactory.seriesDescriptorSettings(true, false, false)\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static buttonDescriptor() {\r\n const param = {\r\n componentType: ComponentType.button,\r\n componentGroup: constants.componentGroups.controlComponents,\r\n toolBarIcon: 'button.png',\r\n showTitleByDefault: false,\r\n defaultComponentWidth: 100,\r\n defaultComponentHeight: 40,\r\n componentToolBarCommands: [constants.commands.actionWizard],\r\n componentInstanceType: 'ButtonComponent'\r\n };\r\n return componentDescriptorFactory.createComponentDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static lineDescriptor() {\r\n const param = {\r\n componentType: ComponentType.line,\r\n toolBarIcon: 'LineChart.png',\r\n showAllTimeIntervals: ShowAllTimeIntervals.internal,\r\n clientInstanceType: 'ExtendedChart',\r\n appearanceComponentType: ComponentType.extendedChart,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [\r\n strings.dimensionTitles.xAxis,\r\n strings.dimensionTitles.lines\r\n ])\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static extendedChartDescriptor() {\r\n const param = {\r\n componentType: ComponentType.extendedChart,\r\n seriesSettings: componentDescriptorFactory.seriesDescriptorSettings(true, null, false),\r\n clientInstanceType: 'ExtendedChart',\r\n appearanceComponentType: ComponentType.extendedChart,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [\r\n strings.dimensionTitles.xAxis,\r\n strings.dimensionTitles.breakdown\r\n ])\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static barDescriptor() {\r\n const param = {\r\n componentType: ComponentType.bar,\r\n toolBarIcon: 'barChart.png',\r\n seriesSettings: componentDescriptorFactory.seriesDescriptorSettings(true, null, false),\r\n clientInstanceType: 'ExtendedChart',\r\n appearanceComponentType: ComponentType.extendedChart,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [strings.dimensionTitles.xAxis])\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static waterfallDescriptor() {\r\n const param = {\r\n componentType: ComponentType.waterfall,\r\n toolBarIcon: 'waterfall.png',\r\n seriesSettings: componentDescriptorFactory.seriesDescriptorSettings(true, null, false),\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [strings.dimensionTitles.bars]),\r\n highchartType: constants.highchartTypes.waterfall\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static pyramidDescriptor() {\r\n const param = {\r\n componentType: ComponentType.pyramid,\r\n toolBarIcon: 'pyramid.png',\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [strings.dimensionTitles.breakdown]),\r\n highchartType: constants.highchartTypes.pyramid,\r\n hasAxisAndBreakdownsTab: true,\r\n dataWizard: 'MetricData',\r\n hasSeriesSettingsTab: true,\r\n hasDrillDownOptionTab: true,\r\n seriesSettings: componentDescriptorFactory.seriesDescriptorSettings(true, false, false)\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static funnelDescriptor() {\r\n const param = {\r\n componentType: ComponentType.funnel,\r\n toolBarIcon: 'funnel.png',\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [strings.dimensionTitles.breakdown]),\r\n highchartType: constants.highchartTypes.funnel,\r\n hasAxisAndBreakdownsTab: true,\r\n dataWizard: 'MetricData',\r\n hasSeriesSettingsTab: true,\r\n hasDrillDownOptionTab: true,\r\n seriesSettings: componentDescriptorFactory.seriesDescriptorSettings(true, false, false)\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static boxPlotDescriptor() {\r\n const param = {\r\n componentType: ComponentType.boxPlot,\r\n toolBarIcon: 'boxplot.png',\r\n seriesSettings: componentDescriptorFactory.seriesDescriptorSettings(true, null, false),\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [strings.dimensionTitles.lines]),\r\n highchartType: constants.highchartTypes.boxPlot,\r\n hasAxisAndBreakdownsTab: true,\r\n hasDrillDownOptionTab: true,\r\n dataWizard: 'MetricData',\r\n clientInstanceType: 'BoxPlotChart'\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n private static polarChartBasicSetting = {\r\n toolBarIcon: 'polar.png',\r\n hasAxisAndBreakdownsTab: true,\r\n changableGroup: ComponentChangeGroup.polarGroup,\r\n seriesSettings: componentDescriptorFactory.seriesDescriptorSettings(true, null, false),\r\n hasDrillDownOptionTab: true,\r\n appearance: {\r\n defaultLabelRotation: 0\r\n }\r\n };\r\n\r\n @enumerable\r\n public static polarChartColumnDescriptor() {\r\n let param = {\r\n componentType: ComponentType.polarChartColumn,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [\r\n strings.dimensionTitles.xAxis,\r\n strings.dimensionTitles.bars\r\n ]),\r\n highchartType: constants.highchartTypes.column\r\n };\r\n\r\n param = $.extend(param, componentDescriptors.polarChartBasicSetting);\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static polarChartLineDescriptor() {\r\n const lineDimentions = [strings.dimensionTitles.xAxis, strings.dimensionTitles.lines];\r\n let param = {\r\n componentType: ComponentType.polarChartLine,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, lineDimentions),\r\n highchartType: constants.highchartTypes.line\r\n };\r\n param = $.extend(param, componentDescriptors.polarChartBasicSetting);\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static polarChartAreaDescriptor() {\r\n const areaDimentions = [strings.dimensionTitles.xAxis, strings.dimensionTitles.areas];\r\n let param = {\r\n componentType: ComponentType.polarChartArea,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, areaDimentions),\r\n highchartType: constants.highchartTypes.area\r\n };\r\n param = $.extend(param, componentDescriptors.polarChartBasicSetting);\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static polarChartScatterDescriptor() {\r\n let param = {\r\n componentType: ComponentType.polarChartScatter,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [\r\n strings.dimensionTitles.xAxis,\r\n strings.dimensionTitles.breakdown\r\n ]),\r\n highchartType: constants.highchartTypes.scatter\r\n };\r\n param = $.extend(param, componentDescriptors.polarChartBasicSetting);\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static rangeBarDescriptor() {\r\n const param = {\r\n componentType: ComponentType.rangeBar,\r\n hasSeriesSettingsTab: true,\r\n seriesSettings: componentDescriptorFactory.seriesDescriptorSettings(true, null, false),\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [strings.dimensionTitles.bars]),\r\n highchartType: constants.highchartTypes.mirrorrange\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static paretoDescriptor() {\r\n const param = {\r\n componentType: ComponentType.pareto,\r\n toolBarIcon: 'paretoChart.png',\r\n seriesSettings: componentDescriptorFactory.seriesDescriptorSettings(true, null, false),\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [strings.dimensionTitles.bars]),\r\n highchartType: constants.highchartTypes.column\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static groupBarDescriptor() {\r\n const param = {\r\n componentType: ComponentType.groupBar,\r\n seriesSettings: componentDescriptorFactory.seriesDescriptorSettings(true, null, false),\r\n clientInstanceType: 'ExtendedChart',\r\n appearanceComponentType: ComponentType.extendedChart,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [\r\n strings.dimensionTitles.groups,\r\n strings.dimensionTitles.bars\r\n ])\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static trellisChartDescriptor() {\r\n const param = {\r\n componentType: ComponentType.trellisChart,\r\n componentToolBarCommands: [constants.commands.dataWizard, constants.commands.actionWizard],\r\n toolBarIcon: 'TrellisChart.png',\r\n seriesSettings: componentDescriptorFactory.seriesDescriptorSettings(true, null, false),\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, []),\r\n componentInstanceType: 'TrellisChart',\r\n componentGroup: constants.componentGroups.chartComponents\r\n };\r\n return componentDescriptorFactory.createComponentDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static stackedBarDescriptor() {\r\n const param = {\r\n componentType: ComponentType.stackedBar,\r\n toolBarIcon: 'stackBarChart.png',\r\n seriesSettings: componentDescriptorFactory.seriesDescriptorSettings(true, null, false),\r\n clientInstanceType: 'ExtendedChart',\r\n appearanceComponentType: ComponentType.extendedChart,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [\r\n strings.dimensionTitles.xAxis,\r\n strings.dimensionTitles.stackedBars\r\n ])\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static stackedBar100Descriptor() {\r\n const param = {\r\n componentType: ComponentType.stackedBar100,\r\n seriesSettings: componentDescriptorFactory.seriesDescriptorSettings(true, null, false),\r\n isPercentComponent: true,\r\n clientInstanceType: 'ExtendedChart',\r\n appearanceComponentType: ComponentType.extendedChart,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [\r\n strings.dimensionTitles.xAxis,\r\n strings.dimensionTitles.stackedBars100\r\n ])\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static areaDescriptor() {\r\n const param = {\r\n componentType: ComponentType.area,\r\n toolBarIcon: 'areaChart.png',\r\n showAllTimeIntervals: ShowAllTimeIntervals.internal,\r\n clientInstanceType: 'ExtendedChart',\r\n appearanceComponentType: ComponentType.extendedChart,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [\r\n strings.dimensionTitles.xAxis,\r\n strings.dimensionTitles.areas\r\n ])\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static areaRangeDescriptor() {\r\n const param = {\r\n componentType: ComponentType.areaRange,\r\n toolBarIcon: 'areaChart.png',\r\n showAllTimeIntervals: ShowAllTimeIntervals.internal,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [\r\n strings.dimensionTitles.xAxis,\r\n strings.dimensionTitles.areas\r\n ]),\r\n highchartType: constants.highchartTypes.arearange,\r\n clientInstanceType: 'AreaRangeChart'\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static invertedAreaDescriptor() {\r\n const param = {\r\n componentType: ComponentType.invertedArea,\r\n toolBarIcon: 'areaChart.png',\r\n showAllTimeIntervals: ShowAllTimeIntervals.internal,\r\n clientInstanceType: 'ExtendedChart',\r\n appearanceComponentType: ComponentType.extendedChart,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [\r\n strings.dimensionTitles.xAxis,\r\n strings.dimensionTitles.areas\r\n ])\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static splineDescriptor() {\r\n const param = {\r\n componentType: ComponentType.spline,\r\n showAllTimeIntervals: ShowAllTimeIntervals.internal,\r\n clientInstanceType: 'ExtendedChart',\r\n appearanceComponentType: ComponentType.extendedChart,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [\r\n strings.dimensionTitles.xAxis,\r\n strings.dimensionTitles.splines\r\n ])\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static invertedSplineDescriptor() {\r\n const param = {\r\n componentType: ComponentType.invertedSpline,\r\n toolBarIcon: 'data_annotation.png',\r\n showAllTimeIntervals: ShowAllTimeIntervals.internal,\r\n clientInstanceType: 'ExtendedChart',\r\n appearanceComponentType: ComponentType.extendedChart,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [\r\n strings.dimensionTitles.xAxis,\r\n strings.dimensionTitles.splines\r\n ])\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static splineAreaDescriptor() {\r\n const param = {\r\n componentType: ComponentType.splineArea,\r\n showAllTimeIntervals: ShowAllTimeIntervals.internal,\r\n clientInstanceType: 'ExtendedChart',\r\n appearanceComponentType: ComponentType.extendedChart,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [\r\n strings.dimensionTitles.xAxis,\r\n strings.dimensionTitles.splineAreas\r\n ])\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static stackedAreaDescriptor() {\r\n const param = {\r\n componentType: ComponentType.stackedArea,\r\n showAllTimeIntervals: ShowAllTimeIntervals.internal,\r\n clientInstanceType: 'ExtendedChart',\r\n appearanceComponentType: ComponentType.extendedChart,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [\r\n strings.dimensionTitles.xAxis,\r\n strings.dimensionTitles.stackedAreas\r\n ])\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static stackedArea100Descriptor() {\r\n const param = {\r\n componentType: ComponentType.stackedArea100,\r\n showAllTimeIntervals: ShowAllTimeIntervals.internal,\r\n isPercentComponent: true,\r\n clientInstanceType: 'ExtendedChart',\r\n appearanceComponentType: ComponentType.extendedChart,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [\r\n strings.dimensionTitles.xAxis,\r\n strings.dimensionTitles.stackedAreas100\r\n ])\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static stackedLineDescriptor() {\r\n const param = {\r\n componentType: ComponentType.stackedLine,\r\n showAllTimeIntervals: ShowAllTimeIntervals.internal,\r\n clientInstanceType: 'ExtendedChart',\r\n appearanceComponentType: ComponentType.extendedChart,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [\r\n strings.dimensionTitles.xAxis,\r\n strings.dimensionTitles.stackedLines\r\n ])\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static stackedSplineDescriptor() {\r\n const param = {\r\n componentType: ComponentType.stackedSpline,\r\n showAllTimeIntervals: ShowAllTimeIntervals.internal,\r\n clientInstanceType: 'ExtendedChart',\r\n appearanceComponentType: ComponentType.extendedChart,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [\r\n strings.dimensionTitles.xAxis,\r\n strings.dimensionTitles.stackedSplines\r\n ])\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static stackedSplineAreaDescriptor() {\r\n const param = {\r\n componentType: ComponentType.stackedSplineArea,\r\n showAllTimeIntervals: ShowAllTimeIntervals.internal,\r\n clientInstanceType: 'ExtendedChart',\r\n appearanceComponentType: ComponentType.extendedChart,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [\r\n strings.dimensionTitles.xAxis,\r\n strings.dimensionTitles.stackedSplineAreas\r\n ])\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static stackedSplineArea100Descriptor() {\r\n const param = {\r\n componentType: ComponentType.stackedSplineArea100,\r\n showAllTimeIntervals: ShowAllTimeIntervals.internal,\r\n isPercentComponent: true,\r\n clientInstanceType: 'ExtendedChart',\r\n appearanceComponentType: ComponentType.extendedChart,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [\r\n strings.dimensionTitles.xAxis,\r\n strings.dimensionTitles.stackedSplineAreas100\r\n ])\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static rangeDescriptor() {\r\n const param = {\r\n componentType: ComponentType.range,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(-1, [strings.dimensionTitles.xAxis])\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static splineRangeDescriptor() {\r\n const param = {\r\n highchartType: constants.highchartTypes.areasplinerange,\r\n componentType: ComponentType.splineRange,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [\r\n strings.dimensionTitles.xAxis,\r\n strings.dimensionTitles.areas\r\n ]),\r\n showAllTimeIntervals: ShowAllTimeIntervals.internal,\r\n clientInstanceType: 'AreaRangeChart'\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static candleStickDescriptor() {\r\n const param = {\r\n componentType: ComponentType.candleStick,\r\n toolBarIcon: 'stickChart.png',\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(-1, [strings.dimensionTitles.xAxis]),\r\n changableGroup: ComponentChangeGroup.stickGroup,\r\n highchartType: constants.highchartTypes.candlestick\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static stickDescriptor() {\r\n const param = {\r\n componentType: ComponentType.stick,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(-1, [strings.dimensionTitles.xAxis]),\r\n highchartType: constants.highchartTypes.ohlc,\r\n changableGroup: ComponentChangeGroup.stickGroup\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static horizontalBarDescriptor() {\r\n const param = {\r\n componentType: ComponentType.horizontalBar,\r\n toolBarIcon: 'horizontalBarChart.png',\r\n seriesSettings: componentDescriptorFactory.seriesDescriptorSettings(true, null, false),\r\n clientInstanceType: 'ExtendedChart',\r\n appearanceComponentType: ComponentType.extendedChart,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [strings.dimensionTitles.xAxis])\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static horizontalRangeBarDescriptor() {\r\n const param = {\r\n componentType: ComponentType.horizontalRangeBar,\r\n seriesSettings: componentDescriptorFactory.seriesDescriptorSettings(true, null, false),\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [strings.dimensionTitles.horizontalBars]),\r\n highchartType: constants.highchartTypes.mirrorrange\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static horizontalGroupBarDescriptor() {\r\n const param = {\r\n componentType: ComponentType.horizontalGroupBar,\r\n seriesSettings: componentDescriptorFactory.seriesDescriptorSettings(true, null, false),\r\n clientInstanceType: 'ExtendedChart',\r\n appearanceComponentType: ComponentType.extendedChart,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [\r\n strings.dimensionTitles.groups,\r\n strings.dimensionTitles.horizontalBars\r\n ])\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static horizontalStackedBarDescriptor() {\r\n const param = {\r\n componentType: ComponentType.horizontalStackedBar,\r\n seriesSettings: componentDescriptorFactory.seriesDescriptorSettings(true, null, false),\r\n clientInstanceType: 'ExtendedChart',\r\n appearanceComponentType: ComponentType.extendedChart,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [\r\n strings.dimensionTitles.xAxis,\r\n strings.dimensionTitles.horizontalStackedBars\r\n ])\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static horizontalStackedBar100Descriptor() {\r\n const param = {\r\n componentType: ComponentType.horizontalStackedBar100,\r\n seriesSettings: componentDescriptorFactory.seriesDescriptorSettings(true, null, false),\r\n isPercentComponent: true,\r\n clientInstanceType: 'ExtendedChart',\r\n appearanceComponentType: ComponentType.extendedChart,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [\r\n strings.dimensionTitles.xAxis,\r\n strings.dimensionTitles.horizontalStackedBars100\r\n ])\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static processControlDescriptor() {\r\n const param = {\r\n componentType: ComponentType.processControl,\r\n toolBarIcon: 'processControl.png',\r\n canHaveDrillDown: false,\r\n hasChartRanges: false,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [strings.dimensionTitles.breakdown]),\r\n componentInstanceType: 'ProcessControlComponent'\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static chartWithRangeDescriptor() {\r\n const param = {\r\n componentType: ComponentType.chartWithRange,\r\n toolBarIcon: 'rangeChart.png',\r\n clientInstanceType: 'ChartWithRange',\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(1, [strings.dimensionTitles.xAxis]),\r\n highchartType: constants.highchartTypes.line\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static driverDescriptor() {\r\n const param = {\r\n componentType: ComponentType.driver,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [strings.dimensionTitles.breakdown]),\r\n toolBarIcon: 'filter.png',\r\n defaultComponentWidth: constants.descriptorConstants.defaultDriverWidth,\r\n defaultComponentHeight: constants.descriptorConstants.defaultDriverHeight,\r\n componentToolBarCommands: componentDescriptorFactory.allCommands,\r\n componentGroup: constants.componentGroups.driverComponents\r\n };\r\n return componentDescriptorFactory.createComponentDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static entityDriverDescriptor() {\r\n const param = {\r\n componentType: ComponentType.entityDriver,\r\n toolBarIcon: 'entity-driver.png',\r\n componentToolBarCommands: [constants.commands.dataWizard, constants.commands.displayWizard, constants.commands.actionWizard],\r\n defaultComponentWidth: constants.descriptorConstants.defaultDriverWidth,\r\n defaultComponentHeight: constants.descriptorConstants.defaultDriverHeight,\r\n componentGroup: constants.componentGroups.driverComponents,\r\n componentInstanceType: 'EntityDriver'\r\n };\r\n return componentDescriptorFactory.createComponentDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static dialGaugeDescriptor() {\r\n const param = {\r\n componentType: ComponentType.dialGauge,\r\n toolBarIcon: 'gaugeChart.png',\r\n highchartType: constants.highchartTypes.dialGauge\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static linearGaugeDescriptor() {\r\n const param = {\r\n componentType: ComponentType.linearGauge,\r\n toolBarIcon: 'linear-gauge.png',\r\n highchartType: constants.highchartTypes.linearGauge\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static globalFiltersDescriptor() {\r\n const param = {\r\n componentType: ComponentType.globalFilters,\r\n toolBarIcon: 'global-filter.png',\r\n componentGroup: constants.componentGroups.driverComponents\r\n };\r\n return componentDescriptorFactory.createBaseComponentDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static imageDescriptor() {\r\n const param = {\r\n componentType: ComponentType.image,\r\n toolBarIcon: 'image.png',\r\n defaultComponentWidth: 200,\r\n defaultComponentHeight: 200,\r\n showTitleByDefault: false,\r\n componentToolBarCommands: [constants.commands.dataWizard, constants.commands.actionWizard],\r\n componentGroup: constants.componentGroups.uiComponents,\r\n componentInstanceType: 'ImageComponent'\r\n };\r\n return componentDescriptorFactory.createComponentDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static labelDescriptor() {\r\n const param = {\r\n componentType: ComponentType.label,\r\n componentGroup: constants.componentGroups.uiComponents,\r\n toolBarIcon: 'text.png',\r\n defaultComponentWidth: 200,\r\n defaultComponentHeight: 150,\r\n showTitleByDefault: false,\r\n componentToolBarCommands: [constants.commands.dataWizard, constants.commands.actionWizard],\r\n componentInstanceType: 'LabelComponent'\r\n };\r\n return componentDescriptorFactory.createComponentDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static languageSelectionDescriptor() {\r\n const param = {\r\n componentType: ComponentType.languageSelection,\r\n toolBarIcon: 'flags.png',\r\n showTitleByDefault: false,\r\n defaultComponentWidth: 100,\r\n defaultComponentHeight: 30,\r\n componentToolBarCommands: [constants.commands.dataWizard, constants.commands.displayWizard, constants.commands.actionWizard],\r\n componentInstanceType: 'LanguageSelectionComponent',\r\n componentGroup: constants.componentGroups.otherComponents\r\n };\r\n return componentDescriptorFactory.createComponentDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static fileUploaderDescriptor() {\r\n const param = {\r\n componentType: ComponentType.fileUploader,\r\n toolBarIcon: 'FileUploader.png',\r\n showTitleByDefault: false,\r\n defaultComponentWidth: 100,\r\n defaultComponentHeight: 100,\r\n componentToolBarCommands: [constants.commands.dataWizard],\r\n componentInstanceType: 'FileUploaderComponent',\r\n componentGroup: constants.componentGroups.otherComponents\r\n };\r\n return componentDescriptorFactory.createComponentDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static logViewerDescriptor() {\r\n const param = {\r\n componentType: ComponentType.logViewer,\r\n toolBarIcon: 'note.png'\r\n };\r\n return componentDescriptorFactory.createBaseComponentDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static mapPinDescriptor() {\r\n const param = {\r\n clientInstanceType: 'MapPinComponent',\r\n componentType: ComponentType.mapPin,\r\n hasChartRanges: false,\r\n canHaveDrillDown: false,\r\n showAllTimeIntervals: ShowAllTimeIntervals.internal,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [\r\n strings.dimensionTitles.items,\r\n strings.dimensionTitles.breakdown\r\n ]),\r\n componentInstanceType: MapPinComponent.instanceName,\r\n seriesSettings: {\r\n sparkSettingsDescriptor: { hasMainSparkSettings: true, hasAdditionalSparkSettings: false },\r\n hasBulletSettings: false,\r\n hasCellPaintingSettings: true,\r\n wholeRow: true\r\n }\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static mapDescriptor() {\r\n const param = {\r\n clientInstanceType: 'MapComponent',\r\n componentType: ComponentType.map,\r\n toolBarIcon: 'mapControlIcon.png',\r\n hasChartRanges: false,\r\n componentInstanceType: MapComponent.instanceName\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static markerGridDescriptor() {\r\n const param = {\r\n componentType: ComponentType.markerGrid,\r\n toolBarIcon: 'data_annotation.png',\r\n componentToolBarCommands: [constants.commands.actionWizard],\r\n componentGroup: constants.componentGroups.gridComponents\r\n };\r\n return componentDescriptorFactory.createBaseComponentDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static menuDescriptor() {\r\n const param = {\r\n componentType: ComponentType.menu,\r\n componentGroup: constants.componentGroups.controlComponents,\r\n toolBarIcon: 'menu.png',\r\n showTitleByDefault: false,\r\n defaultComponentWidth: 200,\r\n defaultComponentHeight: 400,\r\n componentToolBarCommands: [constants.commands.dataWizard, constants.commands.displayWizard],\r\n componentInstanceType: 'MenuComponent'\r\n };\r\n return componentDescriptorFactory.createComponentDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static metricGridDescriptor() {\r\n const param = {\r\n componentType: ComponentType.metricGrid,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(-1, [\r\n strings.dimensionTitles.rows,\r\n strings.dimensionTitles.columns\r\n ]),\r\n\r\n toolBarIcon: 'MetricGrid.png',\r\n componentToolBarCommands: componentDescriptorFactory.allCommands,\r\n componentGroup: constants.componentGroups.gridComponents,\r\n seriesSettings: componentDescriptorFactory.seriesDescriptorSettings(\r\n true,\r\n { hasMainSparkSettings: true, hasAdditionalSparkSettings: true },\r\n true\r\n ),\r\n defaultDimension: constants.dimension1\r\n };\r\n param.componentDataDescriptor.canChooseCurrentDimensions = false;\r\n return componentDescriptorFactory.createComponentDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static parameterDriverDescriptor() {\r\n const param = {\r\n componentType: ComponentType.parameterDriver,\r\n toolBarIcon: 'parameter-filter.png',\r\n defaultComponentWidth: constants.descriptorConstants.defaultDriverWidth,\r\n defaultComponentHeight: constants.descriptorConstants.defaultDriverHeight,\r\n componentToolBarCommands: [constants.commands.dataWizard, constants.commands.actionWizard],\r\n componentGroup: constants.componentGroups.driverComponents,\r\n componentInstanceType: 'ParameterDriver'\r\n };\r\n return componentDescriptorFactory.createComponentDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static periodDriverDescriptor() {\r\n const param = {\r\n componentType: ComponentType.periodDriver,\r\n componentToolBarCommands: [constants.commands.dataWizard, constants.commands.displayWizard, constants.commands.actionWizard],\r\n toolBarIcon: 'period_data_32.png',\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [strings.dimensionTitles.breakdown]),\r\n defaultComponentWidth: constants.descriptorConstants.defaultDriverWidth,\r\n defaultComponentHeight: constants.descriptorConstants.defaultDriverHeight,\r\n componentGroup: constants.componentGroups.driverComponents,\r\n componentInstanceType: 'PeriodDriverComponent'\r\n };\r\n return componentDescriptorFactory.createComponentDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static aggregationDriverDescriptor() {\r\n const param = {\r\n componentType: ComponentType.aggregationDriver,\r\n componentToolBarCommands: [constants.commands.dataWizard, constants.commands.displayWizard, constants.commands.actionWizard],\r\n toolBarIcon: 'aggregation.png',\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [strings.dimensionTitles.breakdown]),\r\n defaultComponentWidth: constants.descriptorConstants.defaultDriverWidth,\r\n defaultComponentHeight: constants.descriptorConstants.defaultDriverHeight,\r\n componentGroup: constants.componentGroups.driverComponents,\r\n componentInstanceType: 'AggregationDriver'\r\n };\r\n return componentDescriptorFactory.createComponentDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static processGridDescriptor() {\r\n const param = {\r\n componentType: ComponentType.processGrid,\r\n toolBarIcon: 'ProcessGrid.png',\r\n canHaveDrillDown: true,\r\n useIntervalMatching: true\r\n };\r\n return componentDescriptorFactory.createProcessComponentDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static pieDescriptor() {\r\n const param = {\r\n componentType: ComponentType.pie,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [strings.dimensionTitles.breakdown]),\r\n toolBarIcon: 'PieChart.png',\r\n hasChartRanges: false,\r\n highchartType: constants.highchartTypes.pie,\r\n hasSeriesSettingsTab: true,\r\n seriesSettings: componentDescriptorFactory.seriesDescriptorSettings(true, false, false)\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static doughnutDescriptor() {\r\n const param = {\r\n componentType: ComponentType.doughnut,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [strings.dimensionTitles.breakdown]),\r\n toolBarIcon: 'PieChart.png',\r\n hasChartRanges: false,\r\n highchartType: constants.highchartTypes.pie,\r\n hasSeriesSettingsTab: true,\r\n hasAxisAndBreakdownsTab: true,\r\n hasDrillDownOptionTab: true,\r\n seriesSettings: componentDescriptorFactory.seriesDescriptorSettings(true, false, false),\r\n clientInstanceType: 'DoughnutChart'\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static pieSemiCircleDescriptor() {\r\n const param = {\r\n componentType: ComponentType.pieSemiCircle,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [strings.dimensionTitles.breakdown]),\r\n toolBarIcon: 'pieSemiCircle.png',\r\n hasChartRanges: false,\r\n highchartType: constants.highchartTypes.pie,\r\n hasSeriesSettingsTab: true,\r\n hasAxisAndBreakdownsTab: true,\r\n hasDrillDownOptionTab: true,\r\n seriesSettings: componentDescriptorFactory.seriesDescriptorSettings(true, false, false),\r\n clientInstanceType: 'DoughnutChart'\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static recordFormDescriptor() {\r\n const param = {\r\n componentType: ComponentType.recordForm,\r\n toolBarIcon: 'record-form.png',\r\n componentToolBarCommands: [constants.commands.dataWizard, constants.commands.timeWizard, constants.commands.actionWizard],\r\n defaultComponentWidth: 600,\r\n defaultComponentHeight: 400,\r\n componentGroup: constants.componentGroups.otherComponents\r\n };\r\n return componentDescriptorFactory.createComponentDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static recordGridDescriptor() {\r\n const param = {\r\n componentType: ComponentType.recordGrid,\r\n toolBarIcon: 'RecordGrid.png',\r\n componentToolBarCommands: componentDescriptorFactory.allCommands,\r\n componentGroup: constants.componentGroups.gridComponents,\r\n seriesSettings: componentDescriptorFactory.seriesDescriptorSettings(true, null, false)\r\n };\r\n return componentDescriptorFactory.createComponentDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static recordTimeDescriptor() {\r\n const param = {\r\n componentType: ComponentType.recordTime,\r\n toolBarIcon: 'record-time.png',\r\n canHaveDrillDown: false,\r\n hasChartRanges: false,\r\n highchartType: constants.highchartTypes.columnrange\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static reportSelfSubscriptionDescriptor() {\r\n const param = {\r\n componentType: ComponentType.reportSelfSubscription,\r\n toolBarIcon: 'report-subscription.png',\r\n defaultComponentWidth: 350,\r\n defaultComponentHeight: 250,\r\n componentGroup: constants.componentGroups.otherComponents\r\n };\r\n return componentDescriptorFactory.createBaseComponentDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static scatterDescriptor() {\r\n const param = {\r\n componentType: ComponentType.scatter,\r\n toolBarIcon: 'scatterChart.png',\r\n canHaveDrillDown: false,\r\n hasChartRanges: false,\r\n highchartType: constants.highchartTypes.scatter\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static searchPanelDescriptor() {\r\n const param = {\r\n componentType: ComponentType.searchPanel,\r\n toolBarIcon: 'search-panel.png',\r\n componentToolBarCommands: [constants.commands.dataWizard, constants.commands.actionWizard],\r\n defaultComponentWidth: 780,\r\n defaultComponentHeight: 400,\r\n componentInstanceType: 'SearchPanel',\r\n componentGroup: constants.componentGroups.otherComponents\r\n };\r\n return componentDescriptorFactory.createComponentDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static sparkLineDescriptor() {\r\n const param = {\r\n componentType: ComponentType.sparkLine,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [strings.dimensionTitles.breakdown]),\r\n toolBarIcon: 'spark.png',\r\n defaultComponentWidth: 200,\r\n defaultComponentHeight: 100,\r\n showTitleByDefault: false,\r\n canHaveDrillDown: false,\r\n hasChartRanges: false\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static timeDriverDescriptor() {\r\n const param = {\r\n componentType: ComponentType.timeDriver,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [strings.dimensionTitles.breakdown]),\r\n toolBarIcon: 'time-filter.png',\r\n defaultComponentWidth: constants.descriptorConstants.defaultDriverWidth,\r\n defaultComponentHeight: constants.descriptorConstants.defaultDriverHeight,\r\n componentToolBarCommands: [constants.commands.timeWizard, constants.commands.displayWizard, constants.commands.actionWizard],\r\n componentGroup: constants.componentGroups.driverComponents\r\n };\r\n return componentDescriptorFactory.createComponentDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static timeWindowDescriptor() {\r\n const param = {\r\n componentType: ComponentType.timeWindow,\r\n toolBarIcon: 'time-window.png',\r\n componentToolBarCommands: [constants.commands.timeWizard, constants.commands.actionWizard],\r\n defaultComponentWidth: constants.descriptorConstants.defaultDriverWidth,\r\n defaultComponentHeight: constants.descriptorConstants.defaultDriverHeight,\r\n showTitleByDefault: false,\r\n componentGroup: constants.componentGroups.driverComponents\r\n };\r\n return componentDescriptorFactory.createComponentDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static trafficLightDescriptor() {\r\n const param = {\r\n componentType: ComponentType.trafficLight,\r\n toolBarIcon: 'status-light.png',\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(-1),\r\n canHaveDrillDown: false,\r\n hasChartRanges: false,\r\n highchartType: constants.highchartTypes.pie\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static treeMapDescriptor() {\r\n const param = {\r\n componentType: ComponentType.treeMap,\r\n toolBarIcon: 'treemap.png',\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(0, [\r\n strings.dimensionTitles.groups,\r\n strings.dimensionTitles.items\r\n ]),\r\n hasChartRanges: false,\r\n highchartType: constants.highchartTypes.treemap\r\n };\r\n return componentDescriptorFactory.createChartDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static uiLineDescriptor() {\r\n const param = {\r\n componentType: ComponentType.uiLine,\r\n toolBarIcon: 'UILine.png',\r\n showTitleByDefault: false,\r\n isuiComponent: true,\r\n componentGroup: constants.componentGroups.uiComponents\r\n };\r\n return componentDescriptorFactory.createBaseComponentDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static viewHolderDescriptor() {\r\n const param = {\r\n componentType: ComponentType.viewHolder,\r\n componentToolBarCommands: [constants.commands.dataWizard, constants.commands.actionWizard],\r\n componentGroup: constants.componentGroups.controlComponents,\r\n toolBarIcon: 'view-holder.png',\r\n defaultComponentHeight: 400,\r\n defaultComponentWidth: 400,\r\n showTitleByDefault: false,\r\n componentInstanceType: 'ViewHolder'\r\n };\r\n return componentDescriptorFactory.createComponentDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static processAgingChartDescriptor() {\r\n const param = {\r\n componentType: ComponentType.processAgingChart,\r\n toolBarIcon: 'processAgingChart.png',\r\n canHaveDrillDown: true,\r\n hasChartRanges: true,\r\n componentDataDescriptor: componentDescriptorFactory.createDataDescriptor(-1, [strings.dimensionTitles.breakdown]),\r\n highchartType: constants.highchartTypes.column\r\n };\r\n return componentDescriptorFactory.createProcessComponentDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static processChartDescriptor() {\r\n const param = {\r\n componentType: ComponentType.processChart,\r\n toolBarIcon: 'processChart.png',\r\n canHaveDrillDown: true,\r\n useIntervalMatching: true,\r\n hasBottleneckSetting: true,\r\n processActions: true\r\n };\r\n return componentDescriptorFactory.createProcessComponentDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static processStepChartDescriptor() {\r\n const param = {\r\n componentType: ComponentType.processStepChart,\r\n toolBarIcon: 'processStepChart.png',\r\n canHaveDrillDown: true,\r\n useIntervalMatching: true,\r\n hasBottleneckSetting: true,\r\n processActions: true\r\n };\r\n return componentDescriptorFactory.createProcessComponentDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static swimlaneDescriptor() {\r\n const param = {\r\n componentType: ComponentType.swimlane,\r\n toolBarIcon: 'swimlane.png',\r\n useIntervalMatching: true,\r\n processActions: true\r\n };\r\n return componentDescriptorFactory.createProcessComponentDescriptor(param);\r\n }\r\n\r\n @enumerable\r\n public static processTrellisChartDescriptor() {\r\n const param = {\r\n componentType: ComponentType.processTrellisChart,\r\n componentToolBarCommands: [constants.commands.dataWizard, constants.commands.actionWizard],\r\n toolBarIcon: 'trellisChart.png',\r\n canHaveDrillDown: true,\r\n useIntervalMatching: true,\r\n componentInstanceType: 'ProcessTrellisChart'\r\n };\r\n return componentDescriptorFactory.createProcessComponentDescriptor(param);\r\n }\r\n}\r\n","import { properties } from '@Common/Core/Properties';\r\nimport * as commonUtils from '@Common/Helpers/CommonUtils';\r\nimport pointerHelper from '@Common/Helpers/PointerHelper';\r\nimport { GeometryPoint } from '@InstanceFactory';\r\n\r\nimport * as scrollLib from 'iscroll/build/iscroll-probe';\r\nimport { enumerable } from '@Common/Core/CoreDecorator';\r\nimport { memoize } from '@Common/Core/MemoizeDecorator';\r\n\r\nexport interface IScrollSettings {\r\n scrollX?: boolean; // true\r\n scrollY?: boolean; // true\r\n scrollbarX?: boolean; // true\r\n scrollbarY?: boolean; // true\r\n scrollbars?: boolean; // 'custom'\r\n fadeScrollbars?: boolean; // false\r\n\r\n allowDragScroll?: boolean; // false\r\n scrollToSelection?: boolean; // false\r\n\r\n disableTranslate?: boolean; // false\r\n canScroll?: () => boolean; // _.stubTrue\r\n\r\n onScrolledToEnd?: () => void; // noop\r\n onScrollStart?: () => void; // noop\r\n onScrollMove?: (scroll: Scroll, delta: { deltaX: number; deltaY: number }) => void; // noop\r\n\r\n rightPadding?: boolean; // true\r\n\r\n overrideCaret?: any; // null\r\n scroller?: any; // null\r\n\r\n endSensitivity?: number; // 10\r\n\r\n overlayedScroll?: boolean; // false\r\n}\r\n\r\ninterface IScrollUtils {\r\n offset(el: HTMLElement): any;\r\n\r\n addEvent(el: HTMLElement | Window, type: string, fn: () => any, capture?: boolean): void;\r\n\r\n removeEvent(el: HTMLElement | Window, type: string, fn: () => any, capture?: boolean): void;\r\n\r\n prefixPointerEvent(pointerEvent: string): string;\r\n\r\n getTime(): number;\r\n\r\n style: { [name: string]: string };\r\n hasPointer: boolean;\r\n}\r\n\r\nexport class Scroll {\r\n private readonly _paddingClass = 'iScrollPadding';\r\n\r\n private _iScroll: any;\r\n private readonly _settings: IScrollSettings;\r\n private _scrollElement: any;\r\n private _scrollToCallback: () => void;\r\n private readonly _overlay: JQuery = $('
    ');\r\n private readonly _scroller: JQuery;\r\n\r\n private _isInEndArea = false;\r\n private _previousVScrollState: boolean;\r\n\r\n private readonly _indicatorX: any;\r\n private readonly _indicatorY: any;\r\n\r\n private _hasPadding: boolean;\r\n\r\n // TODO: SCALING\r\n constructor(element: any, settings?: IScrollSettings) {\r\n this._settings = _.defaults({}, settings, {\r\n bounceTime: 300,\r\n disableMouse: true,\r\n disableTouch: true,\r\n disablePointer: settings && settings.allowDragScroll ? false : !pointerHelper.hasTouch,\r\n preventDefault: false,\r\n freeScroll: true,\r\n mouseWheel: true,\r\n interactiveScrollbars: pointerHelper.hasMouse,\r\n fadeScrollbars: !pointerHelper.hasMouse,\r\n scrollbars: 'custom',\r\n probeType: 3,\r\n scrollX: true,\r\n scrollY: true,\r\n scrollbarX: true,\r\n scrollbarY: true,\r\n endSensitivity: 10,\r\n disableTranslate: false,\r\n canScroll: _.stubTrue,\r\n onScrolledToEnd: _.noop,\r\n onScrollStart: _.noop,\r\n onScrollMove: _.noop,\r\n overrideCaret: null,\r\n scroller: null,\r\n rightPadding: true,\r\n overlayedScroll: false,\r\n scrollToSelection: false\r\n });\r\n\r\n this._scrollElement = this.getElement(element);\r\n this._scrollElement.style.overflow = 'hidden';\r\n\r\n if (this._settings.scroller) {\r\n this._settings.scroller = this.getElement(this._settings.scroller);\r\n }\r\n\r\n this._iScroll = new scrollLib(this._scrollElement, this._settings);\r\n this._iScroll.on('scrollStart', this.onScrollStart.bind(this));\r\n this._iScroll.on('scroll', this.onScroll.bind(this));\r\n this._iScroll.on('scrollEnd', this.onScrollEnd.bind(this));\r\n this._iScroll.on('scrollCancel', this.onScrollEnd.bind(this));\r\n\r\n this._iScroll.on('indicatorStart', this.onIndicatorScrollStart.bind(this));\r\n this._iScroll.on('indicatorEnd', this.onIndicatorScrollEnd.bind(this));\r\n\r\n this._indicatorX = _.find(this._iScroll.indicators, i => i.options.listenX === true);\r\n this._indicatorY = _.find(this._iScroll.indicators, i => i.options.listenY === true);\r\n\r\n this._scroller = $(this._iScroll.scroller);\r\n }\r\n\r\n private getElement(element: any): HTMLElement {\r\n return element.nodeType ? element : element instanceof jQuery ? element[0] : document.querySelector(element);\r\n }\r\n\r\n private onScrollStart(): void {\r\n this._settings.onScrollStart();\r\n }\r\n\r\n private onScroll(): void {\r\n if (this._settings.onScrolledToEnd != null) {\r\n if (this._previousVScrollState === true && this.hasVerticalScrollbar() === false) {\r\n this._settings.onScrolledToEnd.call(this);\r\n this._previousVScrollState = false;\r\n return;\r\n }\r\n\r\n this._previousVScrollState = this.hasVerticalScrollbar();\r\n\r\n if (this.y < this.maxScrollY + this._settings.endSensitivity) {\r\n if (this._isInEndArea === false) {\r\n this._isInEndArea = true;\r\n this._settings.onScrolledToEnd.call(this);\r\n }\r\n } else {\r\n this._isInEndArea = false;\r\n }\r\n }\r\n\r\n this.onScrollMove();\r\n }\r\n\r\n private onScrollMove(): void {\r\n this._settings.onScrollMove(this, {\r\n deltaX: this._iScroll.deltaX,\r\n deltaY: this._iScroll.deltaY\r\n });\r\n }\r\n\r\n private onScrollEnd(): void {\r\n if (this._scrollToCallback) {\r\n this._scrollToCallback();\r\n this._scrollToCallback = null;\r\n }\r\n }\r\n\r\n private onIndicatorScrollStart(): void {\r\n // If indicator is moved by mouse - create blocking overlay\r\n this._overlay.appendTo('body');\r\n }\r\n\r\n private onIndicatorScrollEnd(): void {\r\n this._overlay.detach();\r\n }\r\n\r\n public refresh(callback?: () => void, bypassTimeout?: boolean): void {\r\n const localRefreshFn = () => {\r\n if (this._scrollElement != null) {\r\n const prevX = this.x;\r\n const prevY = this.y;\r\n\r\n this._iScroll.refresh();\r\n\r\n if (prevX !== this.x || prevY !== this.y) {\r\n this.onScrollMove();\r\n }\r\n\r\n if (this._settings.rightPadding) {\r\n if (this.hasVerticalScrollbar() && !this._hasPadding) {\r\n this._scroller.addClass(this._paddingClass);\r\n this._hasPadding = true;\r\n } else if (!this.hasVerticalScrollbar() && this._hasPadding) {\r\n this._scroller.removeClass(this._paddingClass);\r\n this._hasPadding = false;\r\n }\r\n }\r\n\r\n if (_.isFunction(callback)) {\r\n callback();\r\n }\r\n }\r\n };\r\n if (bypassTimeout) {\r\n localRefreshFn.call(this);\r\n } else {\r\n setTimeout(localRefreshFn, 0);\r\n }\r\n }\r\n\r\n public ensureVisible(el: any, deltaX?: number, deltaY?: number, time?: number): void {\r\n const element = this.getElement(el);\r\n if (element == null) {\r\n return;\r\n }\r\n\r\n setTimeout(() => {\r\n this._iScroll?.ensureVisible(element, deltaX, deltaY, time);\r\n }, 0);\r\n }\r\n\r\n public setScrollbarsVisibility(isVisible?: boolean): void {\r\n for (const indicator of this._iScroll.indicators) {\r\n indicator.wrapper.classList.toggle('hidden', !isVisible);\r\n }\r\n }\r\n\r\n public subscribeToWheelEvent(el: any): void {\r\n const element = this.getElement(el);\r\n const wheelFunc = this._iScroll;\r\n\r\n let options: any = false;\r\n if (properties.isPassiveSupported) {\r\n options = { passive: false };\r\n }\r\n element.addEventListener('DOMMouseScroll', wheelFunc, options);\r\n element.addEventListener('mousewheel', wheelFunc, options);\r\n }\r\n\r\n public setScale(scale: number): void {\r\n throw new Error('Not implemented');\r\n }\r\n\r\n public getScrollPosition(): GeometryPoint {\r\n return {\r\n x: this._iScroll.x,\r\n y: this._iScroll.y\r\n };\r\n }\r\n\r\n public setScrollPosition(point: GeometryPoint): void {\r\n this._iScroll.scrollTo(point.x, point.y, 0, null);\r\n }\r\n\r\n public scrollTo(x: number, y: number, time?: number, relative?: boolean, callback?: () => void): void {\r\n if (relative) {\r\n x = this._iScroll.x - x;\r\n y = this._iScroll.y - y;\r\n }\r\n\r\n if (callback && time) {\r\n this._scrollToCallback = callback;\r\n }\r\n\r\n this._iScroll.scrollTo(x, y, time, null);\r\n\r\n if (callback && !time) {\r\n callback();\r\n }\r\n }\r\n\r\n public instantScrollTo(x: number, y: number): void {\r\n this._iScroll._instantScrollTo(x, y);\r\n }\r\n\r\n public scrollToEnd(time?: number): void {\r\n this._iScroll.scrollTo(this._iScroll.x, Math.min(this._iScroll.maxScrollY, 0), time);\r\n }\r\n\r\n public destroy(): void {\r\n this._scrollElement = null;\r\n this._iScroll?.destroy();\r\n this._iScroll = null;\r\n }\r\n\r\n public hasVerticalScrollbar(): boolean {\r\n return this._iScroll?.hasVerticalScroll;\r\n }\r\n\r\n public getVerticalScrollbarSize(): number {\r\n return this._indicatorY && this.hasVerticalScrollbar() ? this._indicatorY.wrapper.offsetWidth : 0;\r\n }\r\n\r\n public hasHorizontalScrollbar(): boolean {\r\n return this._iScroll?.hasHorizontalScroll;\r\n }\r\n\r\n public getHorizontalScrollbarSize(): number {\r\n return this._indicatorX && this.hasHorizontalScrollbar() ? this._indicatorX.wrapper.offsetHeight : 0;\r\n }\r\n\r\n public updateSettings(settings: IScrollSettings): void {\r\n _.assign(this._iScroll.options, settings);\r\n this._iScroll.refresh();\r\n }\r\n\r\n /**\r\n * Public properties\r\n */\r\n @enumerable\r\n public get x(): number {\r\n return this._iScroll.x;\r\n }\r\n\r\n @enumerable\r\n public get y(): number {\r\n return this._iScroll.y;\r\n }\r\n\r\n @enumerable\r\n public get maxScrollX(): number {\r\n return this._iScroll.maxScrollX;\r\n }\r\n\r\n @enumerable\r\n public get maxScrollY(): number {\r\n return this._iScroll.maxScrollY;\r\n }\r\n\r\n @memoize()\r\n public static getScrollSize(): { verticalSize: number; horizontalSize: number } {\r\n const element = $('
    ').css({ width: 100, height: 100 }).appendTo('body');\r\n const scroller = $('
    ').css({ width: 1000, height: 1000 }).appendTo(element);\r\n const scroll = new Scroll(element[0], { scroller });\r\n\r\n scroll.refresh(null, true);\r\n\r\n const verticalSize = scroll.getVerticalScrollbarSize();\r\n const horizontalSize = scroll.getHorizontalScrollbarSize();\r\n\r\n scroll.getHorizontalScrollbarSize();\r\n scroll.destroy();\r\n element.remove();\r\n\r\n return {\r\n verticalSize,\r\n horizontalSize\r\n };\r\n }\r\n}\r\n\r\nexport namespace ScrollUtils {\r\n export function extendIScroll(): void {\r\n const utils: IScrollUtils = scrollLib.utils;\r\n const minScrollbarSize = 32;\r\n\r\n scrollLib.prototype._init = (function (func: any): any {\r\n return function (...args): void {\r\n if (this.options.scroller) {\r\n this.scroller = this.options.scroller;\r\n this.scrollerStyle = this.scroller.style;\r\n }\r\n\r\n const selectionInterval = {\r\n horizontal: null,\r\n vertical: null\r\n };\r\n\r\n this.handlers = {\r\n keyDown: e => {\r\n const target = this.options.overrideCaret ? this.options.overrideCaret : e.target;\r\n const nodeName = target.nodeName;\r\n\r\n if ((nodeName === 'INPUT' || nodeName === 'TEXTAREA' || this.options.overrideCaret) && this._checkOrigin(e)) {\r\n this.ensureVisible(target, 8, 8, 0);\r\n }\r\n },\r\n focus: e => {\r\n e.currentTarget.scrollTop = 0;\r\n },\r\n touchMove: e => {\r\n e.preventDefault();\r\n },\r\n selectionStart: e => {\r\n utils.addEvent(window, utils.prefixPointerEvent('pointermove'), this.handlers.selectionMove);\r\n utils.addEvent(window, utils.prefixPointerEvent('pointerup'), this.handlers.selectionEnd);\r\n },\r\n selectionMove: e => {\r\n const scrollPadding = 20;\r\n const selectionSpeedBase = 20;\r\n const wrapperRect = this.wrapper.getBoundingClientRect();\r\n\r\n const needScrollLeft = e.clientX - scrollPadding < wrapperRect.left;\r\n const needScrollRight = e.clientX + scrollPadding > wrapperRect.right;\r\n if (needScrollLeft) {\r\n clearInterval(selectionInterval.horizontal);\r\n selectionInterval.horizontal = setInterval(() => {\r\n this._instantScrollTo(this.x + selectionSpeedBase / Math.max(1, e.clientX - wrapperRect.left), this.y);\r\n }, 10);\r\n }\r\n if (needScrollRight) {\r\n clearInterval(selectionInterval.horizontal);\r\n selectionInterval.horizontal = setInterval(() => {\r\n this._instantScrollTo(this.x - selectionSpeedBase / Math.max(1, wrapperRect.right - e.clientX), this.y);\r\n }, 10);\r\n }\r\n if (!needScrollLeft && !needScrollRight) {\r\n clearInterval(selectionInterval.horizontal);\r\n }\r\n\r\n const needScrollTop = e.clientY - scrollPadding < wrapperRect.top;\r\n const needScrollBottom = e.clientY + scrollPadding > wrapperRect.bottom;\r\n if (needScrollTop) {\r\n clearInterval(selectionInterval.vertical);\r\n selectionInterval.vertical = setInterval(() => {\r\n this._instantScrollTo(this.x, this.y + selectionSpeedBase / Math.max(1, e.clientY - wrapperRect.top));\r\n }, 10);\r\n }\r\n if (needScrollBottom) {\r\n clearInterval(selectionInterval.vertical);\r\n selectionInterval.vertical = setInterval(() => {\r\n this._instantScrollTo(this.x, this.y - selectionSpeedBase / Math.max(1, wrapperRect.bottom - e.clientY));\r\n }, 10);\r\n }\r\n if (!needScrollTop && !needScrollBottom) {\r\n clearInterval(selectionInterval.vertical);\r\n }\r\n },\r\n selectionEnd: e => {\r\n clearInterval(selectionInterval.horizontal);\r\n clearInterval(selectionInterval.vertical);\r\n utils.removeEvent(window, utils.prefixPointerEvent('pointermove'), this.handlers.selectionMove);\r\n utils.removeEvent(window, utils.prefixPointerEvent('pointerup'), this.handlers.selectionEnd);\r\n }\r\n };\r\n\r\n this.on('refresh', () => {\r\n const computedStyle = getComputedStyle(this.wrapper);\r\n this.scrollerOffsetLeft = parseInt(computedStyle.getPropertyValue('padding-left')) || 0;\r\n this.scrollerOffsetRight = parseInt(computedStyle.getPropertyValue('padding-right')) || 0;\r\n this.scrollerOffsetTop = parseInt(computedStyle.getPropertyValue('padding-top')) || 0;\r\n this.scrollerOffsetBottom = parseInt(computedStyle.getPropertyValue('padding-bottom')) || 0;\r\n\r\n const rect = this.wrapper.getBoundingClientRect();\r\n this.wrapperWidth = Math.ceil(rect.right - rect.left) - this.scrollerOffsetLeft - this.scrollerOffsetRight;\r\n this.wrapperHeight = Math.ceil(rect.bottom - rect.top) - this.scrollerOffsetTop - this.scrollerOffsetBottom;\r\n\r\n // SVG elements does not have offset dimensions\r\n if (this.scroller.offsetWidth === undefined) {\r\n const bBox = this.scroller.getBoundingClientRect();\r\n this.scrollerWidth = bBox.right - bBox.left;\r\n this.scrollerHeight = bBox.bottom - bBox.top;\r\n } else {\r\n this.scrollerWidth = this.scroller.offsetWidth;\r\n this.scrollerHeight = this.scroller.offsetHeight;\r\n }\r\n\r\n this.maxScrollX = this.wrapperWidth - this.scrollerWidth;\r\n this.maxScrollY = this.wrapperHeight - this.scrollerHeight;\r\n\r\n this.hasHorizontalScroll = this.options.scrollX && this.maxScrollX < 0;\r\n this.hasVerticalScroll = this.options.scrollY && this.maxScrollY < 0;\r\n\r\n if (!this.hasHorizontalScroll) {\r\n this.maxScrollX = 0;\r\n this.scrollerWidth = this.wrapperWidth;\r\n }\r\n\r\n if (!this.hasVerticalScroll) {\r\n this.maxScrollY = 0;\r\n this.scrollerHeight = this.wrapperHeight;\r\n }\r\n\r\n this.wrapper.setAttribute('hasScroll', (this.hasHorizontalScroll ? 'x' : '') + (this.hasVerticalScroll ? 'y' : ''));\r\n });\r\n\r\n func.apply(this, args);\r\n };\r\n })(scrollLib.prototype._init);\r\n\r\n scrollLib.prototype.destroy = (function (func: any): any {\r\n return function (...args): void {\r\n func.apply(this, args);\r\n this._events = {};\r\n };\r\n })(scrollLib.prototype.destroy);\r\n\r\n scrollLib.prototype._initIndicators = (function (func: any): any {\r\n return function (...args): void {\r\n func.apply(this, args);\r\n\r\n /*if (this.options.fadeScrollbars) {\r\n $(this.wrapper).hover(() => {\r\n this.updateIndicatorsOpacity(0.5);\r\n }, () => {\r\n this.updateIndicatorsOpacity(0);\r\n });\r\n }*/\r\n\r\n if (this.options.overlayedScroll) {\r\n this.wrapper.style.visibility = 'hidden';\r\n\r\n _.forEach(this.indicators, indicator => {\r\n this.wrapper.parentNode.appendChild(indicator.wrapper);\r\n });\r\n }\r\n\r\n _.forEach(this.indicators, indicator => {\r\n utils.removeEvent(window, 'mouseup', indicator);\r\n\r\n if (indicator.options.interactive) {\r\n utils.removeEvent(indicator.indicator, 'touchstart', indicator);\r\n utils.removeEvent(window, 'touchmove', indicator);\r\n utils.removeEvent(window, 'touchend', indicator);\r\n\r\n utils.removeEvent(indicator.indicator, utils.prefixPointerEvent('pointerdown'), indicator);\r\n utils.removeEvent(window, utils.prefixPointerEvent('pointermove'), indicator);\r\n utils.removeEvent(window, utils.prefixPointerEvent('pointerup'), indicator);\r\n }\r\n\r\n // indicator.wrapperStyle.opacity = this.options.fadeScrollbars ? 0 : 0.5;\r\n\r\n indicator.setOpacity = value => {\r\n indicator.wrapperStyle[utils.style.transitionDuration] = '500ms';\r\n\r\n setTimeout(() => {\r\n indicator.wrapperStyle.opacity = value;\r\n indicator.visible = +value;\r\n }, 0);\r\n\r\n setTimeout(() => {\r\n indicator.wrapperStyle[utils.style.transitionDuration] = '0ms';\r\n }, 500);\r\n };\r\n\r\n indicator.refresh = (function (f: any): any {\r\n return function (...args): void {\r\n if (this.options.listenX) {\r\n this.wrapperStyle.marginLeft = this.scroller.scrollerOffsetLeft + 'px';\r\n this.wrapperStyle.marginRight = this.scroller.scrollerOffsetRight + 'px';\r\n }\r\n\r\n if (this.options.listenY) {\r\n this.wrapperStyle.marginTop = this.scroller.scrollerOffsetTop + 'px';\r\n this.wrapperStyle.marginBottom = this.scroller.scrollerOffsetBottom + 'px';\r\n }\r\n\r\n const oldHasHorizontal = this.scroller.hasHorizontalScroll;\r\n const oldHasVertical = this.scroller.hasVerticalScroll;\r\n\r\n this.scroller.hasHorizontalScroll = this.scroller.hasHorizontalScroll && this.scroller.options.scrollbarX;\r\n this.scroller.hasVerticalScroll = this.scroller.hasVerticalScroll && this.scroller.options.scrollbarY;\r\n\r\n f.apply(this, args);\r\n\r\n this.scroller.hasHorizontalScroll = oldHasHorizontal;\r\n this.scroller.hasVerticalScroll = oldHasVertical;\r\n\r\n if (this.scroller.options.overlayedScroll) {\r\n if (this.options.listenX) {\r\n if (this._defaultOffset === undefined) {\r\n this._defaultOffset = this.wrapper.offsetLeft;\r\n this._defaultSize = this.wrapper.offsetHeight;\r\n }\r\n\r\n if (properties.browser.mozilla) {\r\n this.wrapperStyle.width = 'auto';\r\n }\r\n const offsetRight = parseInt(getComputedStyle(this.wrapper).right);\r\n\r\n this.wrapperStyle.width = this.scroller.wrapperWidth - (this._defaultOffset + offsetRight) + 'px';\r\n this.wrapperStyle.left = this.scroller.wrapper.offsetLeft + this._defaultOffset + 'px';\r\n this.wrapperStyle.top = this.scroller.wrapper.offsetTop + this.scroller.wrapperHeight - this._defaultSize + 'px';\r\n }\r\n\r\n if (this.options.listenY) {\r\n if (this._defaultOffset === undefined) {\r\n this._defaultOffset = this.wrapper.offsetTop;\r\n this._defaultSize = this.wrapper.offsetWidth;\r\n }\r\n\r\n if (properties.browser.mozilla) {\r\n this.wrapperStyle.height = 'auto';\r\n }\r\n const offsetBottom = parseInt(getComputedStyle(this.wrapper).bottom);\r\n\r\n this.wrapperStyle.height = this.scroller.wrapperHeight - (this._defaultOffset + offsetBottom) + 'px';\r\n this.wrapperStyle.top = this.scroller.wrapper.offsetTop + this._defaultOffset + 'px';\r\n this.wrapperStyle.left = this.scroller.wrapper.offsetLeft + this.scroller.wrapperWidth - this._defaultSize + 'px';\r\n }\r\n }\r\n\r\n this.wrapperStyle.display = this.indicatorStyle.display;\r\n\r\n if (this.options.listenX) {\r\n this.wrapperWidth = this.wrapper.clientWidth;\r\n\r\n if (this.options.resize) {\r\n this.indicatorWidth = Math.max(\r\n Math.round((this.wrapperWidth * this.wrapperWidth) / (this.scroller.scrollerWidth || this.wrapperWidth || 1)),\r\n minScrollbarSize\r\n );\r\n this.indicatorStyle.width = this.indicatorWidth + 'px';\r\n }\r\n\r\n this.maxPosX = this.wrapperWidth - this.indicatorWidth;\r\n\r\n if (this.options.shrink === 'clip') {\r\n this.minBoundaryX = -this.indicatorWidth + minScrollbarSize;\r\n this.maxBoundaryX = this.wrapperWidth - minScrollbarSize;\r\n } else {\r\n this.maxBoundaryX = this.maxPosX;\r\n }\r\n\r\n this.sizeRatioX = this.options.speedRatioX || (this.scroller.maxScrollX && this.maxPosX / this.scroller.maxScrollX);\r\n }\r\n\r\n if (this.options.listenY) {\r\n this.wrapperHeight = this.wrapper.clientHeight;\r\n\r\n if (this.options.resize) {\r\n this.indicatorHeight = Math.max(\r\n Math.round(\r\n (this.wrapperHeight * this.wrapperHeight) / (this.scroller.scrollerHeight || this.wrapperHeight || 1)\r\n ),\r\n minScrollbarSize\r\n );\r\n this.indicatorStyle.height = this.indicatorHeight + 'px';\r\n }\r\n\r\n this.maxPosY = this.wrapperHeight - this.indicatorHeight;\r\n\r\n if (this.options.shrink === 'clip') {\r\n this.minBoundaryY = -this.indicatorHeight + minScrollbarSize;\r\n this.maxBoundaryY = this.wrapperHeight - minScrollbarSize;\r\n } else {\r\n this.maxBoundaryY = this.maxPosY;\r\n }\r\n\r\n this.sizeRatioY = this.options.speedRatioY || (this.scroller.maxScrollY && this.maxPosY / this.scroller.maxScrollY);\r\n }\r\n\r\n this.updatePosition();\r\n };\r\n })(indicator.refresh);\r\n\r\n indicator._start = (function (f: any): any {\r\n return function (...args): void {\r\n utils.addEvent(window, 'mouseup', this);\r\n\r\n f.apply(this, args);\r\n this.scroller._execEvent('indicatorStart');\r\n // this.setOpacity(1);\r\n };\r\n })(indicator._start);\r\n\r\n indicator._end = (function (f: any): any {\r\n return function (...args): void {\r\n utils.removeEvent(window, 'mouseup', this);\r\n\r\n if (this.initiated) {\r\n this.scroller._execEvent('indicatorEnd');\r\n // this.setOpacity(this.options.fadeScrollbars ? 0 : 0.5);\r\n }\r\n f.apply(this, args);\r\n };\r\n })(indicator._end);\r\n });\r\n };\r\n })(scrollLib.prototype._initIndicators);\r\n\r\n scrollLib.prototype.ensureVisible = function (el: any, deltaX?: number, deltaY?: number, time?: number): void {\r\n deltaX = deltaX || 0;\r\n deltaY = deltaY || 0;\r\n\r\n const pos = utils.offset(el);\r\n\r\n pos.left -= this.wrapperOffset.left;\r\n pos.top -= this.wrapperOffset.top;\r\n\r\n if (pos.left > this.x - deltaX) {\r\n pos.left += deltaX;\r\n } else if (this.x - this.wrapperWidth > pos.left - el.offsetWidth - deltaX) {\r\n pos.left += this.wrapperWidth - deltaX - el.offsetWidth;\r\n } else {\r\n pos.left = this.x;\r\n }\r\n\r\n if (pos.top > this.y - deltaY) {\r\n pos.top += deltaY;\r\n } else if (this.y - this.wrapperHeight > pos.top - el.offsetHeight - deltaY) {\r\n pos.top += this.wrapperHeight - deltaY - el.offsetHeight;\r\n } else {\r\n pos.top = this.y;\r\n }\r\n\r\n pos.left = pos.left > 0 ? 0 : pos.left < this.maxScrollX ? this.maxScrollX : pos.left;\r\n pos.top = pos.top > 0 ? 0 : pos.top < this.maxScrollY ? this.maxScrollY : pos.top;\r\n time = time === undefined ? Math.max(Math.abs(this.x - pos.left), Math.abs(this.y - pos.top)) : time;\r\n\r\n this.scrollTo(pos.left, pos.top, time);\r\n };\r\n\r\n scrollLib.prototype._getScrollTarget = function (target: HTMLElement | any): HTMLElement {\r\n while (target && !target.hasAttribute('hasScroll')) {\r\n target = target.parentNode;\r\n }\r\n\r\n return target;\r\n };\r\n\r\n scrollLib.prototype._checkOrigin = function (e: PointerEvent | any): boolean {\r\n let target = this._getScrollTarget(e.target);\r\n\r\n if (e.skipScroll) {\r\n target = this._getScrollTarget(target.parentNode) || target;\r\n }\r\n\r\n if (target === null) {\r\n return true;\r\n }\r\n\r\n // Clear popups if scrolling is not from popup itself\r\n if (this.wrapper === target && $(this.wrapper).parents('.popup-control').length === 0 && !(e instanceof KeyboardEvent)) {\r\n commonUtils.clearPopups();\r\n }\r\n\r\n if (e.target.ownerDocument.defaultView === window && this.wrapper !== target) {\r\n return false;\r\n }\r\n return true;\r\n };\r\n\r\n scrollLib.prototype._preventScroll = function (e: PointerEvent | any): boolean {\r\n let target = e.target;\r\n const prohibitedClassList = ['iScrollIndicator', 'selection-container', 'view-resizing', 'ui-draggable-handle'];\r\n\r\n while (target && target !== document.body && !prohibitedClassList.some(s => target.classList.contains(s))) {\r\n target = target.parentNode;\r\n }\r\n\r\n return target !== document.body;\r\n };\r\n\r\n scrollLib.prototype._stop = function (e: PointerEvent): void {\r\n this.options.momentum = !this.options.momentum;\r\n this._end(\r\n $.extend({}, e, {\r\n pointerId: this.pointerDownEvent.pointerId\r\n })\r\n );\r\n this.options.momentum = !this.options.momentum;\r\n };\r\n\r\n scrollLib.prototype._wheel = (function (func: any): any {\r\n return function (e: WheelEvent | any): void {\r\n if (e.shiftKey && this.hasHorizontalScroll && this.hasVerticalScroll) {\r\n if ('deltaX' in e) {\r\n Object.defineProperties(e, {\r\n deltaX: { value: e.deltaY },\r\n deltaY: { value: 0 }\r\n });\r\n } else if ('wheelDeltaX' in e) {\r\n Object.defineProperties(e, {\r\n wheelDeltaX: { value: e.wheelDeltaY },\r\n wheelDeltaY: { value: 0 }\r\n });\r\n } else if ('wheelDelta' in e) {\r\n Object.defineProperties(e, {\r\n wheelDeltaX: { value: e.wheelDelta },\r\n wheelDelta: { value: 0 }\r\n });\r\n } else if ('detail' in e) {\r\n Object.defineProperties(e, {\r\n wheelDeltaX: { value: -e.detail * 40 },\r\n detail: { value: 0 }\r\n });\r\n }\r\n }\r\n\r\n if (!e.hadVerticalScroll || e.shiftKey || this.hasVerticalScroll == e.hadVerticalScroll) {\r\n func.call(this, e);\r\n }\r\n\r\n if (this.deltaX || this.deltaY) {\r\n e.stopPropagation();\r\n }\r\n\r\n Object.defineProperties(e, {\r\n hadVerticalScroll: {\r\n value: this.hasVerticalScroll,\r\n configurable: true\r\n }\r\n });\r\n };\r\n })(scrollLib.prototype._wheel);\r\n\r\n scrollLib.prototype._start = (function (func: any): any {\r\n return function (e: PointerEvent | any): void {\r\n if (!e.isPrimary && !e.skipScroll) {\r\n e.skipScroll = true;\r\n this._stop(e);\r\n return;\r\n }\r\n\r\n // To prevent from scrolling by dragging content with mouse\r\n if (!this.options.allowDragScroll && pointerHelper.getPointerType(e) === pointerHelper.pointerType.mouse) {\r\n return;\r\n }\r\n\r\n if (!this._checkOrigin(e) || !this.options.canScroll() || this._preventScroll(e)) {\r\n return;\r\n }\r\n\r\n const def: JQueryDeferred = $(e.currentTarget).data('scrollDeferred');\r\n if (def != null) {\r\n def.done(() => {\r\n $(e.currentTarget).removeData('scrollDeferred');\r\n this._start.call(this, e);\r\n });\r\n return;\r\n }\r\n\r\n func.call(this, e);\r\n\r\n if (this.initiated) {\r\n this.pointerDownEvent = e;\r\n\r\n let target = e.target;\r\n while (target.nodeType !== 1) {\r\n target = target.parentNode;\r\n }\r\n\r\n if (target.tagName === 'SELECT' || target.tagName === 'INPUT' || target.tagName === 'TEXTAREA') {\r\n utils.addEvent(window, 'touchmove', this.handlers.touchMove);\r\n }\r\n\r\n this._initPointerEvents();\r\n }\r\n };\r\n })(scrollLib.prototype._start);\r\n\r\n scrollLib.prototype._move = (function (func: any): any {\r\n return function (e: PointerEvent): void {\r\n if (e.pointerId !== this.pointerDownEvent.pointerId || this.pointerDownEvent.preventClick) {\r\n if (!this.pointerDownEvent.skipScroll) {\r\n this._stop(e);\r\n }\r\n return;\r\n }\r\n\r\n func.call(this, e);\r\n };\r\n })(scrollLib.prototype._move);\r\n\r\n scrollLib.prototype._end = (function (func: any): any {\r\n return function (e: PointerEvent): void {\r\n if (e.pointerId !== this.pointerDownEvent.pointerId) {\r\n return;\r\n }\r\n this.pointerDownEvent = null;\r\n\r\n utils.removeEvent(window, 'touchmove', this.handlers.touchMove);\r\n this._initPointerEvents(true);\r\n\r\n func.call(this, e);\r\n };\r\n })(scrollLib.prototype._end);\r\n\r\n scrollLib.prototype._initEvents = (function (func: any): any {\r\n return function (remove: boolean): void {\r\n func.call(this, remove);\r\n\r\n const eventType = remove ? utils.removeEvent : utils.addEvent;\r\n\r\n this._initPointerEvents(true);\r\n\r\n if (utils.hasPointer && this.options.scrollToSelection) {\r\n eventType(this.wrapper, utils.prefixPointerEvent('pointerdown'), this.handlers.selectionStart);\r\n }\r\n\r\n eventType(this.wrapper, 'keydown', this.handlers.keyDown);\r\n eventType(this.wrapper, 'focusin', this.handlers.focus);\r\n eventType(this.wrapper, 'focus', this.handlers.focus, true);\r\n };\r\n })(scrollLib.prototype._initEvents);\r\n\r\n scrollLib.prototype._translate = (function (func: any): any {\r\n return function (x: number, y: number): void {\r\n this.deltaX = this.x - x;\r\n this.deltaY = this.y - y;\r\n\r\n if (this.options.disableTranslate) {\r\n this.x = x;\r\n this.y = y;\r\n\r\n if (this.indicators) {\r\n for (let i = this.indicators.length; i--; ) {\r\n this.indicators[i].updatePosition();\r\n }\r\n }\r\n } else {\r\n func.call(this, x, y);\r\n }\r\n };\r\n })(scrollLib.prototype._translate);\r\n\r\n scrollLib.prototype.resetPosition = (function (func: any): any {\r\n return function (time: number): boolean {\r\n if (this.pointerDownEvent != null && time === undefined) {\r\n return false;\r\n }\r\n return func.call(this, time);\r\n };\r\n })(scrollLib.prototype.resetPosition);\r\n\r\n scrollLib.prototype._initPointerEvents = function (remove: boolean): void {\r\n const eventType = remove ? utils.removeEvent : utils.addEvent;\r\n const target = this.options.bindToWrapper ? this.wrapper : window;\r\n\r\n if (utils.hasPointer && !this.options.disablePointer) {\r\n eventType(target, utils.prefixPointerEvent('pointermove'), this);\r\n eventType(target, utils.prefixPointerEvent('pointercancel'), this);\r\n eventType(target, utils.prefixPointerEvent('pointerup'), this);\r\n }\r\n };\r\n\r\n scrollLib.prototype._instantScrollTo = function (x: number, y: number): void {\r\n x = x > 0 ? 0 : x < this.maxScrollX ? this.maxScrollX : x;\r\n y = y > 0 ? 0 : y < this.maxScrollY ? this.maxScrollY : y;\r\n this._translate(x, y);\r\n };\r\n\r\n scrollLib.prototype._rAF = (function (): (callback: any) => any {\r\n for (const vendor of ['r', 'webkitR', 'mozR', 'oR', 'msR']) {\r\n if (vendor + 'equestAnimationFrame' in window) {\r\n return window[vendor + 'equestAnimationFrame'].bind(window);\r\n }\r\n }\r\n\r\n return callback => window.setTimeout(callback, 1000 / 60);\r\n })();\r\n\r\n scrollLib.prototype.scrollTo = (function (func: any): any {\r\n return function (x: number, y: number, time?: number, easing?: any): void {\r\n if (this.isAnimating) {\r\n this._onStopAnimation = () => {\r\n this._onStopAnimation = null;\r\n this.scrollTo(x, y, time, easing);\r\n };\r\n } else {\r\n func.call(this, x, y, time, easing);\r\n }\r\n };\r\n })(scrollLib.prototype.scrollTo);\r\n\r\n scrollLib.prototype._animate = function (destX: number, destY: number, duration: number, easingFn: any): void {\r\n const startX = this.x;\r\n const startY = this.y;\r\n const startTime = utils.getTime();\r\n const destTime = startTime + duration;\r\n\r\n const step = () => {\r\n let now = utils.getTime();\r\n\r\n if (this._onStopAnimation) {\r\n this.isAnimating = false;\r\n this._onStopAnimation && this._onStopAnimation();\r\n return;\r\n }\r\n\r\n if (now >= destTime) {\r\n this.isAnimating = false;\r\n this._translate(destX, destY);\r\n\r\n if (!this.resetPosition(this.options.bounceTime)) {\r\n this._execEvent('scrollEnd');\r\n }\r\n\r\n return;\r\n }\r\n\r\n now = (now - startTime) / duration;\r\n const easing = easingFn(now);\r\n const newX = (destX - startX) * easing + startX;\r\n const newY = (destY - startY) * easing + startY;\r\n this._translate(newX, newY);\r\n\r\n if (this.isAnimating) {\r\n this._rAF(step);\r\n }\r\n\r\n if (this.options.probeType === 3) {\r\n this._execEvent('scroll');\r\n }\r\n };\r\n\r\n this.isAnimating = true;\r\n step();\r\n };\r\n }\r\n}\r\n"],"sourceRoot":""}