import { AppConsts } from '@/shared';
import { RouterConsts } from '@/shared/consts/RouterConsts';
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;
};
export const useBaseFilters = ({
refetch,
resetSmartRoomId,
resetAdditionalFilters,
updateSearchParams,
updateParamAndResetPage,
}: 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: { ...RouterConsts.AUDIT_DEFAULT_QUERY },
});
resetSmartRoomId();
}, [resetSmartRoomId, updateSearchParams]);
const refetchQuery = useCallback(() => {
refetch();
}, [refetch]);
return {
refetchQuery,
resetFilters,
handleChange,
handleChangeUser,
handleChangeTimeFrom,
handleChangeTimeMax,
};
};