Skip to content

Commit 420d751

Browse files
committed
feat: PanelButton 및 TerminalPanel 컴포넌트에 툴팁 기능 추가
1 parent 0b1c8df commit 420d751

2 files changed

Lines changed: 46 additions & 11 deletions

File tree

src/features/submitCode/submission/ui/PanelButton.tsx

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,29 @@ import clsx from 'clsx';
33
import { Mode } from './ProblemWorksSection';
44

55
interface IPanelButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
6+
hasTooltipTrigger?: boolean;
67
currentMode: Mode;
78
targetMode: Mode;
89
children: React.ReactNode;
910
text: string;
11+
onClick: () => void;
1012
}
11-
export default function PanelButton({ ...props }: IPanelButtonProps) {
13+
export default function PanelButton({ hasTooltipTrigger = false, ...props }: IPanelButtonProps) {
1214
const { currentMode, targetMode, onClick, children, text, ...rest } = props;
13-
return (
15+
return hasTooltipTrigger ? (
16+
<div
17+
onClick={onClick}
18+
className={clsx(
19+
'transition-all flex space-x-2 items-center px-3 py-1.5 rounded-md',
20+
currentMode === targetMode
21+
? 'bg-primary text-white'
22+
: 'text-[#ccc] hover:bg-[rgba(255,255,255,0.08)] hover:text-secondary'
23+
)}
24+
>
25+
{children}
26+
<p>{text}</p>
27+
</div>
28+
) : (
1429
<button
1530
onClick={onClick}
1631
className={clsx(

src/features/submitCode/submission/ui/TerminalPanel.tsx

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ import { useGetSubmitPrepareData } from '@/entities/submitCode/submission/model/
1212
import { useRouter, useSearchParams } from 'next/navigation';
1313
import useSubscribeProblem from '../hooks/useSubscribeProblem';
1414
import Cookies from 'js-cookie';
15+
import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';
16+
import { useUserStore } from '@/entities/user/model/store';
17+
import { useState } from 'react';
18+
import { is } from 'zod/v4/locales';
1519
interface TerminalPanelProps {
1620
problemId: ProblemId;
1721
setMode: (mode: Mode) => void;
@@ -25,10 +29,13 @@ export default function TerminalPanel({
2529
mode,
2630
sourceCodeData,
2731
}: TerminalPanelProps) {
32+
const [isPanelButtonHovered, setIsPanelButtonHovered] = useState({
33+
review: false,
34+
});
2835
const router = useRouter();
2936
const searchParams = useSearchParams();
3037
const accessToken = Cookies.get('accessToken');
31-
38+
const { user } = useUserStore();
3239
useGetSubmitPrepareData(problemId, !!accessToken);
3340
const { submitPrepareData } = useProblemWebSocketStore();
3441

@@ -48,6 +55,7 @@ export default function TerminalPanel({
4855
setMode('result');
4956
};
5057

58+
console.log(isPanelButtonHovered.review);
5159
return (
5260
<div className="flex items-center justify-between p-2 border-b border-[#333]">
5361
<div className="flex items-center space-x-2">
@@ -66,14 +74,26 @@ export default function TerminalPanel({
6674
className={clsx(mode === 'result' ? 'text-white' : 'text-[#ccc] hover:text-secondary')}
6775
/>
6876
</PanelButton>
69-
<PanelButton
70-
onClick={() => setMode('review')}
71-
currentMode={mode}
72-
targetMode="review"
73-
text="CODE REVIEW"
74-
>
75-
<Icon.TerminalReviewIcon />
76-
</PanelButton>
77+
78+
<Tooltip open={!user?.verified && isPanelButtonHovered.review}>
79+
<TooltipTrigger asChild>
80+
<div
81+
onMouseEnter={() => setIsPanelButtonHovered((prev) => ({ ...prev, review: true }))}
82+
onMouseLeave={() => setIsPanelButtonHovered((prev) => ({ ...prev, review: false }))}
83+
>
84+
<PanelButton
85+
onClick={() => setMode('review')}
86+
currentMode={mode}
87+
targetMode="review"
88+
text="CODE REVIEW"
89+
disabled={!user?.verified}
90+
>
91+
<Icon.TerminalReviewIcon />
92+
</PanelButton>
93+
</div>
94+
</TooltipTrigger>
95+
<TooltipContent>이메일 인증 완료 후 이용 가능합니다</TooltipContent>
96+
</Tooltip>
7797
</div>
7898
<GitPushDialog />
7999
</div>

0 commit comments

Comments
 (0)