Skip to content

Commit

Permalink
fix(pro:table): the checkbox logic in the layout tool tree is incorrect
Browse files Browse the repository at this point in the history
  • Loading branch information
liuzaijiang committed Jul 4, 2023
1 parent 1e23dc3 commit 9fab237
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 28 deletions.
17 changes: 3 additions & 14 deletions packages/pro/table/src/contents/LayoutToolContent.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import { IxCheckbox } from '@idux/components/checkbox'
import LayoutToolTree from './LayoutToolTree'
import { proTableToken } from '../token'
import { type ProTableColumn, proTableLayoutToolContentProps } from '../types'
import { loopColumns } from '../utils'

export default defineComponent({
props: proTableLayoutToolContentProps,
Expand Down Expand Up @@ -42,8 +43,8 @@ export default defineComponent({

const handleCheckAll = (checked: boolean) => {
loopColumns(mergedColumns.value, column => {
// undefined or true
if (column.changeVisible !== false) {
// use child cascaderStrategy,undefined or true
if (!column.children && column.changeVisible !== false) {
column.visible = checked
}
})
Expand Down Expand Up @@ -169,15 +170,3 @@ function groupColumns(mergedColumns: ProTableColumn[]) {

return { startColumns, endColumns, centerColumns }
}

function loopColumns(columns: ProTableColumn[] | undefined, cb: (column: ProTableColumn) => void) {
if (!columns || columns.length === 0) {
return
}
columns.forEach(column => {
cb(column)
if ('children' in column) {
loopColumns(column.children!, cb)
}
})
}
22 changes: 8 additions & 14 deletions packages/pro/table/src/contents/LayoutToolTree.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,25 +26,19 @@ export default defineComponent({
},
setup(props) {
const key = useKey()
const { locale, mergedPrefixCls, mergedColumnMap } = inject(proTableToken)!
const { locale, mergedPrefixCls } = inject(proTableToken)!

const checkedKeys = computed(() => getCheckedKeys(props.columns))

const onCheck = (checked: boolean, column: ProTableColumn) => {
column.visible = checked
loopColumns(column.children, child => {
child.visible = checked
})
if (checked) {
const map = mergedColumnMap.value
let currColumn = column
while (currColumn?.parentKey) {
const parent = map.get(currColumn.parentKey)
if (parent && parent.visible === false) {
parent.visible = undefined
if (!column.children) {
column.visible = checked
} else {
loopColumns(column.children, child => {
if (!child.children && child.changeVisible !== false) {
child.visible = checked
}
currColumn = parent
}
})
}
props.onVisibleChange()
}
Expand Down

0 comments on commit 9fab237

Please sign in to comment.