11import { RootState } from "@/redux/store/store" ;
2- import { Link , router } from "expo-router" ;
2+ import { Link , router , useNavigation } from "expo-router" ;
33import { useEffect , useState } from "react" ;
44import {
55 ActivityIndicator ,
@@ -32,6 +32,7 @@ import {
3232const roleFilters = [ "All" , "General" , "Dentist" , "Nutritionist" , "Pediatric" ] ;
3333
3434const Home = ( ) => {
35+ const navigation = useNavigation ( ) ;
3536 const dispatch = useDispatch ( ) ;
3637 const [ doctors , setDoctors ] = useState < Doctor [ ] > ( [ ] ) ;
3738 const [ filteredDoctors , setFilteredDoctors ] = useState < Doctor [ ] > ( [ ] ) ;
@@ -40,28 +41,51 @@ const Home = () => {
4041
4142 const { loading, user } = useSelector (
4243 ( state : RootState ) => state . getProfileReducer
43- ) ;
44+ ) ;
4445 const fetchDoctors = async ( ) => {
45- try {
46+ try {
47+ const { data } = await supabase . auth . getUser ( ) ;
48+ const user_id = data . user ?. id ;
49+ console . log ( "Userid: " + user_id ) ;
4650 let { data : doctorsData , error } = await supabase
4751 . from ( "doctor" )
4852 . select ( "*" ) ;
4953
50- if ( error ) {
51- console . error ( "Error fetching data:" , error ) ;
52- } else {
53- setDoctors ( doctorsData || [ ] ) ;
54- setFilteredDoctors ( doctorsData || [ ] ) ;
55- }
54+ const { data : favoriteData , error : favoriteError } = await supabase
55+ . from ( 'favorites' )
56+ . select ( 'doctor_id' )
57+ . eq ( 'user_id' , user_id ) ;
58+
59+ if ( favoriteError ) {
60+ console . error ( 'Error fetching favorites:' , favoriteError ) ;
61+ return [ ] ;
62+ }
63+
64+ // console.log("Favorites:----->", favoriteData);
65+
66+ const favoriteDoctorIds = favoriteData . map ( favorite => favorite . doctor_id ) ;
67+
68+ const doctorsWithLikedStatus = doctorsData ?. map ( doctor => ( {
69+ ...doctor ,
70+ liked : favoriteDoctorIds . includes ( doctor . id )
71+ } ) ) ;
72+ setDoctors ( doctorsWithLikedStatus || [ ] ) ;
73+ setFilteredDoctors ( doctorsWithLikedStatus || [ ] ) ;
5674 } catch ( error ) {
5775 console . error ( "Error:" , error ) ;
5876 }
5977 } ;
6078
6179 useEffect ( ( ) => {
80+ const unsubscribeFocus = navigation . addListener ( 'focus' , ( ) => {
81+ fetchDoctors ( ) ;
82+ } ) ;
6283 fetchDoctors ( ) ;
6384 dispatch ( getProfile ( ) as unknown as UnknownAction ) ;
64- } , [ ] ) ;
85+ return ( ) => {
86+ unsubscribeFocus ( ) ;
87+ } ;
88+ } , [ navigation , roleFilters ] ) ;
6589
6690 const greeting = ( ) => {
6791 const date = new Date ( ) ;
@@ -184,7 +208,14 @@ const Home = () => {
184208 className = "w-[86px] items-center justify-between me-3 mb-6 h-24"
185209 >
186210 < TouchableOpacity
187- activeOpacity = { 0.8 }
211+ activeOpacity = { 0.8 }
212+ onPress = { ( ) => {
213+ router . push ( {
214+ pathname : "/Doctors/topDoctors" ,
215+ params : {
216+ category : item . name
217+ } ,
218+ } ) ; } }
188219 className = "bg-[#246BFD14] p-2.5 items-center justify-center rounded-full mb-3 w-[60px] h-[60px]"
189220 >
190221 < SvgXml
@@ -276,6 +307,7 @@ const Home = () => {
276307 pathname : "/doctor-appointments/" ,
277308 params : {
278309 doctorId : item . id ,
310+ liked : item . liked ?'true' :'false'
279311 } ,
280312 } ) ;
281313 } }
0 commit comments