From eaf5c534001332bf75618348b12cf620e8ccf0c5 Mon Sep 17 00:00:00 2001 From: Sinji Date: Fri, 12 Jul 2024 02:49:55 +0900 Subject: [PATCH 01/12] =?UTF-8?q?feat:=20=EB=A9=94=EC=9D=B8=20=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20=ED=95=98=EB=8B=A8=20=EA=B3=B5=EC=97=B0=20?= =?UTF-8?q?=EB=A6=AC=EC=8A=A4=ED=8A=B8=20(performance)=20=EC=99=84?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + src/pages/main/Main.styled.ts | 9 ++ src/pages/main/Main.tsx | 17 ++++ .../performance/Performance.styled.ts | 56 ++++++++++++ .../components/performance/Performance.tsx | 54 ++++++++++++ .../main/components/performance/dummyData.ts | 88 +++++++++++++++++++ src/routes/Router.tsx | 2 + 7 files changed, 227 insertions(+) create mode 100644 src/pages/main/Main.styled.ts create mode 100644 src/pages/main/Main.tsx create mode 100644 src/pages/main/components/performance/Performance.styled.ts create mode 100644 src/pages/main/components/performance/Performance.tsx create mode 100644 src/pages/main/components/performance/dummyData.ts diff --git a/.gitignore b/.gitignore index dc5489aa..93fd6278 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ node_modules dist dist-ssr *.local +.env # Editor directories and files .vscode diff --git a/src/pages/main/Main.styled.ts b/src/pages/main/Main.styled.ts new file mode 100644 index 00000000..5c6f5648 --- /dev/null +++ b/src/pages/main/Main.styled.ts @@ -0,0 +1,9 @@ +import styled from "styled-components"; + +export const MainWrapper = styled.section` + width: auto; + + color: ${({ theme }) => theme.colors.gray_900}; + + background-color: ${({ theme }) => theme.colors.gray_900}; +`; diff --git a/src/pages/main/Main.tsx b/src/pages/main/Main.tsx new file mode 100644 index 00000000..1be89b31 --- /dev/null +++ b/src/pages/main/Main.tsx @@ -0,0 +1,17 @@ +import React, { useState } from "react"; +import * as S from "./Main.styled"; + +import Performance from "./components/performance/Performance"; + +const Main = () => { + // chips 클릭하면 seGenre 달라지게! + const [genre, setGenre] = useState("ALL"); + + return ( + + + + ); +}; + +export default Main; diff --git a/src/pages/main/components/performance/Performance.styled.ts b/src/pages/main/components/performance/Performance.styled.ts new file mode 100644 index 00000000..57529bed --- /dev/null +++ b/src/pages/main/components/performance/Performance.styled.ts @@ -0,0 +1,56 @@ +import styled from "styled-components"; + +export const PerformanceWrapper = styled.section` + padding: 2.4rem; + + color: ${({ theme }) => theme.colors.gray_900}; +`; + +export const PerformanceLayout = styled.section` + display: grid; + grid-template-columns: 1fr 1fr; + gap: 1.5rem 1.3rem; +`; + +export const PerformanceCardWrapper = styled.section` + display: flex; + flex-direction: column; + gap: 1rem; + align-items: start; +`; + +export const PerformanceImg = styled.image` + width: 15.7rem; + height: 22.4rem; + + background-color: white; + border-radius: 0.6rem; +`; + +export const PerformanceTitleWrapper = styled.section` + display: flex; + flex-direction: column; + width: 100%; +`; + +export const PerformanceTitle = styled.div` + width: 15.6rem; + overflow: hidden; + + color: ${({ theme }) => theme.colors.white}; + ${({ theme }) => theme.fonts["body1-normal-semi"]}; + white-space: nowrap; + text-overflow: ellipsis; +`; + +export const PerformancePeriod = styled.div` + color: ${({ theme }) => theme.colors.gray_500}; + + ${({ theme }) => theme.fonts["caption1-semi"]}; +`; + +export const PerformancePrice = styled.div` + color: ${({ theme }) => theme.colors.white}; + + ${({ theme }) => theme.fonts["body2-normal-semi"]}; +`; diff --git a/src/pages/main/components/performance/Performance.tsx b/src/pages/main/components/performance/Performance.tsx new file mode 100644 index 00000000..92b558f5 --- /dev/null +++ b/src/pages/main/components/performance/Performance.tsx @@ -0,0 +1,54 @@ +import * as S from "./Performance.styled"; + +import Spacing from "@components/commons/spacing/Spacing"; + +import { dummyData } from "./dummyData"; + +const Performance = ({ genre }: { genre: string }) => { + // 이 위치에 API로 불러온 배열 넣기 + const data = dummyData.performanceList; + + const filteredData = genre === "ALL" ? data : data.filter((item) => item.genre === genre); + + const sortData = filteredData + .filter((item) => item.dueDate >= 1) + .sort((a, b) => a.dueDate - b.dueDate); + + const data1 = sortData.slice(0, 4); + const data2 = sortData.slice(4); + + return ( + + + {data1.map((item) => ( + + + + {item.performanceTitle} + {item.performancePeriod} + {item.ticketPrice.toLocaleString("en-US")}원 + + + ))} + + + {/* 배너 자리! */} + + + {data2.map((item) => ( + + + + {item.performanceTitle} + {item.performancePeriod} + {item.ticketPrice.toLocaleString("en-US")}원 + + + ))} + + + + ); +}; + +export default Performance; diff --git a/src/pages/main/components/performance/dummyData.ts b/src/pages/main/components/performance/dummyData.ts new file mode 100644 index 00000000..2054cee0 --- /dev/null +++ b/src/pages/main/components/performance/dummyData.ts @@ -0,0 +1,88 @@ +export const dummyData = { + promotionList: [ + { + promotionId: 1, + promotionPhoto: "홍보이미지 URL", + performanceId: 1, + }, + { + promotionId: 2, + promotionPhoto: "홍보이미지2 URL", + performanceId: 2, + }, + ], + performanceList: [ + { + performanceId: 1, + performanceTitle: "새소년 밴드", + performancePeriod: "2023.12.28", + ticketPrice: 5000, + dueDate: 1, + genre: "BAND", + posterImage: "포스터 사진 URL", + }, + { + performanceId: 2, + performanceTitle: "정도영 댄스 공연", + performancePeriod: "2023.12.29~2023.12.30", + ticketPrice: 5000, + dueDate: 2, + genre: "DANCE", + posterImage: "포스터 사진 URL", + }, + { + performanceId: 3, + performanceTitle: "오늘 하는 공연", + performancePeriod: "2023.12.28", + ticketPrice: 5000, + dueDate: 0, + genre: "ETC", + posterImage: "포스터 사진 URL", + }, + { + performanceId: 4, + performanceTitle: "4번째 공연", + performancePeriod: "2023.12.29~2023.12.30", + ticketPrice: 5000, + dueDate: 4, + genre: "PLAY", + posterImage: "포스터 사진 URL", + }, + { + performanceId: 5, + performanceTitle: "다섯다섯다섯다섯다섯다섯다섯", + performancePeriod: "2023.12.28", + ticketPrice: 5000, + dueDate: 3, + genre: "DANCE", + posterImage: "포스터 사진 URL", + }, + { + performanceId: 6, + performanceTitle: "비트연극 정기공연", + performancePeriod: "2023.12.29~2023.12.30", + ticketPrice: 5000, + dueDate: 6, + genre: "PLAY", + posterImage: "포스터 사진 URL", + }, + { + performanceId: 7, + performanceTitle: "비트밴드 정기공연", + performancePeriod: "2023.12.28", + ticketPrice: 5000, + dueDate: 4, + genre: "ETC", + posterImage: "포스터 사진 URL", + }, + { + performanceId: 8, + performanceTitle: "비트연극 정기공연", + performancePeriod: "2023.12.29~2023.12.30", + ticketPrice: 5000, + dueDate: 5, + genre: "PLAY", + posterImage: "포스터 사진 URL", + }, + ], +}; diff --git a/src/routes/Router.tsx b/src/routes/Router.tsx index e4dc3e96..be41a90c 100644 --- a/src/routes/Router.tsx +++ b/src/routes/Router.tsx @@ -9,6 +9,7 @@ import ModalTest from "@pages/ModalTest"; import MyRegisterdShow from "@pages/MyRegisterdShow/MyRegisterdShow"; import NonMbLookup from "@pages/nonMbLookup/NonMbLookup"; import Register from "@pages/register/Register"; +import Main from "@pages/main/Main"; import TestPage from "@pages/test/TestPage"; import ViewBottomSheetTest from "@pages/ViewBottomSheetTest"; import { createBrowserRouter } from "react-router-dom"; @@ -54,6 +55,7 @@ const router = createBrowserRouter([ // }, { path: "/testpage", element: }, { path: "/myregisteredshow", element: }, + { path: "/main", element:
}, // ... ]); export default router; From 2c2bf6505e6b5ce5d1d1191e7569d515185e6158 Mon Sep 17 00:00:00 2001 From: Sinji Date: Fri, 12 Jul 2024 04:40:55 +0900 Subject: [PATCH 02/12] =?UTF-8?q?feat:=20=EB=B0=B0=EB=84=88=20navigate=20?= =?UTF-8?q?=EC=97=B0=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/svgs/Subtract.svg | 9 +++++ public/svgs/banner_basic.svg | 19 +++++++++ src/assets/images/banner_basic.jpg | Bin 0 -> 29914 bytes src/assets/svgs/BannerBasic.tsx | 38 ++++++++++++++++++ src/assets/svgs/Subtract.tsx | 16 ++++++++ src/assets/svgs/index.ts | 34 ++++++++++++++++ src/assets/svgs/index.tsx | 2 + .../performance/Performance.styled.ts | 31 ++++++++++++++ .../components/performance/Performance.tsx | 25 +++++++++++- svgr-generate.cjs | 23 ++++------- 10 files changed, 179 insertions(+), 18 deletions(-) create mode 100644 public/svgs/Subtract.svg create mode 100644 public/svgs/banner_basic.svg create mode 100644 src/assets/images/banner_basic.jpg create mode 100644 src/assets/svgs/BannerBasic.tsx create mode 100644 src/assets/svgs/Subtract.tsx create mode 100644 src/assets/svgs/index.ts diff --git a/public/svgs/Subtract.svg b/public/svgs/Subtract.svg new file mode 100644 index 00000000..dd8e7f6c --- /dev/null +++ b/public/svgs/Subtract.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/svgs/banner_basic.svg b/public/svgs/banner_basic.svg new file mode 100644 index 00000000..6b9b03a2 --- /dev/null +++ b/public/svgs/banner_basic.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/banner_basic.jpg b/src/assets/images/banner_basic.jpg new file mode 100644 index 0000000000000000000000000000000000000000..16c32fcff007de6024309677d481ed0164c3bcc4 GIT binary patch literal 29914 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 => ( + + + + + + + + + + + + + +); +export default SvgBannerBasic; diff --git a/src/assets/svgs/Subtract.tsx b/src/assets/svgs/Subtract.tsx new file mode 100644 index 00000000..65165732 --- /dev/null +++ b/src/assets/svgs/Subtract.tsx @@ -0,0 +1,16 @@ +import * as React from "react"; +import type { SVGProps } from "react"; +const SvgSubtract = (props: SVGProps) => ( + + + + + + + +); +export default SvgSubtract; diff --git a/src/assets/svgs/index.ts b/src/assets/svgs/index.ts new file mode 100644 index 00000000..37a967f0 --- /dev/null +++ b/src/assets/svgs/index.ts @@ -0,0 +1,34 @@ +export { default as BannerBasic } from "./BannerBasic"; +export { default as IcomCopy } from "./IcomCopy"; +export { default as IconArrowLeft } from "./IconArrowLeft"; +export { default as IconArrowRight } from "./IconArrowRight"; +export { default as IconArrowDown } from "./IconArrowDown"; +export { default as IconArrowDown } from "./IconArrowDown"; +export { default as IconArrowUp } from "./IconArrowUp"; +export { default as IconBnk } from "./IconBnk"; +export { default as IconCalendar } from "./IconCalendar"; +export { default as IconCheck } from "./IconCheck"; +export { default as IconEyeOff } from "./IconEyeOff"; +export { default as IconHanna } from "./IconHanna"; +export { default as IconIbk } from "./IconIbk"; +export { default as IconIm } from "./IconIm"; +export { default as IconKabank } from "./IconKabank"; +export { default as IconKb } from "./IconKb"; +export { default as IconLogo } from "./IconLogo"; +export { default as IconMinus } from "./IconMinus"; +export { default as IconNonghyup } from "./IconNonghyup"; +export { default as IconPlus } from "./IconPlus"; +export { default as IconSaemauel } from "./IconSaemauel"; +export { default as IconSc } from "./IconSc"; +export { default as IconShinhan } from "./IconShinhan"; +export { default as IconShinhyup } from "./IconShinhyup"; +export { default as IconSoohyup } from "./IconSoohyup"; +export { default as IconTextfiedlDelete } from "./IconTextfiedlDelete"; +export { default as IconTime } from "./IconTime"; +export { default as IconToss } from "./IconToss"; +export { default as IconWoochaegook } from "./IconWoochaegook"; +export { default as IconWoori } from "./IconWoori"; +export { default as IconXButton } from "./IconXButton"; +export { default as IcHamburgar } from "./IcHamburgar"; +export { default as IcOutlinePlace } from "./IcOutlinePlace"; +export { default as Subtract } from "./Subtract"; diff --git a/src/assets/svgs/index.tsx b/src/assets/svgs/index.tsx index 3b52f8a9..220ff663 100644 --- a/src/assets/svgs/index.tsx +++ b/src/assets/svgs/index.tsx @@ -1,3 +1,4 @@ +export { default as BannerBasic } from "./BannerBasic"; export { default as IcHamburgar } from "./IcHamburgar"; export { default as IcomCopy } from "./IcomCopy"; export { default as IconArrowDown } from "./IconArrowDown"; @@ -29,3 +30,4 @@ export { default as IconWoochaegook } from "./IconWoochaegook"; export { default as IconWoori } from "./IconWoori"; export { default as IconXButton } from "./IconXButton"; export { default as IcOutlinePlace } from "./IcOutlinePlace"; +export { default as Subtract } from "./Subtract"; \ No newline at end of file diff --git a/src/pages/main/components/performance/Performance.styled.ts b/src/pages/main/components/performance/Performance.styled.ts index 57529bed..06acab2e 100644 --- a/src/pages/main/components/performance/Performance.styled.ts +++ b/src/pages/main/components/performance/Performance.styled.ts @@ -1,4 +1,6 @@ import styled from "styled-components"; +import { Subtract } from "@assets/svgs"; +import { BannerBasic } from "@assets/svgs"; export const PerformanceWrapper = styled.section` padding: 2.4rem; @@ -20,6 +22,7 @@ export const PerformanceCardWrapper = styled.section` `; export const PerformanceImg = styled.image` + position: relative; width: 15.7rem; height: 22.4rem; @@ -27,6 +30,22 @@ export const PerformanceImg = styled.image` border-radius: 0.6rem; `; +export const SubtractBox = styled(Subtract)` + position: absolute; + width: 3.6rem; + height: 2.4rem; + margin-top: 1rem; +`; + +export const DueDate = styled.div` + position: absolute; + margin: 1.3rem 0 0 0.6rem; + + color: ${({ theme }) => theme.colors.pink_400}; + + ${({ theme }) => theme.fonts["caption1-semi"]}; +`; + export const PerformanceTitleWrapper = styled.section` display: flex; flex-direction: column; @@ -54,3 +73,15 @@ export const PerformancePrice = styled.div` ${({ theme }) => theme.fonts["body2-normal-semi"]}; `; + +export const BannerWrapper = styled.button` + width: auto; +`; + +export const Banner = styled(BannerBasic)` + display: flex; + width: 32.7rem; + height: 9.2rem; + + border-radius: 0.6rem; +`; diff --git a/src/pages/main/components/performance/Performance.tsx b/src/pages/main/components/performance/Performance.tsx index 92b558f5..c36f07d7 100644 --- a/src/pages/main/components/performance/Performance.tsx +++ b/src/pages/main/components/performance/Performance.tsx @@ -1,10 +1,17 @@ import * as S from "./Performance.styled"; +import { useNavigate } from "react-router-dom"; import Spacing from "@components/commons/spacing/Spacing"; import { dummyData } from "./dummyData"; const Performance = ({ genre }: { genre: string }) => { + const navigate = useNavigate(); + + const handleNavigate = () => { + navigate("/register"); + }; + // 이 위치에 API로 불러온 배열 넣기 const data = dummyData.performanceList; @@ -23,6 +30,12 @@ const Performance = ({ genre }: { genre: string }) => { {data1.map((item) => ( + {item.dueDate <= 5 ? ( + <> + + D-{item.dueDate} + + ) : null} {item.performanceTitle} {item.performancePeriod} @@ -32,12 +45,20 @@ const Performance = ({ genre }: { genre: string }) => { ))} - {/* 배너 자리! */} - + + + + {data2.map((item) => ( + {item.dueDate <= 5 ? ( + <> + + D-{item.dueDate} + + ) : null} {item.performanceTitle} {item.performancePeriod} diff --git a/svgr-generate.cjs b/svgr-generate.cjs index 82259e08..7021c315 100644 --- a/svgr-generate.cjs +++ b/svgr-generate.cjs @@ -6,37 +6,28 @@ const SVG_DIR = path.resolve(__dirname, "public/svgs"); const OUTPUT_DIR = path.resolve(__dirname, "src/assets/svgs"); const INDEX_FILE = path.join(OUTPUT_DIR, "index.tsx"); -// Run SVGR +// SVGR 실행 exec( `npx @svgr/cli -d ${OUTPUT_DIR} --ignore-existing --typescript --no-dimensions ${SVG_DIR}`, (code, stdout, stderr) => { if (code !== 0) { - console.error("SVGR command failed:", stderr); + console.error("SVGR 명령 실패:", stderr); process.exit(code); } - deleteIndexTs(); generateIndexFile(); } ); -// Delete index.ts if it exists -function deleteIndexTs() { - const indexTsPath = path.join(OUTPUT_DIR, "index.ts"); - if (fs.existsSync(indexTsPath)) { - fs.unlinkSync(indexTsPath); - } -} - -// Generate index.tsx +// index.tsx 파일 생성 function generateIndexFile() { fs.readdir(OUTPUT_DIR, (err, files) => { if (err) { - console.error("Failed to read directory:", err); + console.error("디렉토리 읽기 실패:", err); process.exit(1); } const exportStatements = files - .filter((file) => file.endsWith(".tsx")) + .filter((file) => file.endsWith(".tsx") && file !== "index.tsx") // index.tsx 제외 .map((file) => { const name = path.basename(file, ".tsx"); return `export { default as ${name} } from "./${name}";`; @@ -45,10 +36,10 @@ function generateIndexFile() { fs.writeFile(INDEX_FILE, exportStatements, (writeErr) => { if (writeErr) { - console.error("Failed to write index.tsx:", writeErr); + console.error("index.tsx 작성 실패:", writeErr); process.exit(1); } - console.log("index.tsx generated successfully"); + console.log("index.tsx 생성 성공"); }); }); } From 4ce47c6d166f9be166ddf9fe2da855a63d6b4064 Mon Sep 17 00:00:00 2001 From: Sinji Date: Fri, 12 Jul 2024 06:57:22 +0900 Subject: [PATCH 03/12] =?UTF-8?q?feat:=20filter=20chips=20=EC=84=B1?= =?UTF-8?q?=EA=B3=B5git=20add=20.git=20add=20.=20(=EA=B0=80=EB=A1=9C=20?= =?UTF-8?q?=EC=8A=A4=ED=81=AC=EB=A1=A4=20=EB=82=B4=EC=9D=BC=20=EC=9D=BC?= =?UTF-8?q?=EC=96=B4=EB=82=98=EC=84=9C=20=EA=B5=AC=ED=98=84=ED=95=98?= =?UTF-8?q?=EA=B8=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/svgs/icon_small_band.svg | 7 ++++ public/svgs/icon_small_dance.svg | 7 ++++ public/svgs/icon_small_etc.svg | 6 +++ public/svgs/icon_small_musical.svg | 5 +++ src/assets/svgs/IconSmallBand.tsx | 12 ++++++ src/assets/svgs/IconSmallDance.tsx | 10 +++++ src/assets/svgs/IconSmallEtc.tsx | 10 +++++ src/assets/svgs/IconSmallMusical.tsx | 13 ++++++ src/assets/svgs/index.ts | 4 ++ src/assets/svgs/index.tsx | 4 ++ src/components/commons/chip/Chip.styled.ts | 25 ++++++++++- src/components/commons/chip/Chip.tsx | 5 ++- src/pages/main/Main.tsx | 6 +++ .../main/components/chips/Chips.styled.ts | 23 ++++++++++ src/pages/main/components/chips/Chips.tsx | 42 +++++++++++++++++++ src/pages/main/constants/chipList.ts | 9 ++++ 16 files changed, 184 insertions(+), 4 deletions(-) create mode 100644 public/svgs/icon_small_band.svg create mode 100644 public/svgs/icon_small_dance.svg create mode 100644 public/svgs/icon_small_etc.svg create mode 100644 public/svgs/icon_small_musical.svg create mode 100644 src/assets/svgs/IconSmallBand.tsx create mode 100644 src/assets/svgs/IconSmallDance.tsx create mode 100644 src/assets/svgs/IconSmallEtc.tsx create mode 100644 src/assets/svgs/IconSmallMusical.tsx create mode 100644 src/pages/main/components/chips/Chips.styled.ts create mode 100644 src/pages/main/components/chips/Chips.tsx create mode 100644 src/pages/main/constants/chipList.ts diff --git a/public/svgs/icon_small_band.svg b/public/svgs/icon_small_band.svg new file mode 100644 index 00000000..0a7a7ff3 --- /dev/null +++ b/public/svgs/icon_small_band.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/public/svgs/icon_small_dance.svg b/public/svgs/icon_small_dance.svg new file mode 100644 index 00000000..7e7de691 --- /dev/null +++ b/public/svgs/icon_small_dance.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/public/svgs/icon_small_etc.svg b/public/svgs/icon_small_etc.svg new file mode 100644 index 00000000..d0c8b940 --- /dev/null +++ b/public/svgs/icon_small_etc.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/public/svgs/icon_small_musical.svg b/public/svgs/icon_small_musical.svg new file mode 100644 index 00000000..41fd51d2 --- /dev/null +++ b/public/svgs/icon_small_musical.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/svgs/IconSmallBand.tsx b/src/assets/svgs/IconSmallBand.tsx new file mode 100644 index 00000000..b8fae6eb --- /dev/null +++ b/src/assets/svgs/IconSmallBand.tsx @@ -0,0 +1,12 @@ +import * as React from "react"; +import type { SVGProps } from "react"; +const SvgIconSmallBand = (props: SVGProps) => ( + + + + + + + +); +export default SvgIconSmallBand; diff --git a/src/assets/svgs/IconSmallDance.tsx b/src/assets/svgs/IconSmallDance.tsx new file mode 100644 index 00000000..99c3b8a8 --- /dev/null +++ b/src/assets/svgs/IconSmallDance.tsx @@ -0,0 +1,10 @@ +import * as React from "react"; +import type { SVGProps } from "react"; +const SvgIconSmallDance = (props: SVGProps) => ( + + + + + +); +export default SvgIconSmallDance; diff --git a/src/assets/svgs/IconSmallEtc.tsx b/src/assets/svgs/IconSmallEtc.tsx new file mode 100644 index 00000000..466bf07f --- /dev/null +++ b/src/assets/svgs/IconSmallEtc.tsx @@ -0,0 +1,10 @@ +import * as React from "react"; +import type { SVGProps } from "react"; +const SvgIconSmallEtc = (props: SVGProps) => ( + + + + + +); +export default SvgIconSmallEtc; diff --git a/src/assets/svgs/IconSmallMusical.tsx b/src/assets/svgs/IconSmallMusical.tsx new file mode 100644 index 00000000..cb971451 --- /dev/null +++ b/src/assets/svgs/IconSmallMusical.tsx @@ -0,0 +1,13 @@ +import * as React from "react"; +import type { SVGProps } from "react"; +const SvgIconSmallMusical = (props: SVGProps) => ( + + + +); +export default SvgIconSmallMusical; diff --git a/src/assets/svgs/index.ts b/src/assets/svgs/index.ts index 37a967f0..19028a83 100644 --- a/src/assets/svgs/index.ts +++ b/src/assets/svgs/index.ts @@ -22,6 +22,10 @@ export { default as IconSaemauel } from "./IconSaemauel"; export { default as IconSc } from "./IconSc"; export { default as IconShinhan } from "./IconShinhan"; export { default as IconShinhyup } from "./IconShinhyup"; +export { default as IconSmallBand } from "./IconSmallBand"; +export { default as IconSmallDance } from "./IconSmallDance"; +export { default as IconSmallEtc } from "./IconSmallEtc"; +export { default as IconSmallMusical } from "./IconSmallMusical"; export { default as IconSoohyup } from "./IconSoohyup"; export { default as IconTextfiedlDelete } from "./IconTextfiedlDelete"; export { default as IconTime } from "./IconTime"; diff --git a/src/assets/svgs/index.tsx b/src/assets/svgs/index.tsx index 220ff663..12301144 100644 --- a/src/assets/svgs/index.tsx +++ b/src/assets/svgs/index.tsx @@ -22,6 +22,10 @@ export { default as IconSaemauel } from "./IconSaemauel"; export { default as IconSc } from "./IconSc"; export { default as IconShinhan } from "./IconShinhan"; export { default as IconShinhyup } from "./IconShinhyup"; +export { default as IconSmallBand } from "./IconSmallBand"; +export { default as IconSmallDance } from "./IconSmallDance"; +export { default as IconSmallEtc } from "./IconSmallEtc"; +export { default as IconSmallMusical } from "./IconSmallMusical"; export { default as IconSoohyup } from "./IconSoohyup"; export { default as IconTextfiedlDelete } from "./IconTextfiedlDelete"; export { default as IconTime } from "./IconTime"; diff --git a/src/components/commons/chip/Chip.styled.ts b/src/components/commons/chip/Chip.styled.ts index f8ba99ea..a105a44d 100644 --- a/src/components/commons/chip/Chip.styled.ts +++ b/src/components/commons/chip/Chip.styled.ts @@ -32,13 +32,34 @@ export const ChipWrapper = styled.div<{ color?: ChipsColorTypes }>` default: return ` background-color: ${theme.colors.gray_0}; - color: ${theme.colors.gray_900}; + color: ${theme.colors.pink_400}; `; } }} `; -export const ChipIcon = styled.span` +export const ChipIcon = styled.span<{ iconColor?: string }>` width: 1.6rem; height: 1.6rem; + + ${({ theme, iconColor }) => { + switch (iconColor) { + case "pink": + return ` + color: ${theme.colors.pink_400}; + `; + case "white": + return ` + color: ${theme.colors.white}; + `; + case "gray": + return ` + color: ${theme.colors.gray_500}; + `; + default: + return ` + color: ${theme.colors.gray_500}; + `; + } + }} `; diff --git a/src/components/commons/chip/Chip.tsx b/src/components/commons/chip/Chip.tsx index 1dadba99..098232e0 100644 --- a/src/components/commons/chip/Chip.tsx +++ b/src/components/commons/chip/Chip.tsx @@ -7,13 +7,14 @@ interface ChipProps { label: string; color?: ChipsColorTypes; icon?: React.ReactNode; + iconColor?: string; onClick?: () => void; } -const Chip = ({ label, color, icon, onClick }: ChipProps) => { +const Chip = ({ label, color, icon, iconColor, onClick }: ChipProps) => { return ( - {icon && {icon}} + {icon && {icon}} {label} ); diff --git a/src/pages/main/Main.tsx b/src/pages/main/Main.tsx index 1be89b31..faab5a06 100644 --- a/src/pages/main/Main.tsx +++ b/src/pages/main/Main.tsx @@ -2,13 +2,19 @@ import React, { useState } from "react"; import * as S from "./Main.styled"; import Performance from "./components/performance/Performance"; +import Chips from "./components/chips/Chips"; const Main = () => { // chips 클릭하면 seGenre 달라지게! const [genre, setGenre] = useState("ALL"); + const handleGenre = (value: string) => { + setGenre(value); + }; + return ( + ); diff --git a/src/pages/main/components/chips/Chips.styled.ts b/src/pages/main/components/chips/Chips.styled.ts new file mode 100644 index 00000000..5f8bf937 --- /dev/null +++ b/src/pages/main/components/chips/Chips.styled.ts @@ -0,0 +1,23 @@ +import { ComponentType } from "react"; +import styled from "styled-components"; + +export const ChipsWrapper = styled.section` + width: 37.5rem; +`; + +export const ChipsLayout = styled.section` + display: flex; + gap: 0.4rem; + padding: 1.6rem 2.4rem 0; + overflow-x: scroll; + + white-space: nowrap; +`; + +export const Chip = styled.button` + gap: 0.6rem; + align-items: center; + justify-content: center; + width: auto; + padding: 0.9rem 1.2rem; +`; diff --git a/src/pages/main/components/chips/Chips.tsx b/src/pages/main/components/chips/Chips.tsx new file mode 100644 index 00000000..5d5eaad3 --- /dev/null +++ b/src/pages/main/components/chips/Chips.tsx @@ -0,0 +1,42 @@ +import { useState, useEffect } from "react"; +import * as S from "./Chips.styled"; + +import Chip from "@components/commons/chip/Chip"; +import { CHIP_LIST } from "@pages/main/constants/chipList"; + +const Chips = ({ handleGenre }: { handleGenre: (value: string) => void }) => { + const [chipState, setChipState] = useState("ALL"); + + return ( + + + { + handleGenre("ALL"); + setChipState("ALL"); + }} + /> + {CHIP_LIST.map((item) => { + const GenreIcon = item.icon ? item.icon : () => <>; + return ( + } + iconColor={chipState === item.genre ? "pink" : "gray"} + onClick={() => { + handleGenre(item.genre); + setChipState(item.genre); + }} + /> + ); + })} + + + ); +}; + +export default Chips; diff --git a/src/pages/main/constants/chipList.ts b/src/pages/main/constants/chipList.ts new file mode 100644 index 00000000..a42d1d36 --- /dev/null +++ b/src/pages/main/constants/chipList.ts @@ -0,0 +1,9 @@ +import { IconSmallMusical, IconSmallBand, IconSmallDance, IconSmallEtc } from "@assets/svgs"; + +export const CHIP_LIST = [ + // { label: "전체", genre: "ALL" }, + { label: "연극/뮤지컬", genre: "PLAY", icon: IconSmallMusical }, + { label: "밴드", genre: "BAND", icon: IconSmallBand }, + { label: "댄스", genre: "DANCE", icon: IconSmallDance }, + { label: "기타", genre: "ETC", icon: IconSmallEtc }, +]; From bf954f03cb10a0248642163267f76ff6649c7a5d Mon Sep 17 00:00:00 2001 From: Sinji Date: Fri, 12 Jul 2024 07:45:31 +0900 Subject: [PATCH 04/12] =?UTF-8?q?feat:=20Footer=20=EC=99=84=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/main/Main.tsx | 2 + .../main/components/footer/Footer.styled.ts | 60 +++++++++++++++++++ src/pages/main/components/footer/Footer.tsx | 25 ++++++++ 3 files changed, 87 insertions(+) create mode 100644 src/pages/main/components/footer/Footer.styled.ts create mode 100644 src/pages/main/components/footer/Footer.tsx diff --git a/src/pages/main/Main.tsx b/src/pages/main/Main.tsx index faab5a06..77d20047 100644 --- a/src/pages/main/Main.tsx +++ b/src/pages/main/Main.tsx @@ -3,6 +3,7 @@ import * as S from "./Main.styled"; import Performance from "./components/performance/Performance"; import Chips from "./components/chips/Chips"; +import Footer from "./components/footer/Footer"; const Main = () => { // chips 클릭하면 seGenre 달라지게! @@ -16,6 +17,7 @@ const Main = () => { +