diff --git a/.github/workflows/front_ci.yml b/.github/workflows/front_ci.yml
deleted file mode 100644
index 2668ad7..0000000
--- a/.github/workflows/front_ci.yml
+++ /dev/null
@@ -1,64 +0,0 @@
-name: CI
-
-on:
- push:
- branches:
- - main
- pull_request:
- branches:
- - main
-
-jobs:
- build:
- runs-on: ubuntu-latest
-
- strategy:
- matrix:
- node-version: [16.x, 18.x]
-
- if: "!startsWith(github.ref, 'refs/heads/chore/')" && "!startsWith(github.ref, 'refs/heads/env/')" && "!startsWith(github.head_ref, 'chore/')" && "!startsWith(github.head_ref, 'env/')"
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v3
-
- - name: Setup Node.js ${{ matrix.node-version }}
- uses: actions/setup-node@v3
- with:
- node-version: ${{ matrix.node-version }}
- cache: 'npm'
-
- - name: Install dependencies
- run: npm install --frozen-lockfile
-
- - name: Run ESLint
- run: npm run lint
-
- - name: Run Tests
- run: npm test --coverage
-
- - name: Build
- run: npm run build
-
- - name: Run Prettier and commit changes if any
- run: |
- # Prettier로 코드 포맷팅
- npx prettier --write "src/**/*.{js,jsx,ts,tsx,css}"
- # 변경 사항이 있는지 확인
- if [[ `git status --porcelain` ]]; then
- # Git 사용자 설정
- git config --local user.email "action@github.com"
- git config --local user.name "GitHub Action"
- # 변경 사항 커밋
- git add .
- git commit -m "style: auto-format code using Prettier [skip ci]"
- # 변경 사항 푸시
- git push
- fi
-
- - name: Upload Artifacts
- if: success()
- uses: actions/upload-artifact@v3
- with:
- name: build-artifacts
- path: build/
diff --git a/public/images/aladinlogo.png b/public/images/aladinlogo.png
new file mode 100644
index 0000000..670ed4d
Binary files /dev/null and b/public/images/aladinlogo.png differ
diff --git a/src/App.jsx b/src/App.jsx
index a0a1534..9ab9ef5 100644
--- a/src/App.jsx
+++ b/src/App.jsx
@@ -12,6 +12,8 @@ import AnotherCheckPointRecordPage from './Dispose/AnotherCheckPointRecordPage';
import JoinGroupPopup from './components/popup/JoinGroupPopup/JoinGroupPop';
import SecessionUserPopup from './components/popup/SecessionUserPopup/SecessionUserPopup';
import MyPage from './pages/MyPage';
+import SearchResults from './pages/SearchResults'
+
function App() {
return (
@@ -20,10 +22,11 @@ function App() {
+ }/>
+ } />
} />
} />
- } />
- } />
+ } />
} />
+
+
+
+
+
+
+
+
+
diff --git a/src/components/search/BookLabel.jsx b/src/components/search/BookLabel.jsx
new file mode 100644
index 0000000..ce87093
--- /dev/null
+++ b/src/components/search/BookLabel.jsx
@@ -0,0 +1,28 @@
+import React from 'react';
+import styled from 'styled-components';
+
+const Container = styled.span`
+ border: 1px solid ${props => props.theme.colors.main};
+ border-radius: 5px;
+ padding: 2px 8px;
+ background: #fff0f0;
+ display: flex;
+ align-items: center;
+ width: auto;
+`;
+
+const Text = styled.span`
+ font-size: 12px;
+ text-align: center;
+ color: ${props => props.theme.colors.main};
+`;
+
+function BookLabel(props) {
+ return (
+
+ {props.text}
+
+ );
+}
+
+export default BookLabel;
diff --git a/src/components/search/Rating.jsx b/src/components/search/Rating.jsx
new file mode 100644
index 0000000..f775e73
--- /dev/null
+++ b/src/components/search/Rating.jsx
@@ -0,0 +1,69 @@
+import React from 'react';
+import styled from 'styled-components';
+
+const RatingContainer = styled.div`
+ display: flex;
+ align-items: center;
+ gap: 4px;
+ font-size: 14px;
+ font-weight: 400;
+ color: #565656;
+`;
+
+const Star = styled.div`
+ width: 14px;
+ height: 14px;
+ position: relative;
+ background: ${props => {
+ if (props.filled === 'full') {
+ return props.theme.colors.main;
+ } else if (props.filled === 'half') {
+ return `linear-gradient(90deg, ${props.theme.colors.main} 50%, #D3D3D3 50%)`;
+ } else {
+ return '#D3D3D3';
+ }
+ }};
+ border-radius: 50%;
+ clip-path: polygon(
+ 50% 0%,
+ 61% 35%,
+ 98% 35%,
+ 68% 57%,
+ 79% 91%,
+ 50% 70%,
+ 21% 91%,
+ 32% 57%,
+ 2% 35%,
+ 39% 35%
+ );
+`;
+
+const RatingNumber = styled.div`
+ color: ${props => props.theme.colors.main};
+ font-size: 14px;
+ font-weight: 900;
+`;
+
+const Rating = ({ rating, totalStars }) => {
+ const fullStars = Math.floor(rating / 2);
+ const halfStars = rating % 2 >= 1 ? 1 : 0;
+ const emptyStars = totalStars - fullStars - halfStars;
+
+ return (
+
+ 평점:
+ {[...Array(fullStars)].map((_, index) => (
+
+ ))}
+ {[...Array(halfStars)].map((_, index) => (
+
+ ))}
+ {[...Array(emptyStars)].map((_, index) => (
+
+ ))}
+ {rating}
+
+ );
+};
+
+export default Rating;
diff --git a/src/components/search/SearchBar.jsx b/src/components/search/SearchBar.jsx
new file mode 100644
index 0000000..66e3737
--- /dev/null
+++ b/src/components/search/SearchBar.jsx
@@ -0,0 +1,72 @@
+import React, { useState } from 'react';
+import styled from 'styled-components';
+import SearchIcon from '../../assets/search/search.svg'
+
+const SearchBarContainer = styled.div`
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ margin-bottom: 40px;
+ border: 2px solid ${props => props.theme.colors.main};
+ border-radius: 40px;
+ width: 40%;
+`;
+
+
+const Input = styled.input`
+ width: 100%;
+ padding: 14px 20px;
+ font-size: 16px;
+ border: none;
+ outline: none;
+ position: relative;
+ border-radius: 40px 0 0 40px;
+
+ &:focus {
+ border-color: ${props => props.theme.colors.main};
+ }
+`;
+
+const SearchButton = styled.button`
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ background: transparent;
+ border: none;
+ cursor: pointer;
+ padding: 10px 20px;
+ height: 100%;
+ background: white;
+ border-radius: 0 40px 40px 0;
+
+
+ &:hover {
+ background-color: #f1f1f1;
+ border-radius: 0 40px 40px 0;
+ }
+`;
+
+const SearchBar = () => {
+ const [query, setQuery] = useState('');
+
+ const handleSearch = () => {
+ // 추후 실제 검색 로직 추가할 예정
+ console.log('검색어:', query);
+ };
+
+ return (
+
+ setQuery(e.target.value)}
+ />
+
+
+
+
+ );
+};
+
+export default SearchBar;
diff --git a/src/pages/SearchResults.jsx b/src/pages/SearchResults.jsx
new file mode 100644
index 0000000..9d84fad
--- /dev/null
+++ b/src/pages/SearchResults.jsx
@@ -0,0 +1,184 @@
+import React from 'react';
+import styled from 'styled-components';
+import ModalButton from '../components/modalButton/ModalButtonOk';
+import BookLabel from '../components/search/BookLabel';
+import SearchBar from '../components/search/SearchBar';
+import Rating from '../components/search/Rating';
+
+const Container = styled.div`
+ margin: 0 9.86%;
+ margin-top: 80px;
+ position: relative;
+ overflow: auto;
+ display: flex;
+ flex-direction: column;
+ gap: 40px;
+`;
+
+const SearchBarWrapper = styled.div`
+ display: flex;
+ justify-content: center;
+ width: 100%;
+ margin-top: 30px;
+`;
+
+const SearchResultTextContainer = styled.div`
+ display: flex;
+ gap: 8px;
+`;
+
+const SearchResultTitle = styled.span`
+ color: ${props => props.theme.colors.main};
+ font-size: 18px;
+ font-weight: 700;
+ word-wrap: break-word;
+`;
+
+const SearchResultCount = styled.span`
+ color: #4E202A;
+ font-size: 18px;
+ font-weight: 400;
+ word-wrap: break-word;
+`;
+
+const BookSectionWrapper = styled.div`
+ display: flex;
+ align-items: flex-end;
+ position: relative;
+ width: 100%;
+ gap: 30px;
+ justify-content: space-between;
+ flex-wrap: wrap;
+`;
+
+const BookContainer = styled.div`
+ position: relative;
+ display: flex;
+ justify-content: flex-start;
+ align-items: flex-start;
+ gap: 40px;
+ flex-wrap: wrap;
+`;
+
+const BookImage = styled.img`
+ width: 176px;
+ height: 258px;
+`;
+
+const BookDetails = styled.div`
+ display: flex;
+ flex-direction: column;
+ width: auto;
+ gap: 20px;
+`;
+
+const BookTitle = styled.div`
+ color: #4E202A;
+ font-size: 18px;
+ font-weight: 700;
+ word-wrap: break-word;
+ gap: 10px;
+ display: flex;
+`;
+
+const AladinImage = styled.img`
+ max-width: 100%;
+ height: auto;
+ object-fit: contain;
+ width: 44px;
+`;
+
+const BookSubtitle = styled.div`
+ display: flex;
+ flex-direction: column;
+ justify-content: flex-start;
+ align-items: flex-start;
+ color: #565656;
+ font-size: 14px;
+ font-weight: 400;
+ gap: 10px;
+ word-wrap: break-word;
+`;
+
+
+const LabelContainer = styled.div`
+ display: flex;
+ flex-direction: row;
+ gap: 10px;
+`;
+
+const ModalButtonWrapper = styled.div`
+ display: flex;
+ justify-content: flex-end;
+ width: 100%;
+ max-width: 200px;
+`;
+
+const Pagination = styled.div`
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ bottom: 20px;
+ width: 100%;
+ height: 38px;
+ gap: 6px;
+`;
+
+const PageText = styled.span`
+ font-size: 14px;
+ font-weight: 400;
+ color: ${props => (props.active ? props.theme.colors.main : '#4E202A')};
+`;
+
+const SearchResults = () => {
+ const rating = 7.5;
+ const totalStars = 5;
+
+ return (
+ <>
+
+
+
+
+
+
+ ‘채식주의자’
+ 검색 결과 총 00건
+
+
+
+
+
+
+
+ 채식주의자
+
+
+
+ 저자: 한강
+ 출판사 : 창비
+ 출간일: 2022년 03월
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 이전
+ 1
+ 2 3 4 5 6 7 다음
+
+ >
+ );
+ };
+
+ export default SearchResults;
\ No newline at end of file