From 0abdfe21029e8f2fc4495fdb8382d210584c6cdb Mon Sep 17 00:00:00 2001 From: Rotimi Best Date: Fri, 31 Jul 2026 14:53:01 +0100 Subject: [PATCH] fix(dashboard): align hero enroll CTA with pricing section (#810) The hero Enroll button was disabled unless metadata.allowNewStudent was explicitly true, while the pricing CTA treated unset values as open (matching the enroll page and API). This left the hero button inert on courses where enrollment was allowed but the flag was not set. Also sync pricing CTA disabled state, use activeOrg for paid enroll on public org-site pages, and keep hero/pricing disabled flags aligned via alignHeroCtaWithPricing. Co-authored-by: Cursor Agent Co-authored-by: Rotimi Best --- .../ui/course-landing-page/course-landing-page.svelte | 4 ++-- .../src/lib/features/ui/course-landing-page/utils.ts | 1 + .../custom/org-landing-page/course-landing-page.helpers.ts | 2 +- packages/ui/src/custom/org-landing-page/course-pricing.svelte | 1 + packages/ui/src/custom/org-landing-page/types.ts | 1 + 5 files changed, 6 insertions(+), 3 deletions(-) diff --git a/apps/dashboard/src/lib/features/ui/course-landing-page/course-landing-page.svelte b/apps/dashboard/src/lib/features/ui/course-landing-page/course-landing-page.svelte index 434b1a43..adbaee60 100644 --- a/apps/dashboard/src/lib/features/ui/course-landing-page/course-landing-page.svelte +++ b/apps/dashboard/src/lib/features/ui/course-landing-page/course-landing-page.svelte @@ -49,7 +49,7 @@ return slug ? resolve(`/course/${slug}/enroll`, {}) : '#'; }); - const enrollmentsOpen = $derived(get(courseData, 'metadata.allowNewStudent') === true); + const enrollmentsOpen = $derived(get(courseData, 'metadata.allowNewStudent') !== false); const enrollDisabled = $derived(editMode || !enrollmentsOpen); const discount = $derived(get(courseData, 'metadata.discount', 0)); @@ -60,7 +60,7 @@ function handlePaidEnrollClick(event: MouseEvent) { event.preventDefault(); - if (editMode || !$currentOrg.siteName) { + if (editMode || !activeOrg.siteName) { return; } diff --git a/apps/dashboard/src/lib/features/ui/course-landing-page/utils.ts b/apps/dashboard/src/lib/features/ui/course-landing-page/utils.ts index bb5854a0..de1d758e 100644 --- a/apps/dashboard/src/lib/features/ui/course-landing-page/utils.ts +++ b/apps/dashboard/src/lib/features/ui/course-landing-page/utils.ts @@ -250,6 +250,7 @@ export function buildCourseLandingPageProps( ctaLabel: pricingCtaLabel, ctaHref: paidEnrollClick ? undefined : options.enrollHref, ctaOnclick: paidEnrollClick, + ctaDisabled: options.enrollDisabled, reward: metadata?.reward?.show ? { show: true, description: metadata.reward.description ?? '' } : undefined }, footer: landing.footer diff --git a/packages/ui/src/custom/org-landing-page/course-landing-page.helpers.ts b/packages/ui/src/custom/org-landing-page/course-landing-page.helpers.ts index 966a95b4..3b8fa8d1 100644 --- a/packages/ui/src/custom/org-landing-page/course-landing-page.helpers.ts +++ b/packages/ui/src/custom/org-landing-page/course-landing-page.helpers.ts @@ -10,7 +10,7 @@ export function alignHeroCtaWithPricing( label: pricing.ctaLabel, href: pricing.ctaOnclick ? undefined : (pricing.ctaHref ?? '#pricing'), onclick: pricing.ctaOnclick, - disabled: hero.primaryAction.disabled + disabled: pricing.ctaDisabled ?? hero.primaryAction.disabled } }; } diff --git a/packages/ui/src/custom/org-landing-page/course-pricing.svelte b/packages/ui/src/custom/org-landing-page/course-pricing.svelte index b9e9d700..752adddc 100644 --- a/packages/ui/src/custom/org-landing-page/course-pricing.svelte +++ b/packages/ui/src/custom/org-landing-page/course-pricing.svelte @@ -73,6 +73,7 @@ size="lg" href={pricing.ctaOnclick ? undefined : (pricing.ctaHref ?? '#enroll')} onclick={pricing.ctaOnclick} + disabled={pricing.ctaDisabled ?? false} class={t.pricingCta} > {pricing.ctaLabel} diff --git a/packages/ui/src/custom/org-landing-page/types.ts b/packages/ui/src/custom/org-landing-page/types.ts index bf02a7bd..6afec2c6 100644 --- a/packages/ui/src/custom/org-landing-page/types.ts +++ b/packages/ui/src/custom/org-landing-page/types.ts @@ -229,6 +229,7 @@ export type CoursePricing = { ctaLabel: string; ctaHref?: string; ctaOnclick?: (event: MouseEvent) => void; + ctaDisabled?: boolean; features?: string[]; reward?: { show: boolean;