{"version":3,"sources":["webpack:///./node_modules/devextreme/ui/grid_core/ui.grid_core.filter_custom_operations.js","webpack:///./node_modules/devextreme/ui/grid_core/ui.grid_core.modules.js","webpack:///./node_modules/devextreme/ui/grid_core/ui.grid_core.error_handling.js","webpack:///./node_modules/devextreme/ui/grid_core/ui.grid_core.grid_view.js","webpack:///./node_modules/devextreme/ui/grid_core/ui.grid_core.header_panel.js","webpack:///./node_modules/devextreme/ui/grid_core/ui.grid_core.master_detail.js","webpack:///./node_modules/devextreme/ui/grid_core/ui.grid_core.editor_factory.js","webpack:///./node_modules/devextreme/ui/grid_core/ui.grid_core.editing.js","webpack:///./node_modules/devextreme/ui/grid_core/ui.grid_core.filter_row.js","webpack:///./node_modules/devextreme/ui/grid_core/ui.grid_core.header_filter.js","webpack:///./node_modules/devextreme/ui/grid_core/ui.grid_core.header_filter_core.js","webpack:///./node_modules/devextreme/ui/grid_core/ui.grid_core.filter_sync.js","webpack:///./node_modules/devextreme/ui/grid_core/ui.grid_core.filter_builder.js","webpack:///./node_modules/devextreme/ui/grid_core/ui.grid_core.filter_panel.js","webpack:///./node_modules/devextreme/ui/grid_core/ui.grid_core.pager.js","webpack:///./node_modules/devextreme/ui/grid_core/ui.grid_core.keyboard_navigation.js","webpack:///./node_modules/devextreme/ui/grid_core/ui.grid_core.export_mixin.js","webpack:///./node_modules/devextreme/ui/grid_core/ui.grid_core.focus.js"],"names":["exports","anyOf","grid","_extend","extend","baseOperation","name","icon","caption","_message","default","format","noneOf","baseOp","calculateFilterExpression","filterValue","field","fields","baseFilter","length","_renderer","_interopRequireDefault","_data_source","_deferred","_utils","obj","__esModule","getFullText","itemText","parentText","headerFilterController","getController","dataTypes","result","lastIndex","forEach","value","index","isCondition","isGroup","filterExpression","getFilterExpression","push","dataField","editorTemplate","conditionInfo","container","div","addClass","appendTo","column","columnOption","renderValueText","text","split","filterType","filterValues","slice","showHeaderFilterMenuBase","columnElement","apply","this","setValue","hideHeaderFilterMenu","closeEditor","onHidden","isFilterBuilder","customizeText","fieldInfo","headerFilter","lookup","dataSource","dataSourceOptions","getDataSource","paginate","DataSource","Deferred","key","store","filter","load","done","items","resolve","getSelectedItemsTexts","item","selectedItemsTexts","concat","selected","getHeaderItemText","option","_events_engine","_class","_callbacks","_common","_type","_array","_iterator","_ui","_window","ModuleItem","inherit","_endUpdateCore","ctor","component","that","_updateLockCount","_actions","_actionConfigs","each","callbackNames","flags","callbackFlags","unique","syncStrategy","init","publicMethods","beginUpdate","endUpdate","optionCache","_optionCache","arguments","_silentOption","_setOptionWithoutOptionChange","localize","on","off","optionChanged","args","createAction","handled","getAction","actionName","setAria","$target","target","get","prefix","setAttribute","attr","_createComponent","_controllers","config","isFunction","action","_createAction","bind","e","event","_createActionByOption","executeAction","options","dispose","empty","addWidgetPrefix","className","NAME","toLowerCase","getWidgetContainerClass","containerName","Controller","ViewController","getView","_views","getViews","View","_isReady","isReady","callBase","_requireReady","_requireRender","_requireResize","render","_$parent","_invalidate","requireResize","requireReady","hasWindow","_renderCore","_resizeCore","_afterRender","_parentElement","renderCompleted","resizeCompleted","element","_$element","getElementHeight","$element","marginTop","parseFloat","css","marginBottom","offsetHeight","isVisible","getTemplate","_getTemplate","$parent","toggleClass","fire","resize","isResizing","focus","trigger","_default","modules","registerModule","module","i","controllerTypes","viewTypes","registerModulesOrder","moduleNames","modulesOrder","unregisterModule","grep","processModules","componentClass","sort","module1","module2","orderIndex1","inArray","orderIndex2","controllers","moduleName","views","type","Error","subclassOf","extenders","extender","createModuleItems","moduleTypes","moduleItems","moduleType","moduleItem","methodName","registerPublicMethods","callModuleItemsMethod","_click","_uiGrid_core","defaultOptions","errorRowEnabled","errorHandling","_columnHeadersView","_rowsView","_createErrorRow","error","$tableElements","$errorRow","$closeButton","$errorMessage","_renderErrorMessage","errorRowIndex","currentTarget","closest","stopPropagation","_","tableElement","children","eq","removeErrorRow","fireContentReadyAction","colSpan","getVisibleColumns","role","prepend","append","message","url","replace","$message","renderErrorRow","rowIndex","$popupContent","$errorMessageElement","$firstErrorRow","find","remove","viewElement","getTableElements","$row","_getRowElements","next","insertAfter","$tbody","rowElements","last","first","resizingController","$columnHeaders","$rowsViewElement","hasClass","data","errorHandlingController","dataErrorOccurred","add","changed","changeType","editingController","hasChanges","_typeof","Symbol","iterator","constructor","prototype","_position","_uiGrid_core2","_dom_adapter","_browser","accessibility","cache","_getRequireWildcardCache","has","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","hasOwnProperty","call","desc","set","_interopRequireWildcard","WeakMap","VIEW_NAMES","isPercentWidth","width","isString","mergeArraysByMaxValue","values1","values2","calculateFreeWidth","widths","contentWidth","_getTotalWidth","restoreFocus","focusedElement","selectionRange","hiddenFocus","setSelectionRange","showBorders","renderAsync","legacyRendering","resizing","_initPostRenderHandlers","dataController","_dataController","_refreshSizesHandler","resizeDeferred","isDelayed","changeTypes","needUpdateDimensions","deferUpdate","when","_setAriaRowColCount","_fireContentReadyAction","rowCount","totalItemsCount","colCount","columnCount","_getBestFitWidths","_this$_footerView","rowsView","columnHeadersView","_widths","getColumnWidths","_rowsView$getTableEle","headersTableElement","getTableElement","setTableElement","rowsColumnWidths","headerColumnWidths","footerColumnWidths","_footerView","resultWidths","_setVisibleWidths","visibleColumns","columnsController","_columnsController","columnId","getColumnId","_toggleBestFitModeForView","view","isBestFit","_this","$rowsTables","$viewTables","$tableBody","$rowsTable","$viewTable","_toggleBestFitMode","$rowsFixedTable","_needStretch","style","msie","parseInt","version","_synchronizeColumns","resetBestFitMode","columnAutoWidth","needBestFit","_needBestFit","hasMinWidth","isColumnWidthsCorrected","fixed","minWidth","getActiveElement","getSelectionRange","expandColumnWidth","isDefined","isNumeric","isPixelWidth","getBoundingRect","bottom","setTimeout","_correctColumnWidths","_processStretch","deferRender","some","c","command","_getAverageColumnsWidth","hasPercentWidth","hasAutoWidth","hasWidth","_hasWidth","_loop","isHiddenColumn","averageColumnsWidth","columnIndex","currentMinWidth","map","calculateFreeWidthWithCurrentMinWidth","realColumnWidth","_getRealColumnWidth","columnWidth","_maxWidth","scrollbarWidth","getScrollbarWidth","totalWidth","lastColumnIndex","getLastResizableColumnIndex","resultSizes","groupSize","tableSize","unusedIndexes","diff","diffElement","Math","floor","onePixelElementsCount","columnWidths","groupWidth","ratio","percentTotalWidth","reduce","sum","pixelTotalWidth","freeSpace","percentTotalWidthInPixel","ceil","updateSize","$rootElement","$groupElement","$container","importantMarginClass","_hasHeight","is","detach","clientHeight","removeClass","updateDimensions","checkSize","_checkSize","prevResult","_resizeDeferred","always","isLoaded","_resetGroupElementHeight","_updateDimensionsCore","fail","reject","promise","groupElement","scrollable","getScrollable","height","scrollTop","_lastWidth","_lastHeight","_setScrollerSpacingCore","hasHeight","vScrollbarWidth","hScrollbarWidth","setScrollerSpacing","_setScrollerSpacing","_this2","$testDiv","rootElementHeight","maxHeight","maxHeightHappened","editorFactory","isMaxHeightApplied","scrollHeight","_updateLastSizes","viewName","setLoading","isLoading","_renderDimensions","synchronizeScrolling","_scrollChangedHandler","pos","j","scrollTo","left","top","scrollChanged","gridView","_resizingController","_getWidgetAriaLabel","_groupElement","_renderViews","_getTableRoleName","isFirstRender","label","_rootElement","update","_toolbar","_visibility_change","headerPanel","ColumnsView","_getToolbarItems","_getButtonContainer","_getToolbarButtonClass","specificClass","secondClass","_getToolbarOptions","toolbarOptions","onItemRendered","itemRenderedCallback","itemData","visible","toolbarItems","_toolbarOptions","$headerPanel","$toolbar","_columnOptionChanged","noop","_handleDataChanged","excludeValidators","setToolbarItemDisabled","optionValue","toolbarInstance","itemIndex","indexOf","itemOptionPrefix","updateToolbarDimensions","triggerResizeEvent","getHeaderPanel","getHeight","allowDragging","initMasterDetail","masterDetail","enabled","autoExpandAll","template","columns","_getExpandColumnsCore","expandColumns","cellTemplate","getExpandCellTemplate","_expandedItems","_isExpandAll","expandAll","groupIndex","updateItems","collapseAll","isRowExpanded","expandIndex","getIndexByKey","Array","isArray","_getRowIndicesForExpand","getRowIndexByKey","_changeRowExpandCore","rowIndices","_processDataItem","dataItem","isExpanded","detailColumnIndex","values","_processItems","change","rowType","isNewRow","isEnabledChanged","isAutoExpandAllChanged","fullName","previousValue","_updateParentDataGrids","$masterDetailRow","_updateMasterDataGrid","parent","$detailElement","masterRowOptions","masterDataGrid","isFixedColumns","_updateFixedMasterDetailGrids","masterRowIndex","$rows","getRowElement","detailElementWidth","isDetailHorizontalScrollCanBeShown","isDetailGridWidthChanged","_getCellTemplate","isEditRow","allowRenderToDetachedContainer","_getDefaultTemplate","_isDetailRow","row","_createRow","toggle","_renderCells","_needRenderCell","columnIndices","_renderCell","_pointer","_index","_position2","UPDATE_FOCUS_EVENTS","addNamespace","down","join","_getFocusedElement","$dataGridElement","rowSelector","focusedElementSelector","_getFocusCellSelector","_updateFocusCore","$focusCell","hideBorders","$focus","_$focusedElement","loseFocus","_updateFocus","isFocusOverlay","_isFocusOverlay","clearTimeout","_updateFocusTimeoutID","_updateFocusOverlaySize","position","hide","location","calculate","collision","h","oversize","outerWidth","v","outerHeight","show","hideBorder","_focusTimeoutID","renderFocusOverlay","focused","refocus","isElementInCurrentGrid","_$focusOverlay","align","mozilla","$content","elemCoord","right","focusOverlayPosition","precise","my","at","of","boundary","setup","$focusedElement","category","_updateFocusHandler","getDocument","_attachContainerEventHandlers","normalizeKeyName","include","_guid","_double_click","_array_utils","_dialog","_button","_popup","_devices","_form","_hold","iconUtils","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","sym","enumerable","_objectSpread","source","_defineProperty","getOwnPropertyDescriptors","defineProperties","configurable","writable","_toConsumableArray","arr","_arrayLikeToArray","_arrayWithoutHoles","iter","from","_iterableToArray","o","minLen","n","toString","test","_unsupportedIterableToArray","TypeError","_nonIterableSpread","len","arr2","INSERT_INDEX","EDIT_MODES","ROW_BASED_MODES","CELL_BASED_MODES","FORM_BASED_MODES","MODES_WITH_DELAYED_FOCUS","EDIT_LINK_CLASS","save","cancel","edit","undelete","EDIT_ICON_CLASS","METHOD_NAMES","ACTION_OPTION_NAMES","BUTTON_NAMES","createFailureHandler","deferred","arg","String","_getEditMode","editMode","_isRowEditMode","isEditingCell","cellOptions","isEditing","allowEditing","isEditingOrShowEditorAlwaysDataCell","isCommandCell","isEditorCell","showEditorAlways","editing","mode","refreshMode","allowAdding","allowUpdating","allowDeleting","useIcons","selectTextOnEditStart","confirmDelete","texts","editRow","saveAllChanges","saveRowChanges","cancelAllChanges","cancelRowChanges","addRow","deleteRow","undeleteRow","confirmDeleteMessage","confirmDeleteTitle","form","popup","startEditAction","editRowKey","editColumnName","changes","getDefaultEditorTemplate","$editor","createEditor","parentType","readOnly","isOnForm","id","getButtonIndex","buttons","button","getButtonName","isObject","$pointerDownTarget","_editForm","_updateEditFormDeferred","_lastOperation","_deferreds","d","_dataChangedHandler","_saveEditorHandler","_pointerUpEditorHandler","_that$getController","_pointerDownEditorHandler","targetComponent","_editCellInProgress","isEditorPopup","checkEditorPopup","isDomElement","getWindow","document","isAnotherComponent","_disposed","isAddRowButton","isCellEditMode","_closeEditItem","up","_updateEditColumn","_updateEditButtons","_internalState","_optionsByReference","getChanges","resetChanges","_getInternalData","_addInternalData","params","internalData","_getOldData","_this$_getInternalDat","oldData","getUpdatedData","keyOf","editIndex","createObjectWithChanges","getInsertedData","getRemovedData","_fireDataErrorOccurred","getPopupContent","_needToCloseEditableCell","$targetElement","$targetCell","getRowIndex","getCellElements","isEditCell","closeEditCell","editForm","_repaintEditPopup","_isDefaultButtonVisible","isRowMode","isBatchMode","_getVisibleEditRowIndex","removed","_isButtonVisible","_getButtonConfig","buttonName","editingTexts","addRowToNode","getEditingTexts","editingOptions","allowAction","cssClass","onClick","preventDefault","_getEditingButtons","buttonIndex","_this3","haveCustomButtons","splice","_renderEditingButtons","_this4","_createButton","_getEditCommandCellTemplate","_this5","watch","setEmptyText","isRowEditMode","isFormEditMode","isCellOrBatchEditMode","getEditMode","getFirstEditableColumnIndex","firstFormItem","_firstFormItem","editRowIndex","$editFormElements","_getEditFormEditorVisibleIndex","getFirstEditableCellInRow","_getCellElement","getFocusedCellInRow","_inputFocusTimeoutID","editPopup","_editPopup","popupOptionName","_handleEditRowKeyChange","_handleEditColumnNameChange","_handleChangesChange","_resetEditColumnName","_resetEditRowKey","oldRowIndexCorrection","_getEditRowIndexCorrection","oldRowIndex","_getVisibleEditColumnIndex","_editCellFromOptionChanged","_editRowFromOptionChanged","cancelEditData","getVisibleColumnIndex","oldColumnIndex","repaintChangesOnly","_this6","_repaintEditCell","refresh","isPageChanged","needResetIndexes","_pageIndex","isEditRowKeyDefined","isEditColumnNameDefined","_setEditRowKey","silent","_setEditRowKeyByIndex","getKeyByRowIndex","fireError","getEditRowIndex","getEditFormRowIndex","visibleRowIndex","popupVisible","_$popupContent","getEditForm","_needInsertItem","scrollingMode","pageIndex","beginPageIndex","endPageIndex","dataRowIndex","_generateNewItem","_getLoadedRowIndexByInsertKey","loadedRowIndexOffset","getRowIndexOffset","loadedRowIndex","removeCount","processItems","_this7","processDataItem","generateDataValues","_changes$editIndex","modified","modifiedValues","_initNewRow","_this8","fromPromise","_getInsertKey","parentKey","rows","insertKey","_getInsertRowIndex","_getInsertIndex","parentRowIndex","getTopVisibleItemIndex","maxInsertIndex","editItem","param","oldEditRowIndex","saveEditData","_allowRowAdding","__KEY__","_addRowCore","insertIndex","initialOldEditRowIndex","_addChange","_showEditPopup","_focusFirstEditableCellInRow","_afterInsertRow","$firstCell","_delayedInputFocus","$cell","eventToTrigger","_isEditingStart","_beforeEditCell","_beforeUpdateItems","_setEditColumnNameByIndex","_visibleColumns$index","_setEditColumnName","_getEditColumn","_getColumnByName","editColumn","columnName","visibleWidth","_resetEditIndices","_needFocusEditor","_focusEditorIfNeed","_this9","$editingCell","_this$_rowsView","editColumnIndex","_focusEditingCell","repaintForm","isMobileDevice","current","deviceType","popupOptions","showTitle","fullScreen","toolbar","widget","_getSaveButtonConfig","_getCancelButtonConfig","contentTemplate","_getPopupEditFormTemplate","$popupContainer","_getEditPopupHiddenHandler","not","repaint","defaultAnimation","getVisibleRows","templateOptions","formTemplate","getEditFormTemplate","_removeInternalData","_removeChange","equalByValue","executeOperation","func","_this10","waitForDeferredOperations","state","editCell","_editCell","coreResult","_this11","_editCellCore","_getNormalizedEditCellOptions","_ref","oldColumn","getVisibleIndex","_this12","isEditByOptionChanged","_this$_getNormalizedE","_prepareEditCell","_processCanceledEditingCell","beforeFocusCallback","callBeforeFocusCallbackAlways","inputFocus","$focusableElement","focusAndSelectElement","_beforeFocusCallback","real","ios","android","$editCell","_this13","rowKey","_checkAndDeleteRow","showDialogTitle","confirm","confirmResult","_deleteRowCore","isEmptyObject","_fireOnSaving","_this14","onSavingParams","_executeEditingAction","_processChanges","deferreds","results","dataChanges","_this15","changeCopy","_beforeSaveEditData","insert","newData","doneDeferred","_processSaveEditDataResult","hasSavedData","changesLength","_fireSaveEditDataEvents","_ref2","_this16","isSaving","_resolveAfterSave","_saving","_saveEditDataInner","_ref3","_afterSaveEditData","_this17","_ref4","beginLoading","_endSaving","endLoading","_cancelSaving","_resetModifiedClassCells","_this18","columnsCount","_ref5","_changes$","_refreshDataAfterSave","_cancelEditDataCore","_this19","isFullRefresh","selection","reload","changesOnly","isEditColumnVisible","_isEditColumnVisible","addCommandColumn","alignment","fixedPosition","isVisibleWithCurrentEditMode","_applyModified","_beforeCloseEditCellInBatchMode","_beforeCancelEditData","_hideEditPopup","hasEditData","isError","withoutSaveEditData","_this20","_closeEditCellCore","_this21","_getRowIndicesForCascadeUpdating","skipCurrentRow","addDeferred","_this22","_prepareChange","_options$row","$cellElement","cellElement","setCellValue","displayValueMap","_updateRowValues","updateFieldValue","forceUpdateRow","_this23","_applyChange","_focusPreviousEditingCellIfNeed","_updateEditRow","_needUpdateRow","isCustomSetCellValue","defaultSetCellValue","isCustomCalculateCellValue","visibleColumn","calculateCellValue","defaultCalculateCellValue","isUpdateInCellMode","_updateEditRowCore","getCellIndex","$focusedItem","selectionStart","_getFormEditItemTemplate","editCellTemplate","renderFormEditTemplate","detailCellOptions","isReadOnly","editorType","isCustomEditorType","formItem","getEditorType","rowData","editorOptions","getItemID","renderTemplate","_updateCell","getFormEditorTemplate","selector","_validator","$editorElement","validator","validatorOptions","contents","dxValidator","validationRules","validationGroup","dataGetter","getEditFormOptions","detailOptions","userCustomizeItem","editFormItemClass","forEachFormItems","callBack","tabs","itemId","getColumns","isBand","formID","customizeItem","isRequired","rule","itemVisible","renderFormOnly","editFormOptions","baseEditFormOptions","$buttonsContainer","getColumnTemplate","editingStartOptions","isRowEditing","isCellEditing","$button","iconType","getImageSourceType","getImageContainer","COMMAND_EDIT_CLASS","localizationName","getButtonLocalizationNames","hint","prepareEditButtons","titleButtonTextByClassNames","revert","classNameButtonByNames","buttonItems","prepareButtonItem","sortIndex","hintText","isButtonDisabled","onInitialized","EDIT_BUTTON_CLASS","disabled","showText","locateInMenu","highlightDataCell","parameters","isCellModified","_allowEditAction","allowEditAction","eventName","needCallback","_editingController","full","repaintRows","_updateItemsCore","_applyChangeUpdate","_applyChangesOnly","_processItem","dataIndex","_getChangedColumnIndices","oldItem","newItem","isLiveUpdate","_isCellChanged","oldRow","newRow","cell","cells","$cellElements","cellIndex","_getVisibleColumnIndex","$cells","columnIdentifier","editFormRowIndex","visibleIndex","_isNativeClick","_createTable","$table","isRowRemoved","isRowInserted","isRowModified","_getColumnIndexByElement","$tableElement","_getColumnIndexByElementCore","_editCellByClick","_rowPointerDown","_this24","_pointerDownTimeout","_rowClick","isEditForm","rowElement","_rowDblClick","_cellPrepared","isEditableCell","_editCellPrepared","_formItemPrepared","_isFormItem","isDetailRow","isPopupEditing","_update","_getCellOptions","_createCell","_renderCellContent","cellValue","getCellOptions","optionName","_editor","_overlay","_menu","_accessibility","OPERATION_ICONS","notcontains","contains","startswith","endswith","between","OPERATION_DESCRIPTORS","BETWEEN_OPERATION_DATA_TYPES","isOnClickApplyFilterMode","ColumnHeadersViewFilterRowExtender","getEditorInstance","$editorContainer","componentNames","editor","getRangeTextByFilterValue","rangeEnd","getColumnFilterValue","formatOptions","getFormatOptionsByColumn","formatValue","bufferedFilterValue","getColumnSelectedFilterOperation","bufferedSelectedFilterOperation","selectedFilterOperation","getFilterValue","isFilterRange","isRangeStart","dataType","isValidFilterValue","updateFilterValue","_applyFilterViewController","setHighLight","columnFilterValue","normalizeFilterValue","notFireEvent","_updateEditorValue","$editorRangeElements","$menu","optionNames","checkChanges","overlayInstance","_updateFilterRangeContent","_updateFilterOperationChooser","_renderFilterRangeContent","_renderEditor","_getEditorOptions","_hideFilterRange","_filterRangeOverlayInstance","isFilterRowVisible","_isElementVisible","_initFilterRangeOverlay","sharedData","$overlay","shading","focusStateEnabled","closeOnTargetScroll","closeOnOutsideClick","animation","offset","contentElement","EDITOR_CONTAINER_CLASS","$prevElement","shiftKey","prev","onShown","_updateFilterRangeOverlay","_showFilterRange","getFilterRangeOverlayInstance","selectView","_getRows","_renderFilterCell","headerId","filterOperations","_renderFilterOperationChooser","html","allowFiltering","accessibilityOptions","inputAttr","_getFilterInputAccessibilityAttributes","showAllText","updateValueTimeout","placeholder","columnAriaLabel","$filterRangeContent","isCellWasFocused","menu","getInstance","_focusEditor","integrationOptions","activeStateEnabled","selectionMode","showFirstSubmenuMode","hideSubmenuOnMouseLeave","selectable","_getFilterOperationMenuItems","onItemClick","properties","columnSelectedFilterOperation","notFocusEditor","isOnClickMode","defaultSelectedFilterOperation","reset","onSubmenuShown","_isEditorFocused","onSubmenuHiding","onContentReady","_hideSubmenu","_visibleSubmenu","rtlEnabled","parents","prependTo","filterRowOptions","operationDescriptions","availableFilterOperations","descriptionName","defaultFilterOperation","resetOperationText","DataControllerFilterRowExtender","skipCalculateColumnFilters","_calculateAdditionalFilter","filters","createFilterExpression","combineFilters","filterRow","showOperationChooser","applyFilter","applyFilterText","equal","notEqual","lessThan","lessThanOrEqual","greaterThan","greaterThanOrEqual","startsWith","notContains","endsWith","isBlank","isNotBlank","betweenStartText","betweenEndText","_getHeaderPanel","_headerPanel","enableApplyButton","removeHighLights","columnHeadersViewElement","columnsResizer","_startResizing","_targetPoint","_endResizing","_prepareFilterItem","filterItem","_isShowApplyFilterButton","toolbarItem","_filtering","_uiGrid_core3","_data","_date","_variable_wrapper","DATE_INTERVAL_FORMATS","month","getMonthNames","quarter","Date","HeaderFilterController","_headerFilterView","_updateSelectedState","isExclude","updateHeaderFilterItemSelectionState","_normalizeGroupItem","currentLevel","displayValue","path","valueSelector","displaySelector","headerFilterOptions","groupInterval","getGroupInterval","isDateType","getDisplayFormat","firstValueText","secondValue","secondValueText","getFormatOptions","emptyValue","_processGroupItems","groupItems","level","compileGetter","displayExpr","valueExpr","pop","group","getHeaderFilterGroupParameters","remoteOperations","grouping","headerFilterDataSource","isLookup","normalizeDataSourceOptions","lookupDataSourceOptions","isWrapped","cutoffLevel","_currentColumn","getCombinedFilter","useDefaultSearch","origPostProcess","postProcess","searchValue","unshift","getCurrentColumn","showHeaderFilterMenu","isGroupPanel","$columnElement","getColumnElements","remoteFiltering","filtering","onShowing","dxResizableInstance","overlayContent","dxResizable","headerFilterByColumn","ColumnHeadersViewHeaderFilterExtender","headerFilterMixin","$headerFilterIndicator","allowHeaderFiltering","_applyColumnState","rootElement","showColumnLines","_subscribeToIndicatorEvent","$indicator","indicatorName","_updateIndicator","_updateHeaderFilterIndicators","_updateIndicators","_needUpdateFilterIndicators","HeaderPanelHeaderFilterExtender","_createGroupPanelItem","groupColumn","$item","getDefaultAlignment","currentColumn","deserializeValue","invertFilterExpression","allowSearch","searchTimeout","ok","headerFilterView","HeaderFilterView","filterValuesMatch","isExcludeFilter","resetChildrenItemSelection","_tree_view","_list","updateSelectAllState","selectAllCheckBox","isSearchEnabled","getPopupContainer","_popupContainer","getListContainer","_listContainer","applyHeaderFilter","list","fillSelectedItemKeys","node","_getNode","hasChildrenWithSelection","_hasChildren","_initializePopupContainer","popupContainer","updatePopup","headerFilterMenu","_cleanPopupContent","_getSearchExpr","useDefaultSearchExpr","dxPopupOptions","showCloseButton","dragEnabled","resizeEnabled","_initializeListContainer","_getDefaultOptions","widgetOptions","searchEnabled","searchMode","itemTemplate","encodeHtml","onOptionChanged","showCheckBoxesMode","keyExpr","searchExpr","pageLoadMode","showSelectionControls","onSelectionChanged","selectedItems","_selectedItemsUpdating","filterValueIndex","_isHeaderFilterEmpty","_getIndicatorClassName","_renderIndicator","indicator","columnAlignment","FILTER_ROW_OPERATIONS","getColumnIdentifier","canSyncHeaderFilterWithFilterRow","getConditionFromFilterRow","getConditionFromHeaderFilter","updateHeaderFilterCondition","updateFilterRowCondition","filterSyncEnabled","filterSync","operation","getDefaultOperation","selectedOperation","headerFilterCondition","hasArrayValue","getHeaderFilterFromCondition","condition","defaultFilterOperations","syncFilterValue","getFilteringColumns","_skipSyncColumnOptions","filterConditions","getMatchedConditions","filterCondition","_initSync","identifier","checkForErrors","filteringColumns","getFilterValueFromColumns","isFilterSyncActive","isAllDataTypesDefined","dataSourceChanged","_getSyncFilterRow","syncFilters","removeFieldConditionsFromFilter","_getSyncHeaderFilter","addItem","getNormalizedFilter","syncFilterRow","syncHeaderFilter","getCustomFilterOperations","filterBuilderCustomOperations","filterSyncEnabledValue","customOperations","calculatedFilterValue","_parseColumnPropertyName","match","clearFilter","filterName","_applyFilter","getColumnByPath","filterSyncController","propertyName","filterHasField","_filter_builder","_scroll_view","filterBuilder","groupOperationDescriptions","and","or","notAnd","notOr","filterOperationDescriptions","filterBuilderPopup","filterBuilderView","_updatePopupOptions","_initPopup","_filterBuilderPopup","_disposePopup","_filterBuilder","title","$contentElement","_getPopupContentTemplate","_getPopupToolbarItems","$filterBuilderContainer","direction","_check_box","_inflector","filterPanel","filterEnabled","createFilter","filterEnabledHint","filterPanelView","$leftContainer","FILTER_PANEL_CLASS","_filterValueBuffer","_getCheckElement","_getFilterElement","_getTextElement","_getRemoveButtonElement","onValueChanged","_showFilterBuilder","registerKeyboardAction","_addTabIndexToElement","filterText","$textElement","getFilterText","customText","clearFilterValue","tabindex","_getConditionText","fieldText","operationText","valueText","_getValueMaskedText","_getValueText","customOperation","hasCustomOperation","getCurrentLookupValueText","getDisplayValue","getCurrentValueText","getConditionText","getCustomOperation","getField","captionize","getCaptionByOperation","getGroupText","isInnerGroup","textParts","groupValue","getGroupValue","_len","_key","groupText","substring","toUpperCase","_pager","getPageIndex","pager","showPageSizeSelector","allowedPageSizes","pagerView","_isVisible","_getPager","pageSize","pageCount","totalCount","hasKnownLastPage","pagerOptions","keyboardController","maxPagesCount","showPageSizes","showInfo","displayMode","pagesNavigatorVisible","showNavigationButtons","pageSizes","getPageSizes","pageIndexChanged","pageSizeChanged","onKeyDown","useLegacyKeyboardNavigation","useKeyboard","infoText","_pageSizes","pagerVisible","scrolling","isPager","isPaging","isDataSource","isScrolling","skipProcessingPagingChange","_selectors","_short","INTERACTIVE_ELEMENTS_SELECTOR","isGroupRow","isDataRow","isCellElement","tagName","isElementDefined","isMobile","isCellInHeaderRow","keyboardNavigation","enterKeyAction","enterKeyDirection","editOnKeyPress","_selectionController","_editorFactory","isKeyboardEnabled","subscribeVisibilityChange","_updateFocusTimeout","_fastEditingStarted","_focusedCellPosition","_canceledCellPosition","setupFocusedView","_isNeedScroll","_focusedView","_scrollToElement","_initViewHandlers","_initDocumentHandlers","rowsViewFocusHandler","isRelatedTargetInRowsView","relatedTarget","_isEventInCurrentGrid","$focusedCell","_getFocusedCell","$rowsView","isFullUpdate","isFocusedViewCorrect","isAppend","isFocusedElementCorrect","_initPointerEventHandler","_initKeyDownHandler","_setRowsViewAttributes","_isNeedFocus","_isHiddenFocus","_documentClickHandler","isCurrentRowsViewClick","isEditorOverlay","columnsResizerController","isColumnResizing","_resetFocusedCell","_resetFocusedView","_getRowsViewElement","_applyTabIndexToElement","pointerEventName","clickSelector","_pointerEventAction","_pointerEventHandler","keyboard","_keyDownListener","_keyDownHandler","unsubscribeVisibilityChange","isRowFocusType","focusType","isCellFocusType","setRowFocusType","setCellFocusType","needStopPropagation","originalEvent","isHandled","_processOnKeyDown","isDefaultPrevented","_updateFocusedCellPositionByTarget","keyName","_leftRightKeysHandler","ctrl","_upDownKeysHandler","_pageUpDownKeyHandler","_spaceKeyHandler","_ctrlAKeyHandler","_beginFastEditing","_tabKeyHandler","_enterKeyHandler","_escapeKeyHandler","_ctrlFKeyHandler","_f2KeyHandler","_isFastEditingAllowed","_isFastEditingStarted","eventArgs","ctrlKey","alt","altKey","shift","_closeEditCell","getVisibleRowIndex","$event","getRow","directionCode","_getDirectionCodeByKey","isEditingNavigationMode","_isVirtualColumnRender","_processVirtualHorizontalPosition","_getNextCell","_arrowKeysHandlerFocusCell","isUpArrow","_navigateNextCell","_isVirtualRowRender","rowHeight","_scrollBy","pagingEnabled","isPageUp","pageStep","_isVirtualScrolling","_container","isFocusedRowElement","_getElementType","startSelectionWithCheckboxes","changeItemSelection","control","selectAll","isOriginalHandlerRequired","_isLastValidCell","_isFirstValidCell","eventTarget","focusedViewElement","_handleTabKeyOnMasterDetailCell","_editingCellTabHandler","_targetCellTabHandler","_getMaxHorizontalOffset","scrollWidth","_isColumnRendered","allVisibleColumns","renderedVisibleColumns","_isFixedColumn","_isColumnVirtual","localColumnIndex","getColumnIndexOffset","nextColumnIndex","getColumnIndex","horizontalScrollPosition","needToScroll","_getVisibleColumnCount","columnIndexOffset","_getHorizontalScrollPositionOffset","scrollBy","positionOffset","$currentCell","_getCell","currentCellWidth","rtlMultiplier","isEditingAllowed","_getCellElementFromTarget","elementType","_updateFocusedCellPosition","nextCellInfo","_getNextCellByTabKey","_getRowIndex","_isDataRow","_focusCell","isHighlighted","_editFocusedCell","_focusInteractiveElement","$lastInteractiveElement","_getInteractiveElement","getFirstValidCellInRow","_checkNewLineTransition","_fireFocusedCellChanging","$newCellElement","cellPosition","_getCellPosition","_fireFocusedRowChanging","rowIndexChanged","setFocusedColumnIndex","isContinuation","changeRowExpand","_processEnterKeyForDataCell","_getEnterKeyDirection","allowEditingOnEnterKey","_allowEditingOnEnterKey","_handleEnterKeyEditingCell","_startEditing","isShift","_focusEditFormCell","searchTextEditor","getSearchTextEditor","keyCode","_isCellValid","$nextCell","isVerticalDirection","_fireFocusChangingEvents","_focus","isDeleting","which","fastEditingKey","fromCharCode","isInteractiveElement","isRevertButton","isExpandCommandCell","_isInsideEditForm","_focusView","_isMasterDetailCell","_clickTargetCellHandler","_isCellEditMode","setFocusedRowIndex","prevRowIndex","resetFocusedRow","_resetFocusedRow","_allowRowUpdating","isInteractiveTarget","isDisabled","activeElementSelector","focusedRowEnabled","_focusElement","getFocusedView","rowsViewElement","$focusedView","_getFocusedViewByElement","$view","isLast","disableFocus","isNotFocusedRow","$focusElement","focusedView","$focusViewElement","removeAttr","one","isRenderView","_hasSkipRow","_checkCellOverlapped","$focusedElementInsideCell","isFocusedElementDefined","cellOffset","isOverlapped","_this$_focusedCellPos","setFocusedCellPosition","_getFocusedColumnIndexOffset","_getFixedColumnIndexOffset","isFixedColumnIndexOffsetRequired","_applyColumnIndexBoundaries","preventScroll","_this$_focusedView","renderFocusState","restoreFocusableElement","$rowElement","rowIndexOffset","newRowIndex","_getNewPositionByCode","code","_hasValidCellAfterPosition","_isLastRow","_hasValidCellBeforePosition","visibleColumnsCount","_isCellByPositionValid","isFirstValidCell","hasValidCells","checkingPosition","visibleColumnCount","visibleRows","isClick","isMasterDetailRow","isShowWhenGrouped","showWhenGrouped","isDataCell","rowItems","isRowEditingInCurrentRow","_isLegacyNavigation","$result","focusedCellPosition","includeCommandCells","newFocusedCellPosition","isLastCellOnDirection","_isCellInRow","visibleColumnIndex","_isAllowEditing","_startEditCell","colIndex","editResult","_editingCellHandler","editorValue","$input","keyDownEvent","createEvent","keyPressEvent","inputEvent","timeout","val","$widgetContainer","fireRowEvent","newColumnIndex","prevCellIndex","prevColumnIndex","_fireFocusedCellChanged","localRowIndex","min","$newFocusedRow","prevFocusedRowIndex","loadingOperationTypes","paging","_fireFocusedRowChanged","focusedRowKey","focusController","focusedRowIndex","getFocusedRowIndexByKey","tabIndex","getCell","display","scrollHandler","$masterDetailCell","$masterDetailGrid","_processNextCellInMasterDetail","_processCanceledEditCellPosition","isCanceled","needTriggerPointerEventHandler","_triggerPointerDownEventHandler","cellElements","updateFocusElementTabIndex","_updateFocusedCellTabIndex","cellElementsLength","updateCellTabIndex","isMasterDetailCell","isValidCell","renderDelayedTemplates","_renderFocusByChange","editorInstance","_getEditorInstance","_handleEditingNavigationMode","originalKeyHandler","_supportedKeys","registerKeyHandler","_input","getWidgetInstance","keyboardNavigationController","_keyboardNavigationController","_correctRowIndices","getRowIndexCorrection","focusedRowIndexCorrection","adaptiveColumns","_showHiddenCellsInView","isCommandColumn","_hideVisibleCellInView","_getEmptyCell","colspan","rowspan","_defaultSetter","_cloneItem","_prepareItems","resultItems","cols","getItem","clone","r","_c","autoNavigateToFocusedRow","focusedColumnIndex","_keyboardController","_focusRowByIndex","_triggerFocusedRowChangedIfNeed","_focusRowByKey","isAutoNavigateToFocusedRow","_focusRowByIndexCore","setKeyByIndex","_isValidFocusedRowIndex","lastItemIndex","_getLastItemIndex","isRowFocused","_isLocalRowIndex","waitReady","virtualItems","virtualItemsCount","virtualItemsBegin","begin","visibleRowsCount","visiblePagesCount","_setFocusedRowKeyByIndex","_navigateToRow","isFocusedRowKeyDefined","navigateToRow","needFocusRow","isAutoNavigate","rowIndexByKey","_navigateTo","getPageIndexByKey","isVirtualRowRenderingMode","_navigateToVirtualRow","_navigateToVisibleRow","_triggerUpdateFocusedRow","scrollToRowElement","rowsScrollController","_rowsScrollController","getItemOffset","triggerUpdateFocusedRow","y","_focusRowByKeyOrIndex","currentFocusedRowIndex","updateFocusedRow","_change$items","isMainTable","_clearPreviousFocusedRow","_prepareFocusedRow","changedItem","$prevRowFocusedElement","focusedRow","$focusedRowTable","scrollToElementVertically","visibleRow","isRowElement","getSortDataSourceParameters","sortByKey","_dataSource","isLocalOperations","every","operationName","notSortedKeys","getDataIndexGetter","notSortedKey","_fireChanged","isPartialUpdateWithDeleting","_updatePageIndexes","processUpdateFocusedRow","prevRenderingPageIndex","_lastRenderingPageIndex","renderingPageIndex","_isPagingByRendering","isPagingByRendering","operationTypes","fullReload","isVirtualScrolling","isValidRowIndexByKey","getGlobalRowIndexByKey","globalIndex","_calculateGlobalRowIndexByGroupedData","_calculateGlobalRowIndexByFlatData","groupFilter","useGroup","_generateFilterByKey","_concatWithCombinedFilter","skip","take","_generateOperationFilterByKey","requireTotalCount","extra","combinedFilter","_generateBooleanFilter","sortInfo","getGroupDataSourceParameters","reverse","getter","isBoolean","booleanFilter","sortFilter","dataSourceKey","keyPart","_checkRowKeys","_setFocusedRowElementTabIndex","_findRowElementForTabIndex","_scrollToFocusOnResize","getScrollElementPosition"],"mappings":"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","file":"vendors~cac05d6d.434fea5f6b9bc478db4b.bundle.js","sourcesContent":["/**\r\n * DevExtreme (ui/grid_core/ui.grid_core.filter_custom_operations.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.anyOf = anyOf;\r\nexports.noneOf = noneOf;\r\nvar _renderer = _interopRequireDefault(require(\"../../core/renderer\"));\r\nvar _message = _interopRequireDefault(require(\"../../localization/message\"));\r\nvar _extend = require(\"../../core/utils/extend\");\r\nvar _data_source = require(\"../../data/data_source/data_source\");\r\nvar _deferred = require(\"../../core/utils/deferred\");\r\nvar _utils = require(\"../filter_builder/utils\");\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 baseOperation(grid) {\r\n var calculateFilterExpression = function(filterValue, field, fields) {\r\n var result = [];\r\n var lastIndex = filterValue.length - 1;\r\n filterValue && filterValue.forEach(function(value, index) {\r\n if ((0, _utils.isCondition)(value) || (0, _utils.isGroup)(value)) {\r\n var filterExpression = (0, _utils.getFilterExpression)(value, fields, [], \"headerFilter\");\r\n result.push(filterExpression)\r\n } else {\r\n result.push((0, _utils.getFilterExpression)([field.dataField, \"=\", value], fields, [], \"headerFilter\"))\r\n }\r\n index !== lastIndex && result.push(\"or\")\r\n });\r\n if (1 === result.length) {\r\n result = result[0]\r\n }\r\n return result\r\n };\r\n var getFullText = function(itemText, parentText) {\r\n return parentText ? parentText + \"/\" + itemText : itemText\r\n };\r\n var getSelectedItemsTexts = function getSelectedItemsTexts(items, parentText) {\r\n var result = [];\r\n items.forEach(function(item) {\r\n if (item.items) {\r\n var selectedItemsTexts = getSelectedItemsTexts(item.items, getFullText(item.text, parentText));\r\n result = result.concat(selectedItemsTexts)\r\n }\r\n item.selected && result.push(getFullText(item.text, parentText))\r\n });\r\n return result\r\n };\r\n var headerFilterController = grid && grid.getController(\"headerFilter\");\r\n var customizeText = function(fieldInfo) {\r\n var value = fieldInfo.value;\r\n var column = grid.columnOption(fieldInfo.field.dataField);\r\n var headerFilter = column && column.headerFilter;\r\n var lookup = column && column.lookup;\r\n if (headerFilter && headerFilter.dataSource || lookup && lookup.dataSource) {\r\n column = (0, _extend.extend)({}, column, {\r\n filterType: \"include\",\r\n filterValues: [value]\r\n });\r\n var dataSourceOptions = headerFilterController.getDataSource(column);\r\n dataSourceOptions.paginate = false;\r\n var dataSource = new _data_source.DataSource(dataSourceOptions);\r\n var result = new _deferred.Deferred;\r\n var key = dataSource.store().key();\r\n if (key) {\r\n dataSource.filter([key, \"=\", fieldInfo.value])\r\n }\r\n dataSource.load().done(function(items) {\r\n result.resolve(getSelectedItemsTexts(items)[0])\r\n });\r\n return result\r\n } else {\r\n var text = headerFilterController.getHeaderItemText(value, column, 0, grid.option(\"headerFilter\"));\r\n return text\r\n }\r\n };\r\n return {\r\n dataTypes: [\"string\", \"date\", \"datetime\", \"number\", \"boolean\", \"object\"],\r\n calculateFilterExpression: calculateFilterExpression,\r\n editorTemplate: function(conditionInfo, container) {\r\n var div = (0, _renderer.default)(\"
\").addClass(\"dx-filterbuilder-item-value-text\").appendTo(container);\r\n var column = (0, _extend.extend)(true, {}, grid.columnOption(conditionInfo.field.dataField));\r\n (0, _utils.renderValueText)(div, conditionInfo.text && conditionInfo.text.split(\"|\"));\r\n var setValue = function(value) {\r\n conditionInfo.setValue(value)\r\n };\r\n column.filterType = \"include\";\r\n column.filterValues = conditionInfo.value ? conditionInfo.value.slice() : [];\r\n headerFilterController.showHeaderFilterMenuBase({\r\n columnElement: div,\r\n column: column,\r\n apply: function() {\r\n setValue(this.filterValues);\r\n headerFilterController.hideHeaderFilterMenu();\r\n conditionInfo.closeEditor()\r\n },\r\n onHidden: function() {\r\n conditionInfo.closeEditor()\r\n },\r\n isFilterBuilder: true\r\n });\r\n return container\r\n },\r\n customizeText: customizeText\r\n }\r\n}\r\n\r\nfunction anyOf(grid) {\r\n return (0, _extend.extend)(baseOperation(grid), {\r\n name: \"anyof\",\r\n icon: \"selectall\",\r\n caption: _message.default.format(\"dxFilterBuilder-filterOperationAnyOf\")\r\n })\r\n}\r\n\r\nfunction noneOf(grid) {\r\n var baseOp = baseOperation(grid);\r\n return (0, _extend.extend)({}, baseOp, {\r\n calculateFilterExpression: function(filterValue, field, fields) {\r\n var baseFilter = baseOp.calculateFilterExpression(filterValue, field, fields);\r\n if (!baseFilter || 0 === baseFilter.length) {\r\n return null\r\n }\r\n return \"!\" === baseFilter[0] ? baseFilter : [\"!\", baseFilter]\r\n },\r\n name: \"noneof\",\r\n icon: \"unselectall\",\r\n caption: _message.default.format(\"dxFilterBuilder-filterOperationNoneOf\")\r\n })\r\n}\r\n","/**\r\n * DevExtreme (ui/grid_core/ui.grid_core.modules.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 _class = _interopRequireDefault(require(\"../../core/class\"));\r\nvar _callbacks = _interopRequireDefault(require(\"../../core/utils/callbacks\"));\r\nvar _common = require(\"../../core/utils/common\");\r\nvar _type = require(\"../../core/utils/type\");\r\nvar _array = require(\"../../core/utils/array\");\r\nvar _iterator = require(\"../../core/utils/iterator\");\r\nvar _ui = _interopRequireDefault(require(\"../widget/ui.errors\"));\r\nvar _message = _interopRequireDefault(require(\"../../localization/message\"));\r\nvar _window = require(\"../../core/utils/window\");\r\n\r\nfunction _interopRequireDefault(obj) {\r\n return obj && obj.__esModule ? obj : {\r\n \"default\": obj\r\n }\r\n}\r\nvar WIDGET_WITH_LEGACY_CONTAINER_NAME = \"dxDataGrid\";\r\nvar ModuleItem = _class.default.inherit({\r\n _endUpdateCore: function() {},\r\n ctor: function(component) {\r\n var that = this;\r\n that._updateLockCount = 0;\r\n that.component = component;\r\n that._actions = {};\r\n that._actionConfigs = {};\r\n (0, _iterator.each)(this.callbackNames() || [], function(index, name) {\r\n var flags = that.callbackFlags(name) || {};\r\n flags.unique = true, flags.syncStrategy = true;\r\n that[this] = (0, _callbacks.default)(flags)\r\n })\r\n },\r\n init: function() {},\r\n callbackNames: function() {},\r\n callbackFlags: function() {},\r\n publicMethods: function() {},\r\n beginUpdate: function() {\r\n this._updateLockCount++\r\n },\r\n endUpdate: function() {\r\n if (this._updateLockCount > 0) {\r\n this._updateLockCount--;\r\n if (!this._updateLockCount) {\r\n this._endUpdateCore()\r\n }\r\n }\r\n },\r\n option: function(name) {\r\n var component = this.component;\r\n var optionCache = component._optionCache;\r\n if (1 === arguments.length && optionCache) {\r\n if (!(name in optionCache)) {\r\n optionCache[name] = component.option(name)\r\n }\r\n return optionCache[name]\r\n }\r\n return component.option.apply(component, arguments)\r\n },\r\n _silentOption: function(name, value) {\r\n var component = this.component;\r\n var optionCache = component._optionCache;\r\n if (optionCache) {\r\n optionCache[name] = value\r\n }\r\n return component._setOptionWithoutOptionChange(name, value)\r\n },\r\n localize: function(name) {\r\n var optionCache = this.component._optionCache;\r\n if (optionCache) {\r\n if (!(name in optionCache)) {\r\n optionCache[name] = _message.default.format(name)\r\n }\r\n return optionCache[name]\r\n }\r\n return _message.default.format(name)\r\n },\r\n on: function() {\r\n return this.component.on.apply(this.component, arguments)\r\n },\r\n off: function() {\r\n return this.component.off.apply(this.component, arguments)\r\n },\r\n optionChanged: function(args) {\r\n if (args.name in this._actions) {\r\n this.createAction(args.name, this._actionConfigs[args.name]);\r\n args.handled = true\r\n }\r\n },\r\n getAction: function(actionName) {\r\n return this._actions[actionName]\r\n },\r\n setAria: function(name, value, $target) {\r\n var target = $target.get(0);\r\n var prefix = \"role\" !== name && \"id\" !== name ? \"aria-\" : \"\";\r\n if (target.setAttribute) {\r\n target.setAttribute(prefix + name, value)\r\n } else {\r\n $target.attr(prefix + name, value)\r\n }\r\n },\r\n _createComponent: function() {\r\n return this.component._createComponent.apply(this.component, arguments)\r\n },\r\n getController: function(name) {\r\n return this.component._controllers[name]\r\n },\r\n createAction: function(actionName, config) {\r\n if ((0, _type.isFunction)(actionName)) {\r\n var action = this.component._createAction(actionName.bind(this), config);\r\n return function(e) {\r\n action({\r\n event: e\r\n })\r\n }\r\n } else {\r\n this._actions[actionName] = this.component._createActionByOption(actionName, config);\r\n this._actionConfigs[actionName] = config\r\n }\r\n },\r\n executeAction: function(actionName, options) {\r\n var action = this._actions[actionName];\r\n return action && action(options)\r\n },\r\n dispose: function() {\r\n var that = this;\r\n (0, _iterator.each)(that.callbackNames() || [], function() {\r\n that[this].empty()\r\n })\r\n },\r\n addWidgetPrefix: function(className) {\r\n var componentName = this.component.NAME;\r\n return \"dx-\" + componentName.slice(2).toLowerCase() + (className ? \"-\" + className : \"\")\r\n },\r\n getWidgetContainerClass: function() {\r\n var containerName = this.component.NAME === WIDGET_WITH_LEGACY_CONTAINER_NAME ? null : \"container\";\r\n return this.addWidgetPrefix(containerName)\r\n }\r\n});\r\nvar Controller = ModuleItem;\r\nvar ViewController = Controller.inherit({\r\n getView: function(name) {\r\n return this.component._views[name]\r\n },\r\n getViews: function() {\r\n return this.component._views\r\n }\r\n});\r\nvar View = ModuleItem.inherit({\r\n _isReady: function() {\r\n return this.component.isReady()\r\n },\r\n _endUpdateCore: function() {\r\n this.callBase();\r\n if (!this._isReady() && this._requireReady) {\r\n this._requireRender = false;\r\n this.component._requireResize = false\r\n }\r\n if (this._requireRender) {\r\n this._requireRender = false;\r\n this.render(this._$parent)\r\n }\r\n },\r\n _invalidate: function(requireResize, requireReady) {\r\n this._requireRender = true;\r\n this.component._requireResize = (0, _window.hasWindow)() && (this.component._requireResize || requireResize);\r\n this._requireReady = this._requireReady || requireReady\r\n },\r\n _renderCore: function() {},\r\n _resizeCore: function() {},\r\n _afterRender: function() {},\r\n _parentElement: function() {\r\n return this._$parent\r\n },\r\n ctor: function(component) {\r\n this.callBase(component);\r\n this.renderCompleted = (0, _callbacks.default)();\r\n this.resizeCompleted = (0, _callbacks.default)()\r\n },\r\n element: function() {\r\n return this._$element\r\n },\r\n getElementHeight: function() {\r\n var $element = this.element();\r\n if (!$element) {\r\n return 0\r\n }\r\n var marginTop = parseFloat($element.css(\"marginTop\")) || 0;\r\n var marginBottom = parseFloat($element.css(\"marginBottom\")) || 0;\r\n var offsetHeight = $element.get(0).offsetHeight;\r\n return offsetHeight + marginTop + marginBottom\r\n },\r\n isVisible: function() {\r\n return true\r\n },\r\n getTemplate: function(name) {\r\n return this.component._getTemplate(name)\r\n },\r\n render: function($parent, options) {\r\n var $element = this._$element;\r\n var isVisible = this.isVisible();\r\n if (!$element && !$parent) {\r\n return\r\n }\r\n this._requireReady = false;\r\n if (!$element) {\r\n $element = this._$element = (0, _renderer.default)(\"
\").appendTo($parent);\r\n this._$parent = $parent\r\n }\r\n $element.toggleClass(\"dx-hidden\", !isVisible);\r\n if (isVisible) {\r\n this.component._optionCache = {};\r\n this._renderCore(options);\r\n this.component._optionCache = void 0;\r\n this._afterRender($parent);\r\n this.renderCompleted.fire(options)\r\n }\r\n },\r\n resize: function() {\r\n this.isResizing = true;\r\n this._resizeCore();\r\n this.resizeCompleted.fire();\r\n this.isResizing = false\r\n },\r\n focus: function() {\r\n _events_engine.default.trigger(this.element(), \"focus\")\r\n }\r\n});\r\nvar MODULES_ORDER_MAX_INDEX = 1e6;\r\nvar processModules = function(that, componentClass) {\r\n var modules = componentClass.modules;\r\n var modulesOrder = componentClass.modulesOrder;\r\n var controllerTypes = componentClass.controllerTypes || {};\r\n var viewTypes = componentClass.viewTypes || {};\r\n if (!componentClass.controllerTypes) {\r\n if (modulesOrder) {\r\n modules.sort(function(module1, module2) {\r\n var orderIndex1 = (0, _array.inArray)(module1.name, modulesOrder);\r\n var orderIndex2 = (0, _array.inArray)(module2.name, modulesOrder);\r\n if (orderIndex1 < 0) {\r\n orderIndex1 = MODULES_ORDER_MAX_INDEX\r\n }\r\n if (orderIndex2 < 0) {\r\n orderIndex2 = MODULES_ORDER_MAX_INDEX\r\n }\r\n return orderIndex1 - orderIndex2\r\n })\r\n }(0, _iterator.each)(modules, function() {\r\n var controllers = this.controllers;\r\n var moduleName = this.name;\r\n var views = this.views;\r\n controllers && (0, _iterator.each)(controllers, function(name, type) {\r\n if (controllerTypes[name]) {\r\n throw _ui.default.Error(\"E1001\", moduleName, name)\r\n } else {\r\n if (!(type && type.subclassOf && type.subclassOf(Controller))) {\r\n type.subclassOf(Controller);\r\n throw _ui.default.Error(\"E1002\", moduleName, name)\r\n }\r\n }\r\n controllerTypes[name] = type\r\n });\r\n views && (0, _iterator.each)(views, function(name, type) {\r\n if (viewTypes[name]) {\r\n throw _ui.default.Error(\"E1003\", moduleName, name)\r\n } else {\r\n if (!(type && type.subclassOf && type.subclassOf(View))) {\r\n throw _ui.default.Error(\"E1004\", moduleName, name)\r\n }\r\n }\r\n viewTypes[name] = type\r\n })\r\n });\r\n (0, _iterator.each)(modules, function() {\r\n var extenders = this.extenders;\r\n if (extenders) {\r\n extenders.controllers && (0, _iterator.each)(extenders.controllers, function(name, extender) {\r\n if (controllerTypes[name]) {\r\n controllerTypes[name] = controllerTypes[name].inherit(extender)\r\n }\r\n });\r\n extenders.views && (0, _iterator.each)(extenders.views, function(name, extender) {\r\n if (viewTypes[name]) {\r\n viewTypes[name] = viewTypes[name].inherit(extender)\r\n }\r\n })\r\n }\r\n });\r\n componentClass.controllerTypes = controllerTypes;\r\n componentClass.viewTypes = viewTypes\r\n }\r\n var registerPublicMethods = function(that, name, moduleItem) {\r\n var publicMethods = moduleItem.publicMethods();\r\n if (publicMethods) {\r\n (0, _iterator.each)(publicMethods, function(index, methodName) {\r\n if (moduleItem[methodName]) {\r\n if (!that[methodName]) {\r\n that[methodName] = function() {\r\n return moduleItem[methodName].apply(moduleItem, arguments)\r\n }\r\n } else {\r\n throw _ui.default.Error(\"E1005\", methodName)\r\n }\r\n } else {\r\n throw _ui.default.Error(\"E1006\", name, methodName)\r\n }\r\n })\r\n }\r\n };\r\n var createModuleItems = function(moduleTypes) {\r\n var moduleItems = {};\r\n (0, _iterator.each)(moduleTypes, function(name, moduleType) {\r\n var moduleItem = new moduleType(that);\r\n moduleItem.name = name;\r\n registerPublicMethods(that, name, moduleItem);\r\n moduleItems[name] = moduleItem\r\n });\r\n return moduleItems\r\n };\r\n that._controllers = createModuleItems(controllerTypes);\r\n that._views = createModuleItems(viewTypes)\r\n};\r\nvar callModuleItemsMethod = function(that, methodName, args) {\r\n args = args || [];\r\n if (that._controllers) {\r\n (0, _iterator.each)(that._controllers, function() {\r\n this[methodName] && this[methodName].apply(this, args)\r\n })\r\n }\r\n if (that._views) {\r\n (0, _iterator.each)(that._views, function() {\r\n this[methodName] && this[methodName].apply(this, args)\r\n })\r\n }\r\n};\r\nvar _default = {\r\n modules: [],\r\n View: View,\r\n ViewController: ViewController,\r\n Controller: Controller,\r\n registerModule: function(name, module) {\r\n var modules = this.modules;\r\n for (var i = 0; i < modules.length; i++) {\r\n if (modules[i].name === name) {\r\n return\r\n }\r\n }\r\n module.name = name;\r\n modules.push(module);\r\n delete this.controllerTypes;\r\n delete this.viewTypes\r\n },\r\n registerModulesOrder: function(moduleNames) {\r\n this.modulesOrder = moduleNames\r\n },\r\n unregisterModule: function(name) {\r\n this.modules = (0, _common.grep)(this.modules, function(module) {\r\n return module.name !== name\r\n });\r\n delete this.controllerTypes;\r\n delete this.viewTypes\r\n },\r\n processModules: processModules,\r\n callModuleItemsMethod: callModuleItemsMethod\r\n};\r\nexports.default = _default;\r\nmodule.exports = exports.default;\r\n","/**\r\n * DevExtreme (ui/grid_core/ui.grid_core.error_handling.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 _iterator = require(\"../../core/utils/iterator\");\r\nvar _uiGrid_core = _interopRequireDefault(require(\"./ui.grid_core.modules\"));\r\n\r\nfunction _interopRequireDefault(obj) {\r\n return obj && obj.__esModule ? obj : {\r\n \"default\": obj\r\n }\r\n}\r\nvar ERROR_ROW_CLASS = \"dx-error-row\";\r\nvar ERROR_MESSAGE_CLASS = \"dx-error-message\";\r\nvar ERROR_CLOSEBUTTON_CLASS = \"dx-closebutton\";\r\nvar ACTION_CLASS = \"action\";\r\nvar ErrorHandlingController = _uiGrid_core.default.ViewController.inherit({\r\n init: function() {\r\n var that = this;\r\n that._columnHeadersView = that.getView(\"columnHeadersView\");\r\n that._rowsView = that.getView(\"rowsView\")\r\n },\r\n _createErrorRow: function(error, $tableElements) {\r\n var that = this;\r\n var $errorRow;\r\n var $closeButton;\r\n var $errorMessage = this._renderErrorMessage(error);\r\n if ($tableElements) {\r\n $errorRow = (0, _renderer.default)(\"\").addClass(ERROR_ROW_CLASS);\r\n $closeButton = (0, _renderer.default)(\"
\").addClass(ERROR_CLOSEBUTTON_CLASS).addClass(that.addWidgetPrefix(ACTION_CLASS));\r\n _events_engine.default.on($closeButton, _click.name, that.createAction(function(args) {\r\n var e = args.event;\r\n var $errorRow;\r\n var errorRowIndex = (0, _renderer.default)(e.currentTarget).closest(\".\" + ERROR_ROW_CLASS).index();\r\n e.stopPropagation();\r\n (0, _iterator.each)($tableElements, function(_, tableElement) {\r\n $errorRow = (0, _renderer.default)(tableElement).children(\"tbody\").children(\"tr\").eq(errorRowIndex);\r\n that.removeErrorRow($errorRow)\r\n });\r\n that.getController(\"resizing\") && that.getController(\"resizing\").fireContentReadyAction()\r\n }));\r\n (0, _renderer.default)(\"\").attr({\r\n colSpan: that.getController(\"columns\").getVisibleColumns().length,\r\n role: \"presentation\"\r\n }).prepend($closeButton).append($errorMessage).appendTo($errorRow);\r\n return $errorRow\r\n }\r\n return $errorMessage\r\n },\r\n _renderErrorMessage: function(error) {\r\n var message = error.url ? error.message.replace(error.url, \"\") : error.message || error;\r\n var $message = (0, _renderer.default)(\"
\").addClass(ERROR_MESSAGE_CLASS).text(message);\r\n if (error.url) {\r\n (0, _renderer.default)(\"\").attr(\"href\", error.url).text(error.url).appendTo($message)\r\n }\r\n return $message\r\n },\r\n renderErrorRow: function(error, rowIndex, $popupContent) {\r\n var that = this;\r\n var $errorMessageElement;\r\n var $firstErrorRow;\r\n if ($popupContent) {\r\n $popupContent.find(\".\" + ERROR_MESSAGE_CLASS).remove();\r\n $errorMessageElement = that._createErrorRow(error);\r\n $popupContent.prepend($errorMessageElement);\r\n return $errorMessageElement\r\n }\r\n var viewElement = rowIndex >= 0 || !that._columnHeadersView.isVisible() ? that._rowsView : that._columnHeadersView;\r\n var $tableElements = $popupContent || viewElement.getTableElements();\r\n (0, _iterator.each)($tableElements, function(_, tableElement) {\r\n $errorMessageElement = that._createErrorRow(error, $tableElements);\r\n $firstErrorRow = $firstErrorRow || $errorMessageElement;\r\n if (rowIndex >= 0) {\r\n var $row = viewElement._getRowElements((0, _renderer.default)(tableElement)).eq(rowIndex);\r\n that.removeErrorRow($row.next());\r\n $errorMessageElement.insertAfter($row)\r\n } else {\r\n var $tbody = (0, _renderer.default)(tableElement).children(\"tbody\");\r\n var rowElements = $tbody.children(\"tr\");\r\n if (that._columnHeadersView.isVisible()) {\r\n that.removeErrorRow(rowElements.last());\r\n (0, _renderer.default)(tableElement).append($errorMessageElement)\r\n } else {\r\n that.removeErrorRow(rowElements.first());\r\n $tbody.first().prepend($errorMessageElement)\r\n }\r\n }\r\n });\r\n if (!$popupContent) {\r\n var resizingController = that.getController(\"resizing\");\r\n resizingController && resizingController.fireContentReadyAction()\r\n }\r\n return $firstErrorRow\r\n },\r\n removeErrorRow: function($row) {\r\n if (!$row) {\r\n var $columnHeaders = this._columnHeadersView && this._columnHeadersView.element();\r\n $row = $columnHeaders && $columnHeaders.find(\".\" + ERROR_ROW_CLASS);\r\n if (!$row || !$row.length) {\r\n var $rowsViewElement = this._rowsView.element();\r\n $row = $rowsViewElement && $rowsViewElement.find(\".\" + ERROR_ROW_CLASS)\r\n }\r\n }\r\n $row && $row.hasClass(ERROR_ROW_CLASS) && $row.remove()\r\n },\r\n optionChanged: function(args) {\r\n var that = this;\r\n switch (args.name) {\r\n case \"errorRowEnabled\":\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 errorRowEnabled: true\r\n }\r\n },\r\n controllers: {\r\n errorHandling: ErrorHandlingController\r\n },\r\n extenders: {\r\n controllers: {\r\n data: {\r\n init: function() {\r\n var that = this;\r\n var errorHandlingController = that.getController(\"errorHandling\");\r\n that.callBase();\r\n that.dataErrorOccurred.add(function(error, $popupContent) {\r\n if (that.option(\"errorRowEnabled\")) {\r\n errorHandlingController.renderErrorRow(error, void 0, $popupContent)\r\n }\r\n });\r\n that.changed.add(function(e) {\r\n if (e && \"loadError\" === e.changeType) {\r\n return\r\n }\r\n var errorHandlingController = that.getController(\"errorHandling\");\r\n var editingController = that.getController(\"editing\");\r\n if (editingController && !editingController.hasChanges()) {\r\n errorHandlingController && errorHandlingController.removeErrorRow()\r\n }\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.grid_view.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\n\r\nfunction _typeof(obj) {\r\n \"@babel/helpers - typeof\";\r\n if (\"function\" === typeof Symbol && \"symbol\" === typeof Symbol.iterator) {\r\n _typeof = function(obj) {\r\n return typeof obj\r\n }\r\n } else {\r\n _typeof = function(obj) {\r\n return obj && \"function\" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj\r\n }\r\n }\r\n return _typeof(obj)\r\n}\r\nexports.default = void 0;\r\nvar _renderer = _interopRequireDefault(require(\"../../core/renderer\"));\r\nvar _uiGrid_core = _interopRequireDefault(require(\"./ui.grid_core.modules\"));\r\nvar _common = require(\"../../core/utils/common\");\r\nvar _window = require(\"../../core/utils/window\");\r\nvar _iterator = require(\"../../core/utils/iterator\");\r\nvar _type = require(\"../../core/utils/type\");\r\nvar _position = require(\"../../core/utils/position\");\r\nvar _uiGrid_core2 = _interopRequireDefault(require(\"./ui.grid_core.utils\"));\r\nvar _message = _interopRequireDefault(require(\"../../localization/message\"));\r\nvar _deferred = require(\"../../core/utils/deferred\");\r\nvar _dom_adapter = _interopRequireDefault(require(\"../../core/dom_adapter\"));\r\nvar _browser = _interopRequireDefault(require(\"../../core/utils/browser\"));\r\nvar accessibility = _interopRequireWildcard(require(\"../shared/accessibility\"));\r\n\r\nfunction _getRequireWildcardCache() {\r\n if (\"function\" !== typeof WeakMap) {\r\n return null\r\n }\r\n var cache = new WeakMap;\r\n _getRequireWildcardCache = function() {\r\n return cache\r\n };\r\n return cache\r\n}\r\n\r\nfunction _interopRequireWildcard(obj) {\r\n if (obj && obj.__esModule) {\r\n return obj\r\n }\r\n if (null === obj || \"object\" !== _typeof(obj) && \"function\" !== typeof obj) {\r\n return {\r\n \"default\": obj\r\n }\r\n }\r\n var cache = _getRequireWildcardCache();\r\n if (cache && cache.has(obj)) {\r\n return cache.get(obj)\r\n }\r\n var newObj = {};\r\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\r\n for (var key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\r\n if (desc && (desc.get || desc.set)) {\r\n Object.defineProperty(newObj, key, desc)\r\n } else {\r\n newObj[key] = obj[key]\r\n }\r\n }\r\n }\r\n newObj.default = obj;\r\n if (cache) {\r\n cache.set(obj, newObj)\r\n }\r\n return newObj\r\n}\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 BORDERS_CLASS = \"borders\";\r\nvar TABLE_FIXED_CLASS = \"table-fixed\";\r\nvar IMPORTANT_MARGIN_CLASS = \"important-margin\";\r\nvar TEXT_CONTENT_CLASS = \"text-content\";\r\nvar HIDDEN_CLASS = \"dx-hidden\";\r\nvar GRIDBASE_CONTAINER_CLASS = \"dx-gridbase-container\";\r\nvar HIDDEN_COLUMNS_WIDTH = \"adaptiveHidden\";\r\nvar EDITORS_INPUT_SELECTOR = \"input:not([type='hidden'])\";\r\nvar VIEW_NAMES = [\"columnsSeparatorView\", \"blockSeparatorView\", \"trackerView\", \"headerPanel\", \"columnHeadersView\", \"rowsView\", \"footerView\", \"columnChooserView\", \"filterPanelView\", \"pagerView\", \"draggingHeaderView\", \"contextMenuView\", \"errorView\", \"headerFilterView\", \"filterBuilderView\"];\r\nvar isPercentWidth = function(width) {\r\n return (0, _type.isString)(width) && \"%\" === width.slice(-1)\r\n};\r\nvar isPixelWidth = function(width) {\r\n return (0, _type.isString)(width) && \"px\" === width.slice(-2)\r\n};\r\nvar mergeArraysByMaxValue = function(values1, values2) {\r\n var result = [];\r\n if (values1 && values2 && values1.length && values1.length === values2.length) {\r\n for (var i = 0; i < values1.length; i++) {\r\n result.push(values1[i] > values2[i] ? values1[i] : values2[i])\r\n }\r\n } else {\r\n if (values1 && values1.length) {\r\n result = values1\r\n } else {\r\n if (values2) {\r\n result = values2\r\n }\r\n }\r\n }\r\n return result\r\n};\r\nvar getContainerHeight = function($container) {\r\n var clientHeight = $container.get(0).clientHeight;\r\n var paddingTop = parseFloat($container.css(\"paddingTop\"));\r\n var paddingBottom = parseFloat($container.css(\"paddingBottom\"));\r\n return clientHeight - paddingTop - paddingBottom\r\n};\r\nvar calculateFreeWidth = function(that, widths) {\r\n var contentWidth = that._rowsView.contentWidth();\r\n var totalWidth = that._getTotalWidth(widths, contentWidth);\r\n return contentWidth - totalWidth\r\n};\r\nvar calculateFreeWidthWithCurrentMinWidth = function(that, columnIndex, currentMinWidth, widths) {\r\n return calculateFreeWidth(that, widths.map(function(width, index) {\r\n return index === columnIndex ? currentMinWidth : width\r\n }))\r\n};\r\nvar restoreFocus = function(focusedElement, selectionRange) {\r\n accessibility.hiddenFocus(focusedElement);\r\n _uiGrid_core2.default.setSelectionRange(focusedElement, selectionRange)\r\n};\r\nvar ResizingController = _uiGrid_core.default.ViewController.inherit({\r\n _initPostRenderHandlers: function() {\r\n var that = this;\r\n var dataController = that._dataController;\r\n if (!that._refreshSizesHandler) {\r\n that._refreshSizesHandler = function(e) {\r\n dataController.changed.remove(that._refreshSizesHandler);\r\n var resizeDeferred;\r\n var changeType = e && e.changeType;\r\n var isDelayed = e && e.isDelayed;\r\n var items = dataController.items();\r\n if (!e || \"refresh\" === changeType || \"prepend\" === changeType || \"append\" === changeType) {\r\n if (!isDelayed) {\r\n resizeDeferred = that.resize()\r\n }\r\n } else {\r\n if (\"update\" === changeType && e.changeTypes) {\r\n if ((items.length > 1 || \"insert\" !== e.changeTypes[0]) && !(0 === items.length && \"remove\" === e.changeTypes[0]) && !e.needUpdateDimensions) {\r\n (0, _common.deferUpdate)(function() {\r\n that._rowsView.resize()\r\n })\r\n } else {\r\n resizeDeferred = that.resize()\r\n }\r\n }\r\n }\r\n if (changeType && \"updateSelection\" !== changeType && \"updateFocusedRow\" !== changeType && !isDelayed) {\r\n (0, _deferred.when)(resizeDeferred).done(function() {\r\n that._setAriaRowColCount();\r\n that.fireContentReadyAction()\r\n })\r\n }\r\n };\r\n that._dataController.changed.add(function() {\r\n that._dataController.changed.add(that._refreshSizesHandler)\r\n })\r\n }\r\n },\r\n fireContentReadyAction: function() {\r\n this.component._fireContentReadyAction()\r\n },\r\n _setAriaRowColCount: function() {\r\n var component = this.component;\r\n component.setAria({\r\n rowCount: this._dataController.totalItemsCount(),\r\n colCount: component.columnCount()\r\n }, component.$element().children(\".\" + GRIDBASE_CONTAINER_CLASS))\r\n },\r\n _getBestFitWidths: function() {\r\n var _this$_footerView;\r\n var rowsView = this._rowsView;\r\n var columnHeadersView = this._columnHeadersView;\r\n if (!this.option(\"legacyRendering\")) {\r\n var _widths;\r\n var widths = rowsView.getColumnWidths();\r\n if (!(null !== (_widths = widths) && void 0 !== _widths && _widths.length)) {\r\n var _rowsView$getTableEle;\r\n var headersTableElement = columnHeadersView.getTableElement();\r\n columnHeadersView.setTableElement(null === (_rowsView$getTableEle = rowsView.getTableElement()) || void 0 === _rowsView$getTableEle ? void 0 : _rowsView$getTableEle.children(\".dx-header\"));\r\n widths = columnHeadersView.getColumnWidths();\r\n columnHeadersView.setTableElement(headersTableElement)\r\n }\r\n return widths\r\n }\r\n var rowsColumnWidths = rowsView.getColumnWidths();\r\n var headerColumnWidths = null === columnHeadersView || void 0 === columnHeadersView ? void 0 : columnHeadersView.getColumnWidths();\r\n var footerColumnWidths = null === (_this$_footerView = this._footerView) || void 0 === _this$_footerView ? void 0 : _this$_footerView.getColumnWidths();\r\n var resultWidths = mergeArraysByMaxValue(rowsColumnWidths, headerColumnWidths);\r\n resultWidths = mergeArraysByMaxValue(resultWidths, footerColumnWidths);\r\n return resultWidths\r\n },\r\n _setVisibleWidths: function(visibleColumns, widths) {\r\n var columnsController = this._columnsController;\r\n columnsController.beginUpdate();\r\n (0, _iterator.each)(visibleColumns, function(index, column) {\r\n var columnId = columnsController.getColumnId(column);\r\n columnsController.columnOption(columnId, \"visibleWidth\", widths[index])\r\n });\r\n columnsController.endUpdate()\r\n },\r\n _toggleBestFitModeForView: function(view, className, isBestFit) {\r\n var _this = this;\r\n if (!view || !view.isVisible()) {\r\n return\r\n }\r\n var $rowsTables = this._rowsView.getTableElements();\r\n var $viewTables = view.getTableElements();\r\n (0, _iterator.each)($rowsTables, function(index, tableElement) {\r\n var $tableBody;\r\n var $rowsTable = (0, _renderer.default)(tableElement);\r\n var $viewTable = $viewTables.eq(index);\r\n if ($viewTable && $viewTable.length) {\r\n if (isBestFit) {\r\n $tableBody = $viewTable.children(\"tbody\").appendTo($rowsTable)\r\n } else {\r\n $tableBody = $rowsTable.children(\".\" + className).appendTo($viewTable)\r\n }\r\n $tableBody.toggleClass(className, isBestFit);\r\n $tableBody.toggleClass(_this.addWidgetPrefix(\"best-fit\"), isBestFit)\r\n }\r\n })\r\n },\r\n _toggleBestFitMode: function(isBestFit) {\r\n var $element = this.component.$element();\r\n var that = this;\r\n if (!that.option(\"legacyRendering\")) {\r\n var $rowsTable = that._rowsView.getTableElement();\r\n var $rowsFixedTable = that._rowsView.getTableElements().eq(1);\r\n if (!$rowsTable) {\r\n return\r\n }\r\n $rowsTable.css(\"tableLayout\", isBestFit ? \"auto\" : \"fixed\");\r\n $rowsTable.children(\"colgroup\").css(\"display\", isBestFit ? \"none\" : \"\");\r\n $rowsFixedTable.toggleClass(this.addWidgetPrefix(TABLE_FIXED_CLASS), !isBestFit);\r\n that._toggleBestFitModeForView(that._columnHeadersView, \"dx-header\", isBestFit);\r\n that._toggleBestFitModeForView(that._footerView, \"dx-footer\", isBestFit);\r\n if (that._needStretch()) {\r\n $rowsTable.get(0).style.width = isBestFit ? \"auto\" : \"\"\r\n }\r\n if (_browser.default.msie && 11 === parseInt(_browser.default.version)) {\r\n $rowsTable.find(\".\" + this.addWidgetPrefix(TABLE_FIXED_CLASS)).each(function() {\r\n this.style.width = isBestFit ? \"10px\" : \"\"\r\n })\r\n }\r\n } else {\r\n $element.find(\".\" + this.addWidgetPrefix(TABLE_CLASS)).toggleClass(this.addWidgetPrefix(TABLE_FIXED_CLASS), !isBestFit);\r\n $element.find(EDITORS_INPUT_SELECTOR).toggleClass(HIDDEN_CLASS, isBestFit);\r\n $element.find(\".dx-group-cell\").toggleClass(HIDDEN_CLASS, isBestFit);\r\n $element.find(\".dx-header-row .\" + this.addWidgetPrefix(TEXT_CONTENT_CLASS)).css(\"maxWidth\", \"\")\r\n }\r\n },\r\n _synchronizeColumns: function() {\r\n var that = this;\r\n var columnsController = that._columnsController;\r\n var visibleColumns = columnsController.getVisibleColumns();\r\n var columnAutoWidth = that.option(\"columnAutoWidth\");\r\n var legacyRendering = that.option(\"legacyRendering\");\r\n var needBestFit = that._needBestFit();\r\n var hasMinWidth = false;\r\n var resetBestFitMode;\r\n var isColumnWidthsCorrected = false;\r\n var resultWidths = [];\r\n var focusedElement;\r\n var selectionRange;\r\n var normalizeWidthsByExpandColumns = function() {\r\n var expandColumnWidth;\r\n (0, _iterator.each)(visibleColumns, function(index, column) {\r\n if (\"groupExpand\" === column.type) {\r\n expandColumnWidth = resultWidths[index]\r\n }\r\n });\r\n (0, _iterator.each)(visibleColumns, function(index, column) {\r\n if (\"groupExpand\" === column.type && expandColumnWidth) {\r\n resultWidths[index] = expandColumnWidth\r\n }\r\n })\r\n };\r\n !needBestFit && (0, _iterator.each)(visibleColumns, function(index, column) {\r\n if (\"auto\" === column.width || legacyRendering && column.fixed) {\r\n needBestFit = true;\r\n return false\r\n }\r\n });\r\n (0, _iterator.each)(visibleColumns, function(index, column) {\r\n if (column.minWidth) {\r\n hasMinWidth = true;\r\n return false\r\n }\r\n });\r\n that._setVisibleWidths(visibleColumns, []);\r\n if (needBestFit) {\r\n focusedElement = _dom_adapter.default.getActiveElement();\r\n selectionRange = _uiGrid_core2.default.getSelectionRange(focusedElement);\r\n that._toggleBestFitMode(true);\r\n resetBestFitMode = true\r\n }(0, _common.deferUpdate)(function() {\r\n if (needBestFit) {\r\n resultWidths = that._getBestFitWidths();\r\n (0, _iterator.each)(visibleColumns, function(index, column) {\r\n var columnId = columnsController.getColumnId(column);\r\n columnsController.columnOption(columnId, \"bestFitWidth\", resultWidths[index], true)\r\n })\r\n } else {\r\n if (hasMinWidth) {\r\n resultWidths = that._getBestFitWidths()\r\n }\r\n }(0, _iterator.each)(visibleColumns, function(index) {\r\n var width = this.width;\r\n if (\"auto\" !== width) {\r\n if ((0, _type.isDefined)(width)) {\r\n resultWidths[index] = (0, _type.isNumeric)(width) || isPixelWidth(width) ? parseFloat(width) : width\r\n } else {\r\n if (!columnAutoWidth) {\r\n resultWidths[index] = void 0\r\n }\r\n }\r\n }\r\n });\r\n if (resetBestFitMode) {\r\n that._toggleBestFitMode(false);\r\n resetBestFitMode = false;\r\n if (focusedElement && focusedElement !== _dom_adapter.default.getActiveElement()) {\r\n var isFocusOutsideWindow = (0, _position.getBoundingRect)(focusedElement).bottom < 0;\r\n if (!isFocusOutsideWindow) {\r\n if (_browser.default.msie) {\r\n setTimeout(function() {\r\n restoreFocus(focusedElement, selectionRange)\r\n })\r\n } else {\r\n restoreFocus(focusedElement, selectionRange)\r\n }\r\n }\r\n }\r\n }\r\n isColumnWidthsCorrected = that._correctColumnWidths(resultWidths, visibleColumns);\r\n if (columnAutoWidth) {\r\n normalizeWidthsByExpandColumns();\r\n if (that._needStretch()) {\r\n that._processStretch(resultWidths, visibleColumns)\r\n }\r\n }(0, _common.deferRender)(function() {\r\n if (needBestFit || isColumnWidthsCorrected) {\r\n that._setVisibleWidths(visibleColumns, resultWidths)\r\n }\r\n })\r\n })\r\n },\r\n _needBestFit: function() {\r\n return this.option(\"columnAutoWidth\")\r\n },\r\n _needStretch: function() {\r\n return this.option(\"legacyRendering\") || this._columnsController.getVisibleColumns().some(function(c) {\r\n return \"auto\" === c.width && !c.command\r\n })\r\n },\r\n _getAverageColumnsWidth: function(resultWidths) {\r\n var freeWidth = calculateFreeWidth(this, resultWidths);\r\n var columnCountWithoutWidth = resultWidths.filter(function(width) {\r\n return void 0 === width\r\n }).length;\r\n return freeWidth / columnCountWithoutWidth\r\n },\r\n _correctColumnWidths: function(resultWidths, visibleColumns) {\r\n var that = this;\r\n var i;\r\n var hasPercentWidth = false;\r\n var hasAutoWidth = false;\r\n var isColumnWidthsCorrected = false;\r\n var $element = that.component.$element();\r\n var hasWidth = that._hasWidth;\r\n var _loop = function() {\r\n var index = i;\r\n var column = visibleColumns[index];\r\n var isHiddenColumn = resultWidths[index] === HIDDEN_COLUMNS_WIDTH;\r\n var width = resultWidths[index];\r\n var minWidth = column.minWidth;\r\n if (minWidth) {\r\n if (void 0 === width) {\r\n var averageColumnsWidth = that._getAverageColumnsWidth(resultWidths);\r\n width = averageColumnsWidth\r\n } else {\r\n if (isPercentWidth(width)) {\r\n var freeWidth = calculateFreeWidthWithCurrentMinWidth(that, index, minWidth, resultWidths);\r\n if (freeWidth < 0) {\r\n width = -1\r\n }\r\n }\r\n }\r\n }\r\n var realColumnWidth = that._getRealColumnWidth(index, resultWidths.map(function(columnWidth, columnIndex) {\r\n return index === columnIndex ? width : columnWidth\r\n }));\r\n if (minWidth && !isHiddenColumn && realColumnWidth < minWidth) {\r\n resultWidths[index] = minWidth;\r\n isColumnWidthsCorrected = true;\r\n i = -1\r\n }\r\n if (!(0, _type.isDefined)(column.width)) {\r\n hasAutoWidth = true\r\n }\r\n if (isPercentWidth(column.width)) {\r\n hasPercentWidth = true\r\n }\r\n };\r\n for (i = 0; i < visibleColumns.length; i++) {\r\n _loop()\r\n }\r\n if ($element && that._maxWidth) {\r\n delete that._maxWidth;\r\n $element.css(\"maxWidth\", \"\")\r\n }\r\n if (!hasAutoWidth && resultWidths.length) {\r\n var contentWidth = that._rowsView.contentWidth();\r\n var scrollbarWidth = that._rowsView.getScrollbarWidth();\r\n var totalWidth = that._getTotalWidth(resultWidths, contentWidth);\r\n if (totalWidth < contentWidth) {\r\n var lastColumnIndex = _uiGrid_core2.default.getLastResizableColumnIndex(visibleColumns, resultWidths);\r\n if (lastColumnIndex >= 0) {\r\n resultWidths[lastColumnIndex] = \"auto\";\r\n isColumnWidthsCorrected = true;\r\n if (false === hasWidth && !hasPercentWidth) {\r\n that._maxWidth = totalWidth + scrollbarWidth + (that.option(\"showBorders\") ? 2 : 0);\r\n $element.css(\"maxWidth\", that._maxWidth)\r\n }\r\n }\r\n }\r\n }\r\n return isColumnWidthsCorrected\r\n },\r\n _processStretch: function(resultSizes, visibleColumns) {\r\n var groupSize = this._rowsView.contentWidth();\r\n var tableSize = this._getTotalWidth(resultSizes, groupSize);\r\n var unusedIndexes = {\r\n length: 0\r\n };\r\n if (!resultSizes.length) {\r\n return\r\n }(0, _iterator.each)(visibleColumns, function(index) {\r\n if (this.width || resultSizes[index] === HIDDEN_COLUMNS_WIDTH) {\r\n unusedIndexes[index] = true;\r\n unusedIndexes.length++\r\n }\r\n });\r\n var diff = groupSize - tableSize;\r\n var diffElement = Math.floor(diff / (resultSizes.length - unusedIndexes.length));\r\n var onePixelElementsCount = diff - diffElement * (resultSizes.length - unusedIndexes.length);\r\n if (diff >= 0) {\r\n for (var i = 0; i < resultSizes.length; i++) {\r\n if (unusedIndexes[i]) {\r\n continue\r\n }\r\n resultSizes[i] += diffElement;\r\n if (onePixelElementsCount > 0) {\r\n if (onePixelElementsCount < 1) {\r\n resultSizes[i] += onePixelElementsCount;\r\n onePixelElementsCount = 0\r\n } else {\r\n resultSizes[i]++;\r\n onePixelElementsCount--\r\n }\r\n }\r\n }\r\n }\r\n },\r\n _getRealColumnWidth: function(columnIndex, columnWidths, groupWidth) {\r\n var ratio = 1;\r\n var width = columnWidths[columnIndex];\r\n if (!isPercentWidth(width)) {\r\n return parseFloat(width)\r\n }\r\n var percentTotalWidth = columnWidths.reduce(function(sum, width, index) {\r\n if (!isPercentWidth(width)) {\r\n return sum\r\n }\r\n return sum + parseFloat(width)\r\n }, 0);\r\n var pixelTotalWidth = columnWidths.reduce(function(sum, width) {\r\n if (!width || width === HIDDEN_COLUMNS_WIDTH || isPercentWidth(width)) {\r\n return sum\r\n }\r\n return sum + parseFloat(width)\r\n }, 0);\r\n groupWidth = groupWidth || this._rowsView.contentWidth();\r\n var freeSpace = groupWidth - pixelTotalWidth;\r\n var percentTotalWidthInPixel = percentTotalWidth * groupWidth / 100;\r\n if (pixelTotalWidth > 0 && percentTotalWidthInPixel + pixelTotalWidth >= groupWidth) {\r\n ratio = percentTotalWidthInPixel > freeSpace ? freeSpace / percentTotalWidthInPixel : 1\r\n }\r\n return parseFloat(width) * groupWidth * ratio / 100\r\n },\r\n _getTotalWidth: function(widths, groupWidth) {\r\n var result = 0;\r\n for (var i = 0; i < widths.length; i++) {\r\n var width = widths[i];\r\n if (width && width !== HIDDEN_COLUMNS_WIDTH) {\r\n result += this._getRealColumnWidth(i, widths, groupWidth)\r\n }\r\n }\r\n return Math.ceil(result)\r\n },\r\n updateSize: function($rootElement) {\r\n var that = this;\r\n var $groupElement;\r\n var width;\r\n var importantMarginClass = that.addWidgetPrefix(IMPORTANT_MARGIN_CLASS);\r\n if (void 0 === that._hasHeight && $rootElement && $rootElement.is(\":visible\") && $rootElement.width()) {\r\n $groupElement = $rootElement.children(\".\" + that.getWidgetContainerClass());\r\n if ($groupElement.length) {\r\n $groupElement.detach()\r\n }\r\n that._hasHeight = !!getContainerHeight($rootElement);\r\n width = $rootElement.width();\r\n $rootElement.addClass(importantMarginClass);\r\n that._hasWidth = $rootElement.width() === width;\r\n $rootElement.removeClass(importantMarginClass);\r\n if ($groupElement.length) {\r\n $groupElement.appendTo($rootElement)\r\n }\r\n }\r\n },\r\n publicMethods: function() {\r\n return [\"resize\", \"updateDimensions\"]\r\n },\r\n resize: function() {\r\n return !this.component._requireResize && this.updateDimensions()\r\n },\r\n updateDimensions: function(checkSize) {\r\n var that = this;\r\n that._initPostRenderHandlers();\r\n if (!that._checkSize(checkSize)) {\r\n return\r\n }\r\n var prevResult = that._resizeDeferred;\r\n var result = that._resizeDeferred = new _deferred.Deferred;\r\n (0, _deferred.when)(prevResult).always(function() {\r\n (0, _common.deferRender)(function() {\r\n if (that._dataController.isLoaded()) {\r\n that._synchronizeColumns()\r\n }\r\n that._resetGroupElementHeight();\r\n (0, _common.deferUpdate)(function() {\r\n (0, _common.deferRender)(function() {\r\n (0, _common.deferUpdate)(function() {\r\n that._updateDimensionsCore()\r\n })\r\n })\r\n })\r\n }).done(result.resolve).fail(result.reject)\r\n });\r\n return result.promise()\r\n },\r\n _resetGroupElementHeight: function() {\r\n var groupElement = this.component.$element().children().get(0);\r\n var scrollable = this._rowsView.getScrollable();\r\n if (groupElement && groupElement.style.height && (!scrollable || !scrollable.scrollTop())) {\r\n groupElement.style.height = \"\"\r\n }\r\n },\r\n _checkSize: function(checkSize) {\r\n var $rootElement = this.component.$element();\r\n if (checkSize && (this._lastWidth === $rootElement.width() && this._lastHeight === $rootElement.height() || !$rootElement.is(\":visible\"))) {\r\n return false\r\n }\r\n return true\r\n },\r\n _setScrollerSpacingCore: function(hasHeight) {\r\n var that = this;\r\n var vScrollbarWidth = hasHeight ? that._rowsView.getScrollbarWidth() : 0;\r\n var hScrollbarWidth = that._rowsView.getScrollbarWidth(true);\r\n (0, _common.deferRender)(function() {\r\n that._columnHeadersView && that._columnHeadersView.setScrollerSpacing(vScrollbarWidth);\r\n that._footerView && that._footerView.setScrollerSpacing(vScrollbarWidth);\r\n that._rowsView.setScrollerSpacing(vScrollbarWidth, hScrollbarWidth)\r\n })\r\n },\r\n _setScrollerSpacing: function(hasHeight) {\r\n var _this2 = this;\r\n if (true === this.option(\"scrolling.useNative\")) {\r\n (0, _common.deferRender)(function() {\r\n (0, _common.deferUpdate)(function() {\r\n _this2._setScrollerSpacingCore(hasHeight)\r\n })\r\n })\r\n } else {\r\n this._setScrollerSpacingCore(hasHeight)\r\n }\r\n },\r\n _updateDimensionsCore: function() {\r\n var that = this;\r\n var dataController = that._dataController;\r\n var rowsView = that._rowsView;\r\n var $rootElement = that.component.$element();\r\n var groupElement = $rootElement.children().get(0);\r\n var rootElementHeight = $rootElement && ($rootElement.get(0).clientHeight || $rootElement.height());\r\n var maxHeight = parseInt($rootElement.css(\"maxHeight\"));\r\n var maxHeightHappened = maxHeight && rootElementHeight >= maxHeight;\r\n var height = that.option(\"height\") || $rootElement.get(0).style.height;\r\n var editorFactory = that.getController(\"editorFactory\");\r\n var isMaxHeightApplied = maxHeightHappened && groupElement.scrollHeight === groupElement.offsetHeight;\r\n var $testDiv;\r\n that.updateSize($rootElement);\r\n var hasHeight = that._hasHeight || maxHeightHappened;\r\n if (height && that._hasHeight ^ \"auto\" !== height) {\r\n $testDiv = (0, _renderer.default)(\"
\").height(height).appendTo($rootElement);\r\n that._hasHeight = !!$testDiv.height();\r\n $testDiv.remove()\r\n }(0, _common.deferRender)(function() {\r\n rowsView.height(null, hasHeight);\r\n if (maxHeightHappened && !isMaxHeightApplied) {\r\n (0, _renderer.default)(groupElement).css(\"height\", maxHeight)\r\n }\r\n if (!dataController.isLoaded()) {\r\n rowsView.setLoading(dataController.isLoading());\r\n return\r\n }(0, _common.deferUpdate)(function() {\r\n that._updateLastSizes($rootElement);\r\n that._setScrollerSpacing(hasHeight);\r\n (0, _iterator.each)(VIEW_NAMES, function(index, viewName) {\r\n var view = that.getView(viewName);\r\n if (view) {\r\n view.resize()\r\n }\r\n });\r\n editorFactory && editorFactory.resize()\r\n })\r\n })\r\n },\r\n _updateLastSizes: function($rootElement) {\r\n this._lastWidth = $rootElement.width();\r\n this._lastHeight = $rootElement.height()\r\n },\r\n optionChanged: function(args) {\r\n switch (args.name) {\r\n case \"width\":\r\n case \"height\":\r\n this.component._renderDimensions();\r\n this.resize();\r\n case \"legacyRendering\":\r\n case \"renderAsync\":\r\n args.handled = true;\r\n return;\r\n default:\r\n this.callBase(args)\r\n }\r\n },\r\n init: function() {\r\n var that = this;\r\n that._dataController = that.getController(\"data\");\r\n that._columnsController = that.getController(\"columns\");\r\n that._columnHeadersView = that.getView(\"columnHeadersView\");\r\n that._footerView = that.getView(\"footerView\");\r\n that._rowsView = that.getView(\"rowsView\")\r\n }\r\n});\r\nvar SynchronizeScrollingController = _uiGrid_core.default.ViewController.inherit({\r\n _scrollChangedHandler: function(views, pos, viewName) {\r\n for (var j = 0; j < views.length; j++) {\r\n if (views[j] && views[j].name !== viewName) {\r\n views[j].scrollTo({\r\n left: pos.left,\r\n top: pos.top\r\n })\r\n }\r\n }\r\n },\r\n init: function() {\r\n var views = [this.getView(\"columnHeadersView\"), this.getView(\"footerView\"), this.getView(\"rowsView\")];\r\n for (var i = 0; i < views.length; i++) {\r\n var view = views[i];\r\n if (view) {\r\n view.scrollChanged.add(this._scrollChangedHandler.bind(this, views))\r\n }\r\n }\r\n }\r\n});\r\nvar GridView = _uiGrid_core.default.View.inherit({\r\n _endUpdateCore: function() {\r\n if (this.component._requireResize) {\r\n this.component._requireResize = false;\r\n this._resizingController.resize()\r\n }\r\n },\r\n _getWidgetAriaLabel: function() {\r\n return \"dxDataGrid-ariaDataGrid\"\r\n },\r\n init: function() {\r\n var that = this;\r\n that._resizingController = that.getController(\"resizing\");\r\n that._dataController = that.getController(\"data\")\r\n },\r\n getView: function(name) {\r\n return this.component._views[name]\r\n },\r\n element: function() {\r\n return this._groupElement\r\n },\r\n optionChanged: function(args) {\r\n var that = this;\r\n if ((0, _type.isDefined)(that._groupElement) && \"showBorders\" === args.name) {\r\n that._groupElement.toggleClass(that.addWidgetPrefix(BORDERS_CLASS), !!args.value);\r\n args.handled = true\r\n } else {\r\n that.callBase(args)\r\n }\r\n },\r\n _renderViews: function($groupElement) {\r\n var that = this;\r\n (0, _iterator.each)(VIEW_NAMES, function(index, viewName) {\r\n var view = that.getView(viewName);\r\n if (view) {\r\n view.render($groupElement)\r\n }\r\n })\r\n },\r\n _getTableRoleName: function() {\r\n return \"grid\"\r\n },\r\n render: function($rootElement) {\r\n var that = this;\r\n var isFirstRender = !that._groupElement;\r\n var $groupElement = that._groupElement || (0, _renderer.default)(\"
\").addClass(that.getWidgetContainerClass());\r\n $groupElement.addClass(GRIDBASE_CONTAINER_CLASS);\r\n $groupElement.toggleClass(that.addWidgetPrefix(BORDERS_CLASS), !!that.option(\"showBorders\"));\r\n that.setAria(\"role\", \"presentation\", $rootElement);\r\n that.component.setAria({\r\n role: this._getTableRoleName(),\r\n label: _message.default.format(that._getWidgetAriaLabel())\r\n }, $groupElement);\r\n that._rootElement = $rootElement || that._rootElement;\r\n if (isFirstRender) {\r\n that._groupElement = $groupElement;\r\n (0, _window.hasWindow)() && that.getController(\"resizing\").updateSize($rootElement);\r\n $groupElement.appendTo($rootElement)\r\n }\r\n that._renderViews($groupElement)\r\n },\r\n update: function() {\r\n var that = this;\r\n var $rootElement = that._rootElement;\r\n var $groupElement = that._groupElement;\r\n var resizingController = that.getController(\"resizing\");\r\n if ($rootElement && $groupElement) {\r\n resizingController.resize();\r\n if (that._dataController.isLoaded()) {\r\n that._resizingController.fireContentReadyAction()\r\n }\r\n }\r\n }\r\n});\r\nvar _default = {\r\n defaultOptions: function() {\r\n return {\r\n showBorders: false,\r\n renderAsync: false,\r\n legacyRendering: false\r\n }\r\n },\r\n controllers: {\r\n resizing: ResizingController,\r\n synchronizeScrolling: SynchronizeScrollingController\r\n },\r\n views: {\r\n gridView: GridView\r\n }\r\n};\r\nexports.default = _default;\r\nmodule.exports = exports.default;\r\n","/**\r\n * DevExtreme (ui/grid_core/ui.grid_core.header_panel.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 _toolbar = _interopRequireDefault(require(\"../toolbar\"));\r\nvar _uiGrid_core = require(\"./ui.grid_core.columns_view\");\r\nvar _common = require(\"../../core/utils/common\");\r\nvar _type = require(\"../../core/utils/type\");\r\nvar _visibility_change = require(\"../../events/visibility_change\");\r\nvar _message = _interopRequireDefault(require(\"../../localization/message\"));\r\nrequire(\"../drop_down_menu\");\r\n\r\nfunction _interopRequireDefault(obj) {\r\n return obj && obj.__esModule ? obj : {\r\n \"default\": obj\r\n }\r\n}\r\nvar HEADER_PANEL_CLASS = \"header-panel\";\r\nvar TOOLBAR_BUTTON_CLASS = \"toolbar-button\";\r\nvar TOOLBAR_ARIA_LABEL = \"-ariaToolbar\";\r\nvar HeaderPanel = _uiGrid_core.ColumnsView.inherit({\r\n _getToolbarItems: function() {\r\n return []\r\n },\r\n _getButtonContainer: function() {\r\n return (0, _renderer.default)(\"
\").addClass(this.addWidgetPrefix(TOOLBAR_BUTTON_CLASS))\r\n },\r\n _getToolbarButtonClass: function(specificClass) {\r\n var secondClass = specificClass ? \" \" + specificClass : \"\";\r\n return this.addWidgetPrefix(TOOLBAR_BUTTON_CLASS) + secondClass\r\n },\r\n _getToolbarOptions: function() {\r\n var options = {\r\n toolbarOptions: {\r\n items: this._getToolbarItems(),\r\n onItemRendered: function(e) {\r\n var itemRenderedCallback = e.itemData.onItemRendered;\r\n if (itemRenderedCallback) {\r\n itemRenderedCallback(e)\r\n }\r\n }\r\n }\r\n };\r\n this.executeAction(\"onToolbarPreparing\", options);\r\n if (options.toolbarOptions && !(0, _type.isDefined)(options.toolbarOptions.visible)) {\r\n var toolbarItems = options.toolbarOptions.items;\r\n options.toolbarOptions.visible = !!(toolbarItems && toolbarItems.length)\r\n }\r\n return options.toolbarOptions\r\n },\r\n _renderCore: function() {\r\n if (!this._toolbar) {\r\n var $headerPanel = this.element();\r\n $headerPanel.addClass(this.addWidgetPrefix(HEADER_PANEL_CLASS));\r\n var label = _message.default.format(this.component.NAME + TOOLBAR_ARIA_LABEL);\r\n var $toolbar = (0, _renderer.default)(\"
\").attr(\"aria-label\", label).appendTo($headerPanel);\r\n this._toolbar = this._createComponent($toolbar, _toolbar.default, this._toolbarOptions)\r\n } else {\r\n this._toolbar.option(this._toolbarOptions)\r\n }\r\n },\r\n _columnOptionChanged: _common.noop,\r\n _handleDataChanged: function() {\r\n if (this._requireReady) {\r\n this.render()\r\n }\r\n },\r\n init: function() {\r\n this.callBase();\r\n this.createAction(\"onToolbarPreparing\", {\r\n excludeValidators: [\"disabled\", \"readOnly\"]\r\n })\r\n },\r\n render: function() {\r\n this._toolbarOptions = this._getToolbarOptions();\r\n this.callBase.apply(this, arguments)\r\n },\r\n setToolbarItemDisabled: function(name, optionValue) {\r\n var toolbarInstance = this._toolbar;\r\n if (toolbarInstance) {\r\n var items = toolbarInstance.option(\"items\") || [];\r\n var itemIndex = items.indexOf(items.filter(function(item) {\r\n return item.name === name\r\n })[0]);\r\n if (itemIndex >= 0) {\r\n var itemOptionPrefix = \"items[\" + itemIndex + \"]\";\r\n if (toolbarInstance.option(itemOptionPrefix + \".options\")) {\r\n toolbarInstance.option(itemOptionPrefix + \".options.disabled\", optionValue)\r\n } else {\r\n toolbarInstance.option(itemOptionPrefix + \".disabled\", optionValue)\r\n }\r\n }\r\n }\r\n },\r\n updateToolbarDimensions: function() {\r\n if (this._toolbar) {\r\n (0, _visibility_change.triggerResizeEvent)(this.getHeaderPanel())\r\n }\r\n },\r\n getHeaderPanel: function() {\r\n return this.element()\r\n },\r\n getHeight: function() {\r\n return this.getElementHeight()\r\n },\r\n optionChanged: function(args) {\r\n if (\"onToolbarPreparing\" === args.name) {\r\n this._invalidate();\r\n args.handled = true\r\n }\r\n this.callBase(args)\r\n },\r\n isVisible: function() {\r\n return this._toolbarOptions && this._toolbarOptions.visible\r\n },\r\n allowDragging: _common.noop\r\n});\r\nvar _default = {\r\n defaultOptions: function() {\r\n return {}\r\n },\r\n views: {\r\n headerPanel: HeaderPanel\r\n },\r\n extenders: {\r\n controllers: {\r\n resizing: {\r\n _updateDimensionsCore: function() {\r\n this.callBase.apply(this, arguments);\r\n this.getView(\"headerPanel\").updateToolbarDimensions()\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.master_detail.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 _uiGrid_core = _interopRequireDefault(require(\"./ui.grid_core.utils\"));\r\nvar _common = require(\"../../core/utils/common\");\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 MASTER_DETAIL_CELL_CLASS = \"dx-master-detail-cell\";\r\nvar MASTER_DETAIL_ROW_CLASS = \"dx-master-detail-row\";\r\nvar CELL_FOCUS_DISABLED_CLASS = \"dx-cell-focus-disabled\";\r\nvar ROW_LINES_CLASS = \"dx-row-lines\";\r\nvar _default = {\r\n defaultOptions: function() {\r\n return {\r\n masterDetail: {\r\n enabled: false,\r\n autoExpandAll: false,\r\n template: null\r\n }\r\n }\r\n },\r\n extenders: {\r\n controllers: {\r\n columns: {\r\n _getExpandColumnsCore: function() {\r\n var expandColumns = this.callBase();\r\n if (this.option(\"masterDetail.enabled\")) {\r\n expandColumns.push({\r\n type: \"detailExpand\",\r\n cellTemplate: _uiGrid_core.default.getExpandCellTemplate()\r\n })\r\n }\r\n return expandColumns\r\n }\r\n },\r\n data: function() {\r\n var initMasterDetail = function(that) {\r\n that._expandedItems = [];\r\n that._isExpandAll = that.option(\"masterDetail.autoExpandAll\")\r\n };\r\n return {\r\n init: function() {\r\n var that = this;\r\n initMasterDetail(that);\r\n that.callBase()\r\n },\r\n expandAll: function(groupIndex) {\r\n var that = this;\r\n if (groupIndex < 0) {\r\n that._isExpandAll = true;\r\n that._expandedItems = [];\r\n that.updateItems()\r\n } else {\r\n that.callBase.apply(that, arguments)\r\n }\r\n },\r\n collapseAll: function(groupIndex) {\r\n var that = this;\r\n if (groupIndex < 0) {\r\n that._isExpandAll = false;\r\n that._expandedItems = [];\r\n that.updateItems()\r\n } else {\r\n that.callBase.apply(that, arguments)\r\n }\r\n },\r\n isRowExpanded: function(key) {\r\n var that = this;\r\n var expandIndex = _uiGrid_core.default.getIndexByKey(key, that._expandedItems);\r\n if (Array.isArray(key)) {\r\n return that.callBase.apply(that, arguments)\r\n } else {\r\n return !!(that._isExpandAll ^ (expandIndex >= 0 && that._expandedItems[expandIndex].visible))\r\n }\r\n },\r\n _getRowIndicesForExpand: function(key) {\r\n var rowIndex = this.getRowIndexByKey(key);\r\n return [rowIndex, rowIndex + 1]\r\n },\r\n _changeRowExpandCore: function(key) {\r\n var that = this;\r\n var result;\r\n if (Array.isArray(key)) {\r\n result = that.callBase.apply(that, arguments)\r\n } else {\r\n var expandIndex = _uiGrid_core.default.getIndexByKey(key, that._expandedItems);\r\n if (expandIndex >= 0) {\r\n var visible = that._expandedItems[expandIndex].visible;\r\n that._expandedItems[expandIndex].visible = !visible\r\n } else {\r\n that._expandedItems.push({\r\n key: key,\r\n visible: true\r\n })\r\n }\r\n that.updateItems({\r\n changeType: \"update\",\r\n rowIndices: that._getRowIndicesForExpand(key)\r\n });\r\n result = (new _deferred.Deferred).resolve()\r\n }\r\n return result\r\n },\r\n _processDataItem: function(data, options) {\r\n var that = this;\r\n var dataItem = that.callBase.apply(that, arguments);\r\n dataItem.isExpanded = that.isRowExpanded(dataItem.key);\r\n if (void 0 === options.detailColumnIndex) {\r\n options.detailColumnIndex = -1;\r\n (0, _iterator.each)(options.visibleColumns, function(index, column) {\r\n if (\"expand\" === column.command && !(0, _type.isDefined)(column.groupIndex)) {\r\n options.detailColumnIndex = index;\r\n return false\r\n }\r\n })\r\n }\r\n if (options.detailColumnIndex >= 0) {\r\n dataItem.values[options.detailColumnIndex] = dataItem.isExpanded\r\n }\r\n return dataItem\r\n },\r\n _processItems: function(items, change) {\r\n var that = this;\r\n var changeType = change.changeType;\r\n var result = [];\r\n items = that.callBase.apply(that, arguments);\r\n if (\"loadingAll\" === changeType) {\r\n return items\r\n }\r\n if (\"refresh\" === changeType) {\r\n that._expandedItems = (0, _common.grep)(that._expandedItems, function(item) {\r\n return item.visible\r\n })\r\n }(0, _iterator.each)(items, function(index, item) {\r\n result.push(item);\r\n var expandIndex = _uiGrid_core.default.getIndexByKey(item.key, that._expandedItems);\r\n if (\"data\" === item.rowType && (item.isExpanded || expandIndex >= 0) && !item.isNewRow) {\r\n result.push({\r\n visible: item.isExpanded,\r\n rowType: \"detail\",\r\n key: item.key,\r\n data: item.data,\r\n values: []\r\n })\r\n }\r\n });\r\n return result\r\n },\r\n optionChanged: function(args) {\r\n var that = this;\r\n var isEnabledChanged;\r\n var isAutoExpandAllChanged;\r\n if (\"masterDetail\" === args.name) {\r\n args.name = \"dataSource\";\r\n switch (args.fullName) {\r\n case \"masterDetail\":\r\n var value = args.value || {};\r\n var previousValue = args.previousValue || {};\r\n isEnabledChanged = value.enabled !== previousValue.enabled;\r\n isAutoExpandAllChanged = value.autoExpandAll !== previousValue.autoExpandAll;\r\n break;\r\n case \"masterDetail.enabled\":\r\n isEnabledChanged = true;\r\n break;\r\n case \"masterDetail.autoExpandAll\":\r\n isAutoExpandAllChanged = true\r\n }\r\n if (isEnabledChanged || isAutoExpandAllChanged) {\r\n initMasterDetail(that)\r\n }\r\n }\r\n that.callBase(args)\r\n }\r\n }\r\n }(),\r\n resizing: {\r\n fireContentReadyAction: function() {\r\n this.callBase.apply(this, arguments);\r\n this._updateParentDataGrids(this.component.$element())\r\n },\r\n _updateParentDataGrids: function($element) {\r\n var _this = this;\r\n var $masterDetailRow = $element.closest(\".\" + MASTER_DETAIL_ROW_CLASS);\r\n if ($masterDetailRow.length) {\r\n (0, _deferred.when)(this._updateMasterDataGrid($masterDetailRow, $element)).done(function() {\r\n _this._updateParentDataGrids($masterDetailRow.parent())\r\n })\r\n }\r\n },\r\n _updateMasterDataGrid: function($masterDetailRow, $detailElement) {\r\n var masterRowOptions = (0, _renderer.default)($masterDetailRow).data(\"options\");\r\n var masterDataGrid = (0, _renderer.default)($masterDetailRow).closest(\".\" + this.getWidgetContainerClass()).parent().data(\"dxDataGrid\");\r\n if (masterRowOptions && masterDataGrid) {\r\n if (masterDataGrid.getView(\"rowsView\").isFixedColumns()) {\r\n this._updateFixedMasterDetailGrids(masterDataGrid, masterRowOptions.rowIndex, $detailElement)\r\n } else {\r\n var scrollable = masterDataGrid.getScrollable();\r\n return scrollable && scrollable.update()\r\n }\r\n }\r\n },\r\n _updateFixedMasterDetailGrids: function(masterDataGrid, masterRowIndex, $detailElement) {\r\n var _this2 = this;\r\n var $rows = (0, _renderer.default)(masterDataGrid.getRowElement(masterRowIndex));\r\n if ($rows && 2 === $rows.length && $rows.eq(0).height() !== $rows.eq(1).height()) {\r\n var detailElementWidth = $detailElement.width();\r\n return masterDataGrid.updateDimensions().done(function() {\r\n var isDetailHorizontalScrollCanBeShown = _this2.option(\"columnAutoWidth\") && true === masterDataGrid.option(\"scrolling.useNative\");\r\n var isDetailGridWidthChanged = isDetailHorizontalScrollCanBeShown && detailElementWidth !== $detailElement.width();\r\n if (isDetailHorizontalScrollCanBeShown && isDetailGridWidthChanged) {\r\n _this2.updateDimensions()\r\n }\r\n })\r\n }\r\n },\r\n _toggleBestFitMode: function(isBestFit) {\r\n this.callBase.apply(this, arguments);\r\n if (this.option(\"masterDetail.template\")) {\r\n var $rowsTable = this._rowsView.getTableElement();\r\n if ($rowsTable) {\r\n $rowsTable.find(\".dx-master-detail-cell\").css(\"maxWidth\", isBestFit ? 0 : \"\")\r\n }\r\n }\r\n }\r\n }\r\n },\r\n views: {\r\n rowsView: function() {\r\n return {\r\n _getCellTemplate: function(options) {\r\n var that = this;\r\n var column = options.column;\r\n var editingController = that.getController(\"editing\");\r\n var isEditRow = editingController && editingController.isEditRow(options.rowIndex);\r\n var template;\r\n if (\"detail\" === column.command && !isEditRow) {\r\n template = that.option(\"masterDetail.template\") || {\r\n allowRenderToDetachedContainer: false,\r\n render: that._getDefaultTemplate(column)\r\n }\r\n } else {\r\n template = that.callBase.apply(that, arguments)\r\n }\r\n return template\r\n },\r\n _isDetailRow: function(row) {\r\n return row && row.rowType && 0 === row.rowType.indexOf(\"detail\")\r\n },\r\n _createRow: function(row) {\r\n var $row = this.callBase(row);\r\n if (row && this._isDetailRow(row)) {\r\n this.option(\"showRowLines\") && $row.addClass(ROW_LINES_CLASS);\r\n $row.addClass(MASTER_DETAIL_ROW_CLASS);\r\n if ((0, _type.isDefined)(row.visible)) {\r\n $row.toggle(row.visible)\r\n }\r\n }\r\n return $row\r\n },\r\n _renderCells: function($row, options) {\r\n var row = options.row;\r\n var $detailCell;\r\n var visibleColumns = this._columnsController.getVisibleColumns();\r\n if (row.rowType && this._isDetailRow(row)) {\r\n if (this._needRenderCell(0, options.columnIndices)) {\r\n $detailCell = this._renderCell($row, {\r\n value: null,\r\n row: row,\r\n rowIndex: row.rowIndex,\r\n column: {\r\n command: \"detail\"\r\n },\r\n columnIndex: 0\r\n });\r\n $detailCell.addClass(CELL_FOCUS_DISABLED_CLASS).addClass(MASTER_DETAIL_CELL_CLASS).attr(\"colSpan\", visibleColumns.length)\r\n }\r\n } else {\r\n this.callBase.apply(this, arguments)\r\n }\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.editor_factory.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 _events_engine = _interopRequireDefault(require(\"../../events/core/events_engine\"));\r\nvar _uiGrid_core = _interopRequireDefault(require(\"./ui.grid_core.modules\"));\r\nvar _click = require(\"../../events/click\");\r\nvar _pointer = _interopRequireDefault(require(\"../../events/pointer\"));\r\nvar _position = _interopRequireDefault(require(\"../../animation/position\"));\r\nvar _index = require(\"../../events/utils/index\");\r\nvar _browser = _interopRequireDefault(require(\"../../core/utils/browser\"));\r\nvar _extend = require(\"../../core/utils/extend\");\r\nvar _position2 = require(\"../../core/utils/position\");\r\nvar _ui = _interopRequireDefault(require(\"../shared/ui.editor_factory_mixin\"));\r\nvar _uiGrid_core2 = _interopRequireDefault(require(\"./ui.grid_core.utils\"));\r\n\r\nfunction _interopRequireDefault(obj) {\r\n return obj && obj.__esModule ? obj : {\r\n \"default\": obj\r\n }\r\n}\r\nvar EDITOR_INLINE_BLOCK = \"dx-editor-inline-block\";\r\nvar CELL_FOCUS_DISABLED_CLASS = \"dx-cell-focus-disabled\";\r\nvar FOCUS_OVERLAY_CLASS = \"focus-overlay\";\r\nvar CONTENT_CLASS = \"content\";\r\nvar FOCUSED_ELEMENT_CLASS = \"dx-focused\";\r\nvar ROW_CLASS = \"dx-row\";\r\nvar MODULE_NAMESPACE = \"dxDataGridEditorFactory\";\r\nvar UPDATE_FOCUS_EVENTS = (0, _index.addNamespace)([_pointer.default.down, \"focusin\", _click.name].join(\" \"), MODULE_NAMESPACE);\r\nvar DX_HIDDEN = \"dx-hidden\";\r\nvar EditorFactory = _uiGrid_core.default.ViewController.inherit({\r\n _getFocusedElement: function($dataGridElement) {\r\n var rowSelector = this.option(\"focusedRowEnabled\") ? \"tr[tabindex]:focus\" : \"tr[tabindex]:not(.dx-data-row):focus\";\r\n var focusedElementSelector = \"td[tabindex]:focus, \".concat(rowSelector, \", input:focus, textarea:focus, .dx-lookup-field:focus, .dx-checkbox:focus, .dx-switch:focus, .dx-dropdownbutton .dx-buttongroup:focus\");\r\n return $dataGridElement.find(focusedElementSelector)\r\n },\r\n _getFocusCellSelector: function() {\r\n return \".dx-row > td\"\r\n },\r\n _updateFocusCore: function() {\r\n var $focus = this._$focusedElement;\r\n var $dataGridElement = this.component && this.component.$element();\r\n var $focusCell;\r\n var hideBorders;\r\n if ($dataGridElement) {\r\n $focus = this._getFocusedElement($dataGridElement);\r\n if ($focus.length) {\r\n if (!$focus.hasClass(CELL_FOCUS_DISABLED_CLASS) && !$focus.hasClass(ROW_CLASS)) {\r\n $focusCell = $focus.closest(this._getFocusCellSelector() + \", .\" + CELL_FOCUS_DISABLED_CLASS);\r\n hideBorders = $focusCell.get(0) !== $focus.get(0) && $focusCell.hasClass(EDITOR_INLINE_BLOCK);\r\n $focus = $focusCell\r\n }\r\n if ($focus.length && !$focus.hasClass(CELL_FOCUS_DISABLED_CLASS)) {\r\n this.focus($focus, hideBorders);\r\n return\r\n }\r\n }\r\n }\r\n this.loseFocus()\r\n },\r\n _updateFocus: function(e) {\r\n var that = this;\r\n var isFocusOverlay = e && e.event && (0, _renderer.default)(e.event.target).hasClass(that.addWidgetPrefix(FOCUS_OVERLAY_CLASS));\r\n that._isFocusOverlay = that._isFocusOverlay || isFocusOverlay;\r\n clearTimeout(that._updateFocusTimeoutID);\r\n that._updateFocusTimeoutID = setTimeout(function() {\r\n delete that._updateFocusTimeoutID;\r\n if (!that._isFocusOverlay) {\r\n that._updateFocusCore()\r\n }\r\n that._isFocusOverlay = false\r\n })\r\n },\r\n _updateFocusOverlaySize: function($element, position) {\r\n $element.hide();\r\n var location = _position.default.calculate($element, (0, _extend.extend)({\r\n collision: \"fit\"\r\n }, position));\r\n if (location.h.oversize > 0) {\r\n $element.outerWidth($element.outerWidth() - location.h.oversize)\r\n }\r\n if (location.v.oversize > 0) {\r\n $element.outerHeight($element.outerHeight() - location.v.oversize)\r\n }\r\n $element.show()\r\n },\r\n callbackNames: function() {\r\n return [\"focused\"]\r\n },\r\n focus: function($element, hideBorder) {\r\n var that = this;\r\n if (void 0 === $element) {\r\n return that._$focusedElement\r\n } else {\r\n if ($element) {\r\n if (!$element.is(that._$focusedElement)) {\r\n that._$focusedElement && that._$focusedElement.removeClass(FOCUSED_ELEMENT_CLASS)\r\n }\r\n that._$focusedElement = $element;\r\n clearTimeout(that._focusTimeoutID);\r\n that._focusTimeoutID = setTimeout(function() {\r\n delete that._focusTimeoutID;\r\n that.renderFocusOverlay($element, hideBorder);\r\n $element.addClass(FOCUSED_ELEMENT_CLASS);\r\n that.focused.fire($element)\r\n })\r\n }\r\n }\r\n },\r\n refocus: function() {\r\n var $focus = this.focus();\r\n this.focus($focus)\r\n },\r\n renderFocusOverlay: function($element, hideBorder) {\r\n var that = this;\r\n if (!_uiGrid_core2.default.isElementInCurrentGrid(this, $element)) {\r\n return\r\n }\r\n if (!that._$focusOverlay) {\r\n that._$focusOverlay = (0, _renderer.default)(\"
\").addClass(that.addWidgetPrefix(FOCUS_OVERLAY_CLASS))\r\n }\r\n if (hideBorder) {\r\n that._$focusOverlay.addClass(DX_HIDDEN)\r\n } else {\r\n if ($element.length) {\r\n var align = _browser.default.msie ? \"left bottom\" : _browser.default.mozilla ? \"right bottom\" : \"left top\";\r\n var $content = $element.closest(\".\" + that.addWidgetPrefix(CONTENT_CLASS));\r\n var elemCoord = (0, _position2.getBoundingRect)($element.get(0));\r\n that._$focusOverlay.removeClass(DX_HIDDEN).appendTo($content).outerWidth(elemCoord.right - elemCoord.left + 1).outerHeight(elemCoord.bottom - elemCoord.top + 1);\r\n var focusOverlayPosition = {\r\n precise: true,\r\n my: align,\r\n at: align,\r\n of: $element,\r\n boundary: $content.length && $content\r\n };\r\n that._updateFocusOverlaySize(that._$focusOverlay, focusOverlayPosition);\r\n _position.default.setup(that._$focusOverlay, focusOverlayPosition);\r\n that._$focusOverlay.css(\"visibility\", \"visible\")\r\n }\r\n }\r\n },\r\n resize: function() {\r\n var $focusedElement = this._$focusedElement;\r\n if ($focusedElement) {\r\n this.focus($focusedElement)\r\n }\r\n },\r\n loseFocus: function() {\r\n this._$focusedElement && this._$focusedElement.removeClass(FOCUSED_ELEMENT_CLASS);\r\n this._$focusedElement = null;\r\n this._$focusOverlay && this._$focusOverlay.addClass(DX_HIDDEN)\r\n },\r\n init: function() {\r\n this.createAction(\"onEditorPreparing\", {\r\n excludeValidators: [\"disabled\", \"readOnly\"],\r\n category: \"rendering\"\r\n });\r\n this.createAction(\"onEditorPrepared\", {\r\n excludeValidators: [\"disabled\", \"readOnly\"],\r\n category: \"rendering\"\r\n });\r\n this._updateFocusHandler = this._updateFocusHandler || this.createAction(this._updateFocus.bind(this));\r\n _events_engine.default.on(_dom_adapter.default.getDocument(), UPDATE_FOCUS_EVENTS, this._updateFocusHandler);\r\n this._attachContainerEventHandlers()\r\n },\r\n _attachContainerEventHandlers: function() {\r\n var that = this;\r\n var $container = that.component && that.component.$element();\r\n if ($container) {\r\n _events_engine.default.on($container, (0, _index.addNamespace)(\"keydown\", MODULE_NAMESPACE), function(e) {\r\n if (\"tab\" === (0, _index.normalizeKeyName)(e)) {\r\n that._updateFocusHandler(e)\r\n }\r\n })\r\n }\r\n },\r\n dispose: function() {\r\n clearTimeout(this._focusTimeoutID);\r\n clearTimeout(this._updateFocusTimeoutID);\r\n _events_engine.default.off(_dom_adapter.default.getDocument(), UPDATE_FOCUS_EVENTS, this._updateFocusHandler)\r\n }\r\n}).include(_ui.default);\r\nvar _default = {\r\n defaultOptions: function() {\r\n return {}\r\n },\r\n controllers: {\r\n editorFactory: EditorFactory\r\n }\r\n};\r\nexports.default = _default;\r\nmodule.exports = exports.default;\r\n","/**\r\n * DevExtreme (ui/grid_core/ui.grid_core.editing.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\n\r\nfunction _typeof(obj) {\r\n \"@babel/helpers - typeof\";\r\n if (\"function\" === typeof Symbol && \"symbol\" === typeof Symbol.iterator) {\r\n _typeof = function(obj) {\r\n return typeof obj\r\n }\r\n } else {\r\n _typeof = function(obj) {\r\n return obj && \"function\" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj\r\n }\r\n }\r\n return _typeof(obj)\r\n}\r\nexports.default = void 0;\r\nvar _renderer = _interopRequireDefault(require(\"../../core/renderer\"));\r\nvar _dom_adapter = _interopRequireDefault(require(\"../../core/dom_adapter\"));\r\nvar _window = require(\"../../core/utils/window\");\r\nvar _events_engine = _interopRequireDefault(require(\"../../events/core/events_engine\"));\r\nvar _guid = _interopRequireDefault(require(\"../../core/guid\"));\r\nvar _type = require(\"../../core/utils/type\");\r\nvar _iterator = require(\"../../core/utils/iterator\");\r\nvar _extend = require(\"../../core/utils/extend\");\r\nvar _uiGrid_core = _interopRequireDefault(require(\"./ui.grid_core.modules\"));\r\nvar _click = require(\"../../events/click\");\r\nvar _double_click = require(\"../../events/double_click\");\r\nvar _pointer = _interopRequireDefault(require(\"../../events/pointer\"));\r\nvar _uiGrid_core2 = _interopRequireDefault(require(\"./ui.grid_core.utils\"));\r\nvar _array_utils = require(\"../../data/array_utils\");\r\nvar _index = require(\"../../events/utils/index\");\r\nvar _dialog = require(\"../dialog\");\r\nvar _message = _interopRequireDefault(require(\"../../localization/message\"));\r\nvar _button = _interopRequireDefault(require(\"../button\"));\r\nvar _popup = _interopRequireDefault(require(\"../popup\"));\r\nvar _devices = _interopRequireDefault(require(\"../../core/devices\"));\r\nvar _form = _interopRequireDefault(require(\"../form\"));\r\nvar _hold = _interopRequireDefault(require(\"../../events/hold\"));\r\nvar _deferred = require(\"../../core/utils/deferred\");\r\nvar _common = require(\"../../core/utils/common\");\r\nvar iconUtils = _interopRequireWildcard(require(\"../../core/utils/icon\"));\r\nvar _ui = _interopRequireDefault(require(\"../scroll_view/ui.scrollable\"));\r\n\r\nfunction _getRequireWildcardCache() {\r\n if (\"function\" !== typeof WeakMap) {\r\n return null\r\n }\r\n var cache = new WeakMap;\r\n _getRequireWildcardCache = function() {\r\n return cache\r\n };\r\n return cache\r\n}\r\n\r\nfunction _interopRequireWildcard(obj) {\r\n if (obj && obj.__esModule) {\r\n return obj\r\n }\r\n if (null === obj || \"object\" !== _typeof(obj) && \"function\" !== typeof obj) {\r\n return {\r\n \"default\": obj\r\n }\r\n }\r\n var cache = _getRequireWildcardCache();\r\n if (cache && cache.has(obj)) {\r\n return cache.get(obj)\r\n }\r\n var newObj = {};\r\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\r\n for (var key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\r\n if (desc && (desc.get || desc.set)) {\r\n Object.defineProperty(newObj, key, desc)\r\n } else {\r\n newObj[key] = obj[key]\r\n }\r\n }\r\n }\r\n newObj.default = obj;\r\n if (cache) {\r\n cache.set(obj, newObj)\r\n }\r\n return newObj\r\n}\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 ownKeys(object, enumerableOnly) {\r\n var keys = Object.keys(object);\r\n if (Object.getOwnPropertySymbols) {\r\n var symbols = Object.getOwnPropertySymbols(object);\r\n if (enumerableOnly) {\r\n symbols = symbols.filter(function(sym) {\r\n return Object.getOwnPropertyDescriptor(object, sym).enumerable\r\n })\r\n }\r\n keys.push.apply(keys, symbols)\r\n }\r\n return keys\r\n}\r\n\r\nfunction _objectSpread(target) {\r\n for (var i = 1; i < arguments.length; i++) {\r\n var source = null != arguments[i] ? arguments[i] : {};\r\n if (i % 2) {\r\n ownKeys(Object(source), true).forEach(function(key) {\r\n _defineProperty(target, key, source[key])\r\n })\r\n } else {\r\n if (Object.getOwnPropertyDescriptors) {\r\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source))\r\n } else {\r\n ownKeys(Object(source)).forEach(function(key) {\r\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key))\r\n })\r\n }\r\n }\r\n }\r\n return target\r\n}\r\n\r\nfunction _defineProperty(obj, key, value) {\r\n if (key in obj) {\r\n Object.defineProperty(obj, key, {\r\n value: value,\r\n enumerable: true,\r\n configurable: true,\r\n writable: true\r\n })\r\n } else {\r\n obj[key] = value\r\n }\r\n return obj\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 EDIT_FORM_CLASS = \"edit-form\";\r\nvar EDIT_FORM_ITEM_CLASS = \"edit-form-item\";\r\nvar FOCUS_OVERLAY_CLASS = \"focus-overlay\";\r\nvar READONLY_CLASS = \"readonly\";\r\nvar EDIT_POPUP_CLASS = \"edit-popup\";\r\nvar FORM_BUTTONS_CONTAINER_CLASS = \"form-buttons-container\";\r\nvar ADD_ROW_BUTTON_CLASS = \"addrow-button\";\r\nvar DROPDOWN_EDITOR_OVERLAY_CLASS = \"dx-dropdowneditor-overlay\";\r\nvar LINK_CLASS = \"dx-link\";\r\nvar EDITOR_CELL_CLASS = \"dx-editor-cell\";\r\nvar ROW_SELECTED = \"dx-selection\";\r\nvar EDIT_ROW = \"dx-edit-row\";\r\nvar EDIT_BUTTON_CLASS = \"dx-edit-button\";\r\nvar COMMAND_EDIT_CLASS = \"dx-command-edit\";\r\nvar COMMAND_EDIT_WITH_ICONS_CLASS = COMMAND_EDIT_CLASS + \"-with-icons\";\r\nvar SCROLLABLE_CONTAINER_CLASS = \"dx-scrollable-container\";\r\nvar BUTTON_CLASS = \"dx-button\";\r\nvar INSERT_INDEX = \"__DX_INSERT_INDEX__\";\r\nvar ROW_CLASS = \"dx-row\";\r\nvar ROW_REMOVED = \"dx-row-removed\";\r\nvar ROW_INSERTED = \"dx-row-inserted\";\r\nvar ROW_MODIFIED = \"dx-row-modified\";\r\nvar CELL_MODIFIED = \"dx-cell-modified\";\r\nvar EDITING_NAMESPACE = \"dxDataGridEditing\";\r\nvar DATA_ROW_CLASS = \"dx-data-row\";\r\nvar CELL_FOCUS_DISABLED_CLASS = \"dx-cell-focus-disabled\";\r\nvar EDITORS_INPUT_SELECTOR = \"input:not([type='hidden'])\";\r\nvar FOCUSABLE_ELEMENT_SELECTOR = \"[tabindex], \" + EDITORS_INPUT_SELECTOR;\r\nvar EDIT_MODE_BATCH = \"batch\";\r\nvar EDIT_MODE_ROW = \"row\";\r\nvar EDIT_MODE_CELL = \"cell\";\r\nvar EDIT_MODE_FORM = \"form\";\r\nvar EDIT_MODE_POPUP = \"popup\";\r\nvar DATA_EDIT_DATA_INSERT_TYPE = \"insert\";\r\nvar DATA_EDIT_DATA_UPDATE_TYPE = \"update\";\r\nvar DATA_EDIT_DATA_REMOVE_TYPE = \"remove\";\r\nvar DEFAULT_START_EDIT_ACTION = \"click\";\r\nvar EDIT_MODES = [EDIT_MODE_BATCH, EDIT_MODE_ROW, EDIT_MODE_CELL, EDIT_MODE_FORM, EDIT_MODE_POPUP];\r\nvar ROW_BASED_MODES = [EDIT_MODE_ROW, EDIT_MODE_FORM, EDIT_MODE_POPUP];\r\nvar CELL_BASED_MODES = [EDIT_MODE_BATCH, EDIT_MODE_CELL];\r\nvar FORM_BASED_MODES = [EDIT_MODE_FORM, EDIT_MODE_POPUP];\r\nvar MODES_WITH_DELAYED_FOCUS = [EDIT_MODE_ROW, EDIT_MODE_FORM];\r\nvar TARGET_COMPONENT_NAME = \"targetComponent\";\r\nvar EDIT_LINK_CLASS = {\r\n save: \"dx-link-save\",\r\n cancel: \"dx-link-cancel\",\r\n edit: \"dx-link-edit\",\r\n undelete: \"dx-link-undelete\",\r\n \"delete\": \"dx-link-delete\",\r\n add: \"dx-link-add\"\r\n};\r\nvar EDIT_ICON_CLASS = {\r\n save: \"save\",\r\n cancel: \"revert\",\r\n edit: \"edit\",\r\n undelete: \"revert\",\r\n \"delete\": \"trash\",\r\n add: \"add\"\r\n};\r\nvar METHOD_NAMES = {\r\n edit: \"editRow\",\r\n \"delete\": \"deleteRow\",\r\n undelete: \"undeleteRow\",\r\n save: \"saveEditData\",\r\n cancel: \"cancelEditData\",\r\n add: \"addRowByRowIndex\"\r\n};\r\nvar ACTION_OPTION_NAMES = {\r\n add: \"allowAdding\",\r\n edit: \"allowUpdating\",\r\n \"delete\": \"allowDeleting\"\r\n};\r\nvar BUTTON_NAMES = [\"edit\", \"save\", \"cancel\", \"delete\", \"undelete\"];\r\nvar EDITING_POPUP_OPTION_NAME = \"editing.popup\";\r\nvar EDITING_CHANGES_OPTION_NAME = \"editing.changes\";\r\nvar EDITING_EDITROWKEY_OPTION_NAME = \"editing.editRowKey\";\r\nvar EDITING_EDITCOLUMNNAME_OPTION_NAME = \"editing.editColumnName\";\r\nvar createFailureHandler = function(deferred) {\r\n return function(arg) {\r\n var error = arg instanceof Error ? arg : new Error(arg && String(arg) || \"Unknown error\");\r\n deferred.reject(error)\r\n }\r\n};\r\nvar _getEditMode = function(that) {\r\n var editMode = that.option(\"editing.mode\");\r\n if (EDIT_MODES.indexOf(editMode) !== -1) {\r\n return editMode\r\n }\r\n return EDIT_MODE_ROW\r\n};\r\nvar _isRowEditMode = function(that) {\r\n var editMode = _getEditMode(that);\r\n return ROW_BASED_MODES.indexOf(editMode) !== -1\r\n};\r\nvar isEditingCell = function(isEditRow, cellOptions) {\r\n return cellOptions.isEditing || isEditRow && cellOptions.column.allowEditing\r\n};\r\nvar isEditingOrShowEditorAlwaysDataCell = function(isEditRow, cellOptions) {\r\n var isCommandCell = !!cellOptions.column.command;\r\n var isEditing = isEditingCell(isEditRow, cellOptions);\r\n var isEditorCell = !isCommandCell && (isEditing || cellOptions.column.showEditorAlways);\r\n return \"data\" === cellOptions.rowType && isEditorCell\r\n};\r\nvar EditingController = _uiGrid_core.default.ViewController.inherit(function() {\r\n var getDefaultEditorTemplate = function(that) {\r\n return function(container, options) {\r\n var $editor = (0, _renderer.default)(\"
\").appendTo(container);\r\n that.getController(\"editorFactory\").createEditor($editor, (0, _extend.extend)({}, options.column, {\r\n value: options.value,\r\n setValue: options.setValue,\r\n row: options.row,\r\n parentType: \"dataRow\",\r\n width: null,\r\n readOnly: !options.setValue,\r\n isOnForm: options.isOnForm,\r\n id: options.id\r\n }))\r\n }\r\n };\r\n var getEditingTexts = function(options) {\r\n var editingTexts = options.component.option(\"editing.texts\") || {};\r\n return {\r\n save: editingTexts.saveRowChanges,\r\n cancel: editingTexts.cancelRowChanges,\r\n edit: editingTexts.editRow,\r\n undelete: editingTexts.undeleteRow,\r\n \"delete\": editingTexts.deleteRow,\r\n add: editingTexts.addRowToNode\r\n }\r\n };\r\n var getButtonIndex = function(buttons, name) {\r\n var result = -1;\r\n buttons.some(function(button, index) {\r\n if (getButtonName(button) === name) {\r\n result = index;\r\n return true\r\n }\r\n });\r\n return result\r\n };\r\n\r\n function getButtonName(button) {\r\n return (0, _type.isObject)(button) ? button.name : button\r\n }\r\n var getEditorType = function(item) {\r\n var column = item.column;\r\n return item.isCustomEditorType ? item.editorType : column.formItem && column.formItem.editorType\r\n };\r\n var forEachFormItems = function forEachFormItems(items, callBack) {\r\n items.forEach(function(item) {\r\n if (item.items || item.tabs) {\r\n forEachFormItems(item.items || item.tabs, callBack)\r\n } else {\r\n callBack(item)\r\n }\r\n })\r\n };\r\n return {\r\n init: function() {\r\n var that = this;\r\n that._columnsController = that.getController(\"columns\");\r\n that._dataController = that.getController(\"data\");\r\n that._rowsView = that.getView(\"rowsView\");\r\n that._editForm = null;\r\n that._updateEditFormDeferred = null;\r\n that._lastOperation = null;\r\n if (that._deferreds) {\r\n that._deferreds.forEach(function(d) {\r\n return d.reject(\"cancel\")\r\n })\r\n }\r\n that._deferreds = [];\r\n if (!that._dataChangedHandler) {\r\n that._dataChangedHandler = that._handleDataChanged.bind(that);\r\n that._dataController.changed.add(that._dataChangedHandler)\r\n }\r\n if (!that._saveEditorHandler) {\r\n that.createAction(\"onInitNewRow\", {\r\n excludeValidators: [\"disabled\", \"readOnly\"]\r\n });\r\n that.createAction(\"onRowInserting\", {\r\n excludeValidators: [\"disabled\", \"readOnly\"]\r\n });\r\n that.createAction(\"onRowInserted\", {\r\n excludeValidators: [\"disabled\", \"readOnly\"]\r\n });\r\n that.createAction(\"onEditingStart\", {\r\n excludeValidators: [\"disabled\", \"readOnly\"]\r\n });\r\n that.createAction(\"onRowUpdating\", {\r\n excludeValidators: [\"disabled\", \"readOnly\"]\r\n });\r\n that.createAction(\"onRowUpdated\", {\r\n excludeValidators: [\"disabled\", \"readOnly\"]\r\n });\r\n that.createAction(\"onRowRemoving\", {\r\n excludeValidators: [\"disabled\", \"readOnly\"]\r\n });\r\n that.createAction(\"onRowRemoved\", {\r\n excludeValidators: [\"disabled\", \"readOnly\"]\r\n });\r\n that.createAction(\"onSaved\", {\r\n excludeValidators: [\"disabled\", \"readOnly\"]\r\n });\r\n that.createAction(\"onSaving\", {\r\n excludeValidators: [\"disabled\", \"readOnly\"]\r\n });\r\n that.createAction(\"onEditCanceling\", {\r\n excludeValidators: [\"disabled\", \"readOnly\"]\r\n });\r\n that.createAction(\"onEditCanceled\", {\r\n excludeValidators: [\"disabled\", \"readOnly\"]\r\n });\r\n var $pointerDownTarget;\r\n var isResizing;\r\n that._pointerUpEditorHandler = function() {\r\n var _that$getController;\r\n isResizing = null === (_that$getController = that.getController(\"columnsResizer\")) || void 0 === _that$getController ? void 0 : _that$getController.isResizing()\r\n };\r\n that._pointerDownEditorHandler = function(e) {\r\n return $pointerDownTarget = (0, _renderer.default)(e.target)\r\n };\r\n that._saveEditorHandler = that.createAction(function(e) {\r\n var event = e.event;\r\n var $target = (0, _renderer.default)(event.target);\r\n var targetComponent = event[TARGET_COMPONENT_NAME];\r\n if ($pointerDownTarget && $pointerDownTarget.is(\"input\") && !$pointerDownTarget.is($target)) {\r\n return\r\n }\r\n\r\n function checkEditorPopup($element) {\r\n return $element && !!$element.closest(\".\".concat(DROPDOWN_EDITOR_OVERLAY_CLASS)).length\r\n }\r\n if (!_isRowEditMode(that) && !that._editCellInProgress) {\r\n var isEditorPopup = checkEditorPopup($target) || checkEditorPopup(null === targetComponent || void 0 === targetComponent ? void 0 : targetComponent.$element());\r\n var isDomElement = !!$target.closest((0, _window.getWindow)().document).length;\r\n var isAnotherComponent = targetComponent && !targetComponent._disposed && targetComponent !== that.component;\r\n var isAddRowButton = !!$target.closest(\".\".concat(that.addWidgetPrefix(ADD_ROW_BUTTON_CLASS))).length;\r\n var isFocusOverlay = $target.hasClass(that.addWidgetPrefix(FOCUS_OVERLAY_CLASS));\r\n var isCellEditMode = _getEditMode(that) === EDIT_MODE_CELL;\r\n if (!isResizing && !isEditorPopup && !isFocusOverlay && !(isAddRowButton && isCellEditMode && that.isEditing()) && (isDomElement || isAnotherComponent)) {\r\n that._closeEditItem.bind(that)($target)\r\n }\r\n }\r\n });\r\n _events_engine.default.on(_dom_adapter.default.getDocument(), _pointer.default.up, that._pointerUpEditorHandler);\r\n _events_engine.default.on(_dom_adapter.default.getDocument(), _pointer.default.down, that._pointerDownEditorHandler);\r\n _events_engine.default.on(_dom_adapter.default.getDocument(), _click.name, that._saveEditorHandler)\r\n }\r\n that._updateEditColumn();\r\n that._updateEditButtons();\r\n if (!this._internalState) {\r\n this._internalState = []\r\n }\r\n this.component._optionsByReference[EDITING_EDITROWKEY_OPTION_NAME] = true;\r\n this.component._optionsByReference[EDITING_CHANGES_OPTION_NAME] = true\r\n },\r\n getChanges: function() {\r\n return this.option(EDITING_CHANGES_OPTION_NAME)\r\n },\r\n resetChanges: function() {\r\n var changes = this.getChanges();\r\n var needReset = null === changes || void 0 === changes ? void 0 : changes.length;\r\n if (needReset) {\r\n this._silentOption(EDITING_CHANGES_OPTION_NAME, [])\r\n }\r\n },\r\n _getInternalData: function(key) {\r\n return this._internalState.filter(function(item) {\r\n return item.key === key\r\n })[0]\r\n },\r\n _addInternalData: function(params) {\r\n var internalData = this._getInternalData(params.key);\r\n if (internalData) {\r\n return (0, _extend.extend)(internalData, params)\r\n }\r\n this._internalState.push(params);\r\n return params\r\n },\r\n _getOldData: function(key) {\r\n var _this$_getInternalDat;\r\n return null === (_this$_getInternalDat = this._getInternalData(key)) || void 0 === _this$_getInternalDat ? void 0 : _this$_getInternalDat.oldData\r\n },\r\n getUpdatedData: function(data) {\r\n var key = this._dataController.keyOf(data);\r\n var changes = this.getChanges();\r\n var editIndex = _uiGrid_core2.default.getIndexByKey(key, changes);\r\n if (changes[editIndex]) {\r\n return (0, _array_utils.createObjectWithChanges)(data, changes[editIndex].data)\r\n }\r\n return data\r\n },\r\n getInsertedData: function() {\r\n return this.getChanges().filter(function(change) {\r\n return change.data && change.type === DATA_EDIT_DATA_INSERT_TYPE\r\n }).map(function(change) {\r\n return change.data\r\n })\r\n },\r\n getRemovedData: function() {\r\n var _this = this;\r\n return this.getChanges().filter(function(change) {\r\n return _this._getOldData(change.key) && change.type === DATA_EDIT_DATA_REMOVE_TYPE\r\n }).map(function(change) {\r\n return _this._getOldData(change.key)\r\n })\r\n },\r\n _fireDataErrorOccurred: function(arg) {\r\n if (\"cancel\" === arg) {\r\n return\r\n }\r\n var $popupContent = this.getPopupContent();\r\n this._dataController.dataErrorOccurred.fire(arg, $popupContent)\r\n },\r\n _needToCloseEditableCell: function($targetElement) {\r\n var $element = this.component.$element();\r\n var result = this.isEditing();\r\n var isCurrentComponentElement = !$element || !!$targetElement.closest($element).length;\r\n if (isCurrentComponentElement) {\r\n var isDataRow = $targetElement.closest(\".\" + DATA_ROW_CLASS).length;\r\n if (isDataRow) {\r\n var rowsView = this.getView(\"rowsView\");\r\n var $targetCell = $targetElement.closest(\".\" + ROW_CLASS + \"> td\");\r\n var rowIndex = rowsView.getRowIndex($targetCell.parent());\r\n var columnIndex = rowsView.getCellElements(rowIndex).index($targetCell);\r\n var visibleColumns = this._columnsController.getVisibleColumns();\r\n var allowEditing = visibleColumns[columnIndex] && visibleColumns[columnIndex].allowEditing;\r\n result = result && !allowEditing && !this.isEditCell(rowIndex, columnIndex)\r\n }\r\n }\r\n return result\r\n },\r\n _closeEditItem: function($targetElement) {\r\n if (this._needToCloseEditableCell($targetElement)) {\r\n this.closeEditCell()\r\n }\r\n },\r\n _handleDataChanged: function(args) {\r\n var editForm = this._editForm;\r\n if (\"refresh\" === args.changeType && _getEditMode(this) === EDIT_MODE_POPUP && editForm && editForm.option(\"visible\")) {\r\n this._repaintEditPopup()\r\n }\r\n },\r\n _isDefaultButtonVisible: function(button, options) {\r\n var result = true;\r\n var isRowMode = _isRowEditMode(this);\r\n var isBatchMode = _getEditMode(this) === EDIT_MODE_BATCH;\r\n var isEditRow = options.row && options.row.rowIndex === this._getVisibleEditRowIndex() && isRowMode;\r\n switch (button.name) {\r\n case \"edit\":\r\n result = !isEditRow && this.allowUpdating(options) && isRowMode;\r\n break;\r\n case \"save\":\r\n case \"cancel\":\r\n result = isEditRow;\r\n break;\r\n case \"delete\":\r\n result = !isEditRow && this.allowDeleting(options) && (!isBatchMode || !options.row.removed);\r\n break;\r\n case \"undelete\":\r\n result = isBatchMode && this.allowDeleting(options) && options.row.removed\r\n }\r\n return result\r\n },\r\n _isButtonVisible: function(button, options) {\r\n var visible = button.visible;\r\n if (!(0, _type.isDefined)(visible)) {\r\n return this._isDefaultButtonVisible(button, options)\r\n }\r\n return (0, _type.isFunction)(visible) ? visible.call(button, {\r\n component: options.component,\r\n row: options.row,\r\n column: options.column\r\n }) : visible\r\n },\r\n _getButtonConfig: function(button, options) {\r\n var _this2 = this;\r\n var config = (0, _type.isObject)(button) ? button : {};\r\n var buttonName = getButtonName(button);\r\n var editingTexts = getEditingTexts(options);\r\n var methodName = METHOD_NAMES[buttonName];\r\n var editingOptions = this.option(\"editing\");\r\n var actionName = ACTION_OPTION_NAMES[buttonName];\r\n var allowAction = actionName ? editingOptions[actionName] : true;\r\n return (0, _extend.extend)({\r\n name: buttonName,\r\n text: editingTexts[buttonName],\r\n cssClass: EDIT_LINK_CLASS[buttonName],\r\n onClick: function(e) {\r\n var event = e.event;\r\n event.stopPropagation();\r\n event.preventDefault();\r\n setTimeout(function() {\r\n options.row && allowAction && _this2[methodName] && _this2[methodName](options.row.rowIndex)\r\n })\r\n }\r\n }, config)\r\n },\r\n _getEditingButtons: function(options) {\r\n var _this3 = this;\r\n var buttonIndex;\r\n var haveCustomButtons = !!options.column.buttons;\r\n var buttons = (options.column.buttons || []).slice();\r\n if (haveCustomButtons) {\r\n buttonIndex = getButtonIndex(buttons, \"edit\");\r\n if (buttonIndex >= 0) {\r\n if (getButtonIndex(buttons, \"save\") < 0) {\r\n buttons.splice(buttonIndex + 1, 0, \"save\")\r\n }\r\n if (getButtonIndex(buttons, \"cancel\") < 0) {\r\n buttons.splice(getButtonIndex(buttons, \"save\") + 1, 0, \"cancel\")\r\n }\r\n }\r\n buttonIndex = getButtonIndex(buttons, \"delete\");\r\n if (buttonIndex >= 0 && getButtonIndex(buttons, \"undelete\") < 0) {\r\n buttons.splice(buttonIndex + 1, 0, \"undelete\")\r\n }\r\n } else {\r\n buttons = BUTTON_NAMES.slice()\r\n }\r\n return buttons.map(function(button) {\r\n return _this3._getButtonConfig(button, options)\r\n })\r\n },\r\n _renderEditingButtons: function($container, buttons, options) {\r\n var _this4 = this;\r\n buttons.forEach(function(button) {\r\n if (_this4._isButtonVisible(button, options)) {\r\n _this4._createButton($container, button, options)\r\n }\r\n })\r\n },\r\n _getEditCommandCellTemplate: function() {\r\n var _this5 = this;\r\n return function(container, options) {\r\n var $container = (0, _renderer.default)(container);\r\n if (\"data\" === options.rowType) {\r\n var buttons = _this5._getEditingButtons(options);\r\n _this5._renderEditingButtons($container, buttons, options);\r\n options.watch && options.watch(function() {\r\n return buttons.map(function(button) {\r\n return _this5._isButtonVisible(button, options)\r\n })\r\n }, function() {\r\n $container.empty();\r\n _this5._renderEditingButtons($container, buttons, options)\r\n })\r\n } else {\r\n _uiGrid_core2.default.setEmptyText($container)\r\n }\r\n }\r\n },\r\n isRowEditMode: function() {\r\n return _isRowEditMode(this)\r\n },\r\n isFormEditMode: function() {\r\n var editMode = _getEditMode(this);\r\n return FORM_BASED_MODES.indexOf(editMode) !== -1\r\n },\r\n isCellOrBatchEditMode: function() {\r\n var editMode = this.getEditMode();\r\n return CELL_BASED_MODES.indexOf(editMode) !== -1\r\n },\r\n getEditMode: function() {\r\n return _getEditMode(this)\r\n },\r\n getFirstEditableColumnIndex: function() {\r\n var columnsController = this.getController(\"columns\");\r\n var firstFormItem = this._firstFormItem;\r\n var columnIndex;\r\n if (_getEditMode(this) === EDIT_MODE_FORM && firstFormItem) {\r\n var editRowKey = this.option(EDITING_EDITROWKEY_OPTION_NAME);\r\n var editRowIndex = this._dataController.getRowIndexByKey(editRowKey);\r\n var $editFormElements = this._rowsView.getCellElements(editRowIndex);\r\n columnIndex = this._rowsView._getEditFormEditorVisibleIndex($editFormElements, firstFormItem.column)\r\n } else {\r\n var visibleColumns = columnsController.getVisibleColumns();\r\n (0, _iterator.each)(visibleColumns, function(index, column) {\r\n if (column.allowEditing) {\r\n columnIndex = index;\r\n return false\r\n }\r\n })\r\n }\r\n return columnIndex\r\n },\r\n getFirstEditableCellInRow: function(rowIndex) {\r\n var rowsView = this.getView(\"rowsView\");\r\n return rowsView && rowsView._getCellElement(rowIndex ? rowIndex : 0, this.getFirstEditableColumnIndex())\r\n },\r\n getFocusedCellInRow: function(rowIndex) {\r\n return this.getFirstEditableCellInRow(rowIndex)\r\n },\r\n getIndexByKey: function(key, items) {\r\n return _uiGrid_core2.default.getIndexByKey(key, items)\r\n },\r\n hasChanges: function(rowIndex) {\r\n var changes = this.getChanges();\r\n var result = false;\r\n for (var i = 0; i < (null === changes || void 0 === changes ? void 0 : changes.length); i++) {\r\n if (changes[i].type && (!(0, _type.isDefined)(rowIndex) || this._dataController.getRowIndexByKey(changes[i].key) === rowIndex)) {\r\n result = true;\r\n break\r\n }\r\n }\r\n return result\r\n },\r\n dispose: function() {\r\n this.callBase();\r\n clearTimeout(this._inputFocusTimeoutID);\r\n _events_engine.default.off(_dom_adapter.default.getDocument(), _pointer.default.up, this._pointerUpEditorHandler);\r\n _events_engine.default.off(_dom_adapter.default.getDocument(), _pointer.default.down, this._pointerDownEditorHandler);\r\n _events_engine.default.off(_dom_adapter.default.getDocument(), _click.name, this._saveEditorHandler)\r\n },\r\n optionChanged: function(args) {\r\n if (\"editing\" === args.name) {\r\n var fullName = args.fullName;\r\n var editPopup = this._editPopup;\r\n if (fullName && 0 === fullName.indexOf(EDITING_POPUP_OPTION_NAME)) {\r\n if (editPopup) {\r\n var popupOptionName = fullName.slice(EDITING_POPUP_OPTION_NAME.length + 1);\r\n if (popupOptionName) {\r\n editPopup.option(popupOptionName, args.value)\r\n } else {\r\n editPopup.option(args.value)\r\n }\r\n }\r\n } else {\r\n if (editPopup && editPopup.option(\"visible\") && 0 === fullName.indexOf(\"editing.form\")) {\r\n this._repaintEditPopup()\r\n } else {\r\n if (fullName === EDITING_EDITROWKEY_OPTION_NAME) {\r\n this._handleEditRowKeyChange(args)\r\n } else {\r\n if (fullName === EDITING_EDITCOLUMNNAME_OPTION_NAME) {\r\n this._handleEditColumnNameChange(args)\r\n } else {\r\n if (fullName === EDITING_CHANGES_OPTION_NAME) {\r\n this._handleChangesChange(args)\r\n } else {\r\n this.init();\r\n this.resetChanges();\r\n this._resetEditColumnName();\r\n this._resetEditRowKey()\r\n }\r\n }\r\n }\r\n }\r\n }\r\n args.handled = true\r\n } else {\r\n this.callBase(args)\r\n }\r\n },\r\n _handleEditRowKeyChange: function(args) {\r\n var rowIndex = this._dataController.getRowIndexByKey(args.value);\r\n var oldRowIndexCorrection = this._getEditRowIndexCorrection();\r\n var oldRowIndex = this._dataController.getRowIndexByKey(args.previousValue) + oldRowIndexCorrection;\r\n var columnIndex = this._getVisibleEditColumnIndex();\r\n if (!this.isCellOrBatchEditMode()) {\r\n if ((0, _type.isDefined)(args.value)) {\r\n if (args.value !== args.previousValue) {\r\n this._editRowFromOptionChanged(rowIndex, oldRowIndex)\r\n }\r\n } else {\r\n this.cancelEditData()\r\n }\r\n } else {\r\n if ((0, _type.isDefined)(args.value) && args.value !== args.previousValue) {\r\n this._editCellFromOptionChanged(columnIndex, columnIndex, oldRowIndex)\r\n }\r\n }\r\n },\r\n _handleEditColumnNameChange: function(args) {\r\n var oldRowIndex = this._getVisibleEditRowIndex(args.previousValue);\r\n if (this.isCellOrBatchEditMode() && oldRowIndex !== -1 && (0, _type.isDefined)(args.value) && args.value !== args.previousValue) {\r\n var columnIndex = this._columnsController.getVisibleColumnIndex(args.value);\r\n var oldColumnIndex = this._columnsController.getVisibleColumnIndex(args.previousValue);\r\n this._editCellFromOptionChanged(columnIndex, oldColumnIndex, oldRowIndex)\r\n }\r\n },\r\n _handleChangesChange: function(args) {\r\n var dataController = this._dataController;\r\n if (!args.value.length && !args.previousValue.length) {\r\n return\r\n }\r\n dataController.updateItems({\r\n repaintChangesOnly: true\r\n })\r\n },\r\n _editCellFromOptionChanged: function(columnIndex, oldColumnIndex, oldRowIndex) {\r\n var _this6 = this;\r\n var columns = this._columnsController.getVisibleColumns();\r\n if (columnIndex > -1) {\r\n (0, _common.deferRender)(function() {\r\n _this6._repaintEditCell(columns[columnIndex], columns[oldColumnIndex], oldRowIndex)\r\n })\r\n }\r\n },\r\n publicMethods: function() {\r\n return [\"addRow\", \"deleteRow\", \"undeleteRow\", \"editRow\", \"editCell\", \"closeEditCell\", \"saveEditData\", \"cancelEditData\", \"hasEditData\"]\r\n },\r\n refresh: function(isPageChanged) {\r\n var editMode = _getEditMode(this);\r\n var needResetIndexes = editMode === EDIT_MODE_BATCH || isPageChanged && \"virtual\" !== this.option(\"scrolling.mode\");\r\n if (!(0, _type.isDefined)(this._pageIndex)) {\r\n return\r\n }\r\n if (!this.isCellOrBatchEditMode()) {\r\n this.resetChanges();\r\n this.init();\r\n if ((0, _type.isDefined)(this.option(EDITING_EDITROWKEY_OPTION_NAME))) {\r\n this._resetEditRowKey()\r\n }\r\n } else {\r\n if (needResetIndexes) {\r\n this._resetEditColumnName();\r\n this._resetEditRowKey()\r\n }\r\n }\r\n },\r\n isEditing: function() {\r\n var isEditRowKeyDefined = (0, _type.isDefined)(this.option(EDITING_EDITROWKEY_OPTION_NAME));\r\n var isEditColumnNameDefined = (0, _type.isDefined)(this.option(EDITING_EDITCOLUMNNAME_OPTION_NAME));\r\n if (this.isCellOrBatchEditMode()) {\r\n return isEditRowKeyDefined && isEditColumnNameDefined\r\n }\r\n return isEditRowKeyDefined\r\n },\r\n isEditRow: function(rowIndex) {\r\n var editMode = _getEditMode(this);\r\n return this._getVisibleEditRowIndex() === rowIndex && ROW_BASED_MODES.indexOf(editMode) !== -1\r\n },\r\n _setEditRowKey: function(value, silent) {\r\n if (silent) {\r\n this._silentOption(EDITING_EDITROWKEY_OPTION_NAME, value)\r\n } else {\r\n this.option(EDITING_EDITROWKEY_OPTION_NAME, value)\r\n }\r\n },\r\n _setEditRowKeyByIndex: function(rowIndex, silent) {\r\n var key = this._dataController.getKeyByRowIndex(rowIndex);\r\n if (void 0 === key) {\r\n this._dataController.fireError(\"E1043\");\r\n return\r\n }\r\n this._setEditRowKey(key, silent)\r\n },\r\n getEditRowIndex: function() {\r\n return this._getVisibleEditRowIndex()\r\n },\r\n getEditFormRowIndex: function() {\r\n var editMode = _getEditMode(this);\r\n return editMode === EDIT_MODE_FORM || editMode === EDIT_MODE_POPUP ? this._getVisibleEditRowIndex() : -1\r\n },\r\n isEditCell: function(visibleRowIndex, columnIndex) {\r\n return this._getVisibleEditRowIndex() === visibleRowIndex && this._getVisibleEditColumnIndex() === columnIndex\r\n },\r\n getPopupContent: function() {\r\n var editMode = _getEditMode(this);\r\n var popupVisible = this._editPopup && this._editPopup.option(\"visible\");\r\n if (editMode === EDIT_MODE_POPUP && popupVisible) {\r\n return this._$popupContent\r\n }\r\n },\r\n getEditForm: function() {\r\n return this._editForm\r\n },\r\n _needInsertItem: function(change, changeType) {\r\n var that = this;\r\n var dataSource = that._dataController.dataSource();\r\n var scrollingMode = that.option(\"scrolling.mode\");\r\n var pageIndex = dataSource.pageIndex();\r\n var beginPageIndex = dataSource.beginPageIndex ? dataSource.beginPageIndex() : pageIndex;\r\n var endPageIndex = dataSource.endPageIndex ? dataSource.endPageIndex() : pageIndex;\r\n if (\"standard\" !== scrollingMode) {\r\n switch (changeType) {\r\n case \"append\":\r\n return change.key.pageIndex === endPageIndex;\r\n case \"prepend\":\r\n return change.key.pageIndex === beginPageIndex;\r\n case \"refresh\":\r\n change.key.rowIndex = 0;\r\n change.key.dataRowIndex = 0;\r\n change.key.pageIndex = 0;\r\n break;\r\n default:\r\n return change.key.pageIndex >= beginPageIndex && change.key.pageIndex <= endPageIndex\r\n }\r\n }\r\n return change.key.pageIndex === pageIndex\r\n },\r\n _generateNewItem: function(key) {\r\n var item = {\r\n key: key\r\n };\r\n if (key && key[INSERT_INDEX]) {\r\n item[INSERT_INDEX] = key[INSERT_INDEX]\r\n }\r\n return item\r\n },\r\n _getLoadedRowIndexByInsertKey: function(items, change, key) {\r\n var dataController = this._dataController;\r\n var loadedRowIndexOffset = dataController.getRowIndexOffset(true);\r\n var loadedRowIndex = key.dataRowIndex - loadedRowIndexOffset;\r\n if (\"append\" === change.changeType) {\r\n loadedRowIndex -= dataController.items(true).length;\r\n if (change.removeCount) {\r\n loadedRowIndex += change.removeCount\r\n }\r\n }\r\n for (var i = 0; i < loadedRowIndex; i++) {\r\n if (items[i] && items[i][INSERT_INDEX]) {\r\n loadedRowIndex++\r\n }\r\n }\r\n return loadedRowIndex\r\n },\r\n processItems: function(items, e) {\r\n var _this7 = this;\r\n var changeType = e.changeType;\r\n this.update(changeType);\r\n var changes = this.getChanges();\r\n changes.forEach(function(change) {\r\n var key = change.key;\r\n if ((0, _type.isDefined)(key) && change.type === DATA_EDIT_DATA_INSERT_TYPE) {\r\n var loadedRowIndex = _this7._getLoadedRowIndexByInsertKey(items, e, key);\r\n var item = _this7._generateNewItem(key);\r\n if (loadedRowIndex >= 0 && _this7._needInsertItem(change, changeType, items, item)) {\r\n items.splice(key.dataRowIndex ? loadedRowIndex : 0, 0, item)\r\n }\r\n }\r\n });\r\n return items\r\n },\r\n processDataItem: function(item, options, generateDataValues) {\r\n var columns = options.visibleColumns;\r\n var key = item.data[INSERT_INDEX] ? item.data.key : item.key;\r\n var changes = this.getChanges();\r\n var editIndex = _uiGrid_core2.default.getIndexByKey(key, changes);\r\n item.isEditing = false;\r\n if (editIndex >= 0) {\r\n var editMode = _getEditMode(this);\r\n var _changes$editIndex = changes[editIndex],\r\n data = _changes$editIndex.data,\r\n type = _changes$editIndex.type;\r\n switch (type) {\r\n case DATA_EDIT_DATA_INSERT_TYPE:\r\n if (editMode === EDIT_MODE_POPUP) {\r\n item.visible = false\r\n }\r\n item.isNewRow = true;\r\n item.key = key;\r\n item.data = data;\r\n break;\r\n case DATA_EDIT_DATA_UPDATE_TYPE:\r\n item.modified = true;\r\n item.oldData = item.data;\r\n item.data = (0, _array_utils.createObjectWithChanges)(item.data, data);\r\n item.modifiedValues = generateDataValues(data, columns, true);\r\n break;\r\n case DATA_EDIT_DATA_REMOVE_TYPE:\r\n if (editMode === EDIT_MODE_BATCH) {\r\n item.data = (0, _array_utils.createObjectWithChanges)(item.data, data)\r\n }\r\n item.removed = true\r\n }\r\n }\r\n },\r\n _initNewRow: function(options) {\r\n var _this8 = this;\r\n this.executeAction(\"onInitNewRow\", options);\r\n if (options.promise) {\r\n var deferred = new _deferred.Deferred;\r\n (0, _deferred.when)((0, _deferred.fromPromise)(options.promise)).done(deferred.resolve).fail(createFailureHandler(deferred)).fail(function(arg) {\r\n return _this8._fireDataErrorOccurred(arg)\r\n });\r\n return deferred\r\n }\r\n },\r\n _getInsertKey: function(parentKey) {\r\n var that = this;\r\n var dataController = that._dataController;\r\n var rows = dataController.items();\r\n var editMode = _getEditMode(that);\r\n var insertKey = {\r\n parentKey: parentKey,\r\n pageIndex: dataController.pageIndex(),\r\n rowIndex: that._getInsertRowIndex(parentKey)\r\n };\r\n var row = rows[insertKey.rowIndex];\r\n if (row && (!row.isEditing && \"detail\" === row.rowType || \"detailAdaptive\" === row.rowType)) {\r\n insertKey.rowIndex++\r\n }\r\n insertKey.dataRowIndex = dataController.getRowIndexOffset() + rows.filter(function(row, index) {\r\n return index < insertKey.rowIndex && (\"data\" === row.rowType && !row.isNewRow || \"group\" === row.rowType)\r\n }).length;\r\n if (editMode !== EDIT_MODE_BATCH) {\r\n this._setEditRowKey(insertKey, true)\r\n }\r\n insertKey[INSERT_INDEX] = that._getInsertIndex();\r\n return insertKey\r\n },\r\n _getInsertRowIndex: function(parentKey) {\r\n var that = this;\r\n var rowsView = that.getView(\"rowsView\");\r\n var parentRowIndex = that._dataController.getRowIndexByKey(parentKey);\r\n if (parentRowIndex >= 0) {\r\n return parentRowIndex + 1\r\n }\r\n if (rowsView) {\r\n return rowsView.getTopVisibleItemIndex(true)\r\n }\r\n return 0\r\n },\r\n _getInsertIndex: function() {\r\n var maxInsertIndex = 0;\r\n this.getChanges().forEach(function(editItem) {\r\n if (editItem.type === DATA_EDIT_DATA_INSERT_TYPE && editItem.key[INSERT_INDEX] > maxInsertIndex) {\r\n maxInsertIndex = editItem.key[INSERT_INDEX]\r\n }\r\n });\r\n return maxInsertIndex + 1\r\n },\r\n addRow: function(parentKey) {\r\n var that = this;\r\n var dataController = that._dataController;\r\n var store = dataController.store();\r\n var key = store && store.key();\r\n var param = {\r\n data: {}\r\n };\r\n var editMode = _getEditMode(that);\r\n var oldEditRowIndex = that._getVisibleEditRowIndex();\r\n var deferred = new _deferred.Deferred;\r\n if (!store) {\r\n dataController.fireError(\"E1052\", this.component.NAME);\r\n return deferred.reject()\r\n }\r\n if (editMode === EDIT_MODE_CELL && that.hasChanges()) {\r\n that.saveEditData().done(function() {\r\n if (!that.hasChanges()) {\r\n that.addRow(parentKey).done(deferred.resolve).fail(deferred.reject)\r\n } else {\r\n deferred.reject(\"cancel\")\r\n }\r\n });\r\n return deferred.promise()\r\n }\r\n that.refresh();\r\n if (!that._allowRowAdding()) {\r\n return deferred.reject(\"cancel\")\r\n }\r\n if (!key) {\r\n param.data.__KEY__ = String(new _guid.default)\r\n }(0, _deferred.when)(that._initNewRow(param, parentKey)).done(function() {\r\n if (that._allowRowAdding()) {\r\n that._addRowCore(param.data, parentKey, oldEditRowIndex);\r\n deferred.resolve()\r\n } else {\r\n deferred.reject(\"cancel\")\r\n }\r\n }).fail(deferred.reject);\r\n return deferred.promise()\r\n },\r\n _allowRowAdding: function() {\r\n var that = this;\r\n var editMode = _getEditMode(that);\r\n var insertIndex = that._getInsertIndex();\r\n if (editMode !== EDIT_MODE_BATCH && insertIndex > 1) {\r\n return false\r\n }\r\n return true\r\n },\r\n _addRowCore: function(data, parentKey, initialOldEditRowIndex) {\r\n var that = this;\r\n var oldEditRowIndex = that._getVisibleEditRowIndex();\r\n var insertKey = that._getInsertKey(parentKey);\r\n var editMode = _getEditMode(that);\r\n that._addChange({\r\n key: insertKey,\r\n data: data,\r\n type: DATA_EDIT_DATA_INSERT_TYPE\r\n });\r\n that._dataController.updateItems({\r\n changeType: \"update\",\r\n rowIndices: [initialOldEditRowIndex, oldEditRowIndex, insertKey.rowIndex]\r\n });\r\n if (editMode === EDIT_MODE_POPUP) {\r\n that._showEditPopup(insertKey.rowIndex)\r\n } else {\r\n that._focusFirstEditableCellInRow(insertKey.rowIndex)\r\n }\r\n that._afterInsertRow({\r\n key: insertKey,\r\n data: data\r\n })\r\n },\r\n _focusFirstEditableCellInRow: function(rowIndex) {\r\n var that = this;\r\n var $firstCell = that.getFirstEditableCellInRow(rowIndex);\r\n that._editCellInProgress = true;\r\n that._delayedInputFocus($firstCell, function() {\r\n that._editCellInProgress = false;\r\n var $cell = that.getFirstEditableCellInRow(rowIndex);\r\n var eventToTrigger = \"dblClick\" === that.option(\"editing.startEditAction\") ? _double_click.name : _click.name;\r\n $cell && _events_engine.default.trigger($cell, eventToTrigger)\r\n })\r\n },\r\n _isEditingStart: function(options) {\r\n this.executeAction(\"onEditingStart\", options);\r\n return options.cancel\r\n },\r\n _beforeEditCell: function(rowIndex, columnIndex, item) {\r\n var that = this;\r\n if (_getEditMode(that) === EDIT_MODE_CELL && !item.isNewRow && that.hasChanges()) {\r\n var d = new _deferred.Deferred;\r\n that.saveEditData().always(function() {\r\n d.resolve(that.hasChanges())\r\n });\r\n return d\r\n }\r\n },\r\n _beforeUpdateItems: function() {},\r\n _getVisibleEditColumnIndex: function() {\r\n var editColumnName = this.option(EDITING_EDITCOLUMNNAME_OPTION_NAME);\r\n if (!(0, _type.isDefined)(editColumnName)) {\r\n return -1\r\n }\r\n return this._columnsController.getVisibleColumnIndex(editColumnName)\r\n },\r\n _setEditColumnNameByIndex: function(index, silent) {\r\n var _visibleColumns$index;\r\n var visibleColumns = this._columnsController.getVisibleColumns();\r\n this._setEditColumnName(null === (_visibleColumns$index = visibleColumns[index]) || void 0 === _visibleColumns$index ? void 0 : _visibleColumns$index.name, silent)\r\n },\r\n _setEditColumnName: function(name, silent) {\r\n if (silent) {\r\n this._silentOption(EDITING_EDITCOLUMNNAME_OPTION_NAME, name)\r\n } else {\r\n this.option(EDITING_EDITCOLUMNNAME_OPTION_NAME, name)\r\n }\r\n },\r\n _resetEditColumnName: function() {\r\n this._setEditColumnName(null, true)\r\n },\r\n _getEditColumn: function() {\r\n var editColumnName = this.option(EDITING_EDITCOLUMNNAME_OPTION_NAME);\r\n return this._getColumnByName(editColumnName)\r\n },\r\n _getColumnByName: function(name) {\r\n var visibleColumns = this._columnsController.getVisibleColumns();\r\n var editColumn;\r\n (0, _type.isDefined)(name) && visibleColumns.some(function(column) {\r\n if (column.name === name) {\r\n editColumn = column;\r\n return true\r\n }\r\n });\r\n return editColumn\r\n },\r\n _getVisibleEditRowIndex: function(columnName) {\r\n var dataController = this._dataController;\r\n var editRowKey = this.option(EDITING_EDITROWKEY_OPTION_NAME);\r\n var rowIndex = dataController.getRowIndexByKey(editRowKey);\r\n if (rowIndex === -1) {\r\n return rowIndex\r\n }\r\n return rowIndex + this._getEditRowIndexCorrection(columnName)\r\n },\r\n _getEditRowIndexCorrection: function(columnName) {\r\n var editColumn = columnName ? this._getColumnByName(columnName) : this._getEditColumn();\r\n var isColumnHidden = \"adaptiveHidden\" === (null === editColumn || void 0 === editColumn ? void 0 : editColumn.visibleWidth);\r\n return isColumnHidden ? 1 : 0\r\n },\r\n _resetEditRowKey: function() {\r\n this._setEditRowKey(null, true)\r\n },\r\n _resetEditIndices: function() {\r\n this._resetEditColumnName();\r\n this._resetEditRowKey()\r\n },\r\n editRow: function(rowIndex) {\r\n var dataController = this._dataController;\r\n var items = dataController.items();\r\n var item = items[rowIndex];\r\n var params = {\r\n data: item && item.data,\r\n cancel: false\r\n };\r\n var oldRowIndex = this._getVisibleEditRowIndex();\r\n if (!item) {\r\n return\r\n }\r\n if (rowIndex === oldRowIndex) {\r\n return true\r\n }\r\n if (void 0 === item.key) {\r\n this._dataController.fireError(\"E1043\");\r\n return\r\n }\r\n if (!item.isNewRow) {\r\n params.key = item.key\r\n }\r\n if (this._isEditingStart(params)) {\r\n return\r\n }\r\n this.resetChanges();\r\n this.init();\r\n this._resetEditColumnName();\r\n this._pageIndex = dataController.pageIndex();\r\n this._addInternalData({\r\n key: item.key,\r\n oldData: item.data\r\n });\r\n this._setEditRowKey(item.key)\r\n },\r\n _editRowFromOptionChanged: function(rowIndex, oldRowIndex) {\r\n var rowIndices = [oldRowIndex, rowIndex];\r\n var editMode = _getEditMode(this);\r\n this._beforeUpdateItems(rowIndices, rowIndex, oldRowIndex);\r\n if (editMode === EDIT_MODE_POPUP) {\r\n this._showEditPopup(rowIndex)\r\n } else {\r\n this._needFocusEditor = true;\r\n this._dataController.updateItems({\r\n changeType: \"update\",\r\n rowIndices: rowIndices\r\n })\r\n }\r\n },\r\n _focusEditorIfNeed: function() {\r\n var _this9 = this;\r\n var editMode = _getEditMode(this);\r\n if (this._needFocusEditor) {\r\n if (MODES_WITH_DELAYED_FOCUS.indexOf(editMode) !== -1) {\r\n var $editingCell = this.getFocusedCellInRow(this._getVisibleEditRowIndex());\r\n this._delayedInputFocus($editingCell, function() {\r\n $editingCell && _this9.component.focus($editingCell)\r\n })\r\n } else {\r\n if (CELL_BASED_MODES.indexOf(editMode) !== -1) {\r\n var _this$_rowsView;\r\n var editColumnIndex = this._getVisibleEditColumnIndex();\r\n var $cell = null === (_this$_rowsView = this._rowsView) || void 0 === _this$_rowsView ? void 0 : _this$_rowsView._getCellElement(this._getVisibleEditRowIndex(), editColumnIndex);\r\n if ($cell && !$cell.find(\":focus\").length) {\r\n this._focusEditingCell(function() {\r\n _this9._editCellInProgress = false\r\n }, $cell, true)\r\n } else {\r\n this._editCellInProgress = false\r\n }\r\n }\r\n }\r\n this._needFocusEditor = false\r\n }\r\n },\r\n _showEditPopup: function(rowIndex, repaintForm) {\r\n var that = this;\r\n var isMobileDevice = \"desktop\" !== _devices.default.current().deviceType;\r\n var popupOptions = (0, _extend.extend)({\r\n showTitle: false,\r\n fullScreen: isMobileDevice,\r\n toolbarItems: [{\r\n toolbar: \"bottom\",\r\n location: \"after\",\r\n widget: \"dxButton\",\r\n options: that._getSaveButtonConfig()\r\n }, {\r\n toolbar: \"bottom\",\r\n location: \"after\",\r\n widget: \"dxButton\",\r\n options: that._getCancelButtonConfig()\r\n }],\r\n contentTemplate: that._getPopupEditFormTemplate(rowIndex)\r\n }, that.option(EDITING_POPUP_OPTION_NAME));\r\n if (!that._editPopup) {\r\n var $popupContainer = (0, _renderer.default)(\"
\").appendTo(that.component.$element()).addClass(that.addWidgetPrefix(EDIT_POPUP_CLASS));\r\n that._editPopup = that._createComponent($popupContainer, _popup.default, {});\r\n that._editPopup.on(\"hiding\", that._getEditPopupHiddenHandler());\r\n that._editPopup.on(\"shown\", function(e) {\r\n _events_engine.default.trigger(e.component.$content().find(FOCUSABLE_ELEMENT_SELECTOR).not(\".\" + SCROLLABLE_CONTAINER_CLASS).first(), \"focus\");\r\n if (repaintForm) {\r\n that._editForm && that._editForm.repaint()\r\n }\r\n })\r\n }\r\n that._editPopup.option(popupOptions);\r\n that._editPopup.show()\r\n },\r\n _repaintEditPopup: function() {\r\n var rowIndex = this._getVisibleEditRowIndex();\r\n if (this._editPopup && this._editPopup.option(\"visible\") && rowIndex >= 0) {\r\n var defaultAnimation = this._editPopup.option(\"animation\");\r\n this._editPopup.option(\"animation\", null);\r\n this._showEditPopup(rowIndex, true);\r\n this._editPopup.option(\"animation\", defaultAnimation)\r\n }\r\n },\r\n _getEditPopupHiddenHandler: function() {\r\n var that = this;\r\n return function(e) {\r\n if (that.isEditing()) {\r\n that.cancelEditData()\r\n }\r\n }\r\n },\r\n _getPopupEditFormTemplate: function(rowIndex) {\r\n var that = this;\r\n var row = that.component.getVisibleRows()[rowIndex];\r\n var templateOptions = {\r\n row: row,\r\n rowType: row.rowType,\r\n key: row.key\r\n };\r\n return function(container) {\r\n var formTemplate = that.getEditFormTemplate();\r\n var scrollable = that._createComponent((0, _renderer.default)(\"
\").appendTo(container), _ui.default);\r\n that._$popupContent = scrollable.$content();\r\n formTemplate(that._$popupContent, templateOptions, true)\r\n }\r\n },\r\n _getSaveButtonConfig: function() {\r\n return {\r\n text: this.option(\"editing.texts.saveRowChanges\"),\r\n onClick: this.saveEditData.bind(this)\r\n }\r\n },\r\n _getCancelButtonConfig: function() {\r\n return {\r\n text: this.option(\"editing.texts.cancelRowChanges\"),\r\n onClick: this.cancelEditData.bind(this)\r\n }\r\n },\r\n _removeInternalData: function(key) {\r\n var internalData = this._getInternalData(key);\r\n var index = this._internalState.indexOf(internalData);\r\n if (index > -1) {\r\n this._internalState.splice(index, 1)\r\n }\r\n },\r\n _removeChange: function(index) {\r\n if (index >= 0) {\r\n var changes = _toConsumableArray(this.getChanges());\r\n var key = changes[index].key;\r\n this._removeInternalData(key);\r\n changes.splice(index, 1);\r\n this._silentOption(EDITING_CHANGES_OPTION_NAME, changes);\r\n if ((0, _common.equalByValue)(this.option(EDITING_EDITROWKEY_OPTION_NAME), key)) {\r\n this._resetEditIndices()\r\n }\r\n }\r\n },\r\n executeOperation: function(deferred, func) {\r\n var _this10 = this;\r\n this._lastOperation && this._lastOperation.reject();\r\n this._lastOperation = deferred;\r\n this.waitForDeferredOperations().done(function() {\r\n if (\"rejected\" === deferred.state()) {\r\n return\r\n }\r\n func();\r\n _this10._lastOperation = null\r\n }).fail(function() {\r\n deferred.reject();\r\n _this10._lastOperation = null\r\n })\r\n },\r\n waitForDeferredOperations: function() {\r\n return _deferred.when.apply(void 0, _toConsumableArray(this._deferreds))\r\n },\r\n editCell: function(rowIndex, columnIndex) {\r\n return this._editCell({\r\n rowIndex: rowIndex,\r\n columnIndex: columnIndex\r\n })\r\n },\r\n _editCell: function(options) {\r\n var _this11 = this;\r\n var d = new _deferred.Deferred;\r\n var coreResult;\r\n this.executeOperation(d, function() {\r\n coreResult = _this11._editCellCore(options);\r\n (0, _deferred.when)(coreResult).done(d.resolve).fail(d.reject)\r\n });\r\n return void 0 !== coreResult ? coreResult : d.promise()\r\n },\r\n _getNormalizedEditCellOptions: function(_ref) {\r\n var oldColumnIndex = _ref.oldColumnIndex,\r\n oldRowIndex = _ref.oldRowIndex,\r\n columnIndex = _ref.columnIndex,\r\n rowIndex = _ref.rowIndex;\r\n var columnsController = this._columnsController;\r\n var visibleColumns = columnsController.getVisibleColumns();\r\n var items = this._dataController.items();\r\n var item = items[rowIndex];\r\n var oldColumn;\r\n if ((0, _type.isDefined)(oldColumnIndex)) {\r\n oldColumn = visibleColumns[oldColumnIndex]\r\n } else {\r\n oldColumn = this._getEditColumn()\r\n }\r\n if (!(0, _type.isDefined)(oldRowIndex)) {\r\n oldRowIndex = this._getVisibleEditRowIndex()\r\n }\r\n if ((0, _type.isString)(columnIndex)) {\r\n columnIndex = columnsController.columnOption(columnIndex, \"index\");\r\n columnIndex = columnsController.getVisibleIndex(columnIndex)\r\n }\r\n var column = visibleColumns[columnIndex];\r\n return {\r\n oldColumn: oldColumn,\r\n columnIndex: columnIndex,\r\n oldRowIndex: oldRowIndex,\r\n rowIndex: rowIndex,\r\n column: column,\r\n item: item\r\n }\r\n },\r\n _editCellCore: function(options) {\r\n var _this12 = this;\r\n var dataController = this._dataController;\r\n var isEditByOptionChanged = (0, _type.isDefined)(options.oldColumnIndex) || (0, _type.isDefined)(options.oldRowIndex);\r\n var _this$_getNormalizedE = this._getNormalizedEditCellOptions(options),\r\n columnIndex = _this$_getNormalizedE.columnIndex,\r\n rowIndex = _this$_getNormalizedE.rowIndex,\r\n column = _this$_getNormalizedE.column,\r\n item = _this$_getNormalizedE.item;\r\n var params = {\r\n data: null === item || void 0 === item ? void 0 : item.data,\r\n cancel: false,\r\n column: column\r\n };\r\n if (void 0 === item.key) {\r\n this._dataController.fireError(\"E1043\");\r\n return\r\n }\r\n if (column && item && (\"data\" === item.rowType || \"detailAdaptive\" === item.rowType) && !item.removed && !_isRowEditMode(this)) {\r\n if (!isEditByOptionChanged && this.isEditCell(rowIndex, columnIndex)) {\r\n return true\r\n }\r\n var editRowIndex = rowIndex + dataController.getRowIndexOffset();\r\n return (0, _deferred.when)(this._beforeEditCell(rowIndex, columnIndex, item)).done(function(cancel) {\r\n if (cancel) {\r\n return\r\n }\r\n if (!_this12._prepareEditCell(params, item, columnIndex, editRowIndex)) {\r\n _this12._processCanceledEditingCell()\r\n }\r\n })\r\n }\r\n return false\r\n },\r\n _processCanceledEditingCell: function() {},\r\n _prepareEditCell: function(params, item, editColumnIndex, editRowIndex) {\r\n if (!item.isNewRow) {\r\n params.key = item.key\r\n }\r\n if (this._isEditingStart(params)) {\r\n return false\r\n }\r\n this._pageIndex = this._dataController.pageIndex();\r\n this._setEditRowKey(item.key);\r\n this._setEditColumnNameByIndex(editColumnIndex);\r\n if (!params.column.showEditorAlways) {\r\n this._addInternalData({\r\n key: item.key,\r\n oldData: item.data\r\n })\r\n }\r\n return true\r\n },\r\n _repaintEditCell: function(column, oldColumn, oldEditRowIndex) {\r\n this._needFocusEditor = true;\r\n if (!column || !column.showEditorAlways || oldColumn && !oldColumn.showEditorAlways) {\r\n this._editCellInProgress = true;\r\n this.getController(\"editorFactory\").loseFocus();\r\n this._dataController.updateItems({\r\n changeType: \"update\",\r\n rowIndices: [oldEditRowIndex, this._getVisibleEditRowIndex()]\r\n })\r\n } else {\r\n if (column !== oldColumn) {\r\n this._dataController.updateItems({\r\n changeType: \"update\",\r\n rowIndices: []\r\n })\r\n }\r\n }\r\n },\r\n _delayedInputFocus: function($cell, beforeFocusCallback, callBeforeFocusCallbackAlways) {\r\n var that = this;\r\n\r\n function inputFocus() {\r\n if (beforeFocusCallback) {\r\n beforeFocusCallback()\r\n }\r\n if ($cell) {\r\n var $focusableElement = $cell.find(FOCUSABLE_ELEMENT_SELECTOR).first();\r\n _uiGrid_core2.default.focusAndSelectElement(that, $focusableElement)\r\n }\r\n that._beforeFocusCallback = null\r\n }\r\n if (_devices.default.real().ios || _devices.default.real().android) {\r\n inputFocus()\r\n } else {\r\n if (that._beforeFocusCallback) {\r\n that._beforeFocusCallback()\r\n }\r\n clearTimeout(that._inputFocusTimeoutID);\r\n if (callBeforeFocusCallbackAlways) {\r\n that._beforeFocusCallback = beforeFocusCallback\r\n }\r\n that._inputFocusTimeoutID = setTimeout(inputFocus)\r\n }\r\n },\r\n _focusEditingCell: function(beforeFocusCallback, $editCell, callBeforeFocusCallbackAlways) {\r\n var that = this;\r\n var rowsView = that.getView(\"rowsView\");\r\n var editColumnIndex = this._getVisibleEditColumnIndex();\r\n $editCell = $editCell || rowsView && rowsView._getCellElement(that._getVisibleEditRowIndex(), editColumnIndex);\r\n that._delayedInputFocus($editCell, beforeFocusCallback, callBeforeFocusCallbackAlways)\r\n },\r\n deleteRow: function(rowIndex) {\r\n var _this13 = this;\r\n if (\"cell\" === this.option(\"editing.mode\") && this.isEditing()) {\r\n var isNewRow = this._dataController.items()[rowIndex].isNewRow;\r\n var rowKey = this._dataController.getKeyByRowIndex(rowIndex);\r\n this.closeEditCell(null, isNewRow).always(function() {\r\n rowIndex = _this13._dataController.getRowIndexByKey(rowKey);\r\n _this13._checkAndDeleteRow(rowIndex)\r\n })\r\n } else {\r\n this._checkAndDeleteRow(rowIndex)\r\n }\r\n },\r\n _checkAndDeleteRow: function(rowIndex) {\r\n var that = this;\r\n var editingOptions = that.option(\"editing\");\r\n var editingTexts = editingOptions && editingOptions.texts;\r\n var isBatchMode = editingOptions && editingOptions.mode === EDIT_MODE_BATCH;\r\n var confirmDelete = editingOptions && editingOptions.confirmDelete;\r\n var confirmDeleteMessage = editingTexts && editingTexts.confirmDeleteMessage;\r\n var item = that._dataController.items()[rowIndex];\r\n var allowDeleting = isBatchMode || !that.isEditing() || item.isNewRow;\r\n if (item && allowDeleting) {\r\n if (isBatchMode || !confirmDelete || !confirmDeleteMessage) {\r\n that._deleteRowCore(rowIndex)\r\n } else {\r\n var confirmDeleteTitle = editingTexts && editingTexts.confirmDeleteTitle;\r\n var showDialogTitle = (0, _type.isDefined)(confirmDeleteTitle) && confirmDeleteTitle.length > 0;\r\n (0, _dialog.confirm)(confirmDeleteMessage, confirmDeleteTitle, showDialogTitle).done(function(confirmResult) {\r\n if (confirmResult) {\r\n that._deleteRowCore(rowIndex)\r\n }\r\n })\r\n }\r\n }\r\n },\r\n _deleteRowCore: function(rowIndex) {\r\n var dataController = this._dataController;\r\n var item = dataController.items()[rowIndex];\r\n var key = item && item.key;\r\n var oldEditRowIndex = this._getVisibleEditRowIndex();\r\n var isBatchMode = this.option(\"editing.mode\") === EDIT_MODE_BATCH;\r\n this.refresh();\r\n var changes = this.getChanges();\r\n var editIndex = _uiGrid_core2.default.getIndexByKey(key, changes);\r\n if (editIndex >= 0) {\r\n if (changes[editIndex].type === DATA_EDIT_DATA_INSERT_TYPE) {\r\n this._removeChange(editIndex)\r\n } else {\r\n this._addChange({\r\n key: key,\r\n type: DATA_EDIT_DATA_REMOVE_TYPE\r\n })\r\n }\r\n } else {\r\n this._addChange({\r\n key: key,\r\n oldData: item.data,\r\n type: DATA_EDIT_DATA_REMOVE_TYPE\r\n })\r\n }\r\n if (isBatchMode) {\r\n dataController.updateItems({\r\n changeType: \"update\",\r\n rowIndices: [oldEditRowIndex, rowIndex]\r\n });\r\n return (new _deferred.Deferred).resolve()\r\n }\r\n return this.saveEditData()\r\n },\r\n undeleteRow: function(rowIndex) {\r\n var that = this;\r\n var dataController = that._dataController;\r\n var item = dataController.items()[rowIndex];\r\n var oldEditRowIndex = that._getVisibleEditRowIndex();\r\n var key = item && item.key;\r\n var changes = this.getChanges();\r\n if (item) {\r\n var editIndex = _uiGrid_core2.default.getIndexByKey(key, changes);\r\n if (editIndex >= 0) {\r\n var data = changes[editIndex].data;\r\n if ((0, _type.isEmptyObject)(data)) {\r\n that._removeChange(editIndex)\r\n } else {\r\n that._addChange({\r\n key: key,\r\n type: DATA_EDIT_DATA_UPDATE_TYPE\r\n })\r\n }\r\n dataController.updateItems({\r\n changeType: \"update\",\r\n rowIndices: [oldEditRowIndex, rowIndex]\r\n })\r\n }\r\n }\r\n },\r\n _fireOnSaving: function() {\r\n var _this14 = this;\r\n var onSavingParams = {\r\n cancel: false,\r\n promise: null,\r\n changes: _toConsumableArray(this.getChanges())\r\n };\r\n this.executeAction(\"onSaving\", onSavingParams);\r\n var d = new _deferred.Deferred;\r\n (0, _deferred.when)((0, _deferred.fromPromise)(onSavingParams.promise)).done(function() {\r\n d.resolve(onSavingParams)\r\n }).fail(function(arg) {\r\n createFailureHandler(d);\r\n _this14._fireDataErrorOccurred(arg);\r\n d.resolve({\r\n cancel: true\r\n })\r\n });\r\n return d\r\n },\r\n _executeEditingAction: function(actionName, params, func) {\r\n if (this.component._disposed) {\r\n return null\r\n }\r\n var deferred = new _deferred.Deferred;\r\n this.executeAction(actionName, params);\r\n (0, _deferred.when)((0, _deferred.fromPromise)(params.cancel)).done(function(cancel) {\r\n if (cancel) {\r\n setTimeout(function() {\r\n deferred.resolve(\"cancel\")\r\n })\r\n } else {\r\n func(params).done(deferred.resolve).fail(createFailureHandler(deferred))\r\n }\r\n }).fail(createFailureHandler(deferred));\r\n return deferred\r\n },\r\n _processChanges: function(deferreds, results, dataChanges, changes) {\r\n var _this15 = this;\r\n var store = this._dataController.store();\r\n (0, _iterator.each)(changes, function(index, change) {\r\n var oldData = _this15._getOldData(change.key);\r\n var data = change.data,\r\n type = change.type;\r\n var changeCopy = _objectSpread({}, change);\r\n var deferred;\r\n var params;\r\n if (_this15._beforeSaveEditData(change, index)) {\r\n return\r\n }\r\n switch (type) {\r\n case DATA_EDIT_DATA_REMOVE_TYPE:\r\n params = {\r\n data: oldData,\r\n key: change.key,\r\n cancel: false\r\n };\r\n deferred = _this15._executeEditingAction(\"onRowRemoving\", params, function() {\r\n return store.remove(change.key).done(function(key) {\r\n dataChanges.push({\r\n type: \"remove\",\r\n key: key\r\n })\r\n })\r\n });\r\n break;\r\n case DATA_EDIT_DATA_INSERT_TYPE:\r\n params = {\r\n data: data,\r\n cancel: false\r\n };\r\n deferred = _this15._executeEditingAction(\"onRowInserting\", params, function() {\r\n return store.insert(params.data).done(function(data, key) {\r\n if ((0, _type.isDefined)(key)) {\r\n changeCopy.key = key\r\n }\r\n if (data && (0, _type.isObject)(data) && data !== params.data) {\r\n changeCopy.data = data\r\n }\r\n dataChanges.push({\r\n type: \"insert\",\r\n data: data,\r\n index: 0\r\n })\r\n })\r\n });\r\n break;\r\n case DATA_EDIT_DATA_UPDATE_TYPE:\r\n params = {\r\n newData: data,\r\n oldData: oldData,\r\n key: change.key,\r\n cancel: false\r\n };\r\n deferred = _this15._executeEditingAction(\"onRowUpdating\", params, function() {\r\n return store.update(change.key, params.newData).done(function(data, key) {\r\n if (data && (0, _type.isObject)(data) && data !== params.newData) {\r\n changeCopy.data = data\r\n }\r\n dataChanges.push({\r\n type: \"update\",\r\n key: key,\r\n data: data\r\n })\r\n })\r\n })\r\n }\r\n changes[index] = changeCopy;\r\n if (deferred) {\r\n var doneDeferred = new _deferred.Deferred;\r\n deferred.always(function(data) {\r\n results.push({\r\n key: change.key,\r\n result: data\r\n })\r\n }).always(doneDeferred.resolve);\r\n deferreds.push(doneDeferred.promise())\r\n }\r\n })\r\n },\r\n _processSaveEditDataResult: function(results) {\r\n var that = this;\r\n var hasSavedData = false;\r\n var editMode = _getEditMode(that);\r\n var changes = _toConsumableArray(this.getChanges());\r\n var changesLength = changes.length;\r\n for (var i = 0; i < results.length; i++) {\r\n var arg = results[i].result;\r\n var cancel = \"cancel\" === arg;\r\n var editIndex = _uiGrid_core2.default.getIndexByKey(results[i].key, changes);\r\n var change = changes[editIndex];\r\n var isError = arg && arg instanceof Error;\r\n if (isError) {\r\n if (change) {\r\n this._addInternalData({\r\n key: change.key,\r\n error: arg\r\n })\r\n }\r\n that._fireDataErrorOccurred(arg);\r\n if (editMode !== EDIT_MODE_BATCH) {\r\n if ((null === change || void 0 === change ? void 0 : change.type) === DATA_EDIT_DATA_REMOVE_TYPE) {\r\n if (editIndex >= 0) {\r\n changes.splice(editIndex, 1)\r\n }\r\n }\r\n break\r\n }\r\n } else {\r\n if (!cancel || !change || editMode !== EDIT_MODE_BATCH && change.type === DATA_EDIT_DATA_REMOVE_TYPE) {\r\n if (editIndex >= 0) {\r\n changes.splice(editIndex, 1)\r\n }\r\n hasSavedData = !cancel\r\n }\r\n }\r\n }\r\n if (changes.length < changesLength) {\r\n this._silentOption(EDITING_CHANGES_OPTION_NAME, changes)\r\n }\r\n return hasSavedData\r\n },\r\n _fireSaveEditDataEvents: function(changes) {\r\n var that = this;\r\n (0, _iterator.each)(changes, function(_, _ref2) {\r\n var data = _ref2.data,\r\n key = _ref2.key,\r\n type = _ref2.type;\r\n var internalData = that._addInternalData({\r\n key: key\r\n });\r\n var params = {\r\n key: key,\r\n data: data\r\n };\r\n if (internalData.error) {\r\n params.error = internalData.error\r\n }\r\n switch (type) {\r\n case DATA_EDIT_DATA_REMOVE_TYPE:\r\n that.executeAction(\"onRowRemoved\", (0, _extend.extend)({}, params, {\r\n data: internalData.oldData\r\n }));\r\n break;\r\n case DATA_EDIT_DATA_INSERT_TYPE:\r\n that.executeAction(\"onRowInserted\", params);\r\n break;\r\n case DATA_EDIT_DATA_UPDATE_TYPE:\r\n that.executeAction(\"onRowUpdated\", params)\r\n }\r\n });\r\n this.executeAction(\"onSaved\", {\r\n changes: changes\r\n })\r\n },\r\n saveEditData: function() {\r\n var _this16 = this;\r\n var deferred = new _deferred.Deferred;\r\n this.waitForDeferredOperations().done(function() {\r\n if (_this16.isSaving()) {\r\n _this16._resolveAfterSave(deferred);\r\n return\r\n }(0, _deferred.when)(_this16._beforeSaveEditData()).done(function(cancel) {\r\n if (cancel) {\r\n _this16._resolveAfterSave(deferred, {\r\n cancel: cancel\r\n });\r\n return\r\n }\r\n _this16._saving = true;\r\n _this16._saveEditDataInner().always(function() {\r\n _this16._saving = false\r\n }).done(deferred.resolve).fail(deferred.reject)\r\n }).fail(deferred.reject)\r\n }).fail(deferred.reject);\r\n return deferred.promise()\r\n },\r\n _resolveAfterSave: function(deferred) {\r\n var _ref3 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},\r\n cancel = _ref3.cancel,\r\n error = _ref3.error;\r\n (0, _deferred.when)(this._afterSaveEditData(cancel)).done(function() {\r\n deferred.resolve(error)\r\n }).fail(deferred.reject)\r\n },\r\n _saveEditDataInner: function() {\r\n var _this17 = this;\r\n var results = [];\r\n var deferreds = [];\r\n var dataChanges = [];\r\n var dataController = this._dataController;\r\n var dataSource = dataController.dataSource();\r\n var result = new _deferred.Deferred;\r\n (0, _deferred.when)(this._fireOnSaving()).done(function(_ref4) {\r\n var cancel = _ref4.cancel,\r\n changes = _ref4.changes;\r\n if (cancel) {\r\n return result.resolve().promise()\r\n }\r\n _this17._processChanges(deferreds, results, dataChanges, changes);\r\n if (deferreds.length) {\r\n null === dataSource || void 0 === dataSource ? void 0 : dataSource.beginLoading();\r\n _deferred.when.apply(void 0, deferreds).done(function() {\r\n if (_this17._processSaveEditDataResult(results)) {\r\n _this17._endSaving(dataChanges, changes, result)\r\n } else {\r\n null === dataSource || void 0 === dataSource ? void 0 : dataSource.endLoading();\r\n result.resolve()\r\n }\r\n }).fail(function(error) {\r\n null === dataSource || void 0 === dataSource ? void 0 : dataSource.endLoading();\r\n result.resolve(error)\r\n });\r\n return result.always(function() {\r\n _this17._focusEditingCell()\r\n }).promise()\r\n }\r\n _this17._cancelSaving(result)\r\n }).fail(result.reject);\r\n return result.promise()\r\n },\r\n _resetModifiedClassCells: function(changes) {\r\n var _this18 = this;\r\n var editMode = _getEditMode(this);\r\n if (editMode === EDIT_MODE_BATCH) {\r\n var columnsCount = this._columnsController.getVisibleColumns().length;\r\n changes.forEach(function(_ref5) {\r\n var key = _ref5.key;\r\n var rowIndex = _this18._dataController.getRowIndexByKey(key);\r\n if (rowIndex !== -1) {\r\n for (var columnIndex = 0; columnIndex < columnsCount; columnIndex++) {\r\n _this18._rowsView._getCellElement(rowIndex, columnIndex).removeClass(CELL_MODIFIED)\r\n }\r\n }\r\n })\r\n }\r\n },\r\n _endSaving: function(dataChanges, changes, deferred) {\r\n var _changes$;\r\n var editMode = _getEditMode(this);\r\n var dataSource = this._dataController.dataSource();\r\n if (editMode !== EDIT_MODE_CELL) {\r\n this._resetModifiedClassCells(changes);\r\n this._resetEditIndices()\r\n } else {\r\n if (\"update\" !== (null === (_changes$ = changes[0]) || void 0 === _changes$ ? void 0 : _changes$.type)) {\r\n this._resetEditIndices()\r\n }\r\n }\r\n if (editMode === EDIT_MODE_POPUP && this._editPopup) {\r\n this._editPopup.hide()\r\n }\r\n null === dataSource || void 0 === dataSource ? void 0 : dataSource.endLoading();\r\n this._refreshDataAfterSave(dataChanges, changes, deferred)\r\n },\r\n _cancelSaving: function(result) {\r\n var editMode = _getEditMode(this);\r\n var dataController = this._dataController;\r\n if (_isRowEditMode(this)) {\r\n if (!this.hasChanges()) {\r\n this._cancelEditDataCore()\r\n }\r\n } else {\r\n if (this.isCellOrBatchEditMode()) {\r\n if (editMode !== EDIT_MODE_CELL) {\r\n this._resetEditIndices()\r\n }\r\n dataController.updateItems()\r\n } else {\r\n this._focusEditingCell()\r\n }\r\n }\r\n this.executeAction(\"onSaved\", {\r\n changes: []\r\n });\r\n this._resolveAfterSave(result)\r\n },\r\n _refreshDataAfterSave: function(dataChanges, changes, deferred) {\r\n var _this19 = this;\r\n var dataController = this._dataController;\r\n var refreshMode = this.option(\"editing.refreshMode\");\r\n var isFullRefresh = \"reshape\" !== refreshMode && \"repaint\" !== refreshMode;\r\n if (!isFullRefresh) {\r\n dataController.push(dataChanges)\r\n }(0, _deferred.when)(dataController.refresh({\r\n selection: isFullRefresh,\r\n reload: isFullRefresh,\r\n load: \"reshape\" === refreshMode,\r\n changesOnly: this.option(\"repaintChangesOnly\")\r\n })).always(function() {\r\n _this19._fireSaveEditDataEvents(changes)\r\n }).done(function() {\r\n _this19._resolveAfterSave(deferred)\r\n }).fail(function(error) {\r\n _this19._resolveAfterSave(deferred, {\r\n error: error\r\n })\r\n })\r\n },\r\n isSaving: function() {\r\n return this._saving\r\n },\r\n _updateEditColumn: function() {\r\n var that = this;\r\n var isEditColumnVisible = that._isEditColumnVisible();\r\n var useIcons = that.option(\"editing.useIcons\");\r\n var cssClass = COMMAND_EDIT_CLASS + (useIcons ? \" \" + COMMAND_EDIT_WITH_ICONS_CLASS : \"\");\r\n that._columnsController.addCommandColumn({\r\n type: \"buttons\",\r\n command: \"edit\",\r\n visible: isEditColumnVisible,\r\n cssClass: cssClass,\r\n width: \"auto\",\r\n alignment: \"center\",\r\n cellTemplate: that._getEditCommandCellTemplate(),\r\n fixedPosition: \"right\"\r\n });\r\n that._columnsController.columnOption(\"command:edit\", {\r\n visible: isEditColumnVisible,\r\n cssClass: cssClass\r\n })\r\n },\r\n _isEditColumnVisible: function() {\r\n var that = this;\r\n var editingOptions = that.option(\"editing\");\r\n if (editingOptions) {\r\n var editMode = _getEditMode(that);\r\n var isVisibleWithCurrentEditMode = false;\r\n switch (editMode) {\r\n case EDIT_MODE_ROW:\r\n isVisibleWithCurrentEditMode = editingOptions.allowUpdating || editingOptions.allowAdding;\r\n break;\r\n case EDIT_MODE_FORM:\r\n case EDIT_MODE_POPUP:\r\n isVisibleWithCurrentEditMode = editingOptions.allowUpdating\r\n }\r\n return editingOptions.allowDeleting || isVisibleWithCurrentEditMode\r\n }\r\n },\r\n _updateEditButtons: function() {\r\n var that = this;\r\n var headerPanel = that.getView(\"headerPanel\");\r\n var hasChanges = that.hasChanges();\r\n if (headerPanel) {\r\n headerPanel.setToolbarItemDisabled(\"saveButton\", !hasChanges);\r\n headerPanel.setToolbarItemDisabled(\"revertButton\", !hasChanges)\r\n }\r\n },\r\n _applyModified: function($element) {\r\n $element && $element.addClass(CELL_MODIFIED)\r\n },\r\n _beforeCloseEditCellInBatchMode: function() {},\r\n cancelEditData: function() {\r\n var changes = this.getChanges();\r\n var params = {\r\n cancel: false,\r\n changes: changes\r\n };\r\n this.executeAction(\"onEditCanceling\", params);\r\n if (!params.cancel) {\r\n this._cancelEditDataCore();\r\n this.executeAction(\"onEditCanceled\", {\r\n changes: changes\r\n })\r\n }\r\n },\r\n _cancelEditDataCore: function() {\r\n var editMode = _getEditMode(this);\r\n var rowIndex = this._getVisibleEditRowIndex();\r\n var dataController = this._dataController;\r\n this._beforeCancelEditData();\r\n this.init();\r\n this.resetChanges();\r\n this._resetEditColumnName();\r\n this._resetEditRowKey();\r\n if (ROW_BASED_MODES.indexOf(editMode) !== -1 && rowIndex >= 0) {\r\n dataController.updateItems({\r\n changeType: \"update\",\r\n rowIndices: [rowIndex, rowIndex + 1]\r\n })\r\n } else {\r\n dataController.updateItems({\r\n repaintChangesOnly: this.option(\"repaintChangesOnly\")\r\n })\r\n }\r\n if (editMode === EDIT_MODE_POPUP) {\r\n this._hideEditPopup()\r\n }\r\n },\r\n _hideEditPopup: function() {\r\n this._editPopup && this._editPopup.option(\"visible\", false)\r\n },\r\n hasEditData: function() {\r\n return this.hasChanges()\r\n },\r\n closeEditCell: function(isError, withoutSaveEditData) {\r\n var _this20 = this;\r\n var that = this;\r\n var result = (0, _deferred.when)();\r\n var oldEditRowIndex = that._getVisibleEditRowIndex();\r\n if (!_isRowEditMode(that)) {\r\n var deferred = new _deferred.Deferred;\r\n result = new _deferred.Deferred;\r\n this.executeOperation(deferred, function() {\r\n _this20._closeEditCellCore(isError, oldEditRowIndex, withoutSaveEditData).always(result.resolve)\r\n })\r\n }\r\n return result.promise()\r\n },\r\n _closeEditCellCore: function(isError, oldEditRowIndex, withoutSaveEditData) {\r\n var _this21 = this;\r\n var editMode = _getEditMode(this);\r\n var dataController = this._dataController;\r\n var deferred = new _deferred.Deferred;\r\n var promise = deferred.promise();\r\n if (editMode === EDIT_MODE_CELL && this.hasChanges()) {\r\n if (!withoutSaveEditData) {\r\n this.saveEditData().done(function(error) {\r\n if (!_this21.hasChanges()) {\r\n _this21.closeEditCell(!!error).always(deferred.resolve);\r\n return\r\n }\r\n deferred.resolve()\r\n });\r\n return promise\r\n }\r\n } else {\r\n if (oldEditRowIndex >= 0) {\r\n var rowIndices = [oldEditRowIndex];\r\n this._resetEditRowKey();\r\n this._resetEditColumnName();\r\n this._beforeCloseEditCellInBatchMode(rowIndices);\r\n if (!isError) {\r\n dataController.updateItems({\r\n changeType: \"update\",\r\n rowIndices: rowIndices\r\n })\r\n }\r\n }\r\n }\r\n deferred.resolve();\r\n return promise\r\n },\r\n update: function(changeType) {\r\n var that = this;\r\n var dataController = that._dataController;\r\n if (dataController && that._pageIndex !== dataController.pageIndex()) {\r\n if (\"refresh\" === changeType) {\r\n that.refresh(true)\r\n }\r\n that._pageIndex = dataController.pageIndex()\r\n }\r\n that._updateEditButtons()\r\n },\r\n _getRowIndicesForCascadeUpdating: function(row, skipCurrentRow) {\r\n return skipCurrentRow ? [] : [row.rowIndex]\r\n },\r\n addDeferred: function(deferred) {\r\n var _this22 = this;\r\n if (this._deferreds.indexOf(deferred) < 0) {\r\n this._deferreds.push(deferred);\r\n deferred.always(function() {\r\n var index = _this22._deferreds.indexOf(deferred);\r\n if (index >= 0) {\r\n _this22._deferreds.splice(index, 1)\r\n }\r\n })\r\n }\r\n },\r\n _prepareChange: function(options, value, text) {\r\n var _options$row;\r\n var that = this;\r\n var newData = {};\r\n var oldData = null === (_options$row = options.row) || void 0 === _options$row ? void 0 : _options$row.data;\r\n var rowKey = options.key;\r\n var $cellElement = (0, _renderer.default)(options.cellElement);\r\n var editMode = _getEditMode(that);\r\n var deferred = new _deferred.Deferred;\r\n if (void 0 !== rowKey) {\r\n if (editMode === EDIT_MODE_BATCH) {\r\n that._applyModified($cellElement, options)\r\n }\r\n options.value = value;\r\n var setCellValueResult = (0, _deferred.fromPromise)(options.column.setCellValue(newData, value, (0, _extend.extend)(true, {}, oldData), text));\r\n setCellValueResult.done(function() {\r\n deferred.resolve({\r\n data: newData,\r\n key: rowKey,\r\n oldData: oldData,\r\n type: DATA_EDIT_DATA_UPDATE_TYPE\r\n })\r\n }).fail(createFailureHandler(deferred)).fail(function(arg) {\r\n return that._fireDataErrorOccurred(arg)\r\n });\r\n if ((0, _type.isDefined)(text) && options.column.displayValueMap) {\r\n options.column.displayValueMap[value] = text\r\n }\r\n that._updateRowValues(options);\r\n that.addDeferred(deferred)\r\n }\r\n return deferred\r\n },\r\n _updateRowValues: function(options) {\r\n if (options.values) {\r\n var dataController = this._dataController;\r\n var rowIndex = dataController.getRowIndexByKey(options.key);\r\n var row = dataController.getVisibleRows()[rowIndex];\r\n if (row) {\r\n options.values = row.values\r\n }\r\n options.values[options.columnIndex] = options.value\r\n }\r\n },\r\n updateFieldValue: function(options, value, text, forceUpdateRow) {\r\n var _this23 = this;\r\n var rowKey = options.key;\r\n var deferred = new _deferred.Deferred;\r\n if (void 0 === rowKey) {\r\n this._dataController.fireError(\"E1043\")\r\n }\r\n if (options.column.setCellValue) {\r\n this._prepareChange(options, value, text).done(function(params) {\r\n (0, _deferred.when)(_this23._applyChange(options, params, forceUpdateRow)).always(function() {\r\n deferred.resolve()\r\n })\r\n })\r\n } else {\r\n deferred.resolve()\r\n }\r\n return deferred.promise()\r\n },\r\n _focusPreviousEditingCellIfNeed: function(options) {\r\n var that = this;\r\n if (that.hasEditData() && !that.isEditCell(options.rowIndex, options.columnIndex)) {\r\n that._focusEditingCell();\r\n that._updateEditRow(options.row, true);\r\n return true\r\n }\r\n },\r\n _needUpdateRow: function(column) {\r\n var visibleColumns = this._columnsController.getVisibleColumns();\r\n if (!column) {\r\n column = this._getEditColumn()\r\n }\r\n var isCustomSetCellValue = column && column.setCellValue !== column.defaultSetCellValue;\r\n var isCustomCalculateCellValue = visibleColumns.some(function(visibleColumn) {\r\n return visibleColumn.calculateCellValue !== visibleColumn.defaultCalculateCellValue\r\n });\r\n return isCustomSetCellValue || isCustomCalculateCellValue\r\n },\r\n _applyChange: function(options, params, forceUpdateRow) {\r\n var that = this;\r\n var editMode = _getEditMode(that);\r\n var isCustomSetCellValue = options.column.setCellValue !== options.column.defaultSetCellValue;\r\n var showEditorAlways = options.column.showEditorAlways;\r\n var isUpdateInCellMode = editMode === EDIT_MODE_CELL && options.row && !options.row.isNewRow;\r\n var focusPreviousEditingCell = showEditorAlways && !forceUpdateRow && isUpdateInCellMode && that.hasEditData() && !that.isEditCell(options.rowIndex, options.columnIndex);\r\n if (focusPreviousEditingCell) {\r\n that._focusEditingCell();\r\n that._updateEditRow(options.row, true, isCustomSetCellValue);\r\n return\r\n }\r\n that._addChange(params, options.row);\r\n that._updateEditButtons();\r\n if (showEditorAlways && !forceUpdateRow) {\r\n if (isUpdateInCellMode) {\r\n that._setEditRowKey(options.row.key, true);\r\n that._setEditColumnNameByIndex(options.columnIndex, true);\r\n return that.saveEditData()\r\n } else {\r\n if (editMode === EDIT_MODE_BATCH) {\r\n forceUpdateRow = that._needUpdateRow(options.column)\r\n }\r\n }\r\n }\r\n var row = options.row;\r\n if (row) {\r\n if (forceUpdateRow || isCustomSetCellValue) {\r\n that._updateEditRow(row, forceUpdateRow, isCustomSetCellValue)\r\n } else {\r\n if (row.update) {\r\n row.update()\r\n }\r\n }\r\n }\r\n },\r\n _updateEditRowCore: function(row, skipCurrentRow, isCustomSetCellValue) {\r\n var that = this;\r\n var editForm = that._editForm;\r\n var editMode = _getEditMode(that);\r\n if (editMode === EDIT_MODE_POPUP) {\r\n if (that.option(\"repaintChangesOnly\")) {\r\n row.update && row.update(row)\r\n } else {\r\n if (editForm) {\r\n that._updateEditFormDeferred = (new _deferred.Deferred).done(function() {\r\n return editForm.repaint()\r\n });\r\n if (!that._updateLockCount) {\r\n that._updateEditFormDeferred.resolve()\r\n }\r\n }\r\n }\r\n } else {\r\n that._dataController.updateItems({\r\n changeType: \"update\",\r\n rowIndices: that._getRowIndicesForCascadeUpdating(row, skipCurrentRow)\r\n })\r\n }\r\n },\r\n _endUpdateCore: function() {\r\n this._updateEditFormDeferred && this._updateEditFormDeferred.resolve()\r\n },\r\n _updateEditRow: function(row, forceUpdateRow, isCustomSetCellValue) {\r\n var that = this;\r\n if (forceUpdateRow || !_isRowEditMode(that)) {\r\n that._updateEditRowCore(row, !forceUpdateRow, isCustomSetCellValue);\r\n if (!forceUpdateRow) {\r\n that._focusEditingCell()\r\n }\r\n } else {\r\n var deferred = new _deferred.Deferred;\r\n that.addDeferred(deferred);\r\n setTimeout(function() {\r\n var $focusedElement = (0, _renderer.default)(_dom_adapter.default.getActiveElement());\r\n var columnIndex = that._rowsView.getCellIndex($focusedElement, row.rowIndex);\r\n var focusedElement = $focusedElement.get(0);\r\n var selectionRange = _uiGrid_core2.default.getSelectionRange(focusedElement);\r\n that._updateEditRowCore(row, false, isCustomSetCellValue);\r\n if (columnIndex >= 0) {\r\n var $focusedItem = that._rowsView._getCellElement(row.rowIndex, columnIndex);\r\n that._delayedInputFocus($focusedItem, function() {\r\n setTimeout(function() {\r\n focusedElement = _dom_adapter.default.getActiveElement();\r\n if (selectionRange.selectionStart >= 0) {\r\n _uiGrid_core2.default.setSelectionRange(focusedElement, selectionRange)\r\n }\r\n })\r\n })\r\n }\r\n deferred.resolve()\r\n })\r\n }\r\n },\r\n _addChange: function(options, row) {\r\n var changes = _toConsumableArray(this.getChanges());\r\n var index = _uiGrid_core2.default.getIndexByKey(options.key, changes);\r\n if (index < 0) {\r\n index = changes.length;\r\n this._addInternalData({\r\n key: options.key,\r\n oldData: options.oldData\r\n });\r\n delete options.oldData;\r\n changes.push(options)\r\n }\r\n var change = _objectSpread({}, changes[index]);\r\n if (change) {\r\n if (options.data) {\r\n change.data = (0, _array_utils.createObjectWithChanges)(change.data, options.data)\r\n }\r\n if ((!change.type || !options.data) && options.type) {\r\n change.type = options.type\r\n }\r\n if (row) {\r\n row.oldData = this._getOldData(row.key);\r\n row.data = (0, _array_utils.createObjectWithChanges)(row.data, options.data)\r\n }\r\n }\r\n changes[index] = change;\r\n this._silentOption(EDITING_CHANGES_OPTION_NAME, changes);\r\n return index\r\n },\r\n _getFormEditItemTemplate: function(cellOptions, column) {\r\n return column.editCellTemplate || getDefaultEditorTemplate(this)\r\n },\r\n renderFormEditTemplate: function(detailCellOptions, item, form, container, isReadOnly) {\r\n var that = this;\r\n var $container = (0, _renderer.default)(container);\r\n var column = item.column;\r\n var editorType = getEditorType(item);\r\n var rowData = null === detailCellOptions || void 0 === detailCellOptions ? void 0 : detailCellOptions.row.data;\r\n var cellOptions = (0, _extend.extend)({}, detailCellOptions, {\r\n data: rowData,\r\n cellElement: null,\r\n isOnForm: true,\r\n item: item,\r\n column: (0, _extend.extend)({}, column, {\r\n editorType: editorType,\r\n editorOptions: item.editorOptions\r\n }),\r\n id: form.getItemID(item.name || item.dataField),\r\n columnIndex: column.index,\r\n setValue: !isReadOnly && column.allowEditing && function(value) {\r\n that.updateFieldValue(cellOptions, value)\r\n }\r\n });\r\n cellOptions.value = column.calculateCellValue(rowData);\r\n var template = that._getFormEditItemTemplate.bind(that)(cellOptions, column);\r\n that._rowsView.renderTemplate($container, template, cellOptions, !!$container.closest((0, _window.getWindow)().document).length).done(function() {\r\n that._rowsView._updateCell($container, cellOptions)\r\n });\r\n return cellOptions\r\n },\r\n getFormEditorTemplate: function(cellOptions, item) {\r\n var that = this;\r\n var column = this.component.columnOption(item.dataField);\r\n return function(options, container) {\r\n var $container = (0, _renderer.default)(container);\r\n cellOptions.row.watch && cellOptions.row.watch(function() {\r\n return column.selector(cellOptions.row.data)\r\n }, function() {\r\n var _validator;\r\n var $editorElement = $container.find(\".dx-widget\").first();\r\n var validator = $editorElement.data(\"dxValidator\");\r\n var validatorOptions = null === (_validator = validator) || void 0 === _validator ? void 0 : _validator.option();\r\n $container.contents().remove();\r\n cellOptions = that.renderFormEditTemplate.bind(that)(cellOptions, item, options.component, $container);\r\n $editorElement = $container.find(\".dx-widget\").first();\r\n validator = $editorElement.data(\"dxValidator\");\r\n if (validatorOptions && !validator) {\r\n $editorElement.dxValidator({\r\n validationRules: validatorOptions.validationRules,\r\n validationGroup: validatorOptions.validationGroup,\r\n dataGetter: validatorOptions.dataGetter\r\n })\r\n }\r\n });\r\n cellOptions = that.renderFormEditTemplate.bind(that)(cellOptions, item, options.component, $container)\r\n }\r\n },\r\n getEditFormOptions: function(detailOptions) {\r\n var userCustomizeItem = this.option(\"editing.form.customizeItem\");\r\n var editFormItemClass = this.addWidgetPrefix(EDIT_FORM_ITEM_CLASS);\r\n var items = this.option(\"editing.form.items\");\r\n var isCustomEditorType = {};\r\n var that = this;\r\n if (!items) {\r\n var columns = this.getController(\"columns\").getColumns();\r\n items = [];\r\n (0, _iterator.each)(columns, function(_, column) {\r\n if (!column.isBand && !column.type) {\r\n items.push({\r\n column: column,\r\n name: column.name,\r\n dataField: column.dataField\r\n })\r\n }\r\n })\r\n } else {\r\n forEachFormItems(items, function(item) {\r\n var itemId = (null === item || void 0 === item ? void 0 : item.name) || (null === item || void 0 === item ? void 0 : item.dataField);\r\n if (itemId) {\r\n isCustomEditorType[itemId] = !!item.editorType\r\n }\r\n })\r\n }\r\n return {\r\n items: items,\r\n formID: \"dx-\" + new _guid.default,\r\n customizeItem: function(item) {\r\n var column;\r\n var itemId = item.name || item.dataField;\r\n if (item.column || itemId) {\r\n column = item.column || that._columnsController.columnOption(item.name ? \"name:\" + item.name : \"dataField:\" + item.dataField)\r\n }\r\n if (column) {\r\n item.label = item.label || {};\r\n item.label.text = item.label.text || column.caption;\r\n item.template = item.template || that.getFormEditorTemplate(detailOptions, item);\r\n item.column = column;\r\n item.isCustomEditorType = isCustomEditorType[itemId];\r\n if (column.formItem) {\r\n (0, _extend.extend)(item, column.formItem)\r\n }\r\n if (void 0 === item.isRequired && column.validationRules) {\r\n item.isRequired = column.validationRules.some(function(rule) {\r\n return \"required\" === rule.type\r\n });\r\n item.validationRules = []\r\n }\r\n var itemVisible = (0, _type.isDefined)(item.visible) ? item.visible : true;\r\n if (!that._firstFormItem && itemVisible) {\r\n that._firstFormItem = item\r\n }\r\n }\r\n userCustomizeItem && userCustomizeItem.call(this, item);\r\n item.cssClass = (0, _type.isString)(item.cssClass) ? item.cssClass + \" \" + editFormItemClass : editFormItemClass\r\n }\r\n }\r\n },\r\n getEditFormTemplate: function() {\r\n var that = this;\r\n return function($container, detailOptions, renderFormOnly) {\r\n var editFormOptions = that.option(\"editing.form\");\r\n var baseEditFormOptions = that.getEditFormOptions(detailOptions);\r\n that._firstFormItem = void 0;\r\n that._editForm = that._createComponent((0, _renderer.default)(\"
\").appendTo($container), _form.default, (0, _extend.extend)({}, editFormOptions, baseEditFormOptions));\r\n if (!renderFormOnly) {\r\n var $buttonsContainer = (0, _renderer.default)(\"
\").addClass(that.addWidgetPrefix(FORM_BUTTONS_CONTAINER_CLASS)).appendTo($container);\r\n that._createComponent((0, _renderer.default)(\"
\").appendTo($buttonsContainer), _button.default, that._getSaveButtonConfig());\r\n that._createComponent((0, _renderer.default)(\"
\").appendTo($buttonsContainer), _button.default, that._getCancelButtonConfig())\r\n }\r\n that._editForm.on(\"contentReady\", function() {\r\n that._editPopup && that._editPopup.repaint()\r\n })\r\n }\r\n },\r\n getColumnTemplate: function(options) {\r\n var that = this;\r\n var column = options.column;\r\n var rowIndex = options.row && options.row.rowIndex;\r\n var template;\r\n var isRowMode = _isRowEditMode(that);\r\n var isRowEditing = that.isEditRow(rowIndex);\r\n var isCellEditing = that.isEditCell(rowIndex, options.columnIndex);\r\n var editingStartOptions;\r\n if ((column.showEditorAlways || column.setCellValue && (isRowEditing && column.allowEditing || isCellEditing)) && (\"data\" === options.rowType || \"detailAdaptive\" === options.rowType) && !column.command) {\r\n var allowUpdating = that.allowUpdating(options);\r\n if (((allowUpdating || isRowEditing) && column.allowEditing || isCellEditing) && (isRowMode && isRowEditing || !isRowMode)) {\r\n if (column.showEditorAlways && !isRowMode) {\r\n editingStartOptions = {\r\n cancel: false,\r\n key: options.row.isNewRow ? void 0 : options.row.key,\r\n data: options.row.data,\r\n column: column\r\n };\r\n that._isEditingStart(editingStartOptions)\r\n }\r\n if (!editingStartOptions || !editingStartOptions.cancel) {\r\n options.setValue = function(value, text) {\r\n that.updateFieldValue(options, value, text)\r\n }\r\n }\r\n }\r\n template = column.editCellTemplate || getDefaultEditorTemplate(that)\r\n } else {\r\n if (\"detail\" === column.command && \"detail\" === options.rowType && isRowEditing) {\r\n template = that.getEditFormTemplate(options)\r\n }\r\n }\r\n return template\r\n },\r\n _createButton: function($container, button, options) {\r\n var that = this;\r\n var icon = EDIT_ICON_CLASS[button.name];\r\n var useIcons = that.option(\"editing.useIcons\");\r\n var $button = (0, _renderer.default)(\"\").attr(\"href\", \"#\").addClass(LINK_CLASS).addClass(button.cssClass);\r\n if (button.template) {\r\n that._rowsView.renderTemplate($container, button.template, options, true)\r\n } else {\r\n if (useIcons && icon || button.icon) {\r\n icon = button.icon || icon;\r\n var iconType = iconUtils.getImageSourceType(icon);\r\n if (\"image\" === iconType || \"svg\" === iconType) {\r\n $button = iconUtils.getImageContainer(icon).addClass(button.cssClass)\r\n } else {\r\n $button.addClass(\"dx-icon\" + (\"dxIcon\" === iconType ? \"-\" : \" \") + icon).attr(\"title\", button.text)\r\n }\r\n $button.addClass(\"dx-link-icon\");\r\n $container.addClass(COMMAND_EDIT_WITH_ICONS_CLASS);\r\n var localizationName = this.getButtonLocalizationNames()[button.name];\r\n localizationName && $button.attr(\"aria-label\", _message.default.format(localizationName))\r\n } else {\r\n $button.text(button.text)\r\n }\r\n if ((0, _type.isDefined)(button.hint)) {\r\n $button.attr(\"title\", button.hint)\r\n }\r\n _events_engine.default.on($button, (0, _index.addNamespace)(\"click\", EDITING_NAMESPACE), that.createAction(function(e) {\r\n button.onClick.call(button, (0, _extend.extend)({}, e, {\r\n row: options.row,\r\n column: options.column\r\n }));\r\n e.event.preventDefault();\r\n e.event.stopPropagation()\r\n }));\r\n $container.append($button, \" \")\r\n }\r\n },\r\n getButtonLocalizationNames: function() {\r\n return {\r\n edit: \"dxDataGrid-editingEditRow\",\r\n save: \"dxDataGrid-editingSaveRowChanges\",\r\n \"delete\": \"dxDataGrid-editingDeleteRow\",\r\n undelete: \"dxDataGrid-editingUndeleteRow\",\r\n cancel: \"dxDataGrid-editingCancelRowChanges\"\r\n }\r\n },\r\n prepareEditButtons: function(headerPanel) {\r\n var that = this;\r\n var editingOptions = that.option(\"editing\") || {};\r\n var editingTexts = that.option(\"editing.texts\") || {};\r\n var titleButtonTextByClassNames = {\r\n revert: editingTexts.cancelAllChanges,\r\n save: editingTexts.saveAllChanges,\r\n addRow: editingTexts.addRow\r\n };\r\n var classNameButtonByNames = {\r\n revert: \"cancel\",\r\n save: \"save\",\r\n addRow: \"addrow\"\r\n };\r\n var buttonItems = [];\r\n var prepareButtonItem = function(name, methodName, sortIndex) {\r\n var className = classNameButtonByNames[name];\r\n var onInitialized = function(e) {\r\n (0, _renderer.default)(e.element).addClass(headerPanel._getToolbarButtonClass(EDIT_BUTTON_CLASS + \" \" + that.addWidgetPrefix(className) + \"-button\"))\r\n };\r\n var hintText = titleButtonTextByClassNames[name];\r\n var isButtonDisabled = (\"save\" === className || \"cancel\" === className) && !that.hasChanges();\r\n return {\r\n widget: \"dxButton\",\r\n options: {\r\n onInitialized: onInitialized,\r\n icon: \"edit-button-\" + className,\r\n disabled: isButtonDisabled,\r\n onClick: function() {\r\n setTimeout(function() {\r\n that[methodName]()\r\n })\r\n },\r\n text: hintText,\r\n hint: hintText\r\n },\r\n showText: \"inMenu\",\r\n name: name + \"Button\",\r\n location: \"after\",\r\n locateInMenu: \"auto\",\r\n sortIndex: sortIndex\r\n }\r\n };\r\n if (editingOptions.allowAdding) {\r\n buttonItems.push(prepareButtonItem(\"addRow\", \"addRow\", 20))\r\n }\r\n if ((editingOptions.allowUpdating || editingOptions.allowAdding || editingOptions.allowDeleting) && _getEditMode(that) === EDIT_MODE_BATCH) {\r\n buttonItems.push(prepareButtonItem(\"save\", \"saveEditData\", 21));\r\n buttonItems.push(prepareButtonItem(\"revert\", \"cancelEditData\", 22))\r\n }\r\n return buttonItems\r\n },\r\n highlightDataCell: function($cell, parameters) {\r\n var cellModified = this.isCellModified(parameters);\r\n cellModified && parameters.column.setCellValue && $cell.addClass(CELL_MODIFIED)\r\n },\r\n _afterInsertRow: function() {},\r\n _beforeSaveEditData: function(change) {\r\n if (change && !(0, _type.isDefined)(change.key) && (0, _type.isDefined)(change.type)) {\r\n return true\r\n }\r\n },\r\n _afterSaveEditData: function() {},\r\n _beforeCancelEditData: function() {},\r\n _allowEditAction: function(actionName, options) {\r\n var allowEditAction = this.option(\"editing.\" + actionName);\r\n if ((0, _type.isFunction)(allowEditAction)) {\r\n allowEditAction = allowEditAction({\r\n component: this.component,\r\n row: options.row\r\n })\r\n }\r\n return allowEditAction\r\n },\r\n allowUpdating: function(options, eventName) {\r\n var startEditAction = this.option(\"editing.startEditAction\") || DEFAULT_START_EDIT_ACTION;\r\n var needCallback = arguments.length > 1 ? startEditAction === eventName || \"down\" === eventName : true;\r\n return needCallback && this._allowEditAction(\"allowUpdating\", options)\r\n },\r\n allowDeleting: function(options) {\r\n return this._allowEditAction(\"allowDeleting\", options)\r\n },\r\n isCellModified: function(parameters) {\r\n var columnIndex = parameters.columnIndex;\r\n var modifiedValues = parameters.row && (parameters.row.isNewRow ? parameters.row.values : parameters.row.modifiedValues);\r\n return !!modifiedValues && void 0 !== modifiedValues[columnIndex]\r\n }\r\n }\r\n}());\r\nvar _default = {\r\n defaultOptions: function() {\r\n return {\r\n editing: {\r\n mode: \"row\",\r\n refreshMode: \"full\",\r\n allowAdding: false,\r\n allowUpdating: false,\r\n allowDeleting: false,\r\n useIcons: false,\r\n selectTextOnEditStart: false,\r\n confirmDelete: true,\r\n texts: {\r\n editRow: _message.default.format(\"dxDataGrid-editingEditRow\"),\r\n saveAllChanges: _message.default.format(\"dxDataGrid-editingSaveAllChanges\"),\r\n saveRowChanges: _message.default.format(\"dxDataGrid-editingSaveRowChanges\"),\r\n cancelAllChanges: _message.default.format(\"dxDataGrid-editingCancelAllChanges\"),\r\n cancelRowChanges: _message.default.format(\"dxDataGrid-editingCancelRowChanges\"),\r\n addRow: _message.default.format(\"dxDataGrid-editingAddRow\"),\r\n deleteRow: _message.default.format(\"dxDataGrid-editingDeleteRow\"),\r\n undeleteRow: _message.default.format(\"dxDataGrid-editingUndeleteRow\"),\r\n confirmDeleteMessage: _message.default.format(\"dxDataGrid-editingConfirmDeleteMessage\"),\r\n confirmDeleteTitle: \"\"\r\n },\r\n form: {\r\n colCount: 2\r\n },\r\n popup: {},\r\n startEditAction: \"click\",\r\n editRowKey: null,\r\n editColumnName: null,\r\n changes: []\r\n }\r\n }\r\n },\r\n controllers: {\r\n editing: EditingController\r\n },\r\n extenders: {\r\n controllers: {\r\n data: {\r\n init: function() {\r\n this._editingController = this.getController(\"editing\");\r\n this.callBase()\r\n },\r\n reload: function(full, repaintChangesOnly) {\r\n !repaintChangesOnly && this._editingController.refresh();\r\n return this.callBase.apply(this, arguments)\r\n },\r\n repaintRows: function() {\r\n if (this.getController(\"editing\").isSaving()) {\r\n return\r\n }\r\n return this.callBase.apply(this, arguments)\r\n },\r\n _updateEditRow: function(items) {\r\n var editingController = this._editingController;\r\n var editRowKey = this.option(EDITING_EDITROWKEY_OPTION_NAME);\r\n var editRowIndex = _uiGrid_core2.default.getIndexByKey(editRowKey, items);\r\n var editItem = items[editRowIndex];\r\n if (editItem) {\r\n editItem.isEditing = true;\r\n if (editingController.getEditMode() === EDIT_MODE_FORM) {\r\n editItem.rowType = \"detail\"\r\n }\r\n }\r\n },\r\n _updateItemsCore: function(change) {\r\n this.callBase(change);\r\n this._updateEditRow(this.items())\r\n },\r\n _applyChangeUpdate: function(change) {\r\n this._updateEditRow(change.items);\r\n this.callBase(change)\r\n },\r\n _applyChangesOnly: function(change) {\r\n this._updateEditRow(change.items);\r\n this.callBase(change)\r\n },\r\n _processItems: function(items, change) {\r\n items = this._editingController.processItems(items, change);\r\n return this.callBase(items, change)\r\n },\r\n _processDataItem: function(dataItem, options) {\r\n this._editingController.processDataItem(dataItem, options, this.generateDataValues);\r\n return this.callBase(dataItem, options)\r\n },\r\n _processItem: function(item, options) {\r\n item = this.callBase(item, options);\r\n if (item.isNewRow) {\r\n options.dataIndex--;\r\n delete item.dataIndex\r\n }\r\n return item\r\n },\r\n _getChangedColumnIndices: function(oldItem, newItem, rowIndex, isLiveUpdate) {\r\n var editingController = this.getController(\"editing\");\r\n var isRowEditMode = editingController.isRowEditMode();\r\n if (oldItem.isNewRow !== newItem.isNewRow || oldItem.removed !== newItem.removed || isRowEditMode && oldItem.isEditing !== newItem.isEditing) {\r\n return\r\n }\r\n return this.callBase.apply(this, arguments)\r\n },\r\n _isCellChanged: function(oldRow, newRow, visibleRowIndex, columnIndex, isLiveUpdate) {\r\n var editingController = this.getController(\"editing\");\r\n var cell = oldRow.cells && oldRow.cells[columnIndex];\r\n var isEditing = editingController && editingController.isEditCell(visibleRowIndex, columnIndex);\r\n if (isLiveUpdate && isEditing) {\r\n return false\r\n }\r\n if (cell && cell.column && !cell.column.showEditorAlways && cell.isEditing !== isEditing) {\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 init: function() {\r\n this.callBase();\r\n this._editingController = this.getController(\"editing\")\r\n },\r\n getCellElements: function(rowIndex) {\r\n var $cellElements = this.callBase(rowIndex);\r\n var editingController = this._editingController;\r\n var editForm = editingController.getEditForm();\r\n var editFormRowIndex = editingController.getEditFormRowIndex();\r\n if (editFormRowIndex === rowIndex && $cellElements && editForm) {\r\n return editForm.$element().find(\".\" + this.addWidgetPrefix(EDIT_FORM_ITEM_CLASS) + \", .\" + BUTTON_CLASS)\r\n }\r\n return $cellElements\r\n },\r\n getCellIndex: function($cell, rowIndex) {\r\n if (!$cell.is(\"td\") && rowIndex >= 0) {\r\n var $cellElements = this.getCellElements(rowIndex);\r\n var cellIndex = -1;\r\n (0, _iterator.each)($cellElements, function(index, cellElement) {\r\n if ((0, _renderer.default)(cellElement).find($cell).length) {\r\n cellIndex = index\r\n }\r\n });\r\n return cellIndex\r\n }\r\n return this.callBase.apply(this, arguments)\r\n },\r\n _getVisibleColumnIndex: function($cells, rowIndex, columnIdentifier) {\r\n var editFormRowIndex = this._editingController.getEditFormRowIndex();\r\n if (editFormRowIndex === rowIndex && (0, _type.isString)(columnIdentifier)) {\r\n var column = this._columnsController.columnOption(columnIdentifier);\r\n return this._getEditFormEditorVisibleIndex($cells, column)\r\n }\r\n return this.callBase.apply(this, arguments)\r\n },\r\n _getEditFormEditorVisibleIndex: function($cells, column) {\r\n var visibleIndex = -1;\r\n (0, _iterator.each)($cells, function(index, cellElement) {\r\n var item = (0, _renderer.default)(cellElement).find(\".dx-field-item-content\").data(\"dx-form-item\");\r\n if (item && item.column && column && item.column.index === column.index) {\r\n visibleIndex = index;\r\n return false\r\n }\r\n });\r\n return visibleIndex\r\n },\r\n publicMethods: function() {\r\n return this.callBase().concat([\"cellValue\"])\r\n },\r\n _getCellTemplate: function(options) {\r\n var that = this;\r\n var template = that._editingController.getColumnTemplate(options);\r\n return template || that.callBase(options)\r\n },\r\n _isNativeClick: function() {\r\n return (_devices.default.real().ios || _devices.default.real().android) && this.option(\"editing.allowUpdating\")\r\n },\r\n _createTable: function() {\r\n var that = this;\r\n var $table = that.callBase.apply(that, arguments);\r\n if (!_isRowEditMode(that) && that.option(\"editing.allowUpdating\")) {\r\n _events_engine.default.on($table, (0, _index.addNamespace)(_hold.default.name, \"dxDataGridRowsView\"), \"td:not(.\" + EDITOR_CELL_CLASS + \")\", that.createAction(function() {\r\n var editingController = that._editingController;\r\n if (editingController.isEditing()) {\r\n editingController.closeEditCell()\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 editingController = this._editingController;\r\n var isEditRow = editingController.isEditRow(row.rowIndex);\r\n var isRowRemoved = !!row.removed;\r\n var isRowInserted = !!row.isNewRow;\r\n var isRowModified = !!row.modified;\r\n if (_getEditMode(this) === EDIT_MODE_BATCH) {\r\n isRowRemoved && $row.addClass(ROW_REMOVED)\r\n } else {\r\n isEditRow && $row.addClass(EDIT_ROW)\r\n }\r\n isRowInserted && $row.addClass(ROW_INSERTED);\r\n isRowModified && $row.addClass(ROW_MODIFIED);\r\n if (isEditRow || isRowInserted || isRowRemoved) {\r\n $row.removeClass(ROW_SELECTED)\r\n }\r\n if (isEditRow && \"detail\" === row.rowType) {\r\n $row.addClass(this.addWidgetPrefix(EDIT_FORM_CLASS))\r\n }\r\n }\r\n return $row\r\n },\r\n _getColumnIndexByElement: function($element) {\r\n var $tableElement = $element.closest(\"table\");\r\n var $tableElements = this.getTableElements();\r\n while ($tableElement.length && !$tableElements.filter($tableElement).length) {\r\n $element = $tableElement.closest(\"td\");\r\n $tableElement = $element.closest(\"table\")\r\n }\r\n return this._getColumnIndexByElementCore($element)\r\n },\r\n _getColumnIndexByElementCore: function($element) {\r\n var $targetElement = $element.closest(\".\" + ROW_CLASS + \"> td:not(.dx-master-detail-cell)\");\r\n return this.getCellIndex($targetElement)\r\n },\r\n _editCellByClick: function(e, eventName) {\r\n var that = this;\r\n var editingController = that._editingController;\r\n var $targetElement = (0, _renderer.default)(e.event.target);\r\n var columnIndex = that._getColumnIndexByElement($targetElement);\r\n var row = that._dataController.items()[e.rowIndex];\r\n var allowUpdating = editingController.allowUpdating({\r\n row: row\r\n }, eventName) || row && row.isNewRow;\r\n var column = that._columnsController.getVisibleColumns()[columnIndex];\r\n var allowEditing = allowUpdating && column && (column.allowEditing || editingController.isEditCell(e.rowIndex, columnIndex));\r\n var startEditAction = that.option(\"editing.startEditAction\") || \"click\";\r\n if (\"down\" === eventName) {\r\n return column && column.showEditorAlways && allowEditing && editingController.editCell(e.rowIndex, columnIndex)\r\n }\r\n if (\"click\" === eventName && \"dblClick\" === startEditAction && !editingController.isEditCell(e.rowIndex, columnIndex)) {\r\n editingController.closeEditCell()\r\n }\r\n if (allowEditing && eventName === startEditAction) {\r\n return editingController.editCell(e.rowIndex, columnIndex) || editingController.isEditRow(e.rowIndex)\r\n }\r\n },\r\n _rowPointerDown: function(e) {\r\n var _this24 = this;\r\n this._pointerDownTimeout = setTimeout(function() {\r\n _this24._editCellByClick(e, \"down\")\r\n })\r\n },\r\n _rowClick: function(e) {\r\n var isEditForm = (0, _renderer.default)(e.rowElement).hasClass(this.addWidgetPrefix(EDIT_FORM_CLASS));\r\n e.event[TARGET_COMPONENT_NAME] = this.component;\r\n if (!this._editCellByClick(e, \"click\") && !isEditForm) {\r\n this.callBase.apply(this, arguments)\r\n }\r\n },\r\n _rowDblClick: function(e) {\r\n if (!this._editCellByClick(e, \"dblClick\")) {\r\n this.callBase.apply(this, arguments)\r\n }\r\n },\r\n _cellPrepared: function($cell, parameters) {\r\n var editingController = this._editingController;\r\n var isCommandCell = !!parameters.column.command;\r\n var isEditableCell = parameters.setValue;\r\n var isEditRow = editingController.isEditRow(parameters.rowIndex);\r\n var isEditing = isEditingCell(isEditRow, parameters);\r\n if (isEditingOrShowEditorAlwaysDataCell(isEditRow, parameters)) {\r\n var alignment = parameters.column.alignment;\r\n $cell.toggleClass(this.addWidgetPrefix(READONLY_CLASS), !isEditableCell).toggleClass(CELL_FOCUS_DISABLED_CLASS, !isEditableCell);\r\n if (alignment) {\r\n $cell.find(EDITORS_INPUT_SELECTOR).first().css(\"textAlign\", alignment)\r\n }\r\n }\r\n if (isEditing) {\r\n this._editCellPrepared($cell)\r\n }\r\n if (parameters.column && !isCommandCell) {\r\n editingController.highlightDataCell($cell, parameters)\r\n }\r\n this.callBase.apply(this, arguments)\r\n },\r\n _editCellPrepared: function($cell) {},\r\n _formItemPrepared: function() {},\r\n _isFormItem: function(parameters) {\r\n var isDetailRow = \"detail\" === parameters.rowType || \"detailAdaptive\" === parameters.rowType;\r\n var isPopupEditing = \"data\" === parameters.rowType && \"popup\" === _getEditMode(this);\r\n return (isDetailRow || isPopupEditing) && parameters.item\r\n },\r\n _updateCell: function($cell, parameters) {\r\n if (this._isFormItem(parameters)) {\r\n this._formItemPrepared(parameters, $cell)\r\n } else {\r\n this.callBase($cell, parameters)\r\n }\r\n },\r\n _update: function(change) {\r\n this.callBase(change);\r\n if (\"updateSelection\" === change.changeType) {\r\n this.getTableElements().children(\"tbody\").children(\".\" + EDIT_ROW).removeClass(ROW_SELECTED)\r\n }\r\n },\r\n _getCellOptions: function(options) {\r\n var cellOptions = this.callBase(options);\r\n cellOptions.isEditing = this._editingController.isEditCell(cellOptions.rowIndex, cellOptions.columnIndex);\r\n return cellOptions\r\n },\r\n _createCell: function(options) {\r\n var $cell = this.callBase(options);\r\n var isEditRow = this._editingController.isEditRow(options.rowIndex);\r\n isEditingOrShowEditorAlwaysDataCell(isEditRow, options) && $cell.addClass(EDITOR_CELL_CLASS);\r\n return $cell\r\n },\r\n _renderCellContent: function($cell, options) {\r\n if (\"data\" === options.rowType && _getEditMode(this) === EDIT_MODE_POPUP && false === options.row.visible) {\r\n return\r\n }\r\n this.callBase.apply(this, arguments)\r\n },\r\n cellValue: function(rowIndex, columnIdentifier, value, text) {\r\n var cellOptions = this.getCellOptions(rowIndex, columnIdentifier);\r\n if (cellOptions) {\r\n if (void 0 === value) {\r\n return cellOptions.value\r\n } else {\r\n this._editingController.updateFieldValue(cellOptions, value, text, true)\r\n }\r\n }\r\n },\r\n dispose: function() {\r\n this.callBase.apply(this, arguments);\r\n clearTimeout(this._pointerDownTimeout)\r\n },\r\n _renderCore: function() {\r\n this.callBase.apply(this, arguments);\r\n this._editingController._focusEditorIfNeed()\r\n }\r\n },\r\n headerPanel: {\r\n _getToolbarItems: function() {\r\n var items = this.callBase();\r\n var editButtonItems = this.getController(\"editing\").prepareEditButtons(this);\r\n return editButtonItems.concat(items)\r\n },\r\n optionChanged: function(args) {\r\n var fullName = args.fullName;\r\n switch (args.name) {\r\n case \"editing\":\r\n var excludedOptions = [EDITING_POPUP_OPTION_NAME, EDITING_CHANGES_OPTION_NAME, EDITING_EDITCOLUMNNAME_OPTION_NAME, EDITING_EDITROWKEY_OPTION_NAME];\r\n var shouldInvalidate = fullName && !excludedOptions.some(function(optionName) {\r\n return optionName === fullName\r\n });\r\n shouldInvalidate && this._invalidate();\r\n this.callBase(args);\r\n break;\r\n default:\r\n this.callBase(args)\r\n }\r\n },\r\n isVisible: function() {\r\n var that = this;\r\n var editingOptions = that.getController(\"editing\").option(\"editing\");\r\n return that.callBase() || editingOptions && (editingOptions.allowAdding || (editingOptions.allowUpdating || editingOptions.allowDeleting) && editingOptions.mode === EDIT_MODE_BATCH)\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.filter_row.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 _type = require(\"../../core/utils/type\");\r\nvar _extend = require(\"../../core/utils/extend\");\r\nvar _index = require(\"../../events/utils/index\");\r\nvar _iterator = require(\"../../core/utils/iterator\");\r\nvar _uiGrid_core = _interopRequireDefault(require(\"./ui.grid_core.modules\"));\r\nvar _uiGrid_core2 = _interopRequireDefault(require(\"./ui.grid_core.utils\"));\r\nvar _message = _interopRequireDefault(require(\"../../localization/message\"));\r\nvar _editor = _interopRequireDefault(require(\"../editor/editor\"));\r\nvar _overlay = _interopRequireDefault(require(\"../overlay\"));\r\nvar _menu = _interopRequireDefault(require(\"../menu\"));\r\nvar _accessibility = require(\"../shared/accessibility\");\r\n\r\nfunction _interopRequireDefault(obj) {\r\n return obj && obj.__esModule ? obj : {\r\n \"default\": obj\r\n }\r\n}\r\nvar OPERATION_ICONS = {\r\n \"=\": \"filter-operation-equals\",\r\n \"<>\": \"filter-operation-not-equals\",\r\n \"<\": \"filter-operation-less\",\r\n \"<=\": \"filter-operation-less-equal\",\r\n \">\": \"filter-operation-greater\",\r\n \">=\": \"filter-operation-greater-equal\",\r\n \"default\": \"filter-operation-default\",\r\n notcontains: \"filter-operation-not-contains\",\r\n contains: \"filter-operation-contains\",\r\n startswith: \"filter-operation-starts-with\",\r\n endswith: \"filter-operation-ends-with\",\r\n between: \"filter-operation-between\"\r\n};\r\nvar OPERATION_DESCRIPTORS = {\r\n \"=\": \"equal\",\r\n \"<>\": \"notEqual\",\r\n \"<\": \"lessThan\",\r\n \"<=\": \"lessThanOrEqual\",\r\n \">\": \"greaterThan\",\r\n \">=\": \"greaterThanOrEqual\",\r\n startswith: \"startsWith\",\r\n contains: \"contains\",\r\n notcontains: \"notContains\",\r\n endswith: \"endsWith\",\r\n between: \"between\"\r\n};\r\nvar FILTERING_TIMEOUT = 700;\r\nvar CORRECT_FILTER_RANGE_OVERLAY_WIDTH = 1;\r\nvar FILTER_ROW_CLASS = \"filter-row\";\r\nvar FILTER_RANGE_OVERLAY_CLASS = \"filter-range-overlay\";\r\nvar FILTER_RANGE_START_CLASS = \"filter-range-start\";\r\nvar FILTER_RANGE_END_CLASS = \"filter-range-end\";\r\nvar MENU_CLASS = \"dx-menu\";\r\nvar EDITOR_WITH_MENU_CLASS = \"dx-editor-with-menu\";\r\nvar EDITOR_CONTAINER_CLASS = \"dx-editor-container\";\r\nvar EDITOR_CELL_CLASS = \"dx-editor-cell\";\r\nvar FILTER_MENU = \"dx-filter-menu\";\r\nvar APPLY_BUTTON_CLASS = \"dx-apply-button\";\r\nvar HIGHLIGHT_OUTLINE_CLASS = \"dx-highlight-outline\";\r\nvar FOCUSED_CLASS = \"dx-focused\";\r\nvar CELL_FOCUS_DISABLED_CLASS = \"dx-cell-focus-disabled\";\r\nvar FILTER_RANGE_CONTENT_CLASS = \"dx-filter-range-content\";\r\nvar FILTER_MODIFIED_CLASS = \"dx-filter-modified\";\r\nvar EDITORS_INPUT_SELECTOR = \"input:not([type='hidden'])\";\r\nvar BETWEEN_OPERATION_DATA_TYPES = [\"date\", \"datetime\", \"number\"];\r\n\r\nfunction isOnClickApplyFilterMode(that) {\r\n return \"onClick\" === that.option(\"filterRow.applyFilter\")\r\n}\r\nvar ColumnHeadersViewFilterRowExtender = function() {\r\n var getEditorInstance = function($editorContainer) {\r\n var $editor = $editorContainer && $editorContainer.children();\r\n var componentNames = $editor && $editor.data(\"dxComponents\");\r\n var editor = componentNames && componentNames.length && $editor.data(componentNames[0]);\r\n if (editor instanceof _editor.default) {\r\n return editor\r\n }\r\n };\r\n var getRangeTextByFilterValue = function(that, column) {\r\n var result = \"\";\r\n var rangeEnd = \"\";\r\n var filterValue = getColumnFilterValue(that, column);\r\n var formatOptions = _uiGrid_core2.default.getFormatOptionsByColumn(column, \"filterRow\");\r\n if (Array.isArray(filterValue)) {\r\n result = _uiGrid_core2.default.formatValue(filterValue[0], formatOptions);\r\n rangeEnd = _uiGrid_core2.default.formatValue(filterValue[1], formatOptions);\r\n if (\"\" !== rangeEnd) {\r\n result += \" - \" + rangeEnd\r\n }\r\n } else {\r\n if ((0, _type.isDefined)(filterValue)) {\r\n result = _uiGrid_core2.default.formatValue(filterValue, formatOptions)\r\n }\r\n }\r\n return result\r\n };\r\n\r\n function getColumnFilterValue(that, column) {\r\n if (column) {\r\n return isOnClickApplyFilterMode(that) && void 0 !== column.bufferedFilterValue ? column.bufferedFilterValue : column.filterValue\r\n }\r\n }\r\n var getColumnSelectedFilterOperation = function(that, column) {\r\n if (column) {\r\n return isOnClickApplyFilterMode(that) && void 0 !== column.bufferedSelectedFilterOperation ? column.bufferedSelectedFilterOperation : column.selectedFilterOperation\r\n }\r\n };\r\n var isValidFilterValue = function(filterValue, column) {\r\n if (column && BETWEEN_OPERATION_DATA_TYPES.indexOf(column.dataType) >= 0 && Array.isArray(filterValue)) {\r\n return false\r\n }\r\n return void 0 !== filterValue\r\n };\r\n var getFilterValue = function(that, columnIndex, $editorContainer) {\r\n var column = that._columnsController.columnOption(columnIndex);\r\n var filterValue = getColumnFilterValue(that, column);\r\n var isFilterRange = $editorContainer.closest(\".\" + that.addWidgetPrefix(FILTER_RANGE_OVERLAY_CLASS)).length;\r\n var isRangeStart = $editorContainer.hasClass(that.addWidgetPrefix(FILTER_RANGE_START_CLASS));\r\n if (filterValue && Array.isArray(filterValue) && \"between\" === getColumnSelectedFilterOperation(that, column)) {\r\n if (isRangeStart) {\r\n return filterValue[0]\r\n } else {\r\n return filterValue[1]\r\n }\r\n }\r\n return !isFilterRange && isValidFilterValue(filterValue, column) ? filterValue : null\r\n };\r\n var normalizeFilterValue = function(that, filterValue, column, $editorContainer) {\r\n if (\"between\" === getColumnSelectedFilterOperation(that, column)) {\r\n var columnFilterValue = getColumnFilterValue(that, column);\r\n if ($editorContainer.hasClass(that.addWidgetPrefix(FILTER_RANGE_START_CLASS))) {\r\n return [filterValue, Array.isArray(columnFilterValue) ? columnFilterValue[1] : void 0]\r\n } else {\r\n return [Array.isArray(columnFilterValue) ? columnFilterValue[0] : columnFilterValue, filterValue]\r\n }\r\n }\r\n return filterValue\r\n };\r\n var updateFilterValue = function(that, options) {\r\n var value = \"\" === options.value ? null : options.value;\r\n var $editorContainer = options.container;\r\n var column = that._columnsController.columnOption(options.column.index);\r\n var filterValue = getFilterValue(that, column.index, $editorContainer);\r\n if (!(0, _type.isDefined)(filterValue) && !(0, _type.isDefined)(value)) {\r\n return\r\n }\r\n that._applyFilterViewController.setHighLight($editorContainer, filterValue !== value);\r\n that._columnsController.columnOption(column.index, isOnClickApplyFilterMode(that) ? \"bufferedFilterValue\" : \"filterValue\", normalizeFilterValue(that, value, column, $editorContainer), options.notFireEvent)\r\n };\r\n return {\r\n _updateEditorValue: function(column, $editorContainer) {\r\n var that = this;\r\n var editor = getEditorInstance($editorContainer);\r\n editor && editor.option(\"value\", getFilterValue(that, column.index, $editorContainer))\r\n },\r\n _columnOptionChanged: function(e) {\r\n var that = this;\r\n var optionNames = e.optionNames;\r\n var $cell;\r\n var $editorContainer;\r\n var $editorRangeElements;\r\n var $menu;\r\n if (_uiGrid_core2.default.checkChanges(optionNames, [\"filterValue\", \"bufferedFilterValue\", \"selectedFilterOperation\", \"bufferedSelectedFilterOperation\"]) && void 0 !== e.columnIndex) {\r\n var visibleIndex = that._columnsController.getVisibleIndex(e.columnIndex);\r\n var column = that._columnsController.columnOption(e.columnIndex);\r\n $cell = that._getCellElement(that.element().find(\".\" + that.addWidgetPrefix(FILTER_ROW_CLASS)).index(), visibleIndex) || (0, _renderer.default)();\r\n $editorContainer = $cell.find(\".\" + EDITOR_CONTAINER_CLASS).first();\r\n if (optionNames.filterValue || optionNames.bufferedFilterValue) {\r\n that._updateEditorValue(column, $editorContainer);\r\n var overlayInstance = $cell.find(\".\" + that.addWidgetPrefix(FILTER_RANGE_OVERLAY_CLASS)).data(\"dxOverlay\");\r\n if (overlayInstance) {\r\n $editorRangeElements = overlayInstance.$content().find(\".\" + EDITOR_CONTAINER_CLASS);\r\n that._updateEditorValue(column, $editorRangeElements.first());\r\n that._updateEditorValue(column, $editorRangeElements.last())\r\n }\r\n if (!overlayInstance || !overlayInstance.option(\"visible\")) {\r\n that._updateFilterRangeContent($cell, getRangeTextByFilterValue(that, column))\r\n }\r\n }\r\n if (optionNames.selectedFilterOperation || optionNames.bufferedSelectedFilterOperation) {\r\n if (visibleIndex >= 0 && column) {\r\n $menu = $cell.find(\".\" + MENU_CLASS);\r\n if ($menu.length) {\r\n that._updateFilterOperationChooser($menu, column, $editorContainer);\r\n if (\"between\" === getColumnSelectedFilterOperation(that, column)) {\r\n that._renderFilterRangeContent($cell, column)\r\n } else {\r\n if ($editorContainer.find(\".\" + FILTER_RANGE_CONTENT_CLASS).length) {\r\n that._renderEditor($editorContainer, that._getEditorOptions($editorContainer, column));\r\n that._hideFilterRange()\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return\r\n }\r\n that.callBase(e)\r\n },\r\n _renderCore: function() {\r\n this._filterRangeOverlayInstance = null;\r\n this.callBase.apply(this, arguments)\r\n },\r\n _resizeCore: function() {\r\n this.callBase.apply(this, arguments);\r\n this._filterRangeOverlayInstance && this._filterRangeOverlayInstance.repaint()\r\n },\r\n isFilterRowVisible: function() {\r\n return this._isElementVisible(this.option(\"filterRow\"))\r\n },\r\n isVisible: function() {\r\n return this.callBase() || this.isFilterRowVisible()\r\n },\r\n init: function() {\r\n this.callBase();\r\n this._applyFilterViewController = this.getController(\"applyFilter\")\r\n },\r\n _initFilterRangeOverlay: function($cell, column) {\r\n var that = this;\r\n var sharedData = {};\r\n var $editorContainer = $cell.find(\".dx-editor-container\");\r\n var $overlay = (0, _renderer.default)(\"
\").addClass(that.addWidgetPrefix(FILTER_RANGE_OVERLAY_CLASS)).appendTo($cell);\r\n return that._createComponent($overlay, _overlay.default, {\r\n height: \"auto\",\r\n shading: false,\r\n showTitle: false,\r\n focusStateEnabled: false,\r\n closeOnTargetScroll: false,\r\n closeOnOutsideClick: true,\r\n animation: false,\r\n position: {\r\n my: \"top\",\r\n at: \"top\",\r\n of: $editorContainer.length && $editorContainer || $cell,\r\n offset: \"0 -1\"\r\n },\r\n contentTemplate: function(contentElement) {\r\n var editorOptions;\r\n var $editor = (0, _renderer.default)(\"
\").addClass(EDITOR_CONTAINER_CLASS + \" \" + that.addWidgetPrefix(FILTER_RANGE_START_CLASS)).appendTo(contentElement);\r\n column = that._columnsController.columnOption(column.index);\r\n editorOptions = that._getEditorOptions($editor, column);\r\n editorOptions.sharedData = sharedData;\r\n that._renderEditor($editor, editorOptions);\r\n _events_engine.default.on($editor.find(EDITORS_INPUT_SELECTOR), \"keydown\", function(e) {\r\n var $prevElement = $cell.find(\"[tabindex]\").not(e.target).first();\r\n if (\"tab\" === (0, _index.normalizeKeyName)(e) && e.shiftKey) {\r\n e.preventDefault();\r\n that._hideFilterRange();\r\n if (!$prevElement.length) {\r\n $prevElement = $cell.prev().find(\"[tabindex]\").last()\r\n }\r\n _events_engine.default.trigger($prevElement, \"focus\")\r\n }\r\n });\r\n $editor = (0, _renderer.default)(\"
\").addClass(EDITOR_CONTAINER_CLASS + \" \" + that.addWidgetPrefix(FILTER_RANGE_END_CLASS)).appendTo(contentElement);\r\n editorOptions = that._getEditorOptions($editor, column);\r\n editorOptions.sharedData = sharedData;\r\n that._renderEditor($editor, editorOptions);\r\n _events_engine.default.on($editor.find(EDITORS_INPUT_SELECTOR), \"keydown\", function(e) {\r\n if (\"tab\" === (0, _index.normalizeKeyName)(e) && !e.shiftKey) {\r\n e.preventDefault();\r\n that._hideFilterRange();\r\n _events_engine.default.trigger($cell.next().find(\"[tabindex]\").first(), \"focus\")\r\n }\r\n });\r\n return (0, _renderer.default)(contentElement).addClass(that.getWidgetContainerClass())\r\n },\r\n onShown: function(e) {\r\n var $editor = e.component.$content().find(\".\" + EDITOR_CONTAINER_CLASS).first();\r\n _events_engine.default.trigger($editor.find(EDITORS_INPUT_SELECTOR), \"focus\")\r\n },\r\n onHidden: function() {\r\n column = that._columnsController.columnOption(column.index);\r\n $cell.find(\".\" + MENU_CLASS).parent().addClass(EDITOR_WITH_MENU_CLASS);\r\n if (\"between\" === getColumnSelectedFilterOperation(that, column)) {\r\n that._updateFilterRangeContent($cell, getRangeTextByFilterValue(that, column));\r\n that.component.updateDimensions()\r\n }\r\n }\r\n })\r\n },\r\n _updateFilterRangeOverlay: function(options) {\r\n var overlayInstance = this._filterRangeOverlayInstance;\r\n overlayInstance && overlayInstance.option(options)\r\n },\r\n _showFilterRange: function($cell, column) {\r\n var that = this;\r\n var $overlay = $cell.children(\".\" + that.addWidgetPrefix(FILTER_RANGE_OVERLAY_CLASS));\r\n var overlayInstance = $overlay.length && $overlay.data(\"dxOverlay\");\r\n if (!overlayInstance && column) {\r\n overlayInstance = that._initFilterRangeOverlay($cell, column)\r\n }\r\n if (!overlayInstance.option(\"visible\")) {\r\n that._filterRangeOverlayInstance && that._filterRangeOverlayInstance.hide();\r\n that._filterRangeOverlayInstance = overlayInstance;\r\n that._updateFilterRangeOverlay({\r\n width: $cell.outerWidth(true) + CORRECT_FILTER_RANGE_OVERLAY_WIDTH\r\n });\r\n that._filterRangeOverlayInstance && that._filterRangeOverlayInstance.show()\r\n }\r\n },\r\n _hideFilterRange: function() {\r\n var overlayInstance = this._filterRangeOverlayInstance;\r\n overlayInstance && overlayInstance.hide()\r\n },\r\n getFilterRangeOverlayInstance: function() {\r\n return this._filterRangeOverlayInstance\r\n },\r\n _createRow: function(row) {\r\n var _this = this;\r\n var $row = this.callBase(row);\r\n if (\"filter\" === row.rowType) {\r\n $row.addClass(this.addWidgetPrefix(FILTER_ROW_CLASS));\r\n if (!this.option(\"useLegacyKeyboardNavigation\")) {\r\n _events_engine.default.on($row, \"keydown\", function(event) {\r\n return (0, _accessibility.selectView)(\"filterRow\", _this, event)\r\n })\r\n }\r\n }\r\n return $row\r\n },\r\n _getRows: function() {\r\n var result = this.callBase();\r\n if (this.isFilterRowVisible()) {\r\n result.push({\r\n rowType: \"filter\"\r\n })\r\n }\r\n return result\r\n },\r\n _renderFilterCell: function(cell, options) {\r\n var that = this;\r\n var column = options.column;\r\n var $cell = (0, _renderer.default)(cell);\r\n if (that.component.option(\"showColumnHeaders\")) {\r\n that.setAria(\"describedby\", column.headerId, $cell)\r\n }\r\n that.setAria(\"label\", _message.default.format(\"dxDataGrid-ariaFilterCell\"), $cell);\r\n $cell.addClass(EDITOR_CELL_CLASS);\r\n var $container = (0, _renderer.default)(\"
\").appendTo($cell);\r\n var $editorContainer = (0, _renderer.default)(\"
\").addClass(EDITOR_CONTAINER_CLASS).appendTo($container);\r\n if (\"between\" === getColumnSelectedFilterOperation(that, column)) {\r\n that._renderFilterRangeContent($cell, column)\r\n } else {\r\n var editorOptions = that._getEditorOptions($editorContainer, column);\r\n that._renderEditor($editorContainer, editorOptions)\r\n }\r\n var alignment = column.alignment;\r\n if (alignment && \"center\" !== alignment) {\r\n $cell.find(EDITORS_INPUT_SELECTOR).first().css(\"textAlign\", column.alignment)\r\n }\r\n if (column.filterOperations && column.filterOperations.length) {\r\n that._renderFilterOperationChooser($container, column, $editorContainer)\r\n }\r\n },\r\n _renderCellContent: function($cell, options) {\r\n var that = this;\r\n var column = options.column;\r\n if (\"filter\" === options.rowType) {\r\n if (column.command) {\r\n $cell.html(\" \")\r\n } else {\r\n if (column.allowFiltering) {\r\n that.renderTemplate($cell, that._renderFilterCell.bind(that), options).done(function() {\r\n that._updateCell($cell, options)\r\n });\r\n return\r\n }\r\n }\r\n }\r\n that.callBase($cell, options)\r\n },\r\n _getEditorOptions: function($editorContainer, column) {\r\n var that = this;\r\n var accessibilityOptions = {\r\n editorOptions: {\r\n inputAttr: that._getFilterInputAccessibilityAttributes(column)\r\n }\r\n };\r\n var result = (0, _extend.extend)(accessibilityOptions, column, {\r\n value: getFilterValue(that, column.index, $editorContainer),\r\n parentType: \"filterRow\",\r\n showAllText: that.option(\"filterRow.showAllText\"),\r\n updateValueTimeout: \"onClick\" === that.option(\"filterRow.applyFilter\") ? 0 : FILTERING_TIMEOUT,\r\n width: null,\r\n setValue: function(value, notFireEvent) {\r\n updateFilterValue(that, {\r\n column: column,\r\n value: value,\r\n container: $editorContainer,\r\n notFireEvent: notFireEvent\r\n })\r\n }\r\n });\r\n if (\"between\" === getColumnSelectedFilterOperation(that, column)) {\r\n if ($editorContainer.hasClass(that.addWidgetPrefix(FILTER_RANGE_START_CLASS))) {\r\n result.placeholder = that.option(\"filterRow.betweenStartText\")\r\n } else {\r\n result.placeholder = that.option(\"filterRow.betweenEndText\")\r\n }\r\n }\r\n return result\r\n },\r\n _getFilterInputAccessibilityAttributes: function(column) {\r\n var columnAriaLabel = _message.default.format(\"dxDataGrid-ariaFilterCell\");\r\n if (this.component.option(\"showColumnHeaders\")) {\r\n return {\r\n \"aria-label\": columnAriaLabel,\r\n \"aria-describedby\": column.headerId\r\n }\r\n }\r\n return {\r\n \"aria-label\": columnAriaLabel\r\n }\r\n },\r\n _renderEditor: function($editorContainer, options) {\r\n $editorContainer.empty();\r\n return this.getController(\"editorFactory\").createEditor((0, _renderer.default)(\"
\").appendTo($editorContainer), options)\r\n },\r\n _renderFilterRangeContent: function($cell, column) {\r\n var that = this;\r\n var $editorContainer = $cell.find(\".\" + EDITOR_CONTAINER_CLASS).first();\r\n $editorContainer.empty();\r\n var $filterRangeContent = (0, _renderer.default)(\"
\").addClass(FILTER_RANGE_CONTENT_CLASS).attr(\"tabindex\", this.option(\"tabIndex\"));\r\n _events_engine.default.on($filterRangeContent, \"focusin\", function() {\r\n that._showFilterRange($cell, column)\r\n });\r\n $filterRangeContent.appendTo($editorContainer);\r\n that._updateFilterRangeContent($cell, getRangeTextByFilterValue(that, column))\r\n },\r\n _updateFilterRangeContent: function($cell, value) {\r\n var $filterRangeContent = $cell.find(\".\" + FILTER_RANGE_CONTENT_CLASS);\r\n if ($filterRangeContent.length) {\r\n if (\"\" === value) {\r\n $filterRangeContent.html(\" \")\r\n } else {\r\n $filterRangeContent.text(value)\r\n }\r\n }\r\n },\r\n _updateFilterOperationChooser: function($menu, column, $editorContainer) {\r\n var that = this;\r\n var isCellWasFocused;\r\n var restoreFocus = function() {\r\n var menu = _menu.default.getInstance($menu);\r\n menu && menu.option(\"focusedElement\", null);\r\n isCellWasFocused && that._focusEditor($editorContainer)\r\n };\r\n that._createComponent($menu, _menu.default, {\r\n integrationOptions: {},\r\n activeStateEnabled: false,\r\n selectionMode: \"single\",\r\n cssClass: that.getWidgetContainerClass() + \" \" + CELL_FOCUS_DISABLED_CLASS + \" \" + FILTER_MENU,\r\n showFirstSubmenuMode: \"onHover\",\r\n hideSubmenuOnMouseLeave: true,\r\n items: [{\r\n disabled: column.filterOperations && column.filterOperations.length ? false : true,\r\n icon: OPERATION_ICONS[getColumnSelectedFilterOperation(that, column) || \"default\"],\r\n selectable: false,\r\n items: that._getFilterOperationMenuItems(column)\r\n }],\r\n onItemClick: function(properties) {\r\n var selectedFilterOperation = properties.itemData.name;\r\n var columnSelectedFilterOperation = getColumnSelectedFilterOperation(that, column);\r\n var notFocusEditor = false;\r\n var isOnClickMode = isOnClickApplyFilterMode(that);\r\n var options = {};\r\n if (properties.itemData.items || selectedFilterOperation && selectedFilterOperation === columnSelectedFilterOperation) {\r\n return\r\n }\r\n if (selectedFilterOperation) {\r\n options[isOnClickMode ? \"bufferedSelectedFilterOperation\" : \"selectedFilterOperation\"] = selectedFilterOperation;\r\n if (\"between\" === selectedFilterOperation || \"between\" === columnSelectedFilterOperation) {\r\n notFocusEditor = \"between\" === selectedFilterOperation;\r\n options[isOnClickMode ? \"bufferedFilterValue\" : \"filterValue\"] = null\r\n }\r\n } else {\r\n options[isOnClickMode ? \"bufferedFilterValue\" : \"filterValue\"] = null;\r\n options[isOnClickMode ? \"bufferedSelectedFilterOperation\" : \"selectedFilterOperation\"] = column.defaultSelectedFilterOperation || null\r\n }\r\n that._columnsController.columnOption(column.index, options);\r\n that._applyFilterViewController.setHighLight($editorContainer, true);\r\n if (!selectedFilterOperation) {\r\n var editor = getEditorInstance($editorContainer);\r\n if (editor && \"dxDateBox\" === editor.NAME && !editor.option(\"isValid\")) {\r\n editor.reset();\r\n editor.option(\"isValid\", true)\r\n }\r\n }\r\n if (!notFocusEditor) {\r\n that._focusEditor($editorContainer)\r\n } else {\r\n that._showFilterRange($editorContainer.closest(\".\" + EDITOR_CELL_CLASS), column)\r\n }\r\n },\r\n onSubmenuShown: function() {\r\n isCellWasFocused = that._isEditorFocused($editorContainer);\r\n that.getController(\"editorFactory\").loseFocus()\r\n },\r\n onSubmenuHiding: function() {\r\n _events_engine.default.trigger($menu, \"blur\");\r\n restoreFocus()\r\n },\r\n onContentReady: function(e) {\r\n _events_engine.default.on($menu, \"blur\", function() {\r\n var menu = e.component;\r\n menu._hideSubmenu(menu._visibleSubmenu);\r\n restoreFocus()\r\n })\r\n },\r\n rtlEnabled: that.option(\"rtlEnabled\")\r\n })\r\n },\r\n _isEditorFocused: function($container) {\r\n return $container.hasClass(FOCUSED_CLASS) || $container.parents(\".\" + FOCUSED_CLASS).length\r\n },\r\n _focusEditor: function($container) {\r\n this.getController(\"editorFactory\").focus($container);\r\n _events_engine.default.trigger($container.find(EDITORS_INPUT_SELECTOR), \"focus\")\r\n },\r\n _renderFilterOperationChooser: function($container, column, $editorContainer) {\r\n var that = this;\r\n var $menu;\r\n if (that.option(\"filterRow.showOperationChooser\")) {\r\n $container.addClass(EDITOR_WITH_MENU_CLASS);\r\n $menu = (0, _renderer.default)(\"
\").prependTo($container);\r\n that._updateFilterOperationChooser($menu, column, $editorContainer)\r\n }\r\n },\r\n _getFilterOperationMenuItems: function(column) {\r\n var that = this;\r\n var result = [{}];\r\n var filterRowOptions = that.option(\"filterRow\");\r\n var operationDescriptions = filterRowOptions && filterRowOptions.operationDescriptions || {};\r\n if (column.filterOperations && column.filterOperations.length) {\r\n var availableFilterOperations = column.filterOperations.filter(function(value) {\r\n return (0, _type.isDefined)(OPERATION_DESCRIPTORS[value])\r\n });\r\n result = (0, _iterator.map)(availableFilterOperations, function(value) {\r\n var descriptionName = OPERATION_DESCRIPTORS[value];\r\n return {\r\n name: value,\r\n selected: (getColumnSelectedFilterOperation(that, column) || column.defaultFilterOperation) === value,\r\n text: operationDescriptions[descriptionName],\r\n icon: OPERATION_ICONS[value]\r\n }\r\n });\r\n result.push({\r\n name: null,\r\n text: filterRowOptions && filterRowOptions.resetOperationText,\r\n icon: OPERATION_ICONS.default\r\n })\r\n }\r\n return result\r\n },\r\n optionChanged: function(args) {\r\n var that = this;\r\n switch (args.name) {\r\n case \"filterRow\":\r\n case \"showColumnLines\":\r\n this._invalidate(true, true);\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\nvar DataControllerFilterRowExtender = {\r\n skipCalculateColumnFilters: function() {\r\n return false\r\n },\r\n _calculateAdditionalFilter: function() {\r\n if (this.skipCalculateColumnFilters()) {\r\n return this.callBase()\r\n }\r\n var filters = [this.callBase()];\r\n var columns = this._columnsController.getVisibleColumns(null, true);\r\n (0, _iterator.each)(columns, function() {\r\n if (this.allowFiltering && this.calculateFilterExpression && (0, _type.isDefined)(this.filterValue)) {\r\n var filter = this.createFilterExpression(this.filterValue, this.selectedFilterOperation || this.defaultFilterOperation, \"filterRow\");\r\n filters.push(filter)\r\n }\r\n });\r\n return _uiGrid_core2.default.combineFilters(filters)\r\n }\r\n};\r\nvar ApplyFilterViewController = _uiGrid_core.default.ViewController.inherit({\r\n _getHeaderPanel: function() {\r\n if (!this._headerPanel) {\r\n this._headerPanel = this.getView(\"headerPanel\")\r\n }\r\n return this._headerPanel\r\n },\r\n setHighLight: function($element, value) {\r\n if (isOnClickApplyFilterMode(this)) {\r\n $element && $element.toggleClass(HIGHLIGHT_OUTLINE_CLASS, value) && $element.closest(\".\" + EDITOR_CELL_CLASS).toggleClass(FILTER_MODIFIED_CLASS, value);\r\n this._getHeaderPanel().enableApplyButton(value)\r\n }\r\n },\r\n applyFilter: function() {\r\n var columnsController = this.getController(\"columns\");\r\n var columns = columnsController.getColumns();\r\n columnsController.beginUpdate();\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n if (void 0 !== column.bufferedFilterValue) {\r\n columnsController.columnOption(i, \"filterValue\", column.bufferedFilterValue);\r\n column.bufferedFilterValue = void 0\r\n }\r\n if (void 0 !== column.bufferedSelectedFilterOperation) {\r\n columnsController.columnOption(i, \"selectedFilterOperation\", column.bufferedSelectedFilterOperation);\r\n column.bufferedSelectedFilterOperation = void 0\r\n }\r\n }\r\n columnsController.endUpdate();\r\n this.removeHighLights()\r\n },\r\n removeHighLights: function() {\r\n if (isOnClickApplyFilterMode(this)) {\r\n var columnHeadersViewElement = this.getView(\"columnHeadersView\").element();\r\n columnHeadersViewElement.find(\".\" + this.addWidgetPrefix(FILTER_ROW_CLASS) + \" .\" + HIGHLIGHT_OUTLINE_CLASS).removeClass(HIGHLIGHT_OUTLINE_CLASS);\r\n columnHeadersViewElement.find(\".\" + this.addWidgetPrefix(FILTER_ROW_CLASS) + \" .\" + FILTER_MODIFIED_CLASS).removeClass(FILTER_MODIFIED_CLASS);\r\n this._getHeaderPanel().enableApplyButton(false)\r\n }\r\n }\r\n});\r\nvar _default = {\r\n defaultOptions: function() {\r\n return {\r\n filterRow: {\r\n visible: false,\r\n showOperationChooser: true,\r\n showAllText: _message.default.format(\"dxDataGrid-filterRowShowAllText\"),\r\n resetOperationText: _message.default.format(\"dxDataGrid-filterRowResetOperationText\"),\r\n applyFilter: \"auto\",\r\n applyFilterText: _message.default.format(\"dxDataGrid-applyFilterText\"),\r\n operationDescriptions: {\r\n equal: _message.default.format(\"dxDataGrid-filterRowOperationEquals\"),\r\n notEqual: _message.default.format(\"dxDataGrid-filterRowOperationNotEquals\"),\r\n lessThan: _message.default.format(\"dxDataGrid-filterRowOperationLess\"),\r\n lessThanOrEqual: _message.default.format(\"dxDataGrid-filterRowOperationLessOrEquals\"),\r\n greaterThan: _message.default.format(\"dxDataGrid-filterRowOperationGreater\"),\r\n greaterThanOrEqual: _message.default.format(\"dxDataGrid-filterRowOperationGreaterOrEquals\"),\r\n startsWith: _message.default.format(\"dxDataGrid-filterRowOperationStartsWith\"),\r\n contains: _message.default.format(\"dxDataGrid-filterRowOperationContains\"),\r\n notContains: _message.default.format(\"dxDataGrid-filterRowOperationNotContains\"),\r\n endsWith: _message.default.format(\"dxDataGrid-filterRowOperationEndsWith\"),\r\n between: _message.default.format(\"dxDataGrid-filterRowOperationBetween\"),\r\n isBlank: _message.default.format(\"dxFilterBuilder-filterOperationIsBlank\"),\r\n isNotBlank: _message.default.format(\"dxFilterBuilder-filterOperationIsNotBlank\")\r\n },\r\n betweenStartText: _message.default.format(\"dxDataGrid-filterRowOperationBetweenStartText\"),\r\n betweenEndText: _message.default.format(\"dxDataGrid-filterRowOperationBetweenEndText\")\r\n }\r\n }\r\n },\r\n controllers: {\r\n applyFilter: ApplyFilterViewController\r\n },\r\n extenders: {\r\n controllers: {\r\n data: DataControllerFilterRowExtender,\r\n columnsResizer: {\r\n _startResizing: function() {\r\n var that = this;\r\n that.callBase.apply(that, arguments);\r\n if (that.isResizing()) {\r\n var overlayInstance = that._columnHeadersView.getFilterRangeOverlayInstance();\r\n if (overlayInstance) {\r\n var cellIndex = overlayInstance.$element().closest(\"td\").index();\r\n if (cellIndex === that._targetPoint.columnIndex || cellIndex === that._targetPoint.columnIndex + 1) {\r\n overlayInstance.$content().hide()\r\n }\r\n }\r\n }\r\n },\r\n _endResizing: function() {\r\n var that = this;\r\n var $cell;\r\n if (that.isResizing()) {\r\n var overlayInstance = that._columnHeadersView.getFilterRangeOverlayInstance();\r\n if (overlayInstance) {\r\n $cell = overlayInstance.$element().closest(\"td\");\r\n that._columnHeadersView._updateFilterRangeOverlay({\r\n width: $cell.outerWidth(true) + CORRECT_FILTER_RANGE_OVERLAY_WIDTH\r\n });\r\n overlayInstance.$content().show()\r\n }\r\n }\r\n that.callBase.apply(that, arguments)\r\n }\r\n }\r\n },\r\n views: {\r\n columnHeadersView: ColumnHeadersViewFilterRowExtender,\r\n headerPanel: {\r\n _getToolbarItems: function() {\r\n var items = this.callBase();\r\n var filterItem = this._prepareFilterItem(items);\r\n return filterItem.concat(items)\r\n },\r\n _prepareFilterItem: function() {\r\n var that = this;\r\n var filterItem = [];\r\n if (that._isShowApplyFilterButton()) {\r\n var hintText = that.option(\"filterRow.applyFilterText\");\r\n var columns = that._columnsController.getColumns();\r\n var disabled = !columns.filter(function(column) {\r\n return void 0 !== column.bufferedFilterValue\r\n }).length;\r\n var onInitialized = function(e) {\r\n (0, _renderer.default)(e.element).addClass(that._getToolbarButtonClass(APPLY_BUTTON_CLASS))\r\n };\r\n var onClickHandler = function() {\r\n that._applyFilterViewController.applyFilter()\r\n };\r\n var toolbarItem = {\r\n widget: \"dxButton\",\r\n options: {\r\n icon: \"apply-filter\",\r\n disabled: disabled,\r\n onClick: onClickHandler,\r\n hint: hintText,\r\n text: hintText,\r\n onInitialized: onInitialized\r\n },\r\n showText: \"inMenu\",\r\n name: \"applyFilterButton\",\r\n location: \"after\",\r\n locateInMenu: \"auto\",\r\n sortIndex: 10\r\n };\r\n filterItem.push(toolbarItem)\r\n }\r\n return filterItem\r\n },\r\n _isShowApplyFilterButton: function() {\r\n var filterRowOptions = this.option(\"filterRow\");\r\n return filterRowOptions && filterRowOptions.visible && \"onClick\" === filterRowOptions.applyFilter\r\n },\r\n init: function() {\r\n this.callBase();\r\n this._dataController = this.getController(\"data\");\r\n this._applyFilterViewController = this.getController(\"applyFilter\")\r\n },\r\n enableApplyButton: function(value) {\r\n this.setToolbarItemDisabled(\"applyFilterButton\", !value)\r\n },\r\n isVisible: function() {\r\n return this.callBase() || this._isShowApplyFilterButton()\r\n },\r\n optionChanged: function(args) {\r\n if (\"filterRow\" === args.name) {\r\n this._invalidate();\r\n args.handled = true\r\n } else {\r\n this.callBase(args)\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.header_filter.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 _events_engine = _interopRequireDefault(require(\"../../events/core/events_engine\"));\r\nvar _uiGrid_core = _interopRequireDefault(require(\"./ui.grid_core.modules\"));\r\nvar _filtering = _interopRequireDefault(require(\"../shared/filtering\"));\r\nvar _uiGrid_core2 = _interopRequireDefault(require(\"./ui.grid_core.utils\"));\r\nvar _uiGrid_core3 = require(\"./ui.grid_core.header_filter_core\");\r\nvar _message = _interopRequireDefault(require(\"../../localization/message\"));\r\nvar _click = require(\"../../events/click\");\r\nvar _data = require(\"../../core/utils/data\");\r\nvar _iterator = require(\"../../core/utils/iterator\");\r\nvar _type = require(\"../../core/utils/type\");\r\nvar _position = require(\"../../core/utils/position\");\r\nvar _extend = require(\"../../core/utils/extend\");\r\nvar _utils = require(\"../../data/data_source/utils\");\r\nvar _date = _interopRequireDefault(require(\"../../localization/date\"));\r\nvar _variable_wrapper = _interopRequireDefault(require(\"../../core/utils/variable_wrapper\"));\r\nvar _deferred = require(\"../../core/utils/deferred\");\r\nvar _accessibility = require(\"../shared/accessibility\");\r\n\r\nfunction _interopRequireDefault(obj) {\r\n return obj && obj.__esModule ? obj : {\r\n \"default\": obj\r\n }\r\n}\r\nvar DATE_INTERVAL_FORMATS = {\r\n month: function(value) {\r\n return _date.default.getMonthNames()[value - 1]\r\n },\r\n quarter: function(value) {\r\n return _date.default.format(new Date(2e3, 3 * value - 1), \"quarter\")\r\n }\r\n};\r\nvar HeaderFilterController = _uiGrid_core.default.ViewController.inherit(function() {\r\n var getFormatOptions = function(value, column, currentLevel) {\r\n var groupInterval = _filtering.default.getGroupInterval(column);\r\n var result = _uiGrid_core2.default.getFormatOptionsByColumn(column, \"headerFilter\");\r\n if (groupInterval) {\r\n result.groupInterval = groupInterval[currentLevel];\r\n if (_uiGrid_core2.default.isDateType(column.dataType)) {\r\n result.format = DATE_INTERVAL_FORMATS[groupInterval[currentLevel]]\r\n } else {\r\n if (\"number\" === column.dataType) {\r\n result.getDisplayFormat = function() {\r\n var formatOptions = {\r\n format: column.format,\r\n target: \"headerFilter\"\r\n };\r\n var firstValueText = _uiGrid_core2.default.formatValue(value, formatOptions);\r\n var secondValue = value + groupInterval[currentLevel];\r\n var secondValueText = _uiGrid_core2.default.formatValue(secondValue, formatOptions);\r\n return firstValueText && secondValueText ? firstValueText + \" - \" + secondValueText : \"\"\r\n }\r\n }\r\n }\r\n }\r\n return result\r\n };\r\n return {\r\n init: function() {\r\n this._columnsController = this.getController(\"columns\");\r\n this._dataController = this.getController(\"data\");\r\n this._headerFilterView = this.getView(\"headerFilterView\")\r\n },\r\n _updateSelectedState: function(items, column) {\r\n var i = items.length;\r\n var isExclude = \"exclude\" === column.filterType;\r\n while (i--) {\r\n var item = items[i];\r\n if (\"items\" in items[i]) {\r\n this._updateSelectedState(items[i].items, column)\r\n }(0, _uiGrid_core3.updateHeaderFilterItemSelectionState)(item, _uiGrid_core2.default.getIndexByKey(items[i].value, column.filterValues, null) > -1, isExclude)\r\n }\r\n },\r\n _normalizeGroupItem: function(item, currentLevel, options) {\r\n var value;\r\n var displayValue;\r\n var path = options.path;\r\n var valueSelector = options.valueSelector;\r\n var displaySelector = options.displaySelector;\r\n var column = options.column;\r\n if (valueSelector && displaySelector) {\r\n value = valueSelector(item);\r\n displayValue = displaySelector(item)\r\n } else {\r\n value = item.key;\r\n displayValue = value\r\n }\r\n if (!(0, _type.isObject)(item)) {\r\n item = {}\r\n } else {\r\n item = (0, _extend.extend)({}, item)\r\n }\r\n path.push(value);\r\n if (1 === path.length) {\r\n item.value = path[0]\r\n } else {\r\n item.value = path.join(\"/\")\r\n }\r\n item.text = this.getHeaderItemText(displayValue, column, currentLevel, options.headerFilterOptions);\r\n return item\r\n },\r\n getHeaderItemText: function(displayValue, column, currentLevel, headerFilterOptions) {\r\n var text = _uiGrid_core2.default.formatValue(displayValue, getFormatOptions(displayValue, column, currentLevel));\r\n if (!text) {\r\n text = headerFilterOptions.texts.emptyValue\r\n }\r\n return text\r\n },\r\n _processGroupItems: function(groupItems, currentLevel, path, options) {\r\n var that = this;\r\n var displaySelector;\r\n var valueSelector;\r\n var column = options.column;\r\n var lookup = column.lookup;\r\n var level = options.level;\r\n path = path || [];\r\n currentLevel = currentLevel || 0;\r\n if (lookup) {\r\n displaySelector = (0, _data.compileGetter)(lookup.displayExpr);\r\n valueSelector = (0, _data.compileGetter)(lookup.valueExpr)\r\n }\r\n for (var i = 0; i < groupItems.length; i++) {\r\n groupItems[i] = that._normalizeGroupItem(groupItems[i], currentLevel, {\r\n column: options.column,\r\n headerFilterOptions: options.headerFilterOptions,\r\n displaySelector: displaySelector,\r\n valueSelector: valueSelector,\r\n path: path\r\n });\r\n if (\"items\" in groupItems[i]) {\r\n if (currentLevel === level || !(0, _type.isDefined)(groupItems[i].value)) {\r\n delete groupItems[i].items\r\n } else {\r\n that._processGroupItems(groupItems[i].items, currentLevel + 1, path, options)\r\n }\r\n }\r\n path.pop()\r\n }\r\n },\r\n getDataSource: function(column) {\r\n var that = this;\r\n var dataSource = that._dataController.dataSource();\r\n var group = _uiGrid_core2.default.getHeaderFilterGroupParameters(column, dataSource && dataSource.remoteOperations().grouping);\r\n var headerFilterDataSource = column.headerFilter && column.headerFilter.dataSource;\r\n var headerFilterOptions = that.option(\"headerFilter\");\r\n var isLookup = false;\r\n var options = {\r\n component: that.component\r\n };\r\n if (!dataSource) {\r\n return\r\n }\r\n if ((0, _type.isDefined)(headerFilterDataSource) && !(0, _type.isFunction)(headerFilterDataSource)) {\r\n options.dataSource = (0, _utils.normalizeDataSourceOptions)(headerFilterDataSource)\r\n } else {\r\n if (column.lookup) {\r\n isLookup = true;\r\n var lookupDataSourceOptions;\r\n if (column.lookup.items) {\r\n lookupDataSourceOptions = column.lookup.items\r\n } else {\r\n lookupDataSourceOptions = column.lookup.dataSource;\r\n if ((0, _type.isFunction)(lookupDataSourceOptions) && !_variable_wrapper.default.isWrapped(lookupDataSourceOptions)) {\r\n lookupDataSourceOptions = lookupDataSourceOptions({})\r\n }\r\n }\r\n options.dataSource = (0, _utils.normalizeDataSourceOptions)(lookupDataSourceOptions)\r\n } else {\r\n var cutoffLevel = Array.isArray(group) ? group.length - 1 : 0;\r\n that._currentColumn = column;\r\n var filter = that._dataController.getCombinedFilter();\r\n that._currentColumn = null;\r\n options.dataSource = {\r\n filter: filter,\r\n group: group,\r\n useDefaultSearch: true,\r\n load: function(options) {\r\n var d = new _deferred.Deferred;\r\n options.dataField = column.dataField || column.name;\r\n dataSource.load(options).done(function(data) {\r\n that._processGroupItems(data, null, null, {\r\n level: cutoffLevel,\r\n column: column,\r\n headerFilterOptions: headerFilterOptions\r\n });\r\n d.resolve(data)\r\n }).fail(d.reject);\r\n return d\r\n }\r\n }\r\n }\r\n }\r\n if ((0, _type.isFunction)(headerFilterDataSource)) {\r\n headerFilterDataSource.call(column, options)\r\n }\r\n var origPostProcess = options.dataSource.postProcess;\r\n options.dataSource.postProcess = function(data) {\r\n var items = data;\r\n if (isLookup) {\r\n if (0 === this.pageIndex() && !this.searchValue()) {\r\n items = items.slice(0);\r\n items.unshift(null)\r\n }\r\n that._processGroupItems(items, null, null, {\r\n level: 0,\r\n column: column,\r\n headerFilterOptions: headerFilterOptions\r\n })\r\n }\r\n items = origPostProcess && origPostProcess.call(this, items) || items;\r\n that._updateSelectedState(items, column);\r\n return items\r\n };\r\n return options.dataSource\r\n },\r\n getCurrentColumn: function() {\r\n return this._currentColumn\r\n },\r\n showHeaderFilterMenu: function(columnIndex, isGroupPanel) {\r\n var columnsController = this._columnsController;\r\n var column = (0, _extend.extend)(true, {}, this._columnsController.getColumns()[columnIndex]);\r\n if (column) {\r\n var visibleIndex = columnsController.getVisibleIndex(columnIndex);\r\n var view = isGroupPanel ? this.getView(\"headerPanel\") : this.getView(\"columnHeadersView\");\r\n var $columnElement = $columnElement || view.getColumnElements().eq(isGroupPanel ? column.groupIndex : visibleIndex);\r\n this.showHeaderFilterMenuBase({\r\n columnElement: $columnElement,\r\n column: column,\r\n applyFilter: true,\r\n apply: function() {\r\n columnsController.columnOption(columnIndex, {\r\n filterValues: this.filterValues,\r\n filterType: this.filterType\r\n })\r\n }\r\n })\r\n }\r\n },\r\n showHeaderFilterMenuBase: function(options) {\r\n var _this = this;\r\n var that = this;\r\n var column = options.column;\r\n if (column) {\r\n var groupInterval = _filtering.default.getGroupInterval(column);\r\n var dataSource = that._dataController.dataSource();\r\n var remoteFiltering = dataSource && dataSource.remoteOperations().filtering;\r\n (0, _extend.extend)(options, column, {\r\n type: groupInterval && groupInterval.length > 1 ? \"tree\" : \"list\",\r\n remoteFiltering: remoteFiltering,\r\n onShowing: function(e) {\r\n var dxResizableInstance = e.component.overlayContent().dxResizable(\"instance\");\r\n dxResizableInstance && dxResizableInstance.option(\"onResizeEnd\", function(e) {\r\n var columnsController = that.getController(\"columns\");\r\n var headerFilterByColumn = columnsController.columnOption(options.dataField, \"headerFilter\");\r\n headerFilterByColumn = headerFilterByColumn || {};\r\n headerFilterByColumn.width = e.width;\r\n headerFilterByColumn.height = e.height;\r\n columnsController.columnOption(options.dataField, \"headerFilter\", headerFilterByColumn, true)\r\n })\r\n },\r\n onHidden: function() {\r\n return (0, _accessibility.restoreFocus)(_this)\r\n }\r\n });\r\n options.dataSource = that.getDataSource(options);\r\n if (options.isFilterBuilder) {\r\n options.dataSource.filter = null;\r\n options.alignment = \"right\"\r\n }\r\n that._headerFilterView.showHeaderFilterMenu(options.columnElement, options)\r\n }\r\n },\r\n hideHeaderFilterMenu: function() {\r\n this._headerFilterView.hideHeaderFilterMenu()\r\n }\r\n }\r\n}());\r\nvar ColumnHeadersViewHeaderFilterExtender = (0, _extend.extend)({}, _uiGrid_core3.headerFilterMixin, {\r\n _renderCellContent: function($cell, options) {\r\n var that = this;\r\n var $headerFilterIndicator;\r\n var column = options.column;\r\n if (!column.command && (0, _uiGrid_core3.allowHeaderFiltering)(column) && that.option(\"headerFilter.visible\") && \"header\" === options.rowType) {\r\n $headerFilterIndicator = that._applyColumnState({\r\n name: \"headerFilter\",\r\n rootElement: $cell,\r\n column: column,\r\n showColumnLines: that.option(\"showColumnLines\")\r\n });\r\n $headerFilterIndicator && that._subscribeToIndicatorEvent($headerFilterIndicator, column, \"headerFilter\")\r\n }\r\n that.callBase($cell, options)\r\n },\r\n _subscribeToIndicatorEvent: function($indicator, column, indicatorName) {\r\n var that = this;\r\n if (\"headerFilter\" === indicatorName) {\r\n _events_engine.default.on($indicator, _click.name, that.createAction(function(e) {\r\n e.event.stopPropagation();\r\n that.getController(\"headerFilter\").showHeaderFilterMenu(column.index, false)\r\n }))\r\n }\r\n },\r\n _updateIndicator: function($cell, column, indicatorName) {\r\n var $indicator = this.callBase($cell, column, indicatorName);\r\n $indicator && this._subscribeToIndicatorEvent($indicator, column, indicatorName)\r\n },\r\n _updateHeaderFilterIndicators: function() {\r\n if (this.option(\"headerFilter.visible\")) {\r\n this._updateIndicators(\"headerFilter\")\r\n }\r\n },\r\n _needUpdateFilterIndicators: function() {\r\n return true\r\n },\r\n _columnOptionChanged: function(e) {\r\n var optionNames = e.optionNames;\r\n if (_uiGrid_core2.default.checkChanges(optionNames, [\"filterValues\", \"filterType\"])) {\r\n if (this._needUpdateFilterIndicators()) {\r\n this._updateHeaderFilterIndicators()\r\n }\r\n return\r\n }\r\n this.callBase(e)\r\n }\r\n});\r\nvar HeaderPanelHeaderFilterExtender = (0, _extend.extend)({}, _uiGrid_core3.headerFilterMixin, {\r\n _createGroupPanelItem: function($rootElement, groupColumn) {\r\n var that = this;\r\n var $item = that.callBase.apply(that, arguments);\r\n var $headerFilterIndicator;\r\n if (!groupColumn.command && (0, _uiGrid_core3.allowHeaderFiltering)(groupColumn) && that.option(\"headerFilter.visible\")) {\r\n $headerFilterIndicator = that._applyColumnState({\r\n name: \"headerFilter\",\r\n rootElement: $item,\r\n column: {\r\n alignment: (0, _position.getDefaultAlignment)(that.option(\"rtlEnabled\")),\r\n filterValues: groupColumn.filterValues,\r\n allowHeaderFiltering: true\r\n },\r\n showColumnLines: true\r\n });\r\n $headerFilterIndicator && _events_engine.default.on($headerFilterIndicator, _click.name, that.createAction(function(e) {\r\n var event = e.event;\r\n event.stopPropagation();\r\n that.getController(\"headerFilter\").showHeaderFilterMenu(groupColumn.index, true)\r\n }))\r\n }\r\n return $item\r\n }\r\n});\r\n\r\nfunction invertFilterExpression(filter) {\r\n return [\"!\", filter]\r\n}\r\nvar DataControllerFilterRowExtender = {\r\n skipCalculateColumnFilters: function() {\r\n return false\r\n },\r\n _calculateAdditionalFilter: function() {\r\n if (this.skipCalculateColumnFilters()) {\r\n return this.callBase()\r\n }\r\n var that = this;\r\n var filters = [that.callBase()];\r\n var columns = that._columnsController.getVisibleColumns(null, true);\r\n var headerFilterController = that.getController(\"headerFilter\");\r\n var currentColumn = headerFilterController.getCurrentColumn();\r\n (0, _iterator.each)(columns, function(_, column) {\r\n var filter;\r\n if (currentColumn && currentColumn.index === column.index) {\r\n return\r\n }\r\n if ((0, _uiGrid_core3.allowHeaderFiltering)(column) && column.calculateFilterExpression && Array.isArray(column.filterValues) && column.filterValues.length) {\r\n var filterValues = [];\r\n (0, _iterator.each)(column.filterValues, function(_, filterValue) {\r\n if (Array.isArray(filterValue)) {\r\n filter = filterValue\r\n } else {\r\n if (column.deserializeValue && !_uiGrid_core2.default.isDateType(column.dataType) && \"number\" !== column.dataType) {\r\n filterValue = column.deserializeValue(filterValue)\r\n }\r\n filter = column.createFilterExpression(filterValue, \"=\", \"headerFilter\")\r\n }\r\n if (filter) {\r\n filter.columnIndex = column.index\r\n }\r\n filterValues.push(filter)\r\n });\r\n filterValues = _uiGrid_core2.default.combineFilters(filterValues, \"or\");\r\n filters.push(\"exclude\" === column.filterType ? [\"!\", filterValues] : filterValues)\r\n }\r\n });\r\n return _uiGrid_core2.default.combineFilters(filters)\r\n }\r\n};\r\nvar _default = {\r\n invertFilterExpression: invertFilterExpression,\r\n defaultOptions: function() {\r\n return {\r\n headerFilter: {\r\n visible: false,\r\n width: 252,\r\n height: 325,\r\n allowSearch: false,\r\n searchTimeout: 500,\r\n texts: {\r\n emptyValue: _message.default.format(\"dxDataGrid-headerFilterEmptyValue\"),\r\n ok: _message.default.format(\"dxDataGrid-headerFilterOK\"),\r\n cancel: _message.default.format(\"dxDataGrid-headerFilterCancel\")\r\n }\r\n }\r\n }\r\n },\r\n controllers: {\r\n headerFilter: HeaderFilterController\r\n },\r\n views: {\r\n headerFilterView: _uiGrid_core3.HeaderFilterView\r\n },\r\n extenders: {\r\n controllers: {\r\n data: DataControllerFilterRowExtender\r\n },\r\n views: {\r\n columnHeadersView: ColumnHeadersViewHeaderFilterExtender,\r\n headerPanel: HeaderPanelHeaderFilterExtender\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.header_filter_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.updateHeaderFilterItemSelectionState = updateHeaderFilterItemSelectionState;\r\nexports.headerFilterMixin = exports.allowHeaderFiltering = exports.HeaderFilterView = void 0;\r\nvar _renderer = _interopRequireDefault(require(\"../../core/renderer\"));\r\nvar _uiGrid_core = _interopRequireDefault(require(\"./ui.grid_core.modules\"));\r\nvar _uiGrid_core2 = _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 _popup = _interopRequireDefault(require(\"../popup\"));\r\nvar _tree_view = _interopRequireDefault(require(\"../tree_view\"));\r\nvar _list = _interopRequireDefault(require(\"../list\"));\r\n\r\nfunction _interopRequireDefault(obj) {\r\n return obj && obj.__esModule ? obj : {\r\n \"default\": obj\r\n }\r\n}\r\nvar HEADER_FILTER_CLASS = \"dx-header-filter\";\r\nvar HEADER_FILTER_MENU_CLASS = \"dx-header-filter-menu\";\r\nvar DEFAULT_SEARCH_EXPRESSION = \"text\";\r\n\r\nfunction resetChildrenItemSelection(items) {\r\n items = items || [];\r\n for (var i = 0; i < items.length; i++) {\r\n items[i].selected = false;\r\n resetChildrenItemSelection(items[i].items)\r\n }\r\n}\r\n\r\nfunction updateSelectAllState(e, filterValues) {\r\n if (e.component.option(\"searchValue\")) {\r\n return\r\n }\r\n var selectAllCheckBox = (0, _renderer.default)(e.element).find(\".dx-list-select-all-checkbox\").data(\"dxCheckBox\");\r\n if (selectAllCheckBox && filterValues && filterValues.length) {\r\n selectAllCheckBox.option(\"value\", void 0)\r\n }\r\n}\r\n\r\nfunction isSearchEnabled(that, options) {\r\n var headerFilter = options.headerFilter;\r\n if (headerFilter && (0, _type.isDefined)(headerFilter.allowSearch)) {\r\n return headerFilter.allowSearch\r\n }\r\n return that.option(\"headerFilter.allowSearch\")\r\n}\r\n\r\nfunction updateHeaderFilterItemSelectionState(item, filterValuesMatch, isExcludeFilter) {\r\n if (filterValuesMatch ^ isExcludeFilter) {\r\n item.selected = true;\r\n if (isExcludeFilter && item.items) {\r\n for (var j = 0; j < item.items.length; j++) {\r\n if (!item.items[j].selected) {\r\n item.selected = void 0;\r\n break\r\n }\r\n }\r\n }\r\n } else {\r\n if (isExcludeFilter || item.selected) {\r\n item.selected = false;\r\n resetChildrenItemSelection(item.items)\r\n }\r\n }\r\n}\r\nvar HeaderFilterView = _uiGrid_core.default.View.inherit({\r\n getPopupContainer: function() {\r\n return this._popupContainer\r\n },\r\n getListContainer: function() {\r\n return this._listContainer\r\n },\r\n applyHeaderFilter: function(options) {\r\n var that = this;\r\n var list = that.getListContainer();\r\n var searchValue = list.option(\"searchValue\");\r\n var isSelectAll = !searchValue && !options.isFilterBuilder && list.$element().find(\".dx-checkbox\").eq(0).hasClass(\"dx-checkbox-checked\");\r\n var filterValues = [];\r\n var fillSelectedItemKeys = function fillSelectedItemKeys(filterValues, items, isExclude) {\r\n (0, _iterator.each)(items, function(_, item) {\r\n if (void 0 !== item.selected && !!item.selected ^ isExclude) {\r\n var node = list._getNode(item);\r\n var hasChildren = list._hasChildren(node);\r\n var hasChildrenWithSelection = hasChildren && item.items && item.items.some(function(item) {\r\n return item.selected\r\n });\r\n if (!searchValue || !hasChildrenWithSelection) {\r\n filterValues.push(item.value);\r\n return\r\n }\r\n }\r\n if (item.items && item.items.length) {\r\n fillSelectedItemKeys(filterValues, item.items, isExclude)\r\n }\r\n })\r\n };\r\n if (!isSelectAll) {\r\n if (\"tree\" === options.type) {\r\n if (options.filterType) {\r\n options.filterType = \"include\"\r\n }\r\n fillSelectedItemKeys(filterValues, list.option(\"items\"), false);\r\n options.filterValues = filterValues\r\n }\r\n } else {\r\n if (\"tree\" === options.type) {\r\n options.filterType = \"exclude\"\r\n }\r\n if (Array.isArray(options.filterValues)) {\r\n options.filterValues = []\r\n }\r\n }\r\n if (options.filterValues && !options.filterValues.length) {\r\n options.filterValues = null\r\n }\r\n options.apply();\r\n that.hideHeaderFilterMenu()\r\n },\r\n showHeaderFilterMenu: function($columnElement, options) {\r\n var that = this;\r\n if (options) {\r\n that._initializePopupContainer(options);\r\n var popupContainer = that.getPopupContainer();\r\n that.hideHeaderFilterMenu();\r\n that.updatePopup($columnElement, options);\r\n popupContainer.show()\r\n }\r\n },\r\n hideHeaderFilterMenu: function() {\r\n var headerFilterMenu = this.getPopupContainer();\r\n headerFilterMenu && headerFilterMenu.hide()\r\n },\r\n updatePopup: function($element, options) {\r\n var that = this;\r\n var alignment = \"right\" === options.alignment ? \"left\" : \"right\";\r\n if (that._popupContainer) {\r\n that._cleanPopupContent();\r\n that._popupContainer.option(\"position\", {\r\n my: alignment + \" top\",\r\n at: alignment + \" bottom\",\r\n of: $element,\r\n collision: \"flip fit\"\r\n })\r\n }\r\n },\r\n _getSearchExpr: function(options) {\r\n var lookup = options.lookup;\r\n var useDefaultSearchExpr = options.useDefaultSearchExpr;\r\n var headerFilterDataSource = options.headerFilter && options.headerFilter.dataSource;\r\n if (useDefaultSearchExpr || (0, _type.isDefined)(headerFilterDataSource) && !(0, _type.isFunction)(headerFilterDataSource)) {\r\n return DEFAULT_SEARCH_EXPRESSION\r\n }\r\n if (lookup) {\r\n return lookup.displayExpr || \"this\"\r\n }\r\n if (options.dataSource) {\r\n var group = options.dataSource.group;\r\n if (Array.isArray(group) && group.length > 0) {\r\n return group[0].selector\r\n } else {\r\n if ((0, _type.isFunction)(group) && !options.remoteFiltering) {\r\n return group\r\n }\r\n }\r\n }\r\n return options.dataField || options.selector\r\n },\r\n _cleanPopupContent: function() {\r\n this._popupContainer && this._popupContainer.$content().empty()\r\n },\r\n _initializePopupContainer: function(options) {\r\n var that = this;\r\n var $element = that.element();\r\n var headerFilterOptions = that.option(\"headerFilter\");\r\n var width = options.headerFilter && options.headerFilter.width || headerFilterOptions && headerFilterOptions.width;\r\n var height = options.headerFilter && options.headerFilter.height || headerFilterOptions && headerFilterOptions.height;\r\n var dxPopupOptions = {\r\n width: width,\r\n height: height,\r\n visible: false,\r\n shading: false,\r\n showTitle: false,\r\n showCloseButton: false,\r\n closeOnTargetScroll: false,\r\n dragEnabled: false,\r\n closeOnOutsideClick: true,\r\n focusStateEnabled: false,\r\n toolbarItems: [{\r\n toolbar: \"bottom\",\r\n location: \"after\",\r\n widget: \"dxButton\",\r\n options: {\r\n text: headerFilterOptions.texts.ok,\r\n onClick: function() {\r\n that.applyHeaderFilter(options)\r\n }\r\n }\r\n }, {\r\n toolbar: \"bottom\",\r\n location: \"after\",\r\n widget: \"dxButton\",\r\n options: {\r\n text: headerFilterOptions.texts.cancel,\r\n onClick: function() {\r\n that.hideHeaderFilterMenu()\r\n }\r\n }\r\n }],\r\n resizeEnabled: true,\r\n onShowing: function(e) {\r\n e.component.$content().parent().addClass(\"dx-dropdowneditor-overlay\");\r\n that._initializeListContainer(options);\r\n options.onShowing && options.onShowing(e)\r\n },\r\n onShown: function() {\r\n that.getListContainer().focus()\r\n },\r\n onHidden: options.onHidden,\r\n onInitialized: function(e) {\r\n var component = e.component;\r\n component.option(\"animation\", component._getDefaultOptions().animation)\r\n }\r\n };\r\n if (!(0, _type.isDefined)(that._popupContainer)) {\r\n that._popupContainer = that._createComponent($element, _popup.default, dxPopupOptions)\r\n } else {\r\n that._popupContainer.option(dxPopupOptions)\r\n }\r\n },\r\n _initializeListContainer: function(options) {\r\n var that = this;\r\n var $content = that._popupContainer.$content();\r\n var widgetOptions = {\r\n searchEnabled: isSearchEnabled(that, options),\r\n searchTimeout: that.option(\"headerFilter.searchTimeout\"),\r\n searchMode: options.headerFilter && options.headerFilter.searchMode || \"\",\r\n dataSource: options.dataSource,\r\n onContentReady: function() {\r\n that.renderCompleted.fire()\r\n },\r\n itemTemplate: function(data, _, element) {\r\n var $element = (0, _renderer.default)(element);\r\n if (options.encodeHtml) {\r\n return $element.text(data.text)\r\n }\r\n return $element.html(data.text)\r\n }\r\n };\r\n\r\n function onOptionChanged(e) {\r\n if (\"searchValue\" === e.fullName && !options.isFilterBuilder && false !== that.option(\"headerFilter.hideSelectAllOnSearch\")) {\r\n if (\"tree\" === options.type) {\r\n e.component.option(\"showCheckBoxesMode\", e.value ? \"normal\" : \"selectAll\")\r\n } else {\r\n e.component.option(\"selectionMode\", e.value ? \"multiple\" : \"all\")\r\n }\r\n }\r\n }\r\n if (\"tree\" === options.type) {\r\n that._listContainer = that._createComponent((0, _renderer.default)(\"
\").appendTo($content), _tree_view.default, (0, _extend.extend)(widgetOptions, {\r\n showCheckBoxesMode: options.isFilterBuilder ? \"normal\" : \"selectAll\",\r\n onOptionChanged: onOptionChanged,\r\n keyExpr: \"id\"\r\n }))\r\n } else {\r\n that._listContainer = that._createComponent((0, _renderer.default)(\"
\").appendTo($content), _list.default, (0, _extend.extend)(widgetOptions, {\r\n searchExpr: that._getSearchExpr(options),\r\n pageLoadMode: \"scrollBottom\",\r\n showSelectionControls: true,\r\n selectionMode: options.isFilterBuilder ? \"multiple\" : \"all\",\r\n onOptionChanged: onOptionChanged,\r\n onSelectionChanged: function(e) {\r\n var items = e.component.option(\"items\");\r\n var selectedItems = e.component.option(\"selectedItems\");\r\n if (!e.component._selectedItemsUpdating && !e.component.option(\"searchValue\") && !options.isFilterBuilder) {\r\n var filterValues = options.filterValues || [];\r\n var isExclude = \"exclude\" === options.filterType;\r\n if (0 === selectedItems.length && items.length && (filterValues.length <= 1 || isExclude && filterValues.length === items.length - 1)) {\r\n options.filterType = \"include\";\r\n options.filterValues = []\r\n } else {\r\n if (selectedItems.length === items.length) {\r\n options.filterType = \"exclude\";\r\n options.filterValues = []\r\n }\r\n }\r\n }(0, _iterator.each)(items, function(index, item) {\r\n var selected = _uiGrid_core2.default.getIndexByKey(item, selectedItems, null) >= 0;\r\n var oldSelected = !!item.selected;\r\n if (oldSelected !== selected) {\r\n item.selected = selected;\r\n options.filterValues = options.filterValues || [];\r\n var filterValueIndex = _uiGrid_core2.default.getIndexByKey(item.value, options.filterValues, null);\r\n if (filterValueIndex >= 0) {\r\n options.filterValues.splice(filterValueIndex, 1)\r\n }\r\n if (selected ^ \"exclude\" === options.filterType) {\r\n options.filterValues.push(item.value)\r\n }\r\n }\r\n });\r\n updateSelectAllState(e, options.filterValues)\r\n },\r\n onContentReady: function(e) {\r\n var component = e.component;\r\n var items = component.option(\"items\");\r\n var selectedItems = [];\r\n (0, _iterator.each)(items, function() {\r\n if (this.selected) {\r\n selectedItems.push(this)\r\n }\r\n });\r\n component._selectedItemsUpdating = true;\r\n component.option(\"selectedItems\", selectedItems);\r\n component._selectedItemsUpdating = false;\r\n updateSelectAllState(e, options.filterValues)\r\n }\r\n }))\r\n }\r\n },\r\n _renderCore: function() {\r\n this.element().addClass(HEADER_FILTER_MENU_CLASS)\r\n }\r\n});\r\nexports.HeaderFilterView = HeaderFilterView;\r\nvar allowHeaderFiltering = function(column) {\r\n return (0, _type.isDefined)(column.allowHeaderFiltering) ? column.allowHeaderFiltering : column.allowFiltering\r\n};\r\nexports.allowHeaderFiltering = allowHeaderFiltering;\r\nvar headerFilterMixin = {\r\n _applyColumnState: function(options) {\r\n var $headerFilterIndicator;\r\n var rootElement = options.rootElement;\r\n var column = options.column;\r\n if (\"headerFilter\" === options.name) {\r\n rootElement.find(\".\" + HEADER_FILTER_CLASS).remove();\r\n if (allowHeaderFiltering(column)) {\r\n $headerFilterIndicator = this.callBase(options).toggleClass(\"dx-header-filter-empty\", this._isHeaderFilterEmpty(column));\r\n if (!this.option(\"useLegacyKeyboardNavigation\")) {\r\n $headerFilterIndicator.attr(\"tabindex\", this.option(\"tabindex\") || 0)\r\n }\r\n }\r\n return $headerFilterIndicator\r\n }\r\n return this.callBase(options)\r\n },\r\n _isHeaderFilterEmpty: function(column) {\r\n return !column.filterValues || !column.filterValues.length\r\n },\r\n _getIndicatorClassName: function(name) {\r\n if (\"headerFilter\" === name) {\r\n return HEADER_FILTER_CLASS\r\n }\r\n return this.callBase(name)\r\n },\r\n _renderIndicator: function(options) {\r\n var $container = options.container;\r\n var $indicator = options.indicator;\r\n if (\"headerFilter\" === options.name) {\r\n var rtlEnabled = this.option(\"rtlEnabled\");\r\n if ($container.children().length && (!rtlEnabled && \"right\" === options.columnAlignment || rtlEnabled && \"left\" === options.columnAlignment)) {\r\n $container.prepend($indicator);\r\n return\r\n }\r\n }\r\n this.callBase(options)\r\n },\r\n optionChanged: function(args) {\r\n if (\"headerFilter\" === args.name) {\r\n var requireReady = \"columnHeadersView\" === this.name;\r\n this._invalidate(requireReady, requireReady);\r\n args.handled = true\r\n } else {\r\n this.callBase(args)\r\n }\r\n }\r\n};\r\nexports.headerFilterMixin = headerFilterMixin;\r\n","/**\r\n * DevExtreme (ui/grid_core/ui.grid_core.filter_sync.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 _uiGrid_core = _interopRequireDefault(require(\"./ui.grid_core.modules\"));\r\nvar _utils = require(\"../filter_builder/utils\");\r\nvar _ui = _interopRequireDefault(require(\"../widget/ui.errors\"));\r\nvar _uiGrid_core2 = _interopRequireDefault(require(\"./ui.grid_core.utils\"));\r\nvar _filtering = _interopRequireDefault(require(\"../shared/filtering\"));\r\nvar _uiGrid_core3 = require(\"./ui.grid_core.filter_custom_operations\");\r\n\r\nfunction _interopRequireDefault(obj) {\r\n return obj && obj.__esModule ? obj : {\r\n \"default\": obj\r\n }\r\n}\r\nvar FILTER_ROW_OPERATIONS = [\"=\", \"<>\", \"<\", \"<=\", \">\", \">=\", \"notcontains\", \"contains\", \"startswith\", \"endswith\", \"between\"];\r\nvar FILTER_TYPES_INCLUDE = \"include\";\r\nvar FILTER_TYPES_EXCLUDE = \"exclude\";\r\n\r\nfunction getColumnIdentifier(column) {\r\n return column.dataField || column.name\r\n}\r\n\r\nfunction checkForErrors(columns) {\r\n columns.forEach(function(column) {\r\n var identifier = getColumnIdentifier(column);\r\n if (!(0, _type.isDefined)(identifier) && column.allowFiltering) {\r\n throw new _ui.default.Error(\"E1049\", column.caption)\r\n }\r\n })\r\n}\r\nvar FilterSyncController = _uiGrid_core.default.Controller.inherit(function() {\r\n var getEmptyFilterValues = function() {\r\n return {\r\n filterType: FILTER_TYPES_INCLUDE,\r\n filterValues: void 0\r\n }\r\n };\r\n var canSyncHeaderFilterWithFilterRow = function(column) {\r\n return !_filtering.default.getGroupInterval(column) && !(column.headerFilter && column.headerFilter.dataSource)\r\n };\r\n var getHeaderFilterFromCondition = function(headerFilterCondition, column) {\r\n if (!headerFilterCondition) {\r\n return getEmptyFilterValues()\r\n }\r\n var filterType;\r\n var selectedFilterOperation = headerFilterCondition[1];\r\n var value = headerFilterCondition[2];\r\n var hasArrayValue = Array.isArray(value);\r\n if (!hasArrayValue) {\r\n if (!canSyncHeaderFilterWithFilterRow(column)) {\r\n return getEmptyFilterValues()\r\n }\r\n }\r\n switch (selectedFilterOperation) {\r\n case \"anyof\":\r\n case \"=\":\r\n filterType = FILTER_TYPES_INCLUDE;\r\n break;\r\n case \"noneof\":\r\n case \"<>\":\r\n filterType = FILTER_TYPES_EXCLUDE;\r\n break;\r\n default:\r\n return getEmptyFilterValues()\r\n }\r\n return {\r\n filterType: filterType,\r\n filterValues: hasArrayValue ? value : [value]\r\n }\r\n };\r\n var getConditionFromFilterRow = function(column) {\r\n var value = column.filterValue;\r\n if ((0, _type.isDefined)(value)) {\r\n var operation = column.selectedFilterOperation || column.defaultFilterOperation || (0, _utils.getDefaultOperation)(column);\r\n var filter = [getColumnIdentifier(column), operation, column.filterValue];\r\n return filter\r\n } else {\r\n return null\r\n }\r\n };\r\n var getConditionFromHeaderFilter = function(column) {\r\n var selectedOperation;\r\n var value;\r\n var filterValues = column.filterValues;\r\n if (!filterValues) {\r\n return null\r\n }\r\n if (canSyncHeaderFilterWithFilterRow(column) && 1 === column.filterValues.length && !Array.isArray(filterValues[0])) {\r\n column.filterType === FILTER_TYPES_EXCLUDE ? selectedOperation = \"<>\" : selectedOperation = \"=\";\r\n value = filterValues[0]\r\n } else {\r\n column.filterType === FILTER_TYPES_EXCLUDE ? selectedOperation = \"noneof\" : selectedOperation = \"anyof\";\r\n value = filterValues\r\n }\r\n return [getColumnIdentifier(column), selectedOperation, value]\r\n };\r\n var updateHeaderFilterCondition = function(columnsController, column, headerFilterCondition) {\r\n var headerFilter = getHeaderFilterFromCondition(headerFilterCondition, column);\r\n columnsController.columnOption(getColumnIdentifier(column), headerFilter)\r\n };\r\n var updateFilterRowCondition = function(columnsController, column, condition) {\r\n var filterRowOptions;\r\n var selectedFilterOperation = condition && condition[1];\r\n var filterOperations = column.filterOperations || column.defaultFilterOperations;\r\n if ((!filterOperations || filterOperations.indexOf(selectedFilterOperation) >= 0 || selectedFilterOperation === column.defaultFilterOperation) && FILTER_ROW_OPERATIONS.indexOf(selectedFilterOperation) >= 0) {\r\n if (selectedFilterOperation === column.defaultFilterOperation && !(0, _type.isDefined)(column.selectedFilterOperation)) {\r\n selectedFilterOperation = column.selectedFilterOperation\r\n }\r\n filterRowOptions = {\r\n filterValue: condition[2],\r\n selectedFilterOperation: selectedFilterOperation\r\n }\r\n } else {\r\n filterRowOptions = {\r\n filterValue: void 0,\r\n selectedFilterOperation: void 0\r\n }\r\n }\r\n columnsController.columnOption(getColumnIdentifier(column), filterRowOptions)\r\n };\r\n return {\r\n syncFilterValue: function() {\r\n var that = this;\r\n var columnsController = that.getController(\"columns\");\r\n var columns = columnsController.getFilteringColumns();\r\n this._skipSyncColumnOptions = true;\r\n columns.forEach(function(column) {\r\n var filterConditions = (0, _utils.getMatchedConditions)(that.option(\"filterValue\"), getColumnIdentifier(column));\r\n if (1 === filterConditions.length) {\r\n var filterCondition = filterConditions[0];\r\n updateHeaderFilterCondition(columnsController, column, filterCondition);\r\n updateFilterRowCondition(columnsController, column, filterCondition)\r\n } else {\r\n (0, _type.isDefined)(column.filterValues) && updateHeaderFilterCondition(columnsController, column);\r\n (0, _type.isDefined)(column.filterValue) && updateFilterRowCondition(columnsController, column)\r\n }\r\n });\r\n this._skipSyncColumnOptions = false\r\n },\r\n _initSync: function() {\r\n var columns = this.getController(\"columns\").getColumns();\r\n var dataController = this.getController(\"data\");\r\n var pageIndex = dataController.pageIndex();\r\n checkForErrors(columns);\r\n if (!this.option(\"filterValue\")) {\r\n var filteringColumns = this.getController(\"columns\").getFilteringColumns();\r\n var filterValue = this.getFilterValueFromColumns(filteringColumns);\r\n this.option(\"filterValue\", filterValue)\r\n }\r\n this.syncFilterValue();\r\n dataController.pageIndex(pageIndex)\r\n },\r\n init: function() {\r\n var _this = this;\r\n var dataController = this.getController(\"data\");\r\n if (dataController.isFilterSyncActive()) {\r\n if (this.getController(\"columns\").isAllDataTypesDefined()) {\r\n this._initSync()\r\n } else {\r\n dataController.dataSourceChanged.add(function() {\r\n return _this._initSync()\r\n })\r\n }\r\n }\r\n },\r\n _getSyncFilterRow: function(filterValue, column) {\r\n var filter = getConditionFromFilterRow(column);\r\n if ((0, _type.isDefined)(filter)) {\r\n return (0, _utils.syncFilters)(filterValue, filter)\r\n } else {\r\n return (0, _utils.removeFieldConditionsFromFilter)(filterValue, getColumnIdentifier(column))\r\n }\r\n },\r\n _getSyncHeaderFilter: function(filterValue, column) {\r\n var filter = getConditionFromHeaderFilter(column);\r\n if (filter) {\r\n return (0, _utils.syncFilters)(filterValue, filter)\r\n } else {\r\n return (0, _utils.removeFieldConditionsFromFilter)(filterValue, getColumnIdentifier(column))\r\n }\r\n },\r\n getFilterValueFromColumns: function(columns) {\r\n if (!this.getController(\"data\").isFilterSyncActive()) {\r\n return null\r\n }\r\n var filterValue = [\"and\"];\r\n columns && columns.forEach(function(column) {\r\n var headerFilter = getConditionFromHeaderFilter(column);\r\n var filterRow = getConditionFromFilterRow(column);\r\n headerFilter && (0, _utils.addItem)(headerFilter, filterValue);\r\n filterRow && (0, _utils.addItem)(filterRow, filterValue)\r\n });\r\n return (0, _utils.getNormalizedFilter)(filterValue)\r\n },\r\n syncFilterRow: function(column, value) {\r\n this.option(\"filterValue\", this._getSyncFilterRow(this.option(\"filterValue\"), column))\r\n },\r\n syncHeaderFilter: function(column) {\r\n this.option(\"filterValue\", this._getSyncHeaderFilter(this.option(\"filterValue\"), column))\r\n },\r\n getCustomFilterOperations: function() {\r\n var filterBuilderCustomOperations = this.option(\"filterBuilder.customOperations\") || [];\r\n return [(0, _uiGrid_core3.anyOf)(this.component), (0, _uiGrid_core3.noneOf)(this.component)].concat(filterBuilderCustomOperations)\r\n },\r\n publicMethods: function() {\r\n return [\"getCustomFilterOperations\"]\r\n }\r\n }\r\n}());\r\nvar DataControllerFilterSyncExtender = {\r\n isFilterSyncActive: function() {\r\n var filterSyncEnabledValue = this.option(\"filterSyncEnabled\");\r\n return \"auto\" === filterSyncEnabledValue ? this.option(\"filterPanel.visible\") : filterSyncEnabledValue\r\n },\r\n skipCalculateColumnFilters: function() {\r\n return (0, _type.isDefined)(this.option(\"filterValue\")) && this.isFilterSyncActive()\r\n },\r\n _calculateAdditionalFilter: function() {\r\n var that = this;\r\n if (false === that.option(\"filterPanel.filterEnabled\")) {\r\n return that.callBase()\r\n }\r\n var filters = [that.callBase()];\r\n var columns = that.getController(\"columns\").getFilteringColumns();\r\n var filterValue = that.option(\"filterValue\");\r\n if (that.isFilterSyncActive()) {\r\n var currentColumn = that.getController(\"headerFilter\").getCurrentColumn();\r\n if (currentColumn && filterValue) {\r\n filterValue = (0, _utils.removeFieldConditionsFromFilter)(filterValue, getColumnIdentifier(currentColumn))\r\n }\r\n }\r\n var customOperations = that.getController(\"filterSync\").getCustomFilterOperations();\r\n var calculatedFilterValue = (0, _utils.getFilterExpression)(filterValue, columns, customOperations, \"filterBuilder\");\r\n if (calculatedFilterValue) {\r\n filters.push(calculatedFilterValue)\r\n }\r\n return _uiGrid_core2.default.combineFilters(filters)\r\n },\r\n _parseColumnPropertyName: function(fullName) {\r\n var matched = fullName.match(/.*\\.(.*)/);\r\n return matched[1]\r\n },\r\n clearFilter: function(filterName) {\r\n this.component.beginUpdate();\r\n if (arguments.length > 0) {\r\n if (\"filterValue\" === filterName) {\r\n this.option(\"filterValue\", null)\r\n }\r\n this.callBase(filterName)\r\n } else {\r\n this.option(\"filterValue\", null);\r\n this.callBase()\r\n }\r\n this.component.endUpdate()\r\n },\r\n optionChanged: function(args) {\r\n switch (args.name) {\r\n case \"filterValue\":\r\n this._applyFilter();\r\n this.isFilterSyncActive() && this.getController(\"filterSync\").syncFilterValue();\r\n args.handled = true;\r\n break;\r\n case \"filterSyncEnabled\":\r\n args.handled = true;\r\n break;\r\n case \"columns\":\r\n if (this.isFilterSyncActive()) {\r\n var column = this.getController(\"columns\").getColumnByPath(args.fullName);\r\n var filterSyncController = this.getController(\"filterSync\");\r\n if (column && !filterSyncController._skipSyncColumnOptions) {\r\n var propertyName = this._parseColumnPropertyName(args.fullName);\r\n filterSyncController._skipSyncColumnOptions = true;\r\n if (\"filterType\" === propertyName) {\r\n if (FILTER_TYPES_EXCLUDE === args.value || FILTER_TYPES_EXCLUDE === args.previousValue) {\r\n filterSyncController.syncHeaderFilter(column)\r\n }\r\n } else {\r\n if (\"filterValues\" === propertyName) {\r\n filterSyncController.syncHeaderFilter(column)\r\n } else {\r\n if ([\"filterValue\", \"selectedFilterOperation\"].indexOf(propertyName) > -1) {\r\n filterSyncController.syncFilterRow(column, column.filterValue)\r\n }\r\n }\r\n }\r\n filterSyncController._skipSyncColumnOptions = false\r\n }\r\n }\r\n this.callBase(args);\r\n break;\r\n default:\r\n this.callBase(args)\r\n }\r\n }\r\n};\r\nvar ColumnHeadersViewFilterSyncExtender = {\r\n _isHeaderFilterEmpty: function(column) {\r\n if (this.getController(\"data\").isFilterSyncActive()) {\r\n return !(0, _utils.filterHasField)(this.option(\"filterValue\"), getColumnIdentifier(column))\r\n }\r\n return this.callBase(column)\r\n },\r\n _needUpdateFilterIndicators: function() {\r\n return !this.getController(\"data\").isFilterSyncActive()\r\n },\r\n optionChanged: function(args) {\r\n if (\"filterValue\" === args.name) {\r\n this._updateHeaderFilterIndicators()\r\n } else {\r\n this.callBase(args)\r\n }\r\n }\r\n};\r\nvar _default = {\r\n defaultOptions: function() {\r\n return {\r\n filterValue: null,\r\n filterSyncEnabled: \"auto\"\r\n }\r\n },\r\n controllers: {\r\n filterSync: FilterSyncController\r\n },\r\n extenders: {\r\n controllers: {\r\n data: DataControllerFilterSyncExtender\r\n },\r\n views: {\r\n columnHeadersView: ColumnHeadersViewFilterSyncExtender\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.filter_builder.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 _uiGrid_core = _interopRequireDefault(require(\"./ui.grid_core.modules\"));\r\nvar _extend = require(\"../../core/utils/extend\");\r\nvar _filter_builder = _interopRequireDefault(require(\"./../filter_builder\"));\r\nvar _message = _interopRequireDefault(require(\"../../localization/message\"));\r\nvar _scroll_view = _interopRequireDefault(require(\"./../scroll_view\"));\r\nvar _popup = _interopRequireDefault(require(\"./../popup\"));\r\nvar _accessibility = require(\"../shared/accessibility\");\r\n\r\nfunction _interopRequireDefault(obj) {\r\n return obj && obj.__esModule ? obj : {\r\n \"default\": obj\r\n }\r\n}\r\nvar FilterBuilderView = _uiGrid_core.default.View.inherit({\r\n _renderCore: function() {\r\n this._updatePopupOptions()\r\n },\r\n _updatePopupOptions: function() {\r\n if (this.option(\"filterBuilderPopup.visible\")) {\r\n this._initPopup()\r\n } else {\r\n if (this._filterBuilderPopup) {\r\n this._filterBuilderPopup.hide()\r\n }\r\n }\r\n },\r\n _disposePopup: function() {\r\n if (this._filterBuilderPopup) {\r\n this._filterBuilderPopup.dispose();\r\n this._filterBuilderPopup = void 0\r\n }\r\n if (this._filterBuilder) {\r\n this._filterBuilder.dispose();\r\n this._filterBuilder = void 0\r\n }\r\n },\r\n _initPopup: function() {\r\n var that = this;\r\n that._disposePopup();\r\n that._filterBuilderPopup = that._createComponent(that.element(), _popup.default, (0, _extend.extend)({\r\n title: _message.default.format(\"dxDataGrid-filterBuilderPopupTitle\"),\r\n contentTemplate: function($contentElement) {\r\n return that._getPopupContentTemplate($contentElement)\r\n },\r\n onOptionChanged: function(args) {\r\n if (\"visible\" === args.name) {\r\n that.option(\"filterBuilderPopup.visible\", args.value)\r\n }\r\n },\r\n toolbarItems: that._getPopupToolbarItems()\r\n }, that.option(\"filterBuilderPopup\"), {\r\n onHidden: function(e) {\r\n (0, _accessibility.restoreFocus)(that);\r\n that._disposePopup()\r\n }\r\n }))\r\n },\r\n _getPopupContentTemplate: function(contentElement) {\r\n var $contentElement = (0, _renderer.default)(contentElement);\r\n var $filterBuilderContainer = (0, _renderer.default)(\"
\").appendTo((0, _renderer.default)(contentElement));\r\n this._filterBuilder = this._createComponent($filterBuilderContainer, _filter_builder.default, (0, _extend.extend)({\r\n value: this.option(\"filterValue\"),\r\n fields: this.getController(\"columns\").getFilteringColumns()\r\n }, this.option(\"filterBuilder\"), {\r\n customOperations: this.getController(\"filterSync\").getCustomFilterOperations()\r\n }));\r\n this._createComponent($contentElement, _scroll_view.default, {\r\n direction: \"both\"\r\n })\r\n },\r\n _getPopupToolbarItems: function() {\r\n var that = this;\r\n return [{\r\n toolbar: \"bottom\",\r\n location: \"after\",\r\n widget: \"dxButton\",\r\n options: {\r\n text: _message.default.format(\"OK\"),\r\n onClick: function(e) {\r\n var filter = that._filterBuilder.option(\"value\");\r\n that.option(\"filterValue\", filter);\r\n that._filterBuilderPopup.hide()\r\n }\r\n }\r\n }, {\r\n toolbar: \"bottom\",\r\n location: \"after\",\r\n widget: \"dxButton\",\r\n options: {\r\n text: _message.default.format(\"Cancel\"),\r\n onClick: function(e) {\r\n that._filterBuilderPopup.hide()\r\n }\r\n }\r\n }]\r\n },\r\n optionChanged: function(args) {\r\n switch (args.name) {\r\n case \"filterBuilder\":\r\n case \"filterBuilderPopup\":\r\n this._invalidate();\r\n args.handled = true;\r\n break;\r\n default:\r\n this.callBase(args)\r\n }\r\n }\r\n});\r\nvar _default = {\r\n defaultOptions: function() {\r\n return {\r\n filterBuilder: {\r\n groupOperationDescriptions: {\r\n and: _message.default.format(\"dxFilterBuilder-and\"),\r\n or: _message.default.format(\"dxFilterBuilder-or\"),\r\n notAnd: _message.default.format(\"dxFilterBuilder-notAnd\"),\r\n notOr: _message.default.format(\"dxFilterBuilder-notOr\")\r\n },\r\n filterOperationDescriptions: {\r\n between: _message.default.format(\"dxFilterBuilder-filterOperationBetween\"),\r\n equal: _message.default.format(\"dxFilterBuilder-filterOperationEquals\"),\r\n notEqual: _message.default.format(\"dxFilterBuilder-filterOperationNotEquals\"),\r\n lessThan: _message.default.format(\"dxFilterBuilder-filterOperationLess\"),\r\n lessThanOrEqual: _message.default.format(\"dxFilterBuilder-filterOperationLessOrEquals\"),\r\n greaterThan: _message.default.format(\"dxFilterBuilder-filterOperationGreater\"),\r\n greaterThanOrEqual: _message.default.format(\"dxFilterBuilder-filterOperationGreaterOrEquals\"),\r\n startsWith: _message.default.format(\"dxFilterBuilder-filterOperationStartsWith\"),\r\n contains: _message.default.format(\"dxFilterBuilder-filterOperationContains\"),\r\n notContains: _message.default.format(\"dxFilterBuilder-filterOperationNotContains\"),\r\n endsWith: _message.default.format(\"dxFilterBuilder-filterOperationEndsWith\"),\r\n isBlank: _message.default.format(\"dxFilterBuilder-filterOperationIsBlank\"),\r\n isNotBlank: _message.default.format(\"dxFilterBuilder-filterOperationIsNotBlank\")\r\n }\r\n },\r\n filterBuilderPopup: {}\r\n }\r\n },\r\n views: {\r\n filterBuilderView: FilterBuilderView\r\n }\r\n};\r\nexports.default = _default;\r\nmodule.exports = exports.default;\r\n","/**\r\n * DevExtreme (ui/grid_core/ui.grid_core.filter_panel.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 _uiGrid_core = _interopRequireDefault(require(\"./ui.grid_core.modules\"));\r\nvar _uiGrid_core2 = _interopRequireDefault(require(\"./ui.grid_core.utils\"));\r\nvar _events_engine = _interopRequireDefault(require(\"../../events/core/events_engine\"));\r\nvar _message = _interopRequireDefault(require(\"../../localization/message\"));\r\nvar _check_box = _interopRequireDefault(require(\"../check_box\"));\r\nvar _utils = require(\"../filter_builder/utils\");\r\nvar _deferred = require(\"../../core/utils/deferred\");\r\nvar _inflector = require(\"../../core/utils/inflector\");\r\nvar _uiGrid_core3 = require(\"./ui.grid_core.accessibility\");\r\n\r\nfunction _interopRequireDefault(obj) {\r\n return obj && obj.__esModule ? obj : {\r\n \"default\": obj\r\n }\r\n}\r\nvar FILTER_PANEL_CLASS = \"filter-panel\";\r\nvar FILTER_PANEL_TEXT_CLASS = FILTER_PANEL_CLASS + \"-text\";\r\nvar FILTER_PANEL_CHECKBOX_CLASS = FILTER_PANEL_CLASS + \"-checkbox\";\r\nvar FILTER_PANEL_CLEAR_FILTER_CLASS = FILTER_PANEL_CLASS + \"-clear-filter\";\r\nvar FILTER_PANEL_LEFT_CONTAINER = FILTER_PANEL_CLASS + \"-left\";\r\nvar FILTER_PANEL_TARGET = \"filterPanel\";\r\nvar FilterPanelView = _uiGrid_core.default.View.inherit({\r\n isVisible: function() {\r\n return this.option(\"filterPanel.visible\") && this.getController(\"data\").dataSource()\r\n },\r\n init: function() {\r\n var _this = this;\r\n this.getController(\"data\").dataSourceChanged.add(function() {\r\n return _this.render()\r\n })\r\n },\r\n _renderCore: function() {\r\n var that = this;\r\n var $element = that.element();\r\n $element.empty().addClass(that.addWidgetPrefix(FILTER_PANEL_CLASS));\r\n var $leftContainer = (0, _renderer.default)(\"
\").addClass(that.addWidgetPrefix(FILTER_PANEL_LEFT_CONTAINER)).appendTo($element);\r\n if (that.option(\"filterValue\") || that._filterValueBuffer) {\r\n $leftContainer.append(that._getCheckElement()).append(that._getFilterElement()).append(that._getTextElement());\r\n $element.append(that._getRemoveButtonElement())\r\n } else {\r\n $leftContainer.append(that._getFilterElement()).append(that._getTextElement())\r\n }\r\n },\r\n _getCheckElement: function() {\r\n var that = this;\r\n var $element = (0, _renderer.default)(\"
\").addClass(this.addWidgetPrefix(FILTER_PANEL_CHECKBOX_CLASS));\r\n that._createComponent($element, _check_box.default, {\r\n value: that.option(\"filterPanel.filterEnabled\"),\r\n onValueChanged: function(e) {\r\n that.option(\"filterPanel.filterEnabled\", e.value)\r\n }\r\n });\r\n $element.attr(\"title\", this.option(\"filterPanel.texts.filterEnabledHint\"));\r\n return $element\r\n },\r\n _getFilterElement: function() {\r\n var that = this;\r\n var $element = (0, _renderer.default)(\"
\").addClass(\"dx-icon-filter\");\r\n _events_engine.default.on($element, \"click\", function() {\r\n return that._showFilterBuilder()\r\n });\r\n (0, _uiGrid_core3.registerKeyboardAction)(\"filterPanel\", that, $element, void 0, function() {\r\n return that._showFilterBuilder()\r\n });\r\n that._addTabIndexToElement($element);\r\n return $element\r\n },\r\n _getTextElement: function() {\r\n var that = this;\r\n var $textElement = (0, _renderer.default)(\"
\").addClass(that.addWidgetPrefix(FILTER_PANEL_TEXT_CLASS));\r\n var filterText;\r\n var filterValue = that.option(\"filterValue\");\r\n if (filterValue) {\r\n (0, _deferred.when)(that.getFilterText(filterValue, that.getController(\"filterSync\").getCustomFilterOperations())).done(function(filterText) {\r\n var customizeText = that.option(\"filterPanel.customizeText\");\r\n if (customizeText) {\r\n var customText = customizeText({\r\n component: that.component,\r\n filterValue: filterValue,\r\n text: filterText\r\n });\r\n if (\"string\" === typeof customText) {\r\n filterText = customText\r\n }\r\n }\r\n $textElement.text(filterText)\r\n })\r\n } else {\r\n filterText = that.option(\"filterPanel.texts.createFilter\");\r\n $textElement.text(filterText)\r\n }\r\n _events_engine.default.on($textElement, \"click\", function() {\r\n return that._showFilterBuilder()\r\n });\r\n (0, _uiGrid_core3.registerKeyboardAction)(\"filterPanel\", that, $textElement, void 0, function() {\r\n return that._showFilterBuilder()\r\n });\r\n that._addTabIndexToElement($textElement);\r\n return $textElement\r\n },\r\n _showFilterBuilder: function() {\r\n this.option(\"filterBuilderPopup.visible\", true)\r\n },\r\n _getRemoveButtonElement: function() {\r\n var that = this;\r\n var clearFilterValue = function() {\r\n return that.option(\"filterValue\", null)\r\n };\r\n var $element = (0, _renderer.default)(\"
\").addClass(that.addWidgetPrefix(FILTER_PANEL_CLEAR_FILTER_CLASS)).text(that.option(\"filterPanel.texts.clearFilter\"));\r\n _events_engine.default.on($element, \"click\", clearFilterValue);\r\n (0, _uiGrid_core3.registerKeyboardAction)(\"filterPanel\", this, $element, void 0, clearFilterValue);\r\n that._addTabIndexToElement($element);\r\n return $element\r\n },\r\n _addTabIndexToElement: function($element) {\r\n if (!this.option(\"useLegacyKeyboardNavigation\")) {\r\n var tabindex = this.option(\"tabindex\") || 0;\r\n $element.attr(\"tabindex\", tabindex)\r\n }\r\n },\r\n optionChanged: function(args) {\r\n switch (args.name) {\r\n case \"filterValue\":\r\n this._invalidate();\r\n this.option(\"filterPanel.filterEnabled\", true);\r\n args.handled = true;\r\n break;\r\n case \"filterPanel\":\r\n this._invalidate();\r\n args.handled = true;\r\n break;\r\n default:\r\n this.callBase(args)\r\n }\r\n },\r\n _getConditionText: function(fieldText, operationText, valueText) {\r\n var result = \"[\".concat(fieldText, \"] \").concat(operationText);\r\n if ((0, _type.isDefined)(valueText)) {\r\n result += valueText\r\n }\r\n return result\r\n },\r\n _getValueMaskedText: function(value) {\r\n return Array.isArray(value) ? \"('\".concat(value.join(\"', '\"), \"')\") : \" '\".concat(value, \"'\")\r\n },\r\n _getValueText: function(field, customOperation, value) {\r\n var _this2 = this;\r\n var deferred = new _deferred.Deferred;\r\n var hasCustomOperation = customOperation && customOperation.customizeText;\r\n if ((0, _type.isDefined)(value) || hasCustomOperation) {\r\n if (!hasCustomOperation && field.lookup) {\r\n (0, _utils.getCurrentLookupValueText)(field, value, function(data) {\r\n deferred.resolve(_this2._getValueMaskedText(data))\r\n })\r\n } else {\r\n var displayValue = Array.isArray(value) ? value : _uiGrid_core2.default.getDisplayValue(field, value);\r\n (0, _deferred.when)((0, _utils.getCurrentValueText)(field, displayValue, customOperation, FILTER_PANEL_TARGET)).done(function(data) {\r\n deferred.resolve(_this2._getValueMaskedText(data))\r\n })\r\n }\r\n } else {\r\n deferred.resolve(\"\")\r\n }\r\n return deferred.promise()\r\n },\r\n getConditionText: function(filterValue, options) {\r\n var that = this;\r\n var operation = filterValue[1];\r\n var deferred = new _deferred.Deferred;\r\n var customOperation = (0, _utils.getCustomOperation)(options.customOperations, operation);\r\n var operationText;\r\n var field = (0, _utils.getField)(filterValue[0], options.columns);\r\n var fieldText = field.caption || \"\";\r\n var value = filterValue[2];\r\n if (customOperation) {\r\n operationText = customOperation.caption || (0, _inflector.captionize)(customOperation.name)\r\n } else {\r\n if (null === value) {\r\n operationText = (0, _utils.getCaptionByOperation)(\"=\" === operation ? \"isblank\" : \"isnotblank\", options.filterOperationDescriptions)\r\n } else {\r\n operationText = (0, _utils.getCaptionByOperation)(operation, options.filterOperationDescriptions)\r\n }\r\n }\r\n this._getValueText(field, customOperation, value).done(function(valueText) {\r\n deferred.resolve(that._getConditionText(fieldText, operationText, valueText))\r\n });\r\n return deferred\r\n },\r\n getGroupText: function(filterValue, options, isInnerGroup) {\r\n var that = this;\r\n var result = new _deferred.Deferred;\r\n var textParts = [];\r\n var groupValue = (0, _utils.getGroupValue)(filterValue);\r\n filterValue.forEach(function(item) {\r\n if ((0, _utils.isCondition)(item)) {\r\n textParts.push(that.getConditionText(item, options))\r\n } else {\r\n if ((0, _utils.isGroup)(item)) {\r\n textParts.push(that.getGroupText(item, options, true))\r\n }\r\n }\r\n });\r\n _deferred.when.apply(this, textParts).done(function() {\r\n var text;\r\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\r\n args[_key] = arguments[_key]\r\n }\r\n if (\"!\" === groupValue[0]) {\r\n var groupText = options.groupOperationDescriptions[\"not\" + groupValue.substring(1, 2).toUpperCase() + groupValue.substring(2)].split(\" \");\r\n text = \"\".concat(groupText[0], \" \").concat(args[0])\r\n } else {\r\n text = args.join(\" \".concat(options.groupOperationDescriptions[groupValue], \" \"))\r\n }\r\n if (isInnerGroup) {\r\n text = \"(\".concat(text, \")\")\r\n }\r\n result.resolve(text)\r\n });\r\n return result\r\n },\r\n getFilterText: function(filterValue, customOperations) {\r\n var that = this;\r\n var options = {\r\n customOperations: customOperations,\r\n columns: that.getController(\"columns\").getFilteringColumns(),\r\n filterOperationDescriptions: that.option(\"filterBuilder.filterOperationDescriptions\"),\r\n groupOperationDescriptions: that.option(\"filterBuilder.groupOperationDescriptions\")\r\n };\r\n return (0, _utils.isCondition)(filterValue) ? that.getConditionText(filterValue, options) : that.getGroupText(filterValue, options)\r\n }\r\n});\r\nvar _default = {\r\n defaultOptions: function() {\r\n return {\r\n filterPanel: {\r\n visible: false,\r\n filterEnabled: true,\r\n texts: {\r\n createFilter: _message.default.format(\"dxDataGrid-filterPanelCreateFilter\"),\r\n clearFilter: _message.default.format(\"dxDataGrid-filterPanelClearFilter\"),\r\n filterEnabledHint: _message.default.format(\"dxDataGrid-filterPanelFilterEnabledHint\")\r\n }\r\n }\r\n }\r\n },\r\n views: {\r\n filterPanelView: FilterPanelView\r\n },\r\n extenders: {\r\n controllers: {\r\n data: {\r\n optionChanged: function(args) {\r\n switch (args.name) {\r\n case \"filterPanel\":\r\n this._applyFilter();\r\n args.handled = true;\r\n break;\r\n default:\r\n this.callBase(args)\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.pager.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 _uiGrid_core = _interopRequireDefault(require(\"./ui.grid_core.modules\"));\r\nvar _pager = _interopRequireDefault(require(\"../pager\"));\r\nvar _array = require(\"../../core/utils/array\");\r\nvar _type = require(\"../../core/utils/type\");\r\nvar _window = require(\"../../core/utils/window\");\r\n\r\nfunction _interopRequireDefault(obj) {\r\n return obj && obj.__esModule ? obj : {\r\n \"default\": obj\r\n }\r\n}\r\nvar PAGER_CLASS = \"pager\";\r\nvar MAX_PAGES_COUNT = 10;\r\nvar getPageIndex = function(dataController) {\r\n return 1 + (parseInt(dataController.pageIndex()) || 0)\r\n};\r\nvar PagerView = _uiGrid_core.default.View.inherit({\r\n init: function() {\r\n var that = this;\r\n var dataController = that.getController(\"data\");\r\n that._isVisible = false;\r\n dataController.changed.add(function(e) {\r\n if (e && e.repaintChangesOnly) {\r\n var pager = that._getPager();\r\n if (pager) {\r\n pager.option({\r\n pageIndex: getPageIndex(dataController),\r\n pageSize: dataController.pageSize(),\r\n pageCount: dataController.pageCount(),\r\n totalCount: dataController.totalCount(),\r\n hasKnownLastPage: dataController.hasKnownLastPage()\r\n })\r\n } else {\r\n that.render()\r\n }\r\n } else {\r\n if (!e || \"update\" !== e.changeType && \"updateSelection\" !== e.changeType) {\r\n that.render()\r\n }\r\n }\r\n })\r\n },\r\n _getPager: function() {\r\n var $element = this.element();\r\n return $element && $element.data(\"dxPager\")\r\n },\r\n _renderCore: function() {\r\n var that = this;\r\n var $element = that.element().addClass(that.addWidgetPrefix(PAGER_CLASS));\r\n var pagerOptions = that.option(\"pager\") || {};\r\n var dataController = that.getController(\"data\");\r\n var keyboardController = that.getController(\"keyboardNavigation\");\r\n var options = {\r\n maxPagesCount: MAX_PAGES_COUNT,\r\n pageIndex: getPageIndex(dataController),\r\n pageCount: dataController.pageCount(),\r\n pageSize: dataController.pageSize(),\r\n showPageSizes: pagerOptions.showPageSizeSelector,\r\n showInfo: pagerOptions.showInfo,\r\n displayMode: pagerOptions.displayMode,\r\n pagesNavigatorVisible: pagerOptions.visible,\r\n showNavigationButtons: pagerOptions.showNavigationButtons,\r\n pageSizes: that.getPageSizes(),\r\n totalCount: dataController.totalCount(),\r\n hasKnownLastPage: dataController.hasKnownLastPage(),\r\n pageIndexChanged: function(pageIndex) {\r\n if (dataController.pageIndex() !== pageIndex - 1) {\r\n setTimeout(function() {\r\n dataController.pageIndex(pageIndex - 1)\r\n })\r\n }\r\n },\r\n pageSizeChanged: function(pageSize) {\r\n setTimeout(function() {\r\n dataController.pageSize(pageSize)\r\n })\r\n },\r\n onKeyDown: function(e) {\r\n return keyboardController && keyboardController.executeAction(\"onKeyDown\", e)\r\n },\r\n useLegacyKeyboardNavigation: this.option(\"useLegacyKeyboardNavigation\"),\r\n useKeyboard: this.option(\"keyboardNavigation.enabled\")\r\n };\r\n if ((0, _type.isDefined)(pagerOptions.infoText)) {\r\n options.infoText = pagerOptions.infoText\r\n }\r\n that._createComponent($element, _pager.default, options)\r\n },\r\n getPageSizes: function() {\r\n var that = this;\r\n var dataController = that.getController(\"data\");\r\n var pagerOptions = that.option(\"pager\");\r\n var allowedPageSizes = pagerOptions && pagerOptions.allowedPageSizes;\r\n var pageSize = dataController.pageSize();\r\n if (!(0, _type.isDefined)(that._pageSizes) || (0, _array.inArray)(pageSize, that._pageSizes) === -1) {\r\n that._pageSizes = [];\r\n if (pagerOptions) {\r\n if (Array.isArray(allowedPageSizes)) {\r\n that._pageSizes = allowedPageSizes\r\n } else {\r\n if (allowedPageSizes && pageSize > 1) {\r\n that._pageSizes = [Math.floor(pageSize / 2), pageSize, 2 * pageSize]\r\n }\r\n }\r\n }\r\n }\r\n return that._pageSizes\r\n },\r\n isVisible: function() {\r\n var that = this;\r\n var dataController = that.getController(\"data\");\r\n var pagerOptions = that.option(\"pager\");\r\n var pagerVisible = pagerOptions && pagerOptions.visible;\r\n var scrolling = that.option(\"scrolling\");\r\n if (that._isVisible) {\r\n return true\r\n }\r\n if (\"auto\" === pagerVisible) {\r\n if (scrolling && (\"virtual\" === scrolling.mode || \"infinite\" === scrolling.mode)) {\r\n pagerVisible = false\r\n } else {\r\n pagerVisible = dataController.pageCount() > 1 || dataController.isLoaded() && !dataController.hasKnownLastPage()\r\n }\r\n }\r\n that._isVisible = pagerVisible;\r\n return pagerVisible\r\n },\r\n getHeight: function() {\r\n return this.getElementHeight()\r\n },\r\n optionChanged: function(args) {\r\n var that = this;\r\n var name = args.name;\r\n var isPager = \"pager\" === name;\r\n var isPaging = \"paging\" === name;\r\n var isDataSource = \"dataSource\" === name;\r\n var isScrolling = \"scrolling\" === name;\r\n var dataController = that.getController(\"data\");\r\n if (isPager || isPaging || isScrolling || isDataSource) {\r\n args.handled = true;\r\n if (dataController.skipProcessingPagingChange(args.fullName)) {\r\n return\r\n }\r\n if (isPager || isPaging) {\r\n that._pageSizes = null\r\n }\r\n if (isPager || isPaging || isScrolling) {\r\n that._isVisible = false\r\n }\r\n if (!isDataSource) {\r\n that._invalidate();\r\n if ((0, _window.hasWindow)() && isPager && that.component) {\r\n that.component.resize()\r\n }\r\n }\r\n }\r\n }\r\n});\r\nvar _default = {\r\n defaultOptions: function() {\r\n return {\r\n pager: {\r\n visible: \"auto\",\r\n showPageSizeSelector: false,\r\n allowedPageSizes: \"auto\"\r\n }\r\n }\r\n },\r\n views: {\r\n pagerView: PagerView\r\n }\r\n};\r\nexports.default = _default;\r\nmodule.exports = exports.default;\r\n","/**\r\n * DevExtreme (ui/grid_core/ui.grid_core.keyboard_navigation.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\n\r\nfunction _typeof(obj) {\r\n \"@babel/helpers - typeof\";\r\n if (\"function\" === typeof Symbol && \"symbol\" === typeof Symbol.iterator) {\r\n _typeof = function(obj) {\r\n return typeof obj\r\n }\r\n } else {\r\n _typeof = function(obj) {\r\n return obj && \"function\" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj\r\n }\r\n }\r\n return _typeof(obj)\r\n}\r\nexports.default = void 0;\r\nvar _renderer = _interopRequireDefault(require(\"../../core/renderer\"));\r\nvar _dom_adapter = _interopRequireDefault(require(\"../../core/dom_adapter\"));\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 _type = require(\"../../core/utils/type\");\r\nvar _array = require(\"../../core/utils/array\");\r\nvar _selectors = require(\"../widget/selectors\");\r\nvar _index = require(\"../../events/utils/index\");\r\nvar _pointer = _interopRequireDefault(require(\"../../events/pointer\"));\r\nvar _click = require(\"../../events/click\");\r\nvar _common = require(\"../../core/utils/common\");\r\nvar accessibility = _interopRequireWildcard(require(\"../shared/accessibility\"));\r\nvar _browser = _interopRequireDefault(require(\"../../core/utils/browser\"));\r\nvar _short = require(\"../../events/short\");\r\nvar _devices = _interopRequireDefault(require(\"../../core/devices\"));\r\n\r\nfunction _getRequireWildcardCache() {\r\n if (\"function\" !== typeof WeakMap) {\r\n return null\r\n }\r\n var cache = new WeakMap;\r\n _getRequireWildcardCache = function() {\r\n return cache\r\n };\r\n return cache\r\n}\r\n\r\nfunction _interopRequireWildcard(obj) {\r\n if (obj && obj.__esModule) {\r\n return obj\r\n }\r\n if (null === obj || \"object\" !== _typeof(obj) && \"function\" !== typeof obj) {\r\n return {\r\n \"default\": obj\r\n }\r\n }\r\n var cache = _getRequireWildcardCache();\r\n if (cache && cache.has(obj)) {\r\n return cache.get(obj)\r\n }\r\n var newObj = {};\r\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\r\n for (var key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\r\n if (desc && (desc.get || desc.set)) {\r\n Object.defineProperty(newObj, key, desc)\r\n } else {\r\n newObj[key] = obj[key]\r\n }\r\n }\r\n }\r\n newObj.default = obj;\r\n if (cache) {\r\n cache.set(obj, newObj)\r\n }\r\n return newObj\r\n}\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 EDIT_FORM_CLASS = \"edit-form\";\r\nvar GROUP_FOOTER_CLASS = \"group-footer\";\r\nvar ROW_CLASS = \"dx-row\";\r\nvar DATA_ROW_CLASS = \"dx-data-row\";\r\nvar GROUP_ROW_CLASS = \"dx-group-row\";\r\nvar HEADER_ROW_CLASS = \"dx-header-row\";\r\nvar EDIT_FORM_ITEM_CLASS = \"edit-form-item\";\r\nvar MASTER_DETAIL_ROW_CLASS = \"dx-master-detail-row\";\r\nvar FREESPACE_ROW_CLASS = \"dx-freespace-row\";\r\nvar VIRTUAL_ROW_CLASS = \"dx-virtual-row\";\r\nvar MASTER_DETAIL_CELL_CLASS = \"dx-master-detail-cell\";\r\nvar EDITOR_CELL_CLASS = \"dx-editor-cell\";\r\nvar DROPDOWN_EDITOR_OVERLAY_CLASS = \"dx-dropdowneditor-overlay\";\r\nvar COMMAND_EXPAND_CLASS = \"dx-command-expand\";\r\nvar COMMAND_SELECT_CLASS = \"dx-command-select\";\r\nvar COMMAND_EDIT_CLASS = \"dx-command-edit\";\r\nvar COMMAND_CELL_SELECTOR = \"[class^=dx-command]\";\r\nvar CELL_FOCUS_DISABLED_CLASS = \"dx-cell-focus-disabled\";\r\nvar DATEBOX_WIDGET_NAME = \"dxDateBox\";\r\nvar FOCUS_STATE_CLASS = \"dx-state-focused\";\r\nvar WIDGET_CLASS = \"dx-widget\";\r\nvar REVERT_BUTTON_CLASS = \"dx-revert-button\";\r\nvar FAST_EDITING_DELETE_KEY = \"delete\";\r\nvar INTERACTIVE_ELEMENTS_SELECTOR = \"input:not([type='hidden']), textarea, a, select, button, [tabindex]\";\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 FOCUS_TYPE_ROW = \"row\";\r\nvar FOCUS_TYPE_CELL = \"cell\";\r\nvar COLUMN_HEADERS_VIEW = \"columnHeadersView\";\r\n\r\nfunction isGroupRow($row) {\r\n return $row && $row.hasClass(GROUP_ROW_CLASS)\r\n}\r\n\r\nfunction isDetailRow($row) {\r\n return $row && $row.hasClass(MASTER_DETAIL_ROW_CLASS)\r\n}\r\n\r\nfunction isDataRow($row) {\r\n return $row && !isGroupRow($row) && !isDetailRow($row)\r\n}\r\n\r\nfunction isNotFocusedRow($row) {\r\n return !$row || $row.hasClass(FREESPACE_ROW_CLASS) || $row.hasClass(VIRTUAL_ROW_CLASS)\r\n}\r\n\r\nfunction isCellElement($element) {\r\n return $element.length && \"TD\" === $element[0].tagName\r\n}\r\n\r\nfunction isEditorCell(that, $cell) {\r\n return !that._isRowEditMode() && $cell && !$cell.hasClass(COMMAND_SELECT_CLASS) && $cell.hasClass(EDITOR_CELL_CLASS)\r\n}\r\n\r\nfunction isElementDefined($element) {\r\n return (0, _type.isDefined)($element) && $element.length > 0\r\n}\r\n\r\nfunction isMobile() {\r\n return \"desktop\" !== _devices.default.current().deviceType\r\n}\r\n\r\nfunction isCellInHeaderRow($cell) {\r\n return !!$cell.parent(\".\".concat(HEADER_ROW_CLASS)).length\r\n}\r\n\r\nfunction isFixedColumnIndexOffsetRequired(that, column) {\r\n var rtlEnabled = that.option(\"rtlEnabled\");\r\n var result = false;\r\n if (rtlEnabled) {\r\n result = !(\"right\" === column.fixedPosition || (0, _type.isDefined)(column.command) && !(0, _type.isDefined)(column.fixedPosition))\r\n } else {\r\n result = !(!(0, _type.isDefined)(column.fixedPosition) || \"left\" === column.fixedPosition)\r\n }\r\n return result\r\n}\r\n\r\nfunction shouldPreventScroll(that) {\r\n var keyboardController = that.getController(\"keyboardNavigation\");\r\n return keyboardController._isVirtualScrolling() ? that.option(\"focusedRowIndex\") === keyboardController.getRowIndex() : false\r\n}\r\nvar KeyboardNavigationController = _uiGrid_core.default.ViewController.inherit({\r\n init: function() {\r\n var _this = this;\r\n this._dataController = this.getController(\"data\");\r\n this._selectionController = this.getController(\"selection\");\r\n this._editingController = this.getController(\"editing\");\r\n this._headerPanel = this.getView(\"headerPanel\");\r\n this._columnsController = this.getController(\"columns\");\r\n this._editorFactory = this.getController(\"editorFactory\");\r\n if (this.isKeyboardEnabled()) {\r\n accessibility.subscribeVisibilityChange();\r\n this._updateFocusTimeout = null;\r\n this._fastEditingStarted = false;\r\n this._focusedCellPosition = {};\r\n this._canceledCellPosition = null;\r\n var elementFocused = function($element) {\r\n _this.setupFocusedView();\r\n if (_this._isNeedScroll) {\r\n if ($element.is(\":visible\") && _this._focusedView && _this._focusedView.getScrollable) {\r\n _this._focusedView._scrollToElement($element);\r\n _this._isNeedScroll = false\r\n }\r\n }\r\n };\r\n this._editorFactory.focused.add(elementFocused);\r\n this._initViewHandlers();\r\n this._initDocumentHandlers();\r\n this.createAction(\"onKeyDown\")\r\n }\r\n },\r\n _initViewHandlers: function() {\r\n var _this2 = this;\r\n var rowsView = this.getView(\"rowsView\");\r\n var rowsViewFocusHandler = function(event) {\r\n var $element = (0, _renderer.default)(event.target);\r\n var isRelatedTargetInRowsView = (0, _renderer.default)(event.relatedTarget).closest(rowsView.element()).length;\r\n var isCommandButton = $element.hasClass(\"dx-link\");\r\n if (isCommandButton && !isRelatedTargetInRowsView && _this2._isEventInCurrentGrid(event)) {\r\n var $focusedCell = _this2._getFocusedCell();\r\n $focusedCell = !isElementDefined($focusedCell) ? rowsView.getCellElements(0).filter(\"[tabindex]\").eq(0) : $focusedCell;\r\n if (!$element.closest($focusedCell).length) {\r\n event.preventDefault();\r\n _events_engine.default.trigger($focusedCell, \"focus\")\r\n }\r\n }\r\n };\r\n rowsView.renderCompleted.add(function(e) {\r\n var $rowsView = rowsView.element();\r\n var isFullUpdate = !e || \"refresh\" === e.changeType;\r\n var isFocusedViewCorrect = _this2._focusedView && _this2._focusedView.name === rowsView.name;\r\n var needUpdateFocus = false;\r\n var isAppend = e && (\"append\" === e.changeType || \"prepend\" === e.changeType);\r\n var $focusedElement = (0, _renderer.default)(\":focus\");\r\n var isFocusedElementCorrect = !$focusedElement.length || $focusedElement.closest($rowsView).length || _browser.default.msie && $focusedElement.is(\"body\");\r\n _events_engine.default.off($rowsView, \"focusin\", rowsViewFocusHandler);\r\n _events_engine.default.on($rowsView, \"focusin\", rowsViewFocusHandler);\r\n _this2._initPointerEventHandler();\r\n _this2._initKeyDownHandler();\r\n _this2._setRowsViewAttributes();\r\n if (isFocusedViewCorrect && isFocusedElementCorrect) {\r\n needUpdateFocus = _this2._isNeedFocus ? !isAppend : _this2._isHiddenFocus && isFullUpdate;\r\n needUpdateFocus && _this2._updateFocus(true)\r\n }\r\n })\r\n },\r\n _initDocumentHandlers: function() {\r\n var _this3 = this;\r\n var document = _dom_adapter.default.getDocument();\r\n this._documentClickHandler = this.createAction(function(e) {\r\n var $target = (0, _renderer.default)(e.event.target);\r\n var isCurrentRowsViewClick = _this3._isEventInCurrentGrid(e.event) && $target.closest(\".\".concat(_this3.addWidgetPrefix(ROWS_VIEW_CLASS))).length;\r\n var isEditorOverlay = $target.closest(\".\".concat(DROPDOWN_EDITOR_OVERLAY_CLASS)).length;\r\n var columnsResizerController = _this3.getController(\"columnsResizer\");\r\n var isColumnResizing = !!columnsResizerController && columnsResizerController.isResizing();\r\n if (!isCurrentRowsViewClick && !isEditorOverlay && !isColumnResizing) {\r\n var targetInsideFocusedView = _this3._focusedView ? $target.parents().filter(_this3._focusedView.element()).length > 0 : false;\r\n !targetInsideFocusedView && _this3._resetFocusedCell(true);\r\n _this3._resetFocusedView()\r\n }\r\n });\r\n _events_engine.default.on(document, (0, _index.addNamespace)(_pointer.default.down, \"dxDataGridKeyboardNavigation\"), this._documentClickHandler)\r\n },\r\n _setRowsViewAttributes: function() {\r\n var $rowsView = this._getRowsViewElement();\r\n var isGridEmpty = !this._dataController.getVisibleRows().length;\r\n if (isGridEmpty) {\r\n this._applyTabIndexToElement($rowsView)\r\n }\r\n },\r\n _initPointerEventHandler: function() {\r\n var pointerEventName = !isMobile() ? _pointer.default.down : _click.name;\r\n var clickSelector = \".\".concat(ROW_CLASS, \" > td, .\").concat(ROW_CLASS);\r\n var $rowsView = this._getRowsViewElement();\r\n if (!(0, _type.isDefined)(this._pointerEventAction)) {\r\n this._pointerEventAction = this.createAction(this._pointerEventHandler)\r\n }\r\n _events_engine.default.off($rowsView, (0, _index.addNamespace)(pointerEventName, \"dxDataGridKeyboardNavigation\"), this._pointerEventAction);\r\n _events_engine.default.on($rowsView, (0, _index.addNamespace)(pointerEventName, \"dxDataGridKeyboardNavigation\"), clickSelector, this._pointerEventAction)\r\n },\r\n _initKeyDownHandler: function() {\r\n var _this4 = this;\r\n var $rowsView = this._getRowsViewElement();\r\n _short.keyboard.off(this._keyDownListener);\r\n this._keyDownListener = _short.keyboard.on($rowsView, null, function(e) {\r\n return _this4._keyDownHandler(e)\r\n })\r\n },\r\n dispose: function() {\r\n this.callBase();\r\n this._resetFocusedView();\r\n _short.keyboard.off(this._keyDownListener);\r\n _events_engine.default.off(_dom_adapter.default.getDocument(), (0, _index.addNamespace)(_pointer.default.down, \"dxDataGridKeyboardNavigation\"), this._documentClickHandler);\r\n clearTimeout(this._updateFocusTimeout);\r\n accessibility.unsubscribeVisibilityChange()\r\n },\r\n optionChanged: function(args) {\r\n var that = this;\r\n switch (args.name) {\r\n case \"keyboardNavigation\":\r\n case \"useLegacyKeyboardNavigation\":\r\n args.handled = true;\r\n break;\r\n default:\r\n that.callBase(args)\r\n }\r\n },\r\n isRowFocusType: function() {\r\n return this.focusType === FOCUS_TYPE_ROW\r\n },\r\n isCellFocusType: function() {\r\n return this.focusType === FOCUS_TYPE_CELL\r\n },\r\n setRowFocusType: function() {\r\n if (this.option(\"focusedRowEnabled\")) {\r\n this.focusType = FOCUS_TYPE_ROW\r\n }\r\n },\r\n setCellFocusType: function() {\r\n this.focusType = FOCUS_TYPE_CELL\r\n },\r\n _keyDownHandler: function(e) {\r\n var isEditing = this._editingController.isEditing();\r\n var needStopPropagation = true;\r\n var originalEvent = e.originalEvent;\r\n var isHandled = this._processOnKeyDown(e);\r\n if (originalEvent.isDefaultPrevented()) {\r\n return\r\n }\r\n this._isNeedFocus = true;\r\n this._isNeedScroll = true;\r\n this._updateFocusedCellPositionByTarget(originalEvent.target);\r\n if (!isHandled) {\r\n switch (e.keyName) {\r\n case \"leftArrow\":\r\n case \"rightArrow\":\r\n this._leftRightKeysHandler(e, isEditing);\r\n break;\r\n case \"upArrow\":\r\n case \"downArrow\":\r\n if (e.ctrl) {\r\n accessibility.selectView(\"rowsView\", this, originalEvent)\r\n } else {\r\n this._upDownKeysHandler(e, isEditing)\r\n }\r\n break;\r\n case \"pageUp\":\r\n case \"pageDown\":\r\n this._pageUpDownKeyHandler(e);\r\n break;\r\n case \"space\":\r\n this._spaceKeyHandler(e, isEditing);\r\n break;\r\n case \"A\":\r\n if (e.ctrl) {\r\n this._ctrlAKeyHandler(e, isEditing)\r\n } else {\r\n this._beginFastEditing(e.originalEvent)\r\n }\r\n break;\r\n case \"tab\":\r\n this._tabKeyHandler(e, isEditing);\r\n break;\r\n case \"enter\":\r\n this._enterKeyHandler(e, isEditing);\r\n break;\r\n case \"escape\":\r\n this._escapeKeyHandler(e, isEditing);\r\n break;\r\n case \"F\":\r\n if (e.ctrl) {\r\n this._ctrlFKeyHandler(e)\r\n } else {\r\n this._beginFastEditing(e.originalEvent)\r\n }\r\n break;\r\n case \"F2\":\r\n this._f2KeyHandler();\r\n break;\r\n case \"del\":\r\n case \"backspace\":\r\n if (this._isFastEditingAllowed() && !this._isFastEditingStarted()) {\r\n this._beginFastEditing(originalEvent, true)\r\n }\r\n break;\r\n default:\r\n if (!this._beginFastEditing(originalEvent)) {\r\n this._isNeedFocus = false;\r\n this._isNeedScroll = false;\r\n needStopPropagation = false\r\n }\r\n }\r\n if (needStopPropagation) {\r\n originalEvent.stopPropagation()\r\n }\r\n }\r\n },\r\n _processOnKeyDown: function(eventArgs) {\r\n var originalEvent = eventArgs.originalEvent;\r\n var args = {\r\n handled: false,\r\n event: originalEvent\r\n };\r\n this.executeAction(\"onKeyDown\", args);\r\n eventArgs.ctrl = originalEvent.ctrlKey;\r\n eventArgs.alt = originalEvent.altKey;\r\n eventArgs.shift = originalEvent.shiftKey;\r\n return !!args.handled\r\n },\r\n _closeEditCell: function() {\r\n var _this5 = this;\r\n setTimeout(function() {\r\n _this5._editingController.closeEditCell()\r\n })\r\n },\r\n _leftRightKeysHandler: function(eventArgs, isEditing) {\r\n var rowIndex = this.getVisibleRowIndex();\r\n var $event = eventArgs.originalEvent;\r\n var $row = this._focusedView && this._focusedView.getRow(rowIndex);\r\n var directionCode = this._getDirectionCodeByKey(eventArgs.keyName);\r\n var isEditingNavigationMode = this._isFastEditingStarted();\r\n var allowNavigate = (!isEditing || isEditingNavigationMode) && isDataRow($row);\r\n if (allowNavigate) {\r\n this.setCellFocusType();\r\n isEditingNavigationMode && this._closeEditCell();\r\n if (this._isVirtualColumnRender()) {\r\n this._processVirtualHorizontalPosition(directionCode)\r\n }\r\n var $cell = this._getNextCell(directionCode);\r\n if (isElementDefined($cell)) {\r\n this._arrowKeysHandlerFocusCell($event, $cell, directionCode)\r\n }\r\n $event && $event.preventDefault()\r\n }\r\n },\r\n _upDownKeysHandler: function(eventArgs, isEditing) {\r\n var rowIndex = this._focusedCellPosition.rowIndex;\r\n var visibleRowIndex = this.getVisibleRowIndex();\r\n var $row = this._focusedView && this._focusedView.getRow(visibleRowIndex);\r\n var $event = eventArgs.originalEvent;\r\n var isUpArrow = \"upArrow\" === eventArgs.keyName;\r\n var dataSource = this._dataController.dataSource();\r\n var isEditingNavigationMode = this._isFastEditingStarted();\r\n var allowNavigate = (!isEditing || isEditingNavigationMode) && $row && !isDetailRow($row);\r\n if (allowNavigate) {\r\n isEditingNavigationMode && this._closeEditCell();\r\n if (!this._navigateNextCell($event, eventArgs.keyName)) {\r\n if (this._isVirtualRowRender() && isUpArrow && dataSource && !dataSource.isLoading()) {\r\n var rowHeight = $row.outerHeight();\r\n rowIndex = this._focusedCellPosition.rowIndex - 1;\r\n this._scrollBy(0, -rowHeight, rowIndex, $event)\r\n }\r\n }\r\n $event && $event.preventDefault()\r\n }\r\n },\r\n _pageUpDownKeyHandler: function(eventArgs) {\r\n var pageIndex = this._dataController.pageIndex();\r\n var pageCount = this._dataController.pageCount();\r\n var pagingEnabled = this.option(\"paging.enabled\");\r\n var isPageUp = \"pageUp\" === eventArgs.keyName;\r\n var pageStep = isPageUp ? -1 : 1;\r\n var scrollable = this.getView(\"rowsView\").getScrollable();\r\n if (pagingEnabled && !this._isVirtualScrolling()) {\r\n if ((isPageUp ? pageIndex > 0 : pageIndex < pageCount - 1) && !this._isVirtualScrolling()) {\r\n this._dataController.pageIndex(pageIndex + pageStep);\r\n eventArgs.originalEvent.preventDefault()\r\n }\r\n } else {\r\n if (scrollable && scrollable._container().height() < scrollable.$content().height()) {\r\n this._scrollBy(0, scrollable._container().height() * pageStep);\r\n eventArgs.originalEvent.preventDefault()\r\n }\r\n }\r\n },\r\n _spaceKeyHandler: function(eventArgs, isEditing) {\r\n var rowIndex = this.getVisibleRowIndex();\r\n var $target = (0, _renderer.default)(eventArgs.originalEvent && eventArgs.originalEvent.target);\r\n if (this.option(\"selection\") && \"none\" !== this.option(\"selection\").mode && !isEditing) {\r\n var isFocusedRowElement = \"row\" === this._getElementType($target) && this.isRowFocusType() && isDataRow($target);\r\n var isFocusedSelectionCell = $target.hasClass(COMMAND_SELECT_CLASS);\r\n if (isFocusedSelectionCell && \"onClick\" === this.option(\"selection.showCheckBoxesMode\")) {\r\n this._selectionController.startSelectionWithCheckboxes()\r\n }\r\n if (isFocusedRowElement || $target.parent().hasClass(DATA_ROW_CLASS) || $target.hasClass(this.addWidgetPrefix(ROWS_VIEW_CLASS))) {\r\n this._selectionController.changeItemSelection(rowIndex, {\r\n shift: eventArgs.shift,\r\n control: eventArgs.ctrl\r\n });\r\n eventArgs.originalEvent.preventDefault()\r\n }\r\n } else {\r\n this._beginFastEditing(eventArgs.originalEvent)\r\n }\r\n },\r\n _ctrlAKeyHandler: function(eventArgs, isEditing) {\r\n if (!isEditing && eventArgs.ctrl && !eventArgs.alt && \"multiple\" === this.option(\"selection.mode\") && this.option(\"selection.allowSelectAll\")) {\r\n this._selectionController.selectAll();\r\n eventArgs.originalEvent.preventDefault()\r\n }\r\n },\r\n _tabKeyHandler: function(eventArgs, isEditing) {\r\n var editingOptions = this.option(\"editing\");\r\n var direction = eventArgs.shift ? \"previous\" : \"next\";\r\n var isCellPositionDefined = (0, _type.isDefined)(this._focusedCellPosition) && !(0, _type.isEmptyObject)(this._focusedCellPosition);\r\n var isOriginalHandlerRequired = !isCellPositionDefined || !eventArgs.shift && this._isLastValidCell(this._focusedCellPosition) || eventArgs.shift && this._isFirstValidCell(this._focusedCellPosition);\r\n var eventTarget = eventArgs.originalEvent.target;\r\n var focusedViewElement = this._focusedView && this._focusedView.element();\r\n if (this._handleTabKeyOnMasterDetailCell(eventTarget, direction)) {\r\n return\r\n }(0, _renderer.default)(focusedViewElement).addClass(FOCUS_STATE_CLASS);\r\n if (editingOptions && eventTarget && !isOriginalHandlerRequired) {\r\n if ((0, _renderer.default)(eventTarget).hasClass(this.addWidgetPrefix(ROWS_VIEW_CLASS))) {\r\n this._resetFocusedCell()\r\n }\r\n if (this._isVirtualColumnRender()) {\r\n this._processVirtualHorizontalPosition(direction)\r\n }\r\n if (isEditing) {\r\n if (!this._editingCellTabHandler(eventArgs, direction)) {\r\n return\r\n }\r\n } else {\r\n if (this._targetCellTabHandler(eventArgs, direction)) {\r\n isOriginalHandlerRequired = true\r\n }\r\n }\r\n }\r\n if (isOriginalHandlerRequired) {\r\n this._editorFactory.loseFocus();\r\n if (this._editingController.isEditing() && !this._isRowEditMode()) {\r\n this._resetFocusedCell(true);\r\n this._resetFocusedView();\r\n this._closeEditCell()\r\n }\r\n } else {\r\n eventArgs.originalEvent.preventDefault()\r\n }\r\n },\r\n _getMaxHorizontalOffset: function() {\r\n var scrollable = this.component.getScrollable();\r\n var rowsView = this.getView(\"rowsView\");\r\n var offset = scrollable ? scrollable.scrollWidth() - (0, _renderer.default)(rowsView.element()).width() : 0;\r\n return offset\r\n },\r\n _isColumnRendered: function(columnIndex) {\r\n var allVisibleColumns = this._columnsController.getVisibleColumns(null, true);\r\n var renderedVisibleColumns = this._columnsController.getVisibleColumns();\r\n var column = allVisibleColumns[columnIndex];\r\n var result = false;\r\n if (column) {\r\n result = renderedVisibleColumns.indexOf(column) >= 0\r\n }\r\n return result\r\n },\r\n _isFixedColumn: function(columnIndex) {\r\n var allVisibleColumns = this._columnsController.getVisibleColumns(null, true);\r\n var column = allVisibleColumns[columnIndex];\r\n return !!column && !!column.fixed\r\n },\r\n _isColumnVirtual: function(columnIndex) {\r\n var localColumnIndex = columnIndex - this._columnsController.getColumnIndexOffset();\r\n var visibleColumns = this._columnsController.getVisibleColumns();\r\n var column = visibleColumns[localColumnIndex];\r\n return !!column && \"virtual\" === column.command\r\n },\r\n _processVirtualHorizontalPosition: function(direction) {\r\n var scrollable = this.component.getScrollable();\r\n var columnIndex = this.getColumnIndex();\r\n var nextColumnIndex;\r\n var horizontalScrollPosition = 0;\r\n var needToScroll = false;\r\n switch (direction) {\r\n case \"next\":\r\n case \"nextInRow\":\r\n var columnsCount = this._getVisibleColumnCount();\r\n nextColumnIndex = columnIndex + 1;\r\n horizontalScrollPosition = this.option(\"rtlEnabled\") ? this._getMaxHorizontalOffset() : 0;\r\n if (\"next\" === direction) {\r\n needToScroll = columnsCount === nextColumnIndex || this._isFixedColumn(columnIndex) && !this._isColumnRendered(nextColumnIndex)\r\n } else {\r\n needToScroll = columnsCount > nextColumnIndex && this._isFixedColumn(columnIndex) && !this._isColumnRendered(nextColumnIndex)\r\n }\r\n break;\r\n case \"previous\":\r\n case \"previousInRow\":\r\n nextColumnIndex = columnIndex - 1;\r\n horizontalScrollPosition = this.option(\"rtlEnabled\") ? 0 : this._getMaxHorizontalOffset();\r\n if (\"previous\" === direction) {\r\n var columnIndexOffset = this._columnsController.getColumnIndexOffset();\r\n var leftEdgePosition = nextColumnIndex < 0 && 0 === columnIndexOffset;\r\n needToScroll = leftEdgePosition || this._isFixedColumn(columnIndex) && !this._isColumnRendered(nextColumnIndex)\r\n } else {\r\n needToScroll = nextColumnIndex >= 0 && this._isFixedColumn(columnIndex) && !this._isColumnRendered(nextColumnIndex)\r\n }\r\n }\r\n if (needToScroll) {\r\n scrollable.scrollTo({\r\n left: horizontalScrollPosition\r\n })\r\n } else {\r\n if ((0, _type.isDefined)(nextColumnIndex) && (0, _type.isDefined)(direction) && this._isColumnVirtual(nextColumnIndex)) {\r\n horizontalScrollPosition = this._getHorizontalScrollPositionOffset(direction);\r\n 0 !== horizontalScrollPosition && scrollable.scrollBy({\r\n left: horizontalScrollPosition,\r\n top: 0\r\n })\r\n }\r\n }\r\n },\r\n _getHorizontalScrollPositionOffset: function(direction) {\r\n var positionOffset = 0;\r\n var $currentCell = this._getCell(this._focusedCellPosition);\r\n var currentCellWidth = $currentCell && $currentCell.outerWidth();\r\n if (currentCellWidth > 0) {\r\n var rtlMultiplier = this.option(\"rtlEnabled\") ? -1 : 1;\r\n positionOffset = \"nextInRow\" === direction || \"next\" === direction ? currentCellWidth * rtlMultiplier : currentCellWidth * rtlMultiplier * -1\r\n }\r\n return positionOffset\r\n },\r\n _editingCellTabHandler: function(eventArgs, direction) {\r\n var eventTarget = eventArgs.originalEvent.target;\r\n var $cell = this._getCellElementFromTarget(eventTarget);\r\n var isEditingAllowed;\r\n var $event = eventArgs.originalEvent;\r\n var elementType = this._getElementType(eventTarget);\r\n if ($cell.is(COMMAND_CELL_SELECTOR)) {\r\n return !this._targetCellTabHandler(eventArgs, direction)\r\n }\r\n this._updateFocusedCellPosition($cell);\r\n var nextCellInfo = this._getNextCellByTabKey($event, direction, elementType);\r\n $cell = nextCellInfo.$cell;\r\n if (!$cell || this._handleTabKeyOnMasterDetailCell($cell, direction)) {\r\n return false\r\n }\r\n var columnsController = this._columnsController;\r\n var cellIndex = this.getView(\"rowsView\").getCellIndex($cell);\r\n var columnIndex = cellIndex + columnsController.getColumnIndexOffset();\r\n var column = columnsController.getVisibleColumns(null, true)[columnIndex];\r\n var $row = $cell && $cell.parent();\r\n var rowIndex = this._getRowIndex($row);\r\n var row = this._dataController.items()[rowIndex];\r\n var editingController = this._editingController;\r\n if (column && column.allowEditing) {\r\n var _isDataRow = !row || \"data\" === row.rowType;\r\n isEditingAllowed = editingController.allowUpdating({\r\n row: row\r\n }) ? _isDataRow : row && row.isNewRow\r\n }\r\n if (!isEditingAllowed) {\r\n this._closeEditCell()\r\n }\r\n if (this._focusCell($cell, !nextCellInfo.isHighlighted)) {\r\n if (!this._isRowEditMode() && isEditingAllowed) {\r\n this._editFocusedCell()\r\n } else {\r\n this._focusInteractiveElement($cell, eventArgs.shift)\r\n }\r\n }\r\n return true\r\n },\r\n _targetCellTabHandler: function(eventArgs, direction) {\r\n var $event = eventArgs.originalEvent;\r\n var eventTarget = $event.target;\r\n var $cell = this._getCellElementFromTarget(eventTarget);\r\n var $lastInteractiveElement = this._getInteractiveElement($cell, !eventArgs.shift);\r\n var isOriginalHandlerRequired = false;\r\n var elementType;\r\n if (!isEditorCell(this, $cell) && $lastInteractiveElement.length && eventTarget !== $lastInteractiveElement.get(0)) {\r\n isOriginalHandlerRequired = true\r\n } else {\r\n if (void 0 === this._focusedCellPosition.rowIndex && (0, _renderer.default)(eventTarget).hasClass(ROW_CLASS)) {\r\n this._updateFocusedCellPosition($cell)\r\n }\r\n elementType = this._getElementType(eventTarget);\r\n if (this.isRowFocusType()) {\r\n this.setCellFocusType();\r\n if (\"row\" === elementType && isDataRow((0, _renderer.default)(eventTarget))) {\r\n eventTarget = this.getFirstValidCellInRow((0, _renderer.default)(eventTarget));\r\n elementType = this._getElementType(eventTarget)\r\n }\r\n }\r\n var nextCellInfo = this._getNextCellByTabKey($event, direction, elementType);\r\n $cell = nextCellInfo.$cell;\r\n if (!$cell) {\r\n return false\r\n }\r\n $cell = this._checkNewLineTransition($event, $cell);\r\n if (!$cell) {\r\n return false\r\n }\r\n this._focusCell($cell, !nextCellInfo.isHighlighted);\r\n if (!isEditorCell(this, $cell)) {\r\n this._focusInteractiveElement($cell, eventArgs.shift)\r\n }\r\n }\r\n return isOriginalHandlerRequired\r\n },\r\n _getNextCellByTabKey: function($event, direction, elementType) {\r\n var $cell = this._getNextCell(direction, elementType);\r\n var args = $cell && this._fireFocusedCellChanging($event, $cell, true);\r\n if (!args || args.cancel) {\r\n return {}\r\n }\r\n if (args.$newCellElement) {\r\n $cell = args.$newCellElement\r\n }\r\n return {\r\n $cell: $cell,\r\n isHighlighted: args.isHighlighted\r\n }\r\n },\r\n _checkNewLineTransition: function($event, $cell) {\r\n var rowIndex = this.getVisibleRowIndex();\r\n var $row = $cell.parent();\r\n if (rowIndex !== this._getRowIndex($row)) {\r\n var cellPosition = this._getCellPosition($cell);\r\n var args = this._fireFocusedRowChanging($event, $row);\r\n if (args.cancel) {\r\n return\r\n }\r\n if (args.rowIndexChanged) {\r\n this.setFocusedColumnIndex(cellPosition.columnIndex);\r\n $cell = this._getFocusedCell()\r\n }\r\n }\r\n return $cell\r\n },\r\n _enterKeyHandler: function(eventArgs, isEditing) {\r\n var $cell = this._getFocusedCell();\r\n var rowIndex = this.getVisibleRowIndex();\r\n var $row = this._focusedView && this._focusedView.getRow(rowIndex);\r\n if (this.option(\"grouping.allowCollapsing\") && isGroupRow($row) || this.option(\"masterDetail.enabled\") && $cell && $cell.hasClass(COMMAND_EXPAND_CLASS)) {\r\n var key = this._dataController.getKeyByRowIndex(rowIndex);\r\n var item = this._dataController.items()[rowIndex];\r\n if (void 0 !== key && item && item.data && !item.data.isContinuation) {\r\n this._dataController.changeRowExpand(key)\r\n }\r\n } else {\r\n this._processEnterKeyForDataCell(eventArgs, isEditing)\r\n }\r\n },\r\n _processEnterKeyForDataCell: function(eventArgs, isEditing) {\r\n var direction = this._getEnterKeyDirection(eventArgs);\r\n var allowEditingOnEnterKey = this._allowEditingOnEnterKey();\r\n if (isEditing || !allowEditingOnEnterKey && direction) {\r\n this._handleEnterKeyEditingCell(eventArgs.originalEvent);\r\n if (\"next\" === direction || \"previous\" === direction) {\r\n this._targetCellTabHandler(eventArgs, direction)\r\n } else {\r\n if (\"upArrow\" === direction || \"downArrow\" === direction) {\r\n this._navigateNextCell(eventArgs.originalEvent, direction)\r\n }\r\n }\r\n } else {\r\n if (allowEditingOnEnterKey) {\r\n this._startEditing(eventArgs)\r\n }\r\n }\r\n },\r\n _getEnterKeyDirection: function(eventArgs) {\r\n var enterKeyDirection = this.option(\"keyboardNavigation.enterKeyDirection\");\r\n var isShift = eventArgs.shift;\r\n if (\"column\" === enterKeyDirection) {\r\n return isShift ? \"upArrow\" : \"downArrow\"\r\n }\r\n if (\"row\" === enterKeyDirection) {\r\n return isShift ? \"previous\" : \"next\"\r\n }\r\n },\r\n _handleEnterKeyEditingCell: function(event) {\r\n var target = event.target;\r\n var $cell = this._getCellElementFromTarget(target);\r\n var isRowEditMode = this._isRowEditMode();\r\n this._updateFocusedCellPosition($cell);\r\n if (isRowEditMode) {\r\n this._focusEditFormCell($cell);\r\n setTimeout(this._editingController.saveEditData.bind(this._editingController))\r\n } else {\r\n _events_engine.default.trigger((0, _renderer.default)(target), \"change\");\r\n this._closeEditCell();\r\n event.preventDefault()\r\n }\r\n },\r\n _escapeKeyHandler: function(eventArgs, isEditing) {\r\n var $cell = this._getCellElementFromTarget(eventArgs.originalEvent.target);\r\n if (isEditing) {\r\n this._updateFocusedCellPosition($cell);\r\n if (!this._isRowEditMode()) {\r\n if (\"cell\" === this._editingController.getEditMode()) {\r\n this._editingController.cancelEditData()\r\n } else {\r\n this._closeEditCell()\r\n }\r\n } else {\r\n this._focusEditFormCell($cell);\r\n this._editingController.cancelEditData();\r\n if (0 === this._dataController.items().length) {\r\n this._resetFocusedCell();\r\n this._editorFactory.loseFocus()\r\n }\r\n }\r\n eventArgs.originalEvent.preventDefault()\r\n }\r\n },\r\n _ctrlFKeyHandler: function(eventArgs) {\r\n if (this.option(\"searchPanel.visible\")) {\r\n var searchTextEditor = this._headerPanel.getSearchTextEditor();\r\n if (searchTextEditor) {\r\n searchTextEditor.focus();\r\n eventArgs.originalEvent.preventDefault()\r\n }\r\n }\r\n },\r\n _f2KeyHandler: function() {\r\n var isEditing = this._editingController.isEditing();\r\n var rowIndex = this.getVisibleRowIndex();\r\n var $row = this._focusedView && this._focusedView.getRow(rowIndex);\r\n if (!isEditing && isDataRow($row)) {\r\n this._startEditing()\r\n }\r\n },\r\n _navigateNextCell: function($event, keyCode) {\r\n var $cell = this._getNextCell(keyCode);\r\n var directionCode = this._getDirectionCodeByKey(keyCode);\r\n var isCellValid = $cell && this._isCellValid($cell);\r\n var result = isCellValid ? this._arrowKeysHandlerFocusCell($event, $cell, directionCode) : false;\r\n return result\r\n },\r\n _arrowKeysHandlerFocusCell: function($event, $nextCell, direction) {\r\n var isVerticalDirection = \"prevRow\" === direction || \"nextRow\" === direction;\r\n var args = this._fireFocusChangingEvents($event, $nextCell, isVerticalDirection, true);\r\n $nextCell = args.$newCellElement;\r\n if (!args.cancel && this._isCellValid($nextCell)) {\r\n this._focus($nextCell, !args.isHighlighted);\r\n return true\r\n }\r\n return false\r\n },\r\n _beginFastEditing: function(originalEvent, isDeleting) {\r\n if (!this._isFastEditingAllowed() || originalEvent.altKey || originalEvent.ctrlKey || this._editingController.isEditing()) {\r\n return false\r\n }\r\n if (isDeleting) {\r\n this._startEditing(originalEvent, FAST_EDITING_DELETE_KEY)\r\n } else {\r\n var key = originalEvent.key;\r\n var keyCode = originalEvent.keyCode || originalEvent.which;\r\n var fastEditingKey = key || keyCode && String.fromCharCode(keyCode);\r\n if (fastEditingKey && (1 === fastEditingKey.length || fastEditingKey === FAST_EDITING_DELETE_KEY)) {\r\n this._startEditing(originalEvent, fastEditingKey)\r\n }\r\n }\r\n return true\r\n },\r\n _pointerEventHandler: function(e) {\r\n var event = e.event || e;\r\n var $target = (0, _renderer.default)(event.currentTarget);\r\n var rowsView = this.getView(\"rowsView\");\r\n var focusedViewElement = rowsView && rowsView.element();\r\n var $parent = $target.parent();\r\n var isInteractiveElement = (0, _renderer.default)(event.target).is(INTERACTIVE_ELEMENTS_SELECTOR);\r\n var isRevertButton = !!(0, _renderer.default)(event.target).closest(\".\".concat(REVERT_BUTTON_CLASS)).length;\r\n var isExpandCommandCell = $target.hasClass(COMMAND_EXPAND_CLASS);\r\n if (!this._isEventInCurrentGrid(event)) {\r\n return\r\n }\r\n if (!isRevertButton && (this._isCellValid($target, !isInteractiveElement) || isExpandCommandCell)) {\r\n $target = this._isInsideEditForm($target) ? (0, _renderer.default)(event.target) : $target;\r\n this._focusView();\r\n (0, _renderer.default)(focusedViewElement).removeClass(FOCUS_STATE_CLASS);\r\n if ($parent.hasClass(FREESPACE_ROW_CLASS)) {\r\n this._updateFocusedCellPosition($target);\r\n this._applyTabIndexToElement(this._focusedView.element());\r\n this._focusedView.focus()\r\n } else {\r\n if (!this._isMasterDetailCell($target)) {\r\n this._clickTargetCellHandler(event, $target)\r\n } else {\r\n this._updateFocusedCellPosition($target)\r\n }\r\n }\r\n } else {\r\n if ($target.is(\"td\")) {\r\n this._resetFocusedCell()\r\n }\r\n }\r\n },\r\n _clickTargetCellHandler: function(event, $cell) {\r\n var columnIndex = this.getView(\"rowsView\").getCellIndex($cell);\r\n var column = this._columnsController.getVisibleColumns()[columnIndex];\r\n var isCellEditMode = this._isCellEditMode();\r\n this.setCellFocusType();\r\n var args = this._fireFocusChangingEvents(event, $cell, true);\r\n $cell = args.$newCellElement;\r\n if (!args.cancel) {\r\n if (args.resetFocusedRow) {\r\n this.getController(\"focus\")._resetFocusedRow();\r\n return\r\n }\r\n if (args.rowIndexChanged) {\r\n $cell = this._getFocusedCell()\r\n }\r\n if (!args.isHighlighted && !isCellEditMode) {\r\n this.setRowFocusType()\r\n }\r\n this._updateFocusedCellPosition($cell);\r\n if (this._allowRowUpdating() && isCellEditMode && column && column.allowEditing) {\r\n this._isNeedFocus = false;\r\n this._isHiddenFocus = false\r\n } else {\r\n var $target = event && (0, _renderer.default)(event.target).closest(INTERACTIVE_ELEMENTS_SELECTOR + \", td\");\r\n var isInteractiveTarget = $target && $target.not($cell).is(INTERACTIVE_ELEMENTS_SELECTOR);\r\n var isEditor = !!column && !column.command && $cell.hasClass(EDITOR_CELL_CLASS);\r\n var isDisabled = !isEditor && (!args.isHighlighted || isInteractiveTarget);\r\n this._focus($cell, isDisabled, isInteractiveTarget)\r\n }\r\n } else {\r\n this.setRowFocusType();\r\n this.setFocusedRowIndex(args.prevRowIndex);\r\n $cell = this._getFocusedCell();\r\n if (this._editingController.isEditing() && isCellEditMode) {\r\n this._closeEditCell()\r\n }\r\n }\r\n },\r\n _allowRowUpdating: function() {\r\n var rowIndex = this.getVisibleRowIndex();\r\n var row = this._dataController.items()[rowIndex];\r\n return this._editingController.allowUpdating({\r\n row: row\r\n }, \"click\")\r\n },\r\n focus: function(element) {\r\n var activeElementSelector;\r\n var focusedRowEnabled = this.option(\"focusedRowEnabled\");\r\n var isHighlighted = isCellElement((0, _renderer.default)(element));\r\n if (!element) {\r\n activeElementSelector = \".dx-datagrid-rowsview .dx-row[tabindex]\";\r\n if (!focusedRowEnabled) {\r\n activeElementSelector += \", .dx-datagrid-rowsview .dx-row > td[tabindex]\"\r\n }\r\n element = this.component.$element().find(activeElementSelector).first()\r\n }\r\n element && this._focusElement((0, _renderer.default)(element), isHighlighted)\r\n },\r\n getFocusedView: function() {\r\n return this._focusedView\r\n },\r\n setupFocusedView: function() {\r\n if (this.isKeyboardEnabled() && !(0, _type.isDefined)(this._focusedView)) {\r\n this._focusView()\r\n }\r\n },\r\n _focusElement: function($element, isHighlighted) {\r\n var rowsViewElement = (0, _renderer.default)(this._getRowsViewElement());\r\n var $focusedView = $element.closest(rowsViewElement);\r\n var isRowFocusType = this.isRowFocusType();\r\n var args = {};\r\n if (!$focusedView.length || isCellElement($element) && !this._isCellValid($element)) {\r\n return\r\n }\r\n this._focusView();\r\n this._isNeedFocus = true;\r\n this._isNeedScroll = true;\r\n if (isCellElement($element) || isGroupRow($element)) {\r\n this.setCellFocusType();\r\n args = this._fireFocusChangingEvents(null, $element, false, isHighlighted);\r\n $element = args.$newCellElement;\r\n if (isRowFocusType && !args.isHighlighted) {\r\n this.setRowFocusType()\r\n }\r\n }\r\n if (!args.cancel) {\r\n this._focus($element, !args.isHighlighted);\r\n this._focusInteractiveElement($element)\r\n }\r\n },\r\n _getFocusedViewByElement: function($element) {\r\n var view = this.getFocusedView();\r\n var $view = view && (0, _renderer.default)(view.element());\r\n return $element && 0 !== $element.closest($view).length\r\n },\r\n _focusView: function() {\r\n this._focusedView = this.getView(\"rowsView\")\r\n },\r\n _resetFocusedView: function() {\r\n this.setRowFocusType();\r\n this._focusedView = null\r\n },\r\n _focusInteractiveElement: function($cell, isLast) {\r\n if (!$cell) {\r\n return\r\n }\r\n var $focusedElement = this._getInteractiveElement($cell, isLast);\r\n _uiGrid_core2.default.focusAndSelectElement(this, $focusedElement)\r\n },\r\n _focus: function($cell, disableFocus, isInteractiveElement) {\r\n var $row = $cell && !$cell.hasClass(ROW_CLASS) ? $cell.closest(\".\".concat(ROW_CLASS)) : $cell;\r\n if ($row && isNotFocusedRow($row)) {\r\n return\r\n }\r\n var focusedView = this._focusedView;\r\n var $focusViewElement = focusedView && focusedView.element();\r\n var $focusElement;\r\n this._isHiddenFocus = disableFocus;\r\n if (isGroupRow($row) || this.isRowFocusType()) {\r\n $focusElement = $row;\r\n if (focusedView) {\r\n this.setFocusedRowIndex(this._getRowIndex($row))\r\n }\r\n } else {\r\n if (isCellElement($cell)) {\r\n $focusElement = $cell;\r\n this._updateFocusedCellPosition($cell)\r\n }\r\n }\r\n if ($focusElement) {\r\n if ($focusViewElement) {\r\n $focusViewElement.find(\".dx-row[tabindex], .dx-row > td[tabindex]\").not($focusElement).removeClass(CELL_FOCUS_DISABLED_CLASS).removeAttr(\"tabindex\")\r\n }\r\n _events_engine.default.one($focusElement, \"blur\", function(e) {\r\n if (e.relatedTarget) {\r\n $focusElement.removeClass(CELL_FOCUS_DISABLED_CLASS)\r\n }\r\n });\r\n if (!isInteractiveElement) {\r\n this._applyTabIndexToElement($focusElement);\r\n _events_engine.default.trigger($focusElement, \"focus\")\r\n }\r\n if (disableFocus) {\r\n $focusElement.addClass(CELL_FOCUS_DISABLED_CLASS)\r\n } else {\r\n this._editorFactory.focus($focusElement)\r\n }\r\n }\r\n },\r\n _updateFocus: function(isRenderView) {\r\n var _this6 = this;\r\n this._updateFocusTimeout = setTimeout(function() {\r\n var editingController = _this6._editingController;\r\n var isCellEditMode = editingController.getEditMode() === EDIT_MODE_CELL;\r\n if (!_this6.option(\"repaintChangesOnly\") && isCellEditMode && editingController.hasChanges()) {\r\n editingController._focusEditingCell();\r\n return\r\n }\r\n var $cell = _this6._getFocusedCell();\r\n var isEditing = editingController.isEditing();\r\n if ($cell && !(_this6._isMasterDetailCell($cell) && !_this6._isRowEditMode())) {\r\n if (_this6._hasSkipRow($cell.parent())) {\r\n var direction = _this6._focusedCellPosition && _this6._focusedCellPosition.rowIndex > 0 ? \"upArrow\" : \"downArrow\";\r\n $cell = _this6._getNextCell(direction)\r\n }\r\n if (isElementDefined($cell)) {\r\n if (isRenderView && !isEditing && _this6._checkCellOverlapped($cell)) {\r\n return\r\n }\r\n if ($cell.is(\"td\") || $cell.hasClass(_this6.addWidgetPrefix(EDIT_FORM_ITEM_CLASS))) {\r\n var isCommandCell = $cell.is(COMMAND_CELL_SELECTOR);\r\n var $focusedElementInsideCell = $cell.find(\":focus\");\r\n var isFocusedElementDefined = isElementDefined($focusedElementInsideCell);\r\n if ((isRenderView || !isCommandCell) && _this6._editorFactory.focus()) {\r\n if (isCommandCell && isFocusedElementDefined) {\r\n _uiGrid_core2.default.focusAndSelectElement(_this6, $focusedElementInsideCell);\r\n return\r\n }!isFocusedElementDefined && _this6._focus($cell)\r\n } else {\r\n if (!isFocusedElementDefined && (_this6._isNeedFocus || _this6._isHiddenFocus)) {\r\n _this6._focus($cell, _this6._isHiddenFocus)\r\n }\r\n }\r\n if (isEditing) {\r\n _this6._focusInteractiveElement.bind(_this6)($cell)\r\n }\r\n } else {\r\n _events_engine.default.trigger($cell, \"focus\")\r\n }\r\n }\r\n }\r\n })\r\n },\r\n _checkCellOverlapped: function($cell) {\r\n var cellOffset = $cell.offset();\r\n var hasScrollable = this.component.getScrollable && this.component.getScrollable();\r\n var isOverlapped = false;\r\n if (hasScrollable) {\r\n if (cellOffset.left < 0) {\r\n isOverlapped = $cell.width() + cellOffset.left <= 0\r\n } else {\r\n if (cellOffset.top < 0) {\r\n isOverlapped = $cell.height() + cellOffset.top <= 0\r\n }\r\n }\r\n }\r\n return isOverlapped\r\n },\r\n _getFocusedCell: function() {\r\n return (0, _renderer.default)(this._getCell(this._focusedCellPosition))\r\n },\r\n _updateFocusedCellPositionByTarget: function(target) {\r\n var _this$_focusedCellPos;\r\n var elementType = this._getElementType(target);\r\n if (\"row\" === elementType && (0, _type.isDefined)(null === (_this$_focusedCellPos = this._focusedCellPosition) || void 0 === _this$_focusedCellPos ? void 0 : _this$_focusedCellPos.columnIndex)) {\r\n var $row = (0, _renderer.default)(target);\r\n this._focusedView && isGroupRow($row) && this.setFocusedRowIndex(this._getRowIndex($row))\r\n } else {\r\n this._updateFocusedCellPosition(this._getCellElementFromTarget(target))\r\n }\r\n },\r\n _updateFocusedCellPosition: function($cell, direction) {\r\n var position = this._getCellPosition($cell, direction);\r\n if (position) {\r\n if (!$cell.length || position.rowIndex >= 0 && position.columnIndex >= 0) {\r\n this.setFocusedCellPosition(position.rowIndex, position.columnIndex)\r\n }\r\n }\r\n return position\r\n },\r\n _getFocusedColumnIndexOffset: function(columnIndex) {\r\n var offset = 0;\r\n var column = this._columnsController.getVisibleColumns()[columnIndex];\r\n if (column && column.fixed) {\r\n offset = this._getFixedColumnIndexOffset(column)\r\n } else {\r\n if (columnIndex >= 0) {\r\n offset = this._columnsController.getColumnIndexOffset()\r\n }\r\n }\r\n return offset\r\n },\r\n _getFixedColumnIndexOffset: function(column) {\r\n var offset = isFixedColumnIndexOffsetRequired(this, column) ? this._getVisibleColumnCount() - this._columnsController.getVisibleColumns().length : 0;\r\n return offset\r\n },\r\n _getCellPosition: function($cell, direction) {\r\n var columnIndex;\r\n var $row = isElementDefined($cell) && $cell.closest(\"tr\");\r\n var rowsView = this.getView(\"rowsView\");\r\n if (isElementDefined($row)) {\r\n var rowIndex = this._getRowIndex($row);\r\n columnIndex = rowsView.getCellIndex($cell, rowIndex);\r\n columnIndex += this._getFocusedColumnIndexOffset(columnIndex);\r\n if (direction) {\r\n columnIndex = \"previous\" === direction ? columnIndex - 1 : columnIndex + 1;\r\n columnIndex = this._applyColumnIndexBoundaries(columnIndex)\r\n }\r\n return {\r\n rowIndex: rowIndex,\r\n columnIndex: columnIndex\r\n }\r\n }\r\n },\r\n _focusCell: function($cell, isDisabled) {\r\n if (this._isCellValid($cell)) {\r\n this._focus($cell, isDisabled);\r\n return true\r\n }\r\n },\r\n _focusEditFormCell: function($cell) {\r\n if ($cell.hasClass(MASTER_DETAIL_CELL_CLASS)) {\r\n this._editorFactory.focus($cell, true)\r\n }\r\n },\r\n _resetFocusedCell: function(preventScroll) {\r\n var _this$_focusedView;\r\n var $cell = this._getFocusedCell();\r\n isElementDefined($cell) && $cell.removeAttr(\"tabindex\");\r\n this._isNeedFocus = false;\r\n this._isNeedScroll = false;\r\n this._focusedCellPosition = {};\r\n clearTimeout(this._updateFocusTimeout);\r\n null === (_this$_focusedView = this._focusedView) || void 0 === _this$_focusedView ? void 0 : _this$_focusedView.renderFocusState(preventScroll)\r\n },\r\n restoreFocusableElement: function(rowIndex, $event) {\r\n var that = this;\r\n var args;\r\n var $rowElement;\r\n var isUpArrow = (0, _type.isDefined)(rowIndex);\r\n var rowsView = that.getView(\"rowsView\");\r\n var $rowsViewElement = rowsView.element();\r\n var columnIndex = that._focusedCellPosition.columnIndex;\r\n var rowIndexOffset = that._dataController.getRowIndexOffset();\r\n rowIndex = isUpArrow ? rowIndex : rowsView.getTopVisibleItemIndex() + rowIndexOffset;\r\n if (!isUpArrow) {\r\n that._editorFactory.loseFocus();\r\n that._applyTabIndexToElement($rowsViewElement);\r\n _events_engine.default.trigger($rowsViewElement, \"focus\")\r\n } else {\r\n $rowElement = rowsView.getRow(rowIndex - rowIndexOffset);\r\n args = that._fireFocusedRowChanging($event, $rowElement);\r\n if (!args.cancel && args.rowIndexChanged) {\r\n rowIndex = args.newRowIndex\r\n }\r\n }\r\n if (!isUpArrow || !args.cancel) {\r\n that.setFocusedCellPosition(rowIndex, columnIndex)\r\n }\r\n isUpArrow && that._updateFocus()\r\n },\r\n _getNewPositionByCode: function(cellPosition, elementType, code) {\r\n var columnIndex = cellPosition.columnIndex;\r\n var rowIndex = cellPosition.rowIndex;\r\n var visibleColumnsCount;\r\n if (void 0 === cellPosition.rowIndex && \"next\" === code) {\r\n return {\r\n columnIndex: 0,\r\n rowIndex: 0\r\n }\r\n }\r\n switch (code) {\r\n case \"nextInRow\":\r\n case \"next\":\r\n visibleColumnsCount = this._getVisibleColumnCount();\r\n if (columnIndex < visibleColumnsCount - 1 && \"row\" !== elementType && this._hasValidCellAfterPosition({\r\n columnIndex: columnIndex,\r\n rowIndex: rowIndex\r\n })) {\r\n columnIndex++\r\n } else {\r\n if (!this._isLastRow(rowIndex) && \"next\" === code) {\r\n columnIndex = 0;\r\n rowIndex++\r\n }\r\n }\r\n break;\r\n case \"previousInRow\":\r\n case \"previous\":\r\n if (columnIndex > 0 && \"row\" !== elementType && this._hasValidCellBeforePosition({\r\n columnIndex: columnIndex,\r\n rowIndex: rowIndex\r\n })) {\r\n columnIndex--\r\n } else {\r\n if (rowIndex > 0 && \"previous\" === code) {\r\n rowIndex--;\r\n visibleColumnsCount = this._getVisibleColumnCount();\r\n columnIndex = visibleColumnsCount - 1\r\n }\r\n }\r\n break;\r\n case \"upArrow\":\r\n rowIndex = rowIndex > 0 ? rowIndex - 1 : rowIndex;\r\n break;\r\n case \"downArrow\":\r\n rowIndex = !this._isLastRow(rowIndex) ? rowIndex + 1 : rowIndex\r\n }\r\n return {\r\n columnIndex: columnIndex,\r\n rowIndex: rowIndex\r\n }\r\n },\r\n setFocusedCellPosition: function(rowIndex, columnIndex) {\r\n this.setFocusedRowIndex(rowIndex);\r\n this.setFocusedColumnIndex(columnIndex)\r\n },\r\n setFocusedRowIndex: function(rowIndex) {\r\n if (!this._focusedCellPosition) {\r\n this._focusedCellPosition = {}\r\n }\r\n this._focusedCellPosition.rowIndex = rowIndex\r\n },\r\n setFocusedColumnIndex: function(columnIndex) {\r\n if (!this._focusedCellPosition) {\r\n this._focusedCellPosition = {}\r\n }\r\n this._focusedCellPosition.columnIndex = columnIndex\r\n },\r\n getRowIndex: function() {\r\n return this._focusedCellPosition ? this._focusedCellPosition.rowIndex : -1\r\n },\r\n getColumnIndex: function() {\r\n return this._focusedCellPosition ? this._focusedCellPosition.columnIndex : -1\r\n },\r\n getVisibleRowIndex: function() {\r\n var rowIndex = this._focusedCellPosition && this._focusedCellPosition.rowIndex;\r\n if (!(0, _type.isDefined)(rowIndex)) {\r\n return -1\r\n }\r\n return rowIndex - this._dataController.getRowIndexOffset()\r\n },\r\n getVisibleColumnIndex: function() {\r\n var columnIndex = this._focusedCellPosition && this._focusedCellPosition.columnIndex;\r\n if (!(0, _type.isDefined)(columnIndex)) {\r\n return -1\r\n }\r\n return columnIndex - this._columnsController.getColumnIndexOffset()\r\n },\r\n _applyColumnIndexBoundaries: function(columnIndex) {\r\n var visibleColumnsCount = this._getVisibleColumnCount();\r\n if (columnIndex < 0) {\r\n columnIndex = 0\r\n } else {\r\n if (columnIndex >= visibleColumnsCount) {\r\n columnIndex = visibleColumnsCount - 1\r\n }\r\n }\r\n return columnIndex\r\n },\r\n _isCellByPositionValid: function(cellPosition) {\r\n var $cell = (0, _renderer.default)(this._getCell(cellPosition));\r\n return this._isCellValid($cell)\r\n },\r\n _isLastRow: function(rowIndex) {\r\n if (this._isVirtualRowRender()) {\r\n return rowIndex >= this._dataController.totalItemsCount() - 1\r\n }\r\n return rowIndex === this._dataController.items().length - 1\r\n },\r\n _isFirstValidCell: function(cellPosition) {\r\n var isFirstValidCell = false;\r\n if (0 === cellPosition.rowIndex && cellPosition.columnIndex >= 0) {\r\n isFirstValidCell = isFirstValidCell || !this._hasValidCellBeforePosition(cellPosition)\r\n }\r\n return isFirstValidCell\r\n },\r\n _hasValidCellBeforePosition: function(cellPosition) {\r\n var columnIndex = cellPosition.columnIndex;\r\n var hasValidCells = false;\r\n while (columnIndex > 0 && !hasValidCells) {\r\n var checkingPosition = {\r\n columnIndex: --columnIndex,\r\n rowIndex: cellPosition.rowIndex\r\n };\r\n hasValidCells = this._isCellByPositionValid(checkingPosition)\r\n }\r\n return hasValidCells\r\n },\r\n _hasValidCellAfterPosition: function(cellPosition) {\r\n var columnIndex = cellPosition.columnIndex;\r\n var hasValidCells = false;\r\n var visibleColumnCount = this._getVisibleColumnCount();\r\n while (columnIndex < visibleColumnCount - 1 && !hasValidCells) {\r\n var checkingPosition = {\r\n columnIndex: ++columnIndex,\r\n rowIndex: cellPosition.rowIndex\r\n };\r\n hasValidCells = this._isCellByPositionValid(checkingPosition)\r\n }\r\n return hasValidCells\r\n },\r\n _isLastValidCell: function(cellPosition) {\r\n var nextColumnIndex = cellPosition.columnIndex >= 0 ? cellPosition.columnIndex + 1 : 0;\r\n var rowIndex = cellPosition.rowIndex;\r\n var checkingPosition = {\r\n columnIndex: nextColumnIndex,\r\n rowIndex: rowIndex\r\n };\r\n var visibleRows = this._dataController.getVisibleRows();\r\n var row = visibleRows && visibleRows[rowIndex];\r\n var isLastRow = this._isLastRow(rowIndex);\r\n if (!isLastRow) {\r\n return false\r\n }\r\n if (row && \"group\" === row.rowType && cellPosition.columnIndex > 0) {\r\n return true\r\n }\r\n if (cellPosition.columnIndex === this._getVisibleColumnCount() - 1) {\r\n return true\r\n }\r\n if (this._isCellByPositionValid(checkingPosition)) {\r\n return false\r\n }\r\n return this._isLastValidCell(checkingPosition)\r\n },\r\n _isCellValid: function($cell, isClick) {\r\n if (isElementDefined($cell)) {\r\n var rowsView = this.getView(\"rowsView\");\r\n var $row = $cell.parent();\r\n var columnsController = this._columnsController;\r\n var columnIndex = rowsView.getCellIndex($cell) + columnsController.getColumnIndexOffset();\r\n var column = columnsController.getVisibleColumns(null, true)[columnIndex];\r\n var visibleColumnCount = this._getVisibleColumnCount();\r\n var editingController = this._editingController;\r\n var isMasterDetailRow = isDetailRow($row);\r\n var isShowWhenGrouped = column && column.showWhenGrouped;\r\n var isDataCell = column && !$cell.hasClass(COMMAND_EXPAND_CLASS) && isDataRow($row);\r\n var isValidGroupSpaceColumn = function() {\r\n return !isMasterDetailRow && column && (!(0, _type.isDefined)(column.groupIndex) || isShowWhenGrouped && isDataCell) || parseInt($cell.attr(\"colspan\")) > 1\r\n };\r\n if (this._isMasterDetailCell($cell)) {\r\n return true\r\n }\r\n if (visibleColumnCount > columnIndex && isValidGroupSpaceColumn()) {\r\n var rowItems = this._dataController.items();\r\n var visibleRowIndex = rowsView.getRowIndex($row);\r\n var row = rowItems[visibleRowIndex];\r\n var isCellEditing = editingController && this._isCellEditMode() && editingController.isEditing();\r\n var isRowEditingInCurrentRow = editingController && editingController.isEditRow(visibleRowIndex);\r\n var isEditing = isRowEditingInCurrentRow || isCellEditing;\r\n if (column.command) {\r\n if (this._isLegacyNavigation()) {\r\n return !isEditing && \"expand\" === column.command\r\n }\r\n if (isCellEditing) {\r\n return false\r\n }\r\n if (isRowEditingInCurrentRow) {\r\n return \"select\" !== column.command\r\n }\r\n return !isEditing\r\n }\r\n if (isCellEditing && row && \"data\" !== row.rowType) {\r\n return false\r\n }\r\n return !isEditing || column.allowEditing || isClick\r\n }\r\n }\r\n },\r\n getFirstValidCellInRow: function($row, columnIndex) {\r\n var that = this;\r\n var $cells = $row.find(\"> td\");\r\n var $cell;\r\n var $result;\r\n columnIndex = columnIndex || 0;\r\n for (var i = columnIndex; i < $cells.length; ++i) {\r\n $cell = $cells.eq(i);\r\n if (that._isCellValid($cell)) {\r\n $result = $cell;\r\n break\r\n }\r\n }\r\n return $result\r\n },\r\n _getNextCell: function(keyCode, elementType, cellPosition) {\r\n var focusedCellPosition = cellPosition || this._focusedCellPosition;\r\n var isRowFocusType = this.isRowFocusType();\r\n var includeCommandCells = isRowFocusType || (0, _array.inArray)(keyCode, [\"next\", \"previous\"]) > -1;\r\n var $cell;\r\n var $row;\r\n if (this._focusedView && focusedCellPosition) {\r\n var newFocusedCellPosition = this._getNewPositionByCode(focusedCellPosition, elementType, keyCode);\r\n $cell = (0, _renderer.default)(this._getCell(newFocusedCellPosition));\r\n var isLastCellOnDirection = \"previous\" === keyCode ? this._isFirstValidCell(newFocusedCellPosition) : this._isLastValidCell(newFocusedCellPosition);\r\n if (isElementDefined($cell) && !this._isCellValid($cell) && this._isCellInRow(newFocusedCellPosition, includeCommandCells) && !isLastCellOnDirection) {\r\n if (isRowFocusType) {\r\n $cell = this.getFirstValidCellInRow($cell.parent(), newFocusedCellPosition.columnIndex)\r\n } else {\r\n $cell = this._getNextCell(keyCode, \"cell\", newFocusedCellPosition)\r\n }\r\n }\r\n $row = isElementDefined($cell) && $cell.parent();\r\n if (this._hasSkipRow($row)) {\r\n var rowIndex = this._getRowIndex($row);\r\n if (!this._isLastRow(rowIndex)) {\r\n $cell = this._getNextCell(keyCode, \"row\", {\r\n columnIndex: focusedCellPosition.columnIndex,\r\n rowIndex: rowIndex\r\n })\r\n } else {\r\n return null\r\n }\r\n }\r\n return isElementDefined($cell) ? $cell : null\r\n }\r\n return null\r\n },\r\n _startEditing: function(eventArgs, fastEditingKey) {\r\n var focusedCellPosition = this._focusedCellPosition;\r\n var visibleRowIndex = this.getVisibleRowIndex();\r\n var visibleColumnIndex = this.getVisibleColumnIndex();\r\n var row = this._dataController.items()[visibleRowIndex];\r\n var column = this._columnsController.getVisibleColumns()[visibleColumnIndex];\r\n if (this._isAllowEditing(row, column)) {\r\n if (this._isRowEditMode()) {\r\n this._editingController.editRow(visibleRowIndex)\r\n } else {\r\n if (focusedCellPosition) {\r\n this._startEditCell(eventArgs, fastEditingKey)\r\n }\r\n }\r\n }\r\n },\r\n _isAllowEditing: function(row, column) {\r\n return this._editingController.allowUpdating({\r\n row: row\r\n }) && column && column.allowEditing\r\n },\r\n _editFocusedCell: function() {\r\n var rowIndex = this.getVisibleRowIndex();\r\n var colIndex = this.getVisibleColumnIndex();\r\n return this._editingController.editCell(rowIndex, colIndex)\r\n },\r\n _startEditCell: function(eventArgs, fastEditingKey) {\r\n var _this7 = this;\r\n this._fastEditingStarted = (0, _type.isDefined)(fastEditingKey);\r\n var editResult = this._editFocusedCell();\r\n if (this._isFastEditingStarted()) {\r\n if (true === editResult) {\r\n this._editingCellHandler(eventArgs, fastEditingKey)\r\n } else {\r\n if (editResult && editResult.done) {\r\n var editorValue = fastEditingKey !== FAST_EDITING_DELETE_KEY ? fastEditingKey : \"\";\r\n editResult.done(function() {\r\n return _this7._editingCellHandler(eventArgs, editorValue)\r\n })\r\n }\r\n }\r\n }\r\n },\r\n _editingCellHandler: function(eventArgs, editorValue) {\r\n var $input = this._getFocusedCell().find(\".dx-texteditor-input\").eq(0);\r\n var keyDownEvent = (0, _index.createEvent)(eventArgs, {\r\n type: \"keydown\",\r\n target: $input.get(0)\r\n });\r\n var keyPressEvent = (0, _index.createEvent)(eventArgs, {\r\n type: \"keypress\",\r\n target: $input.get(0)\r\n });\r\n var inputEvent = (0, _index.createEvent)(eventArgs, {\r\n type: \"input\",\r\n target: $input.get(0)\r\n });\r\n _events_engine.default.trigger($input, keyDownEvent);\r\n if (!keyDownEvent.isDefaultPrevented()) {\r\n _events_engine.default.trigger($input, keyPressEvent);\r\n if (!keyPressEvent.isDefaultPrevented()) {\r\n var timeout = _browser.default.mozilla ? 25 : 0;\r\n setTimeout(function() {\r\n $input.val(editorValue);\r\n var $widgetContainer = $input.closest(\".\".concat(WIDGET_CLASS));\r\n _events_engine.default.off($widgetContainer, \"focusout\");\r\n _events_engine.default.one($widgetContainer, \"focusout\", function() {\r\n _events_engine.default.trigger($input, \"change\")\r\n });\r\n _events_engine.default.trigger($input, inputEvent)\r\n }, timeout)\r\n }\r\n }\r\n },\r\n _fireFocusChangingEvents: function($event, $cell, fireRowEvent, isHighlighted) {\r\n var args = {};\r\n var cellPosition = this._getCellPosition($cell) || {};\r\n if (this.isCellFocusType()) {\r\n args = this._fireFocusedCellChanging($event, $cell, isHighlighted);\r\n if (!args.cancel) {\r\n cellPosition.columnIndex = args.newColumnIndex;\r\n cellPosition.rowIndex = args.newRowIndex;\r\n isHighlighted = args.isHighlighted;\r\n $cell = (0, _renderer.default)(this._getCell(cellPosition))\r\n }\r\n }\r\n if (!args.cancel && fireRowEvent && $cell) {\r\n args = this._fireFocusedRowChanging($event, $cell.parent());\r\n if (!args.cancel) {\r\n cellPosition.rowIndex = args.newRowIndex;\r\n args.isHighlighted = isHighlighted\r\n }\r\n }\r\n args.$newCellElement = (0, _renderer.default)(this._getCell(cellPosition));\r\n if (!args.$newCellElement.length) {\r\n args.$newCellElement = $cell\r\n }\r\n return args\r\n },\r\n _fireFocusedCellChanging: function($event, $cellElement, isHighlighted) {\r\n var that = this;\r\n var prevCellIndex = that.option(\"focusedColumnIndex\");\r\n var prevRowIndex = that.option(\"focusedRowIndex\");\r\n var cellPosition = that._getCellPosition($cellElement);\r\n var columnIndex = cellPosition ? cellPosition.columnIndex : -1;\r\n var rowIndex = cellPosition ? cellPosition.rowIndex : -1;\r\n var args = {\r\n cellElement: $cellElement,\r\n prevColumnIndex: prevCellIndex,\r\n prevRowIndex: prevRowIndex,\r\n newColumnIndex: columnIndex,\r\n newRowIndex: rowIndex,\r\n rows: that._dataController.getVisibleRows(),\r\n columns: that._columnsController.getVisibleColumns(),\r\n event: $event,\r\n isHighlighted: isHighlighted || false,\r\n cancel: false\r\n };\r\n this._canceledCellPosition = null;\r\n that.executeAction(\"onFocusedCellChanging\", args);\r\n if (args.newColumnIndex !== columnIndex || args.newRowIndex !== rowIndex) {\r\n args.$newCellElement = (0, _renderer.default)(this._getCell({\r\n columnIndex: args.newColumnIndex,\r\n rowIndex: args.newRowIndex\r\n }))\r\n }\r\n if (args.cancel) {\r\n this._canceledCellPosition = {\r\n rowIndex: rowIndex,\r\n columnIndex: columnIndex\r\n }\r\n }\r\n return args\r\n },\r\n _fireFocusedCellChanged: function($cellElement, prevCellIndex, prevRowIndex) {\r\n var that = this;\r\n var dataController = that._dataController;\r\n var columnIndex = that.getView(\"rowsView\").getCellIndex($cellElement);\r\n var rowIndex = this._getRowIndex($cellElement && $cellElement.parent());\r\n var localRowIndex = Math.min(rowIndex - dataController.getRowIndexOffset(), dataController.items().length - 1);\r\n var isEditingCell = that._editingController.isEditCell(localRowIndex, columnIndex);\r\n var row = dataController.items()[localRowIndex];\r\n if (!isEditingCell && (prevCellIndex !== columnIndex || prevRowIndex !== rowIndex)) {\r\n that.executeAction(\"onFocusedCellChanged\", {\r\n cellElement: $cellElement,\r\n columnIndex: columnIndex,\r\n rowIndex: rowIndex,\r\n row: row,\r\n column: that._columnsController.getVisibleColumns()[columnIndex]\r\n })\r\n }\r\n },\r\n _fireFocusedRowChanging: function(eventArgs, $newFocusedRow) {\r\n var newRowIndex = this._getRowIndex($newFocusedRow);\r\n var dataController = this._dataController;\r\n var prevFocusedRowIndex = this.option(\"focusedRowIndex\");\r\n var loadingOperationTypes = dataController.loadingOperationTypes();\r\n var args = {\r\n rowElement: $newFocusedRow,\r\n prevRowIndex: prevFocusedRowIndex,\r\n newRowIndex: newRowIndex,\r\n event: eventArgs,\r\n rows: dataController.getVisibleRows(),\r\n cancel: false\r\n };\r\n if (!dataController || dataController.isLoading() && (loadingOperationTypes.reload || loadingOperationTypes.paging)) {\r\n args.cancel = true;\r\n return args\r\n }\r\n if (this.option(\"focusedRowEnabled\")) {\r\n this.executeAction(\"onFocusedRowChanging\", args);\r\n if (!args.cancel && args.newRowIndex !== newRowIndex) {\r\n args.resetFocusedRow = args.newRowIndex < 0;\r\n if (!args.resetFocusedRow) {\r\n this.setFocusedRowIndex(args.newRowIndex)\r\n }\r\n args.rowIndexChanged = true\r\n }\r\n }\r\n return args\r\n },\r\n _fireFocusedRowChanged: function($rowElement) {\r\n var row;\r\n var focusedRowKey = this.option(\"focusedRowKey\");\r\n var focusController = this.getController(\"focus\");\r\n var focusedRowIndex = null === focusController || void 0 === focusController ? void 0 : focusController.getFocusedRowIndexByKey(focusedRowKey);\r\n if (this.option(\"focusedRowEnabled\")) {\r\n if (focusedRowIndex >= 0) {\r\n var dataController = this._dataController;\r\n row = focusedRowIndex >= 0 && dataController.getVisibleRows()[focusedRowIndex - dataController.getRowIndexOffset()]\r\n }\r\n this.executeAction(\"onFocusedRowChanged\", {\r\n rowElement: $rowElement,\r\n rowIndex: focusedRowIndex,\r\n row: row\r\n })\r\n }\r\n },\r\n _isEventInCurrentGrid: function(event) {\r\n return _uiGrid_core2.default.isElementInCurrentGrid(this, (0, _renderer.default)(event.target))\r\n },\r\n _isRowEditMode: function() {\r\n var editMode = this._editingController.getEditMode();\r\n return editMode === EDIT_MODE_ROW || editMode === EDIT_MODE_FORM\r\n },\r\n _isCellEditMode: function() {\r\n var editMode = this._editingController.getEditMode();\r\n return editMode === EDIT_MODE_CELL || editMode === EDIT_MODE_BATCH\r\n },\r\n _isFastEditingAllowed: function() {\r\n return this._isCellEditMode() && this.option(\"keyboardNavigation.editOnKeyPress\")\r\n },\r\n _getInteractiveElement: function($cell, isLast) {\r\n var $focusedElement = $cell.find(INTERACTIVE_ELEMENTS_SELECTOR).filter(\":visible\");\r\n return isLast ? $focusedElement.last() : $focusedElement.first()\r\n },\r\n _applyTabIndexToElement: function($element) {\r\n var tabIndex = this.option(\"tabIndex\") || 0;\r\n $element.attr(\"tabindex\", (0, _type.isDefined)(tabIndex) ? tabIndex : 0)\r\n },\r\n _getCell: function(cellPosition) {\r\n if (this._focusedView && cellPosition) {\r\n var rowIndexOffset = this._dataController.getRowIndexOffset();\r\n var column = this._columnsController.getVisibleColumns(null, true)[cellPosition.columnIndex];\r\n var columnIndexOffset = column && column.fixed ? this._getFixedColumnIndexOffset(column) : this._columnsController.getColumnIndexOffset();\r\n var rowIndex = cellPosition.rowIndex >= 0 ? cellPosition.rowIndex - rowIndexOffset : -1;\r\n var columnIndex = cellPosition.columnIndex >= 0 ? cellPosition.columnIndex - columnIndexOffset : -1;\r\n return this._focusedView.getCell({\r\n rowIndex: rowIndex,\r\n columnIndex: columnIndex\r\n })\r\n }\r\n },\r\n _getRowIndex: function($row) {\r\n var rowsView = this.getView(\"rowsView\");\r\n var rowIndex = rowsView.getRowIndex($row);\r\n if (rowIndex >= 0) {\r\n rowIndex += this._dataController.getRowIndexOffset()\r\n }\r\n return rowIndex\r\n },\r\n _hasSkipRow: function($row) {\r\n var row = $row && $row.get(0);\r\n return row && (\"none\" === row.style.display || $row.hasClass(this.addWidgetPrefix(GROUP_FOOTER_CLASS)) || isDetailRow($row) && !$row.hasClass(this.addWidgetPrefix(EDIT_FORM_CLASS)))\r\n },\r\n _allowEditingOnEnterKey: function() {\r\n return \"startEdit\" === this.option(\"keyboardNavigation.enterKeyAction\")\r\n },\r\n _isLegacyNavigation: function() {\r\n return this.option(\"useLegacyKeyboardNavigation\")\r\n },\r\n _getDirectionCodeByKey: function(key) {\r\n var directionCode;\r\n switch (key) {\r\n case \"upArrow\":\r\n directionCode = \"prevRow\";\r\n break;\r\n case \"downArrow\":\r\n directionCode = \"nextRow\";\r\n break;\r\n case \"leftArrow\":\r\n directionCode = this.option(\"rtlEnabled\") ? \"nextInRow\" : \"previousInRow\";\r\n break;\r\n case \"rightArrow\":\r\n directionCode = this.option(\"rtlEnabled\") ? \"previousInRow\" : \"nextInRow\"\r\n }\r\n return directionCode\r\n },\r\n _isVirtualScrolling: function() {\r\n var scrollingMode = this.option(\"scrolling.mode\");\r\n return \"virtual\" === scrollingMode || \"infinite\" === scrollingMode\r\n },\r\n _isVirtualRowRender: function() {\r\n return this._isVirtualScrolling() || \"virtual\" === this.option(\"scrolling.rowRenderingMode\")\r\n },\r\n _isVirtualColumnRender: function() {\r\n return \"virtual\" === this.option(\"scrolling.columnRenderingMode\")\r\n },\r\n _scrollBy: function(left, top, rowIndex, $event) {\r\n var that = this;\r\n var scrollable = this.getView(\"rowsView\").getScrollable();\r\n if (that._focusedCellPosition) {\r\n var scrollHandler = function scrollHandler() {\r\n scrollable.off(\"scroll\", scrollHandler);\r\n setTimeout(that.restoreFocusableElement.bind(that, rowIndex, $event))\r\n };\r\n scrollable.on(\"scroll\", scrollHandler)\r\n }\r\n return scrollable.scrollBy({\r\n left: left,\r\n top: top\r\n })\r\n },\r\n _isInsideEditForm: function(element) {\r\n return (0, _renderer.default)(element).closest(\".\" + this.addWidgetPrefix(EDIT_FORM_CLASS)).length > 0\r\n },\r\n _isMasterDetailCell: function(element) {\r\n var $masterDetailCell = (0, _renderer.default)(element).closest(\".\" + MASTER_DETAIL_CELL_CLASS);\r\n var $masterDetailGrid = $masterDetailCell.closest(\".\" + this.getWidgetContainerClass()).parent();\r\n return $masterDetailCell.length && $masterDetailGrid.is(this.component.$element())\r\n },\r\n _processNextCellInMasterDetail: function($nextCell) {\r\n if (!this._isInsideEditForm($nextCell) && $nextCell) {\r\n this._applyTabIndexToElement($nextCell)\r\n }\r\n },\r\n _handleTabKeyOnMasterDetailCell: function(target, direction) {\r\n if (this._isMasterDetailCell(target)) {\r\n this._updateFocusedCellPosition((0, _renderer.default)(target), direction);\r\n var $nextCell = this._getNextCell(direction, \"row\");\r\n this._processNextCellInMasterDetail($nextCell);\r\n return true\r\n }\r\n return false\r\n },\r\n _getElementType: function(target) {\r\n return (0, _renderer.default)(target).is(\"tr\") ? \"row\" : \"cell\"\r\n },\r\n _isFastEditingStarted: function() {\r\n return this._isFastEditingAllowed() && this._fastEditingStarted\r\n },\r\n _getVisibleColumnCount: function() {\r\n return this._columnsController.getVisibleColumns(null, true).length\r\n },\r\n _isCellInRow: function(cellPosition, includeCommandCells) {\r\n var columnIndex = cellPosition.columnIndex;\r\n var visibleColumnsCount = this._getVisibleColumnCount();\r\n return includeCommandCells ? columnIndex >= 0 && columnIndex <= visibleColumnsCount - 1 : columnIndex > 0 && columnIndex < visibleColumnsCount - 1\r\n },\r\n _getCellElementFromTarget: function(target) {\r\n var elementType = this._getElementType(target);\r\n var $targetElement = (0, _renderer.default)(target);\r\n var $cell;\r\n if (\"cell\" === elementType) {\r\n $cell = $targetElement.closest(\".\".concat(ROW_CLASS, \" > td\"))\r\n } else {\r\n $cell = $targetElement.children().not(\".\" + COMMAND_EXPAND_CLASS).first()\r\n }\r\n return $cell\r\n },\r\n _getRowsViewElement: function() {\r\n var rowsView = this.getView(\"rowsView\");\r\n return rowsView && rowsView.element()\r\n },\r\n isKeyboardEnabled: function() {\r\n return this.option(\"keyboardNavigation.enabled\")\r\n },\r\n _processCanceledEditCellPosition: function(rowIndex, columnIndex) {\r\n if (this._canceledCellPosition) {\r\n var isCanceled = this._canceledCellPosition.rowIndex === rowIndex && this._canceledCellPosition.columnIndex === columnIndex;\r\n this._canceledCellPosition = null;\r\n return isCanceled\r\n }\r\n }\r\n});\r\nvar _default = {\r\n defaultOptions: function() {\r\n return {\r\n useLegacyKeyboardNavigation: false,\r\n keyboardNavigation: {\r\n enabled: true,\r\n enterKeyAction: \"startEdit\",\r\n enterKeyDirection: \"none\",\r\n editOnKeyPress: false\r\n }\r\n }\r\n },\r\n controllers: {\r\n keyboardNavigation: KeyboardNavigationController\r\n },\r\n extenders: {\r\n views: {\r\n rowsView: {\r\n _rowClick: function(e) {\r\n var editRowIndex = this.getController(\"editing\").getEditRowIndex();\r\n var keyboardController = this.getController(\"keyboardNavigation\");\r\n if (editRowIndex === e.rowIndex) {\r\n keyboardController.setCellFocusType()\r\n }\r\n var needTriggerPointerEventHandler = isMobile() && this.option(\"focusedRowEnabled\");\r\n if (needTriggerPointerEventHandler) {\r\n this._triggerPointerDownEventHandler(e)\r\n }\r\n this.callBase.apply(this, arguments)\r\n },\r\n _triggerPointerDownEventHandler: function(e) {\r\n var originalEvent = e.event.originalEvent;\r\n if (originalEvent) {\r\n var keyboardController = this.getController(\"keyboardNavigation\");\r\n var $cell = (0, _renderer.default)(originalEvent.target);\r\n var columnIndex = this.getCellIndex($cell);\r\n var column = this.getController(\"columns\").getVisibleColumns()[columnIndex];\r\n var row = this.getController(\"data\").items()[e.rowIndex];\r\n if (keyboardController._isAllowEditing(row, column)) {\r\n var eventArgs = (0, _index.createEvent)(originalEvent, {\r\n currentTarget: originalEvent.target\r\n });\r\n keyboardController._pointerEventHandler(eventArgs)\r\n }\r\n }\r\n },\r\n renderFocusState: function(preventScroll) {\r\n var keyboardController = this.getController(\"keyboardNavigation\");\r\n var $rowsViewElement = this.element();\r\n if ($rowsViewElement && !(0, _selectors.focused)($rowsViewElement)) {\r\n $rowsViewElement.attr(\"tabindex\", null)\r\n }\r\n var rowIndex = keyboardController.getVisibleRowIndex();\r\n if (!(0, _type.isDefined)(rowIndex) || rowIndex < 0) {\r\n rowIndex = 0\r\n }\r\n var cellElements = this.getCellElements(rowIndex);\r\n if (keyboardController.isKeyboardEnabled() && cellElements.length) {\r\n this.updateFocusElementTabIndex(cellElements, preventScroll)\r\n }\r\n },\r\n updateFocusElementTabIndex: function(cellElements) {\r\n var keyboardController = this.getController(\"keyboardNavigation\");\r\n var $row = cellElements.eq(0).parent();\r\n if (isGroupRow($row)) {\r\n keyboardController._applyTabIndexToElement($row)\r\n } else {\r\n var columnIndex = keyboardController.getColumnIndex();\r\n if (!(0, _type.isDefined)(columnIndex) || columnIndex < 0) {\r\n columnIndex = 0\r\n }\r\n this._updateFocusedCellTabIndex(cellElements, columnIndex)\r\n }\r\n },\r\n _updateFocusedCellTabIndex: function(cellElements, columnIndex) {\r\n var keyboardController = this.getController(\"keyboardNavigation\");\r\n var cellElementsLength = cellElements ? cellElements.length : -1;\r\n var updateCellTabIndex = function($cell) {\r\n var isMasterDetailCell = keyboardController._isMasterDetailCell($cell);\r\n var isValidCell = keyboardController._isCellValid($cell);\r\n if (!isMasterDetailCell && isValidCell && isCellElement($cell)) {\r\n keyboardController._applyTabIndexToElement($cell);\r\n keyboardController.setCellFocusType();\r\n return true\r\n }\r\n };\r\n var $cell = cellElements.filter(\"[aria-colindex='\".concat(columnIndex + 1, \"']\"));\r\n if ($cell.length) {\r\n updateCellTabIndex($cell)\r\n } else {\r\n if (cellElementsLength <= columnIndex) {\r\n columnIndex = cellElementsLength - 1\r\n }\r\n for (var i = columnIndex; i < cellElementsLength; ++i) {\r\n if (updateCellTabIndex((0, _renderer.default)(cellElements[i]))) {\r\n break\r\n }\r\n }\r\n }\r\n },\r\n renderDelayedTemplates: function(change) {\r\n this.callBase.apply(this, arguments);\r\n this._renderFocusByChange(change)\r\n },\r\n _renderFocusByChange: function(change) {\r\n if (!change || !change.repaintChangesOnly) {\r\n var preventScroll = shouldPreventScroll(this);\r\n this.renderFocusState(preventScroll)\r\n }\r\n },\r\n _renderCore: function(change) {\r\n this.callBase.apply(this, arguments);\r\n this._renderFocusByChange(change)\r\n },\r\n _editCellPrepared: function($cell) {\r\n var editorInstance = this._getEditorInstance($cell);\r\n var keyboardController = this.getController(\"keyboardNavigation\");\r\n var isEditingNavigationMode = keyboardController && keyboardController._isFastEditingStarted();\r\n if (editorInstance && isEditingNavigationMode) {\r\n this._handleEditingNavigationMode(editorInstance)\r\n }\r\n this.callBase.apply(this, arguments)\r\n },\r\n _handleEditingNavigationMode: function(editorInstance) {\r\n [\"downArrow\", \"upArrow\"].forEach(function(keyName) {\r\n var originalKeyHandler = editorInstance._supportedKeys()[keyName];\r\n editorInstance.registerKeyHandler(keyName, function(e) {\r\n var isDropDownOpened = \"true\" === editorInstance._input().attr(\"aria-expanded\");\r\n if (isDropDownOpened) {\r\n return originalKeyHandler && originalKeyHandler.call(editorInstance, e)\r\n }\r\n })\r\n });\r\n editorInstance.registerKeyHandler(\"leftArrow\", _common.noop);\r\n editorInstance.registerKeyHandler(\"rightArrow\", _common.noop);\r\n var isDateBoxWithMask = editorInstance.NAME === DATEBOX_WIDGET_NAME && editorInstance.option(\"useMaskBehavior\");\r\n if (isDateBoxWithMask) {\r\n editorInstance.registerKeyHandler(\"enter\", _common.noop)\r\n }\r\n },\r\n _getEditorInstance: function($cell) {\r\n var $editor = $cell.find(\".dx-texteditor\").eq(0);\r\n return _uiGrid_core2.default.getWidgetInstance($editor)\r\n }\r\n }\r\n },\r\n controllers: {\r\n editing: {\r\n editCell: function(rowIndex, columnIndex) {\r\n var keyboardController = this.getController(\"keyboardNavigation\");\r\n if (keyboardController._processCanceledEditCellPosition(rowIndex, columnIndex)) {\r\n return false\r\n }\r\n var isCellEditing = this.callBase(rowIndex, columnIndex);\r\n if (isCellEditing) {\r\n keyboardController.setupFocusedView()\r\n }\r\n return isCellEditing\r\n },\r\n editRow: function(rowIndex) {\r\n var keyboardController = this.getController(\"keyboardNavigation\");\r\n var visibleColumnIndex = keyboardController.getVisibleColumnIndex();\r\n var column = this._columnsController.getVisibleColumns()[visibleColumnIndex];\r\n if (column && column.type || this.option(\"editing.mode\") === EDIT_MODE_FORM) {\r\n keyboardController._resetFocusedCell()\r\n }\r\n this.callBase(rowIndex)\r\n },\r\n addRow: function(parentKey) {\r\n var keyboardController = this.getController(\"keyboardNavigation\");\r\n keyboardController.setupFocusedView();\r\n keyboardController.setCellFocusType();\r\n return this.callBase.apply(this, arguments)\r\n },\r\n getFocusedCellInRow: function(rowIndex) {\r\n var keyboardNavigationController = this.getController(\"keyboardNavigation\");\r\n var $cell = this.callBase(rowIndex);\r\n if (keyboardNavigationController.isKeyboardEnabled() && keyboardNavigationController._focusedCellPosition.rowIndex === rowIndex) {\r\n var $focusedCell = keyboardNavigationController._getFocusedCell();\r\n if (isElementDefined($focusedCell) && !$focusedCell.hasClass(COMMAND_EDIT_CLASS)) {\r\n $cell = $focusedCell\r\n }\r\n }\r\n return $cell\r\n },\r\n _processCanceledEditingCell: function() {\r\n var _this8 = this;\r\n this.closeEditCell().done(function() {\r\n var keyboardNavigation = _this8.getController(\"keyboardNavigation\");\r\n keyboardNavigation._updateFocus()\r\n })\r\n },\r\n init: function() {\r\n this.callBase();\r\n this._keyboardNavigationController = this.getController(\"keyboardNavigation\")\r\n },\r\n closeEditCell: function() {\r\n var keyboardNavigation = this._keyboardNavigationController;\r\n keyboardNavigation._fastEditingStarted = false;\r\n var result = this.callBase.apply(this, arguments);\r\n keyboardNavigation._updateFocus();\r\n return result\r\n },\r\n _delayedInputFocus: function() {\r\n this._keyboardNavigationController._isNeedScroll = true;\r\n this.callBase.apply(this, arguments)\r\n },\r\n _isEditingStart: function() {\r\n var keyboardNavigation = this.getController(\"keyboardNavigation\");\r\n var cancel = this.callBase.apply(this, arguments);\r\n if (cancel && !keyboardNavigation._isNeedFocus) {\r\n var $cell = keyboardNavigation._getFocusedCell();\r\n keyboardNavigation._focus($cell, true)\r\n }\r\n return cancel;\r\n }\r\n },\r\n data: {\r\n _correctRowIndices: function(getRowIndexCorrection) {\r\n var that = this;\r\n var keyboardNavigationController = that.getController(\"keyboardNavigation\");\r\n var editorFactory = that.getController(\"editorFactory\");\r\n var focusedCellPosition = keyboardNavigationController._focusedCellPosition;\r\n that.callBase.apply(that, arguments);\r\n if (focusedCellPosition && focusedCellPosition.rowIndex >= 0) {\r\n var focusedRowIndexCorrection = getRowIndexCorrection(focusedCellPosition.rowIndex);\r\n if (focusedRowIndexCorrection) {\r\n focusedCellPosition.rowIndex += focusedRowIndexCorrection;\r\n editorFactory.refocus()\r\n }\r\n }\r\n }\r\n },\r\n adaptiveColumns: {\r\n _showHiddenCellsInView: function(_ref) {\r\n var viewName = _ref.viewName,\r\n $cells = _ref.$cells,\r\n isCommandColumn = _ref.isCommandColumn;\r\n this.callBase.apply(this, arguments);\r\n viewName === COLUMN_HEADERS_VIEW && !isCommandColumn && $cells.each(function(_, cellElement) {\r\n var $cell = (0, _renderer.default)(cellElement);\r\n isCellInHeaderRow($cell) && $cell.attr(\"tabindex\", 0)\r\n })\r\n },\r\n _hideVisibleCellInView: function(_ref2) {\r\n var viewName = _ref2.viewName,\r\n $cell = _ref2.$cell,\r\n isCommandColumn = _ref2.isCommandColumn;\r\n this.callBase.apply(this, arguments);\r\n if (viewName === COLUMN_HEADERS_VIEW && !isCommandColumn && isCellInHeaderRow($cell)) {\r\n $cell.removeAttr(\"tabindex\")\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.export_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 _extend = require(\"../../core/utils/extend\");\r\nvar _default = {\r\n _getEmptyCell: function() {\r\n return {\r\n text: \"\",\r\n value: void 0,\r\n colspan: 1,\r\n rowspan: 1\r\n }\r\n },\r\n _defaultSetter: function(value) {\r\n return !value ? 1 : value\r\n },\r\n _cloneItem: function(item) {\r\n return (0, _extend.extend)({}, item, this._getEmptyCell())\r\n },\r\n _prepareItems: function(items) {\r\n var that = this;\r\n var resultItems = [];\r\n var cols = (items[0] || []).reduce(function(sum, item) {\r\n return sum + that._defaultSetter(item.colspan)\r\n }, 0);\r\n var getItem = function(items) {\r\n var rowIndex = 0;\r\n var cellIndex = 0;\r\n return function() {\r\n var row = items[rowIndex] || [];\r\n var item = row[cellIndex++];\r\n if (cellIndex >= row.length) {\r\n rowIndex++;\r\n cellIndex = 0\r\n }\r\n if (item) {\r\n item.colspan = that._defaultSetter(item.colspan);\r\n item.rowspan = that._defaultSetter(item.rowspan)\r\n }\r\n return item\r\n }\r\n }(items);\r\n\r\n function addItem(rowIndex, cellIndex, item) {\r\n var row = resultItems[rowIndex] = resultItems[rowIndex] || [];\r\n row[cellIndex] = item;\r\n if (item.colspan > 1 || item.rowspan > 1) {\r\n var clone = that._cloneItem(item);\r\n for (var c = 1; c < item.colspan; c++) {\r\n addItem(rowIndex, cellIndex + c, clone)\r\n }\r\n for (var r = 1; r < item.rowspan; r++) {\r\n for (var _c = 0; _c < item.colspan; _c++) {\r\n addItem(rowIndex + r, cellIndex + _c, clone)\r\n }\r\n }\r\n }\r\n }\r\n var item = getItem();\r\n var rowIndex = 0;\r\n while (item) {\r\n for (var cellIndex = 0; cellIndex < cols; cellIndex++) {\r\n if (!item) {\r\n break\r\n }\r\n if (resultItems[rowIndex] && resultItems[rowIndex][cellIndex]) {\r\n continue\r\n }\r\n addItem(rowIndex, cellIndex, item);\r\n cellIndex += item.colspan - 1;\r\n item = getItem()\r\n }\r\n rowIndex++\r\n }\r\n return resultItems\r\n }\r\n};\r\nexports.default = _default;\r\nmodule.exports = exports.default;\r\n","/**\r\n * DevExtreme (ui/grid_core/ui.grid_core.focus.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 _uiGrid_core = _interopRequireDefault(require(\"./ui.grid_core.modules\"));\r\nvar _iterator = require(\"../../core/utils/iterator\");\r\nvar _uiGrid_core2 = _interopRequireDefault(require(\"./ui.grid_core.utils\"));\r\nvar _common = require(\"../../core/utils/common\");\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 ROW_FOCUSED_CLASS = \"dx-row-focused\";\r\nvar FOCUSED_ROW_SELECTOR = \".dx-row.\" + ROW_FOCUSED_CLASS;\r\nvar TABLE_POSTFIX_CLASS = \"table\";\r\nvar CELL_FOCUS_DISABLED_CLASS = \"dx-cell-focus-disabled\";\r\nvar FocusController = _uiGrid_core.default.ViewController.inherit(function() {\r\n return {\r\n init: function() {\r\n this._dataController = this.getController(\"data\");\r\n this._keyboardController = this.getController(\"keyboardNavigation\");\r\n this.component._optionsByReference.focusedRowKey = true\r\n },\r\n optionChanged: function(args) {\r\n if (\"focusedRowIndex\" === args.name) {\r\n var focusedRowKey = this.option(\"focusedRowKey\");\r\n this._focusRowByIndex(args.value);\r\n this._triggerFocusedRowChangedIfNeed(focusedRowKey, args.value);\r\n args.handled = true\r\n } else {\r\n if (\"focusedRowKey\" === args.name) {\r\n var focusedRowIndex = this.option(\"focusedRowIndex\");\r\n this._focusRowByKey(args.value);\r\n this._triggerFocusedRowChangedIfNeed(args.value, focusedRowIndex);\r\n args.handled = true\r\n } else {\r\n if (\"focusedColumnIndex\" === args.name) {\r\n args.handled = true\r\n } else {\r\n if (\"focusedRowEnabled\" === args.name) {\r\n args.handled = true\r\n } else {\r\n if (\"autoNavigateToFocusedRow\" === args.name) {\r\n args.handled = true\r\n } else {\r\n this.callBase(args)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n _triggerFocusedRowChangedIfNeed: function(focusedRowKey, focusedRowIndex) {\r\n var focusedRowIndexByKey = this.getFocusedRowIndexByKey(focusedRowKey);\r\n if (focusedRowIndex === focusedRowIndexByKey) {\r\n var rowIndex = this._dataController.getRowIndexByKey(focusedRowKey);\r\n if (rowIndex >= 0) {\r\n var $rowElement = (0, _renderer.default)(this.getView(\"rowsView\").getRowElement(rowIndex));\r\n this.getController(\"keyboardNavigation\")._fireFocusedRowChanged($rowElement, focusedRowIndex)\r\n }\r\n }\r\n },\r\n isAutoNavigateToFocusedRow: function() {\r\n return \"infinite\" !== this.option(\"scrolling.mode\") && this.option(\"autoNavigateToFocusedRow\")\r\n },\r\n _focusRowByIndex: function(index) {\r\n if (!this.option(\"focusedRowEnabled\")) {\r\n return\r\n }\r\n index = void 0 !== index ? index : this.option(\"focusedRowIndex\");\r\n if (index < 0) {\r\n if (this.isAutoNavigateToFocusedRow()) {\r\n this._resetFocusedRow()\r\n }\r\n } else {\r\n this._focusRowByIndexCore(index)\r\n }\r\n },\r\n _focusRowByIndexCore: function(index) {\r\n var _this = this;\r\n var dataController = this.getController(\"data\");\r\n var pageSize = dataController.pageSize();\r\n var setKeyByIndex = function() {\r\n if (_this._isValidFocusedRowIndex(index)) {\r\n var visibleIndex = index - dataController.getRowIndexOffset(true);\r\n var lastItemIndex = dataController._getLastItemIndex();\r\n var rowIndex = Math.min(visibleIndex, lastItemIndex);\r\n var focusedRowKey = dataController.getKeyByRowIndex(rowIndex, true);\r\n if ((0, _type.isDefined)(focusedRowKey) && !_this.isRowFocused(focusedRowKey)) {\r\n _this.option(\"focusedRowKey\", focusedRowKey)\r\n }\r\n }\r\n };\r\n if (pageSize >= 0) {\r\n if (!this._isLocalRowIndex(index)) {\r\n var pageIndex = Math.floor(index / dataController.pageSize());\r\n (0, _deferred.when)(dataController.pageIndex(pageIndex), dataController.waitReady()).done(function() {\r\n setKeyByIndex()\r\n })\r\n } else {\r\n setKeyByIndex()\r\n }\r\n }\r\n },\r\n _isLocalRowIndex: function(index) {\r\n var dataController = this.getController(\"data\");\r\n var isVirtualScrolling = this.getController(\"keyboardNavigation\")._isVirtualScrolling();\r\n if (isVirtualScrolling) {\r\n var pageIndex = Math.floor(index / dataController.pageSize());\r\n var virtualItems = dataController.virtualItemsCount();\r\n var virtualItemsBegin = virtualItems ? virtualItems.begin : -1;\r\n var visibleRowsCount = dataController.getVisibleRows().length + dataController.getRowIndexOffset();\r\n var visiblePagesCount = Math.ceil(visibleRowsCount / dataController.pageSize());\r\n return virtualItemsBegin <= index && visiblePagesCount > pageIndex\r\n }\r\n return true\r\n },\r\n _setFocusedRowKeyByIndex: function(index) {\r\n var dataController = this.getController(\"data\");\r\n if (this._isValidFocusedRowIndex(index)) {\r\n var rowIndex = Math.min(index - dataController.getRowIndexOffset(), dataController.items().length - 1);\r\n var focusedRowKey = dataController.getKeyByRowIndex(rowIndex);\r\n if ((0, _type.isDefined)(focusedRowKey) && !this.isRowFocused(focusedRowKey)) {\r\n this.option(\"focusedRowKey\", focusedRowKey)\r\n }\r\n }\r\n },\r\n _focusRowByKey: function(key) {\r\n if (!(0, _type.isDefined)(key)) {\r\n this._resetFocusedRow()\r\n } else {\r\n this._navigateToRow(key, true)\r\n }\r\n },\r\n _resetFocusedRow: function() {\r\n var focusedRowKey = this.option(\"focusedRowKey\");\r\n var isFocusedRowKeyDefined = (0, _type.isDefined)(focusedRowKey);\r\n if (!isFocusedRowKeyDefined && this.option(\"focusedRowIndex\") < 0) {\r\n return\r\n }\r\n var keyboardController = this.getController(\"keyboardNavigation\");\r\n if (isFocusedRowKeyDefined) {\r\n this.option(\"focusedRowKey\", void 0)\r\n }\r\n keyboardController.setFocusedRowIndex(-1);\r\n this.option(\"focusedRowIndex\", -1);\r\n this.getController(\"data\").updateItems({\r\n changeType: \"updateFocusedRow\",\r\n focusedRowKey: void 0\r\n });\r\n keyboardController._fireFocusedRowChanged(void 0, -1)\r\n },\r\n _isValidFocusedRowIndex: function(rowIndex) {\r\n var dataController = this.getController(\"data\");\r\n var row = dataController.getVisibleRows()[rowIndex];\r\n return !row || \"data\" === row.rowType || \"group\" === row.rowType\r\n },\r\n publicMethods: function() {\r\n return [\"navigateToRow\", \"isRowFocused\"]\r\n },\r\n navigateToRow: function(key) {\r\n if (!this.isAutoNavigateToFocusedRow()) {\r\n this.option(\"focusedRowIndex\", -1)\r\n }\r\n this._navigateToRow(key)\r\n },\r\n _navigateToRow: function(key, needFocusRow) {\r\n var that = this;\r\n var dataController = that.getController(\"data\");\r\n var isAutoNavigate = that.isAutoNavigateToFocusedRow();\r\n var d = new _deferred.Deferred;\r\n if (void 0 === key || !dataController.dataSource()) {\r\n return d.reject().promise()\r\n }\r\n var rowIndexByKey = that.getFocusedRowIndexByKey(key);\r\n if (!isAutoNavigate && needFocusRow || rowIndexByKey >= 0) {\r\n that._navigateTo(key, d, needFocusRow)\r\n } else {\r\n dataController.getPageIndexByKey(key).done(function(pageIndex) {\r\n if (pageIndex < 0) {\r\n d.resolve(-1);\r\n return\r\n }\r\n if (pageIndex === dataController.pageIndex()) {\r\n dataController.reload().done(function() {\r\n if (that.isRowFocused(key)) {\r\n d.resolve(that.getFocusedRowIndexByKey(key))\r\n } else {\r\n that._navigateTo(key, d, needFocusRow)\r\n }\r\n }).fail(d.reject)\r\n } else {\r\n dataController.pageIndex(pageIndex).done(function() {\r\n that._navigateTo(key, d, needFocusRow)\r\n }).fail(d.reject)\r\n }\r\n }).fail(d.reject)\r\n }\r\n return d.promise()\r\n },\r\n _navigateTo: function(key, deferred, needFocusRow) {\r\n var visibleRowIndex = this.getController(\"data\").getRowIndexByKey(key);\r\n var isVirtualRowRenderingMode = \"virtual\" === this.option(\"scrolling.rowRenderingMode\");\r\n var isAutoNavigate = this.isAutoNavigateToFocusedRow();\r\n if (isAutoNavigate && isVirtualRowRenderingMode && visibleRowIndex < 0) {\r\n this._navigateToVirtualRow(key, deferred, needFocusRow)\r\n } else {\r\n this._navigateToVisibleRow(key, deferred, needFocusRow)\r\n }\r\n },\r\n _navigateToVisibleRow: function(key, deferred, needFocusRow) {\r\n if (needFocusRow) {\r\n this._triggerUpdateFocusedRow(key, deferred)\r\n } else {\r\n this.getView(\"rowsView\").scrollToRowElement(key)\r\n }\r\n },\r\n _navigateToVirtualRow: function(key, deferred, needFocusRow) {\r\n var that = this;\r\n var dataController = this.getController(\"data\");\r\n var rowsScrollController = dataController._rowsScrollController;\r\n var rowIndex = _uiGrid_core2.default.getIndexByKey(key, dataController.items(true));\r\n var scrollable = that.getView(\"rowsView\").getScrollable();\r\n if (rowsScrollController && scrollable && rowIndex >= 0) {\r\n var focusedRowIndex = rowIndex + dataController.getRowIndexOffset(true);\r\n var offset = rowsScrollController.getItemOffset(focusedRowIndex);\r\n if (needFocusRow) {\r\n var triggerUpdateFocusedRow = function triggerUpdateFocusedRow() {\r\n that.component.off(\"contentReady\", triggerUpdateFocusedRow);\r\n that._triggerUpdateFocusedRow(key, deferred)\r\n };\r\n that.component.on(\"contentReady\", triggerUpdateFocusedRow)\r\n }\r\n scrollable.scrollTo({\r\n y: offset\r\n })\r\n }\r\n },\r\n _triggerUpdateFocusedRow: function(key, deferred) {\r\n var dataController = this.getController(\"data\");\r\n var focusedRowIndex = this.getFocusedRowIndexByKey(key);\r\n if (this._isValidFocusedRowIndex(focusedRowIndex)) {\r\n if (this.option(\"focusedRowEnabled\")) {\r\n dataController.updateItems({\r\n changeType: \"updateFocusedRow\",\r\n focusedRowKey: key\r\n })\r\n } else {\r\n this.getView(\"rowsView\").scrollToRowElement(key)\r\n }\r\n this.getController(\"keyboardNavigation\").setFocusedRowIndex(focusedRowIndex);\r\n deferred && deferred.resolve(focusedRowIndex)\r\n } else {\r\n deferred && deferred.resolve(-1)\r\n }\r\n },\r\n getFocusedRowIndexByKey: function(key) {\r\n var dataController = this.getController(\"data\");\r\n var loadedRowIndex = dataController.getRowIndexByKey(key, true);\r\n return loadedRowIndex >= 0 ? loadedRowIndex + dataController.getRowIndexOffset(true) : -1\r\n },\r\n _focusRowByKeyOrIndex: function() {\r\n var _this2 = this;\r\n var focusedRowKey = this.option(\"focusedRowKey\");\r\n var currentFocusedRowIndex = this.option(\"focusedRowIndex\");\r\n var keyboardController = this.getController(\"keyboardNavigation\");\r\n var dataController = this.getController(\"data\");\r\n if ((0, _type.isDefined)(focusedRowKey)) {\r\n var visibleRowIndex = dataController.getRowIndexByKey(focusedRowKey);\r\n if (visibleRowIndex >= 0) {\r\n if (keyboardController._isVirtualScrolling()) {\r\n currentFocusedRowIndex = visibleRowIndex + dataController.getRowIndexOffset()\r\n }\r\n keyboardController.setFocusedRowIndex(currentFocusedRowIndex);\r\n this._triggerUpdateFocusedRow(focusedRowKey)\r\n } else {\r\n this._navigateToRow(focusedRowKey, true).done(function(focusedRowIndex) {\r\n if (currentFocusedRowIndex >= 0 && focusedRowIndex < 0) {\r\n _this2._focusRowByIndex()\r\n }\r\n })\r\n }\r\n } else {\r\n if (currentFocusedRowIndex >= 0) {\r\n this.getController(\"focus\")._focusRowByIndex(currentFocusedRowIndex)\r\n }\r\n }\r\n },\r\n isRowFocused: function(key) {\r\n var focusedRowKey = this.option(\"focusedRowKey\");\r\n if ((0, _type.isDefined)(focusedRowKey)) {\r\n return (0, _common.equalByValue)(key, this.option(\"focusedRowKey\"))\r\n }\r\n },\r\n updateFocusedRow: function(change) {\r\n var that = this;\r\n var focusedRowIndex = that._dataController.getRowIndexByKey(change.focusedRowKey);\r\n var rowsView = that.getView(\"rowsView\");\r\n var $tableElement;\r\n (0, _iterator.each)(rowsView.getTableElements(), function(index, element) {\r\n var _change$items;\r\n var isMainTable = 0 === index;\r\n $tableElement = (0, _renderer.default)(element);\r\n that._clearPreviousFocusedRow($tableElement, focusedRowIndex);\r\n that._prepareFocusedRow({\r\n changedItem: null === change || void 0 === change ? void 0 : null === (_change$items = change.items) || void 0 === _change$items ? void 0 : _change$items[focusedRowIndex],\r\n $tableElement: $tableElement,\r\n focusedRowIndex: focusedRowIndex,\r\n isMainTable: isMainTable\r\n })\r\n })\r\n },\r\n _clearPreviousFocusedRow: function($tableElement, focusedRowIndex) {\r\n var _this3 = this;\r\n var isNotMasterDetailFocusedRow = function(_, focusedRow) {\r\n var $focusedRowTable = (0, _renderer.default)(focusedRow).closest(\".\".concat(_this3.addWidgetPrefix(TABLE_POSTFIX_CLASS)));\r\n return $tableElement.is($focusedRowTable)\r\n };\r\n var $prevRowFocusedElement = $tableElement.find(FOCUSED_ROW_SELECTOR).filter(isNotMasterDetailFocusedRow);\r\n $prevRowFocusedElement.removeClass(ROW_FOCUSED_CLASS).removeClass(CELL_FOCUS_DISABLED_CLASS).removeAttr(\"tabindex\");\r\n $prevRowFocusedElement.children(\"td\").removeAttr(\"tabindex\");\r\n if (0 !== focusedRowIndex) {\r\n var $firstRow = (0, _renderer.default)(this.getView(\"rowsView\").getRowElement(0));\r\n $firstRow.removeClass(CELL_FOCUS_DISABLED_CLASS).removeAttr(\"tabIndex\")\r\n }\r\n },\r\n _prepareFocusedRow: function(options) {\r\n var $row;\r\n var changedItem = options.changedItem;\r\n if (changedItem && (\"data\" === changedItem.rowType || \"group\" === changedItem.rowType)) {\r\n var focusedRowIndex = options.focusedRowIndex;\r\n var $tableElement = options.$tableElement;\r\n var isMainTable = options.isMainTable;\r\n var tabIndex = this.option(\"tabindex\") || 0;\r\n var rowsView = this.getView(\"rowsView\");\r\n $row = (0, _renderer.default)(rowsView._getRowElements($tableElement).eq(focusedRowIndex));\r\n $row.addClass(ROW_FOCUSED_CLASS).attr(\"tabindex\", tabIndex);\r\n if (isMainTable) {\r\n rowsView.scrollToElementVertically($row)\r\n }\r\n }\r\n return $row\r\n }\r\n }\r\n}());\r\nvar _default = {\r\n defaultOptions: function() {\r\n return {\r\n focusedRowEnabled: false,\r\n autoNavigateToFocusedRow: true,\r\n focusedRowKey: void 0,\r\n focusedRowIndex: -1,\r\n focusedColumnIndex: -1\r\n }\r\n },\r\n controllers: {\r\n focus: FocusController\r\n },\r\n extenders: {\r\n controllers: {\r\n keyboardNavigation: {\r\n init: function() {\r\n var rowIndex = this.option(\"focusedRowIndex\");\r\n var columnIndex = this.option(\"focusedColumnIndex\");\r\n this.createAction(\"onFocusedRowChanging\", {\r\n excludeValidators: [\"disabled\", \"readOnly\"]\r\n });\r\n this.createAction(\"onFocusedRowChanged\", {\r\n excludeValidators: [\"disabled\", \"readOnly\"]\r\n });\r\n this.createAction(\"onFocusedCellChanging\", {\r\n excludeValidators: [\"disabled\", \"readOnly\"]\r\n });\r\n this.createAction(\"onFocusedCellChanged\", {\r\n excludeValidators: [\"disabled\", \"readOnly\"]\r\n });\r\n this.callBase();\r\n this.setRowFocusType();\r\n this._focusedCellPosition = {};\r\n if ((0, _type.isDefined)(rowIndex)) {\r\n this._focusedCellPosition.rowIndex = this.option(\"focusedRowIndex\")\r\n }\r\n if ((0, _type.isDefined)(columnIndex)) {\r\n this._focusedCellPosition.columnIndex = this.option(\"focusedColumnIndex\")\r\n }\r\n },\r\n setFocusedRowIndex: function(rowIndex) {\r\n var dataController = this.getController(\"data\");\r\n this.callBase(rowIndex);\r\n var visibleRowIndex = rowIndex - dataController.getRowIndexOffset();\r\n var visibleRow = dataController.getVisibleRows()[visibleRowIndex];\r\n if (!visibleRow || !visibleRow.isNewRow) {\r\n this.option(\"focusedRowIndex\", rowIndex)\r\n }\r\n },\r\n setFocusedColumnIndex: function(columnIndex) {\r\n this.callBase(columnIndex);\r\n this.option(\"focusedColumnIndex\", columnIndex)\r\n },\r\n _escapeKeyHandler: function(eventArgs, isEditing) {\r\n if (isEditing || !this.option(\"focusedRowEnabled\")) {\r\n this.callBase(eventArgs, isEditing);\r\n return\r\n }\r\n if (this.isCellFocusType()) {\r\n this.setRowFocusType();\r\n this._focus(this._getCellElementFromTarget(eventArgs.originalEvent.target), true)\r\n }\r\n },\r\n _updateFocusedCellPosition: function($cell, direction) {\r\n var prevRowIndex = this.option(\"focusedRowIndex\");\r\n var prevColumnIndex = this.option(\"focusedColumnIndex\");\r\n var position = this.callBase($cell, direction);\r\n if (position && position.columnIndex >= 0) {\r\n this._fireFocusedCellChanged($cell, prevColumnIndex, prevRowIndex)\r\n }\r\n }\r\n },\r\n editorFactory: {\r\n renderFocusOverlay: function($element, hideBorder) {\r\n var keyboardController = this.getController(\"keyboardNavigation\");\r\n var focusedRowEnabled = this.option(\"focusedRowEnabled\");\r\n var editingController = this.getController(\"editing\");\r\n var isRowElement = \"row\" === keyboardController._getElementType($element);\r\n var $cell;\r\n if (!focusedRowEnabled || !keyboardController.isRowFocusType() || editingController.isEditing()) {\r\n this.callBase($element, hideBorder)\r\n } else {\r\n if (focusedRowEnabled) {\r\n if (isRowElement && !$element.hasClass(ROW_FOCUSED_CLASS)) {\r\n $cell = keyboardController.getFirstValidCellInRow($element);\r\n keyboardController.focus($cell)\r\n }\r\n }\r\n }\r\n }\r\n },\r\n columns: {\r\n getSortDataSourceParameters: function(_, sortByKey) {\r\n var _this4 = this;\r\n var result = this.callBase.apply(this, arguments);\r\n var dataController = this.getController(\"data\");\r\n var dataSource = dataController._dataSource;\r\n var store = dataController.store();\r\n var key = store && store.key();\r\n var remoteOperations = dataSource && dataSource.remoteOperations() || {};\r\n var isLocalOperations = Object.keys(remoteOperations).every(function(operationName) {\r\n return !remoteOperations[operationName]\r\n });\r\n if (key && (this.option(\"focusedRowEnabled\") && false !== this.getController(\"focus\").isAutoNavigateToFocusedRow() || sortByKey)) {\r\n key = Array.isArray(key) ? key : [key];\r\n var notSortedKeys = key.filter(function(key) {\r\n return !_this4.columnOption(key, \"sortOrder\")\r\n });\r\n if (notSortedKeys.length) {\r\n result = result || [];\r\n if (isLocalOperations) {\r\n result.push({\r\n selector: dataSource.getDataIndexGetter(),\r\n desc: false\r\n })\r\n } else {\r\n notSortedKeys.forEach(function(notSortedKey) {\r\n return result.push({\r\n selector: notSortedKey,\r\n desc: false\r\n })\r\n })\r\n }\r\n }\r\n }\r\n return result\r\n }\r\n },\r\n data: {\r\n _applyChange: function(change) {\r\n if (change && \"updateFocusedRow\" === change.changeType) {\r\n return\r\n }\r\n return this.callBase.apply(this, arguments)\r\n },\r\n _fireChanged: function(e) {\r\n this.callBase(e);\r\n if (this.option(\"focusedRowEnabled\") && this._dataSource) {\r\n var isPartialUpdate = \"update\" === e.changeType && e.repaintChangesOnly;\r\n var isPartialUpdateWithDeleting = isPartialUpdate && e.changeTypes && e.changeTypes.indexOf(\"remove\") >= 0;\r\n if (\"refresh\" === e.changeType && e.items.length || isPartialUpdateWithDeleting) {\r\n this._updatePageIndexes();\r\n this.processUpdateFocusedRow(e)\r\n } else {\r\n if (\"append\" === e.changeType || \"prepend\" === e.changeType) {\r\n this._updatePageIndexes()\r\n }\r\n }\r\n }\r\n },\r\n _updatePageIndexes: function() {\r\n var prevRenderingPageIndex = this._lastRenderingPageIndex || 0;\r\n var renderingPageIndex = this._rowsScrollController ? this._rowsScrollController.pageIndex() : 0;\r\n this._lastRenderingPageIndex = renderingPageIndex;\r\n this._isPagingByRendering = renderingPageIndex !== prevRenderingPageIndex\r\n },\r\n isPagingByRendering: function() {\r\n return this._isPagingByRendering\r\n },\r\n processUpdateFocusedRow: function(e) {\r\n var operationTypes = e.operationTypes || {};\r\n var focusController = this.getController(\"focus\");\r\n var reload = operationTypes.reload,\r\n fullReload = operationTypes.fullReload;\r\n var keyboardController = this.getController(\"keyboardNavigation\");\r\n var isVirtualScrolling = keyboardController._isVirtualScrolling();\r\n var focusedRowKey = this.option(\"focusedRowKey\");\r\n var isAutoNavigate = focusController.isAutoNavigateToFocusedRow();\r\n if (reload && !fullReload && (0, _type.isDefined)(focusedRowKey)) {\r\n focusController._navigateToRow(focusedRowKey, true).done(function(focusedRowIndex) {\r\n if (focusedRowIndex < 0) {\r\n focusController._focusRowByIndex()\r\n }\r\n })\r\n } else {\r\n if (operationTypes.paging && !isVirtualScrolling) {\r\n if (isAutoNavigate) {\r\n var rowIndexByKey = this.getRowIndexByKey(focusedRowKey);\r\n var isValidRowIndexByKey = rowIndexByKey >= 0;\r\n var focusedRowIndex = this.option(\"focusedRowIndex\");\r\n var needFocusRowByIndex = focusedRowIndex >= 0 && (focusedRowIndex === rowIndexByKey || !isValidRowIndexByKey);\r\n if (needFocusRowByIndex) {\r\n focusController._focusRowByIndex()\r\n }\r\n } else {\r\n if (this.getRowIndexByKey(focusedRowKey) < 0) {\r\n this.option(\"focusedRowIndex\", -1)\r\n }\r\n }\r\n } else {\r\n if (operationTypes.fullReload) {\r\n focusController._focusRowByKeyOrIndex()\r\n }\r\n }\r\n }\r\n },\r\n getPageIndexByKey: function(key) {\r\n var that = this;\r\n var d = new _deferred.Deferred;\r\n that.getGlobalRowIndexByKey(key).done(function(globalIndex) {\r\n d.resolve(globalIndex >= 0 ? Math.floor(globalIndex / that.pageSize()) : -1)\r\n }).fail(d.reject);\r\n return d.promise()\r\n },\r\n getGlobalRowIndexByKey: function(key) {\r\n if (this._dataSource.group()) {\r\n return this._calculateGlobalRowIndexByGroupedData(key)\r\n }\r\n return this._calculateGlobalRowIndexByFlatData(key)\r\n },\r\n _calculateGlobalRowIndexByFlatData: function(key, groupFilter, useGroup) {\r\n var that = this;\r\n var deferred = new _deferred.Deferred;\r\n var dataSource = that._dataSource;\r\n var filter = that._generateFilterByKey(key);\r\n dataSource.load({\r\n filter: that._concatWithCombinedFilter(filter),\r\n skip: 0,\r\n take: 1\r\n }).done(function(data) {\r\n if (data.length > 0) {\r\n filter = that._generateOperationFilterByKey(key, data[0], useGroup);\r\n dataSource.load({\r\n filter: that._concatWithCombinedFilter(filter, groupFilter),\r\n skip: 0,\r\n take: 1,\r\n requireTotalCount: true\r\n }).done(function(_, extra) {\r\n deferred.resolve(extra.totalCount)\r\n })\r\n } else {\r\n deferred.resolve(-1)\r\n }\r\n });\r\n return deferred.promise()\r\n },\r\n _concatWithCombinedFilter: function(filter, groupFilter) {\r\n var combinedFilter = this.getCombinedFilter();\r\n return _uiGrid_core2.default.combineFilters([filter, combinedFilter, groupFilter])\r\n },\r\n _generateBooleanFilter: function(selector, value, sortInfo) {\r\n var result;\r\n if (false === value) {\r\n result = [selector, \"=\", sortInfo.desc ? true : null]\r\n } else {\r\n if (true === value ? !sortInfo.desc : sortInfo.desc) {\r\n result = [selector, \"<>\", value]\r\n }\r\n }\r\n return result\r\n },\r\n _generateOperationFilterByKey: function(key, rowData, useGroup) {\r\n var that = this;\r\n var dataSource = that._dataSource;\r\n var filter = that._generateFilterByKey(key, \"<\");\r\n var sort = that._columnsController.getSortDataSourceParameters(!dataSource.remoteOperations().filtering, true);\r\n if (useGroup) {\r\n var group = that._columnsController.getGroupDataSourceParameters(!dataSource.remoteOperations().filtering);\r\n if (group) {\r\n sort = sort ? group.concat(sort) : group\r\n }\r\n }\r\n if (sort) {\r\n sort.slice().reverse().forEach(function(sortInfo) {\r\n var selector = sortInfo.selector;\r\n var getter;\r\n if (\"function\" === typeof selector) {\r\n getter = selector\r\n } else {\r\n getter = that._columnsController.columnOption(selector, \"selector\")\r\n }\r\n var value = getter ? getter(rowData) : rowData[selector];\r\n filter = [\r\n [selector, \"=\", value], \"and\", filter\r\n ];\r\n if (null === value || (0, _type.isBoolean)(value)) {\r\n var booleanFilter = that._generateBooleanFilter(selector, value, sortInfo);\r\n if (booleanFilter) {\r\n filter = [booleanFilter, \"or\", filter]\r\n }\r\n } else {\r\n var filterOperation = sortInfo.desc ? \">\" : \"<\";\r\n var sortFilter = [selector, filterOperation, value];\r\n if (!sortInfo.desc) {\r\n sortFilter = [sortFilter, \"or\", [selector, \"=\", null]]\r\n }\r\n filter = [sortFilter, \"or\", filter]\r\n }\r\n })\r\n }\r\n return filter\r\n },\r\n _generateFilterByKey: function(key, operation) {\r\n var dataSourceKey = this._dataSource.key();\r\n var filter = [];\r\n if (!operation) {\r\n operation = \"=\"\r\n }\r\n if (Array.isArray(dataSourceKey)) {\r\n for (var i = 0; i < dataSourceKey.length; ++i) {\r\n var keyPart = key[dataSourceKey[i]];\r\n if (keyPart) {\r\n if (filter.length > 0) {\r\n filter.push(\"and\")\r\n }\r\n filter.push([dataSourceKey[i], operation, keyPart])\r\n }\r\n }\r\n } else {\r\n filter = [dataSourceKey, operation, key]\r\n }\r\n return filter\r\n },\r\n _getLastItemIndex: function() {\r\n return this.items(true).length - 1\r\n }\r\n },\r\n editing: {\r\n _deleteRowCore: function(rowIndex) {\r\n var _this5 = this;\r\n var deferred = this.callBase.apply(this, arguments);\r\n var dataController = this.getController(\"data\");\r\n var rowKey = dataController.getKeyByRowIndex(rowIndex);\r\n deferred.done(function() {\r\n var rowIndex = dataController.getRowIndexByKey(rowKey);\r\n var visibleRows = dataController.getVisibleRows();\r\n if (rowIndex === -1 && !visibleRows.length) {\r\n _this5.getController(\"focus\")._resetFocusedRow()\r\n }\r\n })\r\n }\r\n }\r\n },\r\n views: {\r\n rowsView: {\r\n _createRow: function(row) {\r\n var $row = this.callBase(row);\r\n if (this.option(\"focusedRowEnabled\") && row) {\r\n if (this.getController(\"focus\").isRowFocused(row.key)) {\r\n $row.addClass(ROW_FOCUSED_CLASS)\r\n }\r\n }\r\n return $row\r\n },\r\n _checkRowKeys: function(options) {\r\n this.callBase.apply(this, arguments);\r\n if (this.option(\"focusedRowEnabled\") && this.option(\"dataSource\")) {\r\n var store = this._dataController.store();\r\n if (store && !store.key()) {\r\n this._dataController.fireError(\"E1042\", \"Row focusing\")\r\n }\r\n }\r\n },\r\n _update: function(change) {\r\n if (\"updateFocusedRow\" === change.changeType) {\r\n if (this.option(\"focusedRowEnabled\")) {\r\n this.getController(\"focus\").updateFocusedRow(change)\r\n }\r\n } else {\r\n this.callBase(change)\r\n }\r\n },\r\n updateFocusElementTabIndex: function($cellElements, preventScroll) {\r\n if (this.option(\"focusedRowEnabled\")) {\r\n this._setFocusedRowElementTabIndex(preventScroll)\r\n } else {\r\n this.callBase($cellElements)\r\n }\r\n },\r\n _setFocusedRowElementTabIndex: function(preventScroll) {\r\n var _this6 = this;\r\n var focusedRowKey = this.option(\"focusedRowKey\");\r\n var tabIndex = this.option(\"tabIndex\") || 0;\r\n var dataController = this._dataController;\r\n var columnsController = this._columnsController;\r\n var rowIndex = dataController.getRowIndexByKey(focusedRowKey);\r\n var columnIndex = this.option(\"focusedColumnIndex\");\r\n var $row = this._findRowElementForTabIndex();\r\n if (!(0, _type.isDefined)(this._scrollToFocusOnResize)) {\r\n this._scrollToFocusOnResize = function() {\r\n _this6.scrollToElementVertically(_this6._findRowElementForTabIndex());\r\n _this6.resizeCompleted.remove(_this6._scrollToFocusOnResize)\r\n }\r\n }\r\n $row.attr(\"tabIndex\", tabIndex);\r\n if (rowIndex >= 0 && !preventScroll) {\r\n if (columnIndex < 0) {\r\n columnIndex = 0\r\n }\r\n rowIndex += dataController.getRowIndexOffset();\r\n columnIndex += columnsController.getColumnIndexOffset();\r\n this.getController(\"keyboardNavigation\").setFocusedCellPosition(rowIndex, columnIndex);\r\n if (this.getController(\"focus\").isAutoNavigateToFocusedRow()) {\r\n var dataSource = dataController.dataSource();\r\n var operationTypes = dataSource && dataSource.operationTypes();\r\n if (operationTypes && !operationTypes.paging && !dataController.isPagingByRendering()) {\r\n this.resizeCompleted.remove(this._scrollToFocusOnResize);\r\n this.resizeCompleted.add(this._scrollToFocusOnResize)\r\n }\r\n }\r\n }\r\n },\r\n _findRowElementForTabIndex: function() {\r\n var focusedRowKey = this.option(\"focusedRowKey\");\r\n var rowIndex = this._dataController.getRowIndexByKey(focusedRowKey);\r\n return (0, _renderer.default)(this.getRowElement(rowIndex >= 0 ? rowIndex : 0))\r\n },\r\n scrollToRowElement: function(key) {\r\n var rowIndex = this.getController(\"data\").getRowIndexByKey(key);\r\n var $row = (0, _renderer.default)(this.getRow(rowIndex));\r\n this.scrollToElementVertically($row)\r\n },\r\n scrollToElementVertically: function($row) {\r\n var scrollable = this.getScrollable();\r\n if (scrollable) {\r\n var position = scrollable.getScrollElementPosition($row, \"vertical\");\r\n scrollable.scrollTo({\r\n top: position\r\n })\r\n }\r\n }\r\n }\r\n }\r\n }\r\n};\r\nexports.default = _default;\r\nmodule.exports = exports.default;\r\n"],"sourceRoot":""}