import { Collection, CollectionProxy, CollectionState, Item, ItemAdaptee, ItemAdapter, UseCollectionOptions } from 'onekijs-framework'; import React, { FC, ReactNode } from 'react'; import { StylableProps } from '../../styles/typings'; export type ArrayListProps = ListItem> = ListConfig & { adapter?: ListItemAdapter; dataSource: T[] | string; fetchOnce?: boolean; }; export type ListBodyProps = ListItem, S extends ListState = ListState, C extends ListCollection = ListCollection> = Pick, 'autoRefresh' | 'follow' | 'onItemSelect' | 'onItemUnselect' | 'onItemActivate' | 'onItemDeactivate' | 'onItemHighlight' | 'onItemUnhighlight' | 'multiSelect' | 'ItemComponent' | 'NotFoundComponent' | 'LoadingComponent' | 'height' | 'keyboardNavigable' | 'tail'> & { bodyRef?: React.RefObject; className?: string; ItemLoadingComponent?: FC; ItemComponent?: FC>; ItemContentComponent?: FC>; items: (I | undefined)[]; ListComponent?: FC>; parentRef?: React.RefObject; service: C; state: S; style?: React.CSSProperties; totalSize?: number; scrollToIndex?: (index: number, options?: { align: 'start' | 'center' | 'end' | 'auto'; }) => void; scrollToOffset?: (index: number, options?: { align: 'start' | 'center' | 'end' | 'auto'; }) => void; virtualItems?: VirtualItem[]; VirtualListComponent?: FC>; }; export type CollectionListProps = ListItem, S extends ListState = ListState, C extends ListCollection = ListCollection> = ListConfig & { controller: CollectionProxy; }; export type ListCollection = ListItem, S extends ListState = ListState> = Collection; export type ListFooterProps = { className?: string; style?: React.CSSProperties; }; export type ListHeaderProps = { className?: string; style?: React.CSSProperties; }; export type ListItem = Item; export type ListItemAdaptee = ItemAdaptee; export type ListItemAdapter = ItemAdapter; export type ListItemHandler = ListItem> = (item: I, index: number) => void; export interface ListItemProps = ListItem> { index: number; item: I; data: T; ItemContentComponent?: FC>; onClick?: (item: I, index: number) => boolean | void; onMouseEnter?: ListItemHandler; onMouseLeave?: ListItemHandler; className?: string; } export type ListItems = ListItem> = T[] | ListCollection; export type ListConfig = ListItem> = { autoRefresh?: number; className?: string; follow?: number; height?: string | number; increment?: number; ItemLoadingComponent?: FC; ItemComponent?: FC>; ItemContentComponent?: FC>; NotFoundComponent?: FC | null; LoadingComponent?: FC; itemHeight?: number | ((index: number) => number); keyboardNavigable?: boolean; multiSelect?: boolean; onItemActivate?: ListItemHandler; onItemDeactivate?: ListItemHandler; onItemHighlight?: ListItemHandler; onItemUnhighlight?: ListItemHandler; onItemSelect?: ListItemHandler; onItemUnselect?: ListItemHandler; paddingEnd?: number; paddingStart?: number; parentRef?: React.RefObject; overscan?: number; preload?: number; style?: React.CSSProperties; tail?: boolean; virtual?: boolean; }; export type ListNotFoundProps = { text?: ReactNode | ReactNode[]; }; export type ListProps = ListItem, S extends ListState = ListState, C extends ListCollection = ListCollection> = ListConfig & { adapter?: ListItemAdapter; controller?: CollectionProxy; dataSource?: T[] | string; fetchOnce?: boolean; }; export type ListState = ListItem> = CollectionState; export declare enum ListStatus { NotInitialized = "not initialized", NotLoaded = "not loaded", Loading = "loading", Fetching = "fetching", PartialFetching = "partial fetching", PartialLoading = "partial loading", Loaded = "loaded" } export type StandardListProps = ListItem> = Pick, 'items' | 'ItemComponent' | 'ItemLoadingComponent' | 'ItemContentComponent' | 'LoadingComponent'> & { onItemClick?: ListItemHandler; onItemMouseEnter?: ListItemHandler; onItemMouseLeave?: ListItemHandler; }; export type UseListOptions = ListItem> = UseCollectionOptions & { adapter?: ListItemAdapter; }; export type VirtualItem = { end: number; index: number; start: number; size: number; measureRef: (el: HTMLElement | null) => void; }; export type VirtualListProps = ListItem> = StandardListProps & { virtualItems: VirtualItem[]; }; export type VirtualItemWrapperProps = ListItem> = { ItemLoadingComponent?: FC; ItemComponent?: FC>; ItemContentComponent?: FC>; listItem: any; onItemClick?: ListItemHandler; onItemMouseEnter?: ListItemHandler; onItemMouseLeave?: ListItemHandler; virtualItem: VirtualItem; };