import React, { PureComponent, ReactNode } from 'react'; import PropTypes from 'prop-types'; import { ContextValue } from '../configProvider/context'; import { CheckboxEvent } from '../checkbox'; import { BasicCascaderData, BasicEntity, ShowNextType, BasicData, Virtualize } from '@douyinfe/semi-foundation/lib/es/cascader/foundation'; export interface CascaderData extends BasicCascaderData { label: React.ReactNode; } export interface Entity extends BasicEntity { children?: Array; data: CascaderData; parent?: Entity; } export interface Entities { [idx: string]: Entity; } export interface Data extends BasicData { data: CascaderData; searchText: React.ReactNode[]; } export interface FilterRenderProps { className: string; inputValue: string; disabled: boolean; data: CascaderData[]; checkStatus: { checked: boolean; halfChecked: boolean; }; selected: boolean; onClick: (e: React.MouseEvent) => void; onCheck: (e: React.MouseEvent) => void; } export interface CascaderItemProps { activeKeys: Set; selectedKeys: Set; loadedKeys: Set; loadingKeys: Set; onItemClick: (e: React.MouseEvent | React.KeyboardEvent, item: Entity | Data) => void; onItemHover: (e: React.MouseEvent, item: Entity) => void; showNext: ShowNextType; onItemCheckboxClick: (item: Entity | Data) => void; onListScroll: (e: React.UIEvent, ind: number) => void; searchable: boolean; keyword: string; empty: boolean; emptyContent: React.ReactNode; loadData: (selectOptions: CascaderData[]) => Promise; data: Array; separator: string; multiple: boolean; checkedKeys: Set; halfCheckedKeys: Set; filterRender?: (props: FilterRenderProps) => ReactNode; virtualize?: Virtualize; expandIcon?: ReactNode; } export default class Item extends PureComponent { static contextType: React.Context; static propTypes: { data: PropTypes.Requireable; emptyContent: PropTypes.Requireable; searchable: PropTypes.Requireable; onItemClick: PropTypes.Requireable<(...args: any[]) => any>; onItemHover: PropTypes.Requireable<(...args: any[]) => any>; multiple: PropTypes.Requireable; showNext: PropTypes.Requireable<"hover" | "click">; checkedKeys: PropTypes.Requireable; halfCheckedKeys: PropTypes.Requireable; onItemCheckboxClick: PropTypes.Requireable<(...args: any[]) => any>; separator: PropTypes.Requireable; keyword: PropTypes.Requireable; virtualize: PropTypes.Requireable; expandIcon: PropTypes.Requireable; }; static defaultProps: { empty: boolean; }; context: ContextValue; onClick: (e: React.MouseEvent | React.KeyboardEvent, item: Entity | Data) => void; /** * A11y: simulate item click */ handleItemEnterPress: (keyboardEvent: React.KeyboardEvent, item: Entity | Data) => void; onHover: (e: React.MouseEvent, item: Entity) => void; onCheckboxChange: (e: CheckboxEvent, item: Entity | Data) => void; getItemStatus: (key: string) => { active: boolean; selected: boolean; loading: boolean; }; renderIcon: (type: string, haveMarginLeft?: boolean) => string | number | true | Iterable | React.JSX.Element; highlight: (searchText: React.ReactNode[]) => React.ReactNode[]; renderFlattenOptionItem: (data: Data, index?: number, style?: any) => React.JSX.Element; renderFlattenOption: (data: Data[]) => React.JSX.Element; renderVirtualizeList: (visibleOptions: any) => React.JSX.Element; renderItem(renderData: Array, content?: Array): React.ReactNode[]; renderEmpty(): React.JSX.Element; render(): React.JSX.Element; }