Skip to content

Commit cedcb17

Browse files
authored
Merge pull request #54 from dormitoryFamilies/refactor/button-component
[#53] 버튼 컴포넌트 대규모 리팩토링
2 parents 7cf338c + fa4fcd7 commit cedcb17

26 files changed

+339
-574
lines changed

dorm-front/src/app/(main)/board/[id]/page.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ import PostDetailContent from "@/components/board/PostDetailContent";
2323
import Profile from "@/components/board/Profile";
2424
import RecruitmentStatusChangeModal from "@/components/board/RecruitmentStatusChangeModal";
2525
import ReplyCommentDeleteMenu from "@/components/board/ReplyCommentDeleteMenu";
26-
import Button from "@/components/common/Button";
2726
import Header from "@/components/common/Header";
2827
import ProfileModal from "@/components/common/ProfileModal";
28+
import Tag from "@/components/common/Tag";
2929
import useGetArticleDetail from "@/lib/hooks/useGetArticleDetail";
3030
import useGetArticleDetailComments from "@/lib/hooks/useGetArticleDetailComments";
3131
import { selectedDormitory, selectedMemberIdAtom } from "@/recoil/atom";
@@ -159,14 +159,14 @@ const BoardDetail = () => {
159159
<div className="flex flex-col m-5 gap-y-4">
160160
{/*태그*/}
161161
<div className="flex gap-x-2">
162-
<div className={"flex items-center gap-x-1 board-type-tag py-1 px-3 rounded-full text-h5"}>
162+
<Tag className={"bg-secondary-tag"}>
163163
{renderBoardTypeIcon(articleDetail?.data.boardType)}
164164
{articleDetail?.data.boardType}
165-
</div>
165+
</Tag>
166166
{articleDetail?.data.status == "모집중" ? (
167-
<Button className={"recruiting-tag"}>모집중</Button>
167+
<Tag className={"bg-blue-tag"}>모집중</Tag>
168168
) : (
169-
<Button className={"recruitment-completed-tag"}>모집완료</Button>
169+
<Tag className={"bg-gray0-tag"}>모집완료</Tag>
170170
)}
171171
</div>
172172

@@ -236,7 +236,7 @@ const BoardDetail = () => {
236236
);
237237
})}
238238
</div>
239-
<div className={"h-[110px]"} />
239+
<div className={"h-[130px]"} />
240240
{/* 댓글 작성, 찜하기 */}
241241
{isArticleFavoritesListClicked ? null : (
242242
<div>

dorm-front/src/app/(main)/board/page.tsx

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import ArticleSortFilter from "@/components/board/ArticleSortFilter";
1212
import ArticleStatusFilter from "@/components/board/ArticleStatusFilter";
1313
import FilterMenu from "@/components/board/FilterMenu";
1414
import Post from "@/components/board/Post";
15-
import WriteButton from "@/components/board/WriteButton";
1615
import Button from "@/components/common/Button";
1716
import Header from "@/components/common/Header";
1817
import NavBar from "@/components/common/NavBar";
@@ -79,6 +78,10 @@ const Board = () => {
7978
}
8079
};
8180

81+
const onMove = () => {
82+
router.push("/board/write");
83+
};
84+
8285
return (
8386
<div className="relative">
8487
<Header
@@ -94,9 +97,9 @@ const Board = () => {
9497
{/* filter */}
9598
<div className="relative flex gap-x-2 mx-5 my-3">
9699
<Button
97-
className={"not-click-filter"}
100+
className={"border-gray1-button"}
98101
onClick={() => setIsSortingFilterClick(!isSortingFilterClick)}
99-
Icon={isSortingFilterClick ? DropUpIcon : DropDownIcon}>
102+
RightIcon={isSortingFilterClick ? DropUpIcon : DropDownIcon}>
100103
{formatSortContent()}
101104
</Button>
102105
{isSortingFilterClick ? (
@@ -107,9 +110,9 @@ const Board = () => {
107110
/>
108111
) : null}
109112
<Button
110-
className={"not-click-filter"}
113+
className={"border-gray1-button"}
111114
onClick={() => setIsStatusFilterClick(!isStatusFilterClick)}
112-
Icon={isStatusFilterClick ? DropUpIcon : DropDownIcon}>
115+
RightIcon={isStatusFilterClick ? DropUpIcon : DropDownIcon}>
113116
{selectedStatusType}
114117
</Button>
115118
{isStatusFilterClick ? (
@@ -166,22 +169,38 @@ const Board = () => {
166169
status={article.status}
167170
wishCount={article.wishCount}
168171
viewCount={article.viewCount}
169-
thumbnailUrl={"/unnimm.jpg"}></Post>
172+
thumbnailUrl={article.thumbnailUrl}></Post>
170173
</div>
171174
);
172175
});
173176
})
174177
: null}
175178
</div>
176179
</div>
177-
<WriteButton />
180+
<Button
181+
className={"bg-primary-button"}
182+
secondClassName={"fixed bottom-[84px] right-5 z-10 text-h4 gap-x-2"}
183+
LeftIcon={WriteButtonIcon}>
184+
글쓰기
185+
</Button>
178186
<div className={"h-[90px]"} />
179-
<NavBar></NavBar>
187+
<NavBar />
180188
</div>
181189
);
182190
};
183191
export default Board;
184192

