/// 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; }