{"version":3,"file":"useDataSource2.mjs","sources":["../../../../../../../../packages/components/table/src/hooks/useDataSource.ts"],"sourcesContent":["import { computed, nextTick, onMounted, reactive, ref, unref, watch, watchEffect } from 'vue'\nimport { cloneDeep, get, merge } from 'lodash-es'\nimport { useTimeoutFn } from '@tav-ui/hooks/core/useTimeout'\nimport { isBoolean, isFunction } from '@tav-ui/utils/is'\nimport { buildUUID } from '@tav-ui/utils/uuid'\nimport { FETCH_SETTING, PAGE_SIZE, ROW_KEY } from '../const'\nimport { useTableFullHeight } from './useTableFullHeight'\nimport type { ComputedRef, Ref } from 'vue'\nimport type { PaginationProps } from '../types/pagination'\nimport type { BasicTableProps, FetchParams, SorterResult, TableEmitType } from '../types/table'\n\ntype Recordable<T = any> = Record<string, T>\ninterface ComponentElRef<T extends HTMLElement = HTMLDivElement> {\n  $el: T\n}\ntype ComponentRef<T extends HTMLElement = HTMLDivElement> = ComponentElRef<T> | null\n\ninterface ActionType {\n  getPaginationInfo: ComputedRef<boolean | PaginationProps>\n  setPagination: (info: Partial<PaginationProps>) => void\n  setLoading: (loading: boolean) => void\n  getFieldsValue: () => Recordable\n  clearSelectedRowKeys: () => void\n  tableData: Ref<Recordable[]>\n}\n\ninterface SearchState {\n  sortInfo: Recordable\n  filterInfo: Record<string, string[]>\n}\n\n// 表格筛选整体逻辑：\n// 1. 通过 Filter 组件中的 inputform/pannelform 同时只能生效一个，并且发送请求时默认定位到第一页\n// 2. 列的排序与筛选同时只能生效一个，并且发送请求时默认定位到第一页\n\nexport function useDataSource(\n  tableElRef: Ref<ComponentRef>,\n  propsRef: ComputedRef<BasicTableProps>,\n  {\n    getPaginationInfo,\n    setPagination,\n    setLoading,\n    getFieldsValue,\n    clearSelectedRowKeys,\n    tableData,\n  }: ActionType,\n  emit: TableEmitType,\n  filterRef\n) {\n  const searchState = reactive<SearchState>({\n    sortInfo: {},\n    filterInfo: {},\n  })\n  const dataSourceRef = ref<Recordable[]>([])\n  const rawDataSourceRef = ref<Recordable>({})\n\n  watchEffect(() => {\n    tableData.value = unref(dataSourceRef)\n  })\n\n  watch(\n    () => unref(propsRef).dataSource,\n    () => {\n      const { dataSource, api } = unref(propsRef)\n      !api && dataSource && (dataSourceRef.value = dataSource)\n    },\n    {\n      immediate: true,\n    }\n  )\n\n  function handleTableChange(\n    pagination: PaginationProps,\n    filters: Partial<Recordable<string[]>>,\n    sorter: SorterResult\n  ) {\n    const { clearSelectOnPageChange, paginationControl, sortFn, filterFn } = unref(propsRef)\n    if (clearSelectOnPageChange) {\n      clearSelectedRowKeys()\n    }\n\n    const params: Recordable = {}\n    if (pagination && paginationControl === 'backend') {\n      params.searchInfo = {\n        model: {\n          page: pagination.current,\n          limit: pagination.pageSize,\n        },\n      }\n    }\n    setPagination(pagination)\n\n    if (sorter && isFunction(sortFn)) {\n      const sortInfo = sortFn(sorter)\n      searchState.sortInfo = sortInfo\n      params.sortInfo = sortInfo\n\n      params.searchInfo = {\n        model: {\n          page: pagination.current,\n          limit: pagination.pageSize,\n          ...sortInfo,\n        },\n      }\n    }\n\n    if (filters && isFunction(filterFn)) {\n      const filterInfo = filterFn(filters)\n      searchState.filterInfo = filterInfo\n      params.filterInfo = filterInfo\n\n      // 筛选出来的数据是数组，默认转为string\n      params.searchInfo = {\n        filter: {\n          ...Object.keys(filterInfo).reduce((result, k) => {\n            result[k] = filterInfo[k].join(',')\n            return result\n          }, {}),\n        },\n        model: {\n          page: pagination.current,\n          limit: pagination.pageSize,\n        },\n      }\n    }\n    fetch(params)\n  }\n\n  function setTableKey(items: any[]) {\n    if (!items || !Array.isArray(items)) return\n    items.forEach((item) => {\n      if (!item[ROW_KEY]) {\n        item[ROW_KEY] = buildUUID()\n      }\n      if (item.children && item.children.length) {\n        setTableKey(item.children)\n      }\n    })\n  }\n\n  const getAutoCreateKey = computed(() => {\n    return unref(propsRef).autoCreateKey && !unref(propsRef).rowKey\n  })\n\n  const getRowKey = computed(() => {\n    const { rowKey } = unref(propsRef)\n    return unref(getAutoCreateKey) ? ROW_KEY : rowKey\n  })\n\n  const getDataSourceRef = computed(() => {\n    const dataSource = unref(dataSourceRef)\n    if (!dataSource || dataSource.length === 0) {\n      return unref(dataSourceRef)\n    }\n    if (unref(getAutoCreateKey)) {\n      const firstItem = dataSource[0]\n      const lastItem = dataSource[dataSource.length - 1]\n\n      if (firstItem && lastItem) {\n        if (!firstItem[ROW_KEY] || !lastItem[ROW_KEY]) {\n          const data = cloneDeep(unref(dataSourceRef))\n          data.forEach((item) => {\n            if (!item[ROW_KEY]) {\n              item[ROW_KEY] = buildUUID()\n            }\n            if (item.children && item.children.length) {\n              setTableKey(item.children)\n            }\n          })\n          dataSourceRef.value = data\n        }\n      }\n    }\n    return unref(dataSourceRef)\n  })\n\n  async function updateTableData(index: number, key: string, value: any) {\n    const record = dataSourceRef.value[index]\n    if (record) {\n      dataSourceRef.value[index][key] = value\n    }\n    return dataSourceRef.value[index]\n  }\n\n  function updateTableDataRecord(\n    rowKey: string | number,\n    record: Recordable\n  ): Recordable | undefined {\n    const row = findTableDataRecord(rowKey)\n\n    if (row) {\n      for (const field in row) {\n        if (Reflect.has(record, field)) row[field] = record[field]\n      }\n      return row\n    }\n  }\n\n  function deleteTableDataRecord(rowKey: string | number | string[] | number[]) {\n    if (!dataSourceRef.value || dataSourceRef.value.length == 0) return\n    const rowKeyName = unref(getRowKey)\n    if (!rowKeyName) return\n    const rowKeys = !Array.isArray(rowKey) ? [rowKey] : rowKey\n    for (const key of rowKeys) {\n      let index: number | undefined = dataSourceRef.value.findIndex((row) => {\n        let targetKeyName: string\n        if (typeof rowKeyName === 'function') {\n          targetKeyName = rowKeyName(row)\n        } else {\n          targetKeyName = rowKeyName as string\n        }\n        return row[targetKeyName] === key\n      })\n      if (index >= 0) {\n        dataSourceRef.value.splice(index, 1)\n      }\n      index = unref(propsRef).dataSource?.findIndex((row) => {\n        let targetKeyName: string\n        if (typeof rowKeyName === 'function') {\n          targetKeyName = rowKeyName(row)\n        } else {\n          targetKeyName = rowKeyName as string\n        }\n        return row[targetKeyName] === key\n      })\n      if (typeof index !== 'undefined' && index !== -1) unref(propsRef).dataSource?.splice(index, 1)\n    }\n    setPagination({\n      total: unref(propsRef).dataSource?.length,\n    })\n  }\n\n  function insertTableDataRecord(record: Recordable, index?: number): Recordable | undefined {\n    // if (!dataSourceRef.value || dataSourceRef.value.length == 0) return;\n    index = index ?? dataSourceRef.value?.length\n    unref(dataSourceRef).splice(index, 0, record)\n    return unref(dataSourceRef)\n  }\n\n  function findTableDataRecord(rowKey: string | number) {\n    if (!dataSourceRef.value || dataSourceRef.value.length == 0) return\n\n    const rowKeyName = unref(getRowKey)\n    if (!rowKeyName) return\n\n    const { childrenColumnName = 'children' } = unref(propsRef)\n\n    const findRow = (array: any[]) => {\n      let ret\n      array.some(function iter(r) {\n        if (typeof rowKeyName === 'function') {\n          if ((rowKeyName(r) as string) === rowKey) {\n            ret = r\n            return true\n          }\n        } else {\n          if (Reflect.has(r, rowKeyName) && r[rowKeyName] === rowKey) {\n            ret = r\n            return true\n          }\n        }\n        return r[childrenColumnName] && r[childrenColumnName].some(iter)\n      })\n      return ret\n    }\n\n    // const row = dataSourceRef.value.find(r => {\n    //   if (typeof rowKeyName === 'function') {\n    //     return (rowKeyName(r) as string) === rowKey\n    //   } else {\n    //     return Reflect.has(r, rowKeyName) && r[rowKeyName] === rowKey\n    //   }\n    // })\n    return findRow(dataSourceRef.value)\n  }\n\n  async function fetch(opt?: FetchParams) {\n    const {\n      api,\n      searchInfo,\n      defSort,\n      fetchSetting,\n      beforeFetch,\n      afterFetch,\n      useSearchForm,\n      pagination,\n      paginationControl,\n    } = unref(propsRef)\n    if (!api || !isFunction(api)) return\n    if (opt?.clearSelect) clearSelectedRowKeys()\n    // fetch Table Filter all params\n    await nextTick()\n    const tableFilterSearchParams = filterRef.value\n      ? JSON.parse(filterRef.value.$el.dataset.filterParams)\n      : {}\n    const tableFilterSearchInfo = {\n      filter: tableFilterSearchParams,\n    }\n\n    try {\n      setLoading(true)\n      const { pageField, sizeField, listField, totalField } = Object.assign(\n        {},\n        FETCH_SETTING,\n        fetchSetting\n      )\n      let pageParams: Recordable = {}\n\n      const { current = 1, pageSize = PAGE_SIZE } = unref(getPaginationInfo) as PaginationProps\n\n      if ((isBoolean(pagination) && !pagination) || isBoolean(getPaginationInfo)) {\n        pageParams = {}\n      } else {\n        pageParams[pageField] = (opt && opt.page) || current\n        pageParams[sizeField] = pageSize\n\n        pageParams['model'] = {\n          page: (opt && opt.page) || current,\n          limit: pageSize,\n        }\n      }\n\n      const { sortInfo = {}, filterInfo } = searchState\n      pageParams.model = { ...pageParams.model, ...sortInfo }\n      let params: Recordable = merge(\n        pageParams,\n        useSearchForm ? getFieldsValue() : {},\n        searchInfo,\n        tableFilterSearchInfo,\n        opt?.searchInfo ?? {},\n        defSort,\n        sortInfo,\n        filterInfo,\n        opt?.sortInfo ?? {},\n        opt?.filterInfo ?? {}\n      )\n      if (beforeFetch && isFunction(beforeFetch)) {\n        params = (await beforeFetch(params)) || params\n      }\n\n      // eslint-disable-next-line no-console\n      console.log('hijack table api 😂')\n\n      const { data: res } = await api(params)\n      rawDataSourceRef.value = res\n\n      const isArrayResult = Array.isArray(res)\n\n      let resultItems: Recordable[] = isArrayResult ? res : get(res, listField)\n      const resultTotal: number = isArrayResult ? 0 : get(res, totalField)\n\n      // 假如数据变少，导致总页数变少并小于当前选中页码，通过getPaginationRef获取到的页码是不正确的，需获取正确的页码再次执行\n      // 因为通过 Filter 走的查询默认调到第一页所以这个判断先注释，如果默认当前页面则需要开启\n      // if (resultTotal) {\n      //   const currentTotalPage = Math.ceil(resultTotal / pageSize);\n      //   if (current > currentTotalPage) {\n      //     setPagination({\n      //       current: currentTotalPage\n      //     });\n      //     return await fetch(opt);\n      //   }\n      // }\n\n      if (afterFetch && isFunction(afterFetch)) {\n        resultItems = (await afterFetch(resultItems)) || resultItems\n      }\n      dataSourceRef.value = resultItems\n      setPagination({\n        total: resultTotal || 0,\n      })\n      if (opt && (opt.page || opt.searchInfo?.model?.page)) {\n        setPagination({\n          current: opt.page || opt.searchInfo?.model?.page || 1,\n        })\n      }\n\n      if (paginationControl === 'backend' && !isArrayResult) {\n        setPagination({\n          pageSize: rawDataSourceRef.value[sizeField] || pageSize,\n        })\n\n        nextTick(() => {\n          const els = tableElRef.value?.$el?.querySelectorAll(\n            '.ant-table-pagination .ant-pagination-item'\n          ) as NodeListOf<HTMLElement>\n          els?.forEach((el) => {\n            const page = Number(el.title)\n            if (\n              rawDataSourceRef.value.navigatePageNumbers &&\n              rawDataSourceRef.value.navigatePageNumbers.includes(page)\n            ) {\n              el.style.display = 'inline-block'\n              // return originalElement;\n            } else {\n              el.style.display = 'none'\n            }\n          })\n        })\n      }\n      useTableFullHeight(propsRef, tableElRef)\n\n      emit('fetch-success', {\n        items: unref(resultItems),\n        total: resultTotal,\n      })\n      return resultItems\n    } catch (error) {\n      emit('fetch-error', error)\n      dataSourceRef.value = []\n      setPagination({\n        total: 0,\n      })\n    } finally {\n      setLoading(false)\n    }\n  }\n\n  function setTableData<T = Recordable>(values: T[]) {\n    dataSourceRef.value = values\n  }\n\n  function getDataSource<T = Recordable>() {\n    return getDataSourceRef.value as T[]\n  }\n\n  function getRawDataSource<T = Recordable>() {\n    return rawDataSourceRef.value as T\n  }\n\n  async function reload(opt?: FetchParams) {\n    // eslint-disable-next-line no-return-await\n    return await fetch(opt)\n  }\n\n  onMounted(() => {\n    useTimeoutFn(() => {\n      unref(propsRef).immediate && fetch()\n    }, 16)\n  })\n\n  return {\n    getDataSourceRef,\n    getDataSource,\n    getRawDataSource,\n    getRowKey,\n    setTableData,\n    getAutoCreateKey,\n    fetch,\n    reload,\n    updateTableData,\n    updateTableDataRecord,\n    deleteTableDataRecord,\n    insertTableDataRecord,\n    findTableDataRecord,\n    handleTableChange,\n  }\n}\n"],"names":[],"mappings":"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"}