Skip to content

Commit

Permalink
fix(comp:cascader): set expandedKeys with default value
Browse files Browse the repository at this point in the history
fix #1192
  • Loading branch information
danranVm committed Nov 30, 2022
1 parent 6878994 commit faf9e1d
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 9 deletions.
45 changes: 37 additions & 8 deletions packages/components/cascader/__tests__/cascader.spec.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { MountingOptions, mount } from '@vue/test-utils'
import { MountingOptions, VueWrapper, mount } from '@vue/test-utils'

import { renderWork } from '@tests'

Expand Down Expand Up @@ -125,6 +125,9 @@ const defaultMultipleValue = [
]
const defaultExpandedKeys = ['components', 'general']

const getAllOptionGroup = (wrapper: VueWrapper) =>
wrapper.findComponent(OverlayContent).findAll('.ix-cascader-option-group')

describe('Cascader', () => {
describe('single work', () => {
const CascaderMount = (options?: MountingOptions<Partial<CascaderProps>>) => {
Expand Down Expand Up @@ -168,19 +171,47 @@ describe('Cascader', () => {

expect(wrapper.find('.ix-selector-item').exists()).toBe(false)

const allGroups = wrapper.findComponent(OverlayContent).findAll('.ix-cascader-option-group')

await allGroups[2].find('.ix-cascader-option').trigger('click')
await getAllOptionGroup(wrapper)[2].find('.ix-cascader-option').trigger('click')

// expect(onUpdateValue).toBeCalledWith(['components', 'general', 'button'])
// expect(onChange).toBeCalledWith(['components', 'general', 'button'], undefined)

await wrapper.setProps({ value: ['components', 'general', 'button'] })
await allGroups[2].find('.ix-cascader-option').trigger('click')
await getAllOptionGroup(wrapper)[2].find('.ix-cascader-option').trigger('click')

// expect(onUpdateValue).toBeCalledWith(['pro', 'pro-layout'])
// expect(onChange).toBeCalledWith(['pro', 'pro-layout'], ['components', 'general', 'button'])
})

test('v-model:expandedKeys work', async () => {
const onUpdateExpandedKeys = vi.fn()
const wrapper = CascaderMount({
props: {
open: true,
expandedKeys: defaultExpandedKeys,
'onUpdate:expandedKeys': onUpdateExpandedKeys,
},
})

expect(getAllOptionGroup(wrapper).length).toBe(3)

await wrapper.setProps({ expandedKeys: ['components'] })

expect(getAllOptionGroup(wrapper).length).toBe(2)

await wrapper
.findComponent(OverlayContent)
.findAll('.ix-cascader-option-group')[1]
.find('.ix-cascader-option')
.trigger('click')

expect(onUpdateExpandedKeys).toBeCalledWith(['components', 'general'])

// see https://github.com/IDuxFE/idux/issues/1192
await wrapper.setProps({ expandedKeys: undefined })

expect(getAllOptionGroup(wrapper).length).toBe(3)
})
})

describe('multiple work', () => {
Expand Down Expand Up @@ -221,9 +252,7 @@ describe('Cascader', () => {

expect(wrapper.findAll('.ix-selector-item').length).toBe(1)

const allGroups = wrapper.findComponent(OverlayContent).findAll('.ix-cascader-option-group')

await allGroups[2].find('.ix-cascader-option').trigger('click')
await getAllOptionGroup(wrapper)[2].find('.ix-cascader-option').trigger('click')

// expect(onUpdateValue).toBeCalledWith([
// ['components', 'general', 'button'],
Expand Down
1 change: 1 addition & 0 deletions packages/components/cascader/src/Cascader.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ export default defineComponent({
mergedLabelKey,
mergedFullPath,
mergedDataMap,
selectedStateContext.selectedKeys,
)

watch(overlayOpened, opened => {
Expand Down
15 changes: 14 additions & 1 deletion packages/components/cascader/src/composables/useExpandable.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@

import { type ComputedRef, type Ref, type WritableComputedRef, ref } from 'vue'

import { isNil } from 'lodash-es'

import { type VKey, callEmit, useControlledProp } from '@idux/cdk/utils'
import { type GetKeyFn } from '@idux/components/utils'

Expand All @@ -27,8 +29,19 @@ export function useExpandable(
mergedLabelKey: ComputedRef<string>,
mergedFullPath: ComputedRef<boolean>,
mergedDataMap: ComputedRef<Map<VKey, MergedData>>,
selectedKeys: ComputedRef<VKey[]>,
): ExpandableContext {
const [expandedKeys, setExpandedKeys] = useControlledProp(props, 'expandedKeys', () => [])
const getDefaultExpandedKeys = (firstSelectedKey: VKey) => {
if (isNil(firstSelectedKey)) {
return []
}
const dataMap = mergedDataMap.value
const currData = dataMap.get(firstSelectedKey)
return getParentKeys(dataMap, currData, false)
}
const [expandedKeys, setExpandedKeys] = useControlledProp(props, 'expandedKeys', () =>
getDefaultExpandedKeys(selectedKeys.value[0]),
)
const [loadedKeys, setLoadedKeys] = useControlledProp(props, 'loadedKeys', () => [])
const loadingKeys = ref<VKey[]>([])

Expand Down

0 comments on commit faf9e1d

Please sign in to comment.