{"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,mBAAmB;CACpC,MAAM,mBAAmB,IAAI,KAAK;CAClC,MAAM,aAAuB,IAAI,CAAC,CAAC;CAEnC,MAAM,gBAAgB,KAAQ,UAAkB;EAC9C,MAAM,eAAe,SAAS,MAAM,OAAO,cAAc;EACzD,OAAO,eAAe,KAAK,KAAK,KAAK;CACvC;CAEA,MAAM,yBAAyB;EAC7B,MAAM,OAAO,YAAY,KAAK,SAAS,CAAC;EACxC,MAAM,SAAS,YAAY,OAAO;EAClC,IAAI,iBAAiB,OACnB,WAAW,QAAQ,SAAS,MAAM,OAAO,cAAc,QACnD,KAAK,OAAO,YAAY,IACxB,KAAK,MAAM;OACV,IAAI,QAAQ;GAEjB,MAAM,gBAAgB,WAAW,WAAW,OAAO,MAAM;GACzD,WAAW,QAAQ,KAAK,QAAQ,KAAK,UAAU;IAC7C,MAAM,QAAQ,eAAe,KAAK,MAAM;IACxC,OAAO,CAAC,CAAC,cAAc,UAAU,aAAa,KAAK,KAAK;GAC1D,CAAC;EACH,OACE,WAAW,QAAQ,CAAC;CAExB;CAEA,MAAM,sBAAsB,KAAQ,aAAuB;EAEzD,MAAM,YADU,YAAY,KAAK,SAAS,CAAC,EAAA,CAClB,QAAQ,GAAG;EACpC,IAAI,WAAW,MAAM,CAAC,aAAa,KAAK,QAAQ,GAAG;EAWnD,IATgB,gBACd,WAAW,OACX,KACA,UACA,KAAA,GACA,KAAA,GACA,KAAA,GACA,YAAY,OAAO,KAEX,GACR,SAAS,KAAK,iBAAiB,KAAK,WAAW,MAAM,MAAM,CAAC;CAEhE;CAEA,MAAM,oBAAoB,YAAiC;EACzD,SAAS,MAAM,aAAa;EAE5B,MAAM,OAAO,YAAY,KAAK,SAAS,CAAC;EACxC,MAAM,SAAS,YAAY,OAAO;EAClC,MAAM,UAAU,WAAW,MAAM,MAAM;EACvC,WAAW,QAAQ,QAAQ,QAAQ,MAAW,QAAQ;GACpD,MAAM,OAAO,QAAQ;GACrB,IAAI,QAAQ,aAAa,KAAK,KAAK,KAAK,KAAK,GAC3C,KAAK,KAAK,KAAK,GAAG;GAEpB,OAAO;EACT,GAAG,CAAC,CAAC;CACP;CAEA,MAAM,iBAAiB,QAAoB;EACzC,MAAM,SAAS,YAAY,OAAO;EAClC,IAAI,QAEF,OAAO,CAAC,CADU,WAAW,WAAW,OAAO,MAC9B,CAAC,CAAC,eAAe,KAAK,MAAM;EAE/C,OAAO,WAAW,MAAM,SAAS,GAAG;CACtC;CACA,OAAO;EACL;EACA;EACA;EACA;EACA,QAAQ;GACN;GACA;EACF;CACF;AACF"}