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