Cascader.d.ts 5.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import type { BuildInPlacements } from '@rc-component/trigger/lib/interface';
  2. import type { BaseSelectPropsWithoutPrivate, BaseSelectRef } from 'rc-select';
  3. import type { Placement } from 'rc-select/lib/BaseSelect';
  4. import * as React from 'react';
  5. import Panel from './Panel';
  6. import { SHOW_CHILD, SHOW_PARENT } from './utils/commonUtil';
  7. export interface BaseOptionType {
  8. disabled?: boolean;
  9. disableCheckbox?: boolean;
  10. label?: React.ReactNode;
  11. value?: string | number | null;
  12. children?: DefaultOptionType[];
  13. }
  14. export type DefaultOptionType = BaseOptionType & Record<string, any>;
  15. export interface ShowSearchType<OptionType extends DefaultOptionType = DefaultOptionType, ValueField extends keyof OptionType = keyof OptionType> {
  16. filter?: (inputValue: string, options: OptionType[], fieldNames: FieldNames<OptionType, ValueField>) => boolean;
  17. render?: (inputValue: string, path: OptionType[], prefixCls: string, fieldNames: FieldNames<OptionType, ValueField>) => React.ReactNode;
  18. sort?: (a: OptionType[], b: OptionType[], inputValue: string, fieldNames: FieldNames<OptionType, ValueField>) => number;
  19. matchInputWidth?: boolean;
  20. limit?: number | false;
  21. }
  22. export type ShowCheckedStrategy = typeof SHOW_PARENT | typeof SHOW_CHILD;
  23. interface BaseCascaderProps<OptionType extends DefaultOptionType = DefaultOptionType, ValueField extends keyof OptionType = keyof OptionType> extends Omit<BaseSelectPropsWithoutPrivate, 'tokenSeparators' | 'labelInValue' | 'mode' | 'showSearch'> {
  24. id?: string;
  25. prefixCls?: string;
  26. fieldNames?: FieldNames<OptionType, ValueField>;
  27. optionRender?: (option: OptionType) => React.ReactNode;
  28. children?: React.ReactElement;
  29. changeOnSelect?: boolean;
  30. displayRender?: (label: string[], selectedOptions?: OptionType[]) => React.ReactNode;
  31. checkable?: boolean | React.ReactNode;
  32. showCheckedStrategy?: ShowCheckedStrategy;
  33. autoClearSearchValue?: boolean;
  34. showSearch?: boolean | ShowSearchType<OptionType>;
  35. searchValue?: string;
  36. onSearch?: (value: string) => void;
  37. expandTrigger?: 'hover' | 'click';
  38. options?: OptionType[];
  39. /** @private Internal usage. Do not use in your production. */
  40. dropdownPrefixCls?: string;
  41. loadData?: (selectOptions: OptionType[]) => void;
  42. /** @deprecated Use `open` instead */
  43. popupVisible?: boolean;
  44. /** @deprecated Use `dropdownClassName` instead */
  45. popupClassName?: string;
  46. dropdownClassName?: string;
  47. dropdownMenuColumnStyle?: React.CSSProperties;
  48. /** @deprecated Use `placement` instead */
  49. popupPlacement?: Placement;
  50. placement?: Placement;
  51. builtinPlacements?: BuildInPlacements;
  52. /** @deprecated Use `onOpenChange` instead */
  53. onPopupVisibleChange?: (open: boolean) => void;
  54. /** @deprecated Use `onOpenChange` instead */
  55. onDropdownVisibleChange?: (open: boolean) => void;
  56. onOpenChange?: (open: boolean) => void;
  57. expandIcon?: React.ReactNode;
  58. loadingIcon?: React.ReactNode;
  59. }
  60. export interface FieldNames<OptionType extends DefaultOptionType = DefaultOptionType, ValueField extends keyof OptionType = keyof OptionType> {
  61. label?: keyof OptionType;
  62. value?: keyof OptionType | ValueField;
  63. children?: keyof OptionType;
  64. }
  65. export type ValueType<OptionType extends DefaultOptionType = DefaultOptionType, ValueField extends keyof OptionType = keyof OptionType> = keyof OptionType extends ValueField ? unknown extends OptionType['value'] ? OptionType[ValueField] : OptionType['value'] : OptionType[ValueField];
  66. export type GetValueType<OptionType extends DefaultOptionType = DefaultOptionType, ValueField extends keyof OptionType = keyof OptionType, Multiple extends boolean | React.ReactNode = false> = false extends Multiple ? ValueType<Required<OptionType>, ValueField>[] : ValueType<Required<OptionType>, ValueField>[][];
  67. export type GetOptionType<OptionType extends DefaultOptionType = DefaultOptionType, Multiple extends boolean | React.ReactNode = false> = false extends Multiple ? OptionType[] : OptionType[][];
  68. export interface CascaderProps<OptionType extends DefaultOptionType = DefaultOptionType, ValueField extends keyof OptionType = keyof OptionType, Multiple extends boolean | React.ReactNode = false> extends BaseCascaderProps<OptionType, ValueField> {
  69. checkable?: Multiple;
  70. value?: GetValueType<OptionType, ValueField, Multiple>;
  71. defaultValue?: GetValueType<OptionType, ValueField, Multiple>;
  72. onChange?: (value: GetValueType<OptionType, ValueField, Multiple>, selectOptions: GetOptionType<OptionType, Multiple>) => void;
  73. }
  74. export type SingleValueType = (string | number)[];
  75. export type InternalValueType = SingleValueType | SingleValueType[];
  76. export interface InternalFieldNames extends Required<FieldNames> {
  77. key: string;
  78. }
  79. export type InternalCascaderProps = Omit<CascaderProps, 'onChange' | 'value' | 'defaultValue'> & {
  80. value?: InternalValueType;
  81. defaultValue?: InternalValueType;
  82. onChange?: (value: InternalValueType, selectOptions: BaseOptionType[] | BaseOptionType[][]) => void;
  83. };
  84. export type CascaderRef = Omit<BaseSelectRef, 'scrollTo'>;
  85. declare const Cascader: (<OptionType extends DefaultOptionType = DefaultOptionType, ValueField extends keyof OptionType = keyof OptionType, Multiple extends React.ReactNode = false>(props: CascaderProps<OptionType, ValueField, Multiple> & {
  86. children?: React.ReactNode;
  87. } & {
  88. ref?: React.Ref<CascaderRef> | undefined;
  89. }) => React.ReactElement) & {
  90. displayName?: string | undefined;
  91. SHOW_PARENT: typeof SHOW_PARENT;
  92. SHOW_CHILD: typeof SHOW_CHILD;
  93. Panel: typeof Panel;
  94. };
  95. export default Cascader;