From 1a3165612d95716b83e9ea774423f5434b5e3a26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tadeusz=20Miesi=C4=85c?= <tadeusz.miesiac@gmail.com> Date: Tue, 6 Feb 2024 14:44:35 +0100 Subject: [PATCH] feat(publications): pr fixes --- .../PublicationsSearch.component.tsx | 6 +++-- src/hooks/useDebounce.ts | 17 ------------ src/redux/apiPath.ts | 26 +++++++++---------- 3 files changed, 16 insertions(+), 33 deletions(-) delete mode 100644 src/hooks/useDebounce.ts diff --git a/src/components/FunctionalArea/Modal/PublicationsModal/PublicationsSearch/PublicationsSearch.component.tsx b/src/components/FunctionalArea/Modal/PublicationsModal/PublicationsSearch/PublicationsSearch.component.tsx index be28bcdd..dd90e7d2 100644 --- a/src/components/FunctionalArea/Modal/PublicationsModal/PublicationsSearch/PublicationsSearch.component.tsx +++ b/src/components/FunctionalArea/Modal/PublicationsModal/PublicationsSearch/PublicationsSearch.component.tsx @@ -1,6 +1,6 @@ import { ChangeEvent, useCallback, useEffect, useState } from 'react'; import lensIcon from '@/assets/vectors/icons/lens.svg'; -import { useDebounce } from '@/hooks/useDebounce'; +import { useDebounce } from 'use-debounce'; import { useAppDispatch } from '@/redux/hooks/useAppDispatch'; import { getPublications } from '@/redux/publications/publications.thunks'; import { useAppSelector } from '@/redux/hooks/useAppSelector'; @@ -14,11 +14,13 @@ import Image from 'next/image'; import { setPublicationSearchValue } from '@/redux/publications/publications.slice'; import { DEFAULT_PAGE_SIZE } from '../PublicationsTable/PublicationsTable.constants'; +const DEFAULT_DELAY = 500; + export const PublicationsSearch = (): JSX.Element => { const dispatch = useAppDispatch(); const isLoading = useAppSelector(isLoadingSelector); const [value, setValue] = useState(''); - const debouncedValue = useDebounce<string>(value); + const [debouncedValue] = useDebounce<string>(value, DEFAULT_DELAY); const sortColumn = useAppSelector(sortColumnSelector); const sortOrder = useAppSelector(sortOrderSelector); const selectedId = useAppSelector(selectedModelIdSelector); diff --git a/src/hooks/useDebounce.ts b/src/hooks/useDebounce.ts deleted file mode 100644 index 9742ab92..00000000 --- a/src/hooks/useDebounce.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { useEffect, useState } from 'react'; - -const DEFAULT_DELAY = 500; - -export const useDebounce = <T>(value: T, delay?: number): T => { - const [debouncedValue, setDebouncedValue] = useState<T>(value); - - useEffect(() => { - const timer = setTimeout(() => setDebouncedValue(value), delay || DEFAULT_DELAY); - - return () => { - clearTimeout(timer); - }; - }, [value, delay]); - - return debouncedValue; -}; diff --git a/src/redux/apiPath.ts b/src/redux/apiPath.ts index 5e852879..7dd6cac4 100644 --- a/src/redux/apiPath.ts +++ b/src/redux/apiPath.ts @@ -3,21 +3,19 @@ import { PerfectSearchParams } from '@/types/search'; import { Point } from '@/types/map'; import { GetPublicationsParams, PublicationsQueryParams } from './publications/publications.types'; -const getPublicationsURLSearchParams = ({ - page, - sortColumn, - sortOrder, - level, - length, - search, -}: PublicationsQueryParams): URLSearchParams => { +const getPublicationsURLSearchParams = ( + providedParams: PublicationsQueryParams, +): URLSearchParams => { const params = new URLSearchParams(); - if (page) params.append('page', page.toString()); - if (sortColumn) params.append('sortColumn', sortColumn); - if (sortOrder) params.append('sortOrder', sortOrder); - if (level) params.append('level', level.toString()); - if (length) params.append('length', length.toString()); - if (search) params.append('search', search); + + const validProvidedParamsArray = Object.entries(providedParams).filter(([, value]) => + Boolean(value), + ); + + validProvidedParamsArray.forEach(([key, value]) => { + params.append(key, value.toString()); + }); + return params; }; -- GitLab