1- import { useEffect , useMemo , useState } from 'react'
1+ import { useCallback , useEffect , useMemo , useState } from 'react'
22import { useAuth } from '../contexts/AuthContext'
33import {
44 AgencyRole ,
@@ -16,65 +16,65 @@ export const usePermissions = (agencyId?: string) => {
1616 const [ memberships , setMemberships ] = useState < AgencyMembership [ ] > ( [ ] )
1717 const [ loading , setLoading ] = useState ( true )
1818
19- useEffect ( ( ) => {
20- const fetchMemberships = async ( ) => {
21- if ( ! user ) {
19+ const fetchMemberships = useCallback ( async ( ) => {
20+ if ( ! user ) {
21+ setMemberships ( [ ] )
22+ setLoading ( false )
23+ return
24+ }
25+
26+ setLoading ( true )
27+
28+ try {
29+ const { data, error } = await supabase
30+ . from ( 'agency_members' )
31+ . select ( `
32+ agency_id,
33+ role,
34+ joined_at,
35+ agencies!inner (
36+ name
37+ )
38+ ` )
39+ . eq ( 'user_id' , user . id )
40+ . eq ( 'status' , 'active' )
41+ . is ( 'deleted_at' , null )
42+
43+ if ( error ) {
44+ console . error ( 'Error fetching memberships:' , error )
2245 setMemberships ( [ ] )
23- setLoading ( false )
2446 return
2547 }
2648
27- setLoading ( true )
28-
29- try {
30- const { data, error } = await supabase
31- . from ( 'agency_members' )
32- . select ( `
33- agency_id,
34- role,
35- joined_at,
36- agencies!inner (
37- name
38- )
39- ` )
40- . eq ( 'user_id' , user . id )
41- . eq ( 'status' , 'active' )
42- . is ( 'deleted_at' , null )
43-
44- if ( error ) {
45- console . error ( 'Error fetching memberships:' , error )
46- setMemberships ( [ ] )
47- return
48- }
49-
50- const mapped : AgencyMembership [ ] = ( data || [ ] ) . map ( ( row : any ) => ( {
51- agency_id : row . agency_id ,
52- agency_name : Array . isArray ( row . agencies ) ? row . agencies [ 0 ] ?. name || 'Unknown Agency' : row . agencies ?. name || 'Unknown Agency' ,
53- role : row . role as AgencyRole ,
54- joined_at : row . joined_at || profile ?. created_at || new Date ( ) . toISOString ( ) ,
55- } ) )
56-
57- if ( mapped . length === 0 && profile ?. role === 'agency' && profile ?. agency_name ) {
58- setMemberships ( [ {
59- agency_id : user . id ,
60- agency_name : profile . agency_name ,
61- role : 'admin' ,
62- joined_at : profile . created_at ,
63- } ] )
64- return
65- }
66-
67- setMemberships ( mapped )
68- } catch ( err ) {
69- console . error ( 'Unexpected membership lookup error:' , err )
70- setMemberships ( [ ] )
71- } finally {
72- setLoading ( false )
49+ const mapped : AgencyMembership [ ] = ( data || [ ] ) . map ( ( row : any ) => ( {
50+ agency_id : row . agency_id ,
51+ agency_name : Array . isArray ( row . agencies ) ? row . agencies [ 0 ] ?. name || 'Unknown Agency' : row . agencies ?. name || 'Unknown Agency' ,
52+ role : row . role as AgencyRole ,
53+ joined_at : row . joined_at || profile ?. created_at || new Date ( ) . toISOString ( ) ,
54+ } ) )
55+
56+ if ( mapped . length === 0 && profile ?. role === 'agency' && profile ?. agency_name ) {
57+ setMemberships ( [ {
58+ agency_id : user . id ,
59+ agency_name : profile . agency_name ,
60+ role : 'admin' ,
61+ joined_at : profile . created_at ,
62+ } ] )
63+ return
7364 }
65+
66+ setMemberships ( mapped )
67+ } catch ( err ) {
68+ console . error ( 'Unexpected membership lookup error:' , err )
69+ setMemberships ( [ ] )
70+ } finally {
71+ setLoading ( false )
7472 }
73+ } , [ user , profile ] )
7574
75+ useEffect ( ( ) => {
7676 fetchMemberships ( )
77- } , [ user , profile ] )
77+ } , [ fetchMemberships ] )
7878
7979 const currentMembership = useMemo ( ( ) => {
8080 if ( ! profile || ! agencyId ) return null
@@ -112,6 +112,7 @@ export const usePermissions = (agencyId?: string) => {
112112 hasPermission : checkPermission ,
113113 canManageRole : checkCanManageRole ,
114114 getPermissionTooltip : getTooltip ,
115+ refresh : fetchMemberships ,
115116 isLoggedIn : ! ! profile
116117 }
117118}
0 commit comments