{"version":3,"file":"expand.mjs","names":[],"sources":["../../../../../../../packages/components/table/src/store/expand.ts"],"sourcesContent":["import { getCurrentInstance, ref } from 'vue'\nimport { getKeysMap, getRowIdentity, toggleRowStatus } from '../util'\n\nimport type { Ref } from 'vue'\nimport type { WatcherPropsData } from '.'\nimport type { DefaultRow, Table } from '../table/defaults'\n\nfunction useExpand<T extends DefaultRow>(watcherData: WatcherPropsData<T>) {\n  const instance = getCurrentInstance() as Table<T>\n  const defaultExpandAll = ref(false)\n  const expandRows: Ref<T[]> = ref([])\n\n  const canRowExpand = (row: T, index: number) => {\n    const expandableFn = instance.store.states.rowExpandable.value\n    return expandableFn?.(row, index) ?? true\n  }\n\n  const updateExpandRows = () => {\n    const data = watcherData.data.value || []\n    const rowKey = watcherData.rowKey.value\n    if (defaultExpandAll.value) {\n      expandRows.value = instance.store.states.rowExpandable.value\n        ? data.filter(canRowExpand)\n        : data.slice()\n    } else if (rowKey) {\n      // TODO：这里的代码可以优化\n      const expandRowsMap = getKeysMap(expandRows.value, rowKey)\n      expandRows.value = data.filter((row, index) => {\n        const rowId = getRowIdentity(row, rowKey)\n        return !!expandRowsMap[rowId] && canRowExpand(row, index)\n      })\n    } else {\n      expandRows.value = []\n    }\n  }\n\n  const toggleRowExpansion = (row: T, expanded?: boolean) => {\n    const dataArr = watcherData.data.value || []\n    const rowIndex = dataArr.indexOf(row)\n    if (rowIndex > -1 && !canRowExpand(row, rowIndex)) return\n\n    const changed = toggleRowStatus(\n      expandRows.value,\n      row,\n      expanded,\n      undefined,\n      undefined,\n      undefined,\n      watcherData.rowKey.value\n    )\n    if (changed) {\n      instance.emit('expand-change', row, expandRows.value.slice())\n    }\n  }\n\n  const setExpandRowKeys = (rowKeys: (string | number)[]) => {\n    instance.store.assertRowKey()\n    // TODO：这里的代码可以优化\n    const data = watcherData.data.value || []\n    const rowKey = watcherData.rowKey.value\n    const keysMap = getKeysMap(data, rowKey)\n    expandRows.value = rowKeys.reduce((prev: T[], cur) => {\n      const info = keysMap[cur]\n      if (info && canRowExpand(info.row, info.index)) {\n        prev.push(info.row)\n      }\n      return prev\n    }, [])\n  }\n\n  const isRowExpanded = (row: T): boolean => {\n    const rowKey = watcherData.rowKey.value\n    if (rowKey) {\n      const expandMap = getKeysMap(expandRows.value, rowKey)\n      return !!expandMap[getRowIdentity(row, rowKey)]\n    }\n    return expandRows.value.includes(row)\n  }\n  return {\n    updateExpandRows,\n    toggleRowExpansion,\n    setExpandRowKeys,\n    isRowExpanded,\n    states: {\n      expandRows,\n      defaultExpandAll,\n    },\n  }\n}\n\nexport default useExpand\n"],"mappings":";;;;AAOA,SAAS,UAAgC,aAAkC;CACzE,MAAM,WAAW,oBAAoB;CACrC,MAAM,mBAAmB,IAAI,MAAM;CACnC,MAAM,aAAuB,IAAI,EAAE,CAAC;CAEpC,MAAM,gBAAgB,KAAQ,UAAkB;EAC9C,MAAM,eAAe,SAAS,MAAM,OAAO,cAAc;AACzD,SAAO,eAAe,KAAK,MAAM,IAAI;;CAGvC,MAAM,yBAAyB;EAC7B,MAAM,OAAO,YAAY,KAAK,SAAS,EAAE;EACzC,MAAM,SAAS,YAAY,OAAO;AAClC,MAAI,iBAAiB,MACnB,YAAW,QAAQ,SAAS,MAAM,OAAO,cAAc,QACnD,KAAK,OAAO,aAAa,GACzB,KAAK,OAAO;WACP,QAAQ;GAEjB,MAAM,gBAAgB,WAAW,WAAW,OAAO,OAAO;AAC1D,cAAW,QAAQ,KAAK,QAAQ,KAAK,UAAU;AAE7C,WAAO,CAAC,CAAC,cADK,eAAe,KAAK,OAAO,KACR,aAAa,KAAK,MAAM;KACzD;QAEF,YAAW,QAAQ,EAAE;;CAIzB,MAAM,sBAAsB,KAAQ,aAAuB;EAEzD,MAAM,YADU,YAAY,KAAK,SAAS,EAAE,EACnB,QAAQ,IAAI;AACrC,MAAI,WAAW,MAAM,CAAC,aAAa,KAAK,SAAS,CAAE;AAWnD,MATgB,gBACd,WAAW,OACX,KACA,UACA,QACA,QACA,QACA,YAAY,OAAO,MACpB,CAEC,UAAS,KAAK,iBAAiB,KAAK,WAAW,MAAM,OAAO,CAAC;;CAIjE,MAAM,oBAAoB,YAAiC;AACzD,WAAS,MAAM,cAAc;EAE7B,MAAM,OAAO,YAAY,KAAK,SAAS,EAAE;EACzC,MAAM,SAAS,YAAY,OAAO;EAClC,MAAM,UAAU,WAAW,MAAM,OAAO;AACxC,aAAW,QAAQ,QAAQ,QAAQ,MAAW,QAAQ;GACpD,MAAM,OAAO,QAAQ;AACrB,OAAI,QAAQ,aAAa,KAAK,KAAK,KAAK,MAAM,CAC5C,MAAK,KAAK,KAAK,IAAI;AAErB,UAAO;KACN,EAAE,CAAC;;CAGR,MAAM,iBAAiB,QAAoB;EACzC,MAAM,SAAS,YAAY,OAAO;AAClC,MAAI,OAEF,QAAO,CAAC,CADU,WAAW,WAAW,OAAO,OAAO,CACnC,eAAe,KAAK,OAAO;AAEhD,SAAO,WAAW,MAAM,SAAS,IAAI;;AAEvC,QAAO;EACL;EACA;EACA;EACA;EACA,QAAQ;GACN;GACA;GACD;EACF"}