{"version":3,"file":"expand.mjs","sources":["../../../../../../../packages/components/table/src/store/expand.ts"],"sourcesContent":["import { ref, getCurrentInstance } from 'vue'\nimport { toggleRowStatus, getKeysMap, getRowIdentity } from '../util'\n\nimport type { Ref } from 'vue'\nimport type { WatcherPropsData } from './index'\nimport type { Table } from '../table/defaults'\n\nfunction useExpand<T>(watcherData: WatcherPropsData<T>) {\n  const instance = getCurrentInstance() as Table<T>\n  const defaultExpandAll = ref(false)\n  const expandRows: Ref<T[]> = ref([])\n  const updateExpandRows = () => {\n    const data = watcherData.data.value || []\n    const rowKey = watcherData.rowKey.value\n    if (defaultExpandAll.value) {\n      expandRows.value = data.slice()\n    } else if (rowKey) {\n      // TODO：这里的代码可以优化\n      const expandRowsMap = getKeysMap(expandRows.value, rowKey)\n      expandRows.value = data.reduce((prev: T[], row: T) => {\n        const rowId = getRowIdentity(row, rowKey)\n        const rowInfo = expandRowsMap[rowId]\n        if (rowInfo) {\n          prev.push(row)\n        }\n        return prev\n      }, [])\n    } else {\n      expandRows.value = []\n    }\n  }\n\n  const toggleRowExpansion = (row: T, expanded?: boolean) => {\n    const changed = toggleRowStatus(expandRows.value, row, expanded)\n    if (changed) {\n      instance.emit('expand-change', row, expandRows.value.slice())\n      instance.store.scheduleLayout()\n    }\n  }\n\n  const setExpandRowKeys = (rowKeys: string[]) => {\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: string) => {\n      const info = keysMap[cur]\n      if (info) {\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.indexOf(row) !== -1\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"],"names":[],"mappings":";;;AAOA,mBAAsB,aAAkC;AACtD,QAAM,WAAW;AACjB,QAAM,mBAAmB,IAAI;AAC7B,QAAM,aAAuB,IAAI;AACjC,QAAM,mBAAmB,MAAM;AAC7B,UAAM,OAAO,YAAY,KAAK,SAAS;AACvC,UAAM,SAAS,YAAY,OAAO;AAClC,QAAI,iBAAiB,OAAO;AAC1B,iBAAW,QAAQ,KAAK;AAAA,eACf,QAAQ;AAEjB,YAAM,gBAAgB,WAAW,WAAW,OAAO;AACnD,iBAAW,QAAQ,KAAK,OAAO,CAAC,MAAW,QAAW;AACpD,cAAM,QAAQ,eAAe,KAAK;AAClC,cAAM,UAAU,cAAc;AAC9B,YAAI,SAAS;AACX,eAAK,KAAK;AAAA;AAEZ,eAAO;AAAA,SACN;AAAA,WACE;AACL,iBAAW,QAAQ;AAAA;AAAA;AAIvB,QAAM,qBAAqB,CAAC,KAAQ,aAAuB;AACzD,UAAM,UAAU,gBAAgB,WAAW,OAAO,KAAK;AACvD,QAAI,SAAS;AACX,eAAS,KAAK,iBAAiB,KAAK,WAAW,MAAM;AACrD,eAAS,MAAM;AAAA;AAAA;AAInB,QAAM,mBAAmB,CAAC,YAAsB;AAC9C,aAAS,MAAM;AAEf,UAAM,OAAO,YAAY,KAAK,SAAS;AACvC,UAAM,SAAS,YAAY,OAAO;AAClC,UAAM,UAAU,WAAW,MAAM;AACjC,eAAW,QAAQ,QAAQ,OAAO,CAAC,MAAW,QAAgB;AAC5D,YAAM,OAAO,QAAQ;AACrB,UAAI,MAAM;AACR,aAAK,KAAK,KAAK;AAAA;AAEjB,aAAO;AAAA,OACN;AAAA;AAGL,QAAM,gBAAgB,CAAC,QAAoB;AACzC,UAAM,SAAS,YAAY,OAAO;AAClC,QAAI,QAAQ;AACV,YAAM,YAAY,WAAW,WAAW,OAAO;AAC/C,aAAO,CAAC,CAAC,UAAU,eAAe,KAAK;AAAA;AAEzC,WAAO,WAAW,MAAM,QAAQ,SAAS;AAAA;AAE3C,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,MACN;AAAA,MACA;AAAA;AAAA;AAAA;;;;"}