/**
 * Copyright (c) 2018-2019 Aleksey Melnikov, True Directive Company.
 * @link https://truedirective.com/
 * @license MIT
*/
import { Column } from './column.class';
import { Filter } from './filter.class';
import { SortInfo } from './sort-info.class';
import { ColumnCollection } from './column-collection.class';
import { CellPosition } from './cell-position.class';
import { GridSettings } from './grid-settings.class';
import { ValueFormatter } from './value-formatter.class';
import { DataQuery } from './data-query.class';
/**
 * Источник данных
 */
export declare class DataSource {
    columnCollection: ColumnCollection;
    settings: GridSettings;
    /**
     * Исходный набор строк
     */
    private _model;
    model: any[];
    private _totalRowCount?;
    totalRowCount: number;
    lazyLoaded?: number;
    readonly loadedRowCount: number;
    /**
     * Общий текстовый фильтр
     */
    searchString: string;
    /**
     * Filters
     */
    readonly filters: Filter[];
    /**
     * Sortings
     */
    readonly sortings: SortInfo[];
    /**
     * Resulting rows list
     */
    protected _resultRows: any[];
    readonly resultRowCount: number;
    readonly resultRows: any[];
    readonly valueFormatter: ValueFormatter;
    clearSorting(): void;
    clearFilters(): void;
    clear(): void;
    getQuery(counter?: number, subject?: any): DataQuery;
    /**
     * Наложение фильтров
     * @param  rows Список строк
     * @return      Отфильтрованный набор строк
     */
    doFilter(rows: any[]): any[];
    /**
     * Сортировка строк.
     * @param  rows Список строк, подлежащих группировке
     * @return      Отсортированный список строк
     */
    doSort(rows: any[]): any[];
    summaries(columns: Column[]): void;
    sortedByField(fieldName: string): SortInfo;
    summariedByColumn(col: Column): boolean;
    /**
     * Проверка видимости строки после изменения значения одного из полей
     * @param  r         Измененная строка
     * @param  fieldName Наименование поля
     * @return           Необходим ли перезапрос данных
     */
    checkDataUpdateNeed(r: any, fieldName: string): boolean;
    /**
     * Окончательная обрабтка данных и сохранение в resultRows.
     * @param  rows             [description]
     * @return                  [description]
     */
    accomplishFetch(rows: any[]): void;
    /**
     * Пересчет данных для отображения
     */
    recalcData(): void;
    /**
     * Получение данных для отображения, которые обработаны вне нашего компонента.
     * Например, сервером.
     * @param  rows             Отфильтрованные, отсортированные данные.
     * @param  settings         Настройки
     */
    fetchData(rows: any[], totalRowCount?: number): void;
    /**
     * Установка фильтра
     * @param  f Фильтр
     */
    setFilter(f: Filter): void;
    /**
     * Удаляем фильтр по заданной колонке
     * @param  fieldName Наименование поля
     * @return           Если фильтр удален - возвращаем true. Если фильтра не было - false.
     */
    removeFilter(fieldName: string): boolean;
    /**
     * Получить фильтр заданной колонки.
     * Используется в том числе заголовком для отображения подсвеченной иконки
     * @param  c Колонка, для которой нужно получить фильтр
     * @return   Фильтр, если есть
     */
    getFilter(c: Column): Filter;
    /**
    * Data sorting
    * @param  sortings List of sortings
     */
    sort(sortings: SortInfo[]): void;
    /**
     * Data filtering
     * @param  filters List of filters
     */
    filter(filters: Filter[]): void;
    /**
     * Сортировка по колонке
     * @param  col Колонка
     */
    sortByColumn(col: Column, add?: boolean): void;
    /**
     * Убрать одну строку из результирующего набора строк. Например, по причине
     * того, что она перестала удовлетворять условиям фильтра при изменении одного
     * из полей.
     * @param  r Строка, подлежащая скрытию
     * @return   Было ли удаление
     */
    removeResultRow(r: any): boolean;
    rowData(row: any): any;
    displayedValue(col: Column, value: any, row: any): string;
    value(row: any, fieldName: string): any;
    updateValue(row: any, fieldName: string, value: any): any;
    /**
     * Check drag possibility
     * @param  draggedRows [description]
     * @param  dropRow     [description]
     * @param  dropPos     [description]
     * @return             [description]
     */
    canDrop(draggedRows: any[], dropRow: any, dropPos: string): string;
    canEditCell(cp: CellPosition): boolean;
    moveRows(draggedRows: any[], dropTarget: any, dropPos: string): boolean;
}
