-
-
Notifications
You must be signed in to change notification settings - Fork 312
Expand file tree
/
Copy pathChannelHeaderMenu.tsx
More file actions
122 lines (108 loc) · 5.06 KB
/
ChannelHeaderMenu.tsx
File metadata and controls
122 lines (108 loc) · 5.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
import { useBoolean } from '@/hooks/useBoolean'
import { DropdownMenu, Flex, IconButton } from '@radix-ui/themes'
import { BiDotsVerticalRounded, BiFile, BiSearch, BiVideoPlus } from 'react-icons/bi'
import { ViewFilesButton } from '../files/ViewFilesButton'
import AddChannelMembersModal from '../channel-member-details/add-members/AddChannelMembersModal'
import { useParams } from 'react-router-dom'
import GlobalSearch from '../GlobalSearch/GlobalSearch'
import { ChannelListItem } from '@/utils/channel/ChannelListProvider'
import { useContext, useMemo } from 'react'
import useFetchChannelMembers from '@/hooks/fetchers/useFetchChannelMembers'
import { UserContext } from '@/utils/auth/UserProvider'
import ViewChannelDetailsModal from '../channels/ViewChannelDetailsModal'
import { SlSettings } from 'react-icons/sl'
import { TbUsersPlus } from 'react-icons/tb'
import CreateMeetingDialog from '../integrations/meetings/CreateMeetingDialog'
type Props = {
channelData: ChannelListItem,
}
const ICON_SIZE = '16'
const ChannelHeaderMenu = ({ channelData }: Props) => {
const { channelID } = useParams()
const { currentUser } = useContext(UserContext)
const { channelMembers } = useFetchChannelMembers(channelData.name)
const [isFileOpen, { on: onFileOpen }, onFileChange] = useBoolean(false)
const [isAddMembersOpen, { on: onAddMembersOpen }, onAddMembersChange] = useBoolean(false)
const [isGlobalSearchModalOpen, { on: onGlobalSearchModalOpen, off: onGlobalSearchModalClose }] = useBoolean(false)
const [isChannelDetailsOpen, { on: onChannelDetailsOpen }, onChannelDetailsChange] = useBoolean(false)
const [isMeetingModalOpen, { on: onMeetingModalOpen }, onMeetingModalChange] = useBoolean(false)
const canAddMembers = useMemo(() => {
if (channelData.type === 'Open') return false
if (channelData.is_archived === 1) return false
if (channelData.is_direct_message === 1) return false
return channelMembers[currentUser] ? true : false
}, [channelData, channelMembers, currentUser])
return (
<><DropdownMenu.Root>
<DropdownMenu.Trigger>
<IconButton color='gray' className='bg-transparent text-gray-12 hover:bg-gray-3'>
<BiDotsVerticalRounded size='18' />
</IconButton>
</DropdownMenu.Trigger>
<DropdownMenu.Content className='min-w-48'>
<DropdownMenu.Item onClick={onMeetingModalOpen}>
<Flex gap='2' align='center'>
<BiVideoPlus size={ICON_SIZE} />
Start a Meeting
</Flex>
</DropdownMenu.Item>
<DropdownMenu.Item onClick={onGlobalSearchModalOpen}>
<Flex gap='2' align='center'>
<BiSearch size={ICON_SIZE} />
Search
</Flex>
</DropdownMenu.Item>
<DropdownMenu.Item onClick={onFileOpen}>
<Flex gap='2' align='center'>
<BiFile size={ICON_SIZE} />
View Files
</Flex>
</DropdownMenu.Item>
{/* <DropdownMenu.Item>
<Flex gap='2' align='center'>
<BiFolder size={ICON_SIZE} />
View Documents
</Flex>
</DropdownMenu.Item> */}
{channelData.is_direct_message === 0 && <>
<DropdownMenu.Separator />
{canAddMembers &&
<DropdownMenu.Item onClick={onAddMembersOpen}>
<Flex gap='2' align='center'>
<TbUsersPlus size={ICON_SIZE} />
Add Members
</Flex>
</DropdownMenu.Item>
}
<DropdownMenu.Item onClick={onChannelDetailsOpen}>
<Flex gap='2' align='center'>
<SlSettings size={ICON_SIZE} />
Channel Settings
</Flex>
</DropdownMenu.Item>
</>
}
</DropdownMenu.Content>
</DropdownMenu.Root>
<ViewFilesButton open={isFileOpen} setOpen={onFileChange} />
<AddChannelMembersModal open={isAddMembersOpen} setOpen={onAddMembersChange} />
<GlobalSearch isOpen={isGlobalSearchModalOpen}
onClose={onGlobalSearchModalClose}
tabIndex={0}
input={''}
inFilter={channelID}
/>
<ViewChannelDetailsModal
open={isChannelDetailsOpen}
setOpen={onChannelDetailsChange}
channelData={channelData}
/>
<CreateMeetingDialog
isOpen={isMeetingModalOpen}
setOpen={onMeetingModalChange}
channelData={channelData}
/>
</>
)
}
export default ChannelHeaderMenu