diff --git a/apps/theme-market/src/app/_pages/Main/ThemeDownload/index.tsx b/apps/theme-market/src/app/_pages/Main/ThemeDownload/index.tsx
index 2a663444..c7a65a1d 100644
--- a/apps/theme-market/src/app/_pages/Main/ThemeDownload/index.tsx
+++ b/apps/theme-market/src/app/_pages/Main/ThemeDownload/index.tsx
@@ -2,11 +2,15 @@ import { themeService } from "@/services/ThemeService";
import { ThemeList } from "./ThemeList";
import { cookieService } from "@/services/CookieService";
+import { DEFAULT_PAGE } from "@/repositories/ThemeRepository";
export const ThemeDownload = async () => {
const accessToken = cookieService.getAccessToken();
- const bestThemes = await themeService.getBestThemes(accessToken);
+ const { content: bestThemes } = await themeService.getBestThemes(
+ DEFAULT_PAGE,
+ accessToken
+ );
const friendsThemes = await themeService.getFriendsThemes(accessToken);
return (
diff --git a/apps/theme-market/src/app/_pages/Main/index.module.css b/apps/theme-market/src/app/_pages/Main/index.module.css
index ed331e94..974c21bf 100644
--- a/apps/theme-market/src/app/_pages/Main/index.module.css
+++ b/apps/theme-market/src/app/_pages/Main/index.module.css
@@ -1,25 +1,3 @@
-.header {
- background-color: var(--color-bg-default);
-}
-
-.inputWrapper {
- width: 100%;
- height: 80px;
-
- padding: 20px 18.5px;
-}
-
-.input {
- width: 100%;
- height: 40px;
-
- padding-left: 40px;
-
- background-image: url("/static/icons/svgSearch.svg");
- background-position: 7px 7px;
- background-repeat: no-repeat;
-}
-
.main {
- padding: 17px 18px 0;
+ padding: 21px 18px 0;
}
diff --git a/apps/theme-market/src/app/_pages/Main/index.tsx b/apps/theme-market/src/app/_pages/Main/index.tsx
index 1e9cfcc7..97cf8188 100644
--- a/apps/theme-market/src/app/_pages/Main/index.tsx
+++ b/apps/theme-market/src/app/_pages/Main/index.tsx
@@ -1,13 +1,10 @@
-import { Input } from "@/app/_components/Input";
-import { Tab } from "@/app/_components/Tab";
-import { TabContent } from "@/app/_components/Tab/TabContent";
import { MENU } from "@/entities/Menu";
import { ThemeDownload } from "./ThemeDownload";
import { MyTheme } from "./MyTheme";
import styles from "./index.module.css";
-import Link from "next/link";
+import { MainHeader } from "@/app/_pages/Main/Header/MainHeader";
interface Props {
menu: MENU;
@@ -16,27 +13,7 @@ interface Props {
export const MainPage = ({ menu }: Props) => {
return (
<>
-
+
{menu === "DOWNLOAD" ? : }
diff --git a/apps/theme-market/src/app/_pages/Search/Header/index.module.css b/apps/theme-market/src/app/_pages/Search/Header/index.module.css
new file mode 100644
index 00000000..6495da44
--- /dev/null
+++ b/apps/theme-market/src/app/_pages/Search/Header/index.module.css
@@ -0,0 +1,19 @@
+.inputWrapper {
+ position: relative;
+ z-index: 10;
+ padding: 20px 19px 0 18px;
+}
+
+.inputWrapper .input {
+ width: 100%;
+ height: 40px;
+
+ padding-left: 40px;
+
+ background-image: url("/static/icons/svgSearch.svg");
+ background-position: 7px 7px;
+ background-repeat: no-repeat;
+ background-color: #ffffff;
+
+ border: 1px solid #f2f2f2;
+}
diff --git a/apps/theme-market/src/app/_pages/Search/Header/index.tsx b/apps/theme-market/src/app/_pages/Search/Header/index.tsx
new file mode 100644
index 00000000..e6ce9fa4
--- /dev/null
+++ b/apps/theme-market/src/app/_pages/Search/Header/index.tsx
@@ -0,0 +1,27 @@
+"use client";
+
+import { useRouter } from "next/navigation";
+
+import { Input } from "@/app/_components/Input";
+
+import styles from "./index.module.css";
+
+interface Props {
+ defaultValue: string;
+}
+
+export const SearchHeader = ({ defaultValue }: Props) => {
+ const router = useRouter();
+
+ return (
+
+ router.replace(`/search/${value}`)}
+ />
+
+ );
+};
diff --git a/apps/theme-market/src/app/_pages/Search/index.module.css b/apps/theme-market/src/app/_pages/Search/index.module.css
new file mode 100644
index 00000000..313e5c01
--- /dev/null
+++ b/apps/theme-market/src/app/_pages/Search/index.module.css
@@ -0,0 +1,41 @@
+.search {
+ margin-top: 28px;
+ padding: 0px 18px 0px;
+}
+
+.notFound {
+ width: 100%;
+ height: 100%;
+ position: fixed;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ z-index: 5;
+
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+
+ color: var(--palette-gray-2);
+}
+
+.notFound .text {
+ margin: 20px 0 8px;
+ font-size: 16px;
+ font-weight: 600;
+ line-height: 22.4px;
+ text-align: center;
+ text-underline-position: from-font;
+ text-decoration-skip-ink: none;
+}
+
+.notFound .subText {
+ font-size: 14px;
+ font-weight: 400;
+ line-height: 19.6px;
+ text-align: center;
+ text-underline-position: from-font;
+ text-decoration-skip-ink: none;
+}
diff --git a/apps/theme-market/src/app/_pages/Search/index.tsx b/apps/theme-market/src/app/_pages/Search/index.tsx
new file mode 100644
index 00000000..58da24ba
--- /dev/null
+++ b/apps/theme-market/src/app/_pages/Search/index.tsx
@@ -0,0 +1,39 @@
+import { cookieService } from "@/services/CookieService";
+import { themeService } from "@/services/ThemeService";
+
+import { SearchHeader } from "./Header";
+import { ThemeInfoList } from "@/app/_components/Theme/List/ThemeInfoList";
+
+import SvgCat from "@/assets/icons/svgCat.svg";
+
+import styles from "./index.module.css";
+import Image from "next/image";
+
+interface Props {
+ query: string;
+}
+
+export const SearchPage = async ({ query }: Props) => {
+ const accessToken = await cookieService.getAccessToken();
+ const themes = await themeService.search(query, accessToken);
+
+ return (
+ <>
+
+
+ {themes.length > 0 ? (
+
+ ) : (
+
+
+ 일치하는 테마가 없습니다.
+
+ 테마명이나 등록자 닉네임으로 검색해보세요.
+
+
+ )}
+
+ ;
+ >
+ );
+};
diff --git a/apps/theme-market/src/assets/icons/svgChevronLeft.svg b/apps/theme-market/src/assets/icons/svgChevronLeft.svg
index e24f0713..8f9c1a58 100644
--- a/apps/theme-market/src/assets/icons/svgChevronLeft.svg
+++ b/apps/theme-market/src/assets/icons/svgChevronLeft.svg
@@ -1,3 +1,3 @@
-