devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
74 lines (73 loc) • 3.18 kB
JavaScript
/**
* DevExtreme (esm/__internal/grids/new/card_view/header_panel/controller.js)
* Version: 25.1.3
* Build date: Wed Jun 25 2025
*
* Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
import _extends from "@babel/runtime/helpers/esm/extends";
import $ from "../../../../../core/renderer";
import {
ColumnChooserView
} from "../../grid_core/column_chooser/index";
import {
ColumnsController
} from "../../grid_core/columns_controller/index";
const CLASS = {
hidden: "dx-hidden"
};
export class HeaderPanelController {
constructor(columnsController, columnChooserView) {
this.columnsController = columnsController;
this.columnChooserView = columnChooserView;
this.isColumnDraggable = column => {
const canHide = column.allowHiding && this.columnChooserView.dragModeOpened.peek();
const canReorder = this.canReorder(column);
return canReorder || canHide
};
this.onColumnMove = (column, toIndex, draggingColumnData) => {
const {
columnAfter: columnAfter
} = draggingColumnData;
const needPreserveOrder = !this.canReorder(column);
if (needPreserveOrder) {
this.columnsController.columnOption(column, "visible", true);
return
}
if (void 0 === columnAfter) {
const columnsCount = this.columnsController.columns.peek().length;
this.columnsController.columnOption(column, "visible", true);
this.columnsController.columnOption(column, "visibleIndex", columnsCount);
return
}
this.columnsController.updateColumns((columns => {
const newColumns = [...columns];
newColumns.forEach(((oldColumn, index) => {
const updatedColumn = _extends({}, oldColumn);
if (oldColumn.name === column.name) {
updatedColumn.visibleIndex = columnAfter.visibleIndex;
updatedColumn.visible = true
} else if (oldColumn.visibleIndex >= columnAfter.visibleIndex) {
updatedColumn.visibleIndex = oldColumn.visibleIndex + 1
}
newColumns[index] = updatedColumn
}));
return newColumns
}))
};
this.onPlaceholderPrepared = e => {
const $placeholderElement = $(e.placeholderElement);
const {
column: column
} = e.itemData;
const canReorder = this.canReorder(column);
$placeholderElement.toggleClass(CLASS.hidden, !canReorder)
}
}
canReorder(column) {
const allowColumnReordering = this.columnsController.allowColumnReordering.peek();
return allowColumnReordering && column.allowReordering
}
}
HeaderPanelController.dependencies = [ColumnsController, ColumnChooserView];