@@ -9,18 +9,20 @@ import {
99} from 'react' ;
1010import { getChannelsInServer } from '@/services/channels.service' ;
1111import ServersIcon from '../icons/ServersIcon' ;
12- import { useSupabaseClient } from '@supabase/auth-helpers-react' ;
12+ import { useSupabaseClient , useUser } from '@supabase/auth-helpers-react' ;
1313import styles from '@/styles/Servers.module.css' ;
1414import { Channel , Server as ServerType } from '@/types/dbtypes' ;
1515import { ServerMemberStats } from './ServerMemberStats' ;
1616import { OverflowMarquee } from './OverflowMarquee' ;
17- import { useChannel , useSetChannel } from '@/lib/store' ;
17+ import { useChannel , useServerUserProfilePermissions , useSetChannel } from '@/lib/store' ;
1818import { ChannelMediaIcon } from '../icons/ChannelMediaIcon' ;
19- import { Tooltip } from 'react-tooltip' ;
2019import ChannelName from './ChannelName' ;
2120import ServerSettingsModal from '@/components/home/modals/ServerSettingsModal' ;
22- import { ServerSettingsTooltip } from '@/components/Tooltips/ServerSettingsTooltip' ;
2321import AddChannelModal from '@/components/home/modals/AddChannelModal' ;
22+ import * as DropdownMenu from '@radix-ui/react-dropdown-menu' ;
23+ import { ServerPermissions } from '@/types/permissions' ;
24+ import PlusIcon from '@/components/icons/PlusIcon' ;
25+ import GearIcon from '@/components/icons/GearIcon' ;
2426
2527export default function Server ( {
2628 server,
@@ -43,6 +45,8 @@ export default function Server({
4345 const [ showServerSettingsModal , setShowServerSettingsModal ] = useState ( false ) ;
4446 const [ showAddChannelModal , setShowAddChannelModal ] = useState ( false ) ;
4547
48+ const user = useUser ( ) ;
49+ const serverPermissions = useServerUserProfilePermissions ( server . id , user ?. id ! ) ;
4650 useEffect ( ( ) => {
4751 const handleAsync = async ( ) => {
4852 if ( server ) {
@@ -71,11 +75,6 @@ export default function Server({
7175 setShowModal = { setShowServerSettingsModal }
7276 server = { server }
7377 />
74- < ServerSettingsTooltip
75- server_id = { server . id }
76- setShowAddChannelModal = { setShowAddChannelModal }
77- setShowServerSettingsModal = { setShowServerSettingsModal }
78- />
7978 < AddChannelModal
8079 showModal = { showAddChannelModal }
8180 setShowModal = { setShowAddChannelModal }
@@ -96,15 +95,51 @@ export default function Server({
9695 < ServerMemberStats server = { server } />
9796 </ div >
9897 </ div >
99- < div
100- onMouseEnter = { ( ) => setIsSettingsHovered ( true ) }
101- onMouseLeave = { ( ) => setIsSettingsHovered ( false ) }
102- className = "hover:cursor-pointer"
103- data-tooltip-id = "serverSettings"
104- data-tooltip-place = "right"
105- >
106- < VerticalSettingsIcon hovered = { isSettingsHovered } />
107- </ div >
98+ < DropdownMenu . Root >
99+ < DropdownMenu . Trigger
100+ asChild
101+ disabled = {
102+ ! ( ( serverPermissions & ServerPermissions . MANAGE_MESSAGES ) > 0 ||
103+ ( serverPermissions & ServerPermissions . OWNER ) > 0 ||
104+ ( serverPermissions & ServerPermissions . MANAGE_SERVER ) > 0 )
105+ }
106+ >
107+ < div
108+ onMouseEnter = { ( ) => setIsSettingsHovered ( true ) }
109+ onMouseLeave = { ( ) => setIsSettingsHovered ( false ) }
110+ className = "hover:cursor-pointer"
111+ >
112+ < VerticalSettingsIcon hovered = { isSettingsHovered } />
113+ </ div >
114+ </ DropdownMenu . Trigger >
115+ < DropdownMenu . Portal >
116+ < DropdownMenu . Content className = "ContextMenuContent" side = 'right' >
117+ < DropdownMenu . Item asChild
118+ className = "flex justify-center items-center hover:text-grey-300 cursor-pointer"
119+ onClick = { ( ) => {
120+ setShowAddChannelModal ( true ) ;
121+ } }
122+ >
123+ < div className = "flex flex-row w-full" >
124+ < PlusIcon width = { 5 } height = { 5 } />
125+ < span className = "ml-2 w-full" > New channel</ span >
126+ </ div >
127+ </ DropdownMenu . Item >
128+ < DropdownMenu . Item asChild
129+ className = "flex justify-center items-center hover:text-grey-300 cursor-pointer"
130+ onClick = { ( ) => {
131+ setShowServerSettingsModal ( true ) ;
132+ } }
133+ hidden = { ( serverPermissions & ServerPermissions . MANAGE_SERVER ) === 0 }
134+ >
135+ < div className = "flex flex-row w-full" >
136+ < GearIcon width = { 5 } height = { 5 } />
137+ < span className = "ml-2 w-full" > Server Settings</ span >
138+ </ div >
139+ </ DropdownMenu . Item >
140+ </ DropdownMenu . Content >
141+ </ DropdownMenu . Portal >
142+ </ DropdownMenu . Root >
108143 </ div >
109144 < div className = "channels bg-grey-700 rounded-lg relative -top-3 py-4 px-7 " >
110145 { channels . map ( ( channel : Channel , idx : number ) => (
0 commit comments