Skip to content

Commit 565b0d6

Browse files
committed
fix: 툴팁 애니메이션 수정, 필요한 곳에 노출
1 parent 6c75a0c commit 565b0d6

File tree

4 files changed

+36
-21
lines changed

4 files changed

+36
-21
lines changed

src/routes/mission/$missionId/-components/MissionNotTriedDefault.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ export default function MissionNotTriedDefault({
1515
sectorImage,
1616
difficulty,
1717
missionImage,
18+
score,
1819
onStart,
1920
}: MissionNotTriedDefaultProps) {
2021
return (
@@ -46,6 +47,8 @@ export default function MissionNotTriedDefault({
4647
onStart={onStart}
4748
type="detail"
4849
imageOpacity={100}
50+
score={score}
51+
hasTooltip
4952
/>
5053
</div>
5154
</div>

src/routes/mission/$missionId/-components/MissionNotTriedSuccess.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ export default function MissionNotTriedSuccess({
5858
}}
5959
type="recommendation"
6060
isSelected={index === selectedIndex}
61+
score={mission.score}
62+
hasTooltip
6163
/>
6264
))}
6365
</div>

src/routes/mission/-components/MissionGridCard.tsx

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { Link } from "@tanstack/react-router";
2+
import { Tooltip } from "radix-ui";
23
import Button from "@/components/Button";
34
import { Tag } from "@/components/tag/Tag";
45
import { cn } from "@/utils/cn";
@@ -21,6 +22,7 @@ interface MissionGridCardProps {
2122
type: "main" | "detail" | "recommendation";
2223
isSelected?: boolean;
2324
imageOpacity?: number;
25+
hasTooltip?: boolean;
2426
}
2527

2628
export default function MissionGridCard({
@@ -37,6 +39,7 @@ export default function MissionGridCard({
3739
type = "main",
3840
isSelected = true,
3941
imageOpacity = 50,
42+
hasTooltip = false,
4043
}: MissionGridCardProps) {
4144
return (
4245
<Link
@@ -182,7 +185,29 @@ export default function MissionGridCard({
182185
)}
183186
{onStart && (type === "recommendation" || type === "detail") && (
184187
<div className="flex justify-end gap-2 mt-auto">
185-
<Button onClick={onStart}>도전</Button>
188+
<Tooltip.Provider>
189+
<Tooltip.Root open={hasTooltip && isSelected}>
190+
<Tooltip.Trigger asChild>
191+
<Button onClick={onStart}>도전</Button>
192+
</Tooltip.Trigger>
193+
<Tooltip.Portal>
194+
<Tooltip.Content
195+
className="select-none rounded-[8px] bg-white px-[15px] py-2 text-[15px] leading-none text-violet11 shadow-[hsl(206_22%_7%_/_35%)_0px_10px_38px_-10px,_hsl(206_22%_7%_/_20%)_0px_10px_20px_-15px] will-change-[transform,opacity] data-[state=delayed-open]:data-[side=bottom]:animate-slideUpAndFade data-[state=delayed-open]:data-[side=left]:animate-slideRightAndFade data-[state=delayed-open]:data-[side=right]:animate-slideLeftAndFade data-[state=delayed-open]:data-[side=top]:animate-slideDownAndFade animate-bounce"
196+
sideOffset={5}
197+
>
198+
<p className="t-p-14-sb text-neutral-800 flex items-center gap-1">
199+
<img
200+
src="/score-star.png"
201+
alt="score-star"
202+
className="w-2.5 h-2.5"
203+
/>
204+
+{score}
205+
</p>
206+
<Tooltip.Arrow className="fill-white mt-[-1px]" />
207+
</Tooltip.Content>
208+
</Tooltip.Portal>
209+
</Tooltip.Root>
210+
</Tooltip.Provider>
186211
</div>
187212
)}
188213
</div>

src/routes/mission/-components/MissionTimer.tsx

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
22
import { useNavigate } from "@tanstack/react-router";
33
import { differenceInSeconds, isValid, parseISO } from "date-fns";
4-
import { motion } from "motion/react";
54
import { Tooltip } from "radix-ui";
65
import { useEffect, useRef, useState } from "react";
76
import { Timer } from "@/components/timer/Timer";
@@ -17,8 +16,6 @@ import StopIcon from "../../../components/icons/StopIcon";
1716

1817
const HOLD_MS = 1000;
1918

20-
const MotionTooltipContent = motion.create(Tooltip.Content);
21-
2219
export default function MissionTimer({
2320
showMockStopButton,
2421
isTooltipOpen,
@@ -181,26 +178,14 @@ export default function MissionTimer({
181178
)}
182179
</button>
183180
</Tooltip.Trigger>
184-
<Tooltip.Portal key={isTooltipOpen ? "open" : "close"}>
185-
<MotionTooltipContent
186-
key={isTooltipOpen ? "open" : "close"}
187-
initial={{ y: -7 }}
188-
animate={{
189-
y: [0, -7, 0],
190-
}}
191-
exit={{ y: -7 }}
192-
transition={{
193-
duration: 1.5,
194-
repeat: Infinity,
195-
ease: "easeInOut",
196-
repeatType: "loop",
197-
}}
198-
className="select-none rounded-[8px] bg-white px-[15px] py-2 text-[15px] leading-none text-violet11 shadow-[hsl(206_22%_7%_/_35%)_0px_10px_38px_-10px,_hsl(206_22%_7%_/_20%)_0px_10px_20px_-15px] will-change-[transform,opacity] data-[state=delayed-open]:data-[side=bottom]:animate-slideUpAndFade data-[state=delayed-open]:data-[side=left]:animate-slideRightAndFade data-[state=delayed-open]:data-[side=right]:animate-slideLeftAndFade data-[state=delayed-open]:data-[side=top]:animate-slideDownAndFade"
181+
<Tooltip.Portal>
182+
<Tooltip.Content
183+
className="select-none rounded-[8px] bg-white px-[15px] py-2 text-[15px] leading-none text-violet11 shadow-[hsl(206_22%_7%_/_35%)_0px_10px_38px_-10px,_hsl(206_22%_7%_/_20%)_0px_10px_20px_-15px] will-change-[transform,opacity] data-[state=delayed-open]:data-[side=bottom]:animate-slideUpAndFade data-[state=delayed-open]:data-[side=left]:animate-slideRightAndFade data-[state=delayed-open]:data-[side=right]:animate-slideLeftAndFade data-[state=delayed-open]:data-[side=top]:animate-slideDownAndFade animate-bounce"
199184
sideOffset={5}
200185
>
201186
<p className="t-p-14-sb text-blue-500">시작</p>
202-
<Tooltip.Arrow className="fill-white" />
203-
</MotionTooltipContent>
187+
<Tooltip.Arrow className="fill-white mt-[-1px]" />
188+
</Tooltip.Content>
204189
</Tooltip.Portal>
205190
</Tooltip.Root>
206191
</Tooltip.Provider>

0 commit comments

Comments
 (0)