33import "./Dashboard.css"
44import React , { useEffect , useRef , useState } from "react" ;
55import CreateCircleModal from "./CreateCircleModal" ;
6+ import EditModal from "./EditModal" ;
67import InviteModal from "./InviteModal" ;
78import { useFetchDashboard } from "../hooks/useFetchDashboard" ;
89import { useWebSocketDashboard } from "../hooks/useWebsocketDashboard" ;
@@ -12,7 +13,7 @@ export default function Dashboard2() {
1213 const [ isUserDataFetched , setIsUserDataFetched ] = useState ( false ) ;
1314 const [ selectedCircleID , setSelectedCircleID ] = useState ( "" ) ;
1415 const [ allMessages , setAllMessages ] = useState < { [ key : string ] : Message [ ] } > ( { } ) ;
15-
16+
1617 const [ circles , setCircles ] = useState < Circle [ ] > ( [ ] ) ;
1718 const { userID, username, fetchUserData, handleDelete } = useFetchDashboard ( setCircles ) ;
1819 const { sendMessage } = useWebSocketDashboard ( setCircles , allMessages , setAllMessages ) ;
@@ -58,6 +59,17 @@ export default function Dashboard2() {
5859 }
5960 } ;
6061
62+ // Edit users in circle
63+ const [ openEditModal , setOpenEditModal ] = useState ( false ) ;
64+ function handleOpenEditModal ( ) {
65+ setOpenEditModal ( true ) ;
66+ }
67+ const handleEditClose = ( event : HandleCloseEvent ) => {
68+ if ( event . target . classList . contains ( 'modal-container' ) ) {
69+ setOpenEditModal ( false ) ;
70+ }
71+ } ;
72+
6173 const handleEnter = ( event : React . KeyboardEvent < HTMLInputElement > ) => {
6274 if ( event . key === "Enter" ) {
6375 const content = ( event . target as HTMLInputElement ) . value ;
@@ -232,11 +244,38 @@ export default function Dashboard2() {
232244 < InviteModal isOpen = { openInviteModal } setOpen = { ( ) => setOpenInviteModal ( false ) } circleId = { selectedCircleID } />
233245 </ div >
234246 </ div > }
247+ { openEditModal && < div className = "modal-container" onClick = { handleEditClose } >
248+ < div className = "modal inset-0 bg-black bg-opacity-50 z-50" >
249+ < EditModal isOpen = { openEditModal } setOpen = { ( ) => setOpenEditModal ( false ) } circleId = { selectedCircleID } />
250+ </ div >
251+ </ div > }
235252 </ div >
236253 < div className = "chat-container" >
237254 < div className = "chat-title" >
238255 < h1 > { circles . find ( ( circle ) => circle . id === selectedCircleID ) ?. name } </ h1 >
239256 < div className = "chat-menu" >
257+ < button
258+ className = "button-size group disabled:opacity-50 disabled:cursor-not-allowed"
259+ onClick = { selectedCircleID !== "" ? handleOpenEditModal : undefined }
260+ disabled = { selectedCircleID === "" }
261+ >
262+ < svg
263+ xmlns = "http://www.w3.org/2000/svg"
264+ className = "size-4 opacity-75"
265+ fill = "currentColor"
266+ viewBox = "0 0 24 24"
267+ stroke = "currentColor"
268+ strokeWidth = "1"
269+ >
270+ < path d = "M3.5,24h15A3.51,3.51,0,0,0,22,20.487V12.95a1,1,0,0,0-2,0v7.537A1.508,1.508,0,0,1,18.5,22H3.5A1.508,1.508,0,0,1,2,20.487V5.513A1.508,1.508,0,0,1,3.5,4H11a1,1,0,0,0,0-2H3.5A3.51,3.51,0,0,0,0,5.513V20.487A3.51,3.51,0,0,0,3.5,24Z" > </ path >
271+ < path d = "M9.455,10.544l-.789,3.614a1,1,0,0,0,.271.921,1.038,1.038,0,0,0,.92.269l3.606-.791a1,1,0,0,0,.494-.271l9.114-9.114a3,3,0,0,0,0-4.243,3.07,3.07,0,0,0-4.242,0l-9.1,9.123A1,1,0,0,0,9.455,10.544Zm10.788-8.2a1.022,1.022,0,0,1,1.414,0,1.009,1.009,0,0,1,0,1.413l-.707.707L19.536,3.05Zm-8.9,8.914,6.774-6.791,1.4,1.407-6.777,6.793-1.795.394Z" > </ path >
272+ </ svg >
273+ < span
274+ className = "invisible absolute start-1/2 top-full mt-5 -translate-x-1/2 rounded bg-gray-900 px-1.5 py-1.5 text-xs font-medium text-white group-hover:visible"
275+ >
276+ Edit Users
277+ </ span >
278+ </ button >
240279 < button
241280 className = "button-size group disabled:opacity-50 disabled:cursor-not-allowed"
242281 onClick = { selectedCircleID !== "" ? handleOpenInviteModal : undefined }
@@ -308,8 +347,7 @@ export default function Dashboard2() {
308347 < div className = "analytics-placeholder" >
309348 </ div >
310349 </ div >
311- </ div >
312- }
350+ </ div > }
313351 </ >
314352
315353 )
0 commit comments