import { VegaSlimmer } from '../../../../vega-slimmer/vega-slimmer-core';
import { VegaTableDataSourceItem } from '../../interface';
import { VegaTable } from '../../vega-table';
/**
 * The dataSource controller for the vega-table
 */
export declare class VegaTableDataSourceController extends VegaSlimmer {
  rowKey: VegaTable['rowKey'];
  currentData: VegaTable['currentData'];
  dataSource: VegaTable['dataSource'];
  columns: VegaTable['columns'];
  sortersMap: VegaTable['sortersMap'];
  vegaTableSortController: VegaTable['vegaTableSortController'];
  vegaTableRenderer: VegaTable['vegaTableRenderer'];
  isTemplateRenderMode: VegaTable['isTemplateRenderMode'];
  /**
   * Component lifecycle - componentWillLoad
   */
  componentWillLoad(): void;
  /**
   * The callback of [watchSortersMap]{@link VegaTable.watchSortersMap}
   */
  watchSortersMap(): void;
  /**
   * The callback of watchDataSource
   */
  watchDataSource(): void;
  /**
   * Get the key of the record
   *
   * @param {VegaTableDataSourceItem} record - The record of the dataSource
   * @returns {string} The key of the record
   */
  getRecordKey: (record: VegaTableDataSourceItem) => string;
  /**
   * Get the record from [currentData]{@link currentData} by key
   *
   * @param {string} key - The key of the record
   * @returns {VegaTableDataSourceItem} The record of the [currentData]{@link currentData}
   */
  getRecordByKey: (key: string) => VegaTableDataSourceItem;
  /**
   * Get currentData item keys
   *
   * @returns {string[]} The key array of currentData
   */
  getAllRecordKeys(): string[];
  /**
   * Update the [currentData]{@link currentData} by new data source
   *
   * @param {VegaTableDataSourceItem[]} data - New data source
   */
  setCurrentData: (data: VegaTableDataSourceItem[]) => void;
  /**
   * The getter of dataSource
   *
   * @returns {VegaTableDataSourceItem[]} The value of dataSource
   */
  getDataSource(): VegaTableDataSourceItem[];
  /**
   * The setter of [dataSource]{@link dataSource}
   *
   * @param {VegaTableDataSourceItem[]} data - The new data source
   */
  setDataSource(data: VegaTableDataSourceItem[]): void;
  /**
   * The getter of [currentData]{@link currentData}
   *
   * @returns {VegaTableDataSourceItem[]} the value of currentData
   */
  getCurrentData(): VegaTableDataSourceItem[];
  /**
   * Check whether the currentData is empty
   *
   * @returns {boolean} return true if the currentData is empty
   */
  isCurrentDataEmpty(): boolean;
  /**
   * Verify whether the data is valid
   *
   * @param {VegaTableDataSourceItem[]} data - The data source
   * @returns {boolean} Return true if the data is valid, otherwise false
   */
  private tableDataValidation;
  /**
   * Update the currentData with sorted data if there is sorted status.
   * Otherwise, update with the dataSource directly
   */
  private syncCurrentData;
}
