From c750817cb39c0b3a2b5c078d35e201eccc146956 Mon Sep 17 00:00:00 2001 From: 0in Date: Wed, 1 Jan 2025 19:44:34 +0900 Subject: [PATCH 1/3] =?UTF-8?q?design:=20=EA=B2=80=EC=83=89=20=EA=B2=B0?= =?UTF-8?q?=EA=B3=BC=20=EC=B1=85=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=ED=8D=BC?= =?UTF-8?q?=EB=B8=94=EB=A6=AC=EC=8B=B1=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/front_ci.yml | 6 +- public/images/aladinlogo.png | Bin 0 -> 37612 bytes src/App.jsx | 5 +- src/components/BookLabel.jsx | 28 ++++ src/pages/SearchResults.jsx | 230 +++++++++++++++++++++++++++++++++ 5 files changed, 265 insertions(+), 4 deletions(-) create mode 100644 public/images/aladinlogo.png create mode 100644 src/components/BookLabel.jsx create mode 100644 src/pages/SearchResults.jsx diff --git a/.github/workflows/front_ci.yml b/.github/workflows/front_ci.yml index 2668ad7..af76c5c 100644 --- a/.github/workflows/front_ci.yml +++ b/.github/workflows/front_ci.yml @@ -16,7 +16,7 @@ jobs: 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/')" + 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 @@ -32,8 +32,8 @@ jobs: run: npm install --frozen-lockfile - name: Run ESLint - run: npm run lint - + run: npm run lint + - name: Run Tests run: npm test --coverage diff --git a/public/images/aladinlogo.png b/public/images/aladinlogo.png new file mode 100644 index 0000000000000000000000000000000000000000..670ed4daef72736748b176ac507a7424b8c197a1 GIT binary patch literal 37612 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 qw>K`m|1K)O9dViH|MVKaZirV;C~jgHz}L literal 0 HcmV?d00001 diff --git a/src/App.jsx b/src/App.jsx index cc72232..ab559c0 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -10,6 +10,8 @@ import SignUp from './pages/SignUp'; import CheckPointRecordPage from './pages/CheckPointRecordPage'; import AnotherCheckPointRecordPage from './pages/AnotherCheckPointRecordPage'; import MyPage from './pages/MyPage'; +import SearchResults from './pages/SearchResults' + function App() { return ( @@ -18,10 +20,11 @@ function App() {
+ }/> } /> } /> } /> - } /> + } /> } /> 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/pages/SearchResults.jsx b/src/pages/SearchResults.jsx new file mode 100644 index 0000000..2ae467f --- /dev/null +++ b/src/pages/SearchResults.jsx @@ -0,0 +1,230 @@ +import React from 'react'; +import styled from 'styled-components'; +import ModalButton from '../components/modalButton/ModalButtonOk'; +import BookLabel from '../components/BookLabel' + +const Container = styled.div` + margin: 0 9.86%; + margin-top: 80px; + position: relative; + overflow: auto; + display: flex; + flex-direction: column; + gap: 40px; +`; + +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 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 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 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 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 SearchResults = () => { + const rating = 7.5; + const totalStars = 5; + + const fullStars = Math.floor(rating / 2); + const halfStars = rating % 2 >= 1 ? 1 : 0; + const emptyStars = totalStars - fullStars - halfStars; + + return ( + <> + + + ‘채식주의자’ + 검색 결과 총 00건 + + + + + + + + 채식주의자 + + + + 저자: 한강 + 출판사 : 창비 +
출간일: 2022년 03월
+ +
별점:
+ {[...Array(fullStars)].map((_, index) => ( + + ))} + {[...Array(halfStars)].map((_, index) => ( + + ))} + {[...Array(emptyStars)].map((_, index) => ( + + ))} + {rating} +
+
+ + + +
+
+ + + + +
+
+ + + 이전 + 1 + 2 3 4 5 6 7 다음 + + + ); + }; + + export default SearchResults; \ No newline at end of file From 5466787650c6602494a614bfa6063a554400e7f7 Mon Sep 17 00:00:00 2001 From: 0in Date: Wed, 1 Jan 2025 20:53:30 +0900 Subject: [PATCH 2/3] =?UTF-8?q?design:=20=EA=B2=80=EC=83=89=EB=B0=94=20?= =?UTF-8?q?=ED=8D=BC=EB=B8=94=EB=A6=AC=EC=8B=B1=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/search/search.svg | 10 ++ src/components/{ => search}/BookLabel.jsx | 0 src/components/search/Rating.jsx | 69 ++++++++++ src/components/search/SearchBar.jsx | 72 ++++++++++ src/pages/SearchResults.jsx | 158 ++++++++-------------- 5 files changed, 207 insertions(+), 102 deletions(-) create mode 100644 src/assets/search/search.svg rename src/components/{ => search}/BookLabel.jsx (100%) create mode 100644 src/components/search/Rating.jsx create mode 100644 src/components/search/SearchBar.jsx diff --git a/src/assets/search/search.svg b/src/assets/search/search.svg new file mode 100644 index 0000000..d20b781 --- /dev/null +++ b/src/assets/search/search.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/components/BookLabel.jsx b/src/components/search/BookLabel.jsx similarity index 100% rename from src/components/BookLabel.jsx rename to src/components/search/BookLabel.jsx 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 index 2ae467f..9d84fad 100644 --- a/src/pages/SearchResults.jsx +++ b/src/pages/SearchResults.jsx @@ -1,7 +1,9 @@ import React from 'react'; import styled from 'styled-components'; import ModalButton from '../components/modalButton/ModalButtonOk'; -import BookLabel from '../components/BookLabel' +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%; @@ -13,20 +15,40 @@ const Container = styled.div` gap: 40px; `; -const Pagination = styled.div` +const SearchBarWrapper = styled.div` display: flex; justify-content: center; - align-items: center; - bottom: 20px; width: 100%; - height: 38px; - gap: 6px; + margin-top: 30px; `; -const PageText = styled.span` - font-size: 14px; +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; - color: ${props => (props.active ? props.theme.colors.main : '#4E202A')}; + 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` @@ -64,7 +86,6 @@ const AladinImage = styled.img` height: auto; object-fit: contain; width: 44px; - `; const BookSubtitle = styled.div` @@ -79,78 +100,7 @@ const BookSubtitle = styled.div` word-wrap: break-word; `; -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 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 LabelContainer = styled.div` display: flex; flex-direction: row; @@ -159,27 +109,43 @@ const LabelContainer = styled.div` const ModalButtonWrapper = styled.div` display: flex; - justify-content: flex-end; + 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; - const fullStars = Math.floor(rating / 2); - const halfStars = rating % 2 >= 1 ? 1 : 0; - const emptyStars = totalStars - fullStars - halfStars; - return ( <> + + + + ‘채식주의자’ 검색 결과 총 00건 - + @@ -189,22 +155,10 @@ const SearchResults = () => { - 저자: 한강 - 출판사 : 창비 + 저자: 한강 + 출판사 : 창비
출간일: 2022년 03월
- -
별점:
- {[...Array(fullStars)].map((_, index) => ( - - ))} - {[...Array(halfStars)].map((_, index) => ( - - ))} - {[...Array(emptyStars)].map((_, index) => ( - - ))} - {rating} -
+
From bb60c3e654262c320bcf49a18867117b3540662f Mon Sep 17 00:00:00 2001 From: 0in Date: Wed, 1 Jan 2025 20:57:30 +0900 Subject: [PATCH 3/3] =?UTF-8?q?docs:=20ci=20=EC=BD=94=EB=93=9C=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/front_ci.yml | 64 ---------------------------------- 1 file changed, 64 deletions(-) delete mode 100644 .github/workflows/front_ci.yml diff --git a/.github/workflows/front_ci.yml b/.github/workflows/front_ci.yml deleted file mode 100644 index af76c5c..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/