193+
const WriteButtonIcon = (props: SVGProps<SVGSVGElement>) => (
194+
<svg width={16} height={16} fill="none" xmlns="http://www.w3.org/2000/svg" {...props}>
195+
<path
196+
fillRule="evenodd"
197+
clipRule="evenodd"
198+
d="M7.81 15.864a.82.82 0 01-.813-.813V8.857H.814A.82.82 0 010 8.043a.82.82 0 01.814-.813h6.183V.95A.82.82 0 017.81.134a.82.82 0 01.814.814v6.28h3.037a.82.82 0 01.814.814.82.82 0 01-.814.814H8.624v6.194a.82.82 0 01-.814.813zM16 8.044a1.085 1.085 0 11-2.17 0 1.085 1.085 0 012.17 0z"
199+
fill="#fff"
200+
/>
201+
</svg>
202+
);
203+
185204
const DropDownIcon = (props: SVGProps<SVGSVGElement>) => (
186205
<svg xmlns="http://www.w3.org/2000/svg" width={10} height={6} fill="none" {...props}>
187206
<path

dorm-front/src/app/(main)/chat/[roomId]/page.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import useChatMessages from "@/lib/hooks/useChatMessages";
1616
import useMyMemberId from "@/lib/hooks/useMyMemberId";
1717
import useUserProfile from "@/lib/hooks/useUserProfile";
1818
import { chatRoomUUIDAtom, memberIdAtom, messageAtom } from "@/recoil/chat/atom";
19+
import Button from "@/components/common/Button";
1920

2021
const ChatRoom = () => {
2122
const router = useRouter();
@@ -229,11 +230,11 @@ const ChatRoom = () => {
229230
setMessage(e.target.value);
230231
}}
231232
placeholder={"메시지 보내기"}
232-
className={"ml-3 bg-gray0 placeholder:text-gray4 placeholder:text-h5 outline-none"}
233+
className={"ml-3 bg-gray0 placeholder:text-gray4 placeholder:text-h5 outline-none w-[75%]"}
233234
/>
234-
<button type={"submit"} className={"py-2 px-4 text-white bg-primary rounded-full"}>
235+
<Button type={"submit"} className={"bg-primary-button"}>
235236
전송
236-
</button>
237+
</Button>
237238
</div>
238239
</div>
239240
</form>

dorm-front/src/app/(main)/chat/page.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import ProfileModal from "@/components/common/ProfileModal";
1212
import useChatRooms from "@/lib/hooks/useChatRooms";
1313
import useMyFollowings from "@/lib/hooks/useMyFollowings";
1414
import { chatRoomUUIDAtom, memberIdAtom } from "@/recoil/chat/atom";
15+
import Button from "@/components/common/Button";
1516
const Chat = () => {
1617
const router = useRouter();
1718
const { chatRooms, setChatRoomsSize } = useChatRooms();
@@ -54,6 +55,10 @@ const Chat = () => {
5455
return `${period} ${hours}:${formattedMinutes}`;
5556
};
5657

58+
const navigateToMypageFollow = () => {
59+
router.push("/mypage/follow");
60+
};
61+
5762
return (
5863
<>
5964
{isProfileOpen ? <ProfileModal memberId={memberIdState} setIsOpenProfileModal={setIsProfileOpen} /> : null}
@@ -73,14 +78,9 @@ const Chat = () => {
7378
<section className={"py-3 px-5 border-b-[1px] border-gray1"}>
7479
<div className={"flex justify-between"}>
7580
<div className={"text-h3 font-semibold"}>팔로잉</div>
76-
<button
77-
onClick={() => {
78-
router.push("/mypage/follow");
79-
}}
80-
className={"flex items-center gap-x-1 home-button"}>
81+
<Button onClick={navigateToMypageFollow} className={"border-primaryMid-button"} RightIcon={MoveIcon}>
8182
전체보기
82-
<MoveIcon />
83-
</button>
83+
</Button>
8484
</div>
8585

8686
{/*팔로우*/}

dorm-front/src/app/(main)/chat/search/page.tsx

Lines changed: 19 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { useRecoilState } from "recoil";
77

88
import SearchInput from "@/components/chat/SearchInput";
99
import SearchMenu from "@/components/chat/SearchMenu";
10+
import Button from "@/components/common/Button";
1011
import ProfileModal from "@/components/common/ProfileModal";
1112
import useDebounce from "@/hooks/useDebounce";
1213
import { getSearchChatMessage, getSearchChatRoom } from "@/lib/api/chat";
@@ -79,6 +80,18 @@ const ChatSearch = () => {
7980
return `${period} ${hours}:${formattedMinutes}`;
8081
};
8182

83+
const ChangeTypeFollowing = () => {
84+
setType("팔로잉");
85+
};
86+
87+
const ChangeTypeChatRoom = () => {
88+
setType("채팅방");
89+
};
90+
91+
const ChangeTypeMessage = () => {
92+
setType("메시지");
93+
};
94+
8295
const renderSearchResults = (type: "전체" | "팔로잉" | "채팅방" | "메시지") => {
8396
switch (type) {
8497
case "전체":
@@ -87,16 +100,9 @@ const ChatSearch = () => {
87100
<section>
88101
<div className={"flex justify-between"}>
89102
<div className={"text-h3 font-semibold"}>팔로잉</div>
90-
<button
91-
className={
92-
"flex gap-x-1 text-h5 text-primaryMid rounded-full border border-primaryMid py-1 px-3 items-center"
93-
}
94-
onClick={() => {
95-
setType("팔로잉");
96-
}}>
103+
<Button className={"border-primaryMid-button"} onClick={ChangeTypeFollowing} RightIcon={ArrowIcon}>
97104
더보기
98-
<ArrowIcon />
99-
</button>
105+
</Button>
100106
</div>
101107
<div className={"overflow-x-scroll pt-[12px] flex flex-col gap-y-3"}>
102108
<div className={"flex gap-x-3"}>
@@ -129,16 +135,9 @@ const ChatSearch = () => {
129135
<section>
130136
<div className={"flex justify-between"}>
131137
<div className={"text-h3 font-semibold"}>채팅방</div>
132-
<button
133-
className={
134-
"flex gap-x-1 text-h5 text-primaryMid rounded-full border border-primaryMid py-1 px-3 items-center"
135-
}
136-
onClick={() => {
137-
setType("채팅방");
138-
}}>
138+
<Button className={"border-primaryMid-button"} RightIcon={ArrowIcon} onClick={ChangeTypeChatRoom}>
139139
더보기
140-
<ArrowIcon />
141-
</button>
140+
</Button>
142141
</div>
143142
<div className={"mt-3"}>
144143
{searchChatRoomResults?.map((searchChatRoomResult) => {
@@ -178,16 +177,9 @@ const ChatSearch = () => {
178177
<section>
179178
<div className={"flex justify-between"}>
180179
<div className={"text-h3 font-semibold"}>메시지</div>
181-
<button
182-
className={
183-
"flex gap-x-1 text-h5 text-primaryMid rounded-full border border-primaryMid py-1 px-3 items-center"
184-
}
185-
onClick={() => {
186-
setType("메시지");
187-
}}>
180+
<Button RightIcon={ArrowIcon} className={"border-primaryMid-button"} onClick={ChangeTypeMessage}>
188181
더보기
189-
<ArrowIcon />
190-
</button>
182+
</Button>
191183
</div>
192184
<div className={"mt-3"}>
193185
{searchChatMessageResults.map((searchChatMessageResult) => {
@@ -227,16 +219,6 @@ const ChatSearch = () => {
227219
<section>
228220
<div className={"flex justify-between"}>
229221
<div className={"text-h3 font-semibold"}>팔로잉</div>
230-
<button
231-
className={
232-
"flex gap-x-1 text-h5 text-primaryMid rounded-full border border-primaryMid py-1 px-3 items-center"
233-
}
234-
onClick={() => {
235-
setType("팔로잉");
236-
}}>
237-
더보기
238-
<ArrowIcon />
239-
</button>
240222
</div>
241223
<div className={"overflow-x-scroll pt-[12px] flex flex-col gap-y-3"}>
242224
<div className={"flex gap-x-3"}>
@@ -318,16 +300,6 @@ const ChatSearch = () => {
318300
<section>
319301
<div className={"flex justify-between"}>
320302
<div className={"text-h3 font-semibold"}>메시지</div>
321-
<button
322-
className={
323-
"flex gap-x-1 text-h5 text-primaryMid rounded-full border border-primaryMid py-1 px-3 items-center"
324-
}
325-
onClick={() => {
326-
setType("메시지");
327-
}}>
328-
더보기
329-
<ArrowIcon />
330-
</button>
331303
</div>
332304
<div className={"mt-3"}>
333305
{searchChatMessageResults.map((searchChatMessageResult) => {

0 commit comments

Comments
 (0)