{"version":3,"file":"use-state.mjs","sources":["../../../../../../packages/components/data-table/src/hooks/use-state.ts"],"sourcesContent":["import { computed, shallowReactive, shallowRef, watch } from 'vue'\nimport type {\n  DataTableEmits,\n  DataTableProps,\n  DataTableRow,\n  DataTreeRow\n} from '../data-table'\nimport { dfs } from '@element-ultra/utils'\n\nexport default function useState(props: DataTableProps, emit: DataTableEmits) {\n  const { tree, itemReactive } = props\n\n  const store = shallowReactive({\n    /** 多选时选中的数据 */\n    checked: shallowReactive(new Set<any>(props.checked)),\n    /** 单选时选中的数据 */\n    selected: props.selected as any,\n    /** 排序 */\n    sortKeys: shallowReactive<Record<string, 'asc' | 'dsc' | 'default'>>({}),\n    /** 表格数据 */\n    data: [] as (DataTableRow | DataTreeRow)[]\n  })\n\n  let uid = 0\n  const childrenKey = computed(() => {\n    const { tree } = props\n    return typeof tree === 'string' ? tree : 'children'\n  })\n\n  const treeData = shallowRef<DataTreeRow[]>([])\n\n  /** 深度优先递归包括data数据 */\n  const dfsReactive = (\n    arr: any[],\n    depth: number,\n    root?: DataTreeRow\n  ): DataTreeRow[] => {\n    return arr.map((item, index) => {\n      let ret: DataTreeRow = shallowReactive({\n        uid: uid++,\n        data: itemReactive ? shallowReactive(item) : item,\n        expanded: false,\n        loaded: false,\n        loading: false,\n        depth,\n        index\n      })\n      if (item[childrenKey.value]) {\n        ret.children = dfsReactive(item[childrenKey.value], depth + 1)\n        ret.loaded = true\n      }\n      return ret\n    })\n  }\n\n  /** 获取包装的行, 保存索引, uid等信息 */\n  const getWrappedRow = (data: any[]): (DataTableRow | DataTreeRow)[] => {\n    if (tree) return dfsReactive(data, 0)\n\n    return data.map((item, index) => {\n      return {\n        uid: uid++,\n        data: itemReactive ? shallowReactive(item) : item,\n        index\n      }\n    })\n  }\n\n  /** 深度优先递归碾平 */\n  const dfsFlat = (rows: DataTreeRow[], cb: (row: DataTreeRow) => void) => {\n    rows.forEach(row => {\n      cb(row)\n      row.children && row.expanded && dfsFlat(row.children, cb)\n    })\n  }\n  /**\n   * 获取碾平后的树形数据\n   * @param expandRow 是否展开行，展开式会碾平所有数据\n   */\n  const getFlatData = (expandRow?: boolean) => {\n    let ret: DataTreeRow[] = []\n    let index = 0\n    expandRow\n      ? dfsFlat(treeData.value, row => {\n          row.expanded = true\n          row.index = index++\n          ret.push(row)\n        })\n      : dfsFlat(treeData.value, row => {\n          row.index = index++\n          ret.push(row)\n        })\n\n    store.data = ret\n  }\n\n  watch(\n    () => props.data,\n    data => {\n      const { tree, defaultExpandAll } = props\n\n      const ret = getWrappedRow(data)\n      store.data = ret\n\n      if (tree) {\n        treeData.value = ret as DataTreeRow[]\n        defaultExpandAll && getFlatData(true)\n      }\n    },\n    { immediate: true }\n  )\n\n  watch(\n    () => props.checked,\n    checked => {\n      store.checked = shallowReactive(new Set<any>(checked))\n    }\n  )\n  watch(\n    () => props.selected,\n    selected => {\n      store.selected = selected\n    }\n  )\n\n  const sortTable = {\n    dsc: 'asc',\n    asc: 'default',\n    default: 'dsc'\n  } as const\n\n  const handleSort = (key: string) => {\n    store.sortKeys[key] = sortTable[store.sortKeys[key] || 'default']\n    emit('sort', store.sortKeys)\n  }\n\n  // 多选相关逻辑----------------------------------------\n  /** 全选中 */\n  const allChecked = computed(() => {\n    if (!props.data.length) return\n    if (!props.tree) {\n      return props.data.length === store.checked.size\n    }\n\n    let count = 0\n    dfs(treeData.value, row => {\n      count++\n    })\n\n    return count === store.checked.size\n  })\n\n  /** 部分选中 */\n  const someChecked = computed(() => {\n    return !!store.checked.size && !allChecked.value\n  })\n\n  /** 选择全部 */\n  const checkAll = () => {\n    let checked: any[] = []\n    const { data, checkable } = props\n    if (!props.tree) {\n      checked = typeof checkable === 'function' ? data.filter(checkable) : data\n    } else {\n      typeof checkable === 'function'\n        ? dfs(treeData.value, row => {\n            checkable(row.data) && checked.push(row.data)\n          })\n        : dfs(treeData.value, row => {\n            checked.push(row.data)\n          })\n    }\n\n    // 直接替换性能最高\n    store.checked = shallowReactive(new Set(checked))\n    emit('check', checked)\n  }\n\n  const clearChecked = () => {\n    store.checked.clear()\n    emit('check', Array.from(store.checked))\n  }\n\n  /**\n   * 切换单项的选中\n   * @param row 行\n   * @param check 指定是否选中\n   */\n  const toggleItemCheck = (row: any, check?: boolean) => {\n    const { checked } = store\n    if (check === undefined) {\n      checked.has(row.data) ? checked.delete(row.data) : checked.add(row.data)\n    } else {\n      if (check) {\n        checked.add(row.data)\n        row.children && dfs(row.children, r => checked.add(r.data))\n      } else {\n        checked.delete(row.data)\n        row.children && dfs(row.children, r => checked.delete(r.data))\n      }\n    }\n\n    // Set -> Array\n    emit('check', Array.from(checked))\n  }\n\n  // 单选相关逻辑\n\n  /** 单选切换 */\n  const toggleSelect = (item: null | any) => {\n    store.selected = item === null || store.selected === item ? null : item\n\n    emit('select', store.selected)\n  }\n\n  return {\n    store,\n    /** 全选中 */\n    allChecked,\n    /** 部分选中 */\n    someChecked,\n    /** 子节点key */\n    childrenKey,\n\n    /** 选中全部数据 */\n    checkAll,\n\n    /** 清除所有选中 */\n    clearChecked,\n\n    /** 切换单项的选中 */\n    toggleItemCheck,\n\n    /** 单选切换 */\n    toggleSelect,\n\n    /** 排序 */\n    handleSort,\n\n    /** 深度优先递归包括data数据 */\n    dfsReactive,\n\n    /** 获取扁平数据 */\n    getFlatData\n  }\n}\n\nexport type UseStateReturned = ReturnType<typeof useState>\n"],"names":["tree"],"mappings":";;;;AASwB,SAAA,QAAA,CAAS,OAAuB,IAAsB,EAAA;AAC5E,EAAM,MAAA,EAAE,IAAM,EAAA,YAAA,EAAiB,GAAA,KAAA,CAAA;AAE/B,EAAA,MAAM,QAAQ,eAAgB,CAAA;AAAA;AAAA,IAE5B,SAAS,eAAgB,CAAA,IAAI,GAAS,CAAA,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA;AAAA,IAEpD,UAAU,KAAM,CAAA,QAAA;AAAA;AAAA,IAEhB,QAAA,EAAU,eAA2D,CAAA,EAAE,CAAA;AAAA;AAAA,IAEvE,MAAM,EAAC;AAAA,GACR,CAAA,CAAA;AAED,EAAA,IAAI,GAAM,GAAA,CAAA,CAAA;AACV,EAAM,MAAA,WAAA,GAAc,SAAS,MAAM;AACjC,IAAM,MAAA,EAAE,IAAAA,EAAAA,KAAAA,EAAS,GAAA,KAAA,CAAA;AACjB,IAAO,OAAA,OAAOA,KAAS,KAAA,QAAA,GAAWA,KAAO,GAAA,UAAA,CAAA;AAAA,GAC1C,CAAA,CAAA;AAED,EAAM,MAAA,QAAA,GAAW,UAA0B,CAAA,EAAE,CAAA,CAAA;AAG7C,EAAA,MAAM,WAAc,GAAA,CAClB,GACA,EAAA,KAAA,EACA,IACkB,KAAA;AAClB,IAAA,OAAO,GAAI,CAAA,GAAA,CAAI,CAAC,IAAA,EAAM,KAAU,KAAA;AAC9B,MAAA,IAAI,MAAmB,eAAgB,CAAA;AAAA,QACrC,GAAK,EAAA,GAAA,EAAA;AAAA,QACL,IAAM,EAAA,YAAA,GAAe,eAAgB,CAAA,IAAI,CAAI,GAAA,IAAA;AAAA,QAC7C,QAAU,EAAA,KAAA;AAAA,QACV,MAAQ,EAAA,KAAA;AAAA,QACR,OAAS,EAAA,KAAA;AAAA,QACT,KAAA;AAAA,QACA,KAAA;AAAA,OACD,CAAA,CAAA;AACD,MAAI,IAAA,IAAA,CAAK,WAAY,CAAA,KAAK,CAAG,EAAA;AAC3B,QAAA,GAAA,CAAI,WAAW,WAAY,CAAA,IAAA,CAAK,YAAY,KAAK,CAAA,EAAG,QAAQ,CAAC,CAAA,CAAA;AAC7D,QAAA,GAAA,CAAI,MAAS,GAAA,IAAA,CAAA;AAAA,OACf;AACA,MAAO,OAAA,GAAA,CAAA;AAAA,KACR,CAAA,CAAA;AAAA,GACH,CAAA;AAGA,EAAM,MAAA,aAAA,GAAgB,CAAC,IAAgD,KAAA;AACrE,IAAI,IAAA,IAAA;AAAM,MAAO,OAAA,WAAA,CAAY,MAAM,CAAC,CAAA,CAAA;AAEpC,IAAA,OAAO,IAAK,CAAA,GAAA,CAAI,CAAC,IAAA,EAAM,KAAU,KAAA;AAC/B,MAAO,OAAA;AAAA,QACL,GAAK,EAAA,GAAA,EAAA;AAAA,QACL,IAAM,EAAA,YAAA,GAAe,eAAgB,CAAA,IAAI,CAAI,GAAA,IAAA;AAAA,QAC7C,KAAA;AAAA,OACF,CAAA;AAAA,KACD,CAAA,CAAA;AAAA,GACH,CAAA;AAGA,EAAM,MAAA,OAAA,GAAU,CAAC,IAAA,EAAqB,EAAmC,KAAA;AACvE,IAAA,IAAA,CAAK,QAAQ,CAAO,GAAA,KAAA;AAClB,MAAA,EAAA,CAAG,GAAG,CAAA,CAAA;AACN,MAAA,GAAA,CAAI,YAAY,GAAI,CAAA,QAAA,IAAY,OAAQ,CAAA,GAAA,CAAI,UAAU,EAAE,CAAA,CAAA;AAAA,KACzD,CAAA,CAAA;AAAA,GACH,CAAA;AAKA,EAAM,MAAA,WAAA,GAAc,CAAC,SAAwB,KAAA;AAC3C,IAAA,IAAI,MAAqB,EAAC,CAAA;AAC1B,IAAA,IAAI,KAAQ,GAAA,CAAA,CAAA;AACZ,IACI,SAAA,GAAA,OAAA,CAAQ,QAAS,CAAA,KAAA,EAAO,CAAO,GAAA,KAAA;AAC7B,MAAA,GAAA,CAAI,QAAW,GAAA,IAAA,CAAA;AACf,MAAA,GAAA,CAAI,KAAQ,GAAA,KAAA,EAAA,CAAA;AACZ,MAAA,GAAA,CAAI,KAAK,GAAG,CAAA,CAAA;AAAA,KACb,CAAA,GACD,OAAQ,CAAA,QAAA,CAAS,OAAO,CAAO,GAAA,KAAA;AAC7B,MAAA,GAAA,CAAI,KAAQ,GAAA,KAAA,EAAA,CAAA;AACZ,MAAA,GAAA,CAAI,KAAK,GAAG,CAAA,CAAA;AAAA,KACb,CAAA,CAAA;AAEL,IAAA,KAAA,CAAM,IAAO,GAAA,GAAA,CAAA;AAAA,GACf,CAAA;AAEA,EAAA,KAAA;AAAA,IACE,MAAM,KAAM,CAAA,IAAA;AAAA,IACZ,CAAQ,IAAA,KAAA;AACN,MAAA,MAAM,EAAE,IAAA,EAAAA,KAAM,EAAA,gBAAA,EAAqB,GAAA,KAAA,CAAA;AAEnC,MAAM,MAAA,GAAA,GAAM,cAAc,IAAI,CAAA,CAAA;AAC9B,MAAA,KAAA,CAAM,IAAO,GAAA,GAAA,CAAA;AAEb,MAAA,IAAIA,KAAM,EAAA;AACR,QAAA,QAAA,CAAS,KAAQ,GAAA,GAAA,CAAA;AACjB,QAAA,gBAAA,IAAoB,YAAY,IAAI,CAAA,CAAA;AAAA,OACtC;AAAA,KACF;AAAA,IACA,EAAE,WAAW,IAAK,EAAA;AAAA,GACpB,CAAA;AAEA,EAAA,KAAA;AAAA,IACE,MAAM,KAAM,CAAA,OAAA;AAAA,IACZ,CAAW,OAAA,KAAA;AACT,MAAA,KAAA,CAAM,OAAU,GAAA,eAAA,CAAgB,IAAI,GAAA,CAAS,OAAO,CAAC,CAAA,CAAA;AAAA,KACvD;AAAA,GACF,CAAA;AACA,EAAA,KAAA;AAAA,IACE,MAAM,KAAM,CAAA,QAAA;AAAA,IACZ,CAAY,QAAA,KAAA;AACV,MAAA,KAAA,CAAM,QAAW,GAAA,QAAA,CAAA;AAAA,KACnB;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,SAAY,GAAA;AAAA,IAChB,GAAK,EAAA,KAAA;AAAA,IACL,GAAK,EAAA,SAAA;AAAA,IACL,OAAS,EAAA,KAAA;AAAA,GACX,CAAA;AAEA,EAAM,MAAA,UAAA,GAAa,CAAC,GAAgB,KAAA;AAClC,IAAM,KAAA,CAAA,QAAA,CAAS,GAAG,CAAI,GAAA,SAAA,CAAU,MAAM,QAAS,CAAA,GAAG,KAAK,SAAS,CAAA,CAAA;AAChE,IAAK,IAAA,CAAA,MAAA,EAAQ,MAAM,QAAQ,CAAA,CAAA;AAAA,GAC7B,CAAA;AAIA,EAAM,MAAA,UAAA,GAAa,SAAS,MAAM;AAChC,IAAI,IAAA,CAAC,MAAM,IAAK,CAAA,MAAA;AAAQ,MAAA,OAAA;AACxB,IAAI,IAAA,CAAC,MAAM,IAAM,EAAA;AACf,MAAA,OAAO,KAAM,CAAA,IAAA,CAAK,MAAW,KAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAA;AAAA,KAC7C;AAEA,IAAA,IAAI,KAAQ,GAAA,CAAA,CAAA;AACZ,IAAI,GAAA,CAAA,QAAA,CAAS,OAAO,CAAO,GAAA,KAAA;AACzB,MAAA,KAAA,EAAA,CAAA;AAAA,KACD,CAAA,CAAA;AAED,IAAO,OAAA,KAAA,KAAU,MAAM,OAAQ,CAAA,IAAA,CAAA;AAAA,GAChC,CAAA,CAAA;AAGD,EAAM,MAAA,WAAA,GAAc,SAAS,MAAM;AACjC,IAAA,OAAO,CAAC,CAAC,KAAA,CAAM,OAAQ,CAAA,IAAA,IAAQ,CAAC,UAAW,CAAA,KAAA,CAAA;AAAA,GAC5C,CAAA,CAAA;AAGD,EAAA,MAAM,WAAW,MAAM;AACrB,IAAA,IAAI,UAAiB,EAAC,CAAA;AACtB,IAAM,MAAA,EAAE,IAAM,EAAA,SAAA,EAAc,GAAA,KAAA,CAAA;AAC5B,IAAI,IAAA,CAAC,MAAM,IAAM,EAAA;AACf,MAAA,OAAA,GAAU,OAAO,SAAc,KAAA,UAAA,GAAa,IAAK,CAAA,MAAA,CAAO,SAAS,CAAI,GAAA,IAAA,CAAA;AAAA,KAChE,MAAA;AACL,MAAA,OAAO,SAAc,KAAA,UAAA,GACjB,GAAI,CAAA,QAAA,CAAS,OAAO,CAAO,GAAA,KAAA;AACzB,QAAA,SAAA,CAAU,IAAI,IAAI,CAAA,IAAK,OAAQ,CAAA,IAAA,CAAK,IAAI,IAAI,CAAA,CAAA;AAAA,OAC7C,CAAA,GACD,GAAI,CAAA,QAAA,CAAS,OAAO,CAAO,GAAA,KAAA;AACzB,QAAQ,OAAA,CAAA,IAAA,CAAK,IAAI,IAAI,CAAA,CAAA;AAAA,OACtB,CAAA,CAAA;AAAA,KACP;AAGA,IAAA,KAAA,CAAM,OAAU,GAAA,eAAA,CAAgB,IAAI,GAAA,CAAI,OAAO,CAAC,CAAA,CAAA;AAChD,IAAA,IAAA,CAAK,SAAS,OAAO,CAAA,CAAA;AAAA,GACvB,CAAA;AAEA,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,KAAA,CAAM,QAAQ,KAAM,EAAA,CAAA;AACpB,IAAA,IAAA,CAAK,OAAS,EAAA,KAAA,CAAM,IAAK,CAAA,KAAA,CAAM,OAAO,CAAC,CAAA,CAAA;AAAA,GACzC,CAAA;AAOA,EAAM,MAAA,eAAA,GAAkB,CAAC,GAAA,EAAU,KAAoB,KAAA;AACrD,IAAM,MAAA,EAAE,SAAY,GAAA,KAAA,CAAA;AACpB,IAAA,IAAI,UAAU,KAAW,CAAA,EAAA;AACvB,MAAA,OAAA,CAAQ,GAAI,CAAA,GAAA,CAAI,IAAI,CAAA,GAAI,OAAQ,CAAA,MAAA,CAAO,GAAI,CAAA,IAAI,CAAI,GAAA,OAAA,CAAQ,GAAI,CAAA,GAAA,CAAI,IAAI,CAAA,CAAA;AAAA,KAClE,MAAA;AACL,MAAA,IAAI,KAAO,EAAA;AACT,QAAQ,OAAA,CAAA,GAAA,CAAI,IAAI,IAAI,CAAA,CAAA;AACpB,QAAI,GAAA,CAAA,QAAA,IAAY,IAAI,GAAI,CAAA,QAAA,EAAU,OAAK,OAAQ,CAAA,GAAA,CAAI,CAAE,CAAA,IAAI,CAAC,CAAA,CAAA;AAAA,OACrD,MAAA;AACL,QAAQ,OAAA,CAAA,MAAA,CAAO,IAAI,IAAI,CAAA,CAAA;AACvB,QAAI,GAAA,CAAA,QAAA,IAAY,IAAI,GAAI,CAAA,QAAA,EAAU,OAAK,OAAQ,CAAA,MAAA,CAAO,CAAE,CAAA,IAAI,CAAC,CAAA,CAAA;AAAA,OAC/D;AAAA,KACF;AAGA,IAAA,IAAA,CAAK,OAAS,EAAA,KAAA,CAAM,IAAK,CAAA,OAAO,CAAC,CAAA,CAAA;AAAA,GACnC,CAAA;AAKA,EAAM,MAAA,YAAA,GAAe,CAAC,IAAqB,KAAA;AACzC,IAAA,KAAA,CAAM,WAAW,IAAS,KAAA,IAAA,IAAQ,KAAM,CAAA,QAAA,KAAa,OAAO,IAAO,GAAA,IAAA,CAAA;AAEnE,IAAK,IAAA,CAAA,QAAA,EAAU,MAAM,QAAQ,CAAA,CAAA;AAAA,GAC/B,CAAA;AAEA,EAAO,OAAA;AAAA,IACL,KAAA;AAAA;AAAA,IAEA,UAAA;AAAA;AAAA,IAEA,WAAA;AAAA;AAAA,IAEA,WAAA;AAAA;AAAA,IAGA,QAAA;AAAA;AAAA,IAGA,YAAA;AAAA;AAAA,IAGA,eAAA;AAAA;AAAA,IAGA,YAAA;AAAA;AAAA,IAGA,UAAA;AAAA;AAAA,IAGA,WAAA;AAAA;AAAA,IAGA,WAAA;AAAA,GACF,CAAA;AACF;;;;"}