diff --git a/src/components/custom-page/CTA.tsx b/src/components/custom-page/CTA.tsx deleted file mode 100644 index 2b5d45fb..00000000 --- a/src/components/custom-page/CTA.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { type CtaComponentFragment } from '@src/generated/graphqlDirectus' - -export function CTA({ spacing }: CtaComponentFragment) { - return
CTA
-} diff --git a/src/components/custom-page/CallToAction.tsx b/src/components/custom-page/CallToAction.tsx new file mode 100644 index 00000000..a3f64c8f --- /dev/null +++ b/src/components/custom-page/CallToAction.tsx @@ -0,0 +1,38 @@ +import { Button } from '@pluralsh/design-system' +import Link from 'next/link' + +import { type CtaComponentFragment } from '@src/generated/graphqlDirectus' + +import { cn } from '../cn' +import { Body1, Hero2 } from '../Typography' + +import { getSpacingClassName } from './common' + +export function CallToAction({ + spacing, + heading, + body_text: bodyText, + cta_text: ctaText, + cta_url: ctaUrl, +}: CtaComponentFragment) { + return ( +
+ {heading} + {bodyText} + +
+ ) +} diff --git a/src/components/custom-page/SectionHeader.tsx b/src/components/custom-page/SectionHeader.tsx index b26f32d5..0f0ace2b 100644 --- a/src/components/custom-page/SectionHeader.tsx +++ b/src/components/custom-page/SectionHeader.tsx @@ -15,7 +15,7 @@ export function SectionHeader({
{overline && {overline}} diff --git a/src/components/custom-page/common.tsx b/src/components/custom-page/common.tsx index ab393513..8085ef81 100644 --- a/src/components/custom-page/common.tsx +++ b/src/components/custom-page/common.tsx @@ -1,8 +1,8 @@ import { type CustomPageFragment } from '@src/generated/graphqlDirectus' import { BlogCards } from './BlogCards' +import { CallToAction } from './CallToAction' import { Cards } from './Cards' -import { CTA } from './CTA' import { CustomerQuote } from './CustomerQuote' import { Hero } from './Hero' import { LargeImage } from './LargeImage' @@ -42,7 +42,7 @@ export function renderComponent( case 'customer_quote': return case 'cta': - return + return default: return null } diff --git a/src/generated/graphqlDirectus.ts b/src/generated/graphqlDirectus.ts index db658c9e..e28e1a6f 100644 --- a/src/generated/graphqlDirectus.ts +++ b/src/generated/graphqlDirectus.ts @@ -5369,8 +5369,12 @@ export type Create_Company_Logos_Input = { }; export type Create_Cta_Input = { + body_text?: InputMaybe; + cta_text?: InputMaybe; + cta_url?: InputMaybe; date_created?: InputMaybe; date_updated?: InputMaybe; + heading?: InputMaybe; id?: InputMaybe; spacing?: InputMaybe; user_created?: InputMaybe; @@ -5852,10 +5856,14 @@ export type Create_Team_Members_Input = { export type Cta = { __typename?: 'cta'; + body_text?: Maybe; + cta_text?: Maybe; + cta_url?: Maybe; date_created?: Maybe; date_created_func?: Maybe; date_updated?: Maybe; date_updated_func?: Maybe; + heading?: Maybe; id: Scalars['ID']['output']; spacing?: Maybe; user_created?: Maybe; @@ -5898,8 +5906,12 @@ export type Cta_Aggregated = { export type Cta_Aggregated_Count = { __typename?: 'cta_aggregated_count'; + body_text?: Maybe; + cta_text?: Maybe; + cta_url?: Maybe; date_created?: Maybe; date_updated?: Maybe; + heading?: Maybe; id?: Maybe; spacing?: Maybe; user_created?: Maybe; @@ -5914,10 +5926,14 @@ export type Cta_Aggregated_Fields = { export type Cta_Filter = { _and?: InputMaybe>>; _or?: InputMaybe>>; + body_text?: InputMaybe; + cta_text?: InputMaybe; + cta_url?: InputMaybe; date_created?: InputMaybe; date_created_func?: InputMaybe; date_updated?: InputMaybe; date_updated_func?: InputMaybe; + heading?: InputMaybe; id?: InputMaybe; spacing?: InputMaybe; user_created?: InputMaybe; @@ -9385,8 +9401,12 @@ export type Update_Company_Logos_Input = { }; export type Update_Cta_Input = { + body_text?: InputMaybe; + cta_text?: InputMaybe; + cta_url?: InputMaybe; date_created?: InputMaybe; date_updated?: InputMaybe; + heading?: InputMaybe; id?: InputMaybe; spacing?: InputMaybe; user_created?: InputMaybe; @@ -9968,7 +9988,7 @@ export type SolutionsQueryVariables = Exact<{ export type SolutionsQuery = { __typename?: 'Query', solutions_pages: Array<{ __typename?: 'solutions_pages', id: string, slug: string, title?: string | null, description?: string | null, upper_features_title?: string | null, lower_features_title?: string | null, download_section_title?: string | null, download_section_description?: string | null, upper_features?: Array<{ __typename?: 'solution_features', id: string, title?: string | null, description?: string | null, icon?: string | null, link_title?: string | null, link_url?: string | null } | null> | null, lower_features?: Array<{ __typename?: 'solution_features', id: string, title?: string | null, description?: string | null, icon?: string | null, link_title?: string | null, link_url?: string | null } | null> | null, problems?: Array<{ __typename?: 'solution_problems', id: string, title?: string | null, subtitle?: string | null, problem?: string | null, solution?: string | null } | null> | null, featured_quote?: { __typename?: 'quotes', id: string, quote?: string | null, author_text?: string | null } | null }> }; -export type CustomPageFragment = { __typename?: 'custom_pages', id: string, slug: string, components?: Array<{ __typename?: 'custom_pages_components', collection?: string | null, item?: { __typename?: 'blog_cards', spacing?: string | null } | { __typename?: 'cards', spacing?: string | null } | { __typename?: 'cta', spacing?: string | null } | { __typename?: 'customer_quote', spacing?: string | null } | { __typename?: 'hero', spacing?: string | null, heading?: string | null, body_text?: string | null, media_type?: string | null, video_url?: string | null, form?: string | null, cta_text?: string | null, cta_url?: string | null, image?: { __typename?: 'directus_files', id: string, title?: string | null, description?: string | null, tags?: any | null, filename_disk?: string | null, filename_download: string, metadata?: any | null, type?: string | null, filesize?: any | null } | null } | { __typename?: 'large_image', spacing?: string | null, overline?: string | null, heading?: string | null, body_text?: string | null, media_type?: string | null, video_url?: string | null, form?: string | null, cta_text?: string | null, cta_url?: string | null, image?: { __typename?: 'directus_files', id: string, title?: string | null, description?: string | null, tags?: any | null, filename_disk?: string | null, filename_download: string, metadata?: any | null, type?: string | null, filesize?: any | null } | null } | { __typename?: 'logo_strip', spacing?: string | null, logo_list?: { __typename?: 'company_logo_lists', slug?: string | null, logos?: Array<{ __typename?: 'company_logo_lists_company_logos', company_logos_id?: { __typename?: 'company_logos', slug?: string | null, name: string, url?: string | null, logo_light?: { __typename?: 'directus_files', id: string, title?: string | null, description?: string | null, tags?: any | null, filename_disk?: string | null, filename_download: string, metadata?: any | null, type?: string | null, filesize?: any | null } | null, logo_dark?: { __typename?: 'directus_files', id: string, title?: string | null, description?: string | null, tags?: any | null, filename_disk?: string | null, filename_download: string, metadata?: any | null, type?: string | null, filesize?: any | null } | null } | null } | null> | null } | null } | { __typename?: 'rich_text_columns', spacing?: string | null } | { __typename?: 'section_header', spacing?: string | null, overline?: string | null, title?: string | null, description?: string | null } | null } | null> | null }; +export type CustomPageFragment = { __typename?: 'custom_pages', id: string, slug: string, components?: Array<{ __typename?: 'custom_pages_components', collection?: string | null, item?: { __typename?: 'blog_cards', spacing?: string | null } | { __typename?: 'cards', spacing?: string | null } | { __typename?: 'cta', spacing?: string | null, heading?: string | null, body_text?: string | null, cta_text?: string | null, cta_url?: string | null } | { __typename?: 'customer_quote', spacing?: string | null } | { __typename?: 'hero', spacing?: string | null, heading?: string | null, body_text?: string | null, media_type?: string | null, video_url?: string | null, form?: string | null, cta_text?: string | null, cta_url?: string | null, image?: { __typename?: 'directus_files', id: string, title?: string | null, description?: string | null, tags?: any | null, filename_disk?: string | null, filename_download: string, metadata?: any | null, type?: string | null, filesize?: any | null } | null } | { __typename?: 'large_image', spacing?: string | null, overline?: string | null, heading?: string | null, body_text?: string | null, media_type?: string | null, video_url?: string | null, form?: string | null, cta_text?: string | null, cta_url?: string | null, image?: { __typename?: 'directus_files', id: string, title?: string | null, description?: string | null, tags?: any | null, filename_disk?: string | null, filename_download: string, metadata?: any | null, type?: string | null, filesize?: any | null } | null } | { __typename?: 'logo_strip', spacing?: string | null, logo_list?: { __typename?: 'company_logo_lists', slug?: string | null, logos?: Array<{ __typename?: 'company_logo_lists_company_logos', company_logos_id?: { __typename?: 'company_logos', slug?: string | null, name: string, url?: string | null, logo_light?: { __typename?: 'directus_files', id: string, title?: string | null, description?: string | null, tags?: any | null, filename_disk?: string | null, filename_download: string, metadata?: any | null, type?: string | null, filesize?: any | null } | null, logo_dark?: { __typename?: 'directus_files', id: string, title?: string | null, description?: string | null, tags?: any | null, filename_disk?: string | null, filename_download: string, metadata?: any | null, type?: string | null, filesize?: any | null } | null } | null } | null> | null } | null } | { __typename?: 'rich_text_columns', spacing?: string | null } | { __typename?: 'section_header', spacing?: string | null, overline?: string | null, title?: string | null, description?: string | null } | null } | null> | null }; export type CustomPageTinyFragment = { __typename?: 'custom_pages', id: string, slug: string }; @@ -9982,7 +10002,7 @@ export type CustomPageQueryVariables = Exact<{ }>; -export type CustomPageQuery = { __typename?: 'Query', custom_pages: Array<{ __typename?: 'custom_pages', id: string, slug: string, components?: Array<{ __typename?: 'custom_pages_components', collection?: string | null, item?: { __typename?: 'blog_cards', spacing?: string | null } | { __typename?: 'cards', spacing?: string | null } | { __typename?: 'cta', spacing?: string | null } | { __typename?: 'customer_quote', spacing?: string | null } | { __typename?: 'hero', spacing?: string | null, heading?: string | null, body_text?: string | null, media_type?: string | null, video_url?: string | null, form?: string | null, cta_text?: string | null, cta_url?: string | null, image?: { __typename?: 'directus_files', id: string, title?: string | null, description?: string | null, tags?: any | null, filename_disk?: string | null, filename_download: string, metadata?: any | null, type?: string | null, filesize?: any | null } | null } | { __typename?: 'large_image', spacing?: string | null, overline?: string | null, heading?: string | null, body_text?: string | null, media_type?: string | null, video_url?: string | null, form?: string | null, cta_text?: string | null, cta_url?: string | null, image?: { __typename?: 'directus_files', id: string, title?: string | null, description?: string | null, tags?: any | null, filename_disk?: string | null, filename_download: string, metadata?: any | null, type?: string | null, filesize?: any | null } | null } | { __typename?: 'logo_strip', spacing?: string | null, logo_list?: { __typename?: 'company_logo_lists', slug?: string | null, logos?: Array<{ __typename?: 'company_logo_lists_company_logos', company_logos_id?: { __typename?: 'company_logos', slug?: string | null, name: string, url?: string | null, logo_light?: { __typename?: 'directus_files', id: string, title?: string | null, description?: string | null, tags?: any | null, filename_disk?: string | null, filename_download: string, metadata?: any | null, type?: string | null, filesize?: any | null } | null, logo_dark?: { __typename?: 'directus_files', id: string, title?: string | null, description?: string | null, tags?: any | null, filename_disk?: string | null, filename_download: string, metadata?: any | null, type?: string | null, filesize?: any | null } | null } | null } | null> | null } | null } | { __typename?: 'rich_text_columns', spacing?: string | null } | { __typename?: 'section_header', spacing?: string | null, overline?: string | null, title?: string | null, description?: string | null } | null } | null> | null }> }; +export type CustomPageQuery = { __typename?: 'Query', custom_pages: Array<{ __typename?: 'custom_pages', id: string, slug: string, components?: Array<{ __typename?: 'custom_pages_components', collection?: string | null, item?: { __typename?: 'blog_cards', spacing?: string | null } | { __typename?: 'cards', spacing?: string | null } | { __typename?: 'cta', spacing?: string | null, heading?: string | null, body_text?: string | null, cta_text?: string | null, cta_url?: string | null } | { __typename?: 'customer_quote', spacing?: string | null } | { __typename?: 'hero', spacing?: string | null, heading?: string | null, body_text?: string | null, media_type?: string | null, video_url?: string | null, form?: string | null, cta_text?: string | null, cta_url?: string | null, image?: { __typename?: 'directus_files', id: string, title?: string | null, description?: string | null, tags?: any | null, filename_disk?: string | null, filename_download: string, metadata?: any | null, type?: string | null, filesize?: any | null } | null } | { __typename?: 'large_image', spacing?: string | null, overline?: string | null, heading?: string | null, body_text?: string | null, media_type?: string | null, video_url?: string | null, form?: string | null, cta_text?: string | null, cta_url?: string | null, image?: { __typename?: 'directus_files', id: string, title?: string | null, description?: string | null, tags?: any | null, filename_disk?: string | null, filename_download: string, metadata?: any | null, type?: string | null, filesize?: any | null } | null } | { __typename?: 'logo_strip', spacing?: string | null, logo_list?: { __typename?: 'company_logo_lists', slug?: string | null, logos?: Array<{ __typename?: 'company_logo_lists_company_logos', company_logos_id?: { __typename?: 'company_logos', slug?: string | null, name: string, url?: string | null, logo_light?: { __typename?: 'directus_files', id: string, title?: string | null, description?: string | null, tags?: any | null, filename_disk?: string | null, filename_download: string, metadata?: any | null, type?: string | null, filesize?: any | null } | null, logo_dark?: { __typename?: 'directus_files', id: string, title?: string | null, description?: string | null, tags?: any | null, filename_disk?: string | null, filename_download: string, metadata?: any | null, type?: string | null, filesize?: any | null } | null } | null } | null> | null } | null } | { __typename?: 'rich_text_columns', spacing?: string | null } | { __typename?: 'section_header', spacing?: string | null, overline?: string | null, title?: string | null, description?: string | null } | null } | null> | null }> }; export type HeroComponentFragment = { __typename?: 'hero', spacing?: string | null, heading?: string | null, body_text?: string | null, media_type?: string | null, video_url?: string | null, form?: string | null, cta_text?: string | null, cta_url?: string | null, image?: { __typename?: 'directus_files', id: string, title?: string | null, description?: string | null, tags?: any | null, filename_disk?: string | null, filename_download: string, metadata?: any | null, type?: string | null, filesize?: any | null } | null }; @@ -10000,7 +10020,7 @@ export type RichTextColumnsComponentFragment = { __typename?: 'rich_text_columns export type CustomerQuoteComponentFragment = { __typename?: 'customer_quote', spacing?: string | null }; -export type CtaComponentFragment = { __typename?: 'cta', spacing?: string | null }; +export type CtaComponentFragment = { __typename?: 'cta', spacing?: string | null, heading?: string | null, body_text?: string | null, cta_text?: string | null, cta_url?: string | null }; export type MinJobListingFragment = { __typename?: 'job_listings', id: string, slug: string, job_title?: string | null, department?: string | null, tags?: any | null, location?: string | null, status?: string | null }; @@ -10390,6 +10410,10 @@ export const CustomerQuoteComponentFragmentDoc = gql` export const CtaComponentFragmentDoc = gql` fragment CTAComponent on cta { spacing + heading + body_text + cta_text + cta_url } `; export const CustomPageFragmentDoc = gql` diff --git a/src/graph/directus/customPages.graphql b/src/graph/directus/customPages.graphql index dfa69a74..7b019cde 100644 --- a/src/graph/directus/customPages.graphql +++ b/src/graph/directus/customPages.graphql @@ -95,4 +95,8 @@ fragment CustomerQuoteComponent on customer_quote { fragment CTAComponent on cta { spacing + heading + body_text + cta_text + cta_url }