diff --git a/src/components/customerCases/customerCase/sections/CustomerCaseSection.tsx b/src/components/customerCases/customerCase/sections/CustomerCaseSection.tsx index 9e0b7c84a..8b9be42bd 100644 --- a/src/components/customerCases/customerCase/sections/CustomerCaseSection.tsx +++ b/src/components/customerCases/customerCase/sections/CustomerCaseSection.tsx @@ -1,6 +1,7 @@ import { CustomerCaseSection as CustomerCaseSectionObject } from "studioShared/lib/interfaces/customerCases"; import ImageSection from "./image/ImageSection"; +import ListBlock from "./list/ListBlock"; import QuoteBlock from "./quote/QuoteBlock"; import ResultsBlock from "./results/ResultsBlock"; import RichTextSection from "./richText/RichTextSection"; @@ -22,5 +23,7 @@ export function CustomerCaseSection({ return ; case "resultsBlock": return ; + case "listBlock": + return ; } } diff --git a/src/components/customerCases/customerCase/sections/list/ListBlock.tsx b/src/components/customerCases/customerCase/sections/list/ListBlock.tsx new file mode 100644 index 000000000..cdec16678 --- /dev/null +++ b/src/components/customerCases/customerCase/sections/list/ListBlock.tsx @@ -0,0 +1,31 @@ +import Text from "src/components/text/Text"; +import { ListBlock as ListBlockObject } from "studioShared/lib/interfaces/listBlock"; + +import styles from "./listBlock.module.css"; + +export interface ListBlockProps { + section: ListBlockObject; +} + +export default function ListBlock({ section }: ListBlockProps) { + return ( + section.description && ( +
+
+ {section.description} +
+ {section.list?.map((listItem) => ( + + {listItem.text} + + ))} +
+
+
+ ) + ); +} diff --git a/src/components/customerCases/customerCase/sections/list/listBlock.module.css b/src/components/customerCases/customerCase/sections/list/listBlock.module.css new file mode 100644 index 000000000..4083b12c2 --- /dev/null +++ b/src/components/customerCases/customerCase/sections/list/listBlock.module.css @@ -0,0 +1,34 @@ +.wrapper { + display: flex; + flex-direction: column; + align-items: center; + gap: 1rem; +} + +.listwrapper { + display: flex; + width: 100%; + flex-direction: column; + align-items: flex-start; + gap: 1rem; + max-width: 960px; +} + +.tagwrapper { + display: flex; + align-items: flex-start; + align-content: flex-start; + gap: 0.5rem 0.5rem; + align-self: stretch; + flex-wrap: wrap; +} + +.tag { + display: flex; + height: 2.4375rem; + padding: 0.375rem 0.75rem; + align-items: center; + gap: 0.5rem; + border-radius: 0.25rem; + border: 1px solid #0e0f0f; +} diff --git a/src/components/text/text.module.css b/src/components/text/text.module.css index 81437fdcd..9be875174 100644 --- a/src/components/text/text.module.css +++ b/src/components/text/text.module.css @@ -38,8 +38,14 @@ font-weight: 600; } +.h4 { + font-size: 1.5rem; + font-style: normal; + font-weight: 500; + line-height: 120%; /* 1.8rem */ +} + /* TODO: add font variables */ -/* .h4 */ /* .h5 */ /* .h6 */ diff --git a/studioShared/lib/interfaces/customerCases.ts b/studioShared/lib/interfaces/customerCases.ts index 15300b857..3471b7c44 100644 --- a/studioShared/lib/interfaces/customerCases.ts +++ b/studioShared/lib/interfaces/customerCases.ts @@ -1,6 +1,7 @@ import { IImage } from "studio/lib/interfaces/media"; import { ImageBlock } from "./imageBlock"; +import { ListBlock } from "./listBlock"; import { QuoteBlock } from "./quoteBlock"; import { ResultsBlock } from "./resultsBlock"; import { RichTextBlock } from "./richTextBlock"; @@ -34,7 +35,8 @@ export type BaseCustomerCaseSection = RichTextBlock | ImageBlock | QuoteBlock; export type CustomerCaseSection = | BaseCustomerCaseSection | SplitSection - | ResultsBlock; + | ResultsBlock + | ListBlock; export interface CustomerCase extends CustomerCaseBase { projectInfo: CustomerCaseProjectInfo; diff --git a/studioShared/lib/interfaces/listBlock.ts b/studioShared/lib/interfaces/listBlock.ts new file mode 100644 index 000000000..7ef1c81c6 --- /dev/null +++ b/studioShared/lib/interfaces/listBlock.ts @@ -0,0 +1,11 @@ +interface ListItem { + _key: string; + text: string; +} + +export interface ListBlock { + _key: string; + _type: "listBlock"; + description?: string; + list: ListItem[]; +} diff --git a/studioShared/lib/queries/customerCases.ts b/studioShared/lib/queries/customerCases.ts index 0793b8c7d..fd9347e43 100644 --- a/studioShared/lib/queries/customerCases.ts +++ b/studioShared/lib/queries/customerCases.ts @@ -39,12 +39,6 @@ export const BASE_SECTIONS_FRAGMENT = groq` }, fullWidth }, - _type == "listBlock" => { - "description": ${translatedFieldFragment("description")}, - "list": list[] { - "text": ${translatedFieldFragment("text")}, - }, - }, _type == "quoteBlock" => { "quote": ${translatedFieldFragment("quote")}, "author": ${translatedFieldFragment("author")}, @@ -83,6 +77,13 @@ export const CUSTOMER_CASE_QUERY = groq` "description": ${translatedFieldFragment("description")}, } }, + _type == "listBlock" => { + "description": ${translatedFieldFragment("description")}, + "list": list[] { + _key, + "text": ${translatedFieldFragment("text")}, + }, + }, ${BASE_SECTIONS_FRAGMENT} }, "featuredCases": featuredCases[] -> { diff --git a/studioShared/schemas/documents/customerCase.ts b/studioShared/schemas/documents/customerCase.ts index a566e21e4..2a70d7780 100644 --- a/studioShared/schemas/documents/customerCase.ts +++ b/studioShared/schemas/documents/customerCase.ts @@ -8,6 +8,7 @@ import { titleSlug } from "studio/schemas/schemaTypes/slug"; import { buildDraftId, buildPublishedId } from "studio/utils/documentUtils"; import { firstTranslation } from "studio/utils/i18n"; import { customerCaseProjectInfo } from "studioShared/schemas/fields/customerCaseProjectInfo"; +import listBlock from "studioShared/schemas/objects/listBlock"; import resultsBlock from "studioShared/schemas/objects/resultsBlock"; import { baseCustomerCaseSections } from "studioShared/schemas/objects/sections"; import splitSection from "studioShared/schemas/objects/splitSection"; @@ -18,6 +19,7 @@ export const customerCaseSections = [ ...baseCustomerCaseSections, splitSection, resultsBlock, + listBlock, ]; const customerCase = defineType({ diff --git a/studioShared/schemas/objects/sections.ts b/studioShared/schemas/objects/sections.ts index 3158f7214..603f26f50 100644 --- a/studioShared/schemas/objects/sections.ts +++ b/studioShared/schemas/objects/sections.ts @@ -1,11 +1,5 @@ import imageBlock from "./imageBlock"; -import listBlock from "./listBlock"; import quoteBlock from "./quoteBlock"; import richTextBlock from "./richTextBlock"; -export const baseCustomerCaseSections = [ - richTextBlock, - imageBlock, - listBlock, - quoteBlock, -]; +export const baseCustomerCaseSections = [richTextBlock, imageBlock, quoteBlock];