UNPKG

devextreme

Version:

JavaScript/TypeScript Component Suite for Responsive Web Development

73 lines (72 loc) 3.12 kB
/** * DevExtreme (esm/__internal/grids/new/card_view/header_panel/controller.js) * Version: 25.2.7 * Build date: Tue May 05 2026 * * Copyright (c) 2012 - 2026 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ 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 = Object.assign({}, 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];