Skip to content

Commit b59b7c1

Browse files
author
리니_이경린
committed
refactor: 토스트 radix-ui적용
1 parent 5463e51 commit b59b7c1

File tree

3 files changed

+50
-12
lines changed

3 files changed

+50
-12
lines changed

src/components/ui/Toast/Toast.module.scss

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,30 @@
3636
opacity: 1;
3737
transform: translateY(0);
3838
}
39+
40+
.ToastRoot[data-state="open"] {
41+
animation: slideUp 150ms cubic-bezier(0.16, 1, 0.3, 1);
42+
}
43+
.ToastRoot[data-state="closed"] {
44+
animation: hide 100ms ease-in;
45+
}
46+
47+
@keyframes hide {
48+
from {
49+
opacity: 1;
50+
}
51+
to {
52+
opacity: 0;
53+
}
54+
}
55+
56+
@keyframes slideUp {
57+
from {
58+
transform: translateY(100%);
59+
opacity: 0;
60+
}
61+
to {
62+
transform: translateY(0);
63+
opacity: 1;
64+
}
65+
}

src/components/ui/Toast/Toast.tsx

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,32 @@
11
import { forwardRef } from "react";
2-
2+
import * as Toast from "@radix-ui/react-toast";
33
import classNames from "classnames";
44

55
import Text from "@/components/ui/Text/Text";
66
import styles from "@/components/ui/Toast/Toast.module.scss";
77

8-
export interface ToastProps extends React.HTMLAttributes<HTMLDivElement> {
8+
export interface ToastProps extends React.HTMLAttributes<HTMLLIElement> {
99
text: string;
10+
isToast: boolean;
1011
}
1112

12-
const Toast = forwardRef<HTMLDivElement, ToastProps>(({ text, className, ...props }, ref) => {
13-
return (
14-
<div ref={ref} className={classNames(styles.Toast, className)} {...props}>
15-
<Text variant="bodyM">{text}</Text>
16-
</div>
17-
);
18-
});
13+
const ToastComponent = forwardRef<HTMLLIElement, ToastProps>(
14+
({ text, isToast, className }, ref) => {
15+
return (
16+
<Toast.Provider swipeDirection="right">
17+
<Toast.Root
18+
ref={ref}
19+
className={styles.ToastRoot}
20+
open={isToast}
21+
>
22+
<Toast.Title className={classNames(styles.Toast, className)}>
23+
<Text variant="bodyM">{text}</Text>
24+
</Toast.Title>
25+
</Toast.Root>
26+
<Toast.Viewport className={styles.ToastViewport} />
27+
</Toast.Provider>
28+
);
29+
},
30+
);
1931

20-
export default Toast;
32+
export default ToastComponent;

src/pages/ReviewResultPage/ReviewResultPage.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,8 @@ export default function ReviewResultPage() {
9595
/>
9696
</div>
9797
</div>
98-
9998
<div className={styles.Bottom}>
100-
{isToast && <Toast text="리뷰가 복사되었어요." />}
99+
{<Toast text="리뷰가 복사되었어요." isToast={isToast}/>}
101100
<div className={styles.ButtonBox}>
102101
<Button text="다시생성" variant="secondary" onClick={handleRetryCreateReview} />
103102
<Button text="홈으로 가기" onClick={handleOpen} />

0 commit comments

Comments
 (0)