{"version":3,"file":"expand.mjs","sources":["../../../../../../src/components/ivue-table/store/expand.ts"],"sourcesContent":["import { ref, getCurrentInstance } from 'vue';\r\n\r\nimport { toggleRowStatus, getKeysMap, getRowIdentity } from '../utils';\r\n\r\n// ts\r\nimport type { WatcherPropsData } from './index';\r\nimport type { Table } from '../table/defaults';\r\nimport type { TableColumnCtx } from '../table-column/defaults';\r\n\r\n// 展开行数据\r\nfunction useExpand(watcherData: WatcherPropsData) {\r\n  // vm\r\n  const vm = getCurrentInstance() as Table;\r\n\r\n  // 是否默认展开所有行，当 Table 包含展开行存在或者为树形表格时有效\r\n  const defaultExpandAll = ref(false);\r\n\r\n  // 展开的行\r\n  const expandRows = ref<TableColumnCtx[]>([]);\r\n\r\n  // 更新展开行\r\n  const updateExpandRows = () => {\r\n    // 数据\r\n    const data = watcherData.data.value || [];\r\n    // 行key\r\n    const rowKey = watcherData.rowKey.value;\r\n    // 展开所有行\r\n    if (defaultExpandAll.value) {\r\n      // 浅拷贝数组->防止修改原始数据\r\n      expandRows.value = data.slice();\r\n    }\r\n    // 行key\r\n    else if (rowKey) {\r\n      const expandRowsMap = getKeysMap(expandRows.value, rowKey);\r\n\r\n      expandRows.value = data.reduce((prev, row) => {\r\n        // 获取rowKey对应的数据\r\n        const rowId = getRowIdentity(row, rowKey);\r\n\r\n        const rowInfo = expandRowsMap[rowId];\r\n\r\n        if (rowInfo) {\r\n          prev.push(row);\r\n        }\r\n\r\n        return prev;\r\n      }, []);\r\n    }\r\n    //其他\r\n    else {\r\n      expandRows.value = [];\r\n    }\r\n  };\r\n\r\n  // 切换行展开\r\n  const toggleRowExpansion = (row, expanded?: boolean) => {\r\n    const changed = toggleRowStatus(expandRows.value, row, expanded);\r\n\r\n    // 当用户对某一行展开或者关闭的时候会触发该事件\r\n    if (changed) {\r\n      vm.emit('on-expand-change', row, expandRows.value.slice());\r\n    }\r\n  };\r\n\r\n  // 设置展开行的key\r\n  const setExpandRowKeys = (rowKeys: string[]) => {\r\n    // 检查 rowKey 是否存在\r\n    vm.store.assertRowKey();\r\n\r\n    // 数据\r\n    const data = watcherData.data.value || [];\r\n    // rowkey\r\n    const rowKey = watcherData.rowKey.value;\r\n    // 获取数组的key\r\n    const keysMap = getKeysMap(data, rowKey);\r\n\r\n    // 展开的行\r\n    expandRows.value = rowKeys.reduce((prev, cur: string) => {\r\n      // 当前内容\r\n      const info = keysMap[cur];\r\n\r\n      // 行数据\r\n      if (info) {\r\n        prev.push(info.row);\r\n      }\r\n\r\n      return prev;\r\n    }, []);\r\n  };\r\n\r\n  // 当前行是否有展开\r\n  const isRowExpanded = (row): boolean => {\r\n    const rowKey = watcherData.rowKey.value;\r\n    // 行key\r\n    if (rowKey) {\r\n      // 获取数组的key\r\n      const expandMap = getKeysMap(expandRows.value, rowKey);\r\n\r\n      // 获取rowKey对应的数据\r\n      return !!expandMap[getRowIdentity(row, rowKey)];\r\n    }\r\n\r\n    // 是否存在当前行\r\n    return expandRows.value.includes(row);\r\n  };\r\n\r\n  return {\r\n    updateExpandRows,\r\n    toggleRowExpansion,\r\n    setExpandRowKeys,\r\n    isRowExpanded,\r\n    states: {\r\n      defaultExpandAll,\r\n      expandRows,\r\n    },\r\n  };\r\n}\r\n\r\nexport default useExpand;\r\n"],"names":[],"mappings":"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"}