64 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
import { VNodeChild } from 'vue';
 | 
						|
 | 
						|
export type SelectSource = 'option' | 'selection' | 'input';
 | 
						|
 | 
						|
export const INTERNAL_PROPS_MARK = 'RC_SELECT_INTERNAL_PROPS_MARK';
 | 
						|
 | 
						|
// =================================== Shared Type ===================================
 | 
						|
export type Key = string | number;
 | 
						|
 | 
						|
export type RawValueType = string | number | null;
 | 
						|
 | 
						|
export interface LabelValueType extends Record<string, any> {
 | 
						|
  key?: Key;
 | 
						|
  value?: RawValueType;
 | 
						|
  label?: VNodeChild;
 | 
						|
}
 | 
						|
export type DefaultValueType = RawValueType | RawValueType[] | LabelValueType | LabelValueType[];
 | 
						|
 | 
						|
export interface DisplayLabelValueType extends LabelValueType {
 | 
						|
  disabled?: boolean;
 | 
						|
}
 | 
						|
 | 
						|
export type SingleType<MixType> = MixType extends (infer Single)[] ? Single : MixType;
 | 
						|
 | 
						|
export type OnClear = () => void;
 | 
						|
 | 
						|
export type CustomTagProps = {
 | 
						|
  label: DefaultValueType;
 | 
						|
  value: DefaultValueType;
 | 
						|
  disabled: boolean;
 | 
						|
  onClose: (event?: MouseEvent) => void;
 | 
						|
  closable: boolean;
 | 
						|
};
 | 
						|
 | 
						|
// ==================================== Generator ====================================
 | 
						|
export type GetLabeledValue<FOT extends FlattenOptionsType> = (
 | 
						|
  value: RawValueType,
 | 
						|
  config: {
 | 
						|
    options: FOT;
 | 
						|
    prevValue: DefaultValueType;
 | 
						|
    labelInValue: boolean;
 | 
						|
    optionLabelProp: string;
 | 
						|
  },
 | 
						|
) => LabelValueType;
 | 
						|
 | 
						|
export type FilterOptions<OptionsType extends object[]> = (
 | 
						|
  searchValue: string,
 | 
						|
  options: OptionsType,
 | 
						|
  /** Component props, since Select & TreeSelect use different prop name, use any here */
 | 
						|
  config: {
 | 
						|
    optionFilterProp: string;
 | 
						|
    filterOption: boolean | FilterFunc<OptionsType[number]>;
 | 
						|
  },
 | 
						|
) => OptionsType;
 | 
						|
 | 
						|
export type FilterFunc<OptionType> = (inputValue: string, option?: OptionType) => boolean;
 | 
						|
 | 
						|
export type FlattenOptionsType<OptionsType extends object[] = object[]> = {
 | 
						|
  key: Key;
 | 
						|
  data: OptionsType[number];
 | 
						|
  /** Used for customize data */
 | 
						|
  [name: string]: any; // eslint-disable-line @typescript-eslint/no-explicit-any
 | 
						|
}[];
 |