diff --git a/next.config.ts b/next.config.ts
index 7d36864d..bcd69237 100644
--- a/next.config.ts
+++ b/next.config.ts
@@ -17,7 +17,7 @@ const nextConfig: NextConfig = {
remotePatterns: [
{
protocol: 'https',
- hostname: 'slid-todo.s3.ap-northeast-2.amazonaws.com',
+ hostname: 'zzikzzik-bucket.s3.ap-northeast-2.amazonaws.com',
},
],
},
diff --git a/src/app/(route)/search/layout.tsx b/src/app/(route)/search/layout.tsx
new file mode 100644
index 00000000..9581c4b3
--- /dev/null
+++ b/src/app/(route)/search/layout.tsx
@@ -0,0 +1,9 @@
+import { Suspense } from 'react';
+
+export default function SearchLayout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return {children};
+}
diff --git a/src/app/(route)/search/page.tsx b/src/app/(route)/search/page.tsx
index 51d4093c..08b76288 100644
--- a/src/app/(route)/search/page.tsx
+++ b/src/app/(route)/search/page.tsx
@@ -2,25 +2,39 @@
import { useEffect } from 'react';
+import { useSearchParams, useRouter } from 'next/navigation';
import { PageContainer } from '@/components/common/PageContainer';
import { SearchContent } from '@/components/Search/SearchContent';
import { SearchHeader } from '@/components/Search/SearchHeader';
import { SearchInput } from '@/components/Search/SearchInput';
-import { useSearchStore } from '@/store/useSearchStore';
export default function SearchPage() {
- const { setSearchFilter, setSearchKeyword } = useSearchStore();
+ const searchParams = useSearchParams();
+ const router = useRouter();
+
+ const searchFilter = searchParams.get('filter') || '유저명';
+ const searchKeyword = searchParams.get('keyword') || '';
useEffect(() => {
- setSearchFilter('유저명');
- setSearchKeyword('');
- }, [setSearchFilter, setSearchKeyword]);
+ if (!searchParams.has('filter') || !searchParams.has('keyword')) {
+ const newParams = new URLSearchParams(searchParams);
+ newParams.set('filter', '유저명');
+ newParams.set('keyword', '');
+ router.push(`?${newParams.toString()}`);
+ }
+ }, [router, searchParams]);
return (
-
-
+
+
);
}
diff --git a/src/components/Search/SearchContent/index.tsx b/src/components/Search/SearchContent/index.tsx
index d91b94bf..6e7b6876 100644
--- a/src/components/Search/SearchContent/index.tsx
+++ b/src/components/Search/SearchContent/index.tsx
@@ -1,46 +1,51 @@
'use client';
import { useEffect } from 'react';
-
-import { useSearchStore } from '@/store/useSearchStore';
import { useSearchQuery } from '@/hooks/apis/Search/useSearchQuery';
import { SearchUserList } from './SearchUserList';
import { SearchGoalList } from './SearchGoalList';
-export const SearchContent = () => {
- const { searchFilter, searchKeyword } = useSearchStore();
+interface SearchContentProps {
+ currentFilter: string;
+ currentKeyword: string;
+}
+
+export const SearchContent = ({
+ currentFilter,
+ currentKeyword,
+}: SearchContentProps) => {
const {
data: searchData,
refetch,
isError,
error,
} = useSearchQuery({
- searchField: searchFilter,
- keyword: searchKeyword,
+ searchField: currentFilter,
+ keyword: currentKeyword,
});
useEffect(() => {
- if (searchKeyword || searchFilter) {
+ if (currentFilter || currentKeyword) {
refetch();
}
- }, [searchKeyword, searchFilter, refetch]);
+ }, [currentFilter, currentKeyword, refetch]);
return (
-
- {searchFilter === '유저명' ? (
+
+ {currentFilter === '유저명' ? (
) : (
)}
diff --git a/src/components/Search/SearchInput/index.tsx b/src/components/Search/SearchInput/index.tsx
index 55f59854..fe63f4dc 100644
--- a/src/components/Search/SearchInput/index.tsx
+++ b/src/components/Search/SearchInput/index.tsx
@@ -2,15 +2,24 @@
import { ChangeEvent, KeyboardEvent, useState } from 'react';
import { FaSearch } from 'react-icons/fa';
+import { useRouter } from 'next/navigation';
import { Input } from '@/components/common/Input';
import { PLACEHOLDERS } from '@/constants/Placeholders';
-import { useSearchStore } from '@/store/useSearchStore';
import { SearchFilterDropdown } from './SearchFilterDropdown';
-export const SearchInput = () => {
- const [localKeyword, setLocalKeyword] = useState('');
- const [localFilter, setLocalFilter] = useState('유저명');
- const { setSearchKeyword, setSearchFilter } = useSearchStore();
+interface SearchInputProps {
+ currentFilter: string;
+ currentKeyword: string;
+}
+
+export const SearchInput = ({
+ currentFilter,
+ currentKeyword,
+}: SearchInputProps) => {
+ const router = useRouter();
+
+ const [localKeyword, setLocalKeyword] = useState(currentKeyword);
+ const [localFilter, setLocalFilter] = useState(currentFilter);
const handleKeyword = (e: ChangeEvent
) => {
setLocalKeyword(e.target.value);
@@ -18,13 +27,15 @@ export const SearchInput = () => {
const handleKeyPress = (e: KeyboardEvent) => {
if (e.key === 'Enter') {
- handleClick();
+ updateSearchParams();
}
};
- const handleClick = () => {
- setSearchKeyword(localKeyword);
- setSearchFilter(localFilter);
+ const updateSearchParams = () => {
+ const newParams = new URLSearchParams();
+ newParams.set('filter', localFilter);
+ newParams.set('keyword', localKeyword);
+ router.push(`?${newParams.toString()}`);
};
return (
@@ -44,7 +55,7 @@ export const SearchInput = () => {
);
diff --git a/src/store/useSearchStore.ts b/src/store/useSearchStore.ts
deleted file mode 100644
index 592e6507..00000000
--- a/src/store/useSearchStore.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import { create } from 'zustand';
-
-interface SearchState {
- searchFilter: string;
- searchKeyword: string;
- isSearchClicked: boolean;
- setSearchFilter: (searchFilter: string) => void;
- setSearchKeyword: (searchKeyword: string) => void;
- setIsSearchClicked: (clicked: boolean) => void;
-}
-
-export const useSearchStore = create((set) => ({
- searchFilter: '유저명',
- setSearchFilter: (searchFilter: string) => {
- set({ searchFilter: searchFilter });
- },
- searchKeyword: '',
- setSearchKeyword: (searchKeyword: string) => {
- set({ searchKeyword: searchKeyword });
- },
- isSearchClicked: false,
- setIsSearchClicked: (clicked: boolean) => {
- set({ isSearchClicked: clicked });
- },
-}));