import isEqual from 'lodash/isEqual'; import { Dispatch, SetStateAction, useState } from 'react'; import { SelectedView, ApolloColumnType, SelectedViewsProps } from '../interfaces'; import { filterSearchToComponent } from '../utils/filterSearchToComponent'; import { localFilterToComponent } from '../utils/localFilterToComponent'; interface UseActiveKeyProps { searchParams: Record; columns: ApolloColumnType[]; localValue: SelectedView[] | undefined; selectedViews?: SelectedViewsProps; } const useActiveKey = ({ searchParams, columns, localValue = [], selectedViews, }: UseActiveKeyProps): [string, Dispatch>] => { const [activeKey, setActiveKey] = useState(() => { let result = 'all'; // 服务端保存 if (selectedViews?.store) { // 如果有 saved_search_id,直接设置为它 if (searchParams.saved_search_id) { result = searchParams.saved_search_id; } else { const current = selectedViews?.config?.find(item => item.id === searchParams.selectedView); if (current) { result = current.id; } else { result = 'all'; } } // 本地保存 } else { // 如果为 savedSearch,判断条件是不是相等 // eslint-disable-next-line no-lonely-if if (searchParams.selectedView === 'savedSearch') { const current = localValue.find( item => (searchParams.query || '') === (item.query || '') && (searchParams.order || '') === (item.orderBy ? `${item.orderBy.field} ${item.orderBy.direction}` : '') && isEqual( filterSearchToComponent(searchParams, columns), localFilterToComponent(item.filters || {}, columns), ), ); if (current) { result = current.id; } else { result = 'all'; } // 否则判断是不是配置的 } else { const current = selectedViews?.config?.find(item => item.id === searchParams.selectedView); if (current) { result = current.id; } else { result = 'all'; } } } return result; }); return [activeKey, setActiveKey]; }; export default useActiveKey;