import { AdaptableForm, AdaptableObject } from '../../types';
import { FormContext } from '../AdaptableState/Common/FormContext';
import { DataSetSelectedInfo } from '../Api/Events/DataSetSelected';
/**
 * Options to provide Data Sets
 */
export interface DataSetOptions<TData = any> {
    /**
     * Collection of Data Sets to provide data to AdapTable
     *
     * @defaultValue []
     */
    dataSets?: DataSet<TData>[];
}
/**
 * Defines a Data Set object that can provide data to AdapTable
 */
export interface DataSet<TData = any> extends AdaptableObject {
    /**
     * Name of Data Set
     */
    name: string;
    /**
     * Describes the Data Set
     */
    description: string;
    /**
     * Params for Data Set popup form
     */
    form?: AdaptableForm<DataSetFormContext>;
    /**
     * Additional info for Data Set
     */
    info?: Record<string, string | number | boolean | Date>;
    /**
     * Invoked when this Data Set is selected and it does not define a `form`.
     *
     * Use for custom loading logic (e.g. server requests). The `DataSetSelected`
     * event is still fired for backward compatibility.
     *
     * @defaultValue undefined
     */
    onSelect?: (info: DataSetSelectedInfo) => void | Promise<void>;
    /**
     * Optional shortcut that loads row data into the Grid when this Data Set is
     * selected (only when no `form` is defined). Runs before `onSelect`.
     *
     * @defaultValue undefined
     */
    loadData?: (info: DataSetSelectedInfo) => TData[] | Promise<TData[]>;
    /**
     * Invoked when the user submits the Data Set form (Enter key or form button).
     * When no form `buttons` are defined, an OK button is added automatically.
     *
     * @defaultValue undefined
     */
    onFormSubmit?: (context: DataSetFormContext) => void | Promise<void>;
}
/**
 * Used when a DataSet displays a Form
 */
export interface DataSetFormContext extends FormContext {
    /**
     * The DataSet which triggered the Form
     */
    dataSet: DataSet;
}
