import { Identifiable } from './AdaptableObject';
import { CellDataChangedInfo } from './CellDataChangedInfo';
import { AlertDefinition } from '../AlertState';
import { RowDataChangedInfo } from './RowDataChangedInfo';
/**
 * Defines an Alert fired by AdapTable
 */
export type AdaptableAlert<TData = any> = AdaptableCellChangedAlert<TData> | AdaptableRowChangedAlert<TData> | AdaptableGenericAlert;
/**
 * Type of AdapTable Alert: generic, cellChange or rowChange
 */
export type AdaptableAlertType = 'generic' | 'cellChange' | 'rowChange';
/**
 * Defines a generic AdapTable Alert
 */
export interface AdaptableGenericAlert extends AdaptableAlertBase<'generic'> {
}
/**
 * Defines an Alert fired by AdapTable when a cell is changed
 */
export interface AdaptableCellChangedAlert<TData = any> extends AdaptableAlertBase<'cellChanged'> {
    /**
     * Cell DataChange which triggered Alert
     */
    cellDataChangedInfo: CellDataChangedInfo<TData>;
}
/**
 * Defines an Alert fired by AdapTable when a row is changed
 */
export interface AdaptableRowChangedAlert<TData = any> extends AdaptableAlertBase<'rowChanged'> {
    /**
     * Row DataChange which triggered Alert
     */
    rowDataChangedInfo: RowDataChangedInfo<TData>;
}
/**
 * Defines the base(common) properties of an Alert fired by AdapTable, regardless of the type of change
 */
export interface AdaptableAlertBase<T> extends Identifiable {
    /**
     * The type of Alert
     */
    alertType: T;
    /**
     * Alert Header text
     */
    header: string;
    /**
     * Alert Body text
     */
    message: string;
    /**
     * Rule that caused Alert to fire
     */
    alertDefinition: AlertDefinition;
}
export declare const isAdaptableCellChangedAlert: (alert: AdaptableAlert) => alert is AdaptableCellChangedAlert;
export declare const isAdaptableRowChangedAlert: (alert: AdaptableAlert) => alert is AdaptableRowChangedAlert;
