import React, { type ReactElement, type MouseEvent, type ReactNode } from 'react'; import PropTypes from 'prop-types'; import Menu from '../menu'; import Input from '../input'; import DataStore from './data-store'; import { getValueDataSource } from './util'; import type { BaseProps, DataSourceItem, NormalizedObjectItem, ObjectItem, VisibleChangeType } from './types'; export interface BaseState { dataStore: DataStore; value?: DataSourceItem | DataSourceItem[]; searchValue?: string; visible?: boolean; dataSource: NormalizedObjectItem[]; width: number; highlightKey?: string | null; srReader?: ReactNode; } export default class Base

extends React.Component { static propTypes: { prefix: PropTypes.Requireable; size: PropTypes.Requireable; value: PropTypes.Requireable; defaultValue: PropTypes.Requireable; placeholder: PropTypes.Requireable; autoWidth: PropTypes.Requireable; label: PropTypes.Requireable; hasClear: PropTypes.Requireable; state: PropTypes.Requireable; readOnly: PropTypes.Requireable; disabled: PropTypes.Requireable; visible: PropTypes.Requireable; defaultVisible: PropTypes.Requireable; onVisibleChange: PropTypes.Requireable<(...args: any[]) => any>; popupContainer: PropTypes.Requireable; popupClassName: PropTypes.Requireable; popupStyle: PropTypes.Requireable; popupProps: PropTypes.Requireable; followTrigger: PropTypes.Requireable; popupContent: PropTypes.Requireable; menuProps: PropTypes.Requireable; filterLocal: PropTypes.Requireable; filter: PropTypes.Requireable<(...args: any[]) => any>; defaultHighlightKey: PropTypes.Requireable; highlightKey: PropTypes.Requireable; onToggleHighlightItem: PropTypes.Requireable<(...args: any[]) => any>; autoHighlightFirstItem: PropTypes.Requireable; useVirtual: PropTypes.Requireable; className: PropTypes.Requireable; children: PropTypes.Requireable; dataSource: PropTypes.Requireable; itemRender: PropTypes.Requireable<(...args: any[]) => any>; mode: PropTypes.Requireable; notFoundContent: PropTypes.Requireable; locale: PropTypes.Requireable; rtl: PropTypes.Requireable; popupComponent: PropTypes.Requireable; isPreview: PropTypes.Requireable; renderPreview: PropTypes.Requireable<(...args: any[]) => any>; showDataSourceChildren: PropTypes.Requireable; }; static defaultProps: BaseProps; dataStore: DataStore; selectDOM: HTMLElement; width: string | number; popupRef: HTMLDivElement; resizeTimeout: number; highlightTimer: number | undefined; menuRef: InstanceType | null; isAutoComplete: boolean; inputRef: ReturnType['getInstance']>; valueDataSource: ReturnType; constructor(props: P); componentDidMount(): void; componentDidUpdate(prevProps: P, prevState: S): void; componentWillUnmount(): void; /** * Calculate and set width of popup menu */ syncWidth(): void; handleResize(): void; /** * Get structured dataSource, for cache */ setDataSource(props: P): NormalizedObjectItem[]; /** * Set popup visible */ setVisible(visible: boolean, type?: VisibleChangeType): void; setFirstHightLightKeyForMenu(searchValue?: unknown): void; handleChange(value: BaseProps['value'], ...args: [unknown, (ObjectItem | ObjectItem[])?]): void; /** * Handle Menu body click * @param e - click event */ handleMenuBodyClick(): void; /** * Toggle highlight MenuItem * @param dir - -1: up, 1: down */ toggleHighlightItem(dir: number): false | NormalizedObjectItem | undefined; scrollMenuIntoView(): void; /** * render popup menu header */ renderMenuHeader(): React.ReactNode; handleSelect(): void; /** * 防止 onBlur/onFocus 抖动 */ handleMouseDown: (e: MouseEvent) => void; /** * abstract */ handleMenuSelect(...rest: unknown[]): void; /** * abstract */ handleItemClick(...rest: unknown[]): void; /** * abstract */ useDetailValue(): boolean; /** * abstract */ handleVisibleChange(...rest: unknown[]): void; /** * abstract */ renderSelect(): React.JSX.Element; /** * render popup children * @param props - */ renderMenu(): React.JSX.Element; /** * render menu item */ renderMenuItem(dataSource: NormalizedObjectItem[]): ReactElement[]; saveSelectRef: (ref: HTMLElement | null) => void; saveInputRef: (ref: InstanceType) => void; /** * 点击 arrow 或 label 的时候焦点切到 input 中 * @override */ focusInput(): void; focus(start?: number, end?: number, preventScroll?: boolean): void; beforeOpen(): void; beforeClose(): void; afterClose(): void; savePopupRef: (ref: HTMLDivElement) => void; shouldAutoWidth(): false | P["autoWidth"] | undefined; render(props?: P): React.JSX.Element; }