Files
element-plus/packages/components/tree-select/src/cache-options.ts
Noblet Ouways 2f17df1209 style(eslint-config): newline before import type (#21036)
* perf: change to import-x

* feat: add rules

* chore: fix rule

* chore: fix

* chore: fix

* chore: fix

* style: `pnpm lint:fix`

* Revert "style: `pnpm lint:fix`"

This reverts commit db0116a288.

* Revert "chore: fix"

This reverts commit 69c82a90c0.

* chore: fix

* style: `pnpm lint:fix`

* fix: lint

* chore: `pnpm format`
2025-06-16 15:37:12 +08:00

55 lines
1.5 KiB
TypeScript

import { defineComponent, inject, watch } from 'vue'
import { selectKey } from '@element-plus/components/select'
import { isClient } from '@element-plus/utils'
import type { SelectContext } from '@element-plus/components/select'
import type { PropType } from 'vue'
// same as el-option instance,
// these are required for `cachedOptions`
export type CacheOption = {
value: string | number | boolean | object
currentLabel: string | number
isDisabled: boolean
}
export default defineComponent({
props: {
data: {
type: Array as PropType<CacheOption[]>,
default: () => [],
},
},
setup(props) {
const select = inject(selectKey) as NonNullable<SelectContext>
watch(
() => props.data,
() => {
props.data.forEach((item) => {
if (!select.states.cachedOptions.has(item.value)) {
// TODO: the type of 'item' is not compatible with the type of 'cachedOptions',
// which may indicate potential runtime issues.
// @ts-expect-error
select.states.cachedOptions.set(item.value, item)
}
})
// fork from packages/select/src/useSelect.ts#330
const inputs = select.selectRef?.querySelectorAll('input') || []
if (
isClient &&
!Array.from(inputs).includes(
document.activeElement as HTMLInputElement
)
) {
select.setSelected()
}
},
{ flush: 'post', immediate: true }
)
return () => undefined
},
})