diff --git a/src/app/_components/SurveyScreen/ProgressBar.jsx b/src/app/_components/SurveyScreen/ProgressBar.jsx
index 3de8aca..54a1317 100644
--- a/src/app/_components/SurveyScreen/ProgressBar.jsx
+++ b/src/app/_components/SurveyScreen/ProgressBar.jsx
@@ -1,8 +1,8 @@
export default function ProgressBar({ progress }) {
return (
-
+
diff --git a/src/app/_components/SurveyScreen/SurveyOption.tsx b/src/app/_components/SurveyScreen/SurveyOption.tsx
index 9ccba66..edd99ac 100644
--- a/src/app/_components/SurveyScreen/SurveyOption.tsx
+++ b/src/app/_components/SurveyScreen/SurveyOption.tsx
@@ -16,19 +16,18 @@ export default function SurveyOption({
);
}
diff --git a/src/app/_components/SurveyScreen/hooks/usePostSurvey.ts b/src/app/_components/SurveyScreen/hooks/usePostSurvey.ts
index e75ee67..3d56d07 100644
--- a/src/app/_components/SurveyScreen/hooks/usePostSurvey.ts
+++ b/src/app/_components/SurveyScreen/hooks/usePostSurvey.ts
@@ -4,7 +4,7 @@ import { postSurvey } from "@/lib/apis/survey";
import { SurveyRequest } from "@/lib/type";
export function usePostSurvey() {
- const [isLoading, setIsLoading] = useState(true);
+ const [isLoading, setIsLoading] = useState(false);
const [isError, setIsError] = useState(false);
const router = useRouter();
@@ -34,8 +34,6 @@ export function usePostSurvey() {
} catch (err) {
console.error(err);
setIsError(true);
- } finally {
- setIsLoading(false);
}
};
diff --git a/src/app/_components/SurveyScreen/hooks/useSurvey.ts b/src/app/_components/SurveyScreen/hooks/useSurvey.ts
index 9bfb13e..0f94982 100644
--- a/src/app/_components/SurveyScreen/hooks/useSurvey.ts
+++ b/src/app/_components/SurveyScreen/hooks/useSurvey.ts
@@ -1,5 +1,4 @@
import { useState } from "react";
-import { useRouter } from "next/navigation";
import { surveyData } from "@/constants/surveyData";
interface UseSurveyProps {
@@ -8,8 +7,6 @@ interface UseSurveyProps {
}
export function useSurvey({ type, routing }: UseSurveyProps) {
- const router = useRouter();
-
const questions = surveyData[type];
const storageKey = `${type}Answers`;
@@ -19,11 +16,7 @@ export function useSurvey({ type, routing }: UseSurveyProps) {
const [currentQuestion, setCurrentQuestion] = useState(0);
- const progress =
- ((questions.length -
- answers.filter((element: string) => element === "").length) /
- questions.length) *
- 100;
+ const progress = ((currentQuestion + 1) / questions.length) * 100;
const handleAnswerClick = (answer: string) => {
const updatedAnswers = [...answers];
@@ -40,8 +33,6 @@ export function useSurvey({ type, routing }: UseSurveyProps) {
if (currentQuestion === questions.length - 1) {
if (routing) {
routing("ToMoodTransition");
- } else {
- router.push("/recommend");
}
} else {
setCurrentQuestion((prev) => prev + 1);
diff --git a/src/app/_components/SurveyScreen/index.tsx b/src/app/_components/SurveyScreen/index.tsx
index 125fd1d..9d221a8 100644
--- a/src/app/_components/SurveyScreen/index.tsx
+++ b/src/app/_components/SurveyScreen/index.tsx
@@ -1,11 +1,12 @@
"use client";
import { useSurvey } from "./hooks/useSurvey";
+import { usePostSurvey } from "./hooks/usePostSurvey";
+import clsx from "clsx";
import ProgressBar from "@/app/_components/SurveyScreen/ProgressBar";
import SurveyOption from "./SurveyOption";
import Button from "@/components/Button";
-import clsx from "clsx";
-import { usePostSurvey } from "./hooks/usePostSurvey";
+import TransitionScreen from "@/app/_components/TransitionScreen";
import ErrorScreen from "@/components/ErrorScreen";
interface SurveyScreenProps {
@@ -29,31 +30,36 @@ export default function SurveyScreen({ type, routing }: SurveyScreenProps) {
const isLastQuestion =
type === "todayMood" && currentQuestion === questions.length - 1;
+ if (isLoading && isLastQuestion) {
+ return
;
+ }
if (isError) return
;
return (
-
+
-
-
-
- {questions[currentQuestion].title}
-
-
- {questions[currentQuestion].contents}
-
-
-
- {questions[currentQuestion].items.map((item, index) => (
-
handleAnswerClick(item)}
- />
- ))}
+
+
+
+
+ {questions[currentQuestion].title}
+
+
+ {questions[currentQuestion].contents}
+
+
+
+ {questions[currentQuestion].items.map((item, index) => (
+ handleAnswerClick(item)}
+ />
+ ))}
+
-
+
{currentQuestion > 0 && (
-
);
}
diff --git a/src/app/_components/TransitionScreen/index.tsx b/src/app/_components/TransitionScreen/index.tsx
index 4915d38..e418de0 100644
--- a/src/app/_components/TransitionScreen/index.tsx
+++ b/src/app/_components/TransitionScreen/index.tsx
@@ -19,7 +19,7 @@ export default function TransitionScreen({
if (routing) {
setTimeout(() => {
routing("TodayMoodSurvey");
- }, 1000);
+ }, 1800);
}
}, [transitionContent, routing]);
diff --git a/src/app/globals.css b/src/app/globals.css
index 691d585..a2dc0ed 100644
--- a/src/app/globals.css
+++ b/src/app/globals.css
@@ -1,5 +1,13 @@
@import "tailwindcss";
+@media (hover: hover) {
+ .hover-underline:hover {
+ text-decoration: underline;
+ }
+}
+
+@custom-variant hover (&:hover);
+
body {
font-family:
"Pretendard Variable",
@@ -19,8 +27,6 @@ body {
sans-serif;
}
-@import "tailwindcss";
-
@theme {
/* Display */
--text-display: 36px;
diff --git a/src/app/recommend/_components/RecommendationPanel/SkeletonCard.tsx b/src/app/recommend/_components/RecommendationPanel/SkeletonCard.tsx
new file mode 100644
index 0000000..83eb1a9
--- /dev/null
+++ b/src/app/recommend/_components/RecommendationPanel/SkeletonCard.tsx
@@ -0,0 +1,17 @@
+import Skeleton from "@/components/Loading/Skeleton";
+
+export default function SkeletonCard() {
+ return (
+
+ );
+}
diff --git a/src/app/recommend/_components/RecommendationPanel/SpaceCard.tsx b/src/app/recommend/_components/RecommendationPanel/SpaceCard.tsx
index 8dc5127..35066f9 100644
--- a/src/app/recommend/_components/RecommendationPanel/SpaceCard.tsx
+++ b/src/app/recommend/_components/RecommendationPanel/SpaceCard.tsx
@@ -18,7 +18,7 @@ export default function SpaceCard({
onClick={() => {
window.open(url, "_blank");
}}
- className="flex h-full w-full cursor-pointer gap-2 hover:bg-[#D1D4DC] sm:flex-col sm:gap-3"
+ className="flex h-full w-full cursor-pointer gap-2 sm:flex-col sm:gap-3"
>
+ ) : isLoading ? (
+
+ {Array.from({ length: 6 }).map((_, index) => (
+
+ ))}
+
) : (
{spaceData.map((space, index) => (
diff --git a/src/app/recommend/_components/SatisfactionModalButton.tsx b/src/app/recommend/_components/SatisfactionModalButton.tsx
new file mode 100644
index 0000000..78d3294
--- /dev/null
+++ b/src/app/recommend/_components/SatisfactionModalButton.tsx
@@ -0,0 +1,29 @@
+import Button from "@/components/Button";
+
+export default function SatisfactionModalButton({
+ onOpen,
+}: {
+ onOpen: () => void;
+}) {
+ return (
+
+
+
+
+
+
+ 서비스 이용은 어떠셨나요?
+
+ 소중한 의견으로 더 나은 서비스를 만들게요!
+
+
+
+
+ );
+}
diff --git a/src/app/recommend/page.tsx b/src/app/recommend/page.tsx
index 6215e38..cff850a 100644
--- a/src/app/recommend/page.tsx
+++ b/src/app/recommend/page.tsx
@@ -5,18 +5,15 @@ import { useGetRecommendation } from "./_hooks/useGetRecommendation";
import NavBar from "./_components/NavBar";
import RecommendationPanel from "./_components/RecommendationPanel";
import MapView from "./_components/MapView";
-import Button from "@/components/Button";
import Modal from "@/components/Modal";
import SatisfactionModalContent from "./_components/SatisfactionModalContent";
-import TransitionScreen from "@/app/_components/TransitionScreen";
+import SatisfactionModalButton from "./_components/SatisfactionModalButton";
export default function RecommendPage() {
const [isOpen, setIsOpen] = useState(false);
const { spaceData, isLoading, isError } = useGetRecommendation();
- if (isLoading) return
;
-
return (
<>
@@ -28,16 +25,14 @@ export default function RecommendPage() {
-
+
-
+ setIsOpen(true)} />
diff --git a/src/app/submit-success/page.tsx b/src/app/submit-success/page.tsx
index 8efde51..3c99f74 100644
--- a/src/app/submit-success/page.tsx
+++ b/src/app/submit-success/page.tsx
@@ -1,8 +1,12 @@
"use client";
import { useRouter } from "next/navigation";
-import Link from "next/link";
import Button from "@/components/Button";
+import Image from "next/image";
+import SurveyComplete from "@/assets/images/survey-complete.png";
+
+const GOOGLE_FORM_LINK =
+ "https://docs.google.com/forms/d/e/1FAIpQLSe5OJjg2hqPTtCszkh10CwrS39eVCf_iFfmP-21ago8KUL42w/viewform?usp=dialog";
export default function SubmitSuccessPage() {
const router = useRouter();
@@ -13,17 +17,38 @@ export default function SubmitSuccessPage() {
};
return (
-
-
설문에 응해주셔서 감사합니다
-
- 서비스를 평가하고 아메리카노를 받아가세요!
-
+
+
+
+
+
+ 설문 완료!
+
+ 이제 커피 받으러 가볼까요?
+
+
+
+
);
diff --git a/src/assets/images/commute_recommendation.png b/src/assets/images/commute_recommendation.png
index d144b3f..782d57e 100644
Binary files a/src/assets/images/commute_recommendation.png and b/src/assets/images/commute_recommendation.png differ
diff --git a/src/assets/images/mood_finder.png b/src/assets/images/mood_finder.png
index 7ccef91..6bce52e 100644
Binary files a/src/assets/images/mood_finder.png and b/src/assets/images/mood_finder.png differ
diff --git a/src/assets/images/survey-complete.png b/src/assets/images/survey-complete.png
new file mode 100644
index 0000000..5834098
Binary files /dev/null and b/src/assets/images/survey-complete.png differ
diff --git a/src/components/Button/index.tsx b/src/components/Button/index.tsx
index 065d598..829ecdb 100644
--- a/src/components/Button/index.tsx
+++ b/src/components/Button/index.tsx
@@ -22,8 +22,10 @@ export default function Button({