devextreme
Version:
JavaScript/TypeScript Component Suite for Responsive Web Development
128 lines (127 loc) • 5.66 kB
JavaScript
/**
* DevExtreme (esm/__internal/grids/new/card_view/header_panel/view.js)
* Version: 25.2.5
* Build date: Fri Feb 20 2026
*
* Copyright (c) 2012 - 2026 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
import {
computed
} from "../../../../core/state_manager/index";
import {
ColumnsController
} from "../../../../grids/new/grid_core/columns_controller/columns_controller";
import {
View
} from "../../../../grids/new/grid_core/core/view";
import {
KeyboardNavigationController,
NavigationStrategyHorizontalList
} from "../../../../grids/new/grid_core/keyboard_navigation/index";
import {
ColumnChooserController,
ColumnChooserView
} from "../../grid_core/column_chooser/index";
import {
FilterController
} from "../../grid_core/filtering/filter_controller";
import {
HeaderFilterViewController
} from "../../grid_core/filtering/header_filter/view_controller";
import {
SortingController
} from "../../grid_core/sorting_controller/index";
import {
ContextMenuController
} from "../context_menu/index";
import {
OptionsController
} from "../options_controller";
import {
HeaderPanelController
} from "./controller";
import {
HeaderPanel
} from "./header_panel";
export class HeaderPanelView extends View {
constructor(headerPanelController, contextMenuController, sortingController, columnsController, options, headerFilterViewController, keyboardNavigationController, columnChooserController, filterController, columnChooserView) {
super();
this.headerPanelController = headerPanelController;
this.contextMenuController = contextMenuController;
this.sortingController = sortingController;
this.columnsController = columnsController;
this.options = options;
this.headerFilterViewController = headerFilterViewController;
this.keyboardNavigationController = keyboardNavigationController;
this.columnChooserController = columnChooserController;
this.filterController = filterController;
this.columnChooserView = columnChooserView;
this.component = HeaderPanel;
this.navigationStrategy = new NavigationStrategyHorizontalList;
this.showDropzone = computed((() => {
var _this$columnChooserCo;
const allowReordering = this.columnsController.allowColumnReordering.value;
const column = null === (_this$columnChooserCo = this.columnChooserController.draggingItem.value) || void 0 === _this$columnChooserCo ? void 0 : _this$columnChooserCo.column;
if (!column) {
return false
}
const allColumnsHidden = 0 === this.columnsController.visibleColumns.value.length;
const canReorder = allowReordering && column.allowReordering;
return !canReorder || allColumnsHidden
}))
}
getProps() {
return computed((() => ({
visibleColumns: this.columnsController.visibleColumns.value,
kbnEnabled: this.keyboardNavigationController.enabled.value,
navigationStrategy: this.navigationStrategy,
showSortIndexes: this.sortingController.showSortIndexes.value,
onColumnSort: this.onColumnSort.bind(this),
itemTemplate: this.options.template("headerPanel.itemTemplate").value,
onHeaderFilterOpen: this.onHeaderFilterOpen.bind(this),
itemCssClass: this.options.oneWay("headerPanel.itemCssClass").value,
visible: this.options.oneWay("headerPanel.visible").value,
draggingOptions: this.options.oneWay("headerPanel.dragging").value,
sortableConfig: {
onColumnMove: this.headerPanelController.onColumnMove,
showDropzone: this.showDropzone.value,
isColumnDraggable: this.headerPanelController.isColumnDraggable,
onPlaceholderPrepared: this.headerPanelController.onPlaceholderPrepared
},
showContextMenu: this.showContextMenu.bind(this),
openColumnChooser: () => {
this.columnChooserView.show()
},
filterSyncValue: this.filterController.filterSyncValue.value
})))
}
onColumnSort(column, event) {
const mode = this.sortingController.mode.peek();
switch (mode) {
case "none":
return;
case "single":
this.sortingController.onSingleModeSortClick(column, event);
return;
case "multiple":
this.sortingController.onMultipleModeSortClick(column, event);
return;
default:
throw new Error("Unsupported sorting state")
}
}
onHeaderFilterOpen(element, column, onFilterCloseCallback) {
if (!element) {
return
}
this.headerFilterViewController.openPopup(element, column, onFilterCloseCallback)
}
showContextMenu(event, column, columnIndex, onMenuCloseCallback) {
this.contextMenuController.show(event, "headerPanel", {
column: column,
columnIndex: columnIndex
}, onMenuCloseCallback)
}
}
HeaderPanelView.dependencies = [HeaderPanelController, ContextMenuController, SortingController, ColumnsController, OptionsController, HeaderFilterViewController, KeyboardNavigationController, ColumnChooserController, FilterController, ColumnChooserView];