1- ' use client'
1+ " use client" ;
22
3- import { useState , useEffect } from 'react'
4- import { TeamHierarchyTree } from '@/components/TeamHierarchyTree'
5- import { useAuth } from '@/hooks/useAuth'
6- import { redirect , useSearchParams } from 'next/navigation'
7- import { Card , CardContent , CardDescription , CardHeader , CardTitle } from '@/components/ui/card'
8- import { Tabs , TabsContent , TabsList , TabsTrigger } from '@/components/ui/tabs'
9- import { useOrganisation } from '@/components/organisation-switcher'
10- import { Building2 } from 'lucide-react'
11- import { useOrganisations } from '@/hooks/useOrganisations'
12- import { StakeholderManagement } from '@/components/StakeholderManagement'
3+ import { useState , useEffect } from "react" ;
4+ import { TeamHierarchyTree } from "@/components/TeamHierarchyTree" ;
5+ import { useAuth } from "@/hooks/useAuth" ;
6+ import { redirect , useSearchParams } from "next/navigation" ;
7+ import {
8+ Card ,
9+ CardContent ,
10+ CardDescription ,
11+ CardHeader ,
12+ CardTitle ,
13+ } from "@/components/ui/card" ;
14+ import { Tabs , TabsContent , TabsList , TabsTrigger } from "@/components/ui/tabs" ;
15+ import { useOrganisation } from "@/components/organisation-switcher" ;
16+ import { Building2 } from "lucide-react" ;
17+ import { useOrganisations } from "@/hooks/useOrganisations" ;
18+ import { StakeholderManagement } from "@/components/StakeholderManagement" ;
1319import {
1420 Select ,
1521 SelectContent ,
1622 SelectItem ,
1723 SelectTrigger ,
1824 SelectValue ,
19- } from "@/components/ui/select"
25+ } from "@/components/ui/select" ;
2026
2127export default function AdminPage ( ) {
22- const { user, loading : authLoading , isAdmin } = useAuth ( )
23- const { selectedOrganisation } = useOrganisation ( )
24- const { organisations, loading : orgsLoading , fetchAllOrganisations } = useOrganisations ( )
25- const [ organisationId , setOrganisationId ] = useState < string | null > ( null )
26- const searchParams = useSearchParams ( )
27- const tabParam = searchParams . get ( 'tab' )
28- const [ activeTab , setActiveTab ] = useState < string > ( 'team-hierarchy' )
28+ const { user, loading : authLoading , isAdmin } = useAuth ( ) ;
29+ const { selectedOrganisation } = useOrganisation ( ) ;
30+ const {
31+ organisations,
32+ loading : orgsLoading ,
33+ fetchAllOrganisations,
34+ } = useOrganisations ( ) ;
35+ const [ organisationId , setOrganisationId ] = useState < string | null > ( null ) ;
36+ const searchParams = useSearchParams ( ) ;
37+ const tabParam = searchParams ?. get ( "tab" ) ?? "team-hierarchy" ;
38+ const [ activeTab , setActiveTab ] = useState < string > ( "team-hierarchy" ) ;
2939
3040 useEffect ( ( ) => {
3141 // Fetch all organizations for admin view
3242 if ( isAdmin ) {
33- fetchAllOrganisations ( ) . catch ( error => {
34- console . error ( ' Failed to fetch all organisations:' , error )
35- } )
43+ fetchAllOrganisations ( ) . catch ( ( error ) => {
44+ console . error ( " Failed to fetch all organisations:" , error ) ;
45+ } ) ;
3646 }
37- } , [ isAdmin , fetchAllOrganisations ] )
47+ } , [ isAdmin , fetchAllOrganisations ] ) ;
3848
3949 useEffect ( ( ) => {
4050 if ( selectedOrganisation ) {
41- setOrganisationId ( selectedOrganisation . id )
51+ setOrganisationId ( selectedOrganisation . id ) ;
4252 }
43- } , [ selectedOrganisation ] )
53+ } , [ selectedOrganisation ] ) ;
4454
4555 // Set the active tab based on the URL parameter
4656 useEffect ( ( ) => {
4757 if ( tabParam ) {
48- setActiveTab ( tabParam )
58+ setActiveTab ( tabParam ) ;
4959 }
50- } , [ tabParam ] )
60+ } , [ tabParam ] ) ;
5161
5262 if ( authLoading || orgsLoading ) {
53- return < div className = "flex items-center justify-center min-h-screen" > Loading...</ div >
63+ return (
64+ < div className = "flex items-center justify-center min-h-screen" >
65+ Loading...
66+ </ div >
67+ ) ;
5468 }
5569
5670 // If user is not logged in, redirect to login page
5771 if ( ! user ) {
58- redirect ( ' /login' )
59- return null
72+ redirect ( " /login" ) ;
73+ return null ;
6074 }
6175
6276 // If user is not an admin, redirect to organization page
6377 if ( ! isAdmin ) {
64- redirect ( ' /organisation' )
65- return null
78+ redirect ( " /organisation" ) ;
79+ return null ;
6680 }
6781
6882 return (
@@ -71,14 +85,17 @@ export default function AdminPage() {
7185 < h1 className = "text-3xl font-bold" > Admin Dashboard</ h1 >
7286 < div className = "flex items-center gap-4" >
7387 < Select
74- value = { organisationId || '' }
88+ value = { organisationId || "" }
7589 onValueChange = { ( value ) => setOrganisationId ( value ) }
7690 >
7791 < SelectTrigger className = "w-[250px]" >
7892 < SelectValue placeholder = "Select organisation" >
7993 < div className = "flex items-center gap-2" >
8094 < Building2 className = "h-4 w-4" />
81- < span > { organisations ?. find ( org => org . id === organisationId ) ?. name || "Select organisation" } </ span >
95+ < span >
96+ { organisations ?. find ( ( org ) => org . id === organisationId )
97+ ?. name || "Select organisation" }
98+ </ span >
8299 </ div >
83100 </ SelectValue >
84101 </ SelectTrigger >
@@ -95,15 +112,20 @@ export default function AdminPage() {
95112 </ Select >
96113 </ div >
97114 </ div >
98-
115+
99116 { ! organisationId ? (
100117 < Card >
101118 < CardContent className = "flex items-center justify-center min-h-[200px] text-muted-foreground" >
102119 Please select an organization to view and manage its settings
103120 </ CardContent >
104121 </ Card >
105122 ) : (
106- < Tabs defaultValue = { activeTab } value = { activeTab } onValueChange = { setActiveTab } className = "w-full" >
123+ < Tabs
124+ defaultValue = { activeTab }
125+ value = { activeTab }
126+ onValueChange = { setActiveTab }
127+ className = "w-full"
128+ >
107129 < TabsList className = "mb-4" >
108130 < TabsTrigger value = "team-hierarchy" > Teams</ TabsTrigger >
109131 < TabsTrigger value = "stakeholders" > Stakeholders</ TabsTrigger >
@@ -169,5 +191,5 @@ export default function AdminPage() {
169191 </ Tabs >
170192 ) }
171193 </ div >
172- )
173- }
194+ ) ;
195+ }
0 commit comments