From aeaafc69c2701dc9958e61dfd9dc3de860de525a Mon Sep 17 00:00:00 2001 From: pccommen Date: Wed, 14 Aug 2024 16:00:30 +0900 Subject: [PATCH 1/7] =?UTF-8?q?feat:=20infosection=EC=97=90=20=EB=84=93?= =?UTF-8?q?=EC=9D=B4=EB=A5=BC=20=EB=B3=80=EA=B2=BD=ED=95=A0=20=EC=88=98=20?= =?UTF-8?q?=EC=9E=88=EB=8F=84=EB=A1=9D=20=ED=95=98=EB=8A=94=20props=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20=EB=B0=8F=20=EA=B7=B8=EC=97=90=20=EB=94=B0?= =?UTF-8?q?=EB=A5=B8=20=EC=9D=98=EC=A1=B4=EC=84=B1=20component=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20(CC-155)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/common/InfoSection/InfoSection.tsx | 15 +++++++-------- .../features/RacingGameLanding/EventPeriod.tsx | 2 +- .../src/features/RacingGameLanding/GiftInfo.tsx | 2 +- .../src/features/RacingGameLanding/HowToEvent.tsx | 4 ++-- Caecae/src/stories/.gitkeep | 0 5 files changed, 11 insertions(+), 12 deletions(-) delete mode 100644 Caecae/src/stories/.gitkeep diff --git a/Caecae/src/components/common/InfoSection/InfoSection.tsx b/Caecae/src/components/common/InfoSection/InfoSection.tsx index d48815ce..f667af7c 100644 --- a/Caecae/src/components/common/InfoSection/InfoSection.tsx +++ b/Caecae/src/components/common/InfoSection/InfoSection.tsx @@ -1,5 +1,6 @@ import { ReactElement, ReactNode } from "react"; interface InfoSectionProps { + width?: number; type?: "Default" | "Header"; title?: string; children: ReactNode; @@ -9,6 +10,7 @@ const InfoSection = ({ type = "Header", title = "", children, + width = 100, }: InfoSectionProps) => { let header: ReactElement | null = null; @@ -27,10 +29,12 @@ const InfoSection = ({ header = topLine; break; } - + const style = { + width: `${width}%`, + }; return ( <> -
+
{header}
{children} @@ -52,12 +56,7 @@ interface InfoSectionDotProps { right?: number; } -const InfoSectionDot = ({ - top, - bottom, - left, - right, -}: InfoSectionDotProps) => { +const InfoSectionDot = ({ top, bottom, left, right }: InfoSectionDotProps) => { const style: React.CSSProperties = { width: "20px", position: "absolute", diff --git a/Caecae/src/features/RacingGameLanding/EventPeriod.tsx b/Caecae/src/features/RacingGameLanding/EventPeriod.tsx index 54b3812a..0671b0fc 100644 --- a/Caecae/src/features/RacingGameLanding/EventPeriod.tsx +++ b/Caecae/src/features/RacingGameLanding/EventPeriod.tsx @@ -9,7 +9,7 @@ const EventPeriod = () => {

이벤트 기간

-
+

diff --git a/Caecae/src/features/RacingGameLanding/GiftInfo.tsx b/Caecae/src/features/RacingGameLanding/GiftInfo.tsx index d9e90b10..6d35f292 100644 --- a/Caecae/src/features/RacingGameLanding/GiftInfo.tsx +++ b/Caecae/src/features/RacingGameLanding/GiftInfo.tsx @@ -6,7 +6,7 @@ const GiftInfo = () => {

참여 혜택

-
+

diff --git a/Caecae/src/features/RacingGameLanding/HowToEvent.tsx b/Caecae/src/features/RacingGameLanding/HowToEvent.tsx index 75b57d5f..709953fc 100644 --- a/Caecae/src/features/RacingGameLanding/HowToEvent.tsx +++ b/Caecae/src/features/RacingGameLanding/HowToEvent.tsx @@ -8,7 +8,7 @@ const HowToEvent = () => {

이벤트 참여 방법

-
+

@@ -91,7 +91,7 @@ const HowToEvent = () => {

-
+

diff --git a/Caecae/src/stories/.gitkeep b/Caecae/src/stories/.gitkeep deleted file mode 100644 index e69de29b..00000000 From 34e444d7ba2b988e4df5c028ead79b0cf48006b2 Mon Sep 17 00:00:00 2001 From: pccommen Date: Wed, 14 Aug 2024 16:00:54 +0900 Subject: [PATCH 2/7] =?UTF-8?q?fix:=20=EA=B8=B0=EC=A1=B4=EC=97=90=20Pictur?= =?UTF-8?q?eBoard=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EB=9E=9C=EB=8D=94?= =?UTF-8?q?=EB=B0=A9=EC=8B=9D=20=EB=B3=80=EA=B2=BD=20(CC-155)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/common/PictureGameBoard/PictureGameBoard.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Caecae/src/components/common/PictureGameBoard/PictureGameBoard.tsx b/Caecae/src/components/common/PictureGameBoard/PictureGameBoard.tsx index e730cd77..d5774b8d 100644 --- a/Caecae/src/components/common/PictureGameBoard/PictureGameBoard.tsx +++ b/Caecae/src/components/common/PictureGameBoard/PictureGameBoard.tsx @@ -31,7 +31,7 @@ const PictureGameBoard = ({ Finding Picture

From c4a9605d429f4eedcf8d7f1632a59c960521ebb8 Mon Sep 17 00:00:00 2001 From: pccommen Date: Wed, 14 Aug 2024 16:01:16 +0900 Subject: [PATCH 3/7] =?UTF-8?q?fix:=20FindCasper=20=ED=8D=BC=EB=B8=94?= =?UTF-8?q?=EB=A6=AC=EC=8B=B1=20=EC=9D=BC=EB=B6=80=20=EB=B3=80=EA=B2=BD=20?= =?UTF-8?q?(CC-155)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FindingGameLanding/EventPeriod.tsx | 4 +- .../FindingGameLanding/HowToEvent.tsx | 4 +- .../FindingGameLanding/LadingPageTitle.tsx | 2 +- .../features/FindingGameLanding/OpenEvent.tsx | 87 +++++++++++++++---- .../FindingGameLanding/SelectionMethod.tsx | 4 +- 5 files changed, 77 insertions(+), 24 deletions(-) diff --git a/Caecae/src/features/FindingGameLanding/EventPeriod.tsx b/Caecae/src/features/FindingGameLanding/EventPeriod.tsx index 0ab97871..09369360 100644 --- a/Caecae/src/features/FindingGameLanding/EventPeriod.tsx +++ b/Caecae/src/features/FindingGameLanding/EventPeriod.tsx @@ -9,8 +9,8 @@ const EventPeriod = () => {

이벤트 기간

-
- +
+
diff --git a/Caecae/src/features/FindingGameLanding/HowToEvent.tsx b/Caecae/src/features/FindingGameLanding/HowToEvent.tsx index 589b1ecd..eb79e8ed 100644 --- a/Caecae/src/features/FindingGameLanding/HowToEvent.tsx +++ b/Caecae/src/features/FindingGameLanding/HowToEvent.tsx @@ -7,8 +7,8 @@ const HowToEvent = () => {

이벤트 참여 방법

-
- +
+

매일 새롭게 제공되는 캐스퍼 일렉트릭의 사진에서 숨겨진 로봇 diff --git a/Caecae/src/features/FindingGameLanding/LadingPageTitle.tsx b/Caecae/src/features/FindingGameLanding/LadingPageTitle.tsx index 07e04797..f122223e 100644 --- a/Caecae/src/features/FindingGameLanding/LadingPageTitle.tsx +++ b/Caecae/src/features/FindingGameLanding/LadingPageTitle.tsx @@ -40,7 +40,7 @@ const LadingPageTitle = ({ onClick }: LadingPageTitleProps) => { }; return ( <> -

+

CASPER Electric 신차 diff --git a/Caecae/src/features/FindingGameLanding/OpenEvent.tsx b/Caecae/src/features/FindingGameLanding/OpenEvent.tsx index f38b55f4..01cabeb8 100644 --- a/Caecae/src/features/FindingGameLanding/OpenEvent.tsx +++ b/Caecae/src/features/FindingGameLanding/OpenEvent.tsx @@ -1,7 +1,8 @@ -import { forwardRef, ReactElement, useRef, useState } from "react"; +import { forwardRef, ReactElement, useEffect, useRef, useState } from "react"; import SmileBadge from "../../components/common/SmileBadge/index"; import { useSpecificTimeEffect } from "../../hooks"; import { Link } from "../../shared/Hyunouter"; +import getFindingGameStartTime from "../../stories/getFindingGameStartTime"; // props 타입 정의 interface OpenEventProps {} @@ -14,26 +15,51 @@ interface StatusInfo { } const OpenEvent = forwardRef((props, ref) => { - const eventOpenStatus = useRef("none"); - const [leftTime, setLeftTime] = useState(0); props; + const [eventStatus, setEventStatus] = useState("none"); + const [leftTime, setLeftTime] = useState(0); const targetDate = new Date(); - targetDate.setHours(16, 0, 0, 0); - useSpecificTimeEffect(targetDate, (leftSeconds) => { - if (leftSeconds <= 3600 && leftSeconds > 0) { - eventOpenStatus.current = "soon"; - setLeftTime(leftSeconds); - } else if (leftSeconds < 0) { - eventOpenStatus.current = "opened"; - setLeftTime(leftSeconds); - } else { - eventOpenStatus.current = "none"; - } - }); + useEffect(() => { + const fetchData = async () => { + const reponse = await getFindingGameStartTime(); + + let answer: EventOpenStatus = "none"; // 명시적으로 타입 지정 + reponse.data.findingGameInfos.forEach((info, index) => { + const tempAnswer: EventOpenStatus = chechCurrentStuts( + info.startTime, + info.endTime + ); + + if (tempAnswer !== "none") { + answer = tempAnswer; + } + if (tempAnswer === "soon") { + targetDate.setHours(info.startTime[3], info.startTime[4], 0, 0); + } + }); + setEventStatus(answer); + + // @ts-expect-error: 진짜 ts 병신 + if (answer === "soon") { + const checkTime = () => { + const now = new Date(); + setLeftTime( + Math.floor((targetDate.getTime() - now.getTime()) / 1000) + ); + }; + checkTime(); + const intervalId = setInterval(checkTime, 1000); + return () => clearInterval(intervalId); + } + }; + fetchData(); + }, []); + + console.log(eventStatus); let data: StatusInfo | null = null; - if (eventOpenStatus.current == "none") { + if (eventStatus == "none") { data = { badgeTitle: "이벤트 오픈 예정", title: "7월 15일 오후 3시 15분", @@ -51,7 +77,7 @@ const OpenEvent = forwardRef((props, ref) => { ), isButtonOpen: false, }; - } else if (eventOpenStatus.current == "soon") { + } else if (eventStatus == "soon") { data = { badgeTitle: "이벤트 오픈 예정", title: "이벤트 오픈이 얼마 남지 않았어요!", @@ -160,6 +186,33 @@ const OpenEvent = forwardRef((props, ref) => { ); }); +function chechCurrentStuts(startTime: number[], endTime: number[]) { + const currentDate = new Date(); + const currentTime = [ + currentDate.getFullYear(), + currentDate.getMonth() + 1, + currentDate.getDate(), + currentDate.getHours(), + currentDate.getMinutes(), + ]; + const soonTime = [...startTime]; + soonTime[3] = soonTime[3] - 1; + + function isIn(startTime: number[], targetTime: number[], endTime: number[]) { + for (let i = 0; i < startTime.length; i++) { + if (startTime[i] === endTime[i] && startTime[i] === targetTime[i]) + continue; + else if (startTime[i] <= targetTime[i] && targetTime[i] <= endTime[i]) + return true; + else return false; + } + return false; + } + if (isIn(soonTime, currentTime, startTime)) return "soon"; + else if (isIn(startTime, currentTime, endTime)) return "opened"; + return "none"; +} + const WhiteTimerRectangle = (props: { num: number }) => { return ( <> diff --git a/Caecae/src/features/FindingGameLanding/SelectionMethod.tsx b/Caecae/src/features/FindingGameLanding/SelectionMethod.tsx index 4cf43beb..46e3e3c4 100644 --- a/Caecae/src/features/FindingGameLanding/SelectionMethod.tsx +++ b/Caecae/src/features/FindingGameLanding/SelectionMethod.tsx @@ -9,8 +9,8 @@ const SelectionMethod = () => {

참여 혜택 및 선정 방식

-
- +
+
From ca0bf154fb2f9a123462e3a669fd9681e056c72a Mon Sep 17 00:00:00 2001 From: pccommen Date: Wed, 14 Aug 2024 16:01:38 +0900 Subject: [PATCH 4/7] =?UTF-8?q?feat:=20FindCasper=EC=8B=9C=EC=9E=91=20?= =?UTF-8?q?=EC=8B=9C=EA=B0=84=20fetch=20DTO=20=EA=B5=AC=ED=98=84=20(CC-155?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/stories/getFindingGameStartTime.tsx | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Caecae/src/stories/getFindingGameStartTime.tsx diff --git a/Caecae/src/stories/getFindingGameStartTime.tsx b/Caecae/src/stories/getFindingGameStartTime.tsx new file mode 100644 index 00000000..e364a084 --- /dev/null +++ b/Caecae/src/stories/getFindingGameStartTime.tsx @@ -0,0 +1,25 @@ +import huynxios from "../shared/Hyunxios"; + +interface Response { + responseCode: number; + message: string; + data: Data; +} + +interface Data { + findingGameInfos: FindingGameInfo[]; + recentGameIndex: number; + nextGameIndex: number; +} + +interface FindingGameInfo { + startTime: number[]; + endTime: number[]; + numberOfWinners: number; +} + +export default async function getFindingGameStartTime() { + const response = await huynxios.get("/api/finding/info"); + + return response; +} From ca8ea0f0545643e1fd864a7e5d9b9a719d5a5681 Mon Sep 17 00:00:00 2001 From: pccommen Date: Wed, 14 Aug 2024 16:05:09 +0900 Subject: [PATCH 5/7] =?UTF-8?q?fix:=20ts.config=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Caecae/tsconfig.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Caecae/tsconfig.json b/Caecae/tsconfig.json index bacb8fda..9ab9d450 100644 --- a/Caecae/tsconfig.json +++ b/Caecae/tsconfig.json @@ -1,5 +1,7 @@ { "compilerOptions": { + "noUnusedLocals": false, + "noUnusedParameters": false, "baseUrl": ".", "paths": { "@assets/*": ["./public/assets/*"] From 898ffb89ae0be9a267938309b5666d4830d5824a Mon Sep 17 00:00:00 2001 From: pccommen Date: Wed, 14 Aug 2024 16:05:09 +0900 Subject: [PATCH 6/7] =?UTF-8?q?fix:=20ts.config=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Caecae/src/features/FindingGameLanding/OpenEvent.tsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Caecae/src/features/FindingGameLanding/OpenEvent.tsx b/Caecae/src/features/FindingGameLanding/OpenEvent.tsx index 01cabeb8..f42ba8a7 100644 --- a/Caecae/src/features/FindingGameLanding/OpenEvent.tsx +++ b/Caecae/src/features/FindingGameLanding/OpenEvent.tsx @@ -1,6 +1,5 @@ -import { forwardRef, ReactElement, useEffect, useRef, useState } from "react"; +import { forwardRef, ReactElement, useEffect, useState } from "react"; import SmileBadge from "../../components/common/SmileBadge/index"; -import { useSpecificTimeEffect } from "../../hooks"; import { Link } from "../../shared/Hyunouter"; import getFindingGameStartTime from "../../stories/getFindingGameStartTime"; @@ -25,7 +24,7 @@ const OpenEvent = forwardRef((props, ref) => { const reponse = await getFindingGameStartTime(); let answer: EventOpenStatus = "none"; // 명시적으로 타입 지정 - reponse.data.findingGameInfos.forEach((info, index) => { + reponse.data.findingGameInfos.forEach((info) => { const tempAnswer: EventOpenStatus = chechCurrentStuts( info.startTime, info.endTime From eff8df468aa63fbd46596bb9e22931b05dff68a7 Mon Sep 17 00:00:00 2001 From: minani-0621 Date: Wed, 14 Aug 2024 17:01:11 +0900 Subject: [PATCH 7/7] =?UTF-8?q?fix:=20=EC=88=A8=EC=9D=80=EA=B7=B8=EB=A6=BC?= =?UTF-8?q?=EC=B0=BE=EA=B8=B0=20=EB=B0=8F=20=EB=A0=88=EC=9D=B4=EC=8B=B1=20?= =?UTF-8?q?=EB=9E=9C=EB=94=A9=ED=8E=98=EC=9D=B4=EC=A7=80=20CSS=20=ED=86=B5?= =?UTF-8?q?=EC=9D=BC=20=ED=9B=84=20=EB=B0=B1=EA=B7=B8=EB=9D=BC=EC=9A=B4?= =?UTF-8?q?=EB=93=9C=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EC=9C=84=EC=B9=98=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20(CC-155)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/features/FindingGameLanding/EventPeriod.tsx | 4 ++-- .../src/features/FindingGameLanding/HowToEvent.tsx | 8 ++++---- .../features/FindingGameLanding/LadingPageTitle.tsx | 10 +++++----- .../features/FindingGameLanding/SelectionMethod.tsx | 6 +++--- Caecae/src/features/RacingGameLanding/EventIntro.tsx | 12 ++++++------ .../src/features/RacingGameLanding/EventPeriod.tsx | 6 +++--- Caecae/src/features/RacingGameLanding/GiftInfo.tsx | 2 +- Caecae/src/features/RacingGameLanding/HowToEvent.tsx | 6 +++--- 8 files changed, 27 insertions(+), 27 deletions(-) diff --git a/Caecae/src/features/FindingGameLanding/EventPeriod.tsx b/Caecae/src/features/FindingGameLanding/EventPeriod.tsx index 09369360..9d5c5db1 100644 --- a/Caecae/src/features/FindingGameLanding/EventPeriod.tsx +++ b/Caecae/src/features/FindingGameLanding/EventPeriod.tsx @@ -6,7 +6,7 @@ const EventPeriod = () => { return (
-

+

이벤트 기간

@@ -15,7 +15,7 @@ const EventPeriod = () => {
-

+

참여 기간: 7.15 (월) - 7.21 (일){" "} 오후 3시 15분
diff --git a/Caecae/src/features/FindingGameLanding/HowToEvent.tsx b/Caecae/src/features/FindingGameLanding/HowToEvent.tsx index eb79e8ed..5940c91d 100644 --- a/Caecae/src/features/FindingGameLanding/HowToEvent.tsx +++ b/Caecae/src/features/FindingGameLanding/HowToEvent.tsx @@ -4,13 +4,13 @@ const HowToEvent = () => { return (

-

+

이벤트 참여 방법

-

+

매일 새롭게 제공되는 캐스퍼 일렉트릭의 사진에서 숨겨진 로봇
뱃지와 픽셀 디자인을 찾아보세요. @@ -51,12 +51,12 @@ const HowToEvent = () => { howToEventLeft howToEventLeft

diff --git a/Caecae/src/features/FindingGameLanding/LadingPageTitle.tsx b/Caecae/src/features/FindingGameLanding/LadingPageTitle.tsx index f122223e..fe024c40 100644 --- a/Caecae/src/features/FindingGameLanding/LadingPageTitle.tsx +++ b/Caecae/src/features/FindingGameLanding/LadingPageTitle.tsx @@ -58,7 +58,7 @@ const LadingPageTitle = ({ onClick }: LadingPageTitleProps) => {

캐스퍼 일렉트릭에 숨겨진 로봇 뱃지 -
찾고 1만 원 커피 쿠폰 +
찾고 1만 원 커피 쿠폰 받아가자!

{ findGameLeftBlocks findGameLeftBlocks findGameLeftBlocks
{showMessage && ( -
+
URL이 복사되었습니다!
diff --git a/Caecae/src/features/FindingGameLanding/SelectionMethod.tsx b/Caecae/src/features/FindingGameLanding/SelectionMethod.tsx index 46e3e3c4..e0e2dd97 100644 --- a/Caecae/src/features/FindingGameLanding/SelectionMethod.tsx +++ b/Caecae/src/features/FindingGameLanding/SelectionMethod.tsx @@ -6,7 +6,7 @@ const SelectionMethod = () => { return (
-

+

참여 혜택 및 선정 방식

@@ -15,7 +15,7 @@ const SelectionMethod = () => {
-

+

매일 정해진 선착순 인원에게{" "} 스타벅스 1만 원 쿠폰을 드려요. @@ -23,7 +23,7 @@ const SelectionMethod = () => { 당첨 후 3분 내로 전화 번호를 기입하면 응모 완료!

-

+

* 하루에 한 번 응모 가능합니다.

diff --git a/Caecae/src/features/RacingGameLanding/EventIntro.tsx b/Caecae/src/features/RacingGameLanding/EventIntro.tsx index 9a59ec25..ea6cf949 100644 --- a/Caecae/src/features/RacingGameLanding/EventIntro.tsx +++ b/Caecae/src/features/RacingGameLanding/EventIntro.tsx @@ -39,14 +39,14 @@ const EventIntro = () => { <>
-

- CASPER Electric +

+ CASPER Electric 신차 출시 추첨 이벤트

-

+

전력으로...!
- + 315Km { onClick={shareEvent} > sharedButton - 공유하기 + 공유하기
- 전력 질주하러 가기 + 전력 질주하러 가기 rightShevron
diff --git a/Caecae/src/features/RacingGameLanding/EventPeriod.tsx b/Caecae/src/features/RacingGameLanding/EventPeriod.tsx index 0671b0fc..c48e020b 100644 --- a/Caecae/src/features/RacingGameLanding/EventPeriod.tsx +++ b/Caecae/src/features/RacingGameLanding/EventPeriod.tsx @@ -12,10 +12,10 @@ const EventPeriod = () => {
-

- 참여기간: 7.15(월) - 7.21(일) +

+ 참여 기간: 7.15 (월) - 7.21 (일)
- 당첨자 발표 날짜: 7.29(월)부터 주말ㆍ공휴일 제외 순차적으로 + 당첨자 발표 날짜: 7.29 (월)부터 주말ㆍ공휴일 제외 순차적으로 발송

diff --git a/Caecae/src/features/RacingGameLanding/GiftInfo.tsx b/Caecae/src/features/RacingGameLanding/GiftInfo.tsx index 6d35f292..ca778d9c 100644 --- a/Caecae/src/features/RacingGameLanding/GiftInfo.tsx +++ b/Caecae/src/features/RacingGameLanding/GiftInfo.tsx @@ -9,7 +9,7 @@ const GiftInfo = () => {
-

+

캐스퍼 일렉트릭과 함께 압도적 캐미를 보여준 분께
딱 맞는 아이템을 diff --git a/Caecae/src/features/RacingGameLanding/HowToEvent.tsx b/Caecae/src/features/RacingGameLanding/HowToEvent.tsx index 709953fc..54ff041b 100644 --- a/Caecae/src/features/RacingGameLanding/HowToEvent.tsx +++ b/Caecae/src/features/RacingGameLanding/HowToEvent.tsx @@ -11,7 +11,7 @@ const HowToEvent = () => {

-

+

캐스퍼 일렉트릭과 전력으로 315Km를 질주해보아요!
@@ -19,7 +19,7 @@ const HowToEvent = () => { 에게 추첨하여 경품 증정!

-

+

* 중복 응모 시 가장 높은 점수 1건만 추첨에 반영됩니다.

@@ -94,7 +94,7 @@ const HowToEvent = () => {
-

+

캐스퍼 일렉트릭은 다양한 옵션 선택이 가능해요.
가장 기대되는 커스터마이징 옵션을 고르면