import type Column from "./Column.js";
import type { ColumnProperties } from "./Column.js";

export interface GroupColumnProperties extends ColumnProperties {}

/**
 * The `GroupColumn` class works with the [FeatureTable](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/) and provides the underlying logic for grouped column behavior.
 *
 * > [!WARNING]
 * >
 * > This class should be used for observing potential changes. Any configuration and changes to the
 * > columns should be handled via the [TableTemplate](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/support/TableTemplate/) and the [GroupColumnTemplate](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/support/GroupColumnTemplate/) class.
 *
 * ![featuretable group columns](https://developers.arcgis.com/javascript/latest/assets/references/core/widgets/featuretable/group-columns.png)
 *
 * @since 4.24
 * @see [FeatureTable](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/)
 * @see [FeatureTableViewModel](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/FeatureTableViewModel/)
 * @see [FieldColumn](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/FieldColumn/)
 * @see [GroupColumnTemplate](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/support/GroupColumnTemplate/)
 * @see [Sample - FeatureTable with editing enabled](https://developers.arcgis.com/javascript/latest/sample-code/widgets-featuretable-editing/)
 */
export default class GroupColumn extends Column {
  constructor(properties?: GroupColumnProperties);
  /** An array of [columns](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/Grid/Column/) to display as grouped which represent an ordered list of [FeatureTable](https://developers.arcgis.com/javascript/latest/references/core/widgets/FeatureTable/) columns. */
  get columns(): Column[] | null | undefined;
  /** Indicates whether the column is sortable. */
  get sortable(): false;
}