index.ts 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import {TableSearchContext, useContextSection} from '@hooks';
  2. import {Context} from 'use-context-selector';
  3. import {useCallback} from 'react';
  4. import {useBoolean, useLatest} from 'ahooks';
  5. export function useTableSearchToolEvents<T>(
  6. context: Context<TableSearchContext<T>>,
  7. payload: T,
  8. options: {searchCallback?: () => void; resetCallback?: () => void} = {},
  9. ) {
  10. const dispatch = useContextSection(context, state => state[1]);
  11. const {searchCallback, resetCallback} = options;
  12. const callbackFn = useLatest(searchCallback);
  13. const resetCallbackFn = useLatest(resetCallback);
  14. const onSearch = useCallback(
  15. function () {
  16. callbackFn.current?.();
  17. dispatch({type: 'SEARCH', payload});
  18. },
  19. [callbackFn, dispatch, payload],
  20. );
  21. const onReset = useCallback(
  22. function () {
  23. resetCallbackFn.current?.();
  24. dispatch({type: 'RESET'});
  25. },
  26. [dispatch, resetCallbackFn],
  27. );
  28. const [visible, {setTrue, setFalse}] = useBoolean();
  29. return [
  30. visible,
  31. {onSearch, onReset, onShowModal: setTrue, onCloseModal: setFalse},
  32. ] as const;
  33. }