feat: add mark favourite button (#7156)
* feat: add mark favourite button * fix: update favouritepull/7164/head
parent
597efd07ca
commit
77c47e8f03
3 changed files with 81 additions and 8 deletions
@ -0,0 +1,31 @@ |
|||||||
|
import { useIsMounted } from '../../hooks/use-is-mounted'; |
||||||
|
import { MarkFavorite } from '../FeaturedItems/MarkFavorite'; |
||||||
|
import type { GroupType } from './RoadmapsPage'; |
||||||
|
|
||||||
|
type RoadmapCardProps = { |
||||||
|
roadmap: GroupType['roadmaps'][number]; |
||||||
|
}; |
||||||
|
|
||||||
|
export function RoadmapCard(props: RoadmapCardProps) { |
||||||
|
const { roadmap } = props; |
||||||
|
|
||||||
|
const isMounted = useIsMounted(); |
||||||
|
|
||||||
|
return ( |
||||||
|
<a |
||||||
|
key={roadmap.link} |
||||||
|
className="relative rounded-md border bg-white px-3 py-2 text-left text-sm shadow-sm transition-all hover:border-gray-300 hover:bg-gray-50" |
||||||
|
href={roadmap.link} |
||||||
|
> |
||||||
|
{roadmap.title} |
||||||
|
|
||||||
|
{isMounted && ( |
||||||
|
<MarkFavorite |
||||||
|
resourceId={roadmap.link.split('/').pop()!} |
||||||
|
resourceType="roadmap" |
||||||
|
className="data-[is-favorite=true]:opacity-35" |
||||||
|
/> |
||||||
|
)} |
||||||
|
</a> |
||||||
|
); |
||||||
|
} |
@ -0,0 +1,13 @@ |
|||||||
|
import { useEffect, useState } from 'react'; |
||||||
|
|
||||||
|
export function useIsMounted() { |
||||||
|
const [isMounted, setIsMounted] = useState(false); |
||||||
|
useEffect(() => { |
||||||
|
setIsMounted(true); |
||||||
|
|
||||||
|
return () => { |
||||||
|
setIsMounted(false); |
||||||
|
}; |
||||||
|
}, []); |
||||||
|
return isMounted; |
||||||
|
} |
Loading…
Reference in new issue