devextreme
Version:
JavaScript/TypeScript Component Suite for Responsive Web Development
70 lines (69 loc) • 2.72 kB
JavaScript
/**
* DevExtreme (esm/__internal/grids/data_grid/ai_assistant/commands/grouping.js)
* Version: 26.1.3
* Build date: Wed Jun 10 2026
*
* Copyright (c) 2012 - 2026 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
import {
defineGridCommand
} from "../../../../grids/grid_core/ai_assistant/commands/defineGridCommand";
import {
z
} from "zod";
const groupingCommandSchema = z.object({
dataField: z.string(),
groupIndex: z.number().int().nonnegative().nullable()
}).strict();
const getGroupingDefaultMessage = (args, column) => {
const columnName = (null === column || void 0 === column ? void 0 : column.caption) ?? args.dataField;
if (null === args.groupIndex) {
return `Ungroup data against "${columnName}".`
}
return `Group data against "${columnName}".`
};
export const groupingCommand = defineGridCommand({
name: "grouping",
description: "Group rows by a column at the given level (0 = outermost). Setting groupIndex to an in-use value shifts the existing column down; gaps auto-collapse. Pass null to ungroup. To replace existing grouping, ungroup each currently grouped column, then group new ones at consecutive indices 0, 1, 2, ...",
schema: groupingCommandSchema,
execute: (component, _ref) => {
let {
success: success,
failure: failure
} = _ref;
return args => {
const columnsController = component.getController("columns");
const column = columnsController.columnOption(args.dataField);
const defaultMessage = getGroupingDefaultMessage(args, column);
if (!column || false === column.allowGrouping) {
return Promise.resolve(failure(defaultMessage))
}
try {
columnsController.columnOption(column.index, "groupIndex", args.groupIndex ?? void 0);
return Promise.resolve(success(defaultMessage))
} catch {
return Promise.resolve(failure(defaultMessage))
}
}
}
});
export const clearGroupingCommand = defineGridCommand({
name: "clearGrouping",
description: "Remove grouping from all columns",
schema: z.object({}).strict(),
execute: (component, _ref2) => {
let {
success: success,
failure: failure
} = _ref2;
return () => {
try {
component.getController("columns").clearGrouping();
return Promise.resolve(success("Clear grouping."))
} catch {
return Promise.resolve(failure("Clear grouping."))
}
}
}
});