@@ -25,13 +25,15 @@ import {
2525} from '@/components/ui/alert-dialog'
2626
2727export default function CompanyEventsPage ( ) {
28- const { currentCompany, loading : companyLoading } = useCompanyContext ( )
28+ const { currentCompany, userRole , loading : companyLoading } = useCompanyContext ( )
2929 const isPendingInvitation = usePendingInvitationRedirect ( )
3030 const [ events , setEvents ] = useState < Event [ ] > ( [ ] )
3131 const [ loading , setLoading ] = useState ( true )
3232 const [ searchTerm , setSearchTerm ] = useState ( '' )
3333 const [ deletingEventSlug , setDeletingEventSlug ] = useState < string | null > ( null )
3434
35+ const canManageEvents = userRole && [ 'owner' , 'admin' , 'editor' ] . includes ( userRole )
36+
3537 const fetchEvents = useCallback ( async ( ) => {
3638 if ( ! currentCompany ) return
3739
@@ -170,15 +172,17 @@ export default function CompanyEventsPage() {
170172 < div >
171173 < h1 className = "text-3xl font-bold tracking-tight" > Events</ h1 >
172174 < p className = "text-muted-foreground mt-1" >
173- Manage your company' s events and hackathons
175+ { canManageEvents ? " Manage your company' s events and hackathons" : "View your company's events" }
174176 </ p >
175177 </ div >
176- < Link href = "/dashboard/company/events/create" >
177- < Button >
178- < Plus className = "h-4 w-4 mr-2" />
179- Create Event
180- </ Button >
181- </ Link >
178+ { canManageEvents && (
179+ < Link href = { `/dashboard/company/${ currentCompany ?. slug } /events/create` } >
180+ < Button >
181+ < Plus className = "h-4 w-4 mr-2" />
182+ Create Event
183+ </ Button >
184+ </ Link >
185+ ) }
182186 </ div >
183187
184188 { /* Stats Cards */ }
@@ -239,7 +243,7 @@ export default function CompanyEventsPage() {
239243 < CardHeader >
240244 < CardTitle > All Events ({ filteredEvents . length } )</ CardTitle >
241245 < CardDescription >
242- View and manage all your events
246+ { canManageEvents ? ' View and manage all your events' : 'View all company events' }
243247 </ CardDescription >
244248 </ CardHeader >
245249 < CardContent >
@@ -254,10 +258,10 @@ export default function CompanyEventsPage() {
254258 No events found
255259 </ h3 >
256260 < p className = "text-gray-500 dark:text-gray-400 mb-4" >
257- { searchTerm ? 'Try adjusting your search' : 'Get started by creating your first event' }
261+ { searchTerm ? 'Try adjusting your search' : canManageEvents ? 'Get started by creating your first event' : 'No events available yet '}
258262 </ p >
259- { ! searchTerm && (
260- < Link href = " /dashboard/company/events/create" >
263+ { ! searchTerm && canManageEvents && (
264+ < Link href = { ` /dashboard/company/${ currentCompany ?. slug } / events/create` } >
261265 < Button >
262266 < Plus className = "h-4 w-4 mr-2" />
263267 Create Event
@@ -276,7 +280,7 @@ export default function CompanyEventsPage() {
276280 < TableHead > Approval</ TableHead >
277281 < TableHead > Views</ TableHead >
278282 < TableHead > Registered</ TableHead >
279- < TableHead > Actions</ TableHead >
283+ { canManageEvents && < TableHead > Actions</ TableHead > }
280284 </ TableRow >
281285 </ TableHeader >
282286 < TableBody >
@@ -308,59 +312,71 @@ export default function CompanyEventsPage() {
308312 </ div >
309313 </ TableCell >
310314 < TableCell > { event . registered || 0 } </ TableCell >
311- < TableCell >
312- < div className = "flex items-center gap-2" >
313- < Link href = { `/dashboard/company/${ currentCompany . slug } /events/${ event . slug } /edit` } >
314- < Button variant = "outline" size = "sm" >
315- < Edit className = "h-4 w-4" />
316- </ Button >
317- </ Link >
318- { event . approval_status === 'approved' && (
315+ { canManageEvents ? (
316+ < TableCell >
317+ < div className = "flex items-center gap-2" >
318+ < Link href = { `/dashboard/company/${ currentCompany . slug } /events/${ event . slug } /edit` } >
319+ < Button variant = "outline" size = "sm" >
320+ < Edit className = "h-4 w-4" />
321+ </ Button >
322+ </ Link >
323+ { event . approval_status === 'approved' && (
324+ < Link href = { `/events/${ event . slug } ` } target = "_blank" >
325+ < Button variant = "outline" size = "sm" >
326+ < Eye className = "h-4 w-4" />
327+ </ Button >
328+ </ Link >
329+ ) }
330+ < AlertDialog >
331+ < AlertDialogTrigger asChild >
332+ < Button
333+ variant = "outline"
334+ size = "sm"
335+ disabled = { deletingEventSlug === event . slug }
336+ >
337+ { deletingEventSlug === event . slug ? (
338+ < div className = "h-4 w-4 animate-spin rounded-full border-2 border-gray-300 border-t-gray-600" />
339+ ) : (
340+ < Trash2 className = "h-4 w-4 text-red-600" />
341+ ) }
342+ </ Button >
343+ </ AlertDialogTrigger >
344+ < AlertDialogContent >
345+ < AlertDialogHeader >
346+ < AlertDialogTitle > Delete Event</ AlertDialogTitle >
347+ < AlertDialogDescription >
348+ Are you sure you want to delete "{ event . title } "? This action cannot be undone.
349+ { event . registered && event . registered > 0 && (
350+ < span className = "block mt-2 text-red-600 font-medium" >
351+ Warning: This event has { event . registered } registered participant{ event . registered > 1 ? 's' : '' } .
352+ </ span >
353+ ) }
354+ </ AlertDialogDescription >
355+ </ AlertDialogHeader >
356+ < AlertDialogFooter >
357+ < AlertDialogCancel > Cancel</ AlertDialogCancel >
358+ < AlertDialogAction
359+ onClick = { ( ) => handleDeleteEvent ( event . slug ) }
360+ className = "bg-red-600 hover:bg-red-700"
361+ >
362+ Delete
363+ </ AlertDialogAction >
364+ </ AlertDialogFooter >
365+ </ AlertDialogContent >
366+ </ AlertDialog >
367+ </ div >
368+ </ TableCell >
369+ ) : (
370+ event . approval_status === 'approved' && (
371+ < TableCell >
319372 < Link href = { `/events/${ event . slug } ` } target = "_blank" >
320373 < Button variant = "outline" size = "sm" >
321374 < Eye className = "h-4 w-4" />
322375 </ Button >
323376 </ Link >
324- ) }
325- < AlertDialog >
326- < AlertDialogTrigger asChild >
327- < Button
328- variant = "outline"
329- size = "sm"
330- disabled = { deletingEventSlug === event . slug }
331- >
332- { deletingEventSlug === event . slug ? (
333- < div className = "h-4 w-4 animate-spin rounded-full border-2 border-gray-300 border-t-gray-600" />
334- ) : (
335- < Trash2 className = "h-4 w-4 text-red-600" />
336- ) }
337- </ Button >
338- </ AlertDialogTrigger >
339- < AlertDialogContent >
340- < AlertDialogHeader >
341- < AlertDialogTitle > Delete Event</ AlertDialogTitle >
342- < AlertDialogDescription >
343- Are you sure you want to delete "{ event . title } "? This action cannot be undone.
344- { event . registered && event . registered > 0 && (
345- < span className = "block mt-2 text-red-600 font-medium" >
346- Warning: This event has { event . registered } registered participant{ event . registered > 1 ? 's' : '' } .
347- </ span >
348- ) }
349- </ AlertDialogDescription >
350- </ AlertDialogHeader >
351- < AlertDialogFooter >
352- < AlertDialogCancel > Cancel</ AlertDialogCancel >
353- < AlertDialogAction
354- onClick = { ( ) => handleDeleteEvent ( event . slug ) }
355- className = "bg-red-600 hover:bg-red-700"
356- >
357- Delete
358- </ AlertDialogAction >
359- </ AlertDialogFooter >
360- </ AlertDialogContent >
361- </ AlertDialog >
362- </ div >
363- </ TableCell >
377+ </ TableCell >
378+ )
379+ ) }
364380 </ TableRow >
365381 ) ) }
366382 </ TableBody >
0 commit comments