Загрузка данных


import { AppConsts } from '@/shared';
import { useUpdateSearchParams } from '@/shared/hooks';
import { ChangeEvent, useCallback } from 'react';

type UpdateSearchParams = ReturnType<typeof useUpdateSearchParams>;

type Params = {
  refetch: VoidFunction;
  resetSmartRoomId: VoidFunction;
  resetAdditionalFilters: VoidFunction;
  updateSearchParams: UpdateSearchParams;
  updateParamAndResetPage: (paramName: string, value: unknown) => void;
  updateParamsAndResetPage: (queryObject: Record<string, unknown>) => void;
};

export const useBaseFilters = ({
  refetch,
  resetSmartRoomId,
  resetAdditionalFilters,
  updateSearchParams,
  updateParamAndResetPage,
  updateParamsAndResetPage,
}: Params) => {
  const handleChange =
    (paramName: string) =>
    (event: ChangeEvent<{ name?: string | undefined; value: unknown }>) => {
      if (paramName === 'type') {
        resetAdditionalFilters();
      }

      updateParamAndResetPage(paramName, event.target.value);
    };

  const handleChangeUser = useCallback(
    (value: string) => {
      updateParamAndResetPage('userId', value);
    },
    [updateParamAndResetPage],
  );

  const handleChangeTimeFrom = useCallback(
    (time: Date) => {
      updateParamAndResetPage(
        'tmMin',
        new Date(time).getTime() / AppConsts.THOUSAND,
      );
    },
    [updateParamAndResetPage],
  );

  const handleChangeTimeMax = useCallback(
    (time: Date) => {
      updateParamAndResetPage(
        'tmMax',
        new Date(time).getTime() / AppConsts.THOUSAND,
      );
    },
    [updateParamAndResetPage],
  );

  const resetFilters = useCallback(() => {
    updateSearchParams({
      queryObject: {
        sortType: 'desc',
        tmMin: 0,
        limit: 10,
        offset: 0,
      },
    });
    resetSmartRoomId();
  }, [resetSmartRoomId, updateSearchParams]);

  const refetchQuery = useCallback(() => {
    refetch();
  }, [refetch]);

  return {
    refetchQuery,
    resetFilters,
    handleChange,
    handleChangeUser,
    handleChangeTimeFrom,
    handleChangeTimeMax,
  };
};