You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
1.2 KiB
37 lines
1.2 KiB
3 years ago
|
import type { CSSProperties, InjectionKey, Ref } from 'vue';
|
||
|
import { inject, provide } from 'vue';
|
||
|
import type { VueNode } from '../_util/type';
|
||
|
import type {
|
||
|
BaseCascaderProps,
|
||
|
InternalFieldNames,
|
||
|
DefaultOptionType,
|
||
|
SingleValueType,
|
||
|
} from './Cascader';
|
||
|
|
||
|
export interface CascaderContextProps {
|
||
|
options: Ref<BaseCascaderProps['options']>;
|
||
|
fieldNames: Ref<InternalFieldNames>;
|
||
|
values: Ref<SingleValueType[]>;
|
||
|
halfValues: Ref<SingleValueType[]>;
|
||
|
changeOnSelect: Ref<boolean>;
|
||
|
onSelect: (valuePath: SingleValueType) => void;
|
||
|
checkable: Ref<boolean | VueNode>;
|
||
|
searchOptions: Ref<DefaultOptionType[]>;
|
||
|
dropdownPrefixCls?: Ref<string>;
|
||
|
loadData: Ref<(selectOptions: DefaultOptionType[]) => void>;
|
||
|
expandTrigger: Ref<'hover' | 'click'>;
|
||
|
expandIcon: Ref<VueNode>;
|
||
|
loadingIcon: Ref<VueNode>;
|
||
|
dropdownMenuColumnStyle: Ref<CSSProperties>;
|
||
|
customSlots: Ref<Record<string, Function>>;
|
||
|
}
|
||
|
|
||
|
const CascaderContextKey: InjectionKey<CascaderContextProps> = Symbol('CascaderContextKey');
|
||
|
export const useProvideCascader = (props: CascaderContextProps) => {
|
||
|
provide(CascaderContextKey, props);
|
||
|
};
|
||
|
|
||
|
export const useInjectCascader = () => {
|
||
|
return inject(CascaderContextKey);
|
||
|
};
|