ag-grid-community
Version:
Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue
98 lines (97 loc) • 5.76 kB
TypeScript
import type { BeanCollection } from '../context/context';
import type { AgColumn } from '../entities/agColumn';
import type { ColAggFunc, IAggFunc } from '../entities/colDef';
import type { ShowValuesAsStateValue } from '../entities/colDef-showValuesAs';
import type { ColumnEventType } from '../events';
import type { ColumnPinnedType } from '../interfaces/iColumn';
import type { SortDef, SortDirection, SortType } from '../interfaces/iSort';
export interface ColumnStateParams {
/** True if the column is hidden */
hide?: boolean | null;
/** Width of the column in pixels */
width?: number | null;
/** Column's flex if flex is set */
flex?: number | null;
/** The sort direction of the column */
sort?: SortDirection;
/** The type of sort applied to the column */
sortType?: SortType | null;
/** The order of the sort, if sorting by many columns */
sortIndex?: number | null;
/** The aggregation function applied */
aggFunc?: string | IAggFunc | null;
/**
* The position of this column in the order of value columns when aggregating in pivot mode.
* When aggregating by a single column, any number can be used. When aggregating by multiple
* columns, this determines the order (e.g. `0` for first, `1` for second).
*/
valueIndex?: number | null;
/** True if pivot active */
pivot?: boolean | null;
/** The order of the pivot, if pivoting by many columns */
pivotIndex?: number | null;
/** Set if column is pinned */
pinned?: ColumnPinnedType;
/** True if row group active */
rowGroup?: boolean | null;
/** The order of the row group, if grouping by many columns */
rowGroupIndex?: number | null;
/** The active "Show Values As" selection: the mode name, or the object form (with `params` / `precision`)
* for modes that take input. `null` clears it. */
showValuesAs?: ShowValuesAsStateValue;
}
export interface ColumnState extends ColumnStateParams {
/** ID of the column */
colId: string;
}
export interface ApplyColumnStateParams {
/** The state from `getColumnState` */
state?: ColumnState[];
/** Whether column order should be applied */
applyOrder?: boolean;
/** State to apply to columns where state is missing for those columns */
defaultState?: ColumnStateParams;
}
/** Pre-mutation snapshot; `dispatchColStateChanges` diffs against it to fire the right column events. */
interface ColumnStateChanges {
/** Pre-mutation snapshot (`sortColumns` mutates `.columns` in place); `undefined` when empty/absent. */
rowGroupColumns: AgColumn[] | undefined;
pivotColumns: AgColumn[] | undefined;
/** Per-column scalar snapshot keyed by colId; insertion order = capture order. */
before: Map<string, ColumnStateBefore>;
/** Pre-mutation `colsList` ref. Unchanged ref ⇒ order untouched (only ever reassigned) ⇒ skip the O(n) diff. */
colsList: AgColumn[];
}
/** Minimal pre-apply snapshot: only the fields `dispatchColumnFieldChanges` diffs. */
interface ColumnStateBefore {
width: number;
hide: boolean;
pinned: ColumnPinnedType;
sort: SortDirection;
sortType: SortType | undefined;
sortIndex: number | null;
aggFunc: ColAggFunc;
}
/** Updates hide/sort/sortIndex/pinned/flex. Per field: `null`/empty clears, only `undefined` is skipped. */
export declare const updateSomeColumnState: (beans: BeanCollection, column: AgColumn, hide: boolean | null | undefined, sort: SortDirection | SortDef | undefined, sortIndex: number | null | undefined, pinned: boolean | "left" | "right" | null | undefined, flex: number | null | undefined, source: ColumnEventType) => void;
/** Show/hide columns — skips the full `_applyColumnState` rebuild (visibility can't change colsList membership/order).
* `filterLockedColumns` (UI paths) skips `lockVisible` cols; the API path passes `false`.
* @internal AG_GRID_INTERNAL - Not for public use. Can change / be removed at any time. */
export declare function _setColsVisible(beans: BeanCollection, keys: (string | AgColumn)[], visible: boolean | undefined, source: ColumnEventType, filterLockedColumns?: boolean): void;
/** Apply `ColumnState` across two passes, then — once for the whole operation — re-order, refresh the
* visible cols and dispatch the resulting events. Returns `true` if every provided state matched a column.
* @internal AG_GRID_INTERNAL - Not for public use. Can change / be removed at any time. */
export declare function _applyColumnState(beans: BeanCollection, params: ApplyColumnStateParams, source: ColumnEventType): boolean;
/** Reset all columns to the state declared in their colDefs (`initial*`/explicit), re-apply the colDef
* order, and fire `columnsReset`.
* @internal AG_GRID_INTERNAL - Not for public use. Can change / be removed at any time. */
export declare function _resetColumnState(beans: BeanCollection, source: ColumnEventType): void;
/** Snapshot column state before a mutation. Pair with {@link dispatchColStateChanges} after the
* mutation to fire the resulting events. Used by both apply-column-state and apply-new-column-defs. */
export declare function captureColumnStateChanges(beans: BeanCollection): ColumnStateChanges;
/** Diff current column state against a {@link captureColumnStateChanges} snapshot and dispatch the changed
* column events (value/resize/pin/visible/sort/rowGroup/pivot/moved). */
export declare function dispatchColStateChanges(beans: BeanCollection, source: ColumnEventType, changes: ColumnStateChanges): void;
export declare const _getColumnState: (beans: BeanCollection) => ColumnState[];
export declare function getColumnStateFromColDef(beans: BeanCollection, column: AgColumn): ColumnState;
export {};