From 45059998c0a74a0991c63aba1d2fe444a6449612 Mon Sep 17 00:00:00 2001 From: Kamran Ahmed <kamranahmed.se@gmail.com> Date: Tue, 1 Apr 2025 15:05:28 +0100 Subject: [PATCH] Add support for replacing TNS partner banner --- .../CustomRoadmap/RoadmapHeader.tsx | 1 - src/components/CustomRoadmap/RoadmapHint.tsx | 33 +++---------------- src/components/RoadmapHeader.astro | 18 ++++++---- src/components/RoadmapHint.astro | 4 +-- src/data/roadmaps/backend/backend.md | 5 ++- src/data/roadmaps/devops/devops.md | 5 ++- .../engineering-manager.md | 4 +++ src/data/roadmaps/frontend/frontend.md | 5 ++- src/data/roadmaps/kubernetes/kubernetes.md | 5 ++- .../product-manager/product-manager.md | 4 +++ .../software-architect/software-architect.md | 4 +++ src/lib/roadmap.ts | 6 +++- src/pages/[roadmapId]/courses.astro | 2 +- src/pages/[roadmapId]/index.astro | 2 +- src/pages/[roadmapId]/projects.astro | 2 +- 15 files changed, 53 insertions(+), 47 deletions(-) diff --git a/src/components/CustomRoadmap/RoadmapHeader.tsx b/src/components/CustomRoadmap/RoadmapHeader.tsx index 5775d89e3..b45fb9ba2 100644 --- a/src/components/CustomRoadmap/RoadmapHeader.tsx +++ b/src/components/CustomRoadmap/RoadmapHeader.tsx @@ -196,7 +196,6 @@ export function RoadmapHeader(props: RoadmapHeaderProps) { <RoadmapHint roadmapTitle={title!} - hasTNSBanner={false} roadmapId={roadmapId!} /> </div> diff --git a/src/components/CustomRoadmap/RoadmapHint.tsx b/src/components/CustomRoadmap/RoadmapHint.tsx index 183c21537..680c05d09 100644 --- a/src/components/CustomRoadmap/RoadmapHint.tsx +++ b/src/components/CustomRoadmap/RoadmapHint.tsx @@ -4,42 +4,19 @@ import { ResourceProgressStats } from './ResourceProgressStats'; type RoadmapHintProps = { roadmapId: string; roadmapTitle: string; - hasTNSBanner?: boolean; - tnsBannerLink?: string; }; export function RoadmapHint(props: RoadmapHintProps) { - const { - roadmapTitle, - roadmapId, - hasTNSBanner = false, - tnsBannerLink = '', - } = props; + const { roadmapTitle, roadmapId } = props; return ( <div - className={cn('mb-0 mt-4 rounded-md border-0 sm:mt-7 sm:border', { - 'sm:-mb-[82px]': hasTNSBanner, - 'sm:-mb-[65px]': !hasTNSBanner, - })} - > - {hasTNSBanner && ( - <div className="hidden border-b bg-gray-100 px-2 py-1.5 sm:block"> - <p className="text-sm"> - Get the latest {roadmapTitle} news from our sister site{' '} - <a - href={tnsBannerLink} - target="_blank" - className="font-semibold underline" - > - TheNewStack.io - </a> - </p> - </div> + className={cn( + 'mb-0 mt-4 rounded-md border-0 sm:-mb-[65px] sm:mt-7 sm:border', )} - + > <ResourceProgressStats - isSecondaryBanner={hasTNSBanner} + isSecondaryBanner={false} resourceId={roadmapId} resourceType="roadmap" /> diff --git a/src/components/RoadmapHeader.astro b/src/components/RoadmapHeader.astro index 2e6c8124c..e8c6666eb 100644 --- a/src/components/RoadmapHeader.astro +++ b/src/components/RoadmapHeader.astro @@ -18,7 +18,11 @@ export interface Props { title: string; description: string; note?: string; - tnsBannerLink?: string; + partner?: { + description: string; + link: string; + linkText: string; + }; roadmapId: string; isUpcoming?: boolean; hasSearch?: boolean; @@ -26,14 +30,14 @@ export interface Props { question?: RoadmapFrontmatter['question']; hasTopics?: boolean; isForkable?: boolean; - activeTab?: 'roadmap' | 'projects'; + activeTab?: 'roadmap' | 'projects' | 'courses'; } const { title, description, roadmapId, - tnsBannerLink, + partner, isUpcoming = false, note, hasTopics = false, @@ -53,13 +57,13 @@ const roadmapTitle = <div class='container mt-0 flex flex-col gap-2.5 px-0 sm:mt-3 sm:px-4'> { - tnsBannerLink && ( + partner && ( <div class='hidden rounded-md border bg-white px-2 py-1.5 sm:block'> <p class='py-0.5 text-left text-sm'> <span class='badge mr-1'>Partner</span> - Get the latest {roadmapTitle} news from our sister site{' '} - <a href={tnsBannerLink} target='_blank' class='font-medium underline'> - TheNewStack.io + {partner.description} + <a href={partner.link} target='_blank' class='font-medium underline'> + {partner.linkText} </a> </p> </div> diff --git a/src/components/RoadmapHint.astro b/src/components/RoadmapHint.astro index 8b38bb097..ac93723c8 100644 --- a/src/components/RoadmapHint.astro +++ b/src/components/RoadmapHint.astro @@ -5,13 +5,11 @@ import ResourceProgressStats from './ResourceProgressStats.astro'; export interface Props { roadmapId: string; - tnsBannerLink?: string; titleQuestion?: string; titleAnswer?: string; } -const { roadmapId, tnsBannerLink } = Astro.props; -const hasTnsBanner = !!tnsBannerLink; +const { roadmapId } = Astro.props; --- <div class:list={['mb-0 rounded-md border mt-2 bg-white']}> diff --git a/src/data/roadmaps/backend/backend.md b/src/data/roadmaps/backend/backend.md index b8b136818..dbf8b2cb0 100644 --- a/src/data/roadmaps/backend/backend.md +++ b/src/data/roadmaps/backend/backend.md @@ -9,7 +9,10 @@ title: 'Backend Developer' description: 'Step by step guide to becoming a modern backend developer in 2025' hasTopics: true isForkable: false -tnsBannerLink: 'https://thenewstack.io?utm_source=roadmap.sh&utm_medium=Referral&utm_campaign=Alert' +partner: + description: "Get the latest Backend news from our sister site" + link: "https://thenewstack.io/?utm_source=roadmap.sh&utm_medium=Referral&utm_campaign=Alert" + linkText: "TheNewStack.io" question: title: 'What is Backend Development?' description: | diff --git a/src/data/roadmaps/devops/devops.md b/src/data/roadmaps/devops/devops.md index 25aed6d77..55b405fe2 100644 --- a/src/data/roadmaps/devops/devops.md +++ b/src/data/roadmaps/devops/devops.md @@ -9,7 +9,10 @@ title: 'DevOps Roadmap' description: 'Step by step guide for DevOps, SRE or any other Operations Role in 2025' hasTopics: true isForkable: false -tnsBannerLink: 'https://thenewstack.io?utm_source=roadmap.sh&utm_medium=Referral&utm_campaign=Alert' +partner: + description: "Get the latest Frontend news from our sister site" + link: "https://thenewstack.io/?utm_source=roadmap.sh&utm_medium=Referral&utm_campaign=Alert" + linkText: "TheNewStack.io" question: title: 'What is DevOps?' description: | diff --git a/src/data/roadmaps/engineering-manager/engineering-manager.md b/src/data/roadmaps/engineering-manager/engineering-manager.md index beb43ab0b..af769edd4 100644 --- a/src/data/roadmaps/engineering-manager/engineering-manager.md +++ b/src/data/roadmaps/engineering-manager/engineering-manager.md @@ -9,6 +9,10 @@ hasTopics: true isHidden: false isUpcoming: false isNew: true +partner: + description: "Ready-to use free on/offboarding templates for new employees" + link: "https://www.silo.team/book-a-demo-silo-team?utm_source=affiliate1&utm_medium=referral&utm_campaign=free_onboarding_checklist" + linkText: "silo.team" seo: title: Engineering Manager description: Learn what engineering management is, what engineering managers do and how to become one using our community-driven roadmap. diff --git a/src/data/roadmaps/frontend/frontend.md b/src/data/roadmaps/frontend/frontend.md index 35c257d0e..49db89e17 100644 --- a/src/data/roadmaps/frontend/frontend.md +++ b/src/data/roadmaps/frontend/frontend.md @@ -8,7 +8,10 @@ briefDescription: 'Step by step guide to becoming a frontend developer in 2025' title: 'Frontend Developer' description: 'Step by step guide to becoming a modern frontend developer in 2025' hasTopics: true -tnsBannerLink: 'https://thenewstack.io?utm_source=roadmap.sh&utm_medium=Referral&utm_campaign=Alert' +partner: + description: "Get the latest Frontend news from our sister site" + link: "https://thenewstack.io/?utm_source=roadmap.sh&utm_medium=Referral&utm_campaign=Alert" + linkText: "TheNewStack.io" question: title: 'What is a Frontend Developer?' description: | diff --git a/src/data/roadmaps/kubernetes/kubernetes.md b/src/data/roadmaps/kubernetes/kubernetes.md index 127018b03..429e7a20a 100644 --- a/src/data/roadmaps/kubernetes/kubernetes.md +++ b/src/data/roadmaps/kubernetes/kubernetes.md @@ -8,7 +8,10 @@ title: 'Kubernetes Roadmap' description: 'Step by step guide to learning Kubernetes in 2025' isNew: false hasTopics: true -tnsBannerLink: 'https://thenewstack.io/kubernetes?utm_source=roadmap.sh&utm_medium=Referral&utm_campaign=Alert' +partner: + description: "Get the latest Kubernetes news from our sister site" + link: "https://thenewstack.io/?utm_source=roadmap.sh&utm_medium=Referral&utm_campaign=Alert" + linkText: "TheNewStack.io" dimensions: width: 968 height: 1785.73 diff --git a/src/data/roadmaps/product-manager/product-manager.md b/src/data/roadmaps/product-manager/product-manager.md index f580ec887..4d0e40fe2 100644 --- a/src/data/roadmaps/product-manager/product-manager.md +++ b/src/data/roadmaps/product-manager/product-manager.md @@ -9,6 +9,10 @@ hasTopics: true isHidden: false isUpcoming: false isNew: false +partner: + description: "Ready-to use free on/offboarding templates for new employees" + link: "https://www.silo.team/book-a-demo-silo-team?utm_source=affiliate1&utm_medium=referral&utm_campaign=free_onboarding_checklist" + linkText: "silo.team" seo: title: Product Manager description: Learn what product management is, what product managers do and how to become one using our community-driven roadmap. diff --git a/src/data/roadmaps/software-architect/software-architect.md b/src/data/roadmaps/software-architect/software-architect.md index 980eb2e0a..eedd99f8f 100644 --- a/src/data/roadmaps/software-architect/software-architect.md +++ b/src/data/roadmaps/software-architect/software-architect.md @@ -9,6 +9,10 @@ title: 'Software Architect' description: 'Step by step guide to becoming a Software Architect in 2025' isNew: false hasTopics: true +partner: + description: "Ready-to use free on/offboarding templates for new employees" + link: "https://www.silo.team/book-a-demo-silo-team?utm_source=affiliate1&utm_medium=referral&utm_campaign=free_onboarding_checklist" + linkText: "silo.team" dimensions: width: 968 height: 2525 diff --git a/src/lib/roadmap.ts b/src/lib/roadmap.ts index 34b1d66ed..5715a68b1 100644 --- a/src/lib/roadmap.ts +++ b/src/lib/roadmap.ts @@ -28,7 +28,11 @@ export interface RoadmapFrontmatter { isHidden: boolean; isNew: boolean; isUpcoming: boolean; - tnsBannerLink?: string; + partner?: { + description: string; + link: string; + linkText: string; + }; note?: string; question?: { title: string; diff --git a/src/pages/[roadmapId]/courses.astro b/src/pages/[roadmapId]/courses.astro index f344a624d..d5f9778a9 100644 --- a/src/pages/[roadmapId]/courses.astro +++ b/src/pages/[roadmapId]/courses.astro @@ -65,7 +65,7 @@ const seoDescription = `Seeking ${nounTitle.toLowerCase()} courses to enhance yo title={title} description={description} note={roadmapData.note} - tnsBannerLink={roadmapData.tnsBannerLink} + partner={roadmapData.partner} roadmapId={roadmapId} hasTopics={roadmapData.hasTopics} isUpcoming={roadmapData.isUpcoming} diff --git a/src/pages/[roadmapId]/index.astro b/src/pages/[roadmapId]/index.astro index ddc79a19d..346f9fca7 100644 --- a/src/pages/[roadmapId]/index.astro +++ b/src/pages/[roadmapId]/index.astro @@ -107,7 +107,7 @@ const projects = await getProjectsByRoadmapId(roadmapId); title={roadmapData.title} description={roadmapData.description} note={roadmapData.note} - tnsBannerLink={roadmapData.tnsBannerLink} + partner={roadmapData.partner} roadmapId={roadmapId} hasTopics={roadmapData.hasTopics} isUpcoming={roadmapData.isUpcoming} diff --git a/src/pages/[roadmapId]/projects.astro b/src/pages/[roadmapId]/projects.astro index 6f606499a..ca9ec9a68 100644 --- a/src/pages/[roadmapId]/projects.astro +++ b/src/pages/[roadmapId]/projects.astro @@ -75,7 +75,7 @@ const { response: userCounts } = title={title} description={description} note={roadmapData.note} - tnsBannerLink={roadmapData.tnsBannerLink} + partner={roadmapData.partner} roadmapId={roadmapId} hasTopics={roadmapData.hasTopics} isUpcoming={roadmapData.isUpcoming}