/**
 * This file is part of YourDLT Wallet Components shared under LGPL-3.0
 * Copyright (C) 2021 Using Blockchain Ltd, Reg No.: 12658136, United Kingdom
 *
 * @package     YourDLT Wallet Components
 * @author      Grégory Saive for Using Blockchain Ltd <greg@ubc.digital>
 * @license     LGPL-3.0
 */
import { Vue } from "vue-property-decorator";
import { TableAction } from "../../types/TableAction";
import { TableField } from "../../types/TableField";
import { TableService } from "../../services/TableService";
import { TableSortingOptions } from "../../types/TableSortingOptions";
export default class GenericTableDisplay extends Vue {
    /**
     * Pagination page size
     * @type {number}
     */
    pageSize: number;
    /**
     * Current table sorting state
     * @var {TableSortingOptions}
     */
    sortedBy: TableSortingOptions;
    /**
     * Table action buttons.
     * @var {TableAction[]}
     */
    actionButtons: TableAction[];
    /**
     * The *unfiltered* items that will be displayed (rows).
     * @type {string}
     */
    items: any[];
    /**
     * The table fields (columns)
     * @type {string}
     */
    fields: TableField[];
    /**
     * Whether data is still loading
     * @type {boolean}
     */
    isLoading: boolean;
    /**
     * Whether data is still loading
     * @type {boolean}
     */
    refreshGetter: string;
    /**
     * Whether headers are disabled
     * @type {boolean}
     */
    disableHeaders: boolean;
    /**
     * Whether pagination is disabled if it has only one page.
     * @type {boolean}
     */
    disableSinglePageLinks: boolean;
    /**
     * Whether the auto-rows grid is disabled.
     * @type {boolean}
     */
    disableRowsGrid: boolean;
    /**
     * Whether the auto-rows grid is disabled for the placeholder.
     * @type {boolean}
     */
    disablePlaceholderGrid: boolean;
    /**
     * Pagination page number
     * @type {number}
     */
    currentPage: number;
    /**
     * And empty columns list with dynamic columns count. This
     * is used to display placeholder rows in the table.
     * @type {number[]}
     */
    emptyColumns: number[];
    /**
     * allow custom sorting options
     * @protected
     * @type {TableSortingOptions}
     */
    protected customSortedBy: TableSortingOptions;
    /**
     * avoid multiple clicks
     * @protected
     * @param {string}
     * @return {void}
     */
    protected isRefreshing: boolean;
    /**
     * The current blockchain height
     * @private
     * @type {number}
     */
    private currentHeight;
    get canRefresh(): boolean;
    /**
     * Non-filtered table data
     * @var {TableRowValues[]}
     */
    private get tableRows();
    /**
     * Values displayed in the table
     * @readonly
     * @return {TableRowValues[]}
     */
    get displayedValues(): any[];
    /**
     * Header fields displayed in the table
     * @readonly
     * @return {TableField[]}
     */
    get tableFields(): TableField[];
    /**
     * Get current page rows
     * @readonly
     * @return {TableRowValues[]}
     */
    get currentPageRows(): any[];
    get isPageable(): boolean;
    get sortingOptions(): TableSortingOptions;
    set sortingOptions(opt: TableSortingOptions);
    /**
     * Hook called when the component is created
     * @return {void}
     */
    created(): Promise<void>;
    /**
     * Instantiate the table service around {assetType}
     * @return {TableService}
     */
    protected getService(): TableService;
    /**
     * Refreshes the displayed data by calling the
     * store getter.
     * @returns {void}
     */
    private refresh;
    /**
     * Sorts the table data
     * @param {TableFieldNames} fieldName
     */
    setSortedBy(fieldName: string): void;
    /**
     * Handle pagination page change
     * @param {number} page
     */
    handlePageChange(page: number): void;
    protected onRefresh(): Promise<void>;
}
