{"version":3,"sources":["webpack:///./node_modules/devextreme/ui/grid_core/ui.grid_core.utils.js","webpack:///./node_modules/devextreme/ui/grid_core/ui.grid_core.sorting.js","webpack:///./node_modules/devextreme/ui/grid_core/ui.grid_core.sorting_mixin.js","webpack:///./node_modules/devextreme/ui/grid_core/ui.grid_core.rows.js","webpack:///./node_modules/devextreme/ui/grid_core/ui.grid_core.state_storing.js","webpack:///./node_modules/devextreme/ui/grid_core/ui.grid_core.state_storing_core.js","webpack:///./node_modules/devextreme/ui/grid_core/ui.grid_core.selection.js","webpack:///./node_modules/devextreme/ui/grid_core/ui.grid_core.validating.js","webpack:///./node_modules/devextreme/ui/grid_core/ui.grid_core.virtual_scrolling.js","webpack:///./node_modules/devextreme/ui/grid_core/ui.grid_core.virtual_scrolling_core.js","webpack:///./node_modules/devextreme/ui/grid_core/ui.grid_core.search.js","webpack:///./node_modules/devextreme/ui/grid_core/ui.grid_core.virtual_columns.js","webpack:///./node_modules/devextreme/ui/grid_core/ui.grid_core.virtual_columns_core.js","webpack:///./node_modules/devextreme/ui/grid_core/ui.grid_core.row_dragging.js"],"names":["exports","default","_renderer","_interopRequireDefault","_type","_deferred","_filtering","_string","_iterator","_extend","_position","_data","_common","_load_panel","_utils","_format_helper","_window","_events_engine","obj","__esModule","DATE_INTERVAL_SELECTORS","year","value","getFullYear","month","getMonth","day","getDate","quarter","Math","floor","hour","getHours","minute","getMinutes","second","getSeconds","getIntervalSelector","data","arguments","this","calculateCellValue","isDefined","isDateType","dataType","nameIntervalSelector","groupInterval","Number","setEmptyText","$container","get","textContent","normalizeSortingInfo","sort","result","i","length","isExpanded","formatValue","options","valueText","format","toString","formatObject","getDisplayFormat","target","customizeText","call","getSummaryText","summaryItem","summaryTexts","displayFormat","columnCaption","summaryType","valueFormat","getWidgetInstance","$element","editorData","dxComponents","widgetName","_default","renderNoDataText","element","noDataClass","addWidgetPrefix","noDataElement","find","last","isVisible","_dataController","isEmpty","isLoading","addClass","appendTo","removeClass","text","_getNoDataText","renderLoadPanel","isLocalStore","loadPanelOptions","_loadPanel","remove","option","enabled","extend","shading","message","position","$window","getWindow","height","of","boundary","collision","container","_createComponent","getIndexByKey","key","items","keyName","index","Array","isArray","item","equalByValue","combineFilters","filters","operation","resultFilter","push","checkChanges","changes","changeNames","changesWithChangeNamesCount","equalFilterParameters","filter1","filter2","isFunction","columnIndex","toComparable","filterValue","proxyMethod","instance","methodName","defaultResult","dataSource","_dataSource","apply","getFormatOptionsByColumn","column","trueText","falseText","getDisplayValue","rowType","displayValueMap","calculateDisplayValue","lookup","calculateGroupValue","getGroupRowSummaryText","summaryItems","getFormatByDataType","getHeaderFilterGroupParameters","remoteGrouping","dataField","name","getGroupInterval","each","interval","selector","bind","sortingMethod","compare","equalSortParameters","sortParameters1","sortParameters2","ignoreIsExpanded","selector1","selector2","originalCallback","desc","Boolean","getPointsByColumns","pointCreated","isVertical","startColumnIndex","offset","rtlEnabled","cellsLength","notCreatePoint","eq","css","point","x","left","getBoundingRect","width","y","top","prevItemOffset","getExpandCellTemplate","allowRenderToDetachedContainer","render","isContinuation","row","isNewRow","rowsView","component","getView","setAria","localize","getSelectionRange","focusedElement","selectionStart","selectionEnd","e","setSelectionRange","selectionRange","focusAndSelectElement","trigger","isSelectTextOnEditingStart","keyboardController","getController","isEditingNavigationMode","_isFastEditingStarted","is","editor","closest","when","_loadItemDeferred","done","select","getLastResizableColumnIndex","columns","resultWidths","lastColumnIndex","hasResizableColumns","some","command","fixed","allowResizing","isElementInCurrentGrid","controller","getWidgetContainerClass","parent","module","_click","_uiGrid_core","_message","_index","defaultOptions","sorting","mode","ascendingText","descendingText","clearText","showSortIndexes","extenders","views","columnHeadersView","_createRow","_this","$row","callBase","on","addNamespace","createAction","_processHeaderAction","event","currentTarget","that","$cellElementFromEvent","rowIndex","slice","getCellElements","$cellElement","_columnsController","getVisibleColumns","editingController","editingMode","isEditing","_isSortableElement","groupIndex","shiftKey","ctrlKey","setTimeout","changeSortOrder","_renderCellContent","$cell","_applyColumnState","rootElement","showColumnLines","_columnOptionChanged","changeTypes","_updateIndicators","optionChanged","args","_invalidate","handled","headerPanel","_createGroupPanelItem","$rootElement","groupColumn","$item","_processGroupItemAction","alignment","allowSorting","sortOrder","groupColumnIndex","_this2","ariaSortState","$sortIndicator","sortingMode","$indicatorsContainer","_getIndicatorContainer","children","isSortingAllowed","toggleClass","columnOption","sortIndex","_getIndicatorClassName","_renderIndicator","$indicator","indicator","columnAlignment","prepend","_updateIndicator","indicatorName","_getIndicatorElements","returnAll","$indicatorElements","not","_style","_uiGrid_core2","_ui","_remove_event","_browser","getMaxHorizontalScrollOffset","scrollable","scrollWidth","clientWidth","defaultCellTemplate","hoverStateEnabled","scrolling","useNative","loadPanel","showIndicator","indicatorSrc","showPane","rowTemplate","columnAutoWidth","noDataText","wordWrapEnabled","showRowLines","rowAlternationEnabled","activeStateEnabled","twoWayBindingEnabled","ColumnsView","inherit","isDataTextEmpty","encodeHtml","innerHTML","_getDefaultTemplate","html","_getDefaultGroupTemplate","caption","groupContinuedMessage","groupContinuesMessage","_update","_getCellTemplate","showWhenGrouped","cellTemplate","groupCellTemplate","isGroup","isDataRow","visible","hide","isRowExpanded","_rowPrepared","rowOptions","_isAltRow","watch","_setAriaRowIndex","isPagerMode","pageIndex","pageSize","getRowIndexOffset","_afterRowPrepared","arg","dataController","getVisibleRows","dispose","generateDataValues","repaintRows","deep","skipImmediate","rowElement","_renderScrollable","force","append","_renderLoadPanel","getScrollable","isLoaded","getColumns","allColumnsHasWidth","minWidth","_hasHeight","_isColumnFixing","_renderScrollableCore","_handleScroll","_isScrollByEvent","_scrollTop","scrollOffset","_scrollLeft","_scrollRight","scrollChanged","fire","dxScrollableOptions","_createScrollableOptions","scrollHandler","onScroll","onStop","_scrollable","_scrollableContainer","_$container","_renderContent","contentElement","tableElement","empty","_findContentElement","_updateContent","newTableElement","change","getTableElement","changeType","executors","highlightChanges","rowInsertedClass","rowIndices","$newRowElement","_getRowElements","$rowsElement","$rowElement","columnIndices","toggle","_updateCells","replaceWith","insertBefore","insertAfter","prependTo","isLiveUpdate","setTableElement","_createEmptyRow","className","isFixed","getFixedColumns","_createCell","isNumeric","_appendEmptyRow","$table","$emptyRow","location","$tBodies","_getBodies","isTableContainer","first","$colgroup","_renderFreeSpaceRow","$tableElement","$freeSpaceRowElement","_wrapRowIfNeed","_checkRowKeys","rows","_getRows","keyExpr","store","fireError","_needUpdateRowHeight","itemsCount","_rowHeight","_getRowsHeight","toArray","reduce","sum","_updateRowHeight","rowsHeight","$content","$rows","_getFreeSpaceRowElements","tableElements","getTableElements","_rowClick","executeAction","evaluate","expr","compileGetter","getter","_rowDblClick","_getColumnsCountBeforeGroups","type","_getGroupCellOptions","columnsCountBeforeGroups","colspan","_renderCells","_renderGroupedCells","values","expandColumn","groupCellOptions","allowCollapsing","scrollingMode","cssClass","_renderCell","groupColumnAlignment","getDefaultAlignment","_renderRows","updateFreeSpaceRowHeight","_renderRow","renderTemplate","_renderTable","resizeCompleted","add","resizeCompletedHandler","scrollableInstance","document","_visibilityChanged","_createTable","_renderCore","_lastColumnWidths","_getCellOptions","summaryCells","displayValue","parameters","oldValue","resized","resizedCallbacks","groupingTextsOptions","isContinuationOnNextPage","_setRowsOpacityCore","visibleColumns","columnsController","columnID","isBand","hasClass","isParentBandColumn","opacity","_getDevicePixelRatio","devicePixelRatio","getCellOptions","columnIdentifier","cellOptions","isString","getRow","_this3","itemCount","freeSpaceRowElements","totalCount","isFreeSpaceRowVisible","deferUpdate","scrollbarWidth","getScrollbarWidth","elementHeightWithoutScrollbar","showFreeSpaceRow","outerHeight","resultHeight","ceil","parseFloat","_getHeightCorrection","deferRender","show","_updateLastRowBorder","freeSpaceRowCount","pageCount","setHeight","isZoomedWebkit","webkit","hasExtraBorderTop","mozilla","version","optionNames","grouping","visibleWidth","_fireColumnResizedCallbacks","init","_editorFactoryController","loadingChanged","messageText","setLoading","dataSourceChanged","_handleDataChanged","publicMethods","contentWidth","isHorizontal","scrollableContainer","clientHeight","offsetHeight","offsetWidth","lastColumnWidths","columnWidths","_updateScrollable","dxScrollable","getInstance","update","_updateHorizontalScrollPosition","scrollLeft","maxHorizontalScrollOffset","scrollTo","_resizeCore","_height","hasHeight","animation","hasWindow","visibilityOptions","clearTimeout","_hideLoadingTimeoutID","setRowsOpacity","_getCellElementsCore","$cells","groupCellIndex","filter","getTopVisibleItemIndex","isFloor","itemIndex","prevOffsetTop","offsetTop","scrollPosition","$contentElement","contentElementOffsetTop","rowElements","round","getTopVisibleRowData","_scrollToElement","scrollToElement","_tableElement","fullName","setScrollerSpacing","processLoadState","selectionController","exportController","columnsChanged","updateState","getUserState","selectionChanged","selectedRowKeys","selectionFilter","_initialPageSize","_initialFilterValue","changed","state","pagerView","allowedPageSizes","getPageSizes","filterPanel","filterEnabled","focusedRowKey","getDataState","selectionOnlyChanged","exportSelectionOnly","selectionOnly","stateStoring","storageKey","customLoad","customSave","savingTimeout","controllers","StateStoringController","stateLoaded","getDataSource","_fireContentReadyAction","isStateLoading","_state","applyState","isEnabled","oldState","newState","oldStateHash","getKeyHash","newStateHash","save","searchText","isVirtualScrollingMode","showPageSizeSelector","beginUpdate","setUserState","endUpdate","filterSyncController","hasFilterState","getFilterValueFromColumns","getFilterValue","reset","stateStoringController","callbackNames","concat","_refreshDataSource","_restoreStateTimeoutID","deferred","Deferred","load","always","resolve","fail","error","_handleLoadError","reject","promise","selection","_fireSelectionChanged","isDeferredSelection","_storage","getStorage","getUniqueStorageKey","DATE_REGEX","parseDates","isPlainObject","date","exec","Date","UTC","ViewController","storage","sessionStorage","localStorage","protocol","msie","Error","_loadState","JSON","parse","getItem","log","_saveState","setItem","stringify","_isLoaded","_isLoading","_windowUnloadHandler","_savingTimeoutID","loadResult","fromPromise","off","_uiData_grid","_support","_hold","_selection","selectionCellTemplate","selectionHeaderTemplate","SHOW_CHECKBOXES_MODE","processLongTap","dxEvent","getRowIndex","isSelectionWithCheckboxes","stopSelectionWithCheckboxes","startSelectionWithCheckboxes","changeItemSelection","control","showCheckBoxesMode","allowSelectAll","selectAllMode","maxFilterLengthInRequest","Controller","isRowSelected","renderSelectCheckBoxContainer","_renderSelectAllCheckBox","_attachSelectAllCheckBoxClickEvent","_selectionMode","_isSelectionWithCheckboxes","_createSelection","_updateSelectColumn","excludeValidators","_getSelectionConfig","selectionOptions","selectedKeys","keyOf","dataFields","plainItems","isItemSelected","selected","isSelectableItem","getItemData","oldData","getCombinedFilter","onSelectionChanged","_updateSelectedItems","isSelectColumnVisible","addCommandColumn","visibleIndex","headerCellTemplate","argument","_updateCheckboxesState","isDeferredMode","selectedItemKeys","removedItemKeys","keyIndex","isComplexKey","isSeveralRowsSelected","selectionChangedOptions","changedItemIndexes","getChangedItemIndexes","updateItems","itemIndexes","addedItemKeys","_selectedItemsInternalChange","selectedRowsData","selectedItems","currentSelectedRowKeys","currentDeselectedRowKeys","isDataItem","isSelected","oldSelectionMode","selectionMode","selectRows","updateColumns","_isOnePageSelectAll","isSelectAll","getSelectAllState","selectAll","deselectAll","clearSelection","refresh","preserve","isDeselect","getSelectedRowKeys","getSelectedItemKeys","keys","deselectRows","selectRowsByIndexes","indexes","prototype","getSelectedRowsData","getSelectedItems","getRowIndexDelta","focusedItemIndex","_focusedItemIndex","_loadDataSource","_processDataItem","hasSelectColumn","dataItem","d","_repaintChangesOnly","_applyChange","forEach","currentItem","_items","_endUpdateCore","_changes","isUpdateSelection","every","map","a","b","removedKeys","contextMenu","_contextMenuPrepared","originalEvent","_updateSelectAllValue","$editor","dxCheckBox","isEmptyData","groupElement","createEditor","parentType","editorOptions","tabIndex","setValue","preventDefault","_attachCheckBoxClickEvent","_renderSelectCheckBox","_e$event","shift","_","_updateCheckboxesClass","touch","stopPropagation","isSelectionDisabled","isClickableElement","isCommandKeyPressed","$target","isCheckBoxesHidden","_array_utils","_selectors","_button","_pointer","_validation_engine","_validator","_overlay","_load_indicator","_toConsumableArray","arr","_arrayLikeToArray","_arrayWithoutHoles","iter","Symbol","iterator","from","_iterableToArray","o","minLen","n","Object","constructor","test","_unsupportedIterableToArray","TypeError","_nonIterableSpread","len","arr2","FORM_BASED_MODES","VALIDATION_STATUS","validationResultIsValid","cellValueShouldBeValidated","editing","texts","validationCancelChanges","validating","_editingController","_validationState","_rowIsValidated","validationData","_getValidationData","validated","create","isValid","_getBrokenRules","validationResults","brokenRules","brokenRule","_rowValidating","getChangeByKey","newData","_getOldData","errorText","getHiddenValidatorsErrorText","brokenRulesMessages","isGroupExpandColumn","isVisibleColumn","validator","join","validate","isFull","completeList","editMode","getEditMode","_isValidationInProgress","addDeferred","getChanges","_ref","validationResult","validateGroup","_currentCellValidator","_findGroup","_validationResult","getGroupConfig","validators","resetRowValidationResults","complete","isRowDataModified","isEmptyObject","updateValidationState","indexOf","setDisableApplyValidationResults","setValidator","renderCellPendingIndicator","$indicatorContainer","disposeCellPendingIndicator","validationStatusChanged","validationGroup","updateCellValidationResult","rowKey","validatorInitialized","validatorDisposing","getCellValidationResult","status","cancelCellValidationResult","applyValidationResult","rule","requestIsDisabled","disabledPendingId","id","_disableApplyValidationResults","$focus","focused","down","editCellTemplate","getEditorInstance","createValidator","showEditorAlways","validationRules","needCreateValidator","isEditRow","isCellOrBatchEditingAllowed","isCellOrBatchEditMode","allowUpdating","_addInternalData","getValue","useDefaultValidator","adapter","applyValidationResults","dataGetter","createObjectWithChanges","onInitialized","onDisposing","validationRequestsCallbacks","flag","getDisableApplyValidationResults","isCurrentValidatorProcessing","_ref2","validateCell","cellParams","stateRestored","_ref3","_ref4","_validationData$valid","removeCellValidationResult","_ref5","_ref6","isInvalidCell","_ref7","getCellValidator","_ref8","groupConfig","v","setCellValidationStatus","validationStatus","_addChange","validatingController","_handleChangesChange","_updateRowAndPageIndices","_this4","startInsertIndex","_ref9","_pageIndex","getEditFormOptions","detailOptions","editFormOptions","_updateEditRowCore","skipCurrentRow","isCustomSetCellValue","_editForm","_needInsertItem","_ref10","_prepareEditCell","params","isNotCanceled","processItems","addInValidItem","isInsert","getIndexByChange","splice","processDataItem","isInserted","editIndex","_createInvisibleColumnValidators","_this5","invisibleColumns","getInvisibleColumns","groupColumns","getGroupColumns","invisibleColumnValidators","getRowIndexByKey","isCellVisible","_beforeSaveEditData","_this6","disposeValidators","executeOperation","isFullValid","_focusEditingCell","_resetEditRowKey","_resetEditColumnName","_beforeEditCell","_rowsView","_getCellElement","_afterSaveEditData","cancel","$firstErrorRow","_this7","$errorRow","_showErrorRow","_needUpdateRow","editRowIndex","getEditRowIndex","validationState","resetRowAndPageIndices","_this8","_beforeCancelEditData","$popupContent","errorHandling","getPopupContent","renderErrorRow","updateFieldValue","_this9","currentValidator","refocus","highlightDataCell","isEditableCell","cellModified","isCellModified","isValidated","needValidation","setCellValue","isCellInvalid","editorFactory","_showRevertButton","_this10","$tooltipElement","$overlayContainer","tooltipOptions","propagateOutsideClick","closeOnOutsideClick","closeOnTargetScroll","contentTemplate","$buttonElement","buttonOptions","icon","hint","onClick","cancelEditData","my","at","boundaryOffset","onPositioned","_positionedHandler","_hideFixedGroupCell","overlayOptions","$nextFixedRowElement","$groupCellElement","isFixedColumns","isFormEditMode","nextRowOptions","next","getRowElement","style","visibility","isOverlayVisible","__skipPositionProcessing","isRevertButton","needRepaint","normalizedPosition","_normalizeValidationMessagePositionAndMaxWidth","repaint","_showValidationMessage","messages","revertTooltip","_this11","editorPopup","myPosition","atPosition","errorMessageText","$overlayElement","_shiftValidationMessageIfNeed","fixedColumns","$cellElements","visibleTableWidth","_getWidths","w1","w2","validationMessageWidth","outerWidth","needMaxWidth","getCellIndex","boundaryNonFixedColumnsInfo","firstNonFixedColumnIndex","lastNonFixedColumnIndex","endColumnIndex","getBoundaryNonFixedColumnsInfo","maxWidth","$revertContent","contentOffset","revertContentOffset","_getTooltipsSelector","invalidMessageClass","loseFocus","skipValidator","updateCellState","hideBorder","_change$data","_getFocusCellSelector","isSaving","errorMessages","focus","_this12","$tooltips","waitForDeferredOperations","_isCellChanged","oldRow","newRow","visibleRowIndex","cell","cells","oldValidationStatus","newValidationStatus","rowIsModified","modifiedValues","cellIsMarkedAsInvalid","cellElement","$rowElements","$freeSpaceRowElements","$tooltipContent","_formItemPrepared","_this13","_cellPrepared","_translator","_updateLoading","removeEmptyRows","members","isVirtualMode","isAppendMode","isVirtualRowRendering","rowRenderingMode","_correctCount","count","fromEnd","isItemCountableFunc","isItemCountableByDataSource","isGroupItemCountable","VirtualScrollingDataSourceAdapterExtender","beginPageIndex","_virtualScrollController","viewportSize","getViewportItemIndex","VirtualScrollController","totalItemsCount","hasKnownLastPage","isCustomLoading","updateLoading","viewportItems","onChanged","changingDuration","_renderTime","_handleLoadingChanged","_isLoadingAll","_startLoadTime","handleDataChanged","_customizeRemoteOperations","operationTypes","reload","skip","delay","isBase","loadOptions","resetPagesCache","_changeRowExpandCore","virtualScrollController","r","delayDeferred","_delayDeferred","storeLoadOptions","paginate","_skipCorrection","VirtualScrollingRowsViewExtender","$emptyRows","tBodies","rowCount","_dataController$state","pageChanged","scrollToPage","_scrollToCurrentPageOnResize","resizeHandler","itemSize","getItemSize","itemSizes","getItemSizes","renderDelayedTemplates","_updateContentPosition","startRenderTime","virtualItemsCount","_contentHeight","_removeRowsElements","contentTable","removeCount","errorHandlingController","removeErrorRow","_restoreErrorRow","hasChanges","_updateBottomLoading","_addVirtualRow","$virtualRow","_getRowHeights","_correctRowHeights","rowHeights","correctedRowHeights","visibleRows","firstCountableItem","isRender","rowHeight","viewportItemSize","_updateContentPositionCore","setContentSize","getContentOffset","bottom","$tables","$virtualRows","_isFixedTableRendering","contentHeight","$contentTable","virtualTable","_contentTableHeight","getVirtualContentSize","move","_isTableLinesDisplaysCorrect","_isColumnElementsEqual","_renderVirtualTableContent","table","$columns","$virtualColumns","_createColGroup","prop","freeSpaceCellsHtml","columnLinesClass","createFreeSpaceRowHtml","classes","_getCellClasses","classString","isExpandColumn","_findBottomLoadPanel","$bottomLoadPanel","virtualMode","appendMode","showBottomLoading","bottomLoadPanelElement","setViewportPosition","viewportHeight","_windowScroll","subscribeToExternalScrollers","scrollPos","loadIfNeed","setColumnWidths","widths","_scrollTimeoutID","timeout","updateTimeout","minTimeout","renderingThreshold","removeInvisiblePages","rowPageSize","preloadEnabled","loadTwoPagesOnStart","dataSourceAdapter","baseResult","initVirtualRows","getRowPageSize","rowsScrollController","_rowsScrollController","getItemIndexByPosition","rowIndexOffset","isSortingOperation","virtualRowsRendering","_visibleItems","_rowPageIndex","isItemCountable","_fireChanged","correctCount","isNextAfterLast","countableOnly","begin","take","positionChanged","_that$_dataSource","setViewportItemIndex","_updateItemsCore","delta","visibleItems","isRefresh","newItem","unshift","allItems","byLoadedRows","sizes","resetCurrentTotalCount","resizing","resize","_resizeTimeout","diff","_lastTime","getContentHeightLimit","getPixelRatio","_class","_callbacks","_isVirtual","needTwoPagesLoading","_viewportItemIndex","window","browser","scrollChangedHandler","$targetElement","$scrollElement","scrollableArray","scrollToArray","disposeArray","getElementOffset","$scrollableElement","scrollableOffset","scrollTop","widgetScrollStrategy","eventName","handler","subscribeToScrollEvents","isDocument","nodeName","eventsStrategy","createWindowScrollHandler","pos","topOffset","scrollMethod","getPreloadPageCount","previous","realViewportSize","_viewportSize","_viewportItemSize","_itemSizes","getViewportPageCount","getBeginPageIndex","_cache","getEndPageIndex","fireChanged","_isChangedFiring","processDelayChanged","_isDelayChanged","processChanged","isDelayChanged","removeCacheItem","isObject","isPrepend","removeItemCount","itemsLength","_lastPageIndex","ctor","isVirtual","_sizeRatio","_loadingPageIndexes","beginItemsCount","end","max","scrollingTimeout","min","_setViewportPositionCore","getViewportPosition","defaultItemSize","itemOffset","itemOffsetsWithSize","itemOffsetWithSize","parseInt","itemOffsetDiff","size","_contentSize","virtualContentSize","contentHeightLimit","getItemOffset","isEnd","currentItemIndex","newPageIndex","lastPageSize","maxPageIndex","defaultPageIndex","endPageIndex","pageIndexForLoad","getPageIndexForLoad","loadCore","lastCacheLength","cacheItem","isDelayed","pop","subscribeToWindowScrollEvents","_dom_adapter","_query","allowSearch","allowFiltering","parseValue","getSearchPanelOptions","searchPanel","placeholder","highlightSearchText","highlightCaseSensitive","searchVisibleColumnsOnly","_calculateAdditionalFilter","searchFilter","onQueryDone","valueGetter","valueExpr","_i","createFilterExpression","calculateFilterExpression","displayExpr","enumerate","calculateSearchFilter","searchByText","_applyFilter","_getToolbarItems","_prepareSearchItem","searchPanelOptions","toolbarItem","template","$search","updateValueTimeout","inputAttr","NAME","locateInMenu","getSearchTextEditor","$searchPanel","dxTextBox","_searchParams","_getFormattedSearchText","formatOptions","_getStringNormalizer","isCaseSensitive","str","toLowerCase","_findHighlightingTextNodes","_$items","$items","$parent","stringNormalizer","normalizedSearchText","getVisibleIndex","$contents","contents","node","nodeType","nodeValue","_highlightSearchTextCore","$textNode","$searchTextSpan","firstContentElement","substr","after","createTextNode","_highlightSearchText","isEquals","textNodes","textNode","_highlightTimer","_updateCell","isOnForm","getWidths","HeaderFooterViewExtender","columnRenderingMode","columnPageSize","columnRenderingThreshold","_beginPageIndex","_endPageIndex","_virtualVisibleColumns","resetColumnsCache","currentPosition","getColumnPageSize","getTotalWidth","_lastWidth","_fireColumnsChanged","all","setScrollPosition","_changedTimeout","_setScrollPositionCore","needColumnsChanged","transparentColumnIndex","c","visibleColumnsHash","getRowCount","startIndex","endIndex","beginFixedColumnCount","beginFixedColumns","beginColumns","beginWidth","endFixedColumnCount","endFixedColumns","endColumns","endWidth","columnsInfo","createColumnsInfo","getColumnIndexOffset","leftFixedColumnCount","footerView","foreachColumnInfo","info","newInfo","columnInfo","cellColspan","callback","offsets","columnCount","lastProcessedIndexes","colIndex","processedColumnCount","rowspan","_sortable","rowDragging","showDragIcons","dropFeedbackMode","allowReordering","allowDropInsideItem","_updateHandleColumn","_allowReordering","group","isHandleColumnVisible","_getHandleTemplate","isFixedTableRendering","sortableName","sortableFixedName","currentSortableName","anotherSortableName","togglePointerEventsStyle","_this$sortableFixedNa","dragTemplate","_getDraggableRowTemplate","handle","onDragStart","_rowDragging$onDragSt","fromIndex","itemData","onDragEnter","onDragLeave","onDragEnd","_rowDragging$onDragEn","onOptionChanged","_sortableFixed","sortable","_getDraggableGridOptions","gridOptions","parentId","showBorders","showColumnHeaders","showScrollbar","pager","loadingTimeout","columnFixing","fixedPosition","onRowPrepared","clone","$dataGridContainer"],"mappings":"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","file":"vendors~f26bc99d.da8d0b524bb255aa47b0.bundle.js","sourcesContent":["/**\r\n * DevExtreme (ui/grid_core/ui.grid_core.utils.js)\r\n * Version: 20.2.7\r\n * Build date: Thu Apr 22 2021\r\n *\r\n * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED\r\n * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/\r\n */\r\n\"use strict\";\r\nexports.default = void 0;\r\nvar _renderer = _interopRequireDefault(require(\"../../core/renderer\"));\r\nvar _type = require(\"../../core/utils/type\");\r\nvar _deferred = require(\"../../core/utils/deferred\");\r\nvar _filtering = _interopRequireDefault(require(\"../shared/filtering\"));\r\nvar _string = require(\"../../core/utils/string\");\r\nvar _iterator = require(\"../../core/utils/iterator\");\r\nvar _extend = require(\"../../core/utils/extend\");\r\nvar _position = require(\"../../core/utils/position\");\r\nvar _data = require(\"../../core/utils/data\");\r\nvar _common = require(\"../../core/utils/common\");\r\nvar _load_panel = _interopRequireDefault(require(\"../load_panel\"));\r\nvar _utils = _interopRequireDefault(require(\"../../data/utils\"));\r\nvar _format_helper = _interopRequireDefault(require(\"../../format_helper\"));\r\nvar _window = require(\"../../core/utils/window\");\r\nvar _events_engine = _interopRequireDefault(require(\"../../events/core/events_engine\"));\r\n\r\nfunction _interopRequireDefault(obj) {\r\n return obj && obj.__esModule ? obj : {\r\n \"default\": obj\r\n }\r\n}\r\nvar DATAGRID_SELECTION_DISABLED_CLASS = \"dx-selection-disabled\";\r\nvar DATAGRID_GROUP_OPENED_CLASS = \"dx-datagrid-group-opened\";\r\nvar DATAGRID_GROUP_CLOSED_CLASS = \"dx-datagrid-group-closed\";\r\nvar DATAGRID_EXPAND_CLASS = \"dx-datagrid-expand\";\r\nvar NO_DATA_CLASS = \"nodata\";\r\nvar DATE_INTERVAL_SELECTORS = {\r\n year: function(value) {\r\n return value && value.getFullYear()\r\n },\r\n month: function(value) {\r\n return value && value.getMonth() + 1\r\n },\r\n day: function(value) {\r\n return value && value.getDate()\r\n },\r\n quarter: function(value) {\r\n return value && Math.floor(value.getMonth() / 3) + 1\r\n },\r\n hour: function(value) {\r\n return value && value.getHours()\r\n },\r\n minute: function(value) {\r\n return value && value.getMinutes()\r\n },\r\n second: function(value) {\r\n return value && value.getSeconds()\r\n }\r\n};\r\nvar getIntervalSelector = function() {\r\n var data = arguments[1];\r\n var value = this.calculateCellValue(data);\r\n if (!(0, _type.isDefined)(value)) {\r\n return null\r\n } else {\r\n if (isDateType(this.dataType)) {\r\n var nameIntervalSelector = arguments[0];\r\n return DATE_INTERVAL_SELECTORS[nameIntervalSelector](value)\r\n } else {\r\n if (\"number\" === this.dataType) {\r\n var groupInterval = arguments[0];\r\n return Math.floor(Number(value) / groupInterval) * groupInterval\r\n }\r\n }\r\n }\r\n};\r\nvar equalSelectors = function(selector1, selector2) {\r\n if ((0, _type.isFunction)(selector1) && (0, _type.isFunction)(selector2)) {\r\n if (selector1.originalCallback && selector2.originalCallback) {\r\n return selector1.originalCallback === selector2.originalCallback && selector1.columnIndex === selector2.columnIndex\r\n }\r\n }\r\n return selector1 === selector2\r\n};\r\n\r\nfunction isDateType(dataType) {\r\n return \"date\" === dataType || \"datetime\" === dataType\r\n}\r\nvar setEmptyText = function($container) {\r\n $container.get(0).textContent = \"\\xa0\"\r\n};\r\nvar normalizeSortingInfo = function(sort) {\r\n sort = sort || [];\r\n var result = _utils.default.normalizeSortingInfo(sort);\r\n for (var i = 0; i < sort.length; i++) {\r\n if (sort && sort[i] && void 0 !== sort[i].isExpanded) {\r\n result[i].isExpanded = sort[i].isExpanded\r\n }\r\n if (sort && sort[i] && void 0 !== sort[i].groupInterval) {\r\n result[i].groupInterval = sort[i].groupInterval\r\n }\r\n }\r\n return result\r\n};\r\nvar formatValue = function(value, options) {\r\n var valueText = _format_helper.default.format(value, options.format) || value && value.toString() || \"\";\r\n var formatObject = {\r\n value: value,\r\n valueText: options.getDisplayFormat ? options.getDisplayFormat(valueText) : valueText,\r\n target: options.target || \"row\",\r\n groupInterval: options.groupInterval\r\n };\r\n return options.customizeText ? options.customizeText.call(options, formatObject) : formatObject.valueText\r\n};\r\nvar getSummaryText = function(summaryItem, summaryTexts) {\r\n var displayFormat = summaryItem.displayFormat || summaryItem.columnCaption && summaryTexts[summaryItem.summaryType + \"OtherColumn\"] || summaryTexts[summaryItem.summaryType];\r\n return formatValue(summaryItem.value, {\r\n format: summaryItem.valueFormat,\r\n getDisplayFormat: function(valueText) {\r\n return displayFormat ? (0, _string.format)(displayFormat, valueText, summaryItem.columnCaption) : valueText\r\n },\r\n customizeText: summaryItem.customizeText\r\n })\r\n};\r\nvar getWidgetInstance = function($element) {\r\n var editorData = $element.data && $element.data();\r\n var dxComponents = editorData && editorData.dxComponents;\r\n var widgetName = dxComponents && dxComponents[0];\r\n return widgetName && editorData[widgetName]\r\n};\r\nvar equalFilterParameters = function equalFilterParameters(filter1, filter2) {\r\n if (Array.isArray(filter1) && Array.isArray(filter2)) {\r\n if (filter1.length !== filter2.length) {\r\n return false\r\n } else {\r\n for (var i = 0; i < filter1.length; i++) {\r\n if (!equalFilterParameters(filter1[i], filter2[i])) {\r\n return false\r\n }\r\n }\r\n }\r\n return true\r\n } else {\r\n if ((0, _type.isFunction)(filter1) && filter1.columnIndex >= 0 && (0, _type.isFunction)(filter2) && filter2.columnIndex >= 0) {\r\n return filter1.columnIndex === filter2.columnIndex && (0, _data.toComparable)(filter1.filterValue) === (0, _data.toComparable)(filter2.filterValue)\r\n } else {\r\n return (0, _data.toComparable)(filter1) == (0, _data.toComparable)(filter2)\r\n }\r\n }\r\n};\r\nvar _default = {\r\n renderNoDataText: function($element) {\r\n var that = this;\r\n $element = $element || this.element();\r\n if (!$element) {\r\n return\r\n }\r\n var noDataClass = that.addWidgetPrefix(NO_DATA_CLASS);\r\n var noDataElement = $element.find(\".\" + noDataClass).last();\r\n var isVisible = this._dataController.isEmpty();\r\n var isLoading = this._dataController.isLoading();\r\n if (!noDataElement.length) {\r\n noDataElement = (0, _renderer.default)(\"\").addClass(noDataClass).appendTo($element)\r\n }\r\n if (isVisible && !isLoading) {\r\n noDataElement.removeClass(\"dx-hidden\").text(that._getNoDataText())\r\n } else {\r\n noDataElement.addClass(\"dx-hidden\")\r\n }\r\n },\r\n renderLoadPanel: function($element, $container, isLocalStore) {\r\n var that = this;\r\n var loadPanelOptions;\r\n that._loadPanel && that._loadPanel.$element().remove();\r\n loadPanelOptions = that.option(\"loadPanel\");\r\n if (loadPanelOptions && (\"auto\" === loadPanelOptions.enabled ? !isLocalStore : loadPanelOptions.enabled)) {\r\n loadPanelOptions = (0, _extend.extend)({\r\n shading: false,\r\n message: loadPanelOptions.text,\r\n position: function() {\r\n var $window = (0, _renderer.default)((0, _window.getWindow)());\r\n if ($element.height() > $window.height()) {\r\n return {\r\n of: $window,\r\n boundary: $element,\r\n collision: \"fit\"\r\n }\r\n }\r\n return {\r\n of: $element\r\n }\r\n },\r\n container: $container\r\n }, loadPanelOptions);\r\n that._loadPanel = that._createComponent((0, _renderer.default)(\"
\").appendTo($container), _load_panel.default, loadPanelOptions)\r\n } else {\r\n that._loadPanel = null\r\n }\r\n },\r\n getIndexByKey: function(key, items, keyName) {\r\n var index = -1;\r\n if (void 0 !== key && Array.isArray(items)) {\r\n keyName = arguments.length <= 2 ? \"key\" : keyName;\r\n for (var i = 0; i < items.length; i++) {\r\n var item = (0, _type.isDefined)(keyName) ? items[i][keyName] : items[i];\r\n if ((0, _common.equalByValue)(key, item)) {\r\n index = i;\r\n break\r\n }\r\n }\r\n }\r\n return index\r\n },\r\n combineFilters: function(filters, operation) {\r\n var resultFilter = [];\r\n operation = operation || \"and\";\r\n for (var i = 0; i < filters.length; i++) {\r\n if (!filters[i]) {\r\n continue\r\n }\r\n if (resultFilter.length) {\r\n resultFilter.push(operation)\r\n }\r\n resultFilter.push(filters[i])\r\n }\r\n if (1 === resultFilter.length) {\r\n resultFilter = resultFilter[0]\r\n }\r\n if (resultFilter.length) {\r\n return resultFilter\r\n }\r\n },\r\n checkChanges: function(changes, changeNames) {\r\n var changesWithChangeNamesCount = 0;\r\n for (var i = 0; i < changeNames.length; i++) {\r\n if (changes[changeNames[i]]) {\r\n changesWithChangeNamesCount++\r\n }\r\n }\r\n return changes.length && changes.length === changesWithChangeNamesCount\r\n },\r\n equalFilterParameters: equalFilterParameters,\r\n proxyMethod: function(instance, methodName, defaultResult) {\r\n if (!instance[methodName]) {\r\n instance[methodName] = function() {\r\n var dataSource = this._dataSource;\r\n return dataSource ? dataSource[methodName].apply(dataSource, arguments) : defaultResult\r\n }\r\n }\r\n },\r\n formatValue: formatValue,\r\n getFormatOptionsByColumn: function(column, target) {\r\n return {\r\n format: column.format,\r\n getDisplayFormat: column.getDisplayFormat,\r\n customizeText: column.customizeText,\r\n target: target,\r\n trueText: column.trueText,\r\n falseText: column.falseText\r\n }\r\n },\r\n getDisplayValue: function(column, value, data, rowType) {\r\n if (column.displayValueMap && void 0 !== column.displayValueMap[value]) {\r\n return column.displayValueMap[value]\r\n } else {\r\n if (column.calculateDisplayValue && data && \"group\" !== rowType) {\r\n return column.calculateDisplayValue(data)\r\n } else {\r\n if (column.lookup && !(\"group\" === rowType && (column.calculateGroupValue || column.calculateDisplayValue))) {\r\n return column.lookup.calculateCellValue(value)\r\n }\r\n }\r\n }\r\n return value\r\n },\r\n getGroupRowSummaryText: function(summaryItems, summaryTexts) {\r\n var result = \"(\";\r\n for (var i = 0; i < summaryItems.length; i++) {\r\n var summaryItem = summaryItems[i];\r\n result += (i > 0 ? \", \" : \"\") + getSummaryText(summaryItem, summaryTexts)\r\n }\r\n return result += \")\"\r\n },\r\n getSummaryText: getSummaryText,\r\n normalizeSortingInfo: normalizeSortingInfo,\r\n getFormatByDataType: function(dataType) {\r\n switch (dataType) {\r\n case \"date\":\r\n return \"shortDate\";\r\n case \"datetime\":\r\n return \"shortDateShortTime\"\r\n }\r\n },\r\n getHeaderFilterGroupParameters: function(column, remoteGrouping) {\r\n var result = [];\r\n var dataField = column.dataField || column.name;\r\n var groupInterval = _filtering.default.getGroupInterval(column);\r\n if (groupInterval) {\r\n (0, _iterator.each)(groupInterval, function(index, interval) {\r\n result.push(remoteGrouping ? {\r\n selector: dataField,\r\n groupInterval: interval,\r\n isExpanded: index < groupInterval.length - 1\r\n } : getIntervalSelector.bind(column, interval))\r\n });\r\n return result\r\n }\r\n if (remoteGrouping) {\r\n result = [{\r\n selector: dataField,\r\n isExpanded: false\r\n }]\r\n } else {\r\n result = function result(data) {\r\n var result = column.calculateCellValue(data);\r\n if (void 0 === result || \"\" === result) {\r\n result = null\r\n }\r\n return result\r\n };\r\n if (column.sortingMethod) {\r\n result = [{\r\n selector: result,\r\n compare: column.sortingMethod.bind(column)\r\n }]\r\n }\r\n }\r\n return result\r\n },\r\n equalSortParameters: function(sortParameters1, sortParameters2, ignoreIsExpanded) {\r\n sortParameters1 = normalizeSortingInfo(sortParameters1);\r\n sortParameters2 = normalizeSortingInfo(sortParameters2);\r\n if (Array.isArray(sortParameters1) && Array.isArray(sortParameters2)) {\r\n if (sortParameters1.length !== sortParameters2.length) {\r\n return false\r\n } else {\r\n for (var i = 0; i < sortParameters1.length; i++) {\r\n if (!equalSelectors(sortParameters1[i].selector, sortParameters2[i].selector) || sortParameters1[i].desc !== sortParameters2[i].desc || sortParameters1[i].groupInterval !== sortParameters2[i].groupInterval || !ignoreIsExpanded && Boolean(sortParameters1[i].isExpanded) !== Boolean(sortParameters2[i].isExpanded)) {\r\n return false\r\n }\r\n }\r\n }\r\n return true\r\n } else {\r\n return (!sortParameters1 || !sortParameters1.length) === (!sortParameters2 || !sortParameters2.length)\r\n }\r\n },\r\n getPointsByColumns: function(items, pointCreated, isVertical, startColumnIndex) {\r\n var cellsLength = items.length;\r\n var notCreatePoint = false;\r\n var item;\r\n var offset;\r\n var columnIndex = startColumnIndex || 0;\r\n var result = [];\r\n var rtlEnabled;\r\n for (var i = 0; i <= cellsLength; i++) {\r\n if (i < cellsLength) {\r\n item = items.eq(i);\r\n offset = item.offset();\r\n rtlEnabled = \"rtl\" === item.css(\"direction\")\r\n }\r\n var point = {\r\n index: columnIndex,\r\n x: offset ? offset.left + (!isVertical && rtlEnabled ^ i === cellsLength ? (0, _position.getBoundingRect)(item[0]).width : 0) : 0,\r\n y: offset ? offset.top + (isVertical && i === cellsLength ? (0, _position.getBoundingRect)(item[0]).height : 0) : 0,\r\n columnIndex: columnIndex\r\n };\r\n if (!isVertical && i > 0) {\r\n var prevItemOffset = items.eq(i - 1).offset();\r\n if (prevItemOffset.top < point.y) {\r\n point.y = prevItemOffset.top\r\n }\r\n }\r\n if (pointCreated) {\r\n notCreatePoint = pointCreated(point)\r\n }\r\n if (!notCreatePoint) {\r\n result.push(point)\r\n }\r\n columnIndex++\r\n }\r\n return result\r\n },\r\n getExpandCellTemplate: function() {\r\n return {\r\n allowRenderToDetachedContainer: true,\r\n render: function(container, options) {\r\n var $container = (0, _renderer.default)(container);\r\n if ((0, _type.isDefined)(options.value) && !(options.data && options.data.isContinuation) && !options.row.isNewRow) {\r\n var rowsView = options.component.getView(\"rowsView\");\r\n $container.addClass(DATAGRID_EXPAND_CLASS).addClass(DATAGRID_SELECTION_DISABLED_CLASS);\r\n (0, _renderer.default)(\"
\").addClass(options.value ? DATAGRID_GROUP_OPENED_CLASS : DATAGRID_GROUP_CLOSED_CLASS).appendTo($container);\r\n rowsView.setAria(\"label\", options.value ? rowsView.localize(\"dxDataGrid-ariaCollapse\") : rowsView.localize(\"dxDataGrid-ariaExpand\"), $container)\r\n } else {\r\n setEmptyText($container)\r\n }\r\n }\r\n }\r\n },\r\n setEmptyText: setEmptyText,\r\n isDateType: isDateType,\r\n getSelectionRange: function(focusedElement) {\r\n try {\r\n if (focusedElement) {\r\n return {\r\n selectionStart: focusedElement.selectionStart,\r\n selectionEnd: focusedElement.selectionEnd\r\n }\r\n }\r\n } catch (e) {}\r\n return {}\r\n },\r\n setSelectionRange: function(focusedElement, selectionRange) {\r\n try {\r\n if (focusedElement && focusedElement.setSelectionRange) {\r\n focusedElement.setSelectionRange(selectionRange.selectionStart, selectionRange.selectionEnd)\r\n }\r\n } catch (e) {}\r\n },\r\n focusAndSelectElement: function(component, $element) {\r\n _events_engine.default.trigger($element, \"focus\");\r\n var isSelectTextOnEditingStart = component.option(\"editing.selectTextOnEditStart\");\r\n var keyboardController = component.getController(\"keyboardNavigation\");\r\n var isEditingNavigationMode = keyboardController && keyboardController._isFastEditingStarted();\r\n var element = $element.get(0);\r\n if (isSelectTextOnEditingStart && !isEditingNavigationMode && $element.is(\".dx-texteditor-input\") && !$element.is(\"[readonly]\")) {\r\n var editor = getWidgetInstance($element.closest(\".dx-texteditor\"));\r\n (0, _deferred.when)(editor && editor._loadItemDeferred).done(function() {\r\n element.select()\r\n })\r\n }\r\n },\r\n getWidgetInstance: getWidgetInstance,\r\n getLastResizableColumnIndex: function(columns, resultWidths) {\r\n var hasResizableColumns = columns.some(function(column) {\r\n return column && !column.command && !column.fixed && false !== column.allowResizing\r\n });\r\n var lastColumnIndex;\r\n for (lastColumnIndex = columns.length - 1; columns[lastColumnIndex]; lastColumnIndex--) {\r\n var column = columns[lastColumnIndex];\r\n var width = resultWidths && resultWidths[lastColumnIndex];\r\n var allowResizing = !hasResizableColumns || false !== column.allowResizing;\r\n if (!column.command && !column.fixed && \"adaptiveHidden\" !== width && allowResizing) {\r\n break\r\n }\r\n }\r\n return lastColumnIndex\r\n },\r\n isElementInCurrentGrid: function(controller, $element) {\r\n if ($element && $element.length) {\r\n var $grid = $element.closest(\".\" + controller.getWidgetContainerClass()).parent();\r\n return $grid.is(controller.component.$element())\r\n }\r\n return false\r\n }\r\n};\r\nexports.default = _default;\r\nmodule.exports = exports.default;\r\n","/**\r\n * DevExtreme (ui/grid_core/ui.grid_core.sorting.js)\r\n * Version: 20.2.7\r\n * Build date: Thu Apr 22 2021\r\n *\r\n * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED\r\n * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/\r\n */\r\n\"use strict\";\r\nexports.default = void 0;\r\nvar _renderer = _interopRequireDefault(require(\"../../core/renderer\"));\r\nvar _events_engine = _interopRequireDefault(require(\"../../events/core/events_engine\"));\r\nvar _click = require(\"../../events/click\");\r\nvar _type = require(\"../../core/utils/type\");\r\nvar _extend = require(\"../../core/utils/extend\");\r\nvar _uiGrid_core = _interopRequireDefault(require(\"../grid_core/ui.grid_core.sorting_mixin\"));\r\nvar _message = _interopRequireDefault(require(\"../../localization/message\"));\r\nvar _index = require(\"../../events/utils/index\");\r\n\r\nfunction _interopRequireDefault(obj) {\r\n return obj && obj.__esModule ? obj : {\r\n \"default\": obj\r\n }\r\n}\r\nvar COLUMN_HEADERS_VIEW_NAMESPACE = \"dxDataGridColumnHeadersView\";\r\nvar ColumnHeadersViewSortingExtender = (0, _extend.extend)({}, _uiGrid_core.default, {\r\n _createRow: function(row) {\r\n var _this = this;\r\n var $row = this.callBase(row);\r\n if (\"header\" === row.rowType) {\r\n _events_engine.default.on($row, (0, _index.addNamespace)(_click.name, COLUMN_HEADERS_VIEW_NAMESPACE), \"td\", this.createAction(function(e) {\r\n _this._processHeaderAction(e.event, $row)\r\n }))\r\n }\r\n return $row\r\n },\r\n _processHeaderAction: function(event, $row) {\r\n if ((0, _renderer.default)(event.currentTarget).parent().get(0) !== $row.get(0)) {\r\n return\r\n }\r\n var that = this;\r\n var keyName = null;\r\n var $cellElementFromEvent = (0, _renderer.default)(event.currentTarget);\r\n var rowIndex = $cellElementFromEvent.parent().index();\r\n var columnIndex = -1;\r\n [].slice.call(that.getCellElements(rowIndex)).some(function($cellElement, index) {\r\n if ($cellElement === $cellElementFromEvent.get(0)) {\r\n columnIndex = index;\r\n return true\r\n }\r\n });\r\n var visibleColumns = that._columnsController.getVisibleColumns(rowIndex);\r\n var column = visibleColumns[columnIndex];\r\n var editingController = that.getController(\"editing\");\r\n var editingMode = that.option(\"editing.mode\");\r\n var isCellEditing = editingController && editingController.isEditing() && (\"batch\" === editingMode || \"cell\" === editingMode);\r\n if (isCellEditing || !that._isSortableElement((0, _renderer.default)(event.target))) {\r\n return\r\n }\r\n if (column && !(0, _type.isDefined)(column.groupIndex) && !column.command) {\r\n if (event.shiftKey) {\r\n keyName = \"shift\"\r\n } else {\r\n if (event.ctrlKey) {\r\n keyName = \"ctrl\"\r\n }\r\n }\r\n setTimeout(function() {\r\n that._columnsController.changeSortOrder(column.index, keyName)\r\n })\r\n }\r\n },\r\n _renderCellContent: function($cell, options) {\r\n var that = this;\r\n var column = options.column;\r\n if (!column.command && \"header\" === options.rowType) {\r\n that._applyColumnState({\r\n name: \"sort\",\r\n rootElement: $cell,\r\n column: column,\r\n showColumnLines: that.option(\"showColumnLines\")\r\n })\r\n }\r\n that.callBase($cell, options)\r\n },\r\n _columnOptionChanged: function(e) {\r\n var changeTypes = e.changeTypes;\r\n if (1 === changeTypes.length && changeTypes.sorting) {\r\n this._updateIndicators(\"sort\");\r\n return\r\n }\r\n this.callBase(e)\r\n },\r\n optionChanged: function(args) {\r\n var that = this;\r\n switch (args.name) {\r\n case \"sorting\":\r\n that._invalidate();\r\n args.handled = true;\r\n break;\r\n default:\r\n that.callBase(args)\r\n }\r\n }\r\n});\r\nvar HeaderPanelSortingExtender = (0, _extend.extend)({}, _uiGrid_core.default, {\r\n _createGroupPanelItem: function($rootElement, groupColumn) {\r\n var that = this;\r\n var $item = that.callBase.apply(that, arguments);\r\n _events_engine.default.on($item, (0, _index.addNamespace)(_click.name, \"dxDataGridHeaderPanel\"), that.createAction(function() {\r\n that._processGroupItemAction(groupColumn.index)\r\n }));\r\n that._applyColumnState({\r\n name: \"sort\",\r\n rootElement: $item,\r\n column: {\r\n alignment: that.option(\"rtlEnabled\") ? \"right\" : \"left\",\r\n allowSorting: groupColumn.allowSorting,\r\n sortOrder: \"desc\" === groupColumn.sortOrder ? \"desc\" : \"asc\"\r\n },\r\n showColumnLines: true\r\n });\r\n return $item\r\n },\r\n _processGroupItemAction: function(groupColumnIndex) {\r\n var _this2 = this;\r\n setTimeout(function() {\r\n return _this2.getController(\"columns\").changeSortOrder(groupColumnIndex)\r\n })\r\n },\r\n optionChanged: function(args) {\r\n var that = this;\r\n switch (args.name) {\r\n case \"sorting\":\r\n that._invalidate();\r\n args.handled = true;\r\n break;\r\n default:\r\n that.callBase(args)\r\n }\r\n }\r\n});\r\nvar _default = {\r\n defaultOptions: function() {\r\n return {\r\n sorting: {\r\n mode: \"single\",\r\n ascendingText: _message.default.format(\"dxDataGrid-sortingAscendingText\"),\r\n descendingText: _message.default.format(\"dxDataGrid-sortingDescendingText\"),\r\n clearText: _message.default.format(\"dxDataGrid-sortingClearText\"),\r\n showSortIndexes: true\r\n }\r\n }\r\n },\r\n extenders: {\r\n views: {\r\n columnHeadersView: ColumnHeadersViewSortingExtender,\r\n headerPanel: HeaderPanelSortingExtender\r\n }\r\n }\r\n};\r\nexports.default = _default;\r\nmodule.exports = exports.default;\r\n","/**\r\n * DevExtreme (ui/grid_core/ui.grid_core.sorting_mixin.js)\r\n * Version: 20.2.7\r\n * Build date: Thu Apr 22 2021\r\n *\r\n * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED\r\n * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/\r\n */\r\n\"use strict\";\r\nexports.default = void 0;\r\nvar _type = require(\"../../core/utils/type\");\r\nvar _renderer = _interopRequireDefault(require(\"../../core/renderer\"));\r\n\r\nfunction _interopRequireDefault(obj) {\r\n return obj && obj.__esModule ? obj : {\r\n \"default\": obj\r\n }\r\n}\r\nvar SORT_CLASS = \"dx-sort\";\r\nvar SORT_NONE_CLASS = \"dx-sort-none\";\r\nvar SORTUP_CLASS = \"dx-sort-up\";\r\nvar SORTDOWN_CLASS = \"dx-sort-down\";\r\nvar SORT_INDEX_CLASS = \"dx-sort-index\";\r\nvar SORT_INDEX_ICON_CLASS = \"dx-sort-index-icon\";\r\nvar HEADERS_ACTION_CLASS = \"action\";\r\nvar _default = {\r\n _applyColumnState: function(options) {\r\n var that = this;\r\n var ariaSortState;\r\n var $sortIndicator;\r\n var sortingMode = that.option(\"sorting.mode\");\r\n var rootElement = options.rootElement;\r\n var column = options.column;\r\n var $indicatorsContainer = that._getIndicatorContainer(rootElement);\r\n if (\"sort\" === options.name) {\r\n rootElement.find(\".\" + SORT_CLASS).remove();\r\n !$indicatorsContainer.children().length && $indicatorsContainer.remove();\r\n var isSortingAllowed = (\"single\" === sortingMode || \"multiple\" === sortingMode) && column.allowSorting;\r\n if (!(0, _type.isDefined)(column.groupIndex) && (isSortingAllowed || (0, _type.isDefined)(column.sortOrder))) {\r\n ariaSortState = \"asc\" === column.sortOrder ? \"ascending\" : \"descending\";\r\n $sortIndicator = that.callBase(options).toggleClass(SORTUP_CLASS, \"asc\" === column.sortOrder).toggleClass(SORTDOWN_CLASS, \"desc\" === column.sortOrder);\r\n var hasSeveralSortIndexes = that.getController && !!that.getController(\"columns\").columnOption(\"sortIndex:1\");\r\n if (hasSeveralSortIndexes && that.option(\"sorting.showSortIndexes\") && column.sortIndex >= 0) {\r\n (0, _renderer.default)(\"\").addClass(SORT_INDEX_ICON_CLASS).text(column.sortIndex + 1).appendTo($sortIndicator);\r\n $sortIndicator.addClass(SORT_INDEX_CLASS)\r\n }\r\n options.rootElement.addClass(that.addWidgetPrefix(HEADERS_ACTION_CLASS))\r\n }\r\n if (!(0, _type.isDefined)(column.sortOrder)) {\r\n that.setAria(\"sort\", \"none\", rootElement)\r\n } else {\r\n that.setAria(\"sort\", ariaSortState, rootElement)\r\n }\r\n return $sortIndicator\r\n } else {\r\n return that.callBase(options)\r\n }\r\n },\r\n _getIndicatorClassName: function(name) {\r\n if (\"sort\" === name) {\r\n return SORT_CLASS\r\n } else {\r\n if (\"sortIndex\" === name) {\r\n return SORT_INDEX_ICON_CLASS\r\n }\r\n }\r\n return this.callBase(name)\r\n },\r\n _renderIndicator: function(options) {\r\n var column = options.column;\r\n var $container = options.container;\r\n var $indicator = options.indicator;\r\n if (\"sort\" === options.name) {\r\n var rtlEnabled = this.option(\"rtlEnabled\");\r\n if (!(0, _type.isDefined)(column.sortOrder)) {\r\n $indicator && $indicator.addClass(SORT_NONE_CLASS)\r\n }\r\n if ($container.children().length && (!rtlEnabled && \"left\" === options.columnAlignment || rtlEnabled && \"right\" === options.columnAlignment)) {\r\n $container.prepend($indicator);\r\n return\r\n }\r\n }\r\n this.callBase(options)\r\n },\r\n _updateIndicator: function($cell, column, indicatorName) {\r\n if (\"sort\" === indicatorName && (0, _type.isDefined)(column.groupIndex)) {\r\n return\r\n }\r\n return this.callBase.apply(this, arguments)\r\n },\r\n _getIndicatorElements: function($cell, returnAll) {\r\n var $indicatorElements = this.callBase($cell);\r\n return returnAll ? $indicatorElements : $indicatorElements && $indicatorElements.not(\".\" + SORT_NONE_CLASS)\r\n }\r\n};\r\nexports.default = _default;\r\nmodule.exports = exports.default;\r\n","/**\r\n * DevExtreme (ui/grid_core/ui.grid_core.rows.js)\r\n * Version: 20.2.7\r\n * Build date: Thu Apr 22 2021\r\n *\r\n * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED\r\n * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/\r\n */\r\n\"use strict\";\r\nexports.default = void 0;\r\nvar _renderer = _interopRequireDefault(require(\"../../core/renderer\"));\r\nvar _window = require(\"../../core/utils/window\");\r\nvar _events_engine = _interopRequireDefault(require(\"../../events/core/events_engine\"));\r\nvar _common = require(\"../../core/utils/common\");\r\nvar _style = require(\"../../core/utils/style\");\r\nvar _type = require(\"../../core/utils/type\");\r\nvar _iterator = require(\"../../core/utils/iterator\");\r\nvar _extend = require(\"../../core/utils/extend\");\r\nvar _position = require(\"../../core/utils/position\");\r\nvar _string = require(\"../../core/utils/string\");\r\nvar _data = require(\"../../core/utils/data\");\r\nvar _uiGrid_core = _interopRequireDefault(require(\"./ui.grid_core.utils\"));\r\nvar _uiGrid_core2 = require(\"./ui.grid_core.columns_view\");\r\nvar _ui = _interopRequireDefault(require(\"../scroll_view/ui.scrollable\"));\r\nvar _remove_event = _interopRequireDefault(require(\"../../core/remove_event\"));\r\nvar _message = _interopRequireDefault(require(\"../../localization/message\"));\r\nvar _browser = _interopRequireDefault(require(\"../../core/utils/browser\"));\r\n\r\nfunction _interopRequireDefault(obj) {\r\n return obj && obj.__esModule ? obj : {\r\n \"default\": obj\r\n }\r\n}\r\nvar ROWS_VIEW_CLASS = \"rowsview\";\r\nvar CONTENT_CLASS = \"content\";\r\nvar NOWRAP_CLASS = \"nowrap\";\r\nvar GROUP_ROW_CLASS = \"dx-group-row\";\r\nvar GROUP_CELL_CLASS = \"dx-group-cell\";\r\nvar DATA_ROW_CLASS = \"dx-data-row\";\r\nvar FREE_SPACE_CLASS = \"dx-freespace-row\";\r\nvar ROW_LINES_CLASS = \"dx-row-lines\";\r\nvar COLUMN_LINES_CLASS = \"dx-column-lines\";\r\nvar ROW_ALTERNATION_CLASS = \"dx-row-alt\";\r\nvar LAST_ROW_BORDER = \"dx-last-row-border\";\r\nvar EMPTY_CLASS = \"dx-empty\";\r\nvar ROW_INSERTED_ANIMATION_CLASS = \"row-inserted-animation\";\r\nvar LOADPANEL_HIDE_TIMEOUT = 200;\r\n\r\nfunction getMaxHorizontalScrollOffset(scrollable) {\r\n return scrollable ? scrollable.scrollWidth() - scrollable.clientWidth() : 0\r\n}\r\nvar _default = {\r\n defaultOptions: function() {\r\n return {\r\n hoverStateEnabled: false,\r\n scrolling: {\r\n useNative: \"auto\"\r\n },\r\n loadPanel: {\r\n enabled: \"auto\",\r\n text: _message.default.format(\"Loading\"),\r\n width: 200,\r\n height: 90,\r\n showIndicator: true,\r\n indicatorSrc: \"\",\r\n showPane: true\r\n },\r\n rowTemplate: null,\r\n columnAutoWidth: false,\r\n noDataText: _message.default.format(\"dxDataGrid-noDataText\"),\r\n wordWrapEnabled: false,\r\n showColumnLines: true,\r\n showRowLines: false,\r\n rowAlternationEnabled: false,\r\n activeStateEnabled: false,\r\n twoWayBindingEnabled: true\r\n }\r\n },\r\n views: {\r\n rowsView: _uiGrid_core2.ColumnsView.inherit(function() {\r\n var defaultCellTemplate = function($container, options) {\r\n var isDataTextEmpty = (0, _string.isEmpty)(options.text) && \"data\" === options.rowType;\r\n var text = options.text;\r\n var container = $container.get(0);\r\n if (isDataTextEmpty) {\r\n _uiGrid_core.default.setEmptyText($container)\r\n } else {\r\n if (options.column.encodeHtml) {\r\n container.textContent = text\r\n } else {\r\n container.innerHTML = text\r\n }\r\n }\r\n };\r\n var getScrollableBottomPadding = function(that) {\r\n var scrollable = that.getScrollable();\r\n return scrollable ? Math.ceil(parseFloat(scrollable.$content().css(\"paddingBottom\"))) : 0\r\n };\r\n return {\r\n _getDefaultTemplate: function(column) {\r\n switch (column.command) {\r\n case \"empty\":\r\n return function(container) {\r\n container.html(\" \")\r\n };\r\n default:\r\n return defaultCellTemplate\r\n }\r\n },\r\n _getDefaultGroupTemplate: function(column) {\r\n var that = this;\r\n var summaryTexts = that.option(\"summary.texts\");\r\n return function($container, options) {\r\n var data = options.data;\r\n var text = options.column.caption + \": \" + options.text;\r\n var container = $container.get(0);\r\n if (options.summaryItems && options.summaryItems.length) {\r\n text += \" \" + _uiGrid_core.default.getGroupRowSummaryText(options.summaryItems, summaryTexts)\r\n }\r\n if (data) {\r\n if (options.groupContinuedMessage && options.groupContinuesMessage) {\r\n text += \" (\" + options.groupContinuedMessage + \". \" + options.groupContinuesMessage + \")\"\r\n } else {\r\n if (options.groupContinuesMessage) {\r\n text += \" (\" + options.groupContinuesMessage + \")\"\r\n } else {\r\n if (options.groupContinuedMessage) {\r\n text += \" (\" + options.groupContinuedMessage + \")\"\r\n }\r\n }\r\n }\r\n }\r\n $container.addClass(GROUP_CELL_CLASS);\r\n if (column.encodeHtml) {\r\n container.textContent = text\r\n } else {\r\n container.innerHTML = text\r\n }\r\n }\r\n },\r\n _update: function() {},\r\n _getCellTemplate: function(options) {\r\n var that = this;\r\n var column = options.column;\r\n var template;\r\n if (\"group\" === options.rowType && (0, _type.isDefined)(column.groupIndex) && !column.showWhenGrouped && !column.command) {\r\n template = column.groupCellTemplate || {\r\n allowRenderToDetachedContainer: true,\r\n render: that._getDefaultGroupTemplate(column)\r\n }\r\n } else {\r\n if ((\"data\" === options.rowType || column.command) && column.cellTemplate) {\r\n template = column.cellTemplate\r\n } else {\r\n template = {\r\n allowRenderToDetachedContainer: true,\r\n render: that._getDefaultTemplate(column)\r\n }\r\n }\r\n }\r\n return template\r\n },\r\n _createRow: function(row) {\r\n var $row = this.callBase(row);\r\n if (row) {\r\n var isGroup = \"group\" === row.rowType;\r\n var isDataRow = \"data\" === row.rowType;\r\n isDataRow && $row.addClass(DATA_ROW_CLASS);\r\n isDataRow && this.option(\"showRowLines\") && $row.addClass(ROW_LINES_CLASS);\r\n this.option(\"showColumnLines\") && $row.addClass(COLUMN_LINES_CLASS);\r\n if (false === row.visible) {\r\n $row.hide()\r\n }\r\n if (isGroup) {\r\n $row.addClass(GROUP_ROW_CLASS);\r\n var isRowExpanded = row.isExpanded;\r\n this.setAria(\"role\", \"row\", $row);\r\n this.setAria(\"expanded\", (0, _type.isDefined)(isRowExpanded) && isRowExpanded.toString(), $row)\r\n }\r\n }\r\n return $row\r\n },\r\n _rowPrepared: function($row, rowOptions, row) {\r\n var _this = this;\r\n if (\"data\" === rowOptions.rowType) {\r\n if (this.option(\"rowAlternationEnabled\")) {\r\n this._isAltRow(row) && $row.addClass(ROW_ALTERNATION_CLASS);\r\n rowOptions.watch && rowOptions.watch(function() {\r\n return _this._isAltRow(row)\r\n }, function(value) {\r\n $row.toggleClass(ROW_ALTERNATION_CLASS, value)\r\n })\r\n }\r\n this._setAriaRowIndex(rowOptions, $row);\r\n rowOptions.watch && rowOptions.watch(function() {\r\n return rowOptions.rowIndex\r\n }, function() {\r\n return _this._setAriaRowIndex(rowOptions, $row)\r\n })\r\n }\r\n this.callBase.apply(this, arguments)\r\n },\r\n _setAriaRowIndex: function(row, $row) {\r\n var component = this.component;\r\n var isPagerMode = \"standard\" === component.option(\"scrolling.mode\") && \"virtual\" !== component.option(\"scrolling.rowRenderingMode\");\r\n var rowIndex = row.rowIndex + 1;\r\n if (isPagerMode) {\r\n rowIndex = component.pageIndex() * component.pageSize() + rowIndex\r\n } else {\r\n rowIndex += this._dataController.getRowIndexOffset()\r\n }\r\n this.setAria(\"rowindex\", rowIndex, $row)\r\n },\r\n _afterRowPrepared: function(e) {\r\n var _this2 = this;\r\n var arg = e.args[0];\r\n var dataController = this._dataController;\r\n var row = dataController.getVisibleRows()[arg.rowIndex];\r\n var watch = this.option(\"integrationOptions.watchMethod\");\r\n if (!arg.data || \"data\" !== arg.rowType || arg.isNewRow || !this.option(\"twoWayBindingEnabled\") || !watch || !row) {\r\n return\r\n }\r\n var dispose = watch(function() {\r\n return dataController.generateDataValues(arg.data, arg.columns)\r\n }, function() {\r\n dataController.repaintRows([row.rowIndex], _this2.option(\"repaintChangesOnly\"))\r\n }, {\r\n deep: true,\r\n skipImmediate: true\r\n });\r\n _events_engine.default.on(arg.rowElement, _remove_event.default, dispose)\r\n },\r\n _renderScrollable: function(force) {\r\n var that = this;\r\n var $element = that.element();\r\n if (!$element.children().length) {\r\n $element.append(\"
\")\r\n }\r\n if (force || !that._loadPanel) {\r\n that._renderLoadPanel($element, $element.parent(), that._dataController.isLocalStore())\r\n }\r\n if ((force || !that.getScrollable()) && that._dataController.isLoaded()) {\r\n var columns = that.getColumns();\r\n var allColumnsHasWidth = true;\r\n for (var i = 0; i < columns.length; i++) {\r\n if (!columns[i].width && !columns[i].minWidth) {\r\n allColumnsHasWidth = false;\r\n break\r\n }\r\n }\r\n if (that.option(\"columnAutoWidth\") || that._hasHeight || allColumnsHasWidth || that._columnsController._isColumnFixing()) {\r\n that._renderScrollableCore($element)\r\n }\r\n }\r\n },\r\n _handleScroll: function(e) {\r\n var that = this;\r\n var rtlEnabled = that.option(\"rtlEnabled\");\r\n that._isScrollByEvent = !!e.event;\r\n that._scrollTop = e.scrollOffset.top;\r\n that._scrollLeft = e.scrollOffset.left;\r\n if (rtlEnabled) {\r\n this._scrollRight = getMaxHorizontalScrollOffset(e.component) - this._scrollLeft\r\n }\r\n that.scrollChanged.fire(e.scrollOffset, that.name)\r\n },\r\n _renderScrollableCore: function($element) {\r\n var that = this;\r\n var dxScrollableOptions = that._createScrollableOptions();\r\n var scrollHandler = that._handleScroll.bind(that);\r\n dxScrollableOptions.onScroll = scrollHandler;\r\n dxScrollableOptions.onStop = scrollHandler;\r\n that._scrollable = that._createComponent($element, _ui.default, dxScrollableOptions);\r\n that._scrollableContainer = that._scrollable && that._scrollable._$container\r\n },\r\n _renderLoadPanel: _uiGrid_core.default.renderLoadPanel,\r\n _renderContent: function(contentElement, tableElement) {\r\n contentElement.empty().append(tableElement);\r\n return this._findContentElement()\r\n },\r\n _updateContent: function(newTableElement, change) {\r\n var that = this;\r\n var tableElement = that.getTableElement();\r\n var contentElement = that._findContentElement();\r\n var changeType = change && change.changeType;\r\n var executors = [];\r\n var highlightChanges = this.option(\"highlightChanges\");\r\n var rowInsertedClass = this.addWidgetPrefix(ROW_INSERTED_ANIMATION_CLASS);\r\n switch (changeType) {\r\n case \"update\":\r\n (0, _iterator.each)(change.rowIndices, function(index, rowIndex) {\r\n var $newRowElement = that._getRowElements(newTableElement).eq(index);\r\n var changeType = change.changeTypes && change.changeTypes[index];\r\n var item = change.items && change.items[index];\r\n executors.push(function() {\r\n var $rowsElement = that._getRowElements();\r\n var $rowElement = $rowsElement.eq(rowIndex);\r\n switch (changeType) {\r\n case \"update\":\r\n if (item) {\r\n var columnIndices = change.columnIndices && change.columnIndices[index];\r\n if ((0, _type.isDefined)(item.visible) && item.visible !== $rowElement.is(\":visible\")) {\r\n $rowElement.toggle(item.visible)\r\n } else {\r\n if (columnIndices) {\r\n that._updateCells($rowElement, $newRowElement, columnIndices)\r\n } else {\r\n $rowElement.replaceWith($newRowElement)\r\n }\r\n }\r\n }\r\n break;\r\n case \"insert\":\r\n if (!$rowsElement.length) {\r\n if (tableElement) {\r\n var target = $newRowElement.is(\"tbody\") ? tableElement : tableElement.children(\"tbody\");\r\n $newRowElement.prependTo(target)\r\n }\r\n } else {\r\n if ($rowElement.length) {\r\n $newRowElement.insertBefore($rowElement)\r\n } else {\r\n $newRowElement.insertAfter($rowsElement.last())\r\n }\r\n }\r\n if (highlightChanges && change.isLiveUpdate) {\r\n $newRowElement.addClass(rowInsertedClass)\r\n }\r\n break;\r\n case \"remove\":\r\n $rowElement.remove()\r\n }\r\n })\r\n });\r\n (0, _iterator.each)(executors, function() {\r\n this()\r\n });\r\n newTableElement.remove();\r\n break;\r\n default:\r\n that.setTableElement(newTableElement);\r\n contentElement.addClass(that.addWidgetPrefix(CONTENT_CLASS));\r\n that._renderContent(contentElement, newTableElement)\r\n }\r\n },\r\n _createEmptyRow: function(className, isFixed, height) {\r\n var that = this;\r\n var $cell;\r\n var $row = that._createRow();\r\n var columns = isFixed ? this.getFixedColumns() : this.getColumns();\r\n $row.addClass(className).toggleClass(COLUMN_LINES_CLASS, that.option(\"showColumnLines\"));\r\n for (var i = 0; i < columns.length; i++) {\r\n $cell = that._createCell({\r\n column: columns[i],\r\n rowType: \"freeSpace\",\r\n columnIndex: i,\r\n columns: columns\r\n });\r\n (0, _type.isNumeric)(height) && $cell.css(\"height\", height);\r\n $row.append($cell)\r\n }\r\n that.setAria(\"role\", \"presentation\", $row);\r\n return $row\r\n },\r\n _appendEmptyRow: function($table, $emptyRow, location) {\r\n var $tBodies = this._getBodies($table);\r\n var isTableContainer = !$tBodies.length || $emptyRow.is(\"tbody\");\r\n var $container = isTableContainer ? $table : $tBodies;\r\n if (\"top\" === location) {\r\n $container.first().prepend($emptyRow);\r\n if (isTableContainer) {\r\n var $colgroup = $container.children(\"colgroup\");\r\n $container.prepend($colgroup)\r\n }\r\n } else {\r\n $container.last().append($emptyRow)\r\n }\r\n },\r\n _renderFreeSpaceRow: function($tableElement) {\r\n var $freeSpaceRowElement = this._createEmptyRow(FREE_SPACE_CLASS);\r\n $freeSpaceRowElement = this._wrapRowIfNeed($tableElement, $freeSpaceRowElement);\r\n this._appendEmptyRow($tableElement, $freeSpaceRowElement)\r\n },\r\n _checkRowKeys: function(options) {\r\n var that = this;\r\n var rows = that._getRows(options);\r\n var keyExpr = that._dataController.store() && that._dataController.store().key();\r\n keyExpr && rows.some(function(row) {\r\n if (\"data\" === row.rowType && void 0 === row.key) {\r\n that._dataController.fireError(\"E1046\", keyExpr);\r\n return true\r\n }\r\n })\r\n },\r\n _needUpdateRowHeight: function(itemsCount) {\r\n return itemsCount > 0 && !this._rowHeight\r\n },\r\n _getRowsHeight: function($tableElement) {\r\n var $rowElements = $tableElement.children(\"tbody\").children().not(\".dx-virtual-row\").not(\".\" + FREE_SPACE_CLASS);\r\n return $rowElements.toArray().reduce(function(sum, row) {\r\n return sum + (0, _position.getBoundingRect)(row).height\r\n }, 0)\r\n },\r\n _updateRowHeight: function() {\r\n var that = this;\r\n var $tableElement = that.getTableElement();\r\n var itemsCount = that._dataController.items().length;\r\n if ($tableElement && that._needUpdateRowHeight(itemsCount)) {\r\n var rowsHeight = that._getRowsHeight($tableElement);\r\n that._rowHeight = rowsHeight / itemsCount\r\n }\r\n },\r\n _findContentElement: function() {\r\n var $content = this.element();\r\n var scrollable = this.getScrollable();\r\n if ($content) {\r\n if (scrollable) {\r\n $content = scrollable.$content()\r\n }\r\n return $content.children().first()\r\n }\r\n },\r\n _getRowElements: function(tableElement) {\r\n var $rows = this.callBase(tableElement);\r\n return $rows && $rows.not(\".\" + FREE_SPACE_CLASS)\r\n },\r\n _getFreeSpaceRowElements: function($table) {\r\n var tableElements = $table || this.getTableElements();\r\n return tableElements && tableElements.children(\"tbody\").children(\".\" + FREE_SPACE_CLASS)\r\n },\r\n _getNoDataText: function() {\r\n return this.option(\"noDataText\")\r\n },\r\n _rowClick: function(e) {\r\n var item = this._dataController.items()[e.rowIndex] || {};\r\n this.executeAction(\"onRowClick\", (0, _extend.extend)({\r\n evaluate: function(expr) {\r\n var getter = (0, _data.compileGetter)(expr);\r\n return getter(item.data)\r\n }\r\n }, e, item))\r\n },\r\n _rowDblClick: function(e) {\r\n var item = this._dataController.items()[e.rowIndex] || {};\r\n this.executeAction(\"onRowDblClick\", (0, _extend.extend)({}, e, item))\r\n },\r\n _getColumnsCountBeforeGroups: function(columns) {\r\n for (var i = 0; i < columns.length; i++) {\r\n if (\"groupExpand\" === columns[i].type) {\r\n return i\r\n }\r\n }\r\n return 0\r\n },\r\n _getGroupCellOptions: function(options) {\r\n var columnsCountBeforeGroups = this._getColumnsCountBeforeGroups(options.columns);\r\n var columnIndex = (options.row.groupIndex || 0) + columnsCountBeforeGroups;\r\n return {\r\n columnIndex: columnIndex,\r\n colspan: options.columns.length - columnIndex - 1\r\n }\r\n },\r\n _renderCells: function($row, options) {\r\n if (\"group\" === options.row.rowType) {\r\n this._renderGroupedCells($row, options)\r\n } else {\r\n if (options.row.values) {\r\n this.callBase($row, options)\r\n }\r\n }\r\n },\r\n _renderGroupedCells: function($row, options) {\r\n var row = options.row;\r\n var expandColumn;\r\n var columns = options.columns;\r\n var rowIndex = row.rowIndex;\r\n var isExpanded;\r\n var groupCellOptions = this._getGroupCellOptions(options);\r\n for (var i = 0; i <= groupCellOptions.columnIndex; i++) {\r\n if (i === groupCellOptions.columnIndex && columns[i].allowCollapsing && \"infinite\" !== options.scrollingMode) {\r\n isExpanded = !!row.isExpanded;\r\n expandColumn = columns[i]\r\n } else {\r\n isExpanded = null;\r\n expandColumn = {\r\n command: \"expand\",\r\n cssClass: columns[i].cssClass\r\n }\r\n }\r\n this._renderCell($row, {\r\n value: isExpanded,\r\n row: row,\r\n rowIndex: rowIndex,\r\n column: expandColumn,\r\n columnIndex: i\r\n })\r\n }\r\n var groupColumnAlignment = (0, _position.getDefaultAlignment)(this.option(\"rtlEnabled\"));\r\n var groupColumn = (0, _extend.extend)({}, columns[groupCellOptions.columnIndex], {\r\n command: null,\r\n cssClass: null,\r\n width: null,\r\n showWhenGrouped: false,\r\n alignment: groupColumnAlignment\r\n });\r\n if (groupCellOptions.colspan > 1) {\r\n groupColumn.colspan = groupCellOptions.colspan\r\n }\r\n this._renderCell($row, {\r\n value: row.values[row.groupIndex],\r\n row: row,\r\n rowIndex: rowIndex,\r\n column: groupColumn,\r\n columnIndex: groupCellOptions.columnIndex\r\n })\r\n },\r\n _renderRows: function($table, options) {\r\n var that = this;\r\n var scrollingMode = that.option(\"scrolling.mode\");\r\n that.callBase($table, (0, _extend.extend)({\r\n scrollingMode: scrollingMode\r\n }, options));\r\n that._checkRowKeys(options.change);\r\n that._renderFreeSpaceRow($table);\r\n if (!that._hasHeight) {\r\n that.updateFreeSpaceRowHeight($table)\r\n }\r\n },\r\n _renderRow: function($table, options) {\r\n var that = this;\r\n var row = options.row;\r\n var rowTemplate = that.option(\"rowTemplate\");\r\n if ((\"data\" === row.rowType || \"group\" === row.rowType) && !(0, _type.isDefined)(row.groupIndex) && rowTemplate) {\r\n that.renderTemplate($table, rowTemplate, (0, _extend.extend)({\r\n columns: options.columns\r\n }, row), true)\r\n } else {\r\n that.callBase($table, options)\r\n }\r\n },\r\n _renderTable: function(options) {\r\n var that = this;\r\n var $table = that.callBase(options);\r\n var resizeCompletedHandler = function resizeCompletedHandler() {\r\n var scrollableInstance = that.getScrollable();\r\n if (scrollableInstance && that.element().closest((0, _window.getWindow)().document).length) {\r\n that.resizeCompleted.remove(resizeCompletedHandler);\r\n scrollableInstance._visibilityChanged(true)\r\n }\r\n };\r\n if (!(0, _type.isDefined)(that.getTableElement())) {\r\n that.setTableElement($table);\r\n that._renderScrollable(true);\r\n that.resizeCompleted.add(resizeCompletedHandler)\r\n } else {\r\n that._renderScrollable()\r\n }\r\n return $table\r\n },\r\n _createTable: function() {\r\n var $table = this.callBase.apply(this, arguments);\r\n if (this.option(\"rowTemplate\")) {\r\n $table.appendTo(this.component.$element())\r\n }\r\n return $table\r\n },\r\n _renderCore: function(change) {\r\n var that = this;\r\n var $element = that.element();\r\n $element.addClass(that.addWidgetPrefix(ROWS_VIEW_CLASS)).toggleClass(that.addWidgetPrefix(NOWRAP_CLASS), !that.option(\"wordWrapEnabled\"));\r\n $element.toggleClass(EMPTY_CLASS, 0 === that._dataController.items().length);\r\n that.setAria(\"role\", \"presentation\", $element);\r\n var $table = that._renderTable({\r\n change: change\r\n });\r\n that._updateContent($table, change);\r\n that.callBase(change);\r\n that._lastColumnWidths = null\r\n },\r\n _getRows: function(change) {\r\n return change && change.items || this._dataController.items()\r\n },\r\n _getCellOptions: function(options) {\r\n var that = this;\r\n var column = options.column;\r\n var row = options.row;\r\n var data = row.data;\r\n var summaryCells = row && row.summaryCells;\r\n var value = options.value;\r\n var displayValue = _uiGrid_core.default.getDisplayValue(column, value, data, row.rowType);\r\n var parameters = this.callBase(options);\r\n parameters.value = value;\r\n parameters.oldValue = options.oldValue;\r\n parameters.displayValue = displayValue;\r\n parameters.row = row;\r\n parameters.key = row.key;\r\n parameters.data = data;\r\n parameters.rowType = row.rowType;\r\n parameters.values = row.values;\r\n parameters.text = !column.command ? _uiGrid_core.default.formatValue(displayValue, column) : \"\";\r\n parameters.rowIndex = row.rowIndex;\r\n parameters.summaryItems = summaryCells && summaryCells[options.columnIndex];\r\n parameters.resized = column.resizedCallbacks;\r\n if ((0, _type.isDefined)(column.groupIndex) && !column.command) {\r\n var groupingTextsOptions = that.option(\"grouping.texts\");\r\n var scrollingMode = that.option(\"scrolling.mode\");\r\n if (\"virtual\" !== scrollingMode && \"infinite\" !== scrollingMode) {\r\n parameters.groupContinuesMessage = data && data.isContinuationOnNextPage && groupingTextsOptions && groupingTextsOptions.groupContinuesMessage;\r\n parameters.groupContinuedMessage = data && data.isContinuation && groupingTextsOptions && groupingTextsOptions.groupContinuedMessage\r\n }\r\n }\r\n return parameters\r\n },\r\n _setRowsOpacityCore: function($rows, visibleColumns, columnIndex, value) {\r\n var columnsController = this._columnsController;\r\n var columns = columnsController.getColumns();\r\n var column = columns && columns[columnIndex];\r\n var columnID = column && column.isBand && column.index;\r\n (0, _iterator.each)($rows, function(rowIndex, row) {\r\n if (!(0, _renderer.default)(row).hasClass(GROUP_ROW_CLASS)) {\r\n for (var i = 0; i < visibleColumns.length; i++) {\r\n if ((0, _type.isNumeric)(columnID) && columnsController.isParentBandColumn(visibleColumns[i].index, columnID) || visibleColumns[i].index === columnIndex) {\r\n $rows.eq(rowIndex).children().eq(i).css({\r\n opacity: value\r\n });\r\n if (!(0, _type.isNumeric)(columnID)) {\r\n break\r\n }\r\n }\r\n }\r\n }\r\n })\r\n },\r\n _getDevicePixelRatio: function() {\r\n return (0, _window.getWindow)().devicePixelRatio\r\n },\r\n renderNoDataText: _uiGrid_core.default.renderNoDataText,\r\n getCellOptions: function(rowIndex, columnIdentifier) {\r\n var rowOptions = this._dataController.items()[rowIndex];\r\n var cellOptions;\r\n var column;\r\n if (rowOptions) {\r\n if ((0, _type.isString)(columnIdentifier)) {\r\n column = this._columnsController.columnOption(columnIdentifier)\r\n } else {\r\n column = this._columnsController.getVisibleColumns()[columnIdentifier]\r\n }\r\n if (column) {\r\n cellOptions = this._getCellOptions({\r\n value: column.calculateCellValue(rowOptions.data),\r\n rowIndex: rowOptions.rowIndex,\r\n row: rowOptions,\r\n column: column\r\n })\r\n }\r\n }\r\n return cellOptions\r\n },\r\n getRow: function(index) {\r\n if (index >= 0) {\r\n var rows = this._getRowElements();\r\n if (rows.length > index) {\r\n return (0, _renderer.default)(rows[index])\r\n }\r\n }\r\n },\r\n updateFreeSpaceRowHeight: function($table) {\r\n var _this3 = this;\r\n var dataController = this._dataController;\r\n var itemCount = dataController.items(true).length;\r\n var contentElement = this._findContentElement();\r\n var freeSpaceRowElements = this._getFreeSpaceRowElements($table);\r\n if (freeSpaceRowElements && contentElement && dataController.totalCount() >= 0) {\r\n var isFreeSpaceRowVisible = false;\r\n if (itemCount > 0) {\r\n if (!this._hasHeight) {\r\n var freeSpaceRowCount = dataController.pageSize() - itemCount;\r\n var scrollingMode = this.option(\"scrolling.mode\");\r\n if (freeSpaceRowCount > 0 && dataController.pageCount() > 1 && \"virtual\" !== scrollingMode && \"infinite\" !== scrollingMode) {\r\n (0, _style.setHeight)(freeSpaceRowElements, freeSpaceRowCount * this._rowHeight);\r\n isFreeSpaceRowVisible = true\r\n }\r\n if (!isFreeSpaceRowVisible && $table) {\r\n (0, _style.setHeight)(freeSpaceRowElements, 0)\r\n } else {\r\n freeSpaceRowElements.toggle(isFreeSpaceRowVisible)\r\n }\r\n this._updateLastRowBorder(isFreeSpaceRowVisible)\r\n } else {\r\n freeSpaceRowElements.hide();\r\n (0, _common.deferUpdate)(function() {\r\n var scrollbarWidth = _this3.getScrollbarWidth(true);\r\n var elementHeightWithoutScrollbar = _this3.element().height() - scrollbarWidth;\r\n var contentHeight = contentElement.outerHeight();\r\n var showFreeSpaceRow = elementHeightWithoutScrollbar - contentHeight > 0;\r\n var rowsHeight = _this3._getRowsHeight(contentElement.children().first());\r\n var $tableElement = $table || _this3.getTableElements();\r\n var borderTopWidth = Math.ceil(parseFloat($tableElement.css(\"borderTopWidth\")));\r\n var heightCorrection = _this3._getHeightCorrection();\r\n var resultHeight = elementHeightWithoutScrollbar - rowsHeight - borderTopWidth - heightCorrection;\r\n if (showFreeSpaceRow) {\r\n (0, _common.deferRender)(function() {\r\n freeSpaceRowElements.css(\"height\", resultHeight);\r\n isFreeSpaceRowVisible = true;\r\n freeSpaceRowElements.show()\r\n })\r\n }(0, _common.deferRender)(function() {\r\n return _this3._updateLastRowBorder(isFreeSpaceRowVisible)\r\n })\r\n })\r\n }\r\n } else {\r\n freeSpaceRowElements.css(\"height\", 0);\r\n freeSpaceRowElements.show();\r\n this._updateLastRowBorder(true)\r\n }\r\n }\r\n },\r\n _getHeightCorrection: function() {\r\n var isZoomedWebkit = _browser.default.webkit && this._getDevicePixelRatio() >= 2;\r\n var hasExtraBorderTop = _browser.default.mozilla && _browser.default.version >= 70 && !this.option(\"showRowLines\");\r\n return isZoomedWebkit || hasExtraBorderTop ? 1 : 0\r\n },\r\n _columnOptionChanged: function(e) {\r\n var optionNames = e.optionNames;\r\n if (e.changeTypes.grouping) {\r\n return\r\n }\r\n if (optionNames.width || optionNames.visibleWidth) {\r\n this.callBase(e);\r\n this._fireColumnResizedCallbacks()\r\n }\r\n },\r\n getScrollable: function() {\r\n return this._scrollable\r\n },\r\n init: function() {\r\n var that = this;\r\n var dataController = that.getController(\"data\");\r\n that.callBase();\r\n that._editorFactoryController = that.getController(\"editorFactory\");\r\n that._rowHeight = 0;\r\n that._scrollTop = 0;\r\n that._scrollLeft = -1;\r\n that._scrollRight = 0;\r\n that._hasHeight = false;\r\n dataController.loadingChanged.add(function(isLoading, messageText) {\r\n that.setLoading(isLoading, messageText)\r\n });\r\n dataController.dataSourceChanged.add(function() {\r\n if (that._scrollLeft >= 0) {\r\n that._handleScroll({\r\n component: that.getScrollable(),\r\n scrollOffset: {\r\n top: that._scrollTop,\r\n left: that._scrollLeft\r\n }\r\n })\r\n }\r\n })\r\n },\r\n _handleDataChanged: function(change) {\r\n var that = this;\r\n switch (change.changeType) {\r\n case \"refresh\":\r\n case \"prepend\":\r\n case \"append\":\r\n case \"update\":\r\n that.render(null, change);\r\n break;\r\n default:\r\n that._update(change)\r\n }\r\n },\r\n publicMethods: function() {\r\n return [\"isScrollbarVisible\", \"getTopVisibleRowData\", \"getScrollbarWidth\", \"getCellElement\", \"getRowElement\", \"getScrollable\"]\r\n },\r\n contentWidth: function() {\r\n return this.element().width() - this.getScrollbarWidth()\r\n },\r\n getScrollbarWidth: function(isHorizontal) {\r\n var scrollableContainer = this._scrollableContainer && this._scrollableContainer.get(0);\r\n var scrollbarWidth = 0;\r\n if (scrollableContainer) {\r\n if (!isHorizontal) {\r\n scrollbarWidth = scrollableContainer.clientWidth ? scrollableContainer.offsetWidth - scrollableContainer.clientWidth : 0\r\n } else {\r\n scrollbarWidth = scrollableContainer.clientHeight ? scrollableContainer.offsetHeight - scrollableContainer.clientHeight : 0;\r\n scrollbarWidth += getScrollableBottomPadding(this)\r\n }\r\n }\r\n return scrollbarWidth > 0 ? scrollbarWidth : 0\r\n },\r\n _fireColumnResizedCallbacks: function() {\r\n var that = this;\r\n var lastColumnWidths = that._lastColumnWidths || [];\r\n var columnWidths = [];\r\n var columns = that.getColumns();\r\n for (var i = 0; i < columns.length; i++) {\r\n columnWidths[i] = columns[i].visibleWidth;\r\n if (columns[i].resizedCallbacks && !(0, _type.isDefined)(columns[i].groupIndex) && lastColumnWidths[i] !== columnWidths[i]) {\r\n columns[i].resizedCallbacks.fire(columnWidths[i])\r\n }\r\n }\r\n that._lastColumnWidths = columnWidths\r\n },\r\n _updateLastRowBorder: function(isFreeSpaceRowVisible) {\r\n if (this.option(\"showBorders\") && this.option(\"showRowLines\") && !isFreeSpaceRowVisible) {\r\n this.element().addClass(LAST_ROW_BORDER)\r\n } else {\r\n this.element().removeClass(LAST_ROW_BORDER)\r\n }\r\n },\r\n _updateScrollable: function() {\r\n var dxScrollable = _ui.default.getInstance(this.element());\r\n if (dxScrollable) {\r\n dxScrollable.update();\r\n this._updateHorizontalScrollPosition()\r\n }\r\n },\r\n _updateHorizontalScrollPosition: function() {\r\n var scrollable = this.getScrollable();\r\n var scrollLeft = scrollable && scrollable.scrollOffset().left;\r\n var rtlEnabled = this.option(\"rtlEnabled\");\r\n if (rtlEnabled) {\r\n var maxHorizontalScrollOffset = getMaxHorizontalScrollOffset(scrollable);\r\n var scrollRight = maxHorizontalScrollOffset - scrollLeft;\r\n if (scrollRight !== this._scrollRight) {\r\n this._scrollLeft = maxHorizontalScrollOffset - this._scrollRight\r\n }\r\n }\r\n if (this._scrollLeft >= 0 && scrollLeft !== this._scrollLeft) {\r\n scrollable.scrollTo({\r\n x: this._scrollLeft\r\n })\r\n }\r\n },\r\n _resizeCore: function() {\r\n var that = this;\r\n that._fireColumnResizedCallbacks();\r\n that._updateRowHeight();\r\n (0, _common.deferRender)(function() {\r\n that._renderScrollable();\r\n that.renderNoDataText();\r\n that.updateFreeSpaceRowHeight();\r\n (0, _common.deferUpdate)(function() {\r\n that._updateScrollable()\r\n })\r\n })\r\n },\r\n scrollTo: function(location) {\r\n var $element = this.element();\r\n var dxScrollable = $element && _ui.default.getInstance($element);\r\n if (dxScrollable) {\r\n dxScrollable.scrollTo(location)\r\n }\r\n },\r\n height: function(_height, hasHeight) {\r\n var that = this;\r\n var $element = this.element();\r\n if (0 === arguments.length) {\r\n return $element ? $element.outerHeight(true) : 0\r\n }\r\n that._hasHeight = void 0 === hasHeight ? \"auto\" !== _height : hasHeight;\r\n if ((0, _type.isDefined)(_height) && $element) {\r\n (0, _style.setHeight)($element, _height)\r\n }\r\n },\r\n setLoading: function(isLoading, messageText) {\r\n var that = this;\r\n var loadPanel = that._loadPanel;\r\n var dataController = that._dataController;\r\n var loadPanelOptions = that.option(\"loadPanel\") || {};\r\n var animation = dataController.isLoaded() ? loadPanelOptions.animation : null;\r\n var $element = that.element();\r\n if (!(0, _window.hasWindow)()) {\r\n return\r\n }\r\n if (!loadPanel && void 0 !== messageText && dataController.isLocalStore() && \"auto\" === loadPanelOptions.enabled && $element) {\r\n that._renderLoadPanel($element, $element.parent());\r\n loadPanel = that._loadPanel\r\n }\r\n if (loadPanel) {\r\n var visibilityOptions = {\r\n message: messageText || loadPanelOptions.text,\r\n animation: animation,\r\n visible: isLoading\r\n };\r\n clearTimeout(that._hideLoadingTimeoutID);\r\n if (loadPanel.option(\"visible\") && !isLoading) {\r\n that._hideLoadingTimeoutID = setTimeout(function() {\r\n loadPanel.option(visibilityOptions)\r\n }, LOADPANEL_HIDE_TIMEOUT)\r\n } else {\r\n loadPanel.option(visibilityOptions)\r\n }\r\n }\r\n },\r\n setRowsOpacity: function(columnIndex, value) {\r\n var $rows = this._getRowElements().not(\".\" + GROUP_ROW_CLASS) || [];\r\n this._setRowsOpacityCore($rows, this.getColumns(), columnIndex, value)\r\n },\r\n _getCellElementsCore: function(rowIndex) {\r\n var $cells = this.callBase.apply(this, arguments);\r\n if ($cells) {\r\n var groupCellIndex = $cells.filter(\".\" + GROUP_CELL_CLASS).index();\r\n if (groupCellIndex >= 0 && $cells.length > groupCellIndex + 1) {\r\n return $cells.slice(0, groupCellIndex + 1)\r\n }\r\n }\r\n return $cells\r\n },\r\n getTopVisibleItemIndex: function(isFloor) {\r\n var that = this;\r\n var itemIndex = 0;\r\n var prevOffsetTop = 0;\r\n var offsetTop = 0;\r\n var scrollPosition = that._scrollTop;\r\n var $contentElement = that._findContentElement();\r\n var contentElementOffsetTop = $contentElement && $contentElement.offset().top;\r\n var items = that._dataController.items();\r\n var tableElement = that.getTableElement();\r\n if (items.length && tableElement) {\r\n var rowElements = that._getRowElements(tableElement).filter(\":visible\");\r\n for (itemIndex = 0; itemIndex < items.length; itemIndex++) {\r\n prevOffsetTop = offsetTop;\r\n var rowElement = rowElements.eq(itemIndex);\r\n if (rowElement.length) {\r\n offsetTop = rowElement.offset().top - contentElementOffsetTop;\r\n if (offsetTop > scrollPosition) {\r\n if (itemIndex) {\r\n if (isFloor || 2 * scrollPosition < Math.round(offsetTop + prevOffsetTop)) {\r\n itemIndex--\r\n }\r\n }\r\n break\r\n }\r\n }\r\n }\r\n if (itemIndex && itemIndex === items.length) {\r\n itemIndex--\r\n }\r\n }\r\n return itemIndex\r\n },\r\n getTopVisibleRowData: function() {\r\n var itemIndex = this.getTopVisibleItemIndex();\r\n var items = this._dataController.items();\r\n if (items[itemIndex]) {\r\n return items[itemIndex].data\r\n }\r\n },\r\n _scrollToElement: function($element, offset) {\r\n var scrollable = this.getScrollable();\r\n scrollable && scrollable.scrollToElement($element, offset)\r\n },\r\n optionChanged: function(args) {\r\n var that = this;\r\n that.callBase(args);\r\n switch (args.name) {\r\n case \"wordWrapEnabled\":\r\n case \"showColumnLines\":\r\n case \"showRowLines\":\r\n case \"rowAlternationEnabled\":\r\n case \"rowTemplate\":\r\n case \"twoWayBindingEnabled\":\r\n that._invalidate(true, true);\r\n args.handled = true;\r\n break;\r\n case \"scrolling\":\r\n that._rowHeight = null;\r\n that._tableElement = null;\r\n args.handled = true;\r\n break;\r\n case \"rtlEnabled\":\r\n that._rowHeight = null;\r\n that._tableElement = null;\r\n break;\r\n case \"loadPanel\":\r\n that._tableElement = null;\r\n that._invalidate(true, \"loadPanel.enabled\" !== args.fullName);\r\n args.handled = true;\r\n break;\r\n case \"noDataText\":\r\n that.renderNoDataText();\r\n args.handled = true\r\n }\r\n },\r\n dispose: function() {\r\n clearTimeout(this._hideLoadingTimeoutID);\r\n this._scrollable && this._scrollable.dispose()\r\n },\r\n setScrollerSpacing: function() {}\r\n }\r\n }())\r\n }\r\n};\r\nexports.default = _default;\r\nmodule.exports = exports.default;\r\n","/**\r\n * DevExtreme (ui/grid_core/ui.grid_core.state_storing.js)\r\n * Version: 20.2.7\r\n * Build date: Thu Apr 22 2021\r\n *\r\n * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED\r\n * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/\r\n */\r\n\"use strict\";\r\nexports.default = void 0;\r\nvar _common = require(\"../../core/utils/common\");\r\nvar _type = require(\"../../core/utils/type\");\r\nvar _extend = require(\"../../core/utils/extend\");\r\nvar _uiGrid_core = require(\"./ui.grid_core.state_storing_core\");\r\nvar _deferred = require(\"../../core/utils/deferred\");\r\nvar getDataState = function(that) {\r\n var pagerView = that.getView(\"pagerView\");\r\n var dataController = that.getController(\"data\");\r\n var state = {\r\n allowedPageSizes: pagerView ? pagerView.getPageSizes() : void 0,\r\n filterPanel: {\r\n filterEnabled: that.option(\"filterPanel.filterEnabled\")\r\n },\r\n filterValue: that.option(\"filterValue\"),\r\n focusedRowKey: that.option(\"focusedRowEnabled\") ? that.option(\"focusedRowKey\") : void 0\r\n };\r\n return (0, _extend.extend)(state, dataController.getUserState())\r\n};\r\nvar processLoadState = function(that) {\r\n var columnsController = that.getController(\"columns\");\r\n var selectionController = that.getController(\"selection\");\r\n var exportController = that.getController(\"export\");\r\n var dataController = that.getController(\"data\");\r\n if (columnsController) {\r\n columnsController.columnsChanged.add(function() {\r\n that.updateState({\r\n columns: columnsController.getUserState()\r\n })\r\n })\r\n }\r\n if (selectionController) {\r\n selectionController.selectionChanged.add(function(e) {\r\n that.updateState({\r\n selectedRowKeys: e.selectedRowKeys,\r\n selectionFilter: e.selectionFilter\r\n })\r\n })\r\n }\r\n if (dataController) {\r\n that._initialPageSize = that.option(\"paging.pageSize\");\r\n that._initialFilterValue = that.option(\"filterValue\");\r\n dataController.changed.add(function() {\r\n var state = getDataState(that);\r\n that.updateState(state)\r\n })\r\n }\r\n if (exportController) {\r\n exportController.selectionOnlyChanged.add(function() {\r\n that.updateState({\r\n exportSelectionOnly: exportController.selectionOnly()\r\n })\r\n })\r\n }\r\n};\r\nvar DEFAULT_FILTER_VALUE = null;\r\nvar getFilterValue = function(that, state) {\r\n var filterSyncController = that.getController(\"filterSync\");\r\n var columnsController = that.getController(\"columns\");\r\n var hasFilterState = state.columns || void 0 !== state.filterValue;\r\n if (filterSyncController) {\r\n if (hasFilterState) {\r\n return state.filterValue || filterSyncController.getFilterValueFromColumns(state.columns)\r\n } else {\r\n return that._initialFilterValue || filterSyncController.getFilterValueFromColumns(columnsController.getColumns())\r\n }\r\n }\r\n return DEFAULT_FILTER_VALUE\r\n};\r\nvar _default = {\r\n defaultOptions: function() {\r\n return {\r\n stateStoring: {\r\n enabled: false,\r\n storageKey: null,\r\n type: \"localStorage\",\r\n customLoad: null,\r\n customSave: null,\r\n savingTimeout: 2e3\r\n }\r\n }\r\n },\r\n controllers: {\r\n stateStoring: _uiGrid_core.StateStoringController\r\n },\r\n extenders: {\r\n views: {\r\n rowsView: {\r\n init: function() {\r\n var that = this;\r\n var dataController = that.getController(\"data\");\r\n that.callBase();\r\n dataController.stateLoaded.add(function() {\r\n if (dataController.isLoaded() && !dataController.getDataSource()) {\r\n that.setLoading(false);\r\n that.renderNoDataText();\r\n var columnHeadersView = that.component.getView(\"columnHeadersView\");\r\n columnHeadersView && columnHeadersView.render();\r\n that.component._fireContentReadyAction()\r\n }\r\n })\r\n }\r\n }\r\n },\r\n controllers: {\r\n stateStoring: {\r\n init: function() {\r\n this.callBase.apply(this, arguments);\r\n processLoadState(this)\r\n },\r\n isLoading: function() {\r\n return this.callBase() || this.getController(\"data\").isStateLoading()\r\n },\r\n state: function(_state) {\r\n var result = this.callBase.apply(this, arguments);\r\n if (void 0 !== _state) {\r\n this.applyState((0, _extend.extend)({}, _state))\r\n }\r\n return result\r\n },\r\n updateState: function(state) {\r\n if (this.isEnabled()) {\r\n var oldState = this.state();\r\n var newState = (0, _extend.extend)({}, oldState, state);\r\n var oldStateHash = (0, _common.getKeyHash)(oldState);\r\n var newStateHash = (0, _common.getKeyHash)(newState);\r\n if (!(0, _common.equalByValue)(oldStateHash, newStateHash)) {\r\n (0, _extend.extend)(this._state, state);\r\n this.save()\r\n }\r\n } else {\r\n (0, _extend.extend)(this._state, state)\r\n }\r\n },\r\n applyState: function(state) {\r\n var that = this;\r\n var allowedPageSizes = state.allowedPageSizes;\r\n var searchText = state.searchText;\r\n var selectedRowKeys = state.selectedRowKeys;\r\n var selectionFilter = state.selectionFilter;\r\n var exportController = that.getController(\"export\");\r\n var columnsController = that.getController(\"columns\");\r\n var dataController = that.getController(\"data\");\r\n var scrollingMode = that.option(\"scrolling.mode\");\r\n var isVirtualScrollingMode = \"virtual\" === scrollingMode || \"infinite\" === scrollingMode;\r\n var showPageSizeSelector = true === that.option(\"pager.visible\") && that.option(\"pager.showPageSizeSelector\");\r\n that.component.beginUpdate();\r\n if (columnsController) {\r\n columnsController.setUserState(state.columns)\r\n }\r\n if (exportController) {\r\n exportController.selectionOnly(state.exportSelectionOnly)\r\n }\r\n if (selectedRowKeys) {\r\n that.option(\"selectedRowKeys\", selectedRowKeys)\r\n }\r\n that.option(\"selectionFilter\", selectionFilter);\r\n if (allowedPageSizes && \"auto\" === that.option(\"pager.allowedPageSizes\")) {\r\n that.option(\"pager\").allowedPageSizes = allowedPageSizes\r\n }\r\n if (that.option(\"focusedRowEnabled\") && void 0 !== state.focusedRowKey) {\r\n that.option(\"focusedRowKey\", state.focusedRowKey)\r\n }\r\n that.component.endUpdate();\r\n searchText && that.option(\"searchPanel.text\", searchText);\r\n that.option(\"filterValue\", getFilterValue(that, state));\r\n that.option(\"filterPanel.filterEnabled\", state.filterPanel ? state.filterPanel.filterEnabled : true);\r\n that.option(\"paging.pageSize\", (!isVirtualScrollingMode || showPageSizeSelector) && (0, _type.isDefined)(state.pageSize) ? state.pageSize : that._initialPageSize);\r\n that.option(\"paging.pageIndex\", state.pageIndex || 0);\r\n dataController && dataController.reset()\r\n }\r\n },\r\n columns: {\r\n getVisibleColumns: function() {\r\n var visibleColumns = this.callBase.apply(this, arguments);\r\n var stateStoringController = this.getController(\"stateStoring\");\r\n return stateStoringController.isEnabled() && !stateStoringController.isLoaded() ? [] : visibleColumns\r\n }\r\n },\r\n data: {\r\n callbackNames: function() {\r\n return this.callBase().concat([\"stateLoaded\"])\r\n },\r\n _refreshDataSource: function() {\r\n var _this = this;\r\n var callBase = this.callBase;\r\n var stateStoringController = this.getController(\"stateStoring\");\r\n if (stateStoringController.isEnabled() && !stateStoringController.isLoaded()) {\r\n clearTimeout(this._restoreStateTimeoutID);\r\n var deferred = new _deferred.Deferred;\r\n this._restoreStateTimeoutID = setTimeout(function() {\r\n stateStoringController.load().always(function() {\r\n _this._restoreStateTimeoutID = null\r\n }).done(function() {\r\n callBase.call(_this);\r\n _this.stateLoaded.fire();\r\n deferred.resolve()\r\n }).fail(function(error) {\r\n _this.stateLoaded.fire();\r\n _this._handleLoadError(error || \"Unknown error\");\r\n deferred.reject()\r\n })\r\n });\r\n return deferred.promise()\r\n } else {\r\n if (!this.isStateLoading()) {\r\n callBase.call(this)\r\n }\r\n }\r\n },\r\n isLoading: function() {\r\n var that = this;\r\n var stateStoringController = that.getController(\"stateStoring\");\r\n return this.callBase() || stateStoringController.isLoading()\r\n },\r\n isStateLoading: function() {\r\n return (0, _type.isDefined)(this._restoreStateTimeoutID)\r\n },\r\n isLoaded: function() {\r\n return this.callBase() && !this.isStateLoading()\r\n },\r\n dispose: function() {\r\n clearTimeout(this._restoreStateTimeoutID);\r\n this.callBase()\r\n }\r\n },\r\n selection: {\r\n _fireSelectionChanged: function(options) {\r\n var stateStoringController = this.getController(\"stateStoring\");\r\n var isDeferredSelection = this.option(\"selection.deferred\");\r\n if (stateStoringController.isLoading() && isDeferredSelection) {\r\n return\r\n }\r\n this.callBase.apply(this, arguments)\r\n }\r\n }\r\n }\r\n }\r\n};\r\nexports.default = _default;\r\nmodule.exports = exports.default;\r\n","/**\r\n * DevExtreme (ui/grid_core/ui.grid_core.state_storing_core.js)\r\n * Version: 20.2.7\r\n * Build date: Thu Apr 22 2021\r\n *\r\n * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED\r\n * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/\r\n */\r\n\"use strict\";\r\nexports.StateStoringController = void 0;\r\nvar _events_engine = _interopRequireDefault(require(\"../../events/core/events_engine\"));\r\nvar _window = require(\"../../core/utils/window\");\r\nvar _uiGrid_core = _interopRequireDefault(require(\"./ui.grid_core.modules\"));\r\nvar _ui = _interopRequireDefault(require(\"../widget/ui.errors\"));\r\nvar _browser = _interopRequireDefault(require(\"../../core/utils/browser\"));\r\nvar _storage = require(\"../../core/utils/storage\");\r\nvar _extend = require(\"../../core/utils/extend\");\r\nvar _iterator = require(\"../../core/utils/iterator\");\r\nvar _type = require(\"../../core/utils/type\");\r\nvar _deferred = require(\"../../core/utils/deferred\");\r\n\r\nfunction _interopRequireDefault(obj) {\r\n return obj && obj.__esModule ? obj : {\r\n \"default\": obj\r\n }\r\n}\r\nvar DATE_REGEX = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/;\r\nvar parseDates = function parseDates(state) {\r\n if (!state) {\r\n return\r\n }(0, _iterator.each)(state, function(key, value) {\r\n if ((0, _type.isPlainObject)(value) || Array.isArray(value)) {\r\n parseDates(value)\r\n } else {\r\n if (\"string\" === typeof value) {\r\n var date = DATE_REGEX.exec(value);\r\n if (date) {\r\n state[key] = new Date(Date.UTC(+date[1], +date[2] - 1, +date[3], +date[4], +date[5], +date[6]))\r\n }\r\n }\r\n }\r\n })\r\n};\r\nvar StateStoringController = _uiGrid_core.default.ViewController.inherit(function() {\r\n var getStorage = function(options) {\r\n var storage = \"sessionStorage\" === options.type ? (0, _storage.sessionStorage)() : (0, _window.getWindow)().localStorage;\r\n if (!storage) {\r\n if (\"file:\" === (0, _window.getWindow)().location.protocol && _browser.default.msie) {\r\n throw new Error(\"E1038\")\r\n } else {\r\n throw new Error(\"E1007\")\r\n }\r\n }\r\n return storage\r\n };\r\n var getUniqueStorageKey = function(options) {\r\n return (0, _type.isDefined)(options.storageKey) ? options.storageKey : \"storage\"\r\n };\r\n return {\r\n _loadState: function() {\r\n var options = this.option(\"stateStoring\");\r\n if (\"custom\" === options.type) {\r\n return options.customLoad && options.customLoad()\r\n }\r\n try {\r\n return JSON.parse(getStorage(options).getItem(getUniqueStorageKey(options)))\r\n } catch (e) {\r\n _ui.default.log(e.message)\r\n }\r\n },\r\n _saveState: function(state) {\r\n var options = this.option(\"stateStoring\");\r\n if (\"custom\" === options.type) {\r\n options.customSave && options.customSave(state);\r\n return\r\n }\r\n try {\r\n getStorage(options).setItem(getUniqueStorageKey(options), JSON.stringify(state))\r\n } catch (e) {\r\n _ui.default.log(e.message)\r\n }\r\n },\r\n publicMethods: function() {\r\n return [\"state\"]\r\n },\r\n isEnabled: function() {\r\n return this.option(\"stateStoring.enabled\")\r\n },\r\n init: function() {\r\n var that = this;\r\n that._state = {};\r\n that._isLoaded = false;\r\n that._isLoading = false;\r\n that._windowUnloadHandler = function() {\r\n if (void 0 !== that._savingTimeoutID) {\r\n that._saveState(that.state())\r\n }\r\n };\r\n _events_engine.default.on((0, _window.getWindow)(), \"unload\", that._windowUnloadHandler);\r\n return that\r\n },\r\n isLoaded: function() {\r\n return this._isLoaded\r\n },\r\n isLoading: function() {\r\n return this._isLoading\r\n },\r\n load: function() {\r\n var _this = this;\r\n this._isLoading = true;\r\n var loadResult = (0, _deferred.fromPromise)(this._loadState());\r\n loadResult.always(function() {\r\n _this._isLoaded = true;\r\n _this._isLoading = false\r\n }).done(function(state) {\r\n _this.state(state)\r\n });\r\n return loadResult\r\n },\r\n state: function(_state) {\r\n var that = this;\r\n if (!arguments.length) {\r\n return (0, _extend.extend)(true, {}, that._state)\r\n } else {\r\n that._state = (0, _extend.extend)({}, _state);\r\n parseDates(that._state)\r\n }\r\n },\r\n save: function() {\r\n var that = this;\r\n clearTimeout(that._savingTimeoutID);\r\n that._savingTimeoutID = setTimeout(function() {\r\n that._saveState(that.state());\r\n that._savingTimeoutID = void 0\r\n }, that.option(\"stateStoring.savingTimeout\"))\r\n },\r\n optionChanged: function(args) {\r\n var that = this;\r\n switch (args.name) {\r\n case \"stateStoring\":\r\n if (that.isEnabled() && !that.isLoading()) {\r\n that.load()\r\n }\r\n args.handled = true;\r\n break;\r\n default:\r\n that.callBase(args)\r\n }\r\n },\r\n dispose: function() {\r\n clearTimeout(this._savingTimeoutID);\r\n _events_engine.default.off((0, _window.getWindow)(), \"unload\", this._windowUnloadHandler)\r\n }\r\n }\r\n}());\r\nexports.StateStoringController = StateStoringController;\r\n","/**\r\n * DevExtreme (ui/grid_core/ui.grid_core.selection.js)\r\n * Version: 20.2.7\r\n * Build date: Thu Apr 22 2021\r\n *\r\n * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED\r\n * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/\r\n */\r\n\"use strict\";\r\nexports.default = void 0;\r\nvar _renderer = _interopRequireDefault(require(\"../../core/renderer\"));\r\nvar _events_engine = _interopRequireDefault(require(\"../../events/core/events_engine\"));\r\nvar _uiData_grid = _interopRequireDefault(require(\"../data_grid/ui.data_grid.core\"));\r\nvar _uiGrid_core = _interopRequireDefault(require(\"./ui.grid_core.utils\"));\r\nvar _type = require(\"../../core/utils/type\");\r\nvar _iterator = require(\"../../core/utils/iterator\");\r\nvar _extend = require(\"../../core/utils/extend\");\r\nvar _support = require(\"../../core/utils/support\");\r\nvar _click = require(\"../../events/click\");\r\nvar _message = _interopRequireDefault(require(\"../../localization/message\"));\r\nvar _index = require(\"../../events/utils/index\");\r\nvar _hold = _interopRequireDefault(require(\"../../events/hold\"));\r\nvar _selection = _interopRequireDefault(require(\"../selection/selection\"));\r\nvar _deferred = require(\"../../core/utils/deferred\");\r\n\r\nfunction _interopRequireDefault(obj) {\r\n return obj && obj.__esModule ? obj : {\r\n \"default\": obj\r\n }\r\n}\r\nvar EDITOR_CELL_CLASS = \"dx-editor-cell\";\r\nvar ROW_CLASS = \"dx-row\";\r\nvar ROW_SELECTION_CLASS = \"dx-selection\";\r\nvar SELECT_CHECKBOX_CLASS = \"dx-select-checkbox\";\r\nvar CHECKBOXES_HIDDEN_CLASS = \"dx-select-checkboxes-hidden\";\r\nvar COMMAND_SELECT_CLASS = \"dx-command-select\";\r\nvar SELECTION_DISABLED_CLASS = \"dx-selection-disabled\";\r\nvar DATA_ROW_CLASS = \"dx-data-row\";\r\nvar SHOW_CHECKBOXES_MODE = \"selection.showCheckBoxesMode\";\r\nvar SELECTION_MODE = \"selection.mode\";\r\nvar processLongTap = function(that, dxEvent) {\r\n var selectionController = that.getController(\"selection\");\r\n var rowsView = that.getView(\"rowsView\");\r\n var $row = (0, _renderer.default)(dxEvent.target).closest(\".\" + DATA_ROW_CLASS);\r\n var rowIndex = rowsView.getRowIndex($row);\r\n if (rowIndex < 0) {\r\n return\r\n }\r\n if (\"onLongTap\" === that.option(SHOW_CHECKBOXES_MODE)) {\r\n if (selectionController.isSelectionWithCheckboxes()) {\r\n selectionController.stopSelectionWithCheckboxes()\r\n } else {\r\n selectionController.startSelectionWithCheckboxes()\r\n }\r\n } else {\r\n if (\"onClick\" === that.option(SHOW_CHECKBOXES_MODE)) {\r\n selectionController.startSelectionWithCheckboxes()\r\n }\r\n if (\"always\" !== that.option(SHOW_CHECKBOXES_MODE)) {\r\n selectionController.changeItemSelection(rowIndex, {\r\n control: true\r\n })\r\n }\r\n }\r\n};\r\nvar SelectionController = _uiData_grid.default.Controller.inherit(function() {\r\n var isSeveralRowsSelected = function(that, selectionFilter) {\r\n var keyIndex = 0;\r\n var store = that._dataController.store();\r\n var key = store && store.key();\r\n var isComplexKey = Array.isArray(key);\r\n if (!selectionFilter.length) {\r\n return false\r\n }\r\n if (isComplexKey && Array.isArray(selectionFilter[0]) && \"and\" === selectionFilter[1]) {\r\n for (var i = 0; i < selectionFilter.length; i++) {\r\n if (Array.isArray(selectionFilter[i])) {\r\n if (selectionFilter[i][0] !== key[keyIndex] || \"=\" !== selectionFilter[i][1]) {\r\n return true\r\n }\r\n keyIndex++\r\n }\r\n }\r\n return false\r\n }\r\n return key !== selectionFilter[0]\r\n };\r\n var selectionCellTemplate = function(container, options) {\r\n var component = options.component;\r\n var rowsView = component.getView(\"rowsView\");\r\n if (component.option(\"renderAsync\") && !component.option(\"selection.deferred\")) {\r\n options.value = component.isRowSelected(options.row.key)\r\n }\r\n rowsView.renderSelectCheckBoxContainer((0, _renderer.default)(container), options)\r\n };\r\n var selectionHeaderTemplate = function(container, options) {\r\n var column = options.column;\r\n var $cellElement = (0, _renderer.default)(container);\r\n var columnHeadersView = options.component.getView(\"columnHeadersView\");\r\n $cellElement.addClass(EDITOR_CELL_CLASS);\r\n columnHeadersView._renderSelectAllCheckBox($cellElement, column);\r\n columnHeadersView._attachSelectAllCheckBoxClickEvent($cellElement)\r\n };\r\n return {\r\n init: function() {\r\n this._dataController = this.getController(\"data\");\r\n this._selectionMode = this.option(SELECTION_MODE);\r\n this._isSelectionWithCheckboxes = false;\r\n this._selection = this._createSelection();\r\n this._updateSelectColumn();\r\n this.createAction(\"onSelectionChanged\", {\r\n excludeValidators: [\"disabled\", \"readOnly\"]\r\n })\r\n },\r\n _getSelectionConfig: function() {\r\n var that = this;\r\n var dataController = that._dataController;\r\n var selectionOptions = that.option(\"selection\") || {};\r\n return {\r\n selectedKeys: that.option(\"selectedRowKeys\"),\r\n mode: that._selectionMode,\r\n deferred: selectionOptions.deferred,\r\n maxFilterLengthInRequest: selectionOptions.maxFilterLengthInRequest,\r\n selectionFilter: that.option(\"selectionFilter\"),\r\n key: function() {\r\n return dataController && dataController.key()\r\n },\r\n keyOf: function(item) {\r\n return dataController && dataController.keyOf(item)\r\n },\r\n dataFields: function() {\r\n return dataController.dataSource() && dataController.dataSource().select()\r\n },\r\n load: function(options) {\r\n return dataController.dataSource() && dataController.dataSource().load(options) || (new _deferred.Deferred).resolve([])\r\n },\r\n plainItems: function() {\r\n return dataController.items(true)\r\n },\r\n isItemSelected: function(item) {\r\n return item.selected\r\n },\r\n isSelectableItem: function(item) {\r\n return item && \"data\" === item.rowType && !item.isNewRow\r\n },\r\n getItemData: function(item) {\r\n return item && (item.oldData || item.data || item)\r\n },\r\n filter: function() {\r\n return dataController.getCombinedFilter(true)\r\n },\r\n totalCount: function() {\r\n return dataController.totalCount()\r\n },\r\n onSelectionChanged: that._updateSelectedItems.bind(this)\r\n }\r\n },\r\n _updateSelectColumn: function() {\r\n var columnsController = this.getController(\"columns\");\r\n var isSelectColumnVisible = this.isSelectColumnVisible();\r\n columnsController.addCommandColumn({\r\n type: \"selection\",\r\n command: \"select\",\r\n visible: isSelectColumnVisible,\r\n visibleIndex: -1,\r\n dataType: \"boolean\",\r\n alignment: \"center\",\r\n cssClass: COMMAND_SELECT_CLASS,\r\n width: \"auto\",\r\n cellTemplate: selectionCellTemplate,\r\n headerCellTemplate: selectionHeaderTemplate\r\n });\r\n columnsController.columnOption(\"command:select\", \"visible\", isSelectColumnVisible)\r\n },\r\n _createSelection: function() {\r\n var options = this._getSelectionConfig();\r\n return new _selection.default(options)\r\n },\r\n _fireSelectionChanged: function(options) {\r\n if (options) {\r\n this.executeAction(\"onSelectionChanged\", options)\r\n }\r\n var argument = this.option(\"selection.deferred\") ? {\r\n selectionFilter: this.option(\"selectionFilter\")\r\n } : {\r\n selectedRowKeys: this.option(\"selectedRowKeys\")\r\n };\r\n this.selectionChanged.fire(argument)\r\n },\r\n _updateCheckboxesState: function(options) {\r\n var isDeferredMode = options.isDeferredMode;\r\n var selectionFilter = options.selectionFilter;\r\n var selectedItemKeys = options.selectedItemKeys;\r\n var removedItemKeys = options.removedItemKeys;\r\n if (\"onClick\" === this.option(SHOW_CHECKBOXES_MODE)) {\r\n if (isDeferredMode ? selectionFilter && isSeveralRowsSelected(this, selectionFilter) : selectedItemKeys.length > 1) {\r\n this.startSelectionWithCheckboxes()\r\n } else {\r\n if (isDeferredMode ? selectionFilter && !selectionFilter.length : 0 === selectedItemKeys.length && removedItemKeys.length) {\r\n this.stopSelectionWithCheckboxes()\r\n }\r\n }\r\n }\r\n },\r\n _updateSelectedItems: function(args) {\r\n var that = this;\r\n var selectionChangedOptions;\r\n var isDeferredMode = that.option(\"selection.deferred\");\r\n var selectionFilter = that._selection.selectionFilter();\r\n var dataController = that._dataController;\r\n var items = dataController.items();\r\n if (!items) {\r\n return\r\n }\r\n var isSelectionWithCheckboxes = that.isSelectionWithCheckboxes();\r\n var changedItemIndexes = that.getChangedItemIndexes(items);\r\n that._updateCheckboxesState({\r\n selectedItemKeys: args.selectedItemKeys,\r\n removedItemKeys: args.removedItemKeys,\r\n selectionFilter: selectionFilter,\r\n isDeferredMode: isDeferredMode\r\n });\r\n if (changedItemIndexes.length || isSelectionWithCheckboxes !== that.isSelectionWithCheckboxes()) {\r\n dataController.updateItems({\r\n changeType: \"updateSelection\",\r\n itemIndexes: changedItemIndexes\r\n })\r\n }\r\n if (isDeferredMode) {\r\n that.option(\"selectionFilter\", selectionFilter);\r\n selectionChangedOptions = {}\r\n } else {\r\n if (args.addedItemKeys.length || args.removedItemKeys.length) {\r\n that._selectedItemsInternalChange = true;\r\n that.option(\"selectedRowKeys\", args.selectedItemKeys.slice(0));\r\n that._selectedItemsInternalChange = false;\r\n selectionChangedOptions = {\r\n selectedRowsData: args.selectedItems.slice(0),\r\n selectedRowKeys: args.selectedItemKeys.slice(0),\r\n currentSelectedRowKeys: args.addedItemKeys.slice(0),\r\n currentDeselectedRowKeys: args.removedItemKeys.slice(0)\r\n }\r\n }\r\n }\r\n that._fireSelectionChanged(selectionChangedOptions)\r\n },\r\n getChangedItemIndexes: function(items) {\r\n var that = this;\r\n var itemIndexes = [];\r\n var isDeferredSelection = this.option(\"selection.deferred\");\r\n for (var i = 0, length = items.length; i < length; i++) {\r\n var row = items[i];\r\n var isItemSelected = that.isRowSelected(isDeferredSelection ? row.data : row.key);\r\n if (that._selection.isDataItem(row) && row.isSelected !== isItemSelected) {\r\n itemIndexes.push(i)\r\n }\r\n }\r\n return itemIndexes\r\n },\r\n callbackNames: function() {\r\n return [\"selectionChanged\"]\r\n },\r\n optionChanged: function(args) {\r\n var that = this;\r\n that.callBase(args);\r\n switch (args.name) {\r\n case \"selection\":\r\n var oldSelectionMode = that._selectionMode;\r\n that.init();\r\n var selectionMode = that._selectionMode;\r\n var selectedRowKeys = that.option(\"selectedRowKeys\");\r\n if (oldSelectionMode !== selectionMode) {\r\n if (\"single\" === selectionMode) {\r\n if (selectedRowKeys.length > 1) {\r\n selectedRowKeys = [selectedRowKeys[0]]\r\n }\r\n } else {\r\n if (\"multiple\" !== selectionMode) {\r\n selectedRowKeys = []\r\n }\r\n }\r\n }\r\n that.selectRows(selectedRowKeys).always(function() {\r\n that._fireSelectionChanged()\r\n });\r\n that.getController(\"columns\").updateColumns();\r\n args.handled = true;\r\n break;\r\n case \"selectionFilter\":\r\n this._selection.selectionFilter(args.value);\r\n args.handled = true;\r\n break;\r\n case \"selectedRowKeys\":\r\n var value = args.value || [];\r\n if (Array.isArray(value) && !that._selectedItemsInternalChange && (that.component.getDataSource() || !value.length)) {\r\n that.selectRows(value)\r\n }\r\n args.handled = true\r\n }\r\n },\r\n publicMethods: function() {\r\n return [\"selectRows\", \"deselectRows\", \"selectRowsByIndexes\", \"getSelectedRowKeys\", \"getSelectedRowsData\", \"clearSelection\", \"selectAll\", \"deselectAll\", \"startSelectionWithCheckboxes\", \"stopSelectionWithCheckboxes\", \"isRowSelected\"]\r\n },\r\n isRowSelected: function(arg) {\r\n return this._selection.isItemSelected(arg)\r\n },\r\n isSelectColumnVisible: function() {\r\n return \"multiple\" === this.option(SELECTION_MODE) && (\"always\" === this.option(SHOW_CHECKBOXES_MODE) || \"onClick\" === this.option(SHOW_CHECKBOXES_MODE) || this._isSelectionWithCheckboxes)\r\n },\r\n _isOnePageSelectAll: function() {\r\n return \"page\" === this.option(\"selection.selectAllMode\")\r\n },\r\n isSelectAll: function() {\r\n return this._selection.getSelectAllState(this._isOnePageSelectAll())\r\n },\r\n selectAll: function() {\r\n if (\"onClick\" === this.option(SHOW_CHECKBOXES_MODE)) {\r\n this.startSelectionWithCheckboxes()\r\n }\r\n return this._selection.selectAll(this._isOnePageSelectAll())\r\n },\r\n deselectAll: function() {\r\n return this._selection.deselectAll(this._isOnePageSelectAll())\r\n },\r\n clearSelection: function() {\r\n return this.selectedItemKeys([])\r\n },\r\n refresh: function() {\r\n var selectedRowKeys = this.option(\"selectedRowKeys\") || [];\r\n if (!this.option(\"selection.deferred\") && selectedRowKeys.length) {\r\n return this.selectedItemKeys(selectedRowKeys)\r\n }\r\n return (new _deferred.Deferred).resolve().promise()\r\n },\r\n selectedItemKeys: function(value, preserve, isDeselect, isSelectAll) {\r\n return this._selection.selectedItemKeys(value, preserve, isDeselect, isSelectAll)\r\n },\r\n getSelectedRowKeys: function() {\r\n return this._selection.getSelectedItemKeys()\r\n },\r\n selectRows: function(keys, preserve) {\r\n return this.selectedItemKeys(keys, preserve)\r\n },\r\n deselectRows: function(keys) {\r\n return this.selectedItemKeys(keys, true, true)\r\n },\r\n selectRowsByIndexes: function(indexes) {\r\n var items = this._dataController.items();\r\n var keys = [];\r\n if (!Array.isArray(indexes)) {\r\n indexes = Array.prototype.slice.call(arguments, 0)\r\n }(0, _iterator.each)(indexes, function() {\r\n var item = items[this];\r\n if (item && \"data\" === item.rowType) {\r\n keys.push(item.key)\r\n }\r\n });\r\n return this.selectRows(keys)\r\n },\r\n getSelectedRowsData: function() {\r\n return this._selection.getSelectedItems()\r\n },\r\n changeItemSelection: function(itemIndex, keys) {\r\n keys = keys || {};\r\n if (this.isSelectionWithCheckboxes()) {\r\n keys.control = true\r\n }\r\n return this._selection.changeItemSelection(this._dataController.getRowIndexDelta() + itemIndex, keys)\r\n },\r\n focusedItemIndex: function(itemIndex) {\r\n var that = this;\r\n if ((0, _type.isDefined)(itemIndex)) {\r\n that._selection._focusedItemIndex = itemIndex\r\n } else {\r\n return that._selection._focusedItemIndex\r\n }\r\n },\r\n isSelectionWithCheckboxes: function() {\r\n return \"multiple\" === this.option(SELECTION_MODE) && (\"always\" === this.option(SHOW_CHECKBOXES_MODE) || this._isSelectionWithCheckboxes)\r\n },\r\n startSelectionWithCheckboxes: function() {\r\n var that = this;\r\n if (\"multiple\" === that.option(SELECTION_MODE) && !that.isSelectionWithCheckboxes()) {\r\n that._isSelectionWithCheckboxes = true;\r\n that._updateSelectColumn();\r\n return true\r\n }\r\n return false\r\n },\r\n stopSelectionWithCheckboxes: function() {\r\n var that = this;\r\n if (that._isSelectionWithCheckboxes) {\r\n that._isSelectionWithCheckboxes = false;\r\n that._updateSelectColumn();\r\n return true\r\n }\r\n return false\r\n }\r\n }\r\n}());\r\nvar _default = {\r\n defaultOptions: function() {\r\n return {\r\n selection: {\r\n mode: \"none\",\r\n showCheckBoxesMode: \"onClick\",\r\n allowSelectAll: true,\r\n selectAllMode: \"allPages\",\r\n maxFilterLengthInRequest: 1500,\r\n deferred: false\r\n },\r\n selectionFilter: [],\r\n selectedRowKeys: []\r\n }\r\n },\r\n controllers: {\r\n selection: SelectionController\r\n },\r\n extenders: {\r\n controllers: {\r\n data: {\r\n init: function() {\r\n var selectionController = this.getController(\"selection\");\r\n var isDeferredMode = this.option(\"selection.deferred\");\r\n this.callBase.apply(this, arguments);\r\n if (isDeferredMode) {\r\n selectionController._updateCheckboxesState({\r\n isDeferredMode: true,\r\n selectionFilter: this.option(\"selectionFilter\")\r\n })\r\n }\r\n },\r\n _loadDataSource: function() {\r\n var that = this;\r\n return that.callBase().done(function() {\r\n that.getController(\"selection\").refresh()\r\n })\r\n },\r\n _processDataItem: function(item, options) {\r\n var that = this;\r\n var selectionController = that.getController(\"selection\");\r\n var hasSelectColumn = selectionController.isSelectColumnVisible();\r\n var isDeferredSelection = options.isDeferredSelection = void 0 === options.isDeferredSelection ? this.option(\"selection.deferred\") : options.isDeferredSelection;\r\n var dataItem = this.callBase.apply(this, arguments);\r\n dataItem.isSelected = selectionController.isRowSelected(isDeferredSelection ? dataItem.data : dataItem.key);\r\n if (hasSelectColumn && dataItem.values) {\r\n for (var i = 0; i < options.visibleColumns.length; i++) {\r\n if (\"select\" === options.visibleColumns[i].command) {\r\n dataItem.values[i] = dataItem.isSelected;\r\n break\r\n }\r\n }\r\n }\r\n return dataItem\r\n },\r\n refresh: function(options) {\r\n var that = this;\r\n var d = new _deferred.Deferred;\r\n this.callBase.apply(this, arguments).done(function() {\r\n if (!options || options.selection) {\r\n that.getController(\"selection\").refresh().done(d.resolve).fail(d.reject)\r\n } else {\r\n d.resolve()\r\n }\r\n }).fail(d.reject);\r\n return d.promise()\r\n },\r\n _handleDataChanged: function(e) {\r\n this.callBase.apply(this, arguments);\r\n if ((!e || \"refresh\" === e.changeType) && !this._repaintChangesOnly) {\r\n this.getController(\"selection\").focusedItemIndex(-1)\r\n }\r\n },\r\n _applyChange: function(change) {\r\n var _this = this;\r\n if (change && \"updateSelection\" === change.changeType) {\r\n change.items.forEach(function(item, index) {\r\n var currentItem = _this._items[index];\r\n if (currentItem) {\r\n currentItem.isSelected = item.isSelected;\r\n currentItem.values = item.values\r\n }\r\n });\r\n return\r\n }\r\n return this.callBase.apply(this, arguments)\r\n },\r\n _endUpdateCore: function() {\r\n var changes = this._changes;\r\n var isUpdateSelection = changes.length > 1 && changes.every(function(change) {\r\n return \"updateSelection\" === change.changeType\r\n });\r\n if (isUpdateSelection) {\r\n var itemIndexes = changes.map(function(change) {\r\n return change.itemIndexes || []\r\n }).reduce(function(a, b) {\r\n return a.concat(b)\r\n });\r\n this._changes = [{\r\n changeType: \"updateSelection\",\r\n itemIndexes: itemIndexes\r\n }]\r\n }\r\n this.callBase.apply(this, arguments)\r\n },\r\n push: function(changes) {\r\n this.callBase.apply(this, arguments);\r\n var removedKeys = changes.filter(function(change) {\r\n return \"remove\" === change.type\r\n }).map(function(change) {\r\n return change.key\r\n });\r\n removedKeys.length && this.getController(\"selection\").deselectRows(removedKeys)\r\n }\r\n },\r\n contextMenu: {\r\n _contextMenuPrepared: function(options) {\r\n var dxEvent = options.event;\r\n if (dxEvent.originalEvent && \"dxhold\" !== dxEvent.originalEvent.type || options.items && options.items.length > 0) {\r\n return\r\n }\r\n processLongTap(this, dxEvent)\r\n }\r\n }\r\n },\r\n views: {\r\n columnHeadersView: {\r\n init: function() {\r\n var that = this;\r\n that.callBase();\r\n that.getController(\"selection\").selectionChanged.add(that._updateSelectAllValue.bind(that))\r\n },\r\n _updateSelectAllValue: function() {\r\n var that = this;\r\n var $element = that.element();\r\n var $editor = $element && $element.find(\".\" + SELECT_CHECKBOX_CLASS);\r\n if ($element && $editor.length && \"multiple\" === that.option(\"selection.mode\")) {\r\n $editor.dxCheckBox(\"instance\").option({\r\n visible: !that.getController(\"data\").isEmpty(),\r\n value: that.getController(\"selection\").isSelectAll()\r\n })\r\n }\r\n },\r\n _handleDataChanged: function(e) {\r\n this.callBase(e);\r\n if (!e || \"refresh\" === e.changeType) {\r\n this._updateSelectAllValue()\r\n }\r\n },\r\n _renderSelectAllCheckBox: function($container, column) {\r\n var that = this;\r\n var selectionController = that.getController(\"selection\");\r\n var isEmptyData = that.getController(\"data\").isEmpty();\r\n var groupElement = (0, _renderer.default)(\"
\").appendTo($container).addClass(SELECT_CHECKBOX_CLASS);\r\n that.setAria(\"label\", _message.default.format(\"dxDataGrid-ariaSelectAll\"), $container);\r\n that.getController(\"editorFactory\").createEditor(groupElement, (0, _extend.extend)({}, column, {\r\n parentType: \"headerRow\",\r\n dataType: \"boolean\",\r\n value: selectionController.isSelectAll(),\r\n editorOptions: {\r\n visible: !isEmptyData && (that.option(\"selection.allowSelectAll\") || false !== selectionController.isSelectAll())\r\n },\r\n tabIndex: that.option(\"useLegacyKeyboardNavigation\") ? -1 : that.option(\"tabIndex\") || 0,\r\n setValue: function(value, e) {\r\n var allowSelectAll = that.option(\"selection.allowSelectAll\");\r\n e.component.option(\"visible\", allowSelectAll || false !== e.component.option(\"value\"));\r\n if (!e.event || selectionController.isSelectAll() === value) {\r\n return\r\n }\r\n if (e.value && !allowSelectAll) {\r\n e.component.option(\"value\", false)\r\n } else {\r\n e.value ? selectionController.selectAll() : selectionController.deselectAll()\r\n }\r\n e.event.preventDefault()\r\n }\r\n }));\r\n return groupElement\r\n },\r\n _attachSelectAllCheckBoxClickEvent: function($element) {\r\n _events_engine.default.on($element, _click.name, this.createAction(function(e) {\r\n var event = e.event;\r\n if (!(0, _renderer.default)(event.target).closest(\".\" + SELECT_CHECKBOX_CLASS).length) {\r\n _events_engine.default.trigger((0, _renderer.default)(event.currentTarget).children(\".\" + SELECT_CHECKBOX_CLASS), _click.name)\r\n }\r\n event.preventDefault()\r\n }))\r\n }\r\n },\r\n rowsView: {\r\n renderSelectCheckBoxContainer: function($container, options) {\r\n if (\"data\" === options.rowType && !options.row.isNewRow) {\r\n $container.addClass(EDITOR_CELL_CLASS);\r\n this._attachCheckBoxClickEvent($container);\r\n this.setAria(\"label\", _message.default.format(\"dxDataGrid-ariaSelectRow\"), $container);\r\n this._renderSelectCheckBox($container, options)\r\n } else {\r\n _uiGrid_core.default.setEmptyText($container)\r\n }\r\n },\r\n _renderSelectCheckBox: function(container, options) {\r\n var groupElement = (0, _renderer.default)(\"
\").addClass(SELECT_CHECKBOX_CLASS).appendTo(container);\r\n this.getController(\"editorFactory\").createEditor(groupElement, (0, _extend.extend)({}, options.column, {\r\n parentType: \"dataRow\",\r\n dataType: \"boolean\",\r\n lookup: null,\r\n value: options.value,\r\n setValue: function(value, e) {\r\n var _e$event;\r\n if (\"keydown\" === (null === e || void 0 === e ? void 0 : null === (_e$event = e.event) || void 0 === _e$event ? void 0 : _e$event.type)) {\r\n _events_engine.default.trigger(e.element, _click.name, e)\r\n }\r\n },\r\n row: options.row\r\n }));\r\n return groupElement\r\n },\r\n _attachCheckBoxClickEvent: function($element) {\r\n _events_engine.default.on($element, _click.name, this.createAction(function(e) {\r\n var selectionController = this.getController(\"selection\");\r\n var event = e.event;\r\n var rowIndex = this.getRowIndex((0, _renderer.default)(event.currentTarget).closest(\".\" + ROW_CLASS));\r\n if (rowIndex >= 0) {\r\n selectionController.startSelectionWithCheckboxes();\r\n selectionController.changeItemSelection(rowIndex, {\r\n shift: event.shiftKey\r\n });\r\n if ((0, _renderer.default)(event.target).closest(\".\" + SELECT_CHECKBOX_CLASS).length) {\r\n this.getController(\"data\").updateItems({\r\n changeType: \"updateSelection\",\r\n itemIndexes: [rowIndex]\r\n })\r\n }\r\n }\r\n }))\r\n },\r\n _update: function(change) {\r\n var that = this;\r\n var tableElements = that.getTableElements();\r\n if (\"updateSelection\" === change.changeType) {\r\n if (tableElements.length > 0) {\r\n (0, _iterator.each)(tableElements, function(_, tableElement) {\r\n (0, _iterator.each)(change.itemIndexes || [], function(_, index) {\r\n var $row;\r\n if (change.items[index]) {\r\n $row = that._getRowElements((0, _renderer.default)(tableElement)).eq(index);\r\n if ($row.length) {\r\n var isSelected = change.items[index].isSelected;\r\n $row.toggleClass(ROW_SELECTION_CLASS, void 0 === isSelected ? false : isSelected).find(\".\" + SELECT_CHECKBOX_CLASS).dxCheckBox(\"option\", \"value\", isSelected);\r\n that.setAria(\"selected\", isSelected, $row)\r\n }\r\n }\r\n })\r\n });\r\n that._updateCheckboxesClass()\r\n }\r\n } else {\r\n that.callBase(change)\r\n }\r\n },\r\n _createTable: function() {\r\n var that = this;\r\n var selectionMode = that.option(\"selection.mode\");\r\n var $table = that.callBase.apply(that, arguments);\r\n if (\"none\" !== selectionMode) {\r\n if (\"onLongTap\" === that.option(SHOW_CHECKBOXES_MODE) || !_support.touch) {\r\n _events_engine.default.on($table, (0, _index.addNamespace)(_hold.default.name, \"dxDataGridRowsView\"), \".\" + DATA_ROW_CLASS, that.createAction(function(e) {\r\n processLongTap(that.component, e.event);\r\n e.event.stopPropagation()\r\n }))\r\n }\r\n _events_engine.default.on($table, \"mousedown selectstart\", that.createAction(function(e) {\r\n var event = e.event;\r\n if (event.shiftKey) {\r\n event.preventDefault()\r\n }\r\n }))\r\n }\r\n return $table\r\n },\r\n _createRow: function(row) {\r\n var $row = this.callBase(row);\r\n if (row) {\r\n var isSelected = !!row.isSelected;\r\n if (isSelected) {\r\n $row.addClass(ROW_SELECTION_CLASS)\r\n }\r\n this.setAria(\"selected\", isSelected, $row)\r\n }\r\n return $row\r\n },\r\n _rowClick: function(e) {\r\n var that = this;\r\n var dxEvent = e.event;\r\n var isSelectionDisabled = (0, _renderer.default)(dxEvent.target).closest(\".\" + SELECTION_DISABLED_CLASS).length;\r\n if (!that.isClickableElement((0, _renderer.default)(dxEvent.target))) {\r\n if (!isSelectionDisabled && (\"multiple\" !== that.option(SELECTION_MODE) || \"always\" !== that.option(SHOW_CHECKBOXES_MODE))) {\r\n if (that.getController(\"selection\").changeItemSelection(e.rowIndex, {\r\n control: (0, _index.isCommandKeyPressed)(dxEvent),\r\n shift: dxEvent.shiftKey\r\n })) {\r\n dxEvent.preventDefault();\r\n e.handled = true\r\n }\r\n }\r\n that.callBase(e)\r\n }\r\n },\r\n isClickableElement: function($target) {\r\n var isCommandSelect = $target.closest(\".\" + COMMAND_SELECT_CLASS).length;\r\n return !!isCommandSelect\r\n },\r\n _renderCore: function(change) {\r\n this.callBase(change);\r\n this._updateCheckboxesClass()\r\n },\r\n _updateCheckboxesClass: function() {\r\n var tableElements = this.getTableElements();\r\n var selectionController = this.getController(\"selection\");\r\n var isCheckBoxesHidden = selectionController.isSelectColumnVisible() && !selectionController.isSelectionWithCheckboxes();\r\n (0, _iterator.each)(tableElements, function(_, tableElement) {\r\n (0, _renderer.default)(tableElement).toggleClass(CHECKBOXES_HIDDEN_CLASS, isCheckBoxesHidden)\r\n })\r\n }\r\n }\r\n }\r\n }\r\n};\r\nexports.default = _default;\r\nmodule.exports = exports.default;\r\n","/**\r\n * DevExtreme (ui/grid_core/ui.grid_core.validating.js)\r\n * Version: 20.2.7\r\n * Build date: Thu Apr 22 2021\r\n *\r\n * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED\r\n * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/\r\n */\r\n\"use strict\";\r\nexports.default = void 0;\r\nvar _renderer = _interopRequireDefault(require(\"../../core/renderer\"));\r\nvar _events_engine = _interopRequireDefault(require(\"../../events/core/events_engine\"));\r\nvar _uiGrid_core = _interopRequireDefault(require(\"./ui.grid_core.modules\"));\r\nvar _uiGrid_core2 = _interopRequireDefault(require(\"./ui.grid_core.utils\"));\r\nvar _array_utils = require(\"../../data/array_utils\");\r\nvar _common = require(\"../../core/utils/common\");\r\nvar _iterator = require(\"../../core/utils/iterator\");\r\nvar _type = require(\"../../core/utils/type\");\r\nvar _extend = require(\"../../core/utils/extend\");\r\nvar _selectors = require(\"../widget/selectors\");\r\nvar _message = _interopRequireDefault(require(\"../../localization/message\"));\r\nvar _button = _interopRequireDefault(require(\"../button\"));\r\nvar _pointer = _interopRequireDefault(require(\"../../events/pointer\"));\r\nvar _validation_engine = _interopRequireDefault(require(\"../validation_engine\"));\r\nvar _validator = _interopRequireDefault(require(\"../validator\"));\r\nvar _overlay = _interopRequireDefault(require(\"../overlay\"));\r\nvar _ui = _interopRequireDefault(require(\"../widget/ui.errors\"));\r\nvar _deferred = require(\"../../core/utils/deferred\");\r\nvar _load_indicator = _interopRequireDefault(require(\"../load_indicator\"));\r\nvar _string = require(\"../../core/utils/string\");\r\nvar _browser = _interopRequireDefault(require(\"../../core/utils/browser\"));\r\n\r\nfunction _interopRequireDefault(obj) {\r\n return obj && obj.__esModule ? obj : {\r\n \"default\": obj\r\n }\r\n}\r\n\r\nfunction _toConsumableArray(arr) {\r\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread()\r\n}\r\n\r\nfunction _nonIterableSpread() {\r\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")\r\n}\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) {\r\n if (!o) {\r\n return\r\n }\r\n if (\"string\" === typeof o) {\r\n return _arrayLikeToArray(o, minLen)\r\n }\r\n var n = Object.prototype.toString.call(o).slice(8, -1);\r\n if (\"Object\" === n && o.constructor) {\r\n n = o.constructor.name\r\n }\r\n if (\"Map\" === n || \"Set\" === n) {\r\n return Array.from(o)\r\n }\r\n if (\"Arguments\" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) {\r\n return _arrayLikeToArray(o, minLen)\r\n }\r\n}\r\n\r\nfunction _iterableToArray(iter) {\r\n if (\"undefined\" !== typeof Symbol && null != iter[Symbol.iterator] || null != iter[\"@@iterator\"]) {\r\n return Array.from(iter)\r\n }\r\n}\r\n\r\nfunction _arrayWithoutHoles(arr) {\r\n if (Array.isArray(arr)) {\r\n return _arrayLikeToArray(arr)\r\n }\r\n}\r\n\r\nfunction _arrayLikeToArray(arr, len) {\r\n if (null == len || len > arr.length) {\r\n len = arr.length\r\n }\r\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\r\n arr2[i] = arr[i]\r\n }\r\n return arr2\r\n}\r\nvar INVALIDATE_CLASS = \"invalid\";\r\nvar REVERT_TOOLTIP_CLASS = \"revert-tooltip\";\r\nvar ROWS_VIEW_CLASS = \"rowsview\";\r\nvar INVALID_MESSAGE_CLASS = \"dx-invalid-message\";\r\nvar WIDGET_INVALID_MESSAGE_CLASS = \"invalid-message\";\r\nvar INVALID_MESSAGE_ALWAYS_CLASS = \"dx-invalid-message-always\";\r\nvar REVERT_BUTTON_CLASS = \"dx-revert-button\";\r\nvar VALIDATOR_CLASS = \"validator\";\r\nvar PENDING_INDICATOR_CLASS = \"dx-pending-indicator\";\r\nvar VALIDATION_PENDING_CLASS = \"dx-validation-pending\";\r\nvar CONTENT_CLASS = \"content\";\r\nvar INSERT_INDEX = \"__DX_INSERT_INDEX__\";\r\nvar PADDING_BETWEEN_TOOLTIPS = 2;\r\nvar EDIT_MODE_ROW = \"row\";\r\nvar EDIT_MODE_FORM = \"form\";\r\nvar EDIT_MODE_BATCH = \"batch\";\r\nvar EDIT_MODE_CELL = \"cell\";\r\nvar EDIT_MODE_POPUP = \"popup\";\r\nvar GROUP_CELL_CLASS = \"dx-group-cell\";\r\nvar FORM_BASED_MODES = [EDIT_MODE_POPUP, EDIT_MODE_FORM];\r\nvar COMMAND_TRANSPARENT = \"transparent\";\r\nvar VALIDATION_STATUS = {\r\n valid: \"valid\",\r\n invalid: \"invalid\",\r\n pending: \"pending\"\r\n};\r\nvar EDIT_DATA_INSERT_TYPE = \"insert\";\r\nvar EDIT_DATA_REMOVE_TYPE = \"remove\";\r\nvar VALIDATION_CANCELLED = \"cancel\";\r\nvar validationResultIsValid = function(result) {\r\n return (0, _type.isDefined)(result) && result !== VALIDATION_CANCELLED\r\n};\r\nvar cellValueShouldBeValidated = function(value, rowOptions) {\r\n return void 0 !== value || void 0 === value && rowOptions && !rowOptions.isNewRow\r\n};\r\nvar ValidatingController = _uiGrid_core.default.Controller.inherit(function() {\r\n return {\r\n init: function() {\r\n this._editingController = this.getController(\"editing\");\r\n this.createAction(\"onRowValidating\");\r\n if (!this._validationState) {\r\n this._validationState = []\r\n }\r\n },\r\n _rowIsValidated: function(change) {\r\n var validationData = this._getValidationData(null === change || void 0 === change ? void 0 : change.key);\r\n return !!validationData && !!validationData.validated\r\n },\r\n _getValidationData: function(key, create) {\r\n var validationData = this._validationState.filter(function(data) {\r\n return (0, _common.equalByValue)(data.key, key)\r\n })[0];\r\n if (!validationData && create) {\r\n validationData = {\r\n key: key,\r\n isValid: true\r\n };\r\n this._validationState.push(validationData)\r\n }\r\n return validationData\r\n },\r\n _getBrokenRules: function(validationData, validationResults) {\r\n var brokenRules;\r\n if (validationResults) {\r\n brokenRules = validationResults.brokenRules || validationResults.brokenRule && [validationResults.brokenRule]\r\n } else {\r\n brokenRules = validationData.brokenRules || []\r\n }\r\n return brokenRules\r\n },\r\n _rowValidating: function(validationData, validationResults) {\r\n var deferred = new _deferred.Deferred;\r\n var change = this._editingController.getChangeByKey(null === validationData || void 0 === validationData ? void 0 : validationData.key);\r\n var brokenRules = this._getBrokenRules(validationData, validationResults);\r\n var isValid = validationResults ? validationResults.isValid : validationData.isValid;\r\n var parameters = {\r\n brokenRules: brokenRules,\r\n isValid: isValid,\r\n key: change.key,\r\n newData: change.data,\r\n oldData: this._editingController._getOldData(change.key),\r\n promise: null,\r\n errorText: this.getHiddenValidatorsErrorText(brokenRules)\r\n };\r\n this.executeAction(\"onRowValidating\", parameters);\r\n (0, _deferred.when)(parameters.promise).always(function() {\r\n validationData.isValid = parameters.isValid;\r\n validationData.errorText = parameters.errorText;\r\n deferred.resolve(parameters)\r\n });\r\n return deferred.promise()\r\n },\r\n getHiddenValidatorsErrorText: function(brokenRules) {\r\n var brokenRulesMessages = [];\r\n (0, _iterator.each)(brokenRules, function(_, brokenRule) {\r\n var column = brokenRule.column;\r\n var isGroupExpandColumn = column && void 0 !== column.groupIndex && !column.showWhenGrouped;\r\n var isVisibleColumn = column && column.visible;\r\n if (!brokenRule.validator.$element().parent().length && (!isVisibleColumn || isGroupExpandColumn)) {\r\n brokenRulesMessages.push(brokenRule.message)\r\n }\r\n });\r\n return brokenRulesMessages.join(\", \")\r\n },\r\n validate: function(isFull) {\r\n var _this = this;\r\n var isValid = true;\r\n var editingController = this._editingController;\r\n var deferred = new _deferred.Deferred;\r\n var completeList = [];\r\n var editMode = editingController.getEditMode();\r\n isFull = isFull || editMode === EDIT_MODE_ROW;\r\n if (this._isValidationInProgress) {\r\n return deferred.resolve(false).promise()\r\n }\r\n this._isValidationInProgress = true;\r\n if (isFull) {\r\n editingController.addDeferred(deferred);\r\n var changes = editingController.getChanges();\r\n (0, _iterator.each)(changes, function(index, _ref) {\r\n var type = _ref.type,\r\n key = _ref.key;\r\n if (\"remove\" !== type) {\r\n var validationData = _this._getValidationData(key, true);\r\n var validationResult = _this.validateGroup(validationData);\r\n completeList.push(validationResult);\r\n validationResult.done(function(validationResult) {\r\n validationData.validated = true;\r\n isValid = isValid && validationResult.isValid\r\n })\r\n }\r\n })\r\n } else {\r\n if (this._currentCellValidator) {\r\n var validationResult = this.validateGroup(this._currentCellValidator._findGroup());\r\n completeList.push(validationResult);\r\n validationResult.done(function(validationResult) {\r\n isValid = validationResult.isValid\r\n })\r\n }\r\n }\r\n _deferred.when.apply(void 0, completeList).done(function() {\r\n _this._isValidationInProgress = false;\r\n deferred.resolve(isValid)\r\n });\r\n return deferred.promise()\r\n },\r\n validateGroup: function validateGroup(validationData) {\r\n var _validationResult, _this2 = this;\r\n var result = new _deferred.Deferred;\r\n var validateGroup = validationData && _validation_engine.default.getGroupConfig(validationData);\r\n var validationResult;\r\n if (null !== validateGroup && void 0 !== validateGroup && validateGroup.validators.length) {\r\n this.resetRowValidationResults(validationData);\r\n validationResult = _validation_engine.default.validateGroup(validationData)\r\n }(0, _deferred.when)((null === (_validationResult = validationResult) || void 0 === _validationResult ? void 0 : _validationResult.complete) || validationResult).done(function(validationResult) {\r\n (0, _deferred.when)(_this2._rowValidating(validationData, validationResult)).done(result.resolve)\r\n });\r\n return result.promise()\r\n },\r\n isRowDataModified: function(change) {\r\n return !(0, _type.isEmptyObject)(change.data)\r\n },\r\n updateValidationState: function(change) {\r\n var editMode = this._editingController.getEditMode();\r\n var key = change.key;\r\n var validationData = this._getValidationData(key, true);\r\n if (FORM_BASED_MODES.indexOf(editMode) === -1) {\r\n if (change.type === EDIT_DATA_INSERT_TYPE && !this.isRowDataModified(change)) {\r\n validationData.isValid = true;\r\n return\r\n }\r\n this.setDisableApplyValidationResults(true);\r\n var groupConfig = _validation_engine.default.getGroupConfig(validationData);\r\n if (groupConfig) {\r\n var validationResult = _validation_engine.default.validateGroup(validationData);\r\n (0, _deferred.when)(validationResult.complete || validationResult).done(function(validationResult) {\r\n validationData.isValid = validationResult.isValid;\r\n validationData.brokenRules = validationResult.brokenRules\r\n })\r\n } else {\r\n if (!validationData.brokenRules || !validationData.brokenRules.length) {\r\n validationData.isValid = true\r\n }\r\n }\r\n this.setDisableApplyValidationResults(false)\r\n } else {\r\n validationData.isValid = true\r\n }\r\n },\r\n setValidator: function(validator) {\r\n this._currentCellValidator = validator\r\n },\r\n renderCellPendingIndicator: function($container) {\r\n var $indicator = $container.find(\".\" + PENDING_INDICATOR_CLASS);\r\n if (!$indicator.length) {\r\n var $indicatorContainer = $container;\r\n $indicator = (0, _renderer.default)(\"
\").appendTo($indicatorContainer).addClass(PENDING_INDICATOR_CLASS);\r\n this._createComponent($indicator, _load_indicator.default);\r\n $container.addClass(VALIDATION_PENDING_CLASS)\r\n }\r\n },\r\n disposeCellPendingIndicator: function($container) {\r\n var $indicator = $container.find(\".\" + PENDING_INDICATOR_CLASS);\r\n if ($indicator.length) {\r\n var indicator = _load_indicator.default.getInstance($indicator);\r\n if (indicator) {\r\n indicator.dispose();\r\n indicator.$element().remove()\r\n }\r\n $container.removeClass(VALIDATION_PENDING_CLASS)\r\n }\r\n },\r\n validationStatusChanged: function(result) {\r\n var validator = result.validator;\r\n var validationGroup = validator.option(\"validationGroup\");\r\n var column = validator.option(\"dataGetter\")().column;\r\n this.updateCellValidationResult({\r\n rowKey: validationGroup.key,\r\n columnIndex: column.index,\r\n validationResult: result\r\n })\r\n },\r\n validatorInitialized: function(arg) {\r\n arg.component.on(\"validating\", this.validationStatusChanged.bind(this));\r\n arg.component.on(\"validated\", this.validationStatusChanged.bind(this))\r\n },\r\n validatorDisposing: function(arg) {\r\n var validator = arg.component;\r\n var validationGroup = validator.option(\"validationGroup\");\r\n var column = validator.option(\"dataGetter\")().column;\r\n var result = this.getCellValidationResult({\r\n rowKey: null === validationGroup || void 0 === validationGroup ? void 0 : validationGroup.key,\r\n columnIndex: column.index\r\n });\r\n if (validationResultIsValid(result) && result.status === VALIDATION_STATUS.pending) {\r\n this.cancelCellValidationResult({\r\n change: validationGroup,\r\n columnIndex: column.index\r\n })\r\n }\r\n },\r\n applyValidationResult: function($container, result) {\r\n var validator = result.validator;\r\n var validationGroup = validator.option(\"validationGroup\");\r\n var column = validator.option(\"dataGetter\")().column;\r\n result.brokenRules && result.brokenRules.forEach(function(rule) {\r\n rule.columnIndex = column.index;\r\n rule.column = column\r\n });\r\n if ($container) {\r\n var validationResult = this.getCellValidationResult({\r\n rowKey: validationGroup.key,\r\n columnIndex: column.index\r\n });\r\n var requestIsDisabled = validationResultIsValid(validationResult) && validationResult.disabledPendingId === result.id;\r\n if (this._disableApplyValidationResults || requestIsDisabled) {\r\n return\r\n }\r\n if (result.status === VALIDATION_STATUS.invalid) {\r\n var $focus = $container.find(\":focus\");\r\n if (!(0, _selectors.focused)($focus)) {\r\n _events_engine.default.trigger($focus, \"focus\");\r\n _events_engine.default.trigger($focus, _pointer.default.down)\r\n }\r\n }\r\n var editor = !column.editCellTemplate && this.getController(\"editorFactory\").getEditorInstance($container);\r\n if (result.status === VALIDATION_STATUS.pending) {\r\n if (editor) {\r\n editor.option(\"validationStatus\", VALIDATION_STATUS.pending)\r\n } else {\r\n this.renderCellPendingIndicator($container)\r\n }\r\n } else {\r\n if (editor) {\r\n editor.option(\"validationStatus\", VALIDATION_STATUS.valid)\r\n } else {\r\n this.disposeCellPendingIndicator($container)\r\n }\r\n }\r\n $container.toggleClass(this.addWidgetPrefix(INVALIDATE_CLASS), result.status === VALIDATION_STATUS.invalid)\r\n }\r\n },\r\n createValidator: function(parameters, $container) {\r\n var _this3 = this;\r\n var editingController = this._editingController;\r\n var column = parameters.column;\r\n var showEditorAlways = column.showEditorAlways;\r\n if ((0, _type.isDefined)(column.command) || !column.validationRules || !Array.isArray(column.validationRules) || !column.validationRules.length) {\r\n return\r\n }\r\n var editIndex = editingController.getIndexByKey(parameters.key, editingController.getChanges());\r\n var needCreateValidator = editIndex > -1;\r\n if (!needCreateValidator) {\r\n if (!showEditorAlways) {\r\n var columnsController = this.getController(\"columns\");\r\n var visibleColumns = (null === columnsController || void 0 === columnsController ? void 0 : columnsController.getVisibleColumns()) || [];\r\n showEditorAlways = visibleColumns.some(function(column) {\r\n return column.showEditorAlways\r\n })\r\n }\r\n var isEditRow = (0, _common.equalByValue)(this.option(\"editing.editRowKey\"), parameters.key);\r\n var isCellOrBatchEditingAllowed = editingController.isCellOrBatchEditMode() && editingController.allowUpdating({\r\n row: parameters.row\r\n });\r\n needCreateValidator = isEditRow || isCellOrBatchEditingAllowed && showEditorAlways;\r\n if (isCellOrBatchEditingAllowed && showEditorAlways) {\r\n editingController._addInternalData({\r\n key: parameters.key,\r\n oldData: parameters.data\r\n })\r\n }\r\n }\r\n if (needCreateValidator) {\r\n if ($container && !$container.length) {\r\n _ui.default.log(\"E1050\");\r\n return\r\n }\r\n var validationData = this._getValidationData(parameters.key, true);\r\n var getValue = function() {\r\n var change = editingController.getChangeByKey(null === validationData || void 0 === validationData ? void 0 : validationData.key);\r\n var value = column.calculateCellValue((null === change || void 0 === change ? void 0 : change.data) || {});\r\n return void 0 !== value ? value : parameters.value\r\n };\r\n var useDefaultValidator = $container && $container.hasClass(\"dx-widget\");\r\n $container && $container.addClass(this.addWidgetPrefix(VALIDATOR_CLASS));\r\n var validator = new _validator.default($container || (0, _renderer.default)(\"
\"), {\r\n name: column.caption,\r\n validationRules: (0, _extend.extend)(true, [], column.validationRules),\r\n validationGroup: validationData,\r\n adapter: useDefaultValidator ? null : {\r\n getValue: getValue,\r\n applyValidationResults: function(result) {\r\n _this3.applyValidationResult($container, result)\r\n }\r\n },\r\n dataGetter: function() {\r\n var key = null === validationData || void 0 === validationData ? void 0 : validationData.key;\r\n var change = editingController.getChangeByKey(key);\r\n var oldData = editingController._getOldData(key);\r\n return {\r\n data: (0, _array_utils.createObjectWithChanges)(oldData, null === change || void 0 === change ? void 0 : change.data),\r\n column: column\r\n }\r\n },\r\n onInitialized: this.validatorInitialized.bind(this),\r\n onDisposing: this.validatorDisposing.bind(this)\r\n });\r\n if (useDefaultValidator) {\r\n var adapter = validator.option(\"adapter\");\r\n if (adapter) {\r\n adapter.getValue = getValue;\r\n adapter.validationRequestsCallbacks = []\r\n }\r\n }\r\n return validator\r\n }\r\n },\r\n setDisableApplyValidationResults: function(flag) {\r\n this._disableApplyValidationResults = flag\r\n },\r\n getDisableApplyValidationResults: function() {\r\n return this._disableApplyValidationResults\r\n },\r\n isCurrentValidatorProcessing: function(_ref2) {\r\n var rowKey = _ref2.rowKey,\r\n columnIndex = _ref2.columnIndex;\r\n return this._currentCellValidator && (0, _common.equalByValue)(this._currentCellValidator.option(\"validationGroup\").key, rowKey) && this._currentCellValidator.option(\"dataGetter\")().column.index === columnIndex\r\n },\r\n validateCell: function(validator) {\r\n var cellParams = {\r\n rowKey: validator.option(\"validationGroup\").key,\r\n columnIndex: validator.option(\"dataGetter\")().column.index\r\n };\r\n var validationResult = this.getCellValidationResult(cellParams);\r\n var stateRestored = validationResultIsValid(validationResult);\r\n if (!stateRestored) {\r\n validationResult = validator.validate()\r\n }\r\n var deferred = new _deferred.Deferred;\r\n var adapter = validator.option(\"adapter\");\r\n if (stateRestored && validationResult.status === VALIDATION_STATUS.pending) {\r\n this.updateCellValidationResult(cellParams);\r\n adapter.applyValidationResults(validationResult)\r\n }(0, _deferred.when)(validationResult.complete || validationResult).done(function(validationResult) {\r\n stateRestored && adapter.applyValidationResults(validationResult);\r\n deferred.resolve(validationResult)\r\n });\r\n return deferred.promise()\r\n },\r\n updateCellValidationResult: function(_ref3) {\r\n var rowKey = _ref3.rowKey,\r\n columnIndex = _ref3.columnIndex,\r\n validationResult = _ref3.validationResult;\r\n var validationData = this._getValidationData(rowKey);\r\n if (!validationData) {\r\n return\r\n }\r\n if (!validationData.validationResults) {\r\n validationData.validationResults = {}\r\n }\r\n var result;\r\n if (validationResult) {\r\n result = (0, _extend.extend)({}, validationResult);\r\n validationData.validationResults[columnIndex] = result;\r\n if (validationResult.status === VALIDATION_STATUS.pending) {\r\n if (this._editingController.getEditMode() === EDIT_MODE_CELL) {\r\n result.deferred = new _deferred.Deferred;\r\n result.complete.always(function() {\r\n result.deferred.resolve()\r\n });\r\n this._editingController.addDeferred(result.deferred)\r\n }\r\n if (this._disableApplyValidationResults) {\r\n result.disabledPendingId = validationResult.id;\r\n return\r\n }\r\n }\r\n } else {\r\n result = validationData.validationResults[columnIndex]\r\n }\r\n if (result && result.disabledPendingId) {\r\n delete result.disabledPendingId\r\n }\r\n },\r\n getCellValidationResult: function(_ref4) {\r\n var _validationData$valid;\r\n var rowKey = _ref4.rowKey,\r\n columnIndex = _ref4.columnIndex;\r\n var validationData = this._getValidationData(rowKey, true);\r\n return null === validationData || void 0 === validationData ? void 0 : null === (_validationData$valid = validationData.validationResults) || void 0 === _validationData$valid ? void 0 : _validationData$valid[columnIndex]\r\n },\r\n removeCellValidationResult: function(_ref5) {\r\n var change = _ref5.change,\r\n columnIndex = _ref5.columnIndex;\r\n var validationData = this._getValidationData(null === change || void 0 === change ? void 0 : change.key);\r\n if (validationData && validationData.validationResults) {\r\n this.cancelCellValidationResult({\r\n change: change,\r\n columnIndex: columnIndex\r\n });\r\n delete validationData.validationResults[columnIndex]\r\n }\r\n },\r\n cancelCellValidationResult: function(_ref6) {\r\n var change = _ref6.change,\r\n columnIndex = _ref6.columnIndex;\r\n var validationData = this._getValidationData(change.key);\r\n if (change && validationData.validationResults) {\r\n var result = validationData.validationResults[columnIndex];\r\n if (result) {\r\n result.deferred && result.deferred.reject(VALIDATION_CANCELLED);\r\n validationData.validationResults[columnIndex] = VALIDATION_CANCELLED\r\n }\r\n }\r\n },\r\n resetRowValidationResults: function(validationData) {\r\n if (validationData) {\r\n validationData.validationResults && delete validationData.validationResults;\r\n delete validationData.validated\r\n }\r\n },\r\n isInvalidCell: function(_ref7) {\r\n var rowKey = _ref7.rowKey,\r\n columnIndex = _ref7.columnIndex;\r\n var result = this.getCellValidationResult({\r\n rowKey: rowKey,\r\n columnIndex: columnIndex\r\n });\r\n return validationResultIsValid(result) && result.status === VALIDATION_STATUS.invalid\r\n },\r\n getCellValidator: function(_ref8) {\r\n var rowKey = _ref8.rowKey,\r\n columnIndex = _ref8.columnIndex;\r\n var validationData = this._getValidationData(rowKey);\r\n var groupConfig = validationData && _validation_engine.default.getGroupConfig(validationData);\r\n var validators = groupConfig && groupConfig.validators;\r\n return validators && validators.filter(function(v) {\r\n var column = v.option(\"dataGetter\")().column;\r\n return column ? column.index === columnIndex : false\r\n })[0]\r\n },\r\n setCellValidationStatus: function(cellOptions) {\r\n var validationResult = this.getCellValidationResult({\r\n rowKey: cellOptions.key,\r\n columnIndex: cellOptions.column.index\r\n });\r\n if ((0, _type.isDefined)(validationResult)) {\r\n cellOptions.validationStatus = validationResult !== VALIDATION_CANCELLED ? validationResult.status : VALIDATION_CANCELLED\r\n } else {\r\n delete cellOptions.validationStatus\r\n }\r\n }\r\n }\r\n}());\r\nvar _default = {\r\n defaultOptions: function() {\r\n return {\r\n editing: {\r\n texts: {\r\n validationCancelChanges: _message.default.format(\"dxDataGrid-validationCancelChanges\")\r\n }\r\n }\r\n }\r\n },\r\n controllers: {\r\n validating: ValidatingController\r\n },\r\n extenders: {\r\n controllers: {\r\n editing: {\r\n _addChange: function(options, row) {\r\n var index = this.callBase(options, row);\r\n var validatingController = this.getController(\"validating\");\r\n if (index >= 0 && options.type !== EDIT_DATA_REMOVE_TYPE) {\r\n var change = this.getChanges()[index];\r\n change && validatingController.updateValidationState(change)\r\n }\r\n return index\r\n },\r\n _handleChangesChange: function(args) {\r\n this.callBase.apply(this, arguments);\r\n var validatingController = this.getController(\"validating\");\r\n args.value.forEach(function(change) {\r\n if (void 0 === validatingController._getValidationData(change.key)) {\r\n validatingController.updateValidationState(change)\r\n }\r\n })\r\n },\r\n _updateRowAndPageIndices: function() {\r\n var _this4 = this;\r\n var that = this;\r\n var startInsertIndex = that.getView(\"rowsView\").getTopVisibleItemIndex();\r\n var rowIndex = startInsertIndex;\r\n (0, _iterator.each)(that.getChanges(), function(_, _ref9) {\r\n var key = _ref9.key,\r\n type = _ref9.type;\r\n var validationData = _this4.getController(\"validating\")._getValidationData(key);\r\n if (validationData && !validationData.isValid && validationData.pageIndex !== that._pageIndex) {\r\n validationData.pageIndex = that._pageIndex;\r\n if (type === EDIT_DATA_INSERT_TYPE) {\r\n validationData.rowIndex = startInsertIndex\r\n } else {\r\n validationData.rowIndex = rowIndex\r\n }\r\n rowIndex++\r\n }\r\n })\r\n },\r\n getEditFormOptions: function(detailOptions) {\r\n var editFormOptions = this.callBase.apply(this, arguments);\r\n var validatingController = this.getController(\"validating\");\r\n var validationData = validatingController._getValidationData(detailOptions.key, true);\r\n return (0, _extend.extend)({}, editFormOptions, {\r\n validationGroup: validationData\r\n })\r\n },\r\n _updateEditRowCore: function(row, skipCurrentRow, isCustomSetCellValue) {\r\n this.callBase.apply(this, arguments);\r\n if (isCustomSetCellValue && this._editForm && !row.isNewRow) {\r\n this._editForm.validate()\r\n }\r\n },\r\n _needInsertItem: function(_ref10) {\r\n var key = _ref10.key;\r\n var result = this.callBase.apply(this, arguments);\r\n var validationData = this.getController(\"validating\")._getValidationData(key);\r\n if (result && !(null !== validationData && void 0 !== validationData && validationData.isValid)) {\r\n result = key.pageIndex === this._pageIndex\r\n }\r\n return result\r\n },\r\n _prepareEditCell: function(params) {\r\n var isNotCanceled = this.callBase.apply(this, arguments);\r\n var validatingController = this.getController(\"validating\");\r\n if (isNotCanceled && params.column.showEditorAlways) {\r\n validatingController.updateValidationState({\r\n key: params.key\r\n })\r\n }\r\n return isNotCanceled\r\n },\r\n processItems: function(items, changeType) {\r\n var that = this;\r\n var i;\r\n var changes = that.getChanges();\r\n var dataController = that.getController(\"data\");\r\n var validatingController = this.getController(\"validating\");\r\n var getIndexByChange = function(change, items) {\r\n var index = -1;\r\n var isInsert = change.type === EDIT_DATA_INSERT_TYPE;\r\n var key = change.key;\r\n (0, _iterator.each)(items, function(i, item) {\r\n if ((0, _common.equalByValue)(key, isInsert ? item : dataController.keyOf(item))) {\r\n index = i;\r\n return false\r\n }\r\n });\r\n return index\r\n };\r\n items = that.callBase(items, changeType);\r\n var itemsCount = items.length;\r\n var addInValidItem = function(change, validationData) {\r\n var data = {\r\n key: change.key\r\n };\r\n var index = getIndexByChange(change, items);\r\n if (index >= 0) {\r\n return\r\n }\r\n validationData.rowIndex = validationData.rowIndex > itemsCount ? validationData.rowIndex % itemsCount : validationData.rowIndex;\r\n var rowIndex = validationData.rowIndex;\r\n data[INSERT_INDEX] = 1;\r\n items.splice(rowIndex, 0, data)\r\n };\r\n if (that.getEditMode() === EDIT_MODE_BATCH && \"prepend\" !== changeType && \"append\" !== changeType) {\r\n for (i = 0; i < changes.length; i++) {\r\n var key = changes[i].key;\r\n var validationData = validatingController._getValidationData(key);\r\n if (validationData && changes[i].type && validationData.pageIndex === that._pageIndex && key.pageIndex !== that._pageIndex) {\r\n addInValidItem(changes[i], validationData)\r\n }\r\n }\r\n }\r\n return items\r\n },\r\n processDataItem: function(item) {\r\n var isInserted = item.data[INSERT_INDEX];\r\n var key = isInserted ? item.data.key : item.key;\r\n var editMode = this.getEditMode();\r\n if (editMode === EDIT_MODE_BATCH && isInserted && key) {\r\n var changes = this.getChanges();\r\n var editIndex = _uiGrid_core2.default.getIndexByKey(key, changes);\r\n if (editIndex >= 0) {\r\n var change = changes[editIndex];\r\n if (change.type !== EDIT_DATA_INSERT_TYPE) {\r\n var oldData = this._getOldData(change.key);\r\n item.data = (0, _extend.extend)(true, {}, oldData, change.data);\r\n item.key = key\r\n }\r\n }\r\n }\r\n this.callBase.apply(this, arguments)\r\n },\r\n _createInvisibleColumnValidators: function(changes) {\r\n var _this5 = this;\r\n var that = this;\r\n var validatingController = this.getController(\"validating\");\r\n var columnsController = this.getController(\"columns\");\r\n var columns = columnsController.getColumns();\r\n var invisibleColumns = columnsController.getInvisibleColumns().filter(function(column) {\r\n return !column.isBand\r\n });\r\n var groupColumns = columnsController.getGroupColumns().filter(function(column) {\r\n return !column.showWhenGrouped && invisibleColumns.indexOf(column) === -1\r\n });\r\n var invisibleColumnValidators = [];\r\n var isCellVisible = function(column, rowKey) {\r\n return _this5._dataController.getRowIndexByKey(rowKey) >= 0 && invisibleColumns.indexOf(column) < 0\r\n };\r\n invisibleColumns.push.apply(invisibleColumns, _toConsumableArray(groupColumns));\r\n if (FORM_BASED_MODES.indexOf(this.getEditMode()) === -1) {\r\n (0, _iterator.each)(columns, function(_, column) {\r\n changes.forEach(function(change) {\r\n var data;\r\n if (isCellVisible(column, change.key)) {\r\n return\r\n }\r\n if (change.type === EDIT_DATA_INSERT_TYPE) {\r\n data = change.data\r\n } else {\r\n if (\"update\" === change.type) {\r\n var oldData = that._getOldData(change.key);\r\n data = (0, _array_utils.createObjectWithChanges)(oldData, change.data)\r\n }\r\n }\r\n if (data) {\r\n var validator = validatingController.createValidator({\r\n column: column,\r\n key: change.key,\r\n value: column.calculateCellValue(data)\r\n });\r\n if (validator) {\r\n invisibleColumnValidators.push(validator)\r\n }\r\n }\r\n })\r\n })\r\n }\r\n return function() {\r\n invisibleColumnValidators.forEach(function(validator) {\r\n validator.dispose()\r\n })\r\n }\r\n },\r\n _beforeSaveEditData: function(change, editIndex) {\r\n var _this6 = this;\r\n var result = this.callBase.apply(this, arguments);\r\n var validatingController = this.getController(\"validating\");\r\n var validationData = validatingController._getValidationData(null === change || void 0 === change ? void 0 : change.key);\r\n if (change) {\r\n var isValid = \"remove\" === change.type || validationData.isValid;\r\n result = result || !isValid\r\n } else {\r\n var disposeValidators = this._createInvisibleColumnValidators(this.getChanges());\r\n result = new _deferred.Deferred;\r\n this.executeOperation(result, function() {\r\n validatingController.validate(true).done(function(isFullValid) {\r\n disposeValidators();\r\n _this6._updateRowAndPageIndices();\r\n switch (_this6.getEditMode()) {\r\n case EDIT_MODE_CELL:\r\n if (!isFullValid) {\r\n _this6._focusEditingCell()\r\n }\r\n break;\r\n case EDIT_MODE_BATCH:\r\n if (!isFullValid) {\r\n _this6._resetEditRowKey();\r\n _this6._resetEditColumnName();\r\n _this6.getController(\"data\").updateItems()\r\n }\r\n }\r\n result.resolve(!isFullValid)\r\n })\r\n })\r\n }\r\n return result.promise ? result.promise() : result\r\n },\r\n _beforeEditCell: function(rowIndex, columnIndex, item) {\r\n var result = this.callBase(rowIndex, columnIndex, item);\r\n if (this.getEditMode() === EDIT_MODE_CELL) {\r\n var $cell = this._rowsView._getCellElement(rowIndex, columnIndex);\r\n var validator = $cell && $cell.data(\"dxValidator\");\r\n var rowOptions = $cell && $cell.closest(\".dx-row\").data(\"options\");\r\n var value = validator && validator.option(\"adapter\").getValue();\r\n if (validator && cellValueShouldBeValidated(value, rowOptions)) {\r\n var validatingController = this.getController(\"validating\");\r\n var deferred = new _deferred.Deferred;\r\n (0, _deferred.when)(validatingController.validateCell(validator), result).done(function(validationResult, result) {\r\n deferred.resolve(validationResult.status === VALIDATION_STATUS.valid && result)\r\n });\r\n return deferred.promise()\r\n } else {\r\n if (!validator) {\r\n return result\r\n }\r\n }\r\n }\r\n },\r\n _afterSaveEditData: function(cancel) {\r\n var _this7 = this;\r\n var $firstErrorRow;\r\n (0, _iterator.each)(this.getChanges(), function(_, change) {\r\n var $errorRow = _this7._showErrorRow(change);\r\n $firstErrorRow = $firstErrorRow || $errorRow\r\n });\r\n if ($firstErrorRow) {\r\n var scrollable = this._rowsView.getScrollable();\r\n if (scrollable) {\r\n scrollable.update();\r\n scrollable.scrollToElement($firstErrorRow)\r\n }\r\n }\r\n if (cancel && this.getEditMode() === EDIT_MODE_CELL && this._needUpdateRow()) {\r\n var editRowIndex = this.getEditRowIndex();\r\n this._dataController.updateItems({\r\n changeType: \"update\",\r\n rowIndices: [editRowIndex]\r\n });\r\n this._focusEditingCell()\r\n } else {\r\n if (!cancel) {\r\n this.getController(\"validating\")._validationState = []\r\n }\r\n }\r\n },\r\n _handleDataChanged: function(args) {\r\n var validationState = this.getController(\"validating\")._validationState;\r\n if (\"standard\" === this.option(\"scrolling.mode\")) {\r\n this.resetRowAndPageIndices()\r\n }\r\n if (\"prepend\" === args.changeType) {\r\n (0, _iterator.each)(validationState, function(_, validationData) {\r\n validationData.rowIndex += args.items.length\r\n })\r\n }\r\n this.callBase(args)\r\n },\r\n resetRowAndPageIndices: function() {\r\n var _this8 = this;\r\n var validationState = this.getController(\"validating\")._validationState;\r\n (0, _iterator.each)(validationState, function(_, validationData) {\r\n if (validationData.pageIndex !== _this8._pageIndex) {\r\n delete validationData.pageIndex;\r\n delete validationData.rowIndex\r\n }\r\n })\r\n },\r\n _beforeCancelEditData: function() {\r\n var validatingController = this.getController(\"validating\");\r\n validatingController._validationState = [];\r\n this.callBase()\r\n },\r\n _showErrorRow: function(change) {\r\n var $popupContent;\r\n var errorHandling = this.getController(\"errorHandling\");\r\n var items = this.getController(\"data\").items();\r\n var rowIndex = this.getIndexByKey(change.key, items);\r\n var validationData = this.getController(\"validating\")._getValidationData(change.key);\r\n if (!(null !== validationData && void 0 !== validationData && validationData.isValid) && null !== validationData && void 0 !== validationData && validationData.errorText && rowIndex >= 0) {\r\n $popupContent = this.getPopupContent();\r\n return errorHandling && errorHandling.renderErrorRow(null === validationData || void 0 === validationData ? void 0 : validationData.errorText, rowIndex, $popupContent)\r\n }\r\n },\r\n updateFieldValue: function(e) {\r\n var _this9 = this;\r\n var validatingController = this.getController(\"validating\");\r\n var deferred = new _deferred.Deferred;\r\n validatingController.removeCellValidationResult({\r\n change: this.getChangeByKey(e.key),\r\n columnIndex: e.column.index\r\n });\r\n this.callBase.apply(this, arguments).done(function() {\r\n var currentValidator = validatingController.getCellValidator({\r\n rowKey: e.key,\r\n columnIndex: e.column.index\r\n });\r\n (0, _deferred.when)(currentValidator && validatingController.validateCell(currentValidator)).done(function(validationResult) {\r\n _this9.getController(\"editorFactory\").refocus();\r\n deferred.resolve(validationResult)\r\n })\r\n });\r\n return deferred.promise()\r\n },\r\n highlightDataCell: function($cell, parameters) {\r\n this.callBase.apply(this, arguments);\r\n var validatingController = this.getController(\"validating\");\r\n validatingController.setCellValidationStatus(parameters);\r\n var isEditableCell = !!parameters.setValue;\r\n var cellModified = this.isCellModified(parameters);\r\n var isValidated = (0, _type.isDefined)(parameters.validationStatus);\r\n var needValidation = cellModified && parameters.column.setCellValue || isEditableCell && !cellModified && !(parameters.row.isNewRow || !isValidated);\r\n if (needValidation) {\r\n var validator = $cell.data(\"dxValidator\");\r\n if (validator) {\r\n (0, _deferred.when)(this.getController(\"validating\").validateCell(validator)).done(function() {\r\n validatingController.setCellValidationStatus(parameters)\r\n })\r\n }\r\n }\r\n },\r\n getChangeByKey: function(key) {\r\n var changes = this.getChanges();\r\n return changes[_uiGrid_core2.default.getIndexByKey(key, changes)]\r\n },\r\n isCellModified: function(parameters) {\r\n var cellModified = this.callBase(parameters);\r\n var change = this.getChangeByKey(parameters.key);\r\n var isCellInvalid = !!parameters.row && this.getController(\"validating\").isInvalidCell({\r\n rowKey: parameters.key,\r\n columnIndex: parameters.column.index\r\n });\r\n return cellModified || this.getController(\"validating\")._rowIsValidated(change) && isCellInvalid\r\n }\r\n },\r\n editorFactory: function() {\r\n var getWidthOfVisibleCells = function(that, element) {\r\n var rowIndex = (0, _renderer.default)(element).closest(\"tr\").index();\r\n var $cellElements = (0, _renderer.default)(that._rowsView.getRowElement(rowIndex)).first().children().filter(\":not(.dx-hidden-cell)\");\r\n return that._rowsView._getWidths($cellElements).reduce(function(w1, w2) {\r\n return w1 + w2\r\n }, 0)\r\n };\r\n var getBoundaryNonFixedColumnsInfo = function(fixedColumns) {\r\n var firstNonFixedColumnIndex;\r\n var lastNonFixedColumnIndex;\r\n fixedColumns.some(function(column, index) {\r\n if (column.command === COMMAND_TRANSPARENT) {\r\n firstNonFixedColumnIndex = 0 === index ? -1 : index;\r\n lastNonFixedColumnIndex = index === fixedColumns.length - 1 ? -1 : index + column.colspan - 1;\r\n return true\r\n }\r\n });\r\n return {\r\n startColumnIndex: firstNonFixedColumnIndex,\r\n endColumnIndex: lastNonFixedColumnIndex\r\n }\r\n };\r\n return {\r\n _showRevertButton: function($container) {\r\n var _this10 = this;\r\n if (!$container || !$container.length) {\r\n return\r\n }\r\n var $tooltipElement = $container.find(\".\" + this.addWidgetPrefix(REVERT_TOOLTIP_CLASS));\r\n var $overlayContainer = $container.closest(\".\".concat(this.addWidgetPrefix(CONTENT_CLASS)));\r\n $tooltipElement && $tooltipElement.remove();\r\n $tooltipElement = (0, _renderer.default)(\"
\").addClass(this.addWidgetPrefix(REVERT_TOOLTIP_CLASS)).appendTo($container);\r\n var tooltipOptions = {\r\n animation: null,\r\n visible: true,\r\n width: \"auto\",\r\n height: \"auto\",\r\n target: $container,\r\n shading: false,\r\n container: $overlayContainer,\r\n propagateOutsideClick: true,\r\n closeOnOutsideClick: false,\r\n closeOnTargetScroll: false,\r\n contentTemplate: function() {\r\n var $buttonElement = (0, _renderer.default)(\"
\").addClass(REVERT_BUTTON_CLASS);\r\n var buttonOptions = {\r\n icon: \"revert\",\r\n hint: _this10.option(\"editing.texts.validationCancelChanges\"),\r\n onClick: function() {\r\n _this10._editingController.cancelEditData()\r\n }\r\n };\r\n return new _button.default($buttonElement, buttonOptions).$element()\r\n },\r\n position: {\r\n my: \"left top\",\r\n at: \"right top\",\r\n offset: \"1 0\",\r\n collision: \"flip\",\r\n boundaryOffset: \"0 0\",\r\n boundary: this._rowsView.element()\r\n },\r\n onPositioned: this._positionedHandler.bind(this)\r\n };\r\n return new _overlay.default($tooltipElement, tooltipOptions)\r\n },\r\n _hideFixedGroupCell: function($cell, overlayOptions) {\r\n var $nextFixedRowElement;\r\n var $groupCellElement;\r\n var isFixedColumns = this._rowsView.isFixedColumns();\r\n var isFormEditMode = this._editingController.isFormEditMode();\r\n if (isFixedColumns && !isFormEditMode) {\r\n var nextRowOptions = $cell.closest(\".dx-row\").next().data(\"options\");\r\n if (nextRowOptions && \"group\" === nextRowOptions.rowType) {\r\n $nextFixedRowElement = (0, _renderer.default)(this._rowsView.getRowElement(nextRowOptions.rowIndex)).last();\r\n $groupCellElement = $nextFixedRowElement.find(\".\" + GROUP_CELL_CLASS);\r\n if ($groupCellElement.length && \"hidden\" !== $groupCellElement.get(0).style.visibility) {\r\n $groupCellElement.css(\"visibility\", \"hidden\");\r\n overlayOptions.onDisposing = function() {\r\n $groupCellElement.css(\"visibility\", \"\")\r\n }\r\n }\r\n }\r\n }\r\n },\r\n _positionedHandler: function(e, isOverlayVisible) {\r\n if (!e.component.__skipPositionProcessing) {\r\n var isRevertButton = (0, _renderer.default)(e.element).hasClass(this.addWidgetPrefix(REVERT_TOOLTIP_CLASS));\r\n var needRepaint = !isRevertButton && this._rowsView.updateFreeSpaceRowHeight();\r\n var normalizedPosition = this._normalizeValidationMessagePositionAndMaxWidth(e, isRevertButton, isOverlayVisible);\r\n e.component.__skipPositionProcessing = !!(needRepaint || normalizedPosition);\r\n if (normalizedPosition) {\r\n e.component.option(normalizedPosition)\r\n } else {\r\n if (needRepaint) {\r\n e.component.repaint()\r\n }\r\n }\r\n }\r\n },\r\n _showValidationMessage: function($cell, messages, alignment, revertTooltip) {\r\n var _this11 = this;\r\n var editorPopup = $cell.find(\".dx-dropdowneditor-overlay\").data(\"dxPopup\");\r\n var isOverlayVisible = editorPopup && editorPopup.option(\"visible\");\r\n var myPosition = isOverlayVisible ? \"top right\" : \"top \" + alignment;\r\n var atPosition = isOverlayVisible ? \"top left\" : \"bottom \" + alignment;\r\n var $overlayContainer = $cell.closest(\".\".concat(this.addWidgetPrefix(CONTENT_CLASS)));\r\n var errorMessageText = \"\";\r\n messages && messages.forEach(function(message) {\r\n errorMessageText += (errorMessageText.length ? \"
\" : \"\") + (0, _string.encodeHtml)(message)\r\n });\r\n var $overlayElement = (0, _renderer.default)(\"
\").addClass(INVALID_MESSAGE_CLASS).addClass(INVALID_MESSAGE_ALWAYS_CLASS).addClass(this.addWidgetPrefix(WIDGET_INVALID_MESSAGE_CLASS)).html(errorMessageText).appendTo($cell);\r\n var overlayOptions = {\r\n target: $cell,\r\n container: $overlayContainer,\r\n shading: false,\r\n width: \"auto\",\r\n height: \"auto\",\r\n visible: true,\r\n animation: false,\r\n propagateOutsideClick: true,\r\n closeOnOutsideClick: false,\r\n closeOnTargetScroll: false,\r\n position: {\r\n collision: \"flip\",\r\n boundary: this._rowsView.element(),\r\n boundaryOffset: \"0 0\",\r\n offset: {\r\n x: 0,\r\n y: !isOverlayVisible && (_browser.default.mozilla || _browser.default.msie) ? -1 : 0\r\n },\r\n my: myPosition,\r\n at: atPosition\r\n },\r\n onPositioned: function(e) {\r\n _this11._positionedHandler(e, isOverlayVisible);\r\n _this11._shiftValidationMessageIfNeed(e.component.$content(), revertTooltip && revertTooltip.$content(), $cell)\r\n }\r\n };\r\n this._hideFixedGroupCell($cell, overlayOptions);\r\n new _overlay.default($overlayElement, overlayOptions)\r\n },\r\n _normalizeValidationMessagePositionAndMaxWidth: function(options, isRevertButton, isOverlayVisible) {\r\n var fixedColumns = this._columnsController.getFixedColumns();\r\n if (!fixedColumns || !fixedColumns.length) {\r\n return\r\n }\r\n var position;\r\n var visibleTableWidth = !isRevertButton && getWidthOfVisibleCells(this, options.element);\r\n var $overlayContentElement = options.component.$content();\r\n var validationMessageWidth = $overlayContentElement.outerWidth(true);\r\n var needMaxWidth = !isRevertButton && validationMessageWidth > visibleTableWidth;\r\n var columnIndex = this._rowsView.getCellIndex((0, _renderer.default)(options.element).closest(\"td\"));\r\n var boundaryNonFixedColumnsInfo = getBoundaryNonFixedColumnsInfo(fixedColumns);\r\n if (!isRevertButton && (columnIndex === boundaryNonFixedColumnsInfo.startColumnIndex || needMaxWidth)) {\r\n position = {\r\n collision: \"none flip\",\r\n my: \"top left\",\r\n at: isOverlayVisible ? \"top right\" : \"bottom left\"\r\n }\r\n } else {\r\n if (columnIndex === boundaryNonFixedColumnsInfo.endColumnIndex) {\r\n position = {\r\n collision: \"none flip\",\r\n my: \"top right\",\r\n at: isRevertButton || isOverlayVisible ? \"top left\" : \"bottom right\"\r\n };\r\n if (isRevertButton) {\r\n position.offset = \"-1 0\"\r\n }\r\n }\r\n }\r\n return position && {\r\n position: position,\r\n maxWidth: needMaxWidth ? visibleTableWidth - 2 : void 0\r\n }\r\n },\r\n _shiftValidationMessageIfNeed: function($content, $revertContent, $cell) {\r\n if (!$revertContent) {\r\n return\r\n }\r\n var contentOffset = $content.offset();\r\n var revertContentOffset = $revertContent.offset();\r\n if (contentOffset.top === revertContentOffset.top && contentOffset.left + $content.width() > revertContentOffset.left) {\r\n var left = $revertContent.width() + PADDING_BETWEEN_TOOLTIPS;\r\n $content.css(\"left\", revertContentOffset.left < $cell.offset().left ? -left : left)\r\n }\r\n },\r\n _getTooltipsSelector: function() {\r\n var invalidMessageClass = this.addWidgetPrefix(WIDGET_INVALID_MESSAGE_CLASS);\r\n var revertTooltipClass = this.addWidgetPrefix(REVERT_TOOLTIP_CLASS);\r\n return \".dx-editor-cell .\" + revertTooltipClass + \", .dx-editor-cell .\" + invalidMessageClass + \", .dx-cell-modified .\" + invalidMessageClass\r\n },\r\n init: function() {\r\n this.callBase();\r\n this._editingController = this.getController(\"editing\");\r\n this._columnsController = this.getController(\"columns\");\r\n this._rowsView = this.getView(\"rowsView\")\r\n },\r\n loseFocus: function(skipValidator) {\r\n if (!skipValidator) {\r\n this.getController(\"validating\").setValidator(null)\r\n }\r\n this.callBase()\r\n },\r\n updateCellState: function($element, validationResult, hideBorder) {\r\n var _change$data;\r\n var $focus = null === $element || void 0 === $element ? void 0 : $element.closest(this._getFocusCellSelector());\r\n var $cell = null !== $focus && void 0 !== $focus && $focus.is(\"td\") ? $focus : null;\r\n var rowOptions = null === $focus || void 0 === $focus ? void 0 : $focus.closest(\".dx-row\").data(\"options\");\r\n var change = rowOptions ? this.getController(\"editing\").getChangeByKey(rowOptions.key) : null;\r\n var column = $cell && this.getController(\"columns\").getVisibleColumns()[$cell.index()];\r\n var isCellModified = void 0 !== (null === change || void 0 === change ? void 0 : null === (_change$data = change.data) || void 0 === _change$data ? void 0 : _change$data[null === column || void 0 === column ? void 0 : column.name]) && !this._editingController.isSaving();\r\n var revertTooltip;\r\n if ((null === validationResult || void 0 === validationResult ? void 0 : validationResult.status) === VALIDATION_STATUS.invalid || isCellModified) {\r\n if (this._editingController.getEditMode() === EDIT_MODE_CELL) {\r\n revertTooltip = this._showRevertButton($focus)\r\n }\r\n }\r\n var showValidationMessage = validationResult && validationResult.status === VALIDATION_STATUS.invalid;\r\n if (showValidationMessage && $cell && column && validationResult && validationResult.brokenRules) {\r\n var errorMessages = [];\r\n validationResult.brokenRules.forEach(function(rule) {\r\n errorMessages.push(rule.message)\r\n });\r\n this._showValidationMessage($focus, errorMessages, column.alignment || \"left\", revertTooltip)\r\n }!hideBorder && this._rowsView.element() && this._rowsView.updateFreeSpaceRowHeight()\r\n },\r\n focus: function($element, hideBorder) {\r\n var _this12 = this;\r\n if (!arguments.length) {\r\n return this.callBase()\r\n }\r\n var $tooltips = $element && $element.closest(\".\" + this.addWidgetPrefix(ROWS_VIEW_CLASS)).find(this._getTooltipsSelector());\r\n $tooltips && $tooltips.remove();\r\n if (null !== $element && void 0 !== $element && $element.hasClass(\"dx-row\")) {\r\n return this.callBase($element, hideBorder)\r\n }\r\n var $focus = null === $element || void 0 === $element ? void 0 : $element.closest(this._getFocusCellSelector());\r\n var callBase = this.callBase;\r\n var validator = $focus && ($focus.data(\"dxValidator\") || $element.find(\".\" + this.addWidgetPrefix(VALIDATOR_CLASS)).eq(0).data(\"dxValidator\"));\r\n var rowOptions = $focus && $focus.closest(\".dx-row\").data(\"options\");\r\n var editingController = this.getController(\"editing\");\r\n var change = rowOptions ? editingController.getChangeByKey(rowOptions.key) : null;\r\n var validationResult;\r\n var validatingController = this.getController(\"validating\");\r\n if (validator) {\r\n validatingController.setValidator(validator);\r\n var value = validator.option(\"adapter\").getValue();\r\n if (cellValueShouldBeValidated(value, rowOptions) || validatingController._rowIsValidated(change)) {\r\n editingController.waitForDeferredOperations().done(function() {\r\n (0, _deferred.when)(validatingController.validateCell(validator)).done(function(result) {\r\n validationResult = result;\r\n var column = validationResult.validator.option(\"dataGetter\")().column;\r\n if (change && column && !validatingController.isCurrentValidatorProcessing({\r\n rowKey: change.key,\r\n columnIndex: column.index\r\n })) {\r\n return\r\n }\r\n if (validationResult.status === VALIDATION_STATUS.invalid) {\r\n hideBorder = true\r\n }\r\n _this12.updateCellState($element, validationResult, hideBorder);\r\n callBase.call(_this12, $element, hideBorder)\r\n })\r\n });\r\n return this.callBase($element, hideBorder)\r\n }\r\n }\r\n this.updateCellState($element, validationResult, hideBorder);\r\n return this.callBase($element, hideBorder)\r\n },\r\n getEditorInstance: function($container) {\r\n var $editor = $container.find(\".dx-texteditor\").eq(0);\r\n return _uiGrid_core2.default.getWidgetInstance($editor)\r\n }\r\n }\r\n }(),\r\n data: {\r\n _isCellChanged: function(oldRow, newRow, visibleRowIndex, columnIndex, isLiveUpdate) {\r\n var cell = oldRow.cells[columnIndex];\r\n var oldValidationStatus = cell && cell.validationStatus;\r\n var validatingController = this.getController(\"validating\");\r\n var validationResult = validatingController.getCellValidationResult({\r\n rowKey: oldRow.key,\r\n columnIndex: columnIndex\r\n });\r\n var validationData = validatingController._getValidationData(oldRow.key);\r\n var newValidationStatus = validationResultIsValid(validationResult) ? validationResult.status : validationResult;\r\n var rowIsModified = JSON.stringify(newRow.modifiedValues) !== JSON.stringify(oldRow.modifiedValues);\r\n var cellIsMarkedAsInvalid = (0, _renderer.default)(null === cell || void 0 === cell ? void 0 : cell.cellElement).hasClass(this.addWidgetPrefix(INVALIDATE_CLASS));\r\n if (oldValidationStatus !== newValidationStatus && rowIsModified || validationData.isValid && cellIsMarkedAsInvalid) {\r\n return true\r\n }\r\n return this.callBase.apply(this, arguments)\r\n }\r\n }\r\n },\r\n views: {\r\n rowsView: {\r\n updateFreeSpaceRowHeight: function($table) {\r\n var that = this;\r\n var $rowElements;\r\n var $freeSpaceRowElement;\r\n var $freeSpaceRowElements;\r\n var $element = that.element();\r\n var $tooltipContent = $element && $element.find(\".\" + that.addWidgetPrefix(WIDGET_INVALID_MESSAGE_CLASS) + \" .dx-overlay-content\");\r\n that.callBase($table);\r\n if ($tooltipContent && $tooltipContent.length) {\r\n $rowElements = that._getRowElements();\r\n $freeSpaceRowElements = that._getFreeSpaceRowElements($table);\r\n $freeSpaceRowElement = $freeSpaceRowElements.first();\r\n if ($freeSpaceRowElement && 1 === $rowElements.length && (!$freeSpaceRowElement.is(\":visible\") || $tooltipContent.outerHeight() > $freeSpaceRowElement.outerHeight())) {\r\n $freeSpaceRowElements.show();\r\n $freeSpaceRowElements.height($tooltipContent.outerHeight());\r\n return true\r\n }\r\n }\r\n },\r\n _formItemPrepared: function(cellOptions, $container) {\r\n var _this13 = this;\r\n this.callBase.apply(this, arguments);\r\n (0, _common.deferUpdate)(function() {\r\n var $editor = $container.find(\".dx-widget\").first();\r\n var isEditorDisposed = $editor.length && !$editor.children().length;\r\n if (!isEditorDisposed) {\r\n _this13.getController(\"validating\").createValidator(cellOptions, $editor)\r\n }\r\n })\r\n },\r\n _cellPrepared: function($cell, parameters) {\r\n if (!this.getController(\"editing\").isFormEditMode()) {\r\n this.getController(\"validating\").createValidator(parameters, $cell)\r\n }\r\n this.callBase.apply(this, arguments)\r\n }\r\n }\r\n }\r\n }\r\n};\r\nexports.default = _default;\r\nmodule.exports = exports.default;\r\n","/**\r\n * DevExtreme (ui/grid_core/ui.grid_core.virtual_scrolling.js)\r\n * Version: 20.2.7\r\n * Build date: Thu Apr 22 2021\r\n *\r\n * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED\r\n * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/\r\n */\r\n\"use strict\";\r\nexports.default = void 0;\r\nvar _renderer = _interopRequireDefault(require(\"../../core/renderer\"));\r\nvar _window = require(\"../../core/utils/window\");\r\nvar _common = require(\"../../core/utils/common\");\r\nvar _uiGrid_core = require(\"./ui.grid_core.virtual_scrolling_core\");\r\nvar _uiGrid_core2 = _interopRequireDefault(require(\"./ui.grid_core.utils\"));\r\nvar _iterator = require(\"../../core/utils/iterator\");\r\nvar _deferred = require(\"../../core/utils/deferred\");\r\nvar _translator = require(\"../../animation/translator\");\r\nvar _load_indicator = _interopRequireDefault(require(\"../load_indicator\"));\r\nvar _browser = _interopRequireDefault(require(\"../../core/utils/browser\"));\r\nvar _position = require(\"../../core/utils/position\");\r\nvar _type = require(\"../../core/utils/type\");\r\n\r\nfunction _interopRequireDefault(obj) {\r\n return obj && obj.__esModule ? obj : {\r\n \"default\": obj\r\n }\r\n}\r\nvar TABLE_CLASS = \"table\";\r\nvar BOTTOM_LOAD_PANEL_CLASS = \"bottom-load-panel\";\r\nvar TABLE_CONTENT_CLASS = \"table-content\";\r\nvar GROUP_SPACE_CLASS = \"group-space\";\r\nvar CONTENT_CLASS = \"content\";\r\nvar ROW_CLASS = \"dx-row\";\r\nvar FREESPACE_CLASS = \"dx-freespace-row\";\r\nvar COLUMN_LINES_CLASS = \"dx-column-lines\";\r\nvar VIRTUAL_ROW_CLASS = \"dx-virtual-row\";\r\nvar SCROLLING_MODE_INFINITE = \"infinite\";\r\nvar SCROLLING_MODE_VIRTUAL = \"virtual\";\r\nvar SCROLLING_MODE_STANDARD = \"standard\";\r\nvar PIXELS_LIMIT = 25e4;\r\nvar LOAD_TIMEOUT = 300;\r\nvar isVirtualMode = function(that) {\r\n return that.option(\"scrolling.mode\") === SCROLLING_MODE_VIRTUAL\r\n};\r\nvar isAppendMode = function(that) {\r\n return that.option(\"scrolling.mode\") === SCROLLING_MODE_INFINITE\r\n};\r\nvar isVirtualRowRendering = function(that) {\r\n var rowRenderingMode = that.option(\"scrolling.rowRenderingMode\");\r\n if (rowRenderingMode === SCROLLING_MODE_VIRTUAL) {\r\n return true\r\n } else {\r\n if (rowRenderingMode === SCROLLING_MODE_STANDARD) {\r\n return false\r\n }\r\n }\r\n};\r\nvar _correctCount = function(items, count, fromEnd, isItemCountableFunc) {\r\n for (var i = 0; i < count + 1; i++) {\r\n var item = items[fromEnd ? items.length - 1 - i : i];\r\n if (item && !isItemCountableFunc(item, i === count, fromEnd)) {\r\n count++\r\n }\r\n }\r\n return count\r\n};\r\nvar isItemCountableByDataSource = function(item, dataSource) {\r\n return \"data\" === item.rowType && !item.isNewRow || \"group\" === item.rowType && dataSource.isGroupItemCountable(item.data)\r\n};\r\nvar VirtualScrollingDataSourceAdapterExtender = function() {\r\n var _updateLoading = function(that) {\r\n var beginPageIndex = that._virtualScrollController.beginPageIndex(-1);\r\n if (isVirtualMode(that)) {\r\n if (beginPageIndex < 0 || that.viewportSize() >= 0 && that.getViewportItemIndex() >= 0 && (beginPageIndex * that.pageSize() > that.getViewportItemIndex() || beginPageIndex * that.pageSize() + that.itemsCount() < that.getViewportItemIndex() + that.viewportSize()) && that._dataSource.isLoading()) {\r\n if (!that._isLoading) {\r\n that._isLoading = true;\r\n that.loadingChanged.fire(true)\r\n }\r\n } else {\r\n if (that._isLoading) {\r\n that._isLoading = false;\r\n that.loadingChanged.fire(false)\r\n }\r\n }\r\n }\r\n };\r\n var result = {\r\n init: function(dataSource) {\r\n var that = this;\r\n that.callBase.apply(that, arguments);\r\n that._items = [];\r\n that._isLoaded = true;\r\n that._virtualScrollController = new _uiGrid_core.VirtualScrollController(that.component, {\r\n pageSize: function() {\r\n return that.pageSize()\r\n },\r\n totalItemsCount: function() {\r\n return that.totalItemsCount()\r\n },\r\n hasKnownLastPage: function() {\r\n return that.hasKnownLastPage()\r\n },\r\n pageIndex: function(index) {\r\n return dataSource.pageIndex(index)\r\n },\r\n isLoading: function() {\r\n return dataSource.isLoading() && !that.isCustomLoading()\r\n },\r\n pageCount: function() {\r\n return that.pageCount()\r\n },\r\n load: function() {\r\n return dataSource.load()\r\n },\r\n updateLoading: function() {\r\n _updateLoading(that)\r\n },\r\n itemsCount: function() {\r\n return that.itemsCount(true)\r\n },\r\n items: function() {\r\n return dataSource.items()\r\n },\r\n viewportItems: function(items) {\r\n if (items) {\r\n that._items = items\r\n }\r\n return that._items\r\n },\r\n onChanged: function(e) {\r\n that.changed.fire(e)\r\n },\r\n changingDuration: function(e) {\r\n if (that.isLoading()) {\r\n return LOAD_TIMEOUT\r\n }\r\n return that._renderTime || 0\r\n }\r\n })\r\n },\r\n _handleLoadingChanged: function(isLoading) {\r\n if (!isVirtualMode(this) || this._isLoadingAll) {\r\n this._isLoading = isLoading;\r\n this.callBase.apply(this, arguments)\r\n }\r\n if (isLoading) {\r\n this._startLoadTime = new Date\r\n } else {\r\n this._startLoadTime = void 0\r\n }\r\n },\r\n _handleLoadError: function() {\r\n var that = this;\r\n that._isLoading = false;\r\n that.loadingChanged.fire(false);\r\n that.callBase.apply(that, arguments)\r\n },\r\n _handleDataChanged: function(e) {\r\n var callBase = this.callBase.bind(this);\r\n this._virtualScrollController.handleDataChanged(callBase, e)\r\n },\r\n _customizeRemoteOperations: function(options, operationTypes) {\r\n var that = this;\r\n if (!that.option(\"legacyRendering\") && isVirtualMode(that) && !operationTypes.reload && operationTypes.skip && that._renderTime < that.option(\"scrolling.renderingThreshold\")) {\r\n options.delay = void 0\r\n }\r\n that.callBase.apply(that, arguments)\r\n },\r\n items: function() {\r\n return this._items\r\n },\r\n itemsCount: function(isBase) {\r\n if (isBase) {\r\n return this.callBase()\r\n }\r\n return this._virtualScrollController.itemsCount()\r\n },\r\n load: function(loadOptions) {\r\n if (loadOptions) {\r\n return this.callBase(loadOptions)\r\n }\r\n return this._virtualScrollController.load()\r\n },\r\n isLoading: function() {\r\n return this._isLoading\r\n },\r\n isLoaded: function() {\r\n return this._dataSource.isLoaded() && this._isLoaded\r\n },\r\n resetPagesCache: function(isLiveUpdate) {\r\n if (!isLiveUpdate) {\r\n this._virtualScrollController.reset(true)\r\n }\r\n this.callBase.apply(this, arguments)\r\n },\r\n _changeRowExpandCore: function() {\r\n var result = this.callBase.apply(this, arguments);\r\n this.resetPagesCache();\r\n _updateLoading(this);\r\n return result\r\n },\r\n reload: function() {\r\n this._dataSource.pageIndex(this.pageIndex());\r\n var virtualScrollController = this._virtualScrollController;\r\n if (virtualScrollController) {\r\n var d = new _deferred.Deferred;\r\n this.callBase.apply(this, arguments).done(function(r) {\r\n var delayDeferred = virtualScrollController._delayDeferred;\r\n if (delayDeferred) {\r\n delayDeferred.done(d.resolve).fail(d.reject)\r\n } else {\r\n d.resolve(r)\r\n }\r\n }).fail(d.reject);\r\n return d\r\n } else {\r\n return this.callBase.apply(this, arguments)\r\n }\r\n },\r\n refresh: function(options, operationTypes) {\r\n var that = this;\r\n var storeLoadOptions = options.storeLoadOptions;\r\n var dataSource = that._dataSource;\r\n if (operationTypes.reload) {\r\n that._virtualScrollController.reset();\r\n dataSource.items().length = 0;\r\n that._isLoaded = false;\r\n _updateLoading(that);\r\n that._isLoaded = true;\r\n if (isAppendMode(that)) {\r\n that.pageIndex(0);\r\n dataSource.pageIndex(0);\r\n storeLoadOptions.pageIndex = 0;\r\n options.pageIndex = 0;\r\n storeLoadOptions.skip = 0\r\n } else {\r\n dataSource.pageIndex(that.pageIndex());\r\n if (dataSource.paginate()) {\r\n options.pageIndex = that.pageIndex();\r\n storeLoadOptions.skip = that.pageIndex() * that.pageSize()\r\n }\r\n }\r\n } else {\r\n if (isAppendMode(that) && storeLoadOptions.skip && that._skipCorrection < 0) {\r\n storeLoadOptions.skip += that._skipCorrection\r\n }\r\n }\r\n return that.callBase.apply(that, arguments)\r\n },\r\n dispose: function() {\r\n this._virtualScrollController.dispose();\r\n this.callBase.apply(this, arguments)\r\n }\r\n };\r\n [\"virtualItemsCount\", \"getContentOffset\", \"getVirtualContentSize\", \"setContentSize\", \"setViewportPosition\", \"getViewportItemIndex\", \"setViewportItemIndex\", \"getItemIndexByPosition\", \"viewportSize\", \"viewportItemSize\", \"getItemSize\", \"getItemSizes\", \"pageIndex\", \"beginPageIndex\", \"endPageIndex\", \"loadIfNeed\"].forEach(function(name) {\r\n result[name] = function() {\r\n var virtualScrollController = this._virtualScrollController;\r\n return virtualScrollController[name].apply(virtualScrollController, arguments)\r\n }\r\n });\r\n return result\r\n}();\r\nvar VirtualScrollingRowsViewExtender = function() {\r\n var removeEmptyRows = function($emptyRows, className) {\r\n var getRowParent = function(row) {\r\n return (0, _renderer.default)(row).parent(\".\" + className).get(0)\r\n };\r\n var tBodies = $emptyRows.toArray().map(getRowParent).filter(function(row) {\r\n return row\r\n });\r\n if (tBodies.length) {\r\n $emptyRows = (0, _renderer.default)(tBodies)\r\n }\r\n var rowCount = className === FREESPACE_CLASS ? $emptyRows.length - 1 : $emptyRows.length;\r\n for (var i = 0; i < rowCount; i++) {\r\n $emptyRows.eq(i).remove()\r\n }\r\n };\r\n return {\r\n init: function() {\r\n var _dataController$state, _this = this;\r\n var dataController = this.getController(\"data\");\r\n this.callBase();\r\n dataController.pageChanged.add(function() {\r\n _this.scrollToPage(dataController.pageIndex())\r\n });\r\n dataController.dataSourceChanged.add(function() {\r\n !_this._scrollTop && _this._scrollToCurrentPageOnResize()\r\n });\r\n null === (_dataController$state = dataController.stateLoaded) || void 0 === _dataController$state ? void 0 : _dataController$state.add(function() {\r\n _this._scrollToCurrentPageOnResize()\r\n });\r\n this._scrollToCurrentPageOnResize()\r\n },\r\n _scrollToCurrentPageOnResize: function() {\r\n var _this2 = this;\r\n var dataController = this.getController(\"data\");\r\n if (!this.option(\"legacyRendering\") && dataController.pageIndex() > 0) {\r\n var resizeHandler = function resizeHandler() {\r\n _this2.resizeCompleted.remove(resizeHandler);\r\n _this2.scrollToPage(dataController.pageIndex())\r\n };\r\n this.resizeCompleted.add(resizeHandler)\r\n }\r\n },\r\n scrollToPage: function(pageIndex) {\r\n var that = this;\r\n var dataController = that._dataController;\r\n var pageSize = dataController ? dataController.pageSize() : 0;\r\n var scrollPosition;\r\n if (isVirtualMode(that) || isAppendMode(that)) {\r\n var itemSize = dataController.getItemSize();\r\n var itemSizes = dataController.getItemSizes();\r\n var itemIndex = pageIndex * pageSize;\r\n scrollPosition = itemIndex * itemSize;\r\n for (var index in itemSizes) {\r\n if (index < itemIndex) {\r\n scrollPosition += itemSizes[index] - itemSize\r\n }\r\n }\r\n } else {\r\n scrollPosition = 0\r\n }\r\n that.scrollTo({\r\n y: scrollPosition,\r\n x: that._scrollLeft\r\n })\r\n },\r\n renderDelayedTemplates: function(e) {\r\n this._updateContentPosition(true);\r\n this.callBase.apply(this, arguments)\r\n },\r\n _renderCore: function(e) {\r\n var that = this;\r\n var startRenderTime = new Date;\r\n that.callBase.apply(that, arguments);\r\n var dataSource = that._dataController._dataSource;\r\n if (dataSource && e) {\r\n var itemCount = e.items ? e.items.length : 20;\r\n var viewportSize = that._dataController.viewportSize() || 20;\r\n if (isVirtualRowRendering(that)) {\r\n dataSource._renderTime = (new Date - startRenderTime) * viewportSize / itemCount\r\n } else {\r\n dataSource._renderTime = new Date - startRenderTime\r\n }\r\n }\r\n },\r\n _getRowElements: function(tableElement) {\r\n var $rows = this.callBase(tableElement);\r\n return $rows && $rows.not(\".\" + VIRTUAL_ROW_CLASS)\r\n },\r\n _renderContent: function(contentElement, tableElement) {\r\n var that = this;\r\n var virtualItemsCount = that._dataController.virtualItemsCount();\r\n if (virtualItemsCount && that.option(\"legacyRendering\")) {\r\n if ((0, _window.hasWindow)()) {\r\n tableElement.addClass(that.addWidgetPrefix(TABLE_CONTENT_CLASS))\r\n }\r\n if (!contentElement.children().length) {\r\n contentElement.append(tableElement)\r\n } else {\r\n contentElement.children().first().replaceWith(tableElement)\r\n }\r\n if (1 === contentElement.children(\"table\").length) {\r\n contentElement.append(that._createTable());\r\n that._contentHeight = 0\r\n }\r\n return contentElement\r\n }\r\n return that.callBase.apply(that, arguments)\r\n },\r\n _removeRowsElements: function(contentTable, removeCount, changeType) {\r\n var rowElements = this._getRowElements(contentTable).toArray();\r\n if (\"append\" === changeType) {\r\n rowElements = rowElements.slice(0, removeCount)\r\n } else {\r\n rowElements = rowElements.slice(-removeCount)\r\n }\r\n var errorHandlingController = this.getController(\"errorHandling\");\r\n rowElements.map(function(rowElement) {\r\n var $rowElement = (0, _renderer.default)(rowElement);\r\n errorHandlingController && errorHandlingController.removeErrorRow($rowElement.next());\r\n $rowElement.remove()\r\n })\r\n },\r\n _restoreErrorRow: function(contentTable) {\r\n var editingController = this.getController(\"editing\");\r\n editingController && editingController.hasChanges() && this._getRowElements(contentTable).each(function(_, item) {\r\n var rowOptions = (0, _renderer.default)(item).data(\"options\");\r\n if (rowOptions) {\r\n var change = editingController.getChangeByKey(rowOptions.key);\r\n change && editingController._showErrorRow(change)\r\n }\r\n })\r\n },\r\n _updateContent: function(tableElement, change) {\r\n var that = this;\r\n var $freeSpaceRowElements;\r\n var contentElement = that._findContentElement();\r\n var changeType = change && change.changeType;\r\n if (\"append\" === changeType || \"prepend\" === changeType) {\r\n var contentTable = contentElement.children().first();\r\n var $tBodies = that._getBodies(tableElement);\r\n if (!that.option(\"legacyRendering\") && 1 === $tBodies.length) {\r\n that._getBodies(contentTable)[\"append\" === changeType ? \"append\" : \"prepend\"]($tBodies.children())\r\n } else {\r\n $tBodies[\"append\" === changeType ? \"appendTo\" : \"prependTo\"](contentTable)\r\n }\r\n tableElement.remove();\r\n $freeSpaceRowElements = that._getFreeSpaceRowElements(contentTable);\r\n removeEmptyRows($freeSpaceRowElements, FREESPACE_CLASS);\r\n if (change.removeCount) {\r\n that._removeRowsElements(contentTable, change.removeCount, changeType)\r\n }\r\n that._restoreErrorRow(contentTable)\r\n } else {\r\n that.callBase.apply(that, arguments)\r\n }\r\n that._updateBottomLoading()\r\n },\r\n _addVirtualRow: function($table, isFixed, location, position) {\r\n if (!position) {\r\n return\r\n }\r\n var $virtualRow = this._createEmptyRow(VIRTUAL_ROW_CLASS, isFixed, position);\r\n $virtualRow = this._wrapRowIfNeed($table, $virtualRow);\r\n this._appendEmptyRow($table, $virtualRow, location)\r\n },\r\n _getRowHeights: function() {\r\n var rowHeights = this._getRowElements(this._tableElement).toArray().map(function(row) {\r\n return (0, _position.getBoundingRect)(row).height\r\n });\r\n return rowHeights\r\n },\r\n _correctRowHeights: function(rowHeights) {\r\n var dataController = this._dataController;\r\n var dataSource = dataController._dataSource;\r\n var correctedRowHeights = [];\r\n var visibleRows = dataController.getVisibleRows();\r\n var itemSize = 0;\r\n var firstCountableItem = true;\r\n for (var i = 0; i < rowHeights.length; i++) {\r\n var currentItem = visibleRows[i];\r\n if (!(0, _type.isDefined)(currentItem)) {\r\n continue\r\n }\r\n if (isItemCountableByDataSource(currentItem, dataSource)) {\r\n if (firstCountableItem) {\r\n firstCountableItem = false\r\n } else {\r\n correctedRowHeights.push(itemSize);\r\n itemSize = 0\r\n }\r\n }\r\n itemSize += rowHeights[i]\r\n }\r\n itemSize > 0 && correctedRowHeights.push(itemSize);\r\n return correctedRowHeights\r\n },\r\n _updateContentPosition: function(isRender) {\r\n var that = this;\r\n var dataController = that._dataController;\r\n var rowHeight = that._rowHeight || 20;\r\n dataController.viewportItemSize(rowHeight);\r\n if (!that.option(\"legacyRendering\") && (isVirtualMode(that) || isVirtualRowRendering(that))) {\r\n if (!isRender) {\r\n var rowHeights = that._getRowHeights();\r\n var correctedRowHeights = that._correctRowHeights(rowHeights);\r\n dataController.setContentSize(correctedRowHeights)\r\n }\r\n var top = dataController.getContentOffset(\"begin\");\r\n var bottom = dataController.getContentOffset(\"end\");\r\n var $tables = that.getTableElements();\r\n var $virtualRows = $tables.children(\"tbody\").children(\".\" + VIRTUAL_ROW_CLASS);\r\n removeEmptyRows($virtualRows, VIRTUAL_ROW_CLASS);\r\n $tables.each(function(index) {\r\n var isFixed = index > 0;\r\n that._isFixedTableRendering = isFixed;\r\n that._addVirtualRow((0, _renderer.default)(this), isFixed, \"top\", top);\r\n that._addVirtualRow((0, _renderer.default)(this), isFixed, \"bottom\", bottom);\r\n that._isFixedTableRendering = false\r\n })\r\n } else {\r\n (0, _common.deferUpdate)(function() {\r\n that._updateContentPositionCore()\r\n })\r\n }\r\n },\r\n _updateContentPositionCore: function() {\r\n var that = this;\r\n var contentHeight;\r\n var $tables;\r\n var $contentTable;\r\n var rowHeight = that._rowHeight || 20;\r\n var virtualItemsCount = that._dataController.virtualItemsCount();\r\n if (virtualItemsCount) {\r\n var contentElement = that._findContentElement();\r\n $tables = contentElement.children();\r\n $contentTable = $tables.eq(0);\r\n var virtualTable = $tables.eq(1);\r\n that._contentTableHeight = $contentTable[0].offsetHeight;\r\n that._dataController.viewportItemSize(rowHeight);\r\n that._dataController.setContentSize(that._contentTableHeight);\r\n contentHeight = that._dataController.getVirtualContentSize();\r\n var top = that._dataController.getContentOffset();\r\n (0, _common.deferRender)(function() {\r\n (0, _translator.move)($contentTable, {\r\n left: 0,\r\n top: top\r\n });\r\n var isRenderVirtualTableContentRequired = that._contentHeight !== contentHeight || 0 === contentHeight || !that._isTableLinesDisplaysCorrect(virtualTable) || !that._isColumnElementsEqual($contentTable.find(\"col\"), virtualTable.find(\"col\"));\r\n if (isRenderVirtualTableContentRequired) {\r\n that._contentHeight = contentHeight;\r\n that._renderVirtualTableContent(virtualTable, contentHeight)\r\n }\r\n })\r\n }\r\n },\r\n _isTableLinesDisplaysCorrect: function(table) {\r\n var hasColumnLines = table.find(\".\" + COLUMN_LINES_CLASS).length > 0;\r\n return hasColumnLines === this.option(\"showColumnLines\")\r\n },\r\n _isColumnElementsEqual: function($columns, $virtualColumns) {\r\n var result = $columns.length === $virtualColumns.length;\r\n if (result) {\r\n (0, _iterator.each)($columns, function(index, element) {\r\n if (element.style.width !== $virtualColumns[index].style.width) {\r\n result = false;\r\n return result\r\n }\r\n })\r\n }\r\n return result\r\n },\r\n _renderVirtualTableContent: function(container, height) {\r\n var that = this;\r\n var columns = that._columnsController.getVisibleColumns();\r\n var html = that._createColGroup(columns).prop(\"outerHTML\");\r\n var freeSpaceCellsHtml = \"\";\r\n var columnLinesClass = that.option(\"showColumnLines\") ? COLUMN_LINES_CLASS : \"\";\r\n var createFreeSpaceRowHtml = function(height) {\r\n return \"\" + freeSpaceCellsHtml + \"\"\r\n };\r\n for (var i = 0; i < columns.length; i++) {\r\n var classes = that._getCellClasses(columns[i]);\r\n var classString = classes.length ? \" class='\" + classes.join(\" \") + \"'\" : \"\";\r\n freeSpaceCellsHtml += \"\"\r\n }\r\n while (height > PIXELS_LIMIT) {\r\n html += createFreeSpaceRowHtml(PIXELS_LIMIT);\r\n height -= PIXELS_LIMIT\r\n }\r\n html += createFreeSpaceRowHtml(height);\r\n container.addClass(that.addWidgetPrefix(TABLE_CLASS));\r\n container.html(html)\r\n },\r\n _getCellClasses: function(column) {\r\n var classes = [];\r\n var cssClass = column.cssClass;\r\n var isExpandColumn = \"expand\" === column.command;\r\n cssClass && classes.push(cssClass);\r\n isExpandColumn && classes.push(this.addWidgetPrefix(GROUP_SPACE_CLASS));\r\n return classes\r\n },\r\n _findBottomLoadPanel: function($contentElement) {\r\n var $element = $contentElement || this.element();\r\n var $bottomLoadPanel = $element && $element.find(\".\" + this.addWidgetPrefix(BOTTOM_LOAD_PANEL_CLASS));\r\n if ($bottomLoadPanel && $bottomLoadPanel.length) {\r\n return $bottomLoadPanel\r\n }\r\n },\r\n _updateBottomLoading: function() {\r\n var that = this;\r\n var scrollingMode = that.option(\"scrolling.mode\");\r\n var virtualMode = scrollingMode === SCROLLING_MODE_VIRTUAL;\r\n var appendMode = scrollingMode === SCROLLING_MODE_INFINITE;\r\n var showBottomLoading = !that._dataController.hasKnownLastPage() && that._dataController.isLoaded() && (virtualMode || appendMode);\r\n var $contentElement = that._findContentElement();\r\n var bottomLoadPanelElement = that._findBottomLoadPanel($contentElement);\r\n if (showBottomLoading) {\r\n if (!bottomLoadPanelElement) {\r\n (0, _renderer.default)(\"
\").addClass(that.addWidgetPrefix(BOTTOM_LOAD_PANEL_CLASS)).append(that._createComponent((0, _renderer.default)(\"
\"), _load_indicator.default).$element()).appendTo($contentElement)\r\n }\r\n } else {\r\n if (bottomLoadPanelElement) {\r\n bottomLoadPanelElement.remove()\r\n }\r\n }\r\n },\r\n _handleScroll: function(e) {\r\n var that = this;\r\n if (that._hasHeight && that._rowHeight) {\r\n that._dataController.setViewportPosition(e.scrollOffset.top)\r\n }\r\n that.callBase.apply(that, arguments)\r\n },\r\n _needUpdateRowHeight: function(itemsCount) {\r\n var that = this;\r\n return that.callBase.apply(that, arguments) || itemsCount > 0 && that.option(\"scrolling.mode\") === SCROLLING_MODE_INFINITE && that.option(\"scrolling.rowRenderingMode\") !== SCROLLING_MODE_VIRTUAL\r\n },\r\n _updateRowHeight: function() {\r\n var that = this;\r\n that.callBase.apply(that, arguments);\r\n if (that._rowHeight) {\r\n that._updateContentPosition();\r\n var viewportHeight = that._hasHeight ? that.element().outerHeight() : (0, _renderer.default)((0, _window.getWindow)()).outerHeight();\r\n that._dataController.viewportSize(Math.ceil(viewportHeight / that._rowHeight))\r\n }\r\n },\r\n updateFreeSpaceRowHeight: function() {\r\n var result = this.callBase.apply(this, arguments);\r\n if (result) {\r\n this._updateContentPosition()\r\n }\r\n return result\r\n },\r\n setLoading: function(isLoading, messageText) {\r\n var that = this;\r\n var callBase = that.callBase;\r\n var dataController = that._dataController;\r\n var hasBottomLoadPanel = dataController.pageIndex() > 0 && dataController.isLoaded() && !!that._findBottomLoadPanel();\r\n if (hasBottomLoadPanel) {\r\n isLoading = false\r\n }\r\n callBase.call(that, isLoading, messageText)\r\n },\r\n _resizeCore: function() {\r\n var that = this;\r\n var $element = that.element();\r\n that.callBase();\r\n if (that.component.$element() && !that._windowScroll && $element.closest((0, _window.getWindow)().document).length) {\r\n that._windowScroll = (0, _uiGrid_core.subscribeToExternalScrollers)($element, function(scrollPos) {\r\n if (!that._hasHeight && that._rowHeight) {\r\n that._dataController.setViewportPosition(scrollPos)\r\n }\r\n }, that.component.$element());\r\n that.on(\"disposing\", function() {\r\n that._windowScroll.dispose()\r\n })\r\n }\r\n that.loadIfNeed()\r\n },\r\n loadIfNeed: function() {\r\n var dataController = this._dataController;\r\n if (dataController && dataController.loadIfNeed) {\r\n dataController.loadIfNeed()\r\n }\r\n },\r\n setColumnWidths: function(widths) {\r\n var scrollable = this.getScrollable();\r\n var $content;\r\n this.callBase.apply(this, arguments);\r\n if (\"virtual\" === this.option(\"scrolling.mode\")) {\r\n $content = scrollable ? scrollable.$content() : this.element();\r\n this.callBase(widths, $content.children(\".\" + this.addWidgetPrefix(CONTENT_CLASS)).children(\":not(.\" + this.addWidgetPrefix(TABLE_CONTENT_CLASS) + \")\"))\r\n }\r\n },\r\n dispose: function() {\r\n clearTimeout(this._scrollTimeoutID);\r\n this.callBase()\r\n }\r\n }\r\n}();\r\nvar _default = {\r\n defaultOptions: function() {\r\n return {\r\n scrolling: {\r\n timeout: 300,\r\n updateTimeout: 300,\r\n minTimeout: 0,\r\n renderingThreshold: 100,\r\n removeInvisiblePages: true,\r\n rowPageSize: 5,\r\n mode: \"standard\",\r\n preloadEnabled: false,\r\n rowRenderingMode: \"standard\",\r\n loadTwoPagesOnStart: false\r\n }\r\n }\r\n },\r\n extenders: {\r\n dataSourceAdapter: VirtualScrollingDataSourceAdapterExtender,\r\n controllers: {\r\n data: function() {\r\n var members = {\r\n _refreshDataSource: function() {\r\n var baseResult = this.callBase.apply(this, arguments) || (new _deferred.Deferred).resolve().promise();\r\n baseResult.done(this.initVirtualRows.bind(this));\r\n return baseResult\r\n },\r\n getRowPageSize: function() {\r\n var rowPageSize = this.option(\"scrolling.rowPageSize\");\r\n var pageSize = this.pageSize();\r\n return pageSize && pageSize < rowPageSize ? pageSize : rowPageSize\r\n },\r\n reload: function() {\r\n var that = this;\r\n var rowsScrollController = that._rowsScrollController || that._dataSource;\r\n var itemIndex = rowsScrollController && rowsScrollController.getItemIndexByPosition();\r\n var result = this.callBase.apply(this, arguments);\r\n return result && result.done(function() {\r\n if (isVirtualMode(that) || isVirtualRowRendering(that)) {\r\n var rowIndexOffset = that.getRowIndexOffset();\r\n var rowIndex = Math.floor(itemIndex) - rowIndexOffset;\r\n var component = that.component;\r\n var scrollable = component.getScrollable && component.getScrollable();\r\n var isSortingOperation = that.dataSource().operationTypes().sorting;\r\n if (scrollable && !that.option(\"legacyRendering\") && !isSortingOperation) {\r\n var rowElement = component.getRowElement(rowIndex);\r\n var $rowElement = rowElement && rowElement[0] && (0, _renderer.default)(rowElement[0]);\r\n var top = $rowElement && $rowElement.position().top;\r\n var allowedTopOffset = _browser.default.mozilla || _browser.default.msie ? 1 : 0;\r\n if (top > allowedTopOffset) {\r\n top = Math.round(top + $rowElement.outerHeight() * (itemIndex % 1));\r\n scrollable.scrollTo({\r\n y: top\r\n })\r\n }\r\n }\r\n }\r\n })\r\n },\r\n initVirtualRows: function() {\r\n var that = this;\r\n var virtualRowsRendering = isVirtualRowRendering(that);\r\n if (\"virtual\" !== that.option(\"scrolling.mode\") && true !== virtualRowsRendering || false === virtualRowsRendering || that.option(\"legacyRendering\") || !that.option(\"scrolling.rowPageSize\")) {\r\n that._visibleItems = null;\r\n that._rowsScrollController = null;\r\n return\r\n }\r\n var pageIndex = !isVirtualMode(this) && that.pageIndex() >= that.pageCount() ? that.pageCount() - 1 : that.pageIndex();\r\n that._rowPageIndex = Math.ceil(pageIndex * that.pageSize() / that.getRowPageSize());\r\n that._visibleItems = [];\r\n var isItemCountable = function(item) {\r\n return isItemCountableByDataSource(item, that._dataSource)\r\n };\r\n that._rowsScrollController = new _uiGrid_core.VirtualScrollController(that.component, {\r\n pageSize: function() {\r\n return that.getRowPageSize()\r\n },\r\n totalItemsCount: function() {\r\n return isVirtualMode(that) ? that.totalItemsCount() : that._items.filter(isItemCountable).length\r\n },\r\n hasKnownLastPage: function() {\r\n return true\r\n },\r\n pageIndex: function(index) {\r\n if (void 0 !== index) {\r\n that._rowPageIndex = index\r\n }\r\n return that._rowPageIndex\r\n },\r\n isLoading: function() {\r\n return that.isLoading()\r\n },\r\n pageCount: function pageCount() {\r\n var pageCount = Math.ceil(this.totalItemsCount() / this.pageSize());\r\n return pageCount ? pageCount : 1\r\n },\r\n load: function() {\r\n if (that._rowsScrollController.pageIndex() >= this.pageCount()) {\r\n that._rowPageIndex = this.pageCount() - 1;\r\n that._rowsScrollController.pageIndex(that._rowPageIndex)\r\n }\r\n if (!that._rowsScrollController._dataSource.items().length && this.totalItemsCount()) {\r\n return\r\n }\r\n that._rowsScrollController.handleDataChanged(function(change) {\r\n change = change || {};\r\n change.changeType = change.changeType || \"refresh\";\r\n change.items = change.items || that._visibleItems;\r\n that._visibleItems.forEach(function(item, index) {\r\n item.rowIndex = index\r\n });\r\n that._fireChanged(change)\r\n })\r\n },\r\n updateLoading: function() {},\r\n itemsCount: function() {\r\n return that._rowsScrollController._dataSource.items().filter(isItemCountable).length\r\n },\r\n correctCount: function(items, count, fromEnd) {\r\n return _correctCount(items, count, fromEnd, function(item, isNextAfterLast, fromEnd) {\r\n if (item.isNewRow) {\r\n return isNextAfterLast && !fromEnd\r\n }\r\n if (isNextAfterLast && fromEnd) {\r\n return !item.isNewRow\r\n }\r\n return isItemCountable(item)\r\n })\r\n },\r\n items: function(countableOnly) {\r\n var dataSource = that.dataSource();\r\n var virtualItemsCount = dataSource && dataSource.virtualItemsCount();\r\n var begin = virtualItemsCount ? virtualItemsCount.begin : 0;\r\n var rowPageSize = that.getRowPageSize();\r\n var skip = that._rowPageIndex * rowPageSize - begin;\r\n var take = rowPageSize;\r\n var result = that._items;\r\n if (skip < 0) {\r\n return []\r\n }\r\n if (skip) {\r\n skip = this.correctCount(result, skip);\r\n result = result.slice(skip)\r\n }\r\n if (take) {\r\n take = this.correctCount(result, take);\r\n result = result.slice(0, take)\r\n }\r\n return countableOnly ? result.filter(isItemCountable) : result\r\n },\r\n viewportItems: function(items) {\r\n if (items) {\r\n that._visibleItems = items\r\n }\r\n return that._visibleItems\r\n },\r\n onChanged: function() {},\r\n changingDuration: function(e) {\r\n var dataSource = that.dataSource();\r\n if (dataSource.isLoading()) {\r\n return LOAD_TIMEOUT\r\n }\r\n return (null === dataSource || void 0 === dataSource ? void 0 : dataSource._renderTime) || 0\r\n }\r\n }, true);\r\n that._rowsScrollController.positionChanged.add(function() {\r\n var _that$_dataSource;\r\n null === (_that$_dataSource = that._dataSource) || void 0 === _that$_dataSource ? void 0 : _that$_dataSource.setViewportItemIndex(that._rowsScrollController.getViewportItemIndex())\r\n });\r\n if (that.isLoaded()) {\r\n that._rowsScrollController.load()\r\n }\r\n },\r\n _updateItemsCore: function(change) {\r\n var _this3 = this;\r\n var delta = this.getRowIndexDelta();\r\n this.callBase.apply(this, arguments);\r\n var rowsScrollController = this._rowsScrollController;\r\n if (rowsScrollController) {\r\n var visibleItems = this._visibleItems;\r\n var isRefresh = \"refresh\" === change.changeType || change.isLiveUpdate;\r\n if (\"append\" === change.changeType && change.items && !change.items.length) {\r\n return\r\n }\r\n if (isRefresh || \"append\" === change.changeType || \"prepend\" === change.changeType) {\r\n change.cancel = true;\r\n isRefresh && rowsScrollController.reset(true);\r\n rowsScrollController.load()\r\n } else {\r\n if (\"update\" === change.changeType) {\r\n change.rowIndices.forEach(function(rowIndex, index) {\r\n var changeType = change.changeTypes[index];\r\n var newItem = change.items[index];\r\n if (\"update\" === changeType) {\r\n visibleItems[rowIndex] = newItem\r\n } else {\r\n if (\"insert\" === changeType) {\r\n visibleItems.splice(rowIndex, 0, newItem)\r\n } else {\r\n if (\"remove\" === changeType) {\r\n visibleItems.splice(rowIndex, 1)\r\n }\r\n }\r\n }\r\n })\r\n } else {\r\n visibleItems.forEach(function(item, index) {\r\n visibleItems[index] = _this3._items[index + delta] || visibleItems[index]\r\n });\r\n change.items = visibleItems\r\n }\r\n visibleItems.forEach(function(item, index) {\r\n item.rowIndex = index\r\n })\r\n }\r\n }\r\n },\r\n _applyChange: function(change) {\r\n var that = this;\r\n var items = change.items;\r\n var changeType = change.changeType;\r\n var removeCount = change.removeCount;\r\n if (removeCount) {\r\n var fromEnd = \"prepend\" === changeType;\r\n removeCount = _correctCount(that._items, removeCount, fromEnd, function(item, isNextAfterLast) {\r\n return \"data\" === item.rowType && !item.isNewRow || \"group\" === item.rowType && (that._dataSource.isGroupItemCountable(item.data) || isNextAfterLast)\r\n });\r\n change.removeCount = removeCount\r\n }\r\n switch (changeType) {\r\n case \"prepend\":\r\n that._items.unshift.apply(that._items, items);\r\n if (removeCount) {\r\n that._items.splice(-removeCount)\r\n }\r\n break;\r\n case \"append\":\r\n that._items.push.apply(that._items, items);\r\n if (removeCount) {\r\n that._items.splice(0, removeCount)\r\n }\r\n break;\r\n default:\r\n that.callBase(change)\r\n }\r\n },\r\n items: function(allItems) {\r\n return allItems ? this._items : this._visibleItems || this._items\r\n },\r\n getRowIndexDelta: function() {\r\n var visibleItems = this._visibleItems;\r\n var delta = 0;\r\n if (visibleItems && visibleItems[0]) {\r\n delta = this._items.indexOf(visibleItems[0])\r\n }\r\n return delta < 0 ? 0 : delta\r\n },\r\n getRowIndexOffset: function(byLoadedRows) {\r\n var offset = 0;\r\n var dataSource = this.dataSource();\r\n var rowsScrollController = this._rowsScrollController;\r\n if (rowsScrollController && !byLoadedRows) {\r\n offset = rowsScrollController.beginPageIndex() * rowsScrollController._dataSource.pageSize()\r\n } else {\r\n if (\"virtual\" === this.option(\"scrolling.mode\") && dataSource) {\r\n offset = dataSource.beginPageIndex() * dataSource.pageSize()\r\n }\r\n }\r\n return offset\r\n },\r\n viewportSize: function() {\r\n var rowsScrollController = this._rowsScrollController;\r\n rowsScrollController && rowsScrollController.viewportSize.apply(rowsScrollController, arguments);\r\n var dataSource = this._dataSource;\r\n return dataSource && dataSource.viewportSize.apply(dataSource, arguments)\r\n },\r\n viewportItemSize: function() {\r\n var rowsScrollController = this._rowsScrollController;\r\n rowsScrollController && rowsScrollController.viewportItemSize.apply(rowsScrollController, arguments);\r\n var dataSource = this._dataSource;\r\n return dataSource && dataSource.viewportItemSize.apply(dataSource, arguments)\r\n },\r\n setViewportPosition: function() {\r\n var rowsScrollController = this._rowsScrollController;\r\n var dataSource = this._dataSource;\r\n if (rowsScrollController) {\r\n rowsScrollController.setViewportPosition.apply(rowsScrollController, arguments)\r\n } else {\r\n null === dataSource || void 0 === dataSource ? void 0 : dataSource.setViewportPosition.apply(dataSource, arguments)\r\n }\r\n },\r\n setContentSize: function(sizes) {\r\n var rowsScrollController = this._rowsScrollController;\r\n rowsScrollController && rowsScrollController.setContentSize(sizes);\r\n var dataSource = this._dataSource;\r\n return dataSource && dataSource.setContentSize(sizes)\r\n },\r\n loadIfNeed: function() {\r\n var rowsScrollController = this._rowsScrollController;\r\n rowsScrollController && rowsScrollController.loadIfNeed();\r\n var dataSource = this._dataSource;\r\n return dataSource && dataSource.loadIfNeed()\r\n },\r\n getItemSize: function() {\r\n var rowsScrollController = this._rowsScrollController;\r\n if (rowsScrollController) {\r\n return rowsScrollController.getItemSize.apply(rowsScrollController, arguments)\r\n }\r\n var dataSource = this._dataSource;\r\n return dataSource && dataSource.getItemSize.apply(dataSource, arguments)\r\n },\r\n getItemSizes: function() {\r\n var rowsScrollController = this._rowsScrollController;\r\n if (rowsScrollController) {\r\n return rowsScrollController.getItemSizes.apply(rowsScrollController, arguments)\r\n }\r\n var dataSource = this._dataSource;\r\n return dataSource && dataSource.getItemSizes.apply(dataSource, arguments)\r\n },\r\n getContentOffset: function() {\r\n var rowsScrollController = this._rowsScrollController;\r\n if (rowsScrollController) {\r\n return rowsScrollController.getContentOffset.apply(rowsScrollController, arguments)\r\n }\r\n var dataSource = this._dataSource;\r\n return dataSource && dataSource.getContentOffset.apply(dataSource, arguments)\r\n },\r\n refresh: function(options) {\r\n var dataSource = this._dataSource;\r\n if (dataSource && options && options.load && isAppendMode(this)) {\r\n dataSource.resetCurrentTotalCount()\r\n }\r\n return this.callBase.apply(this, arguments)\r\n },\r\n dispose: function() {\r\n var rowsScrollController = this._rowsScrollController;\r\n rowsScrollController && rowsScrollController.dispose();\r\n this.callBase.apply(this, arguments)\r\n }\r\n };\r\n _uiGrid_core2.default.proxyMethod(members, \"virtualItemsCount\");\r\n _uiGrid_core2.default.proxyMethod(members, \"getVirtualContentSize\");\r\n _uiGrid_core2.default.proxyMethod(members, \"setViewportItemIndex\");\r\n return members\r\n }(),\r\n resizing: {\r\n resize: function() {\r\n var that = this;\r\n var callBase = that.callBase;\r\n var result;\r\n if (!that.option(\"legacyRendering\") && (isVirtualMode(that) || isVirtualRowRendering(that))) {\r\n clearTimeout(that._resizeTimeout);\r\n var diff = new Date - that._lastTime;\r\n var updateTimeout = that.option(\"scrolling.updateTimeout\");\r\n if (that._lastTime && diff < updateTimeout) {\r\n result = new _deferred.Deferred;\r\n that._resizeTimeout = setTimeout(function() {\r\n callBase.apply(that).done(result.resolve).fail(result.reject);\r\n that._lastTime = new Date\r\n }, updateTimeout);\r\n that._lastTime = new Date\r\n } else {\r\n result = callBase.apply(that);\r\n if (that._dataController.isLoaded()) {\r\n that._lastTime = new Date\r\n }\r\n }\r\n } else {\r\n result = callBase.apply(that)\r\n }\r\n return result\r\n },\r\n dispose: function() {\r\n this.callBase.apply(this, arguments);\r\n clearTimeout(this._resizeTimeout)\r\n }\r\n }\r\n },\r\n views: {\r\n rowsView: VirtualScrollingRowsViewExtender\r\n }\r\n }\r\n};\r\nexports.default = _default;\r\nmodule.exports = exports.default;\r\n","/**\r\n * DevExtreme (ui/grid_core/ui.grid_core.virtual_scrolling_core.js)\r\n * Version: 20.2.7\r\n * Build date: Thu Apr 22 2021\r\n *\r\n * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED\r\n * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/\r\n */\r\n\"use strict\";\r\nexports.getContentHeightLimit = getContentHeightLimit;\r\nexports.subscribeToExternalScrollers = subscribeToExternalScrollers;\r\nexports.VirtualScrollController = exports.getPixelRatio = void 0;\r\nvar _renderer = _interopRequireDefault(require(\"../../core/renderer\"));\r\nvar _window = require(\"../../core/utils/window\");\r\nvar _events_engine = _interopRequireDefault(require(\"../../events/core/events_engine\"));\r\nvar _browser = _interopRequireDefault(require(\"../../core/utils/browser\"));\r\nvar _type = require(\"../../core/utils/type\");\r\nvar _position = _interopRequireDefault(require(\"../../animation/position\"));\r\nvar _iterator = require(\"../../core/utils/iterator\");\r\nvar _class = _interopRequireDefault(require(\"../../core/class\"));\r\nvar _deferred = require(\"../../core/utils/deferred\");\r\nvar _callbacks = _interopRequireDefault(require(\"../../core/utils/callbacks\"));\r\n\r\nfunction _interopRequireDefault(obj) {\r\n return obj && obj.__esModule ? obj : {\r\n \"default\": obj\r\n }\r\n}\r\nvar SCROLLING_MODE_INFINITE = \"infinite\";\r\nvar SCROLLING_MODE_VIRTUAL = \"virtual\";\r\nvar isVirtualMode = function(that) {\r\n return that.option(\"scrolling.mode\") === SCROLLING_MODE_VIRTUAL || that._isVirtual\r\n};\r\nvar isAppendMode = function(that) {\r\n return that.option(\"scrolling.mode\") === SCROLLING_MODE_INFINITE && !that._isVirtual\r\n};\r\nvar needTwoPagesLoading = function(that) {\r\n return that.option(\"scrolling.loadTwoPagesOnStart\") || that._isVirtual || that._viewportItemIndex > 0\r\n};\r\nvar getPixelRatio = function(window) {\r\n return window.devicePixelRatio || 1\r\n};\r\nexports.getPixelRatio = getPixelRatio;\r\n\r\nfunction getContentHeightLimit(browser) {\r\n if (browser.msie) {\r\n return 4e6\r\n } else {\r\n if (browser.mozilla) {\r\n return 8e6\r\n }\r\n }\r\n return 15e6 / getPixelRatio((0, _window.getWindow)())\r\n}\r\n\r\nfunction subscribeToExternalScrollers($element, scrollChangedHandler, $targetElement) {\r\n var $scrollElement;\r\n var scrollableArray = [];\r\n var scrollToArray = [];\r\n var disposeArray = [];\r\n $targetElement = $targetElement || $element;\r\n\r\n function getElementOffset(scrollable) {\r\n var $scrollableElement = scrollable.element ? scrollable.$element() : scrollable;\r\n var scrollableOffset = _position.default.offset($scrollableElement);\r\n if (!scrollableOffset) {\r\n return $element.offset().top\r\n }\r\n return scrollable.scrollTop() - (scrollableOffset.top - $element.offset().top)\r\n }\r\n\r\n function createWindowScrollHandler(scrollable) {\r\n return function() {\r\n var scrollTop = scrollable.scrollTop() - getElementOffset(scrollable);\r\n scrollTop = scrollTop > 0 ? scrollTop : 0;\r\n scrollChangedHandler(scrollTop)\r\n }\r\n }\r\n var widgetScrollStrategy = {\r\n on: function(scrollable, eventName, handler) {\r\n scrollable.on(\"scroll\", handler)\r\n },\r\n off: function(scrollable, eventName, handler) {\r\n scrollable.off(\"scroll\", handler)\r\n }\r\n };\r\n\r\n function subscribeToScrollEvents($scrollElement) {\r\n var isDocument = \"#document\" === $scrollElement.get(0).nodeName;\r\n var scrollable = $scrollElement.data(\"dxScrollable\");\r\n var eventsStrategy = widgetScrollStrategy;\r\n if (!scrollable) {\r\n scrollable = isDocument && (0, _renderer.default)((0, _window.getWindow)()) || \"auto\" === $scrollElement.css(\"overflowY\") && $scrollElement;\r\n eventsStrategy = _events_engine.default;\r\n if (!scrollable) {\r\n return\r\n }\r\n }\r\n var handler = createWindowScrollHandler(scrollable);\r\n eventsStrategy.on(scrollable, \"scroll\", handler);\r\n scrollToArray.push(function(pos) {\r\n var topOffset = getElementOffset(scrollable);\r\n var scrollMethod = scrollable.scrollTo ? \"scrollTo\" : \"scrollTop\";\r\n if (pos - topOffset >= 0) {\r\n scrollable[scrollMethod](pos + topOffset)\r\n }\r\n });\r\n scrollableArray.push(scrollable);\r\n disposeArray.push(function() {\r\n eventsStrategy.off(scrollable, \"scroll\", handler)\r\n })\r\n }\r\n for ($scrollElement = $targetElement.parent(); $scrollElement.length; $scrollElement = $scrollElement.parent()) {\r\n subscribeToScrollEvents($scrollElement)\r\n }\r\n return {\r\n scrollTo: function(pos) {\r\n (0, _iterator.each)(scrollToArray, function(_, scrollTo) {\r\n scrollTo(pos)\r\n })\r\n },\r\n dispose: function() {\r\n (0, _iterator.each)(disposeArray, function(_, dispose) {\r\n dispose()\r\n })\r\n }\r\n }\r\n}\r\nvar VirtualScrollController = _class.default.inherit(function() {\r\n var getViewportPageCount = function(that) {\r\n var pageSize = that._dataSource.pageSize();\r\n var preventPreload = that.option(\"scrolling.preventPreload\");\r\n if (preventPreload) {\r\n return 0\r\n }\r\n var realViewportSize = that._viewportSize;\r\n if (isVirtualMode(that) && !that.option(\"legacyRendering\") && that.option(\"scrolling.removeInvisiblePages\")) {\r\n realViewportSize = 0;\r\n var viewportSize = that._viewportSize * that._viewportItemSize;\r\n var offset = that.getContentOffset();\r\n var position = that._position || 0;\r\n var virtualItemsCount = that.virtualItemsCount();\r\n var totalItemsCount = that._dataSource.totalItemsCount();\r\n for (var itemIndex = virtualItemsCount.begin; itemIndex < totalItemsCount; itemIndex++) {\r\n if (offset >= position + viewportSize) {\r\n break\r\n }\r\n var itemSize = that._itemSizes[itemIndex] || that._viewportItemSize;\r\n offset += itemSize;\r\n if (offset >= position) {\r\n realViewportSize++\r\n }\r\n }\r\n }\r\n return pageSize && realViewportSize > 0 ? Math.ceil(realViewportSize / pageSize) : 1\r\n };\r\n var getPreloadPageCount = function(that, previous) {\r\n var preloadEnabled = that.option(\"scrolling.preloadEnabled\");\r\n var pageCount = getViewportPageCount(that);\r\n if (pageCount) {\r\n if (previous) {\r\n pageCount = preloadEnabled ? 1 : 0\r\n } else {\r\n if (preloadEnabled) {\r\n pageCount++\r\n }\r\n if (isAppendMode(that) || !needTwoPagesLoading(that)) {\r\n pageCount--\r\n }\r\n }\r\n }\r\n return pageCount\r\n };\r\n var getPageIndexForLoad = function(that) {\r\n var result = -1;\r\n var beginPageIndex = getBeginPageIndex(that);\r\n var dataSource = that._dataSource;\r\n if (beginPageIndex < 0) {\r\n result = that._pageIndex\r\n } else {\r\n if (!that._cache[that._pageIndex - beginPageIndex]) {\r\n result = that._pageIndex\r\n } else {\r\n if (beginPageIndex >= 0 && that._viewportSize >= 0) {\r\n if (beginPageIndex > 0) {\r\n var needToLoadPageBeforeLast = getEndPageIndex(that) + 1 === dataSource.pageCount() && that._cache.length < getPreloadPageCount(that) + 1;\r\n var needToLoadPrevPage = needToLoadPageBeforeLast || that._pageIndex === beginPageIndex && getPreloadPageCount(that, true);\r\n if (needToLoadPrevPage) {\r\n result = beginPageIndex - 1\r\n }\r\n }\r\n if (result < 0) {\r\n var needToLoadNextPage = beginPageIndex + that._cache.length <= that._pageIndex + getPreloadPageCount(that);\r\n if (needToLoadNextPage) {\r\n result = beginPageIndex + that._cache.length\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (that._loadingPageIndexes[result]) {\r\n result = -1\r\n }\r\n return result\r\n };\r\n\r\n function getBeginPageIndex(that) {\r\n return that._cache.length ? that._cache[0].pageIndex : -1\r\n }\r\n\r\n function getEndPageIndex(that) {\r\n return that._cache.length ? that._cache[that._cache.length - 1].pageIndex : -1\r\n }\r\n var fireChanged = function(that, changed, args) {\r\n that._isChangedFiring = true;\r\n changed(args);\r\n that._isChangedFiring = false\r\n };\r\n var processDelayChanged = function(that, changed, args) {\r\n if (that._isDelayChanged) {\r\n that._isDelayChanged = false;\r\n fireChanged(that, changed, args);\r\n return true\r\n }\r\n };\r\n var processChanged = function(that, changed, changeType, isDelayChanged, removeCacheItem) {\r\n var dataSource = that._dataSource;\r\n var items = dataSource.items().slice();\r\n var change = (0, _type.isObject)(changeType) ? changeType : void 0;\r\n var isPrepend = \"prepend\" === changeType;\r\n var viewportItems = dataSource.viewportItems();\r\n if (changeType && (0, _type.isString)(changeType) && !that._isDelayChanged) {\r\n change = {\r\n changeType: changeType,\r\n items: items\r\n };\r\n if (removeCacheItem) {\r\n change.removeCount = removeCacheItem.itemsCount;\r\n if (change.removeCount && dataSource.correctCount) {\r\n change.removeCount = dataSource.correctCount(viewportItems, change.removeCount, isPrepend)\r\n }\r\n }\r\n }\r\n var removeItemCount = removeCacheItem ? removeCacheItem.itemsLength : 0;\r\n if (removeItemCount && dataSource.correctCount) {\r\n removeItemCount = dataSource.correctCount(viewportItems, removeItemCount, isPrepend)\r\n }\r\n if (\"append\" === changeType) {\r\n viewportItems.push.apply(viewportItems, items);\r\n if (removeCacheItem) {\r\n viewportItems.splice(0, removeItemCount)\r\n }\r\n } else {\r\n if (isPrepend) {\r\n viewportItems.unshift.apply(viewportItems, items);\r\n if (removeCacheItem) {\r\n viewportItems.splice(-removeItemCount)\r\n }\r\n } else {\r\n that._dataSource.viewportItems(items)\r\n }\r\n }\r\n dataSource.updateLoading();\r\n that._lastPageIndex = that.pageIndex();\r\n that._isDelayChanged = isDelayChanged;\r\n if (!isDelayChanged) {\r\n fireChanged(that, changed, change)\r\n }\r\n };\r\n var loadCore = function(that, pageIndex) {\r\n var dataSource = that._dataSource;\r\n if (pageIndex === that.pageIndex() || !dataSource.isLoading() && pageIndex < dataSource.pageCount() || !dataSource.hasKnownLastPage() && pageIndex === dataSource.pageCount()) {\r\n dataSource.pageIndex(pageIndex);\r\n that._loadingPageIndexes[pageIndex] = true;\r\n return (0, _deferred.when)(dataSource.load()).always(function() {\r\n that._loadingPageIndexes[pageIndex] = false\r\n })\r\n }\r\n };\r\n return {\r\n ctor: function(component, dataSource, isVirtual) {\r\n var that = this;\r\n that._dataSource = dataSource;\r\n that.component = component;\r\n that._pageIndex = that._lastPageIndex = dataSource.pageIndex();\r\n that._viewportSize = 0;\r\n that._viewportItemSize = 20;\r\n that._viewportItemIndex = -1;\r\n that._itemSizes = {};\r\n that._sizeRatio = 1;\r\n that._items = [];\r\n that._cache = [];\r\n that._isVirtual = isVirtual;\r\n that._loadingPageIndexes = {};\r\n that.positionChanged = (0, _callbacks.default)()\r\n },\r\n getItemSizes: function() {\r\n return this._itemSizes\r\n },\r\n option: function() {\r\n return this.component.option.apply(this.component, arguments)\r\n },\r\n virtualItemsCount: function() {\r\n var that = this;\r\n var pageIndex;\r\n var itemsCount = 0;\r\n if (isVirtualMode(that)) {\r\n pageIndex = getBeginPageIndex(that);\r\n if (pageIndex < 0) {\r\n pageIndex = that._dataSource.pageIndex()\r\n }\r\n var beginItemsCount = pageIndex * that._dataSource.pageSize();\r\n itemsCount = that._cache.length * that._dataSource.pageSize();\r\n var endItemsCount = Math.max(0, that._dataSource.totalItemsCount() - itemsCount - beginItemsCount);\r\n return {\r\n begin: beginItemsCount,\r\n end: endItemsCount\r\n }\r\n }\r\n },\r\n setViewportPosition: function(position) {\r\n var that = this;\r\n var result = new _deferred.Deferred;\r\n var scrollingTimeout = Math.min(that.option(\"scrolling.timeout\") || 0, that._dataSource.changingDuration());\r\n if (scrollingTimeout < that.option(\"scrolling.renderingThreshold\")) {\r\n scrollingTimeout = that.option(\"scrolling.minTimeout\") || 0\r\n }\r\n clearTimeout(that._scrollTimeoutID);\r\n if (scrollingTimeout > 0) {\r\n that._scrollTimeoutID = setTimeout(function() {\r\n that._setViewportPositionCore(position);\r\n result.resolve()\r\n }, scrollingTimeout)\r\n } else {\r\n that._setViewportPositionCore(position);\r\n result.resolve()\r\n }\r\n return result.promise()\r\n },\r\n getViewportPosition: function() {\r\n return this._position || 0\r\n },\r\n getItemIndexByPosition: function() {\r\n var that = this;\r\n var position = that._position;\r\n var defaultItemSize = that.getItemSize();\r\n var offset = 0;\r\n var itemOffset = 0;\r\n var itemOffsetsWithSize = Object.keys(that._itemSizes).concat(-1);\r\n for (var i = 0; i < itemOffsetsWithSize.length && offset < position; i++) {\r\n var itemOffsetWithSize = parseInt(itemOffsetsWithSize[i]);\r\n var itemOffsetDiff = (position - offset) / defaultItemSize;\r\n if (itemOffsetWithSize < 0 || itemOffset + itemOffsetDiff < itemOffsetWithSize) {\r\n itemOffset += itemOffsetDiff;\r\n break\r\n } else {\r\n itemOffsetDiff = itemOffsetWithSize - itemOffset;\r\n offset += itemOffsetDiff * defaultItemSize;\r\n itemOffset += itemOffsetDiff\r\n }\r\n var itemSize = that._itemSizes[itemOffsetWithSize];\r\n offset += itemSize;\r\n itemOffset += offset < position ? 1 : (position - offset + itemSize) / itemSize\r\n }\r\n return Math.round(50 * itemOffset) / 50\r\n },\r\n _setViewportPositionCore: function(position) {\r\n this._position = position;\r\n var itemIndex = this.getItemIndexByPosition();\r\n var result = this.setViewportItemIndex(itemIndex);\r\n this.positionChanged.fire();\r\n return result\r\n },\r\n setContentSize: function(size) {\r\n var that = this;\r\n var sizes = Array.isArray(size) && size;\r\n var virtualItemsCount = that.virtualItemsCount();\r\n if (sizes) {\r\n size = sizes.reduce(function(a, b) {\r\n return a + b\r\n }, 0)\r\n }\r\n that._contentSize = size;\r\n if (virtualItemsCount) {\r\n if (sizes) {\r\n sizes.forEach(function(size, index) {\r\n that._itemSizes[virtualItemsCount.begin + index] = size\r\n })\r\n }\r\n var virtualContentSize = (virtualItemsCount.begin + virtualItemsCount.end + that.itemsCount()) * that._viewportItemSize;\r\n var contentHeightLimit = getContentHeightLimit(_browser.default);\r\n if (virtualContentSize > contentHeightLimit) {\r\n that._sizeRatio = contentHeightLimit / virtualContentSize\r\n } else {\r\n that._sizeRatio = 1\r\n }\r\n }\r\n },\r\n getItemSize: function() {\r\n return this._viewportItemSize * this._sizeRatio\r\n },\r\n getItemOffset: function(itemIndex, isEnd) {\r\n var that = this;\r\n var virtualItemsCount = that.virtualItemsCount();\r\n var itemCount = itemIndex;\r\n if (!virtualItemsCount) {\r\n return 0\r\n }\r\n var offset = 0;\r\n var totalItemsCount = that._dataSource.totalItemsCount();\r\n Object.keys(that._itemSizes).forEach(function(currentItemIndex) {\r\n if (!itemCount) {\r\n return\r\n }\r\n if (isEnd ? currentItemIndex >= totalItemsCount - itemIndex : currentItemIndex < itemIndex) {\r\n offset += that._itemSizes[currentItemIndex];\r\n itemCount--\r\n }\r\n });\r\n return Math.floor(offset + itemCount * that._viewportItemSize * that._sizeRatio)\r\n },\r\n getContentOffset: function(type) {\r\n var isEnd = \"end\" === type;\r\n var virtualItemsCount = this.virtualItemsCount();\r\n if (!virtualItemsCount) {\r\n return 0\r\n }\r\n return this.getItemOffset(isEnd ? virtualItemsCount.end : virtualItemsCount.begin, isEnd)\r\n },\r\n getVirtualContentSize: function() {\r\n var that = this;\r\n var virtualItemsCount = that.virtualItemsCount();\r\n return virtualItemsCount ? that.getContentOffset(\"begin\") + that.getContentOffset(\"end\") + that._contentSize : 0\r\n },\r\n getViewportItemIndex: function() {\r\n return this._viewportItemIndex\r\n },\r\n setViewportItemIndex: function(itemIndex) {\r\n var that = this;\r\n var pageSize = that._dataSource.pageSize();\r\n var pageCount = that._dataSource.pageCount();\r\n var virtualMode = isVirtualMode(that);\r\n var appendMode = isAppendMode(that);\r\n var totalItemsCount = that._dataSource.totalItemsCount();\r\n var newPageIndex;\r\n that._viewportItemIndex = itemIndex;\r\n if (pageSize && (virtualMode || appendMode) && totalItemsCount >= 0) {\r\n if (that._viewportSize && itemIndex + that._viewportSize >= totalItemsCount && !that._isVirtual) {\r\n if (that._dataSource.hasKnownLastPage()) {\r\n newPageIndex = pageCount - 1;\r\n var lastPageSize = totalItemsCount % pageSize;\r\n if (newPageIndex > 0 && lastPageSize > 0 && lastPageSize < that._viewportSize) {\r\n newPageIndex--\r\n }\r\n } else {\r\n newPageIndex = pageCount\r\n }\r\n } else {\r\n newPageIndex = Math.floor(itemIndex / pageSize);\r\n var maxPageIndex = pageCount - 1;\r\n newPageIndex = Math.max(newPageIndex, 0);\r\n newPageIndex = Math.min(newPageIndex, maxPageIndex)\r\n }\r\n that.pageIndex(newPageIndex);\r\n return that.load()\r\n }\r\n },\r\n viewportItemSize: function(size) {\r\n if (void 0 !== size) {\r\n this._viewportItemSize = size\r\n }\r\n return this._viewportItemSize\r\n },\r\n viewportSize: function(size) {\r\n if (void 0 !== size) {\r\n this._viewportSize = size\r\n }\r\n return this._viewportSize\r\n },\r\n pageIndex: function(_pageIndex) {\r\n if (isVirtualMode(this) || isAppendMode(this)) {\r\n if (void 0 !== _pageIndex) {\r\n this._pageIndex = _pageIndex\r\n }\r\n return this._pageIndex\r\n } else {\r\n return this._dataSource.pageIndex(_pageIndex)\r\n }\r\n },\r\n beginPageIndex: function beginPageIndex(defaultPageIndex) {\r\n var beginPageIndex = getBeginPageIndex(this);\r\n if (beginPageIndex < 0) {\r\n beginPageIndex = void 0 !== defaultPageIndex ? defaultPageIndex : this.pageIndex()\r\n }\r\n return beginPageIndex\r\n },\r\n endPageIndex: function endPageIndex() {\r\n var endPageIndex = getEndPageIndex(this);\r\n return endPageIndex > 0 ? endPageIndex : this._lastPageIndex\r\n },\r\n pageSize: function() {\r\n return this._dataSource.pageSize()\r\n },\r\n load: function() {\r\n var that = this;\r\n var dataSource = that._dataSource;\r\n var result;\r\n if (isVirtualMode(that) || isAppendMode(that)) {\r\n var pageIndexForLoad = getPageIndexForLoad(that);\r\n if (pageIndexForLoad >= 0) {\r\n var loadResult = loadCore(that, pageIndexForLoad);\r\n if (loadResult) {\r\n result = new _deferred.Deferred;\r\n loadResult.done(function() {\r\n var delayDeferred = that._delayDeferred;\r\n if (delayDeferred) {\r\n delayDeferred.done(result.resolve).fail(result.reject)\r\n } else {\r\n result.resolve()\r\n }\r\n }).fail(result.reject);\r\n dataSource.updateLoading()\r\n }\r\n }\r\n } else {\r\n result = dataSource.load()\r\n }\r\n if (!result && that._lastPageIndex !== that.pageIndex()) {\r\n that._dataSource.onChanged({\r\n changeType: \"pageIndex\"\r\n })\r\n }\r\n return result || (new _deferred.Deferred).resolve()\r\n },\r\n loadIfNeed: function() {\r\n var that = this;\r\n if ((isVirtualMode(that) || isAppendMode(that)) && !that._dataSource.isLoading() && (!that._isChangedFiring || that._isVirtual)) {\r\n var position = that.getViewportPosition();\r\n if (position > 0) {\r\n that._setViewportPositionCore(position)\r\n } else {\r\n that.load()\r\n }\r\n }\r\n },\r\n handleDataChanged: function(callBase, e) {\r\n var that = this;\r\n var dataSource = that._dataSource;\r\n var lastCacheLength = that._cache.length;\r\n var changeType;\r\n var removeInvisiblePages;\r\n if (e && e.changes) {\r\n fireChanged(that, callBase, e)\r\n } else {\r\n if (isVirtualMode(that) || isAppendMode(that)) {\r\n var beginPageIndex = getBeginPageIndex(that);\r\n if (beginPageIndex >= 0) {\r\n if (isVirtualMode(that) && beginPageIndex + that._cache.length !== dataSource.pageIndex() && beginPageIndex - 1 !== dataSource.pageIndex()) {\r\n lastCacheLength = 0;\r\n that._cache = []\r\n }\r\n if (isAppendMode(that)) {\r\n if (0 === dataSource.pageIndex()) {\r\n that._cache = []\r\n } else {\r\n if (dataSource.pageIndex() < getEndPageIndex(that)) {\r\n fireChanged(that, callBase, {\r\n changeType: \"append\",\r\n items: []\r\n });\r\n return\r\n }\r\n }\r\n }\r\n }\r\n var cacheItem = {\r\n pageIndex: dataSource.pageIndex(),\r\n itemsLength: dataSource.items(true).length,\r\n itemsCount: that.itemsCount(true)\r\n };\r\n if (!that.option(\"legacyRendering\") && that.option(\"scrolling.removeInvisiblePages\") && isVirtualMode(that)) {\r\n removeInvisiblePages = that._cache.length > Math.max(getPreloadPageCount(this) + (that.option(\"scrolling.preloadEnabled\") ? 1 : 0), 2)\r\n } else {\r\n processDelayChanged(that, callBase, {\r\n isDelayed: true\r\n })\r\n }\r\n var removeCacheItem;\r\n if (beginPageIndex === dataSource.pageIndex() + 1) {\r\n if (removeInvisiblePages) {\r\n removeCacheItem = that._cache.pop()\r\n }\r\n changeType = \"prepend\";\r\n that._cache.unshift(cacheItem)\r\n } else {\r\n if (removeInvisiblePages) {\r\n removeCacheItem = that._cache.shift()\r\n }\r\n changeType = \"append\";\r\n that._cache.push(cacheItem)\r\n }\r\n var isDelayChanged = isVirtualMode(that) && 0 === lastCacheLength && needTwoPagesLoading(that);\r\n processChanged(that, callBase, that._cache.length > 1 ? changeType : void 0, isDelayChanged, removeCacheItem);\r\n that._delayDeferred = that.load().done(function() {\r\n if (processDelayChanged(that, callBase)) {\r\n that.load()\r\n }\r\n })\r\n } else {\r\n processChanged(that, callBase, e)\r\n }\r\n }\r\n },\r\n itemsCount: function itemsCount(isBase) {\r\n var itemsCount = 0;\r\n if (!isBase && isVirtualMode(this)) {\r\n (0, _iterator.each)(this._cache, function() {\r\n itemsCount += this.itemsCount\r\n })\r\n } else {\r\n itemsCount = this._dataSource.itemsCount()\r\n }\r\n return itemsCount\r\n },\r\n reset: function(isRefresh) {\r\n this._loadingPageIndexes = {};\r\n this._cache = [];\r\n if (!isRefresh) {\r\n this._itemSizes = {}\r\n }\r\n },\r\n subscribeToWindowScrollEvents: function($element) {\r\n var that = this;\r\n that._windowScroll = that._windowScroll || subscribeToExternalScrollers($element, function(scrollTop) {\r\n if (that.viewportItemSize()) {\r\n that.setViewportPosition(scrollTop)\r\n }\r\n })\r\n },\r\n dispose: function() {\r\n clearTimeout(this._scrollTimeoutID);\r\n this._windowScroll && this._windowScroll.dispose();\r\n this._windowScroll = null\r\n },\r\n scrollTo: function(pos) {\r\n this._windowScroll && this._windowScroll.scrollTo(pos)\r\n }\r\n }\r\n}());\r\nexports.VirtualScrollController = VirtualScrollController;\r\n","/**\r\n * DevExtreme (ui/grid_core/ui.grid_core.search.js)\r\n * Version: 20.2.7\r\n * Build date: Thu Apr 22 2021\r\n *\r\n * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED\r\n * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/\r\n */\r\n\"use strict\";\r\nexports.default = void 0;\r\nvar _renderer = _interopRequireDefault(require(\"../../core/renderer\"));\r\nvar _dom_adapter = _interopRequireDefault(require(\"../../core/dom_adapter\"));\r\nvar _type = require(\"../../core/utils/type\");\r\nvar _data = require(\"../../core/utils/data\");\r\nvar _iterator = require(\"../../core/utils/iterator\");\r\nvar _uiGrid_core = _interopRequireDefault(require(\"./ui.grid_core.utils\"));\r\nvar _message = _interopRequireDefault(require(\"../../localization/message\"));\r\nvar _query = _interopRequireDefault(require(\"../../data/query\"));\r\n\r\nfunction _interopRequireDefault(obj) {\r\n return obj && obj.__esModule ? obj : {\r\n \"default\": obj\r\n }\r\n}\r\nvar SEARCH_PANEL_CLASS = \"search-panel\";\r\nvar SEARCH_TEXT_CLASS = \"search-text\";\r\nvar HEADER_PANEL_CLASS = \"header-panel\";\r\nvar FILTERING_TIMEOUT = 700;\r\n\r\nfunction allowSearch(column) {\r\n return (0, _type.isDefined)(column.allowSearch) ? column.allowSearch : column.allowFiltering\r\n}\r\n\r\nfunction parseValue(column, text) {\r\n var lookup = column.lookup;\r\n if (!column.parseValue) {\r\n return text\r\n }\r\n if (lookup) {\r\n return column.parseValue.call(lookup, text)\r\n }\r\n return column.parseValue(text)\r\n}\r\nvar _default = {\r\n defaultOptions: function() {\r\n return {\r\n searchPanel: {\r\n visible: false,\r\n width: 160,\r\n placeholder: _message.default.format(\"dxDataGrid-searchPanelPlaceholder\"),\r\n highlightSearchText: true,\r\n highlightCaseSensitive: false,\r\n text: \"\",\r\n searchVisibleColumnsOnly: false\r\n }\r\n }\r\n },\r\n extenders: {\r\n controllers: {\r\n data: function() {\r\n var calculateSearchFilter = function(that, text) {\r\n var i;\r\n var column;\r\n var columns = that._columnsController.getColumns();\r\n var searchVisibleColumnsOnly = that.option(\"searchPanel.searchVisibleColumnsOnly\");\r\n var lookup;\r\n var filters = [];\r\n if (!text) {\r\n return null\r\n }\r\n\r\n function onQueryDone(items) {\r\n var valueGetter = (0, _data.compileGetter)(lookup.valueExpr);\r\n for (var _i = 0; _i < items.length; _i++) {\r\n var value = valueGetter(items[_i]);\r\n filters.push(column.createFilterExpression(value, null, \"search\"))\r\n }\r\n }\r\n for (i = 0; i < columns.length; i++) {\r\n column = columns[i];\r\n if (searchVisibleColumnsOnly && !column.visible) {\r\n continue\r\n }\r\n if (allowSearch(column) && column.calculateFilterExpression) {\r\n lookup = column.lookup;\r\n var filterValue = parseValue(column, text);\r\n if (lookup && lookup.items) {\r\n (0, _query.default)(lookup.items).filter(column.createFilterExpression.call({\r\n dataField: lookup.displayExpr,\r\n dataType: lookup.dataType,\r\n calculateFilterExpression: column.calculateFilterExpression\r\n }, filterValue, null, \"search\")).enumerate().done(onQueryDone)\r\n } else {\r\n if (void 0 !== filterValue) {\r\n filters.push(column.createFilterExpression(filterValue, null, \"search\"))\r\n }\r\n }\r\n }\r\n }\r\n return _uiGrid_core.default.combineFilters(filters, \"or\")\r\n };\r\n return {\r\n publicMethods: function() {\r\n return this.callBase().concat([\"searchByText\"])\r\n },\r\n _calculateAdditionalFilter: function() {\r\n var that = this;\r\n var filter = that.callBase();\r\n var searchFilter = calculateSearchFilter(that, that.option(\"searchPanel.text\"));\r\n return _uiGrid_core.default.combineFilters([filter, searchFilter])\r\n },\r\n searchByText: function(text) {\r\n this.option(\"searchPanel.text\", text)\r\n },\r\n optionChanged: function(args) {\r\n var that = this;\r\n switch (args.fullName) {\r\n case \"searchPanel.text\":\r\n case \"searchPanel\":\r\n that._applyFilter();\r\n args.handled = true;\r\n break;\r\n default:\r\n that.callBase(args)\r\n }\r\n }\r\n }\r\n }()\r\n },\r\n views: {\r\n headerPanel: function() {\r\n var getSearchPanelOptions = function(that) {\r\n return that.option(\"searchPanel\")\r\n };\r\n return {\r\n _getToolbarItems: function() {\r\n var items = this.callBase();\r\n return this._prepareSearchItem(items)\r\n },\r\n _prepareSearchItem: function(items) {\r\n var that = this;\r\n var dataController = that.getController(\"data\");\r\n var searchPanelOptions = getSearchPanelOptions(that);\r\n if (searchPanelOptions && searchPanelOptions.visible) {\r\n var toolbarItem = {\r\n template: function(data, index, container) {\r\n var $search = (0, _renderer.default)(\"
\").addClass(that.addWidgetPrefix(SEARCH_PANEL_CLASS)).appendTo(container);\r\n that.getController(\"editorFactory\").createEditor($search, {\r\n width: searchPanelOptions.width,\r\n placeholder: searchPanelOptions.placeholder,\r\n parentType: \"searchPanel\",\r\n value: that.option(\"searchPanel.text\"),\r\n updateValueTimeout: FILTERING_TIMEOUT,\r\n setValue: function(value) {\r\n dataController.searchByText(value)\r\n },\r\n editorOptions: {\r\n inputAttr: {\r\n \"aria-label\": _message.default.format(\"\".concat(that.component.NAME, \"-ariaSearchInGrid\"))\r\n }\r\n }\r\n });\r\n that.resize()\r\n },\r\n name: \"searchPanel\",\r\n location: \"after\",\r\n locateInMenu: \"never\",\r\n sortIndex: 40\r\n };\r\n items.push(toolbarItem)\r\n }\r\n return items\r\n },\r\n getSearchTextEditor: function() {\r\n var that = this;\r\n var $element = that.element();\r\n var $searchPanel = $element.find(\".\" + that.addWidgetPrefix(SEARCH_PANEL_CLASS)).filter(function() {\r\n return (0, _renderer.default)(this).closest(\".\" + that.addWidgetPrefix(HEADER_PANEL_CLASS)).is($element)\r\n });\r\n if ($searchPanel.length) {\r\n return $searchPanel.dxTextBox(\"instance\")\r\n }\r\n return null\r\n },\r\n isVisible: function() {\r\n var searchPanelOptions = getSearchPanelOptions(this);\r\n return this.callBase() || searchPanelOptions && searchPanelOptions.visible\r\n },\r\n optionChanged: function(args) {\r\n if (\"searchPanel\" === args.name) {\r\n if (\"searchPanel.text\" === args.fullName) {\r\n var editor = this.getSearchTextEditor();\r\n if (editor) {\r\n editor.option(\"value\", args.value)\r\n }\r\n } else {\r\n this._invalidate()\r\n }\r\n args.handled = true\r\n } else {\r\n this.callBase(args)\r\n }\r\n }\r\n }\r\n }(),\r\n rowsView: {\r\n init: function() {\r\n this.callBase.apply(this, arguments);\r\n this._searchParams = []\r\n },\r\n _getFormattedSearchText: function(column, searchText) {\r\n var value = parseValue(column, searchText);\r\n var formatOptions = _uiGrid_core.default.getFormatOptionsByColumn(column, \"search\");\r\n return _uiGrid_core.default.formatValue(value, formatOptions)\r\n },\r\n _getStringNormalizer: function() {\r\n var isCaseSensitive = this.option(\"searchPanel.highlightCaseSensitive\");\r\n return function(str) {\r\n return isCaseSensitive ? str : str.toLowerCase()\r\n }\r\n },\r\n _findHighlightingTextNodes: function(column, cellElement, searchText) {\r\n var _$items;\r\n var that = this;\r\n var $parent = cellElement.parent();\r\n var $items;\r\n var stringNormalizer = this._getStringNormalizer();\r\n var normalizedSearchText = stringNormalizer(searchText);\r\n if (!$parent.length) {\r\n $parent = (0, _renderer.default)(\"
\").append(cellElement)\r\n } else {\r\n if (column) {\r\n if (column.groupIndex >= 0 && !column.showWhenGrouped) {\r\n $items = cellElement\r\n } else {\r\n var columnIndex = that._columnsController.getVisibleIndex(column.index);\r\n $items = $parent.children(\"td\").eq(columnIndex).find(\"*\")\r\n }\r\n }\r\n }\r\n $items = null !== (_$items = $items) && void 0 !== _$items && _$items.length ? $items : $parent.find(\"*\");\r\n $items = $items.filter(function(_, element) {\r\n var $contents = (0, _renderer.default)(element).contents();\r\n for (var i = 0; i < $contents.length; i++) {\r\n var node = $contents.get(i);\r\n if (3 === node.nodeType) {\r\n return stringNormalizer(node.textContent || node.nodeValue).indexOf(normalizedSearchText) > -1\r\n }\r\n return false\r\n }\r\n });\r\n return $items\r\n },\r\n _highlightSearchTextCore: function($textNode, searchText) {\r\n var that = this;\r\n var $searchTextSpan = (0, _renderer.default)(\"\").addClass(that.addWidgetPrefix(SEARCH_TEXT_CLASS));\r\n var text = $textNode.text();\r\n var firstContentElement = $textNode[0];\r\n var stringNormalizer = this._getStringNormalizer();\r\n var index = stringNormalizer(text).indexOf(stringNormalizer(searchText));\r\n if (index >= 0) {\r\n if (firstContentElement.textContent) {\r\n firstContentElement.textContent = text.substr(0, index)\r\n } else {\r\n firstContentElement.nodeValue = text.substr(0, index)\r\n }\r\n $textNode.after($searchTextSpan.text(text.substr(index, searchText.length)));\r\n $textNode = (0, _renderer.default)(_dom_adapter.default.createTextNode(text.substr(index + searchText.length))).insertAfter($searchTextSpan);\r\n return that._highlightSearchTextCore($textNode, searchText)\r\n }\r\n },\r\n _highlightSearchText: function(cellElement, isEquals, column) {\r\n var that = this;\r\n var stringNormalizer = this._getStringNormalizer();\r\n var searchText = that.option(\"searchPanel.text\");\r\n if (isEquals && column) {\r\n searchText = searchText && that._getFormattedSearchText(column, searchText)\r\n }\r\n if (searchText && that.option(\"searchPanel.highlightSearchText\")) {\r\n var textNodes = that._findHighlightingTextNodes(column, cellElement, searchText);\r\n (0, _iterator.each)(textNodes, function(_, element) {\r\n (0, _iterator.each)((0, _renderer.default)(element).contents(), function(_, textNode) {\r\n if (isEquals) {\r\n if (stringNormalizer((0, _renderer.default)(textNode).text()) === stringNormalizer(searchText)) {\r\n (0, _renderer.default)(this).replaceWith((0, _renderer.default)(\"\").addClass(that.addWidgetPrefix(SEARCH_TEXT_CLASS)).text((0, _renderer.default)(textNode).text()))\r\n }\r\n } else {\r\n that._highlightSearchTextCore((0, _renderer.default)(textNode), searchText)\r\n }\r\n })\r\n })\r\n }\r\n },\r\n _renderCore: function() {\r\n this.callBase.apply(this, arguments);\r\n if (this.option(\"rowTemplate\")) {\r\n if (this.option(\"templatesRenderAsynchronously\")) {\r\n clearTimeout(this._highlightTimer);\r\n this._highlightTimer = setTimeout(function() {\r\n this._highlightSearchText(this.getTableElement())\r\n }.bind(this))\r\n } else {\r\n this._highlightSearchText(this.getTableElement())\r\n }\r\n }\r\n },\r\n _updateCell: function($cell, parameters) {\r\n var column = parameters.column;\r\n var dataType = column.lookup && column.lookup.dataType || column.dataType;\r\n var isEquals = \"string\" !== dataType;\r\n if (allowSearch(column) && !parameters.isOnForm) {\r\n if (this.option(\"templatesRenderAsynchronously\")) {\r\n if (!this._searchParams.length) {\r\n clearTimeout(this._highlightTimer);\r\n this._highlightTimer = setTimeout(function() {\r\n this._searchParams.forEach(function(params) {\r\n this._highlightSearchText.apply(this, params)\r\n }.bind(this));\r\n this._searchParams = []\r\n }.bind(this))\r\n }\r\n this._searchParams.push([$cell, isEquals, column])\r\n } else {\r\n this._highlightSearchText($cell, isEquals, column)\r\n }\r\n }\r\n this.callBase($cell, parameters)\r\n },\r\n dispose: function() {\r\n clearTimeout(this._highlightTimer);\r\n this.callBase()\r\n }\r\n }\r\n }\r\n }\r\n};\r\nexports.default = _default;\r\nmodule.exports = exports.default;\r\n","/**\r\n * DevExtreme (ui/grid_core/ui.grid_core.virtual_columns.js)\r\n * Version: 20.2.7\r\n * Build date: Thu Apr 22 2021\r\n *\r\n * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED\r\n * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/\r\n */\r\n\"use strict\";\r\nexports.default = void 0;\r\nvar _window = require(\"../../core/utils/window\");\r\nvar _uiGrid_core = require(\"./ui.grid_core.virtual_columns_core\");\r\nvar DEFAULT_COLUMN_WIDTH = 50;\r\nvar VirtualScrollingRowsViewExtender = {\r\n _resizeCore: function() {\r\n this.callBase.apply(this, arguments);\r\n this._columnsController.resize()\r\n },\r\n _handleScroll: function(e) {\r\n var that = this;\r\n var scrollable = this.getScrollable();\r\n var left = e.scrollOffset.left;\r\n that.callBase.apply(that, arguments);\r\n if (that.option(\"rtlEnabled\") && scrollable) {\r\n left = scrollable.$content().width() - scrollable.$element().width() - left\r\n }\r\n that._columnsController.setScrollPosition(left)\r\n }\r\n};\r\nvar HeaderFooterViewExtender = {\r\n _renderCore: function() {\r\n var that = this;\r\n var scrollLeft = that._scrollLeft;\r\n that.callBase.apply(that, arguments);\r\n if (that._columnsController.isVirtualMode() && scrollLeft >= 0) {\r\n that._scrollLeft = 0;\r\n that.scrollTo({\r\n left: scrollLeft\r\n })\r\n }\r\n }\r\n};\r\nvar ColumnsControllerExtender = function() {\r\n var getWidths = function(columns) {\r\n return columns.map(function(column) {\r\n return column.visibleWidth || parseFloat(column.width) || DEFAULT_COLUMN_WIDTH\r\n })\r\n };\r\n var members = {\r\n init: function() {\r\n var that = this;\r\n that.callBase();\r\n that._beginPageIndex = 0;\r\n that._endPageIndex = 0;\r\n that._position = 0;\r\n that._virtualVisibleColumns = {}\r\n },\r\n resetColumnsCache: function() {\r\n this.callBase();\r\n this._virtualVisibleColumns = {}\r\n },\r\n getBeginPageIndex: function(position) {\r\n var visibleColumns = this.getVisibleColumns(void 0, true);\r\n var widths = getWidths(visibleColumns);\r\n var currentPosition = 0;\r\n for (var index = 0; index < widths.length; index++) {\r\n if (currentPosition >= position) {\r\n return Math.floor(index / this.getColumnPageSize())\r\n }\r\n currentPosition += widths[index]\r\n }\r\n return 0\r\n },\r\n getTotalWidth: function() {\r\n var width = this.option(\"width\");\r\n if (\"number\" === typeof width) {\r\n return width\r\n }\r\n return this.getController(\"resizing\")._lastWidth || this.component.$element().outerWidth()\r\n },\r\n getEndPageIndex: function(position) {\r\n var visibleColumns = this.getVisibleColumns(void 0, true);\r\n var widths = getWidths(visibleColumns);\r\n var currentPosition = 0;\r\n position += this.getTotalWidth();\r\n for (var index = 0; index < widths.length; index++) {\r\n if (currentPosition >= position) {\r\n return Math.ceil(index / this.getColumnPageSize())\r\n }\r\n currentPosition += widths[index]\r\n }\r\n return Math.ceil(widths.length / this.getColumnPageSize())\r\n },\r\n getColumnPageSize: function() {\r\n return this.option(\"scrolling.columnPageSize\")\r\n },\r\n _fireColumnsChanged: function() {\r\n var date = new Date;\r\n this.columnsChanged.fire({\r\n optionNames: {\r\n all: true,\r\n length: 1\r\n },\r\n changeTypes: {\r\n columns: true,\r\n length: 1\r\n }\r\n });\r\n this._renderTime = new Date - date\r\n },\r\n setScrollPosition: function(position) {\r\n var that = this;\r\n var renderingThreshold = that.option(\"scrolling.columnRenderingThreshold\");\r\n if (that._renderTime > renderingThreshold) {\r\n clearTimeout(that._changedTimeout);\r\n that._changedTimeout = setTimeout(function() {\r\n that._setScrollPositionCore(position)\r\n }, that.option(\"scrolling.timeout\"))\r\n } else {\r\n that._setScrollPositionCore(position)\r\n }\r\n },\r\n isVirtualMode: function() {\r\n return (0, _window.hasWindow)() && \"virtual\" === this.option(\"scrolling.columnRenderingMode\")\r\n },\r\n resize: function() {\r\n this._setScrollPositionCore(this._position)\r\n },\r\n _setScrollPositionCore: function(position) {\r\n var that = this;\r\n if (that.isVirtualMode()) {\r\n var beginPageIndex = that.getBeginPageIndex(position);\r\n var endPageIndex = that.getEndPageIndex(position);\r\n var needColumnsChanged = position < that._position ? that._beginPageIndex > beginPageIndex : that._endPageIndex < endPageIndex;\r\n that._position = position;\r\n if (needColumnsChanged) {\r\n that._beginPageIndex = beginPageIndex;\r\n that._endPageIndex = endPageIndex;\r\n that._fireColumnsChanged()\r\n }\r\n }\r\n },\r\n getFixedColumns: function(rowIndex, isBase) {\r\n var fixedColumns = this.callBase(rowIndex);\r\n if (this.isVirtualMode() && !isBase && fixedColumns.length) {\r\n var transparentColumnIndex = fixedColumns.map(function(c) {\r\n return c.command\r\n }).indexOf(\"transparent\");\r\n fixedColumns[transparentColumnIndex].colspan = this.getVisibleColumns().length - this.callBase().length + 1;\r\n return fixedColumns\r\n }\r\n return fixedColumns\r\n },\r\n getVisibleColumns: function(rowIndex, isBase) {\r\n if (isBase || !this.isVirtualMode()) {\r\n return this.callBase(rowIndex)\r\n }\r\n if (!this._beginPageIndex && !this._endPageIndex) {\r\n this._beginPageIndex = this.getBeginPageIndex(this._position);\r\n this._endPageIndex = this.getEndPageIndex(this._position)\r\n }\r\n var beginPageIndex = this._beginPageIndex;\r\n var endPageIndex = this._endPageIndex;\r\n var visibleColumnsHash = rowIndex + \"-\" + beginPageIndex + \"-\" + endPageIndex;\r\n if (this._virtualVisibleColumns[visibleColumnsHash]) {\r\n return this._virtualVisibleColumns[visibleColumnsHash]\r\n }\r\n var visibleColumns = this.callBase();\r\n var rowCount = this.getRowCount();\r\n var pageSize = this.getColumnPageSize();\r\n var startIndex = beginPageIndex * pageSize;\r\n var endIndex = endPageIndex * pageSize;\r\n var fixedColumns = this.getFixedColumns(void 0, true);\r\n var transparentColumnIndex = fixedColumns.map(function(c) {\r\n return c.command\r\n }).indexOf(\"transparent\");\r\n var beginFixedColumnCount = fixedColumns.length ? transparentColumnIndex : 0;\r\n var beginFixedColumns = visibleColumns.slice(0, beginFixedColumnCount);\r\n var beginColumns = visibleColumns.slice(beginFixedColumnCount, startIndex);\r\n var beginWidth = getWidths(beginColumns).reduce(function(a, b) {\r\n return a + b\r\n }, 0);\r\n if (!beginWidth) {\r\n startIndex = 0\r\n }\r\n var endFixedColumnCount = fixedColumns.length ? fixedColumns.length - transparentColumnIndex - 1 : 0;\r\n var endFixedColumns = visibleColumns.slice(visibleColumns.length - endFixedColumnCount);\r\n var endColumns = visibleColumns.slice(endIndex, visibleColumns.length - endFixedColumnCount);\r\n var endWidth = getWidths(endColumns).reduce(function(a, b) {\r\n return a + b\r\n }, 0);\r\n if (!endWidth) {\r\n endIndex = visibleColumns.length\r\n }\r\n if (rowCount > 1 && \"number\" === typeof rowIndex) {\r\n var columnsInfo = [];\r\n for (var i = 0; i < rowCount; i++) {\r\n columnsInfo.push(this.callBase(i))\r\n }\r\n beginFixedColumns = (0, _uiGrid_core.createColumnsInfo)(columnsInfo, 0, beginFixedColumns.length)[rowIndex] || [];\r\n endFixedColumns = (0, _uiGrid_core.createColumnsInfo)(columnsInfo, visibleColumns.length - endFixedColumns.length, visibleColumns.length)[rowIndex] || [];\r\n visibleColumns = (0, _uiGrid_core.createColumnsInfo)(columnsInfo, startIndex, endIndex)[rowIndex] || []\r\n } else {\r\n visibleColumns = visibleColumns.slice(startIndex, endIndex)\r\n }\r\n if (beginWidth) {\r\n visibleColumns.unshift({\r\n command: \"virtual\",\r\n width: beginWidth\r\n });\r\n visibleColumns = beginFixedColumns.concat(visibleColumns)\r\n }\r\n if (endWidth) {\r\n visibleColumns.push({\r\n command: \"virtual\",\r\n width: endWidth\r\n });\r\n visibleColumns = visibleColumns.concat(endFixedColumns)\r\n }\r\n this._virtualVisibleColumns[visibleColumnsHash] = visibleColumns;\r\n return visibleColumns\r\n },\r\n getColumnIndexOffset: function() {\r\n var offset = 0;\r\n if (this._beginPageIndex > 0) {\r\n var fixedColumns = this.getFixedColumns();\r\n var transparentColumnIndex = fixedColumns.map(function(c) {\r\n return c.command\r\n }).indexOf(\"transparent\");\r\n var leftFixedColumnCount = transparentColumnIndex >= 0 ? transparentColumnIndex : 0;\r\n offset = this._beginPageIndex * this.getColumnPageSize() - leftFixedColumnCount - 1\r\n }\r\n return offset > 0 ? offset : 0\r\n },\r\n dispose: function() {\r\n clearTimeout(this._changedTimeout);\r\n this.callBase.apply(this, arguments)\r\n }\r\n };\r\n return members\r\n}();\r\nvar _default = {\r\n defaultOptions: function() {\r\n return {\r\n scrolling: {\r\n columnRenderingMode: \"standard\",\r\n columnPageSize: 5,\r\n columnRenderingThreshold: 300\r\n }\r\n }\r\n },\r\n extenders: {\r\n controllers: {\r\n columns: ColumnsControllerExtender\r\n },\r\n views: {\r\n columnHeadersView: HeaderFooterViewExtender,\r\n footerView: HeaderFooterViewExtender,\r\n rowsView: VirtualScrollingRowsViewExtender\r\n }\r\n }\r\n};\r\nexports.default = _default;\r\nmodule.exports = exports.default;\r\n","/**\r\n * DevExtreme (ui/grid_core/ui.grid_core.virtual_columns_core.js)\r\n * Version: 20.2.7\r\n * Build date: Thu Apr 22 2021\r\n *\r\n * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED\r\n * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/\r\n */\r\n\"use strict\";\r\nexports.foreachColumnInfo = foreachColumnInfo;\r\nexports.createColumnsInfo = createColumnsInfo;\r\nvar _extend = require(\"../../core/utils/extend\");\r\n\r\nfunction foreachColumnInfo(info, callback, rowIndex, offsets, columnCount, lastProcessedIndexes) {\r\n rowIndex = rowIndex || 0;\r\n offsets = offsets || [];\r\n lastProcessedIndexes = lastProcessedIndexes || [];\r\n offsets[rowIndex] = offsets[rowIndex] || 0;\r\n var row = info[rowIndex];\r\n var startIndex = lastProcessedIndexes[rowIndex] + 1 || 0;\r\n var processedColumnCount = 0;\r\n var colIndex;\r\n if (!row) {\r\n return\r\n }\r\n for (colIndex = startIndex; colIndex < row.length; colIndex++) {\r\n var cell = row[colIndex];\r\n var visibleIndex = colIndex + offsets[rowIndex];\r\n var colspan = cell.colspan || 1;\r\n foreachColumnInfo(info, callback, rowIndex + (cell.rowspan || 1), offsets, colspan, lastProcessedIndexes);\r\n offsets[rowIndex] += colspan - 1;\r\n processedColumnCount += colspan;\r\n if (cell.rowspan) {\r\n for (var i = rowIndex + 1; i < rowIndex + cell.rowspan; i++) {\r\n offsets[i] = offsets[i] || 0;\r\n offsets[i] += cell.colspan || 1\r\n }\r\n }\r\n if (false === callback(cell, visibleIndex, rowIndex, colIndex)) {\r\n break\r\n }\r\n if (void 0 !== columnCount && processedColumnCount >= columnCount) {\r\n break\r\n }\r\n }\r\n lastProcessedIndexes[rowIndex] = colIndex\r\n}\r\n\r\nfunction createColumnsInfo(info, startIndex, endIndex) {\r\n var newInfo = [];\r\n foreachColumnInfo(info, function(columnInfo, visibleIndex, rowIndex) {\r\n var cell = columnInfo;\r\n var colspan;\r\n var cellColspan = cell.colspan || 1;\r\n var isVisible = visibleIndex + cellColspan - 1 >= startIndex && visibleIndex < endIndex;\r\n newInfo[rowIndex] = newInfo[rowIndex] || [];\r\n if (isVisible) {\r\n if (visibleIndex < startIndex) {\r\n colspan = cellColspan - (startIndex - visibleIndex);\r\n visibleIndex = startIndex\r\n } else {\r\n colspan = cellColspan\r\n }\r\n if (visibleIndex + colspan > endIndex) {\r\n colspan = endIndex - visibleIndex\r\n }\r\n if (colspan !== cellColspan) {\r\n cell = (0, _extend.extend)({}, cell, {\r\n colspan: colspan\r\n })\r\n }\r\n newInfo[rowIndex].push(cell)\r\n } else {\r\n if (visibleIndex > endIndex) {\r\n return false\r\n }\r\n }\r\n });\r\n for (var i = 0; i < newInfo.length; i++) {\r\n newInfo[i] = newInfo[i] || []\r\n }\r\n return newInfo\r\n}\r\n","/**\r\n * DevExtreme (ui/grid_core/ui.grid_core.row_dragging.js)\r\n * Version: 20.2.7\r\n * Build date: Thu Apr 22 2021\r\n *\r\n * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED\r\n * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/\r\n */\r\n\"use strict\";\r\nexports.default = void 0;\r\nvar _renderer = _interopRequireDefault(require(\"../../core/renderer\"));\r\nvar _extend = require(\"../../core/utils/extend\");\r\nvar _sortable = _interopRequireDefault(require(\"../sortable\"));\r\nvar _uiGrid_core = _interopRequireDefault(require(\"./ui.grid_core.utils\"));\r\nvar _browser = _interopRequireDefault(require(\"../../core/utils/browser\"));\r\n\r\nfunction _interopRequireDefault(obj) {\r\n return obj && obj.__esModule ? obj : {\r\n \"default\": obj\r\n }\r\n}\r\nvar COMMAND_HANDLE_CLASS = \"dx-command-drag\";\r\nvar CELL_FOCUS_DISABLED_CLASS = \"dx-cell-focus-disabled\";\r\nvar HANDLE_ICON_CLASS = \"drag-icon\";\r\nvar ROWS_VIEW = \"rowsview\";\r\nvar SORTABLE_WITHOUT_HANDLE_CLASS = \"dx-sortable-without-handle\";\r\nvar RowDraggingExtender = {\r\n init: function() {\r\n this.callBase.apply(this, arguments);\r\n this._updateHandleColumn()\r\n },\r\n _allowReordering: function() {\r\n var rowDragging = this.option(\"rowDragging\");\r\n return !!(rowDragging && (rowDragging.allowReordering || rowDragging.allowDropInsideItem || rowDragging.group))\r\n },\r\n _updateHandleColumn: function() {\r\n var rowDragging = this.option(\"rowDragging\");\r\n var allowReordering = this._allowReordering();\r\n var columnsController = this._columnsController;\r\n var isHandleColumnVisible = allowReordering && rowDragging.showDragIcons;\r\n columnsController && columnsController.addCommandColumn({\r\n type: \"drag\",\r\n command: \"drag\",\r\n visibleIndex: -2,\r\n alignment: \"center\",\r\n cssClass: COMMAND_HANDLE_CLASS,\r\n width: \"auto\",\r\n cellTemplate: this._getHandleTemplate(),\r\n visible: isHandleColumnVisible\r\n });\r\n columnsController.columnOption(\"type:drag\", \"visible\", isHandleColumnVisible)\r\n },\r\n _renderContent: function() {\r\n var _this = this;\r\n var rowDragging = this.option(\"rowDragging\");\r\n var allowReordering = this._allowReordering();\r\n var $content = this.callBase.apply(this, arguments);\r\n var isFixedTableRendering = this._isFixedTableRendering;\r\n var sortableName = \"_sortable\";\r\n var sortableFixedName = \"_sortableFixed\";\r\n var currentSortableName = isFixedTableRendering ? sortableFixedName : sortableName;\r\n var anotherSortableName = isFixedTableRendering ? sortableName : sortableFixedName;\r\n var togglePointerEventsStyle = function(toggle) {\r\n var _this$sortableFixedNa;\r\n null === (_this$sortableFixedNa = _this[sortableFixedName]) || void 0 === _this$sortableFixedNa ? void 0 : _this$sortableFixedNa.$element().css(\"pointerEvents\", toggle ? \"auto\" : \"\")\r\n };\r\n if ((allowReordering || this[currentSortableName]) && $content.length) {\r\n this[currentSortableName] = this._createComponent($content, _sortable.default, (0, _extend.extend)({\r\n component: this.component,\r\n contentTemplate: null,\r\n filter: \"> table > tbody > .dx-row:not(.dx-freespace-row):not(.dx-virtual-row)\",\r\n dragTemplate: this._getDraggableRowTemplate(),\r\n handle: rowDragging.showDragIcons && \".\".concat(COMMAND_HANDLE_CLASS),\r\n dropFeedbackMode: \"indicate\"\r\n }, rowDragging, {\r\n onDragStart: function(e) {\r\n var _rowDragging$onDragSt;\r\n var row = e.component.getVisibleRows()[e.fromIndex];\r\n e.itemData = row && row.data;\r\n var isDataRow = row && \"data\" === row.rowType;\r\n e.cancel = !allowReordering || !isDataRow;\r\n null === (_rowDragging$onDragSt = rowDragging.onDragStart) || void 0 === _rowDragging$onDragSt ? void 0 : _rowDragging$onDragSt.call(rowDragging, e)\r\n },\r\n onDragEnter: function() {\r\n togglePointerEventsStyle(true)\r\n },\r\n onDragLeave: function() {\r\n togglePointerEventsStyle(false)\r\n },\r\n onDragEnd: function(e) {\r\n var _rowDragging$onDragEn;\r\n togglePointerEventsStyle(false);\r\n null === (_rowDragging$onDragEn = rowDragging.onDragEnd) || void 0 === _rowDragging$onDragEn ? void 0 : _rowDragging$onDragEn.call(rowDragging, e)\r\n },\r\n dropFeedbackMode: _browser.default.msie ? \"indicate\" : rowDragging.dropFeedbackMode,\r\n onOptionChanged: function(e) {\r\n var hasFixedSortable = _this[sortableFixedName];\r\n if (hasFixedSortable) {\r\n if (\"fromIndex\" === e.name || \"toIndex\" === e.name) {\r\n _this[anotherSortableName].option(e.name, e.value)\r\n }\r\n }\r\n }\r\n }));\r\n $content.toggleClass(SORTABLE_WITHOUT_HANDLE_CLASS, allowReordering && !rowDragging.showDragIcons)\r\n }\r\n return $content\r\n },\r\n _resizeCore: function() {\r\n this.callBase.apply(this, arguments);\r\n var offset = this._dataController.getRowIndexOffset();\r\n [this._sortable, this._sortableFixed].forEach(function(sortable) {\r\n null === sortable || void 0 === sortable ? void 0 : sortable.option(\"offset\", offset);\r\n null === sortable || void 0 === sortable ? void 0 : sortable.update()\r\n })\r\n },\r\n _getDraggableGridOptions: function(options) {\r\n var gridOptions = this.option();\r\n var columns = this.getColumns();\r\n var $rowElement = (0, _renderer.default)(this.getRowElement(options.rowIndex));\r\n return {\r\n dataSource: [{\r\n id: 1,\r\n parentId: 0\r\n }],\r\n showBorders: true,\r\n showColumnHeaders: false,\r\n scrolling: {\r\n useNative: false,\r\n showScrollbar: false\r\n },\r\n pager: {\r\n visible: false\r\n },\r\n loadingTimeout: void 0,\r\n columnFixing: gridOptions.columnFixing,\r\n columnAutoWidth: gridOptions.columnAutoWidth,\r\n showColumnLines: gridOptions.showColumnLines,\r\n columns: columns.map(function(column) {\r\n return {\r\n width: column.width || column.visibleWidth,\r\n fixed: column.fixed,\r\n fixedPosition: column.fixedPosition\r\n }\r\n }),\r\n onRowPrepared: function(e) {\r\n var rowsView = e.component.getView(\"rowsView\");\r\n (0, _renderer.default)(e.rowElement).replaceWith($rowElement.eq(rowsView._isFixedTableRendering ? 1 : 0).clone())\r\n }\r\n }\r\n },\r\n _getDraggableRowTemplate: function() {\r\n var _this2 = this;\r\n return function(options) {\r\n var $rootElement = _this2.component.$element();\r\n var $dataGridContainer = (0, _renderer.default)(\"
\").width($rootElement.width());\r\n var items = _this2._dataController.items();\r\n var row = items && items[options.fromIndex];\r\n var gridOptions = _this2._getDraggableGridOptions(row);\r\n _this2._createComponent($dataGridContainer, _this2.component.NAME, gridOptions);\r\n $dataGridContainer.find(\".dx-gridbase-container\").children(\":not(.\".concat(_this2.addWidgetPrefix(ROWS_VIEW), \")\")).hide();\r\n return $dataGridContainer\r\n }\r\n },\r\n _getHandleTemplate: function() {\r\n var _this3 = this;\r\n return function(container, options) {\r\n if (\"data\" === options.rowType) {\r\n (0, _renderer.default)(container).addClass(CELL_FOCUS_DISABLED_CLASS);\r\n return (0, _renderer.default)(\"\").addClass(_this3.addWidgetPrefix(HANDLE_ICON_CLASS))\r\n } else {\r\n _uiGrid_core.default.setEmptyText((0, _renderer.default)(container))\r\n }\r\n }\r\n },\r\n optionChanged: function(args) {\r\n if (\"rowDragging\" === args.name) {\r\n this._updateHandleColumn();\r\n this._invalidate(true, true);\r\n args.handled = true\r\n }\r\n this.callBase.apply(this, arguments)\r\n }\r\n};\r\nvar _default = {\r\n defaultOptions: function() {\r\n return {\r\n rowDragging: {\r\n showDragIcons: true,\r\n dropFeedbackMode: \"indicate\",\r\n allowReordering: false,\r\n allowDropInsideItem: false\r\n }\r\n }\r\n },\r\n extenders: {\r\n views: {\r\n rowsView: RowDraggingExtender\r\n }\r\n }\r\n};\r\nexports.default = _default;\r\nmodule.exports = exports.default;\r\n"],"sourceRoot":""}