mirror of
https://github.com/element-plus/element-plus.git
synced 2026-03-13 07:51:17 +08:00
52 lines
1.3 KiB
TypeScript
52 lines
1.3 KiB
TypeScript
// @ts-nocheck
|
|
import { computed, nextTick, toRefs } from 'vue'
|
|
import { pick } from 'lodash-unified'
|
|
import ElSelect from '@element-plus/components/select'
|
|
import { useNamespace } from '@element-plus/hooks'
|
|
import type { Ref } from 'vue'
|
|
import type ElTree from '@element-plus/components/tree'
|
|
|
|
export const useSelect = (
|
|
props,
|
|
{ attrs },
|
|
{
|
|
tree,
|
|
key,
|
|
}: {
|
|
select: Ref<InstanceType<typeof ElSelect> | undefined>
|
|
tree: Ref<InstanceType<typeof ElTree> | undefined>
|
|
key: Ref<string>
|
|
}
|
|
) => {
|
|
const ns = useNamespace('tree-select')
|
|
|
|
const result = {
|
|
...pick(toRefs(props), Object.keys(ElSelect.props)),
|
|
...attrs,
|
|
valueKey: key,
|
|
popperClass: computed(() => {
|
|
const classes = [ns.e('popper')]
|
|
if (props.popperClass) classes.push(props.popperClass)
|
|
return classes.join(' ')
|
|
}),
|
|
filterMethod: (keyword = '') => {
|
|
if (props.filterMethod) props.filterMethod(keyword)
|
|
|
|
nextTick(() => {
|
|
// let tree node expand only, same with tree filter
|
|
tree.value?.filter(keyword)
|
|
})
|
|
},
|
|
// clear filter text when visible change
|
|
onVisibleChange: (visible: boolean) => {
|
|
attrs.onVisibleChange?.(visible)
|
|
|
|
if (props.filterable && visible) {
|
|
result.filterMethod()
|
|
}
|
|
},
|
|
}
|
|
|
|
return result
|
|
}
|