1- import  {  useMemo  }  from  "react" ; 
1+ import  {  useCallback ,  useMemo  }  from  "react" ; 
2+ import  {  HiOutlineExternalLink  }  from  "react-icons/hi" ; 
3+ import  {  IoArrowBack  }  from  "react-icons/io5" ; 
4+ import  {  MdOutlineRefresh  }  from  "react-icons/md" ; 
25import  {  Link ,  useParams  }  from  "react-router" ; 
36import  {  ProblemSet ,  useGetProblemSetsQuery  }  from  "./api/queries/get_problem_sets" ; 
47import  {  useGetUserQuery  }  from  "./api/queries/get_user" ; 
@@ -18,6 +21,8 @@ function Dashboard() {
1821  const  { 
1922    data : userProgress , 
2023    isLoading : isUserProgressLoading , 
24+     isRefetchError : isUserProgressRefetching , 
25+     refetch : refetchUserProgress , 
2126  }  =  useGetUserProgressQuery ( user ?. id ) ; 
2227
2328  const  parsedUserProgress  =  useMemo ( ( )  =>  { 
@@ -66,17 +71,29 @@ function Dashboard() {
6671    return  sortedGroups 
6772  } ,  [ problemSets ,  isProblemSetsLoading ,  parsedUserProgress ] ) 
6873
74+   const  refreshUserProgress  =  useCallback ( async  ( )  =>  { 
75+     await  refetchUserProgress ( ) 
76+   } ,  [ refetchUserProgress ] ) 
77+ 
6978  return  ( 
7079    < div  className = "lg:w-[40%] my-16 mx-auto md:w-[60%] w-[80%]" > 
7180      < h3  className = "text-2xl font-bold mb-4" > Git Mastery Progress Dashboard</ h3 > 
7281      < div  className = "mb-6" > 
73-         < Link  to = "/"  className = "text-gray-500 italic mb-2" > ← Back to search</ Link > 
74-         < h1  className = "text-4xl font-bold mb-4" > @{ username } </ h1 > 
82+         < Link  to = "/"  className = "text-gray-500 italic mb-2 flex flex-row gap-2 items-center" > < IoArrowBack  className = "inline-block"  />  Back to search</ Link > 
83+         < div  className = "flex flex-row justify-between items-center mb-4" > 
84+           < div  className = "flex flex-row gap-2 items-center" > 
85+             < h1  className = "text-4xl font-bold" > @{ username } </ h1 > 
86+             < a  target = "_blank"  className = "hover:cursor-pointer text-gray-500"  href = { `https://github.com/${ username }  ` } > 
87+               < HiOutlineExternalLink  size = { 24 }  /> 
88+             </ a > 
89+           </ div > 
90+           < button  type = "button"  className = "hover:cursor-pointer"  onClick = { refreshUserProgress } > < MdOutlineRefresh  size = { 24 }  color = "text-gray-500"  /> </ button > 
91+         </ div > 
7592        < p  className = "text-gray-700 font-semibold" > Find your progress for the various Git Mastery problem sets.</ p > 
7693        < p  className = "text-gray-700" > To view all problem sets, visit the < a  className = "text-blue-800 underline"  href = "https://github.com/git-mastery/problems-directory" > problems directory</ a > .</ p > 
7794      </ div > 
7895      < div > 
79-         { ( isUserLoading  ||  isUserProgressLoading  ||  isProblemSetsLoading )  ? ( 
96+         { ( isUserLoading  ||  isUserProgressLoading  ||  isUserProgressRefetching   ||   isProblemSetsLoading )  ? ( 
8097          < div  className = "flex justify-center" > 
8198            < Spinner  /> 
8299          </ div > 
0 commit comments