* fix(dashboard): show course cards in landing page settings preview Fetch public courses for the org and pass them to the theme preview on the landing page settings screen, matching the editor preview. Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com> * refactor(dashboard): skip redundant public course fetches Add loadPublicCoursesIfNeeded so settings, editor, and live landing page reuse cached courses for the same org site instead of clearing and refetching on every mount. Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com> * fix(dashboard): always refetch courses on live org landing page Keep loadPublicCoursesIfNeeded for settings preview and editor only. The public-facing landing page should fetch fresh on each visit. Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com> * feat(ui): add shared empty state for org landing page catalogs Introduce OrgLandingPageCoursesEmpty using the dashboard Empty pattern with landing-theme colors. Show it across all ten org landing templates when no courses are published, and wire translated labels through buildOrgLandingPageProps. Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com> * fix(dashboard): address Greptile review on public courses cache - Add coursesLoaded prop so empty catalog state waits for fetch - Deduplicate concurrent public course requests via in-flight promise - Refresh courses on settings mount; reuse cache in editor only - Expose invalidatePublicCourses for explicit cache clearing Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com> * fix(dashboard): load landing preview courses when org store hydrates Replace onMount course fetch with a reactive effect keyed on the route slug and currentOrg.siteName so public courses load after app init. Mark the fetch as complete in finally so failed requests show the empty state instead of a permanently blank catalog section. Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com> ---------
99 lines
3.4 KiB
TypeScript
99 lines
3.4 KiB
TypeScript
export {
|
|
org as MinimalLandingPage,
|
|
course as MinimalCourseLanding,
|
|
nav as MinimalLandingNav,
|
|
hero as MinimalLandingHero,
|
|
courseCard as MinimalLandingCourseCard
|
|
} from './minimal';
|
|
export {
|
|
org as BoldLandingPage,
|
|
course as BoldCourseLanding,
|
|
nav as BoldLandingNav,
|
|
hero as BoldLandingHero,
|
|
courseCard as BoldLandingCourseCard
|
|
} from './bold';
|
|
export {
|
|
org as ClassicLandingPage,
|
|
course as ClassicCourseLanding,
|
|
nav as ClassicLandingNav,
|
|
hero as ClassicLandingHero,
|
|
courseCard as ClassicLandingCourseCard
|
|
} from './classic';
|
|
export {
|
|
org as SaasLandingPage,
|
|
course as SaasCourseLanding,
|
|
nav as SaasLandingNav,
|
|
hero as SaasLandingHero,
|
|
courseCard as SaasLandingCourseCard
|
|
} from './saas';
|
|
export {
|
|
org as TechLandingPage,
|
|
course as TechCourseLanding,
|
|
nav as TechLandingNav,
|
|
hero as TechLandingHero,
|
|
courseCard as TechLandingCourseCard
|
|
} from './tech';
|
|
export {
|
|
org as StudioLandingPage,
|
|
course as StudioCourseLanding,
|
|
nav as StudioLandingNav,
|
|
hero as StudioLandingHero,
|
|
courseCard as StudioLandingCourseCard
|
|
} from './studio';
|
|
export {
|
|
org as CorporateLandingPage,
|
|
course as CorporateCourseLanding,
|
|
nav as CorporateLandingNav,
|
|
hero as CorporateLandingHero,
|
|
courseCard as CorporateLandingCourseCard
|
|
} from './corporate';
|
|
export {
|
|
org as TerminalLandingPage,
|
|
course as TerminalCourseLanding,
|
|
nav as TerminalLandingNav,
|
|
hero as TerminalLandingHero,
|
|
courseCard as TerminalLandingCourseCard
|
|
} from './terminal';
|
|
export {
|
|
org as EditorialLandingPage,
|
|
course as EditorialCourseLanding,
|
|
nav as EditorialLandingNav,
|
|
hero as EditorialLandingHero,
|
|
courseCard as EditorialLandingCourseCard
|
|
} from './editorial';
|
|
export {
|
|
org as VibrantLandingPage,
|
|
course as VibrantCourseLanding,
|
|
nav as VibrantLandingNav,
|
|
hero as VibrantLandingHero,
|
|
courseCard as VibrantLandingCourseCard
|
|
} from './vibrant';
|
|
|
|
export { default as OrgLandingPageCoursesEmpty } from './courses-empty.svelte';
|
|
export { default as LandingButton } from './landing-button.svelte';
|
|
export { default as OrgLandingPageEmbed } from './embed.svelte';
|
|
export { default as OrgLandingPageCallout } from './callout.svelte';
|
|
export { default as OrgLandingPageLinks } from './links.svelte';
|
|
export { default as OrgLandingPageFooter } from './landing-page-footer.svelte';
|
|
export { default as SecondaryActionButton } from './secondary-action-button.svelte';
|
|
export { default as EditableLandingSection } from './editable-section.svelte';
|
|
export { default as CourseLandingSocialProof } from './course-social-proof.svelte';
|
|
export { default as CourseLandingInfoBlocks } from './course-info-blocks.svelte';
|
|
export { default as CourseLandingCurriculum } from './course-curriculum.svelte';
|
|
export { default as CourseLandingSectionNav } from './course-section-nav.svelte';
|
|
export { default as CourseLandingChips } from './course-chips.svelte';
|
|
export { default as CourseLandingInstructor } from './course-instructor.svelte';
|
|
export { default as CourseLandingReviews } from './course-reviews.svelte';
|
|
export { default as CourseLandingPricing } from './course-pricing.svelte';
|
|
export {
|
|
setLandingPageEditContext,
|
|
getLandingPageEditContext,
|
|
type LandingSectionKey,
|
|
type LandingPageEditContext
|
|
} from './edit-context';
|
|
export { courseLandingTokens, type CourseLandingTokens } from './course-landing-page.tokens';
|
|
export * from './landing-page-link-icons';
|
|
export * from './theme-style';
|
|
export * from './types';
|
|
export { mockOrgLandingPageProps, mockCourseLandingPageProps } from './fixtures';
|