* feat: integrate astro * chore: login popup design * chore: data-popup changed * refactor: github and google button * chore: signup page * chore: login popup design * chore: signup page design * chore: auth divider * feat: integrate astro * chore: login popup design * chore: data-popup changed * refactor: github and google button * chore: signup page * chore: login popup design * chore: signup page design * chore: auth divider * chore: login feature * chore: login error message * chore: added name in token decode return * chore: use auth hook * chore: logout vs login * chore: download button link * chore: account dropdown * fix: dropdown z index * chore: profile page * Add missing content for backend roadmap * Remove unused styles * Add login with google * chore: google login implementation * chore: profile guard clause * fix: button size * chore: preact to astro components * chore: preact to astro comp * chore: github astro component * chore: google login error handling * chore: github login error handling * chore: change password page * chore: rename profile to password * fix: change password rename * chore: update profile page * chore: setting sidebar * fix: setting dropdown design * chore: required indicator * chore: change password form * chore: update profile form * chore: mobile navigation * fix: form data empty error * chore: email login and signup components * chore: forgot password page * chore: reset password page * chore: verify account page * chore: resend verification email * fix: types in spinner * chore: forgot password functionality * fix: class -> className * chore: reset password page * chore: reset password functionality * chore: login page * fix: spacing for login and signup page * refactor: email login form * chore: astro spinner * chore: pre-fill user data * chore: dummy placeholder * chore: forgot password link add * fix: replaced constants * chore: forgot password link * chore: change password for social provider * chore: internal pages guard * chore: internal paths * refactor: change password errors * refactor: update profile errors * chore: mark as done overlay * fix: uncontrolled to controlled form * fix: de-structure error * chore: error messages * fix: 401 error code redirect to login page * chore: loading spinner accessibilities * fix: remove spinner * chore: keep spinner after success to redirect * chore: keep the spinner * style: resend email underline * chore: chevron down account * chore: roadmap pdf link download * chore: roadmap pdf link download * chore: best practices buttons * fix: verify account text * fix: topic overlay hide * chore: base verify design * chore: email verify page * fix: div tag missing * Formatting * Refactor top navigation * Prettier * Update dependencies * Refactor top navigation * Refactor login button * Remove captcha and add google scripts * Refactor email sign up form * Resend verfication email functionality * Refactor verification pending page * Add verify account functionality * Update signup text * Add login page * Add login button in top nav * Email login form * Handle authenticatoin * Show hide auth elements change * Add ease-in on the guest elements * Refactor logic for download and subscribe popups * Add forgot password * Rename fetch lib * Add authentication popup * Refactor logic for mark done and pending * Handle logout * Add route protection * Popup opener to close the overlay * Remember page when logging in * Add reset password page * Change placement of constant * Update profile page * Add update password form * Update password page * Update profile page * Update design * chore: toggle mark resource done api * chore: toggle topic done * chore: get user resource progress api * fix: best practice topic toggle * chore: fetch progress * fix: query selector for topics * Keep track of the old page before social login * Update public api url * Add user progress tracking * Update topic done functionality * Add progress loader * Add page wide spinner * Add spinner on setting pages * Add fingerprint to user requests * Use http wrapper instead of fetch * Update fingerprint * Minor improvements --------- Co-authored-by: Arik Chakma <arikchangma@gmail.com>
140 lines
4.3 KiB
Plaintext
140 lines
4.3 KiB
Plaintext
---
|
|
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} />}
|