mirror of
https://github.com/element-plus/element-plus.git
synced 2026-03-13 07:51:17 +08:00
feat(components): [cascader] lazyLoad support reject (#22283)
* feat(components): [cascader] `lazyLoad` support reject * feat: update * fix: update * feat: remove unnecessary change * test: add new test * fix: update * feat: update * docs: update * docs: update
This commit is contained in:
@@ -83,6 +83,7 @@ const slots = useSlots()
|
||||
|
||||
let store: Store
|
||||
const initialLoaded = ref(true)
|
||||
const initialLoadedOnce = ref(false)
|
||||
const menuList = ref<CascaderMenuInstance[]>([])
|
||||
const checkedValue = ref<CascaderValue>()
|
||||
const menus = ref<CascaderNode[][]>([])
|
||||
@@ -128,9 +129,20 @@ const lazyLoad: ElCascaderPanelContext['lazyLoad'] = (node, cb) => {
|
||||
_node.childrenData = _node.childrenData || []
|
||||
dataList && store?.appendNodes(dataList, parent as Node)
|
||||
dataList && cb?.(dataList)
|
||||
if (node.level === 0) {
|
||||
initialLoadedOnce.value = true
|
||||
}
|
||||
}
|
||||
|
||||
cfg.lazyLoad(node, resolve)
|
||||
const reject = () => {
|
||||
node!.loading = false
|
||||
node!.loaded = false
|
||||
if (node!.level === 0) {
|
||||
initialLoaded.value = true
|
||||
}
|
||||
}
|
||||
|
||||
cfg.lazyLoad(node, resolve, reject)
|
||||
}
|
||||
|
||||
const expandNode: ElCascaderPanelContext['expandNode'] = (node, silent) => {
|
||||
@@ -376,6 +388,11 @@ watch(
|
||||
}
|
||||
)
|
||||
|
||||
const loadLazyRootNodes = () => {
|
||||
if (initialLoadedOnce.value) return
|
||||
initStore()
|
||||
}
|
||||
|
||||
onBeforeUpdate(() => (menuList.value = []))
|
||||
|
||||
onMounted(() => !isEmpty(props.modelValue) && syncCheckedValue())
|
||||
@@ -397,5 +414,6 @@ defineExpose({
|
||||
clearCheckedNodes,
|
||||
calculateCheckedValue,
|
||||
scrollToExpandingNode,
|
||||
loadLazyRootNodes,
|
||||
})
|
||||
</script>
|
||||
|
||||
@@ -14,7 +14,11 @@ export type ExpandTrigger = 'click' | 'hover'
|
||||
export type isDisabled = (data: CascaderOption, node: CascaderNode) => boolean
|
||||
export type isLeaf = (data: CascaderOption, node: CascaderNode) => boolean
|
||||
export type Resolve = (dataList?: CascaderOption[]) => void
|
||||
export type LazyLoad = (node: CascaderNode, resolve: Resolve) => void
|
||||
export type LazyLoad = (
|
||||
node: CascaderNode,
|
||||
resolve: Resolve,
|
||||
reject: () => void
|
||||
) => void
|
||||
export interface RenderLabelProps {
|
||||
node: CascaderNode
|
||||
data: CascaderOption
|
||||
|
||||
Reference in New Issue
Block a user