tav-ui
Version:
1 lines • 25.7 kB
Source Map (JSON)
{"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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"}