import { AndOr, ColumnFilter } from '@/lib/types'; import { Store } from '@/lib/store'; import { invert } from 'lodash'; import { filterRow, resetRowInfoByIndex } from '@/lib/calculate/row'; import { LayoutOperator } from '@/lib/operator/LayoutOperator'; export const useFilter = (store: Store, layoutOperator: LayoutOperator) => { const setFilter = (columnFilters: Record, andOr: AndOr) => { store.mutation.setFilters(columnFilters, andOr); }; const doFilter = () => { const { rowIndex2Id, columnId2Field, data2D } = store.state.index; const { andOr, filters } = store.state.filter; const filteredRowIndex2Id = filterRow( rowIndex2Id, data2D, invert(columnId2Field), filters, andOr, ); // 重拍顺序-重新计算高度 const filteredRowRecord = resetRowInfoByIndex( filteredRowIndex2Id, store.state.index.rowRecord, ); store.mutation.setViewRow(filteredRowRecord, filteredRowIndex2Id); // 改变滚动条内容高度 layoutOperator.flushBodyView(); }; return { filter: (columnFilters: Record, andOr: AndOr) => { setFilter(columnFilters, andOr); return doFilter(); }, }; };