|
1 | 1 | import React, { useState, useEffect } from "react"; |
2 | 2 | import { useRouter } from "next/router"; |
3 | | -import SkeletonUser from "@/shared/skeletonUser"; |
| 3 | +import clsx from "clsx"; |
4 | 4 | import Image from "next/image"; |
| 5 | +import SkeletonUser from "@/shared/skeletonUser"; |
5 | 6 | import { MemberType, UserType } from "@/types/users"; |
6 | 7 | import { getMembers } from "@/api/members"; |
7 | 8 | import { getUserInfo } from "@/api/users"; |
8 | 9 | import { getDashboardById } from "@/api/dashboards"; |
9 | 10 | import { TEAM_ID } from "@/constants/team"; |
10 | | -import { MemberAvatars, UserAvatars } from "@/components/gnb/Avatars"; |
| 11 | +import { MemberList, UserAvatars } from "@/components/gnb/Avatars"; |
11 | 12 | import UserMenu from "@/components/gnb/UserMenu"; |
12 | 13 | import MemberListMenu from "@/components/gnb/MemberListMenu"; |
13 | 14 | import InviteDashboard from "@/components/modal/InviteDashboard"; |
14 | 15 | import { ToastContainer, toast } from "react-toastify"; |
15 | 16 | import "react-toastify/dist/ReactToastify.css"; |
16 | 17 |
|
17 | 18 | interface HeaderDashboardProps { |
18 | | - variant?: "mydashboard" | "dashboard" | "mypage"; |
| 19 | + variant?: "mydashboard" | "dashboard" | "edit" | "mypage"; |
19 | 20 | dashboardTitle?: string; |
20 | 21 | dashboardId?: string | string[]; |
21 | 22 | isEditMode?: boolean; |
@@ -64,7 +65,10 @@ const HeaderDashboard: React.FC<HeaderDashboardProps> = ({ |
64 | 65 | setIsLoading(false); |
65 | 66 | } |
66 | 67 | }; |
67 | | - if ((variant === "dashboard" || variant === "mypage") && dashboardId) { |
| 68 | + if ( |
| 69 | + (variant === "dashboard" || variant === "mypage" || variant === "edit") && |
| 70 | + dashboardId |
| 71 | + ) { |
68 | 72 | fetchMembers(); |
69 | 73 | } |
70 | 74 | }, [dashboardId, variant]); |
@@ -111,9 +115,10 @@ const HeaderDashboard: React.FC<HeaderDashboardProps> = ({ |
111 | 115 |
|
112 | 116 | /*헤더 종류에 따라 다른 제목 표시*/ |
113 | 117 | const title = (() => { |
| 118 | + if (variant === "mydashboard") return "내 대시보드"; |
| 119 | + if (variant === "edit") return "대시보드 수정"; |
114 | 120 | if (variant === "mypage") return "계정 관리"; |
115 | 121 | if (variant === "dashboard" && dashboard?.title) return dashboard.title; |
116 | | - return "내 대시보드"; |
117 | 122 | })(); |
118 | 123 |
|
119 | 124 | return ( |
@@ -153,36 +158,43 @@ const HeaderDashboard: React.FC<HeaderDashboardProps> = ({ |
153 | 158 | className={`flex gap-[6px] md:gap-[16px] ${variant === "mydashboard" ? "pr-[22px] md:pr-[32px]" : ""}`} |
154 | 159 | > |
155 | 160 | {/*관리 버튼*/} |
156 | | - <button |
157 | | - onClick={() => { |
158 | | - if (dashboardId) { |
159 | | - if (dashboard && dashboard.createdByMe === true) { |
160 | | - router.push(`/dashboard/${dashboardId}/edit`); |
| 161 | + {variant !== "edit" && ( |
| 162 | + <button |
| 163 | + onClick={() => { |
| 164 | + if (dashboardId) { |
| 165 | + if (dashboard && dashboard.createdByMe === true) { |
| 166 | + router.push(`/dashboard/${dashboardId}/edit`); |
| 167 | + } else { |
| 168 | + toast.error("대시보드 수정 권한이 없습니다."); |
| 169 | + } |
161 | 170 | } else { |
162 | | - toast.error("대시보드 수정 권한이 없습니다."); |
163 | | - } |
164 | | - } else { |
165 | | - if (onToggleEditMode) { |
166 | | - onToggleEditMode(); |
| 171 | + if (onToggleEditMode) { |
| 172 | + onToggleEditMode(); |
| 173 | + } |
167 | 174 | } |
168 | | - } |
169 | | - }} |
170 | | - className="flex items-center justify-center w-[49px] h-[30px] md:w-[85px] md:h-[36px] lg:w-[88px] lg:h-[40px] rounded-[8px] border border-[var(--color-gray3)] gap-[10px] cursor-pointer" |
171 | | - > |
172 | | - <Image |
173 | | - src="/svgs/settings.svg" |
174 | | - alt="관리 아이콘" |
175 | | - width={20} |
176 | | - height={20} |
177 | | - className="hidden md:block" |
178 | | - /> |
179 | | - <span className="text-sm md:text-base text-gray1"> |
180 | | - {isEditMode ? "완료" : "관리"} |
181 | | - </span> |
182 | | - </button> |
| 175 | + }} |
| 176 | + className={clsx( |
| 177 | + "flex items-center justify-center", |
| 178 | + "w-[49px] h-[30px] md:w-[85px] md:h-[36px] lg:w-[88px] lg:h-[40px]", |
| 179 | + "border border-[var(--color-gray3)] rounded-[8px] gap-[10px] cursor-pointer", |
| 180 | + isEditMode ? "hover:border-2" : "" |
| 181 | + )} |
| 182 | + > |
| 183 | + <Image |
| 184 | + src="/svgs/settings.svg" |
| 185 | + alt="관리 아이콘" |
| 186 | + width={20} |
| 187 | + height={20} |
| 188 | + className="hidden md:block" |
| 189 | + /> |
| 190 | + <span className="text-sm md:text-base text-gray1"> |
| 191 | + {isEditMode ? "완료" : "관리"} |
| 192 | + </span> |
| 193 | + </button> |
| 194 | + )} |
183 | 195 |
|
184 | 196 | {/*초대하기 버튼*/} |
185 | | - {variant !== "mydashboard" && ( |
| 197 | + {variant !== "mydashboard" && variant !== "edit" && ( |
186 | 198 | <button |
187 | 199 | onClick={openInviteModal} |
188 | 200 | className="flex items-center justify-center w-[73px] h-[30px] md:w-[109px] md:h-[36px] lg:w-[116px] lg:h-[40px] rounded-[8px] border border-[var(--color-gray3)] gap-[10px] cursor-pointer" |
@@ -213,7 +225,7 @@ const HeaderDashboard: React.FC<HeaderDashboardProps> = ({ |
213 | 225 | onClick={() => setIsListOpen((prev) => !prev)} |
214 | 226 | className="flex items-center pl-[15px] md:pl-[25px] lg:pl-[30px] pr-[15px] md:pr-[25px] lg:pr-[30px] cursor-pointer" |
215 | 227 | > |
216 | | - <MemberAvatars |
| 228 | + <MemberList |
217 | 229 | members={members} |
218 | 230 | isLoading={isLoading} |
219 | 231 | variant={variant} |
|
0 commit comments