computer-scienceangular-roadmapbackend-roadmapblockchain-roadmapdba-roadmapdeveloper-roadmapdevops-roadmapfrontend-roadmapgo-roadmaphactoberfestjava-roadmapjavascript-roadmapnodejs-roadmappython-roadmapqa-roadmapreact-roadmaproadmapstudy-planvue-roadmapweb3-roadmap
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
139 lines
4.3 KiB
139 lines
4.3 KiB
--- |
|
import Icon from './AstroIcon.astro'; |
|
import LoginPopup from './AuthenticationFlow/LoginPopup.astro'; |
|
import RoadmapHint from './RoadmapHint.astro'; |
|
import RoadmapNote from './RoadmapNote.astro'; |
|
import TopicSearch from './TopicSearch/TopicSearch.astro'; |
|
import YouTubeAlert from './YouTubeAlert.astro'; |
|
|
|
export interface Props { |
|
title: string; |
|
description: string; |
|
note?: string; |
|
tnsBannerLink?: string; |
|
roadmapId: string; |
|
isUpcoming?: boolean; |
|
hasSearch?: boolean; |
|
hasTopics?: boolean; |
|
} |
|
|
|
const { |
|
title, |
|
description, |
|
roadmapId, |
|
tnsBannerLink, |
|
isUpcoming = false, |
|
hasSearch = false, |
|
note, |
|
hasTopics = false, |
|
} = Astro.props; |
|
|
|
const isRoadmapReady = !isUpcoming; |
|
--- |
|
|
|
<LoginPopup /> |
|
|
|
<div class='border-b'> |
|
<div class='container relative py-5 sm:py-12'> |
|
<YouTubeAlert /> |
|
|
|
<div class='mb-3 mt-0 sm:mb-4 sm:mt-4'> |
|
<h1 class='mb-0.5 text-2xl font-bold sm:mb-2 sm:text-4xl'> |
|
{title} |
|
</h1> |
|
<p class='text-sm text-gray-500 sm:text-lg'>{description}</p> |
|
</div> |
|
|
|
<div class='flex justify-between'> |
|
<div class='flex gap-1 sm:gap-2'> |
|
{ |
|
!hasSearch && ( |
|
<> |
|
<a |
|
href='/roadmaps' |
|
class='rounded-md bg-gray-500 px-3 py-1.5 text-xs font-medium text-white hover:bg-gray-600 sm:text-sm' |
|
aria-label='Back to All Roadmaps' |
|
> |
|
←<span class='hidden sm:inline'> All Roadmaps</span> |
|
</a> |
|
|
|
{isRoadmapReady && ( |
|
<> |
|
<button |
|
data-guest-required |
|
data-popup='login-popup' |
|
class='inline-flex hidden items-center justify-center rounded-md bg-yellow-400 px-3 py-1.5 text-xs font-medium hover:bg-yellow-500 sm:text-sm' |
|
aria-label='Download Roadmap' |
|
> |
|
<Icon icon='download' /> |
|
<span class='ml-2 hidden sm:inline'>Download</span> |
|
</button> |
|
|
|
<a |
|
data-auth-required |
|
class='inline-flex hidden items-center justify-center rounded-md bg-yellow-400 px-3 py-1.5 text-xs font-medium hover:bg-yellow-500 sm:text-sm' |
|
aria-label='Download Roadmap' |
|
target='_blank' |
|
href={`/pdfs/roadmaps/${roadmapId}.pdf`} |
|
> |
|
<Icon icon='download' /> |
|
<span class='ml-2 hidden sm:inline'>Download</span> |
|
</a> |
|
</> |
|
)} |
|
|
|
<button |
|
data-guest-required |
|
data-popup='login-popup' |
|
class='inline-flex hidden items-center justify-center rounded-md bg-yellow-400 px-3 py-1.5 text-xs font-medium hover:bg-yellow-500 sm:text-sm' |
|
aria-label='Subscribe for Updates' |
|
> |
|
<Icon icon='email' /> |
|
<span class='ml-2'>Subscribe</span> |
|
</button> |
|
</> |
|
) |
|
} |
|
|
|
{ |
|
hasSearch && ( |
|
<a |
|
href={`/${roadmapId}`} |
|
class='rounded-md bg-gray-500 px-3 py-1.5 text-xs font-medium text-white hover:bg-gray-600 sm:text-sm' |
|
aria-label='Back to Visual Roadmap' |
|
> |
|
← |
|
<span class='inline'> Visual Roadmap</span> |
|
</a> |
|
) |
|
} |
|
</div> |
|
|
|
{ |
|
isRoadmapReady && ( |
|
<a |
|
href={`https://github.com/kamranahmedse/developer-roadmap/issues/new?title=[Suggestion] ${title}`} |
|
target='_blank' |
|
class='inline-flex items-center justify-center rounded-md bg-gray-500 px-3 py-1.5 text-xs font-medium text-white hover:bg-gray-600 sm:text-sm' |
|
aria-label='Suggest Changes' |
|
> |
|
<Icon icon='comment' class='h-3 w-3' /> |
|
<span class='ml-2 hidden sm:inline'>Suggest Changes</span> |
|
<span class='ml-2 inline sm:hidden'>Suggest</span> |
|
</a> |
|
) |
|
} |
|
</div> |
|
|
|
<!-- Desktop: Roadmap Resources - Alert --> |
|
{ |
|
hasTopics && ( |
|
<RoadmapHint roadmapId={roadmapId} tnsBannerLink={tnsBannerLink} /> |
|
) |
|
} |
|
|
|
{hasSearch && <TopicSearch />} |
|
</div> |
|
</div> |
|
|
|
{note && <RoadmapNote text={note} />}
|
|
|