///
import * as React from 'react';
import { MouseEvent } from 'react';
import { IterableLike } from '../../../WebRx';
import { PanelFragment, PanelItemContext, PanelItemProps, PanelRenderProps } from '../Panel/Panel';
import { ItemsPresenterTemplateProps } from './ItemsPresenter';
export declare type RecursiveItemsSource = (item: T) => IterableLike | undefined;
export interface TreeItemSourceProps {
/**
* function to produce the recursive items source for the provided item
*/
itemsSource: RecursiveItemsSource;
}
export interface TreeItemTemplateProps {
/**
* Override the expander icon template
* default behaviour is to render an icon using the expandedIconName and collapsedIconName
*/
expanderIconTemplate?: (isExpanded: boolean, expandedIconName?: string, collapsedIconName?: string) => PanelFragment;
/**
* Override the header template
* compose a custom header out of the subcomponents
*/
headerTemplate?: (item: T, index: number, indent: PanelFragment[], expander: PanelFragment, headerContent: PanelFragment, view: TreeItem) => PanelFragment;
/**
* template to render each item belonging to the bound item
* use this template to define your own items presenter template
*/
itemsTemplate?: (items: IterableLike | undefined, view: TreeItem) => PanelFragment;
}
export interface TreeItemRenderProps {
/**
* tree node depth (defaults to 0)
* this should not be assigned unless defining your own itemsTemplate
*/
depth?: number;
/**
* set the isExpanded intial state (modified existing state)
*/
startExpanded?: boolean;
/**
* override the current expansion state (does not modify state)
* true will override isExpanded to true, false will not override the current state
* use a function to handle async changes in state overrides where override logic is computerd
* outside the treeitem container component (i.e., outside the treeview).
*/
overrideExpanded?: boolean | (() => boolean);
/**
* override the default expanded icon name
* default is a '-' in a rounded square
*/
expandedIconName?: string;
/**
* override the default collapsed icon name
* default is a '+' in a rounded square
*/
collapsedIconName?: string;
/**
* flag to enable clicking anywhere on the node to toggle expansion state
*/
clickToExpand?: boolean;
}
export interface TreeItemFacadeProps extends TreeItemSourceProps, TreeItemTemplateProps, TreeItemRenderProps, ItemsPresenterTemplateProps, PanelItemProps, PanelRenderProps {
}
export interface TreeItemProps extends TreeItemFacadeProps {
/**
* the item that this tree node represents
*/
item: {};
/**
* the index this item is found within its parent container.
* this is necessary for key construction if no key is specified
*/
index: number;
}
export interface TreeItemComponentProps extends React.HTMLProps, TreeItemProps {
}
export interface TreeItemState {
/**
* true if the tree item is expanded
*/
isExpanded: boolean;
}
export declare class TreeItem extends React.Component {
static defaultProps: Partial;
static defaultExpandedIconName: string;
static defaultCollapsedIconName: string;
static generateKey(fragment: PanelFragment, index: number): string | number;
static renderTreeItem(item: {}, index: number, props: TreeItemFacadeProps): JSX.Element;
static defaultHeaderTemplate(item: {}, index: number, indent: PanelFragment[], expander: PanelFragment, headerContent: PanelFragment, view: TreeItem): JSX.Element;
static defaultItemsTemplate(items: IterableLike<{}> | undefined, view: TreeItem): false | JSX.Element;
static defaultExpanderIconTemplate(isExpanded: boolean, expandedIconName?: string, collapsedIconName?: string): JSX.Element;
constructor(props: any);
componentWillReceiveProps(nextProps: Readonly, nextContext: any): void;
render(): JSX.Element;
protected getIsExpanded(): boolean;
protected toggleExpansion(e: MouseEvent): void;
protected renderIndent(): React.ReactNode[];
protected renderExpanderIcon(): React.ReactNode;
protected renderExpander(items: IterableLike<{}> | undefined): false | JSX.Element;
protected renderHeaderContent(): React.ReactNode;
protected renderHeader(indent: PanelFragment[], expander: PanelFragment, headerContent: PanelFragment): React.ReactNode;
protected renderItems(items: IterableLike<{}> | undefined): PanelFragment;
}