import { FetchStateAndError } from '../../../commonStateTypes/common'; import { SelectorView } from '../../../commonStateTypes/viewAndReport/viewAndReport'; import { InvoicingListCounts, InvoicingNamedOption } from '../../../entity/invoicing/invoicingCommonPayload'; import { InvoicingCustomer } from '../../../entity/invoicing/invoicingCustomer/invoicingCustomerState'; import { RootState } from '../../../rootStateTypes'; import { InvoicingListSort } from '../invoicingApiHelper'; import { InvoicingCustomerColumnConfig, InvoicingCustomerFilters, InvoicingCustomerTabId } from './invoicingCustomerListViewState'; export interface InvoicingCustomerListView extends SelectorView { activeTab: InvoicingCustomerTabId; columns: InvoicingCustomerColumnConfig[]; count: InvoicingListCounts; countsFetchState: FetchStateAndError; customers: InvoicingCustomer[]; filters: InvoicingCustomerFilters; nextCursor: string | null; /** Config status/type list; the page labels tabs and badges from it. */ statusOptions: InvoicingNamedOption[]; tabIds: InvoicingCustomerTabId[]; sort?: InvoicingListSort; } /** * Memoized so the denormalized `customers` array (and the wrapping view object) * keep referential identity until the customer entity slice or the list-view * slice actually change. Without this, the connected list page re-rendered on * every unrelated redux action because a fresh array was built each call. */ export declare const getInvoicingCustomerListView: (state: RootState) => InvoicingCustomerListView;