Skip to content

Commit 63f99a8

Browse files
리니_이경린sikkzz
authored andcommitted
feat: 태그 생성 기능 추가
1 parent c96e7c9 commit 63f99a8

File tree

2 files changed

+41
-21
lines changed

2 files changed

+41
-21
lines changed

src/components/SelectTag/SelectTag.tsx

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,37 +8,42 @@ import Text from "@/components/ui/Text/Text";
88

99
import { useRoute } from "@/hooks/common/useRoute";
1010

11-
// 임시 데이터
12-
const TAG_LIST = [
13-
"음식이 맛있어요",
14-
"양이 많아요",
15-
"가성비가 좋아요",
16-
"메뉴 구성이 알차요",
17-
"매장이 넓어요",
18-
"단체모임 하기 좋아요",
19-
"뷰가 좋아요",
20-
"아늑해요",
21-
"분위기가 좋아요",
22-
"친절해요",
23-
"매장이 청결해요",
24-
];
25-
2611
const SelectTag = () => {
2712
const { navigateToSelectStyle } = useRoute();
2813

2914
const [selectedTagList, setSelectedTagList] = useState<string[]>([]);
3015
const [isBottomSheetOpen, setIsBottomSheetOpen] = useState(false);
16+
const [tagList, setTagList] = useState<string[]>([
17+
"음식이 맛있어요",
18+
"양이 많아요",
19+
"가성비가 좋아요",
20+
"메뉴 구성이 알차요",
21+
"매장이 넓어요",
22+
"단체모임 하기 좋아요",
23+
"뷰가 좋아요",
24+
"아늑해요",
25+
"분위기가 좋아요",
26+
"친절해요",
27+
"매장이 청결해요",
28+
]);
3129

3230
const handleTagClick = (e: React.MouseEvent<HTMLDivElement, MouseEvent>) => {
3331
const tag = e.currentTarget.textContent || "";
3432

3533
setSelectedTagList((prevSelectedTags) =>
3634
prevSelectedTags.includes(tag)
3735
? prevSelectedTags.filter((selectedTag) => selectedTag !== tag)
38-
: [...prevSelectedTags, tag],
36+
: [...prevSelectedTags, tag]
3937
);
4038
};
4139

40+
const handleTagAdd = (newTag: string) => {
41+
setIsBottomSheetOpen(false);
42+
if (!tagList.includes(newTag)) {
43+
setTagList((prevTagList: string[]) => [...prevTagList, newTag]);
44+
}
45+
};
46+
4247
const handleSheetClose = () => {
4348
setIsBottomSheetOpen(false);
4449
};
@@ -55,7 +60,7 @@ const SelectTag = () => {
5560
</Text>
5661
</div>
5762
<div className={styles.TagList}>
58-
{TAG_LIST.map((tag) => (
63+
{tagList.map((tag) => (
5964
<Tag
6065
text={tag}
6166
key={tag}
@@ -71,7 +76,11 @@ const SelectTag = () => {
7176
<Button text="다음" onClick={navigateToSelectStyle} />
7277
</div>
7378

74-
<TagSheet isOpen={isBottomSheetOpen} handleClose={handleSheetClose} />
79+
<TagSheet
80+
isOpen={isBottomSheetOpen}
81+
handleClose={handleSheetClose}
82+
handleTagAdd={handleTagAdd}
83+
/>
7584
</div>
7685
);
7786
};

src/components/SelectTag/TagSheet/TagSheet.tsx

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useState } from "react";
1+
import { useState, useEffect } from "react";
22

33
import * as Dialog from "@radix-ui/react-dialog";
44
import * as VisuallyHidden from "@radix-ui/react-visually-hidden";
@@ -15,16 +15,23 @@ import { useFocus } from "@/hooks/common/useFocus";
1515
interface TagSheetProps {
1616
isOpen: boolean;
1717
handleClose: () => void;
18+
handleTagAdd: (newTag: string) => void;
1819
}
1920

20-
const TagSheet = ({ isOpen, handleClose }: TagSheetProps) => {
21+
const TagSheet = ({ isOpen, handleClose, handleTagAdd }: TagSheetProps) => {
2122
const { isFocus, onFocus, onBlur } = useFocus({ defaultFocus: true });
2223

2324
const [newTag, setNewTag] = useState("");
2425

2526
const isInputError = newTag.length > 20;
2627
const isInputEmpty = newTag.length === 0;
2728

29+
useEffect(() => {
30+
if (isOpen) {
31+
setNewTag("");
32+
}
33+
}, [isOpen]);
34+
2835
const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {
2936
setNewTag(e.target.value);
3037
};
@@ -82,7 +89,11 @@ const TagSheet = ({ isOpen, handleClose }: TagSheetProps) => {
8289
)}
8390
</div>
8491

85-
<Button text="추가하기" disabled={isInputError || isInputEmpty} />
92+
<Button
93+
text="추가하기"
94+
disabled={isInputError || isInputEmpty}
95+
onClick={() => handleTagAdd(newTag)}
96+
/>
8697
</Dialog.Content>
8798
</Dialog.Portal>
8899
</Dialog.Root>

0 commit comments

Comments
 (0)