From 484767ae603dc4ad0ebcc06e2de5ecbdb62e19a9 Mon Sep 17 00:00:00 2001 From: Pipicz Petra Date: Wed, 8 Apr 2026 13:58:55 +0200 Subject: [PATCH 1/2] feat: Refactoring of contentCardData and the files that contain it --- .../content-card/content-card.component.html | 98 ++++++------------- .../content-card/content-card.component.ts | 2 +- .../demo/src/app/model/contentCardData.ts | 75 +++++++------- .../component-details.component.ts | 45 ++++----- .../pages/components/components.component.ts | 32 ++++-- .../src/app/pages/index/index.component.ts | 50 +++++----- .../issue-report/issue-report.component.ts | 50 +++++----- .../pages/list-page/list-page.component.ts | 38 ++++--- 8 files changed, 190 insertions(+), 200 deletions(-) diff --git a/projects/demo/src/app/components/content-card/content-card.component.html b/projects/demo/src/app/components/content-card/content-card.component.html index 419b48eb..501ab6e0 100644 --- a/projects/demo/src/app/components/content-card/content-card.component.html +++ b/projects/demo/src/app/components/content-card/content-card.component.html @@ -1,34 +1,34 @@ @let data = contentCardData(); - @if (data.imageURL) { -
- @if (data.state) { - + @if (data.image?.imageUrl) { +
+ @if (data.image?.state) { + }
} - - {{ data.date }} + + {{ data.date }} + + @for (tag of data.tags; track $index) { + + {{ tag.title }} - @for (tag of data.tags; track $index) { - - {{ tag.title }} - - } + }
} @@ -61,57 +61,19 @@

{{ data. @if (data.description) {
} - - @if (data.orientation === "vertical") { + @for (button of data.button; track $index) {
-
} - - @if (data.buttonOne || data.buttonTwo) { -
- @if (data.buttonOne) { - - } - - @if (data.buttonTwo) { - - } -
- } diff --git a/projects/demo/src/app/components/content-card/content-card.component.ts b/projects/demo/src/app/components/content-card/content-card.component.ts index 4bb0754d..f0fe0fd6 100644 --- a/projects/demo/src/app/components/content-card/content-card.component.ts +++ b/projects/demo/src/app/components/content-card/content-card.component.ts @@ -44,7 +44,7 @@ export class ContentCardComponent { } public imageData = computed(() => ({ - transparent: this.contentCardData().imageBGTransparent === true, + transparent: this.contentCardData().image?.bgTransparent === true, })); } diff --git a/projects/demo/src/app/model/contentCardData.ts b/projects/demo/src/app/model/contentCardData.ts index 9235b9f9..75ad08e3 100644 --- a/projects/demo/src/app/model/contentCardData.ts +++ b/projects/demo/src/app/model/contentCardData.ts @@ -1,43 +1,36 @@ -export interface ContentCardData { - variant?: 'surface' | 'light' | 'dark'; - id?: number; - orientation: 'horizontal' | 'vertical'; - aspectRatio?: '1/1' | '16/9' | '16/10'; - image?: { - lightUrl?: string; - darkUrl?: string; - caption?: string; - bgColorVariant?: 'surface' | 'primary' | 'light'; - bgTransparent?: boolean; - filledInContainer?: boolean; - state?: 'no_state' | 'do' | 'dont'; +export type ContentCardData = Partial<{ + id: number; + card: { + variant: 'surface' | 'light' | 'dark'; + orientation: 'horizontal' | 'vertical'; + appearance: 'filled' | 'elevated'; + transparent: boolean; + } + isImage: boolean; + image: { + imageUrl: string; + aspectRatio: '1/1' | '16/9' | '16/10'; + lightUrl: string; + darkUrl: string; + caption: string; + bgColorVariant: 'surface' | 'primary' | 'light'; + bgTransparent: boolean; + filledInContainer: boolean; + state: 'no_state' | 'do' | 'dont'; }; - isImage?: boolean; - isButton?: boolean; - imageURL?: string; - imageUrlLight?: string; - imageUrlDark?: string; - imageBgColorVariant?: 'surface' | 'primary' | 'light'; - imageCaption?: string; - overTitle?: string; - title?: string; - description?: string; - caption?: string; - buttonOne?: string; - buttonOneUrl?: string; - buttonTwo?: string; - buttonTwoUrl?: string; - state?: 'no_state' | 'do' | 'dont'; - transparent?: boolean; - heading?: string; - content_heading?: string; - imageBGTransparent?: boolean - appearance?: 'filled' | 'elevated'; - filledInContainer?: boolean; - last_modified?: string; - date?: string; - tags?: Array<{ - id?: number; - title?: string; + isButton: boolean; + button: Array<{ + text: string; + url: string; }>; -} + title: string; + overTitle: string; + description: string; + content_heading: string; + last_modified: string; + date: string; + tags: Array<{ + id: number; + title: string; + }>; +}>; diff --git a/projects/demo/src/app/pages/components/component-details/component-details.component.ts b/projects/demo/src/app/pages/components/component-details/component-details.component.ts index 2f3b1906..c319bc27 100644 --- a/projects/demo/src/app/pages/components/component-details/component-details.component.ts +++ b/projects/demo/src/app/pages/components/component-details/component-details.component.ts @@ -129,31 +129,32 @@ export class ComponentDetailsComponent implements OnInit { blocks.push({ type: 'card', id: Number(block.id), - orientation: block.card_properties?.card_orientation?.value ?? 'vertical', - variant: block.card_properties?.card_variant?.value ?? 'surface', - appearance: block.card_properties?.appearance?.value ?? 'filled', - transparent: block.card_properties?.card_bg_transparent ?? false, - filledInContainer: block.group_image?.filled_in_container ?? false, - state: block.group_image?.state?.value, - imageURL: block.group_image?.img_light_mode?.[0]?.url - ? `${environment.cmsBaseUrl}${block.group_image.img_light_mode[0].url}` - : '', - imageUrlLight: block.group_image?.img_light_mode?.[0]?.url - ? `${environment.cmsBaseUrl}${block.group_image.img_light_mode[0].url}` - : '', - imageUrlDark: block.group_image?.img_dark_mode?.[0]?.url - ? `${environment.cmsBaseUrl}${block.group_image.img_dark_mode[0].url}` - : '', - imageCaption: block.group_image?.img_caption, - imageBgColorVariant: block.group_image?.img_bg_color?.value ?? 'surface', - imageBGTransparent: block.group_image?.bg_transparent ?? false, + card: { + orientation: block.card_properties?.card_orientation?.value ?? 'vertical', + variant: block.card_properties?.card_variant?.value ?? 'surface', + appearance: block.card_properties?.appearance?.value ?? 'filled', + transparent: block.card_properties?.card_bg_transparent ?? false, + }, + image: { + state: block.group_image?.state?.value ?? 'no_state', + aspectRatio: block.group_image?.img_aspect_ratio?.value ?? '16/9', + imageUrl: block.group_image?.img_light_mode?.[0]?.url ? + `${environment.cmsBaseUrl}${block.group_image.img_light_mode[0].url}` : '', + lightUrl: block.group_image?.img_light_mode?.[0]?.url ? + `${environment.cmsBaseUrl}${block.group_image.img_light_mode[0].url}` : '', + darkUrl: block.group_image?.img_dark_mode?.[0]?.url ? `${environment.cmsBaseUrl}${block.group_image.img_dark_mode[0].url}` : '', + caption: block.group_image?.img_caption ?? '', + bgColorVariant: block.group_image?.img_bg_color?.value ?? 'surface', + bgTransparent: block.group_image?.bg_transparent ?? false, + filledInContainer: block.group_image?.filled_in_container ?? false, + }, overTitle: block.content?.content_over_title, title: block.content?.content_title, description: block.content?.content_description, - buttonOne: Array.isArray(block.button?.button) ? block.button?.button[0]?.button_label : undefined, - buttonOneUrl: Array.isArray(block.button?.button) ? block.button?.button[0]?.button_url : block.button?.button?.button_url, - buttonTwo: Array.isArray(block.button?.button) ? block.button?.button[1]?.button_label : undefined, - buttonTwoUrl: Array.isArray(block.button?.button) ? block.button?.button[1]?.button_url : block.button?.button?.button_url, + button: Array.isArray(block.button?.button) ? block.button?.button.map((btn) => ({ + text: btn.button_label, + url: btn.button_url, + })) : [], }); this.componentBlocks = blocks; } diff --git a/projects/demo/src/app/pages/components/components.component.ts b/projects/demo/src/app/pages/components/components.component.ts index c79c0a02..c421d574 100644 --- a/projects/demo/src/app/pages/components/components.component.ts +++ b/projects/demo/src/app/pages/components/components.component.ts @@ -134,15 +134,29 @@ export class ComponentsComponent implements OnInit { id: item.id, title: item.title, description: item.description, - orientation: 'vertical', - aspectRatio: '16/9', - appearance: 'elevated', - variant: 'light', - imageCaption: item.title, - imageURL: item.imageUrl, - imageUrlLight: item.imageUrl, - imageUrlDark: item.comp_img_dark_mode?.[0]?.url ? environment.cmsBaseUrl + item.comp_img_dark_mode[0].url : item.imageUrl, - buttonOneUrl: item.imageLink, //contains the link to the component page + card: { + orientation: 'vertical', + appearance: 'elevated', + variant: 'light', + transparent: false, + }, + image: { + aspectRatio: '16/9', + imageUrl: item.imageUrl, + lightUrl: item.imageUrl, + darkUrl: item.comp_img_dark_mode?.[0]?.url ? `${environment.cmsBaseUrl}${item.comp_img_dark_mode[0].url}` : item.imageUrl, + caption: item.title, + bgColorVariant: 'surface', + bgTransparent: false, + filledInContainer: false, + state: 'no_state', + }, + button: [ + { + text: 'Learn More', + url: item.imageLink ?? '', + }, + ], }; } } diff --git a/projects/demo/src/app/pages/index/index.component.ts b/projects/demo/src/app/pages/index/index.component.ts index aaa17d49..76b23612 100644 --- a/projects/demo/src/app/pages/index/index.component.ts +++ b/projects/demo/src/app/pages/index/index.component.ts @@ -80,32 +80,36 @@ export class IndexComponent implements OnInit, OnDestroy { blocks.push({ type: 'card', id: Number(block.id), - orientation: block.card_properties?.card_orientation?.value ?? 'vertical', - variant: block.card_properties?.card_variant?.value ?? 'surface', - appearance: block.card_properties?.appearance?.value ?? 'filled', - transparent: block.card_properties?.card_bg_transparent ?? false, - filledInContainer: block.group_image?.filled_in_container ?? false, - state: block.group_image?.state?.value, - imageURL: block.group_image?.img_light_mode?.[0]?.url - ? `${environment.cmsBaseUrl}${block.group_image.img_light_mode[0].url}` - : '', - imageUrlLight: block.group_image?.img_light_mode?.[0]?.url - ? `${environment.cmsBaseUrl}${block.group_image.img_light_mode[0].url}` - : '', - imageUrlDark: block.group_image?.img_dark_mode?.[0]?.url - ? `${environment.cmsBaseUrl}${block.group_image.img_dark_mode[0].url}` - : '', - imageCaption: block.group_image?.img_caption, - imageBgColorVariant: block.group_image?.img_bg_color?.value ?? 'surface', - imageBGTransparent: block.group_image?.bg_transparent ?? false, - aspectRatio: block.group_image?.img_aspect_ratio?.value ?? '16/9', + card: { + orientation: block.card_properties?.card_orientation?.value ?? 'vertical', + variant: block.card_properties?.card_variant?.value ?? 'surface', + appearance: block.card_properties?.appearance?.value ?? 'filled', + transparent: block.card_properties?.card_bg_transparent ?? false, + }, + image: { + aspectRatio: block.group_image?.img_aspect_ratio?.value ?? '16/9', + imageUrl: block.group_image?.img_light_mode?.[0]?.url ? + `${environment.cmsBaseUrl}${block.group_image.img_light_mode[0].url}` : '', + lightUrl: block.group_image?.img_light_mode?.[0]?.url + ? `${environment.cmsBaseUrl}${block.group_image.img_light_mode[0].url}` + : '', + darkUrl: block.group_image?.img_dark_mode?.[0]?.url + ? `${environment.cmsBaseUrl}${block.group_image.img_dark_mode[0].url}` + : '', + caption: block.group_image?.img_caption ?? '', + bgColorVariant: block.group_image?.img_bg_color?.value ?? 'surface', + bgTransparent: block.group_image?.bg_transparent ?? false, + filledInContainer: block.group_image?.filled_in_container ?? false, + state: block.group_image?.state?.value ?? 'no_state', + }, overTitle: block.content?.content_over_title, title: block.content?.content_title, description: block.content?.content_description, - buttonOne: Array.isArray(block.button?.button) ? block.button?.button[0]?.button_label : undefined, - buttonOneUrl: Array.isArray(block.button?.button) ? block.button?.button[0]?.button_url : block.button?.button?.button_url, - buttonTwo: Array.isArray(block.button?.button) ? block.button?.button[1]?.button_label : undefined, - buttonTwoUrl: Array.isArray(block.button?.button) ? block.button?.button[1]?.button_url : block.button?.button?.button_url, + button: Array.isArray(block.button?.button) ? block.button?.button.map((btn) => ({ + text: btn.button_label, + url: btn.button_url, + })) : [], + }); } } diff --git a/projects/demo/src/app/pages/issue-report/issue-report.component.ts b/projects/demo/src/app/pages/issue-report/issue-report.component.ts index fc779d9e..aa100607 100644 --- a/projects/demo/src/app/pages/issue-report/issue-report.component.ts +++ b/projects/demo/src/app/pages/issue-report/issue-report.component.ts @@ -84,32 +84,36 @@ export class IssueReportComponent implements OnInit, OnDestroy { blocks.push({ type: 'card', id: Number(block.id), - orientation: block.card_properties?.card_orientation?.value ?? 'vertical', - variant: block.card_properties?.card_variant?.value ?? 'surface', - appearance: block.card_properties?.appearance?.value ?? 'filled', - transparent: block.card_properties?.card_bg_transparent ?? false, - filledInContainer: block.group_image?.filled_in_container ?? false, - state: block.group_image?.state?.value, - imageURL: block.group_image?.img_light_mode?.[0]?.url - ? `${environment.cmsBaseUrl}${block.group_image.img_light_mode[0].url}` - : '', - imageUrlLight: block.group_image?.img_light_mode?.[0]?.url - ? `${environment.cmsBaseUrl}${block.group_image.img_light_mode[0].url}` - : '', - imageUrlDark: block.group_image?.img_dark_mode?.[0]?.url - ? `${environment.cmsBaseUrl}${block.group_image.img_dark_mode[0].url}` - : '', - imageCaption: block.group_image?.img_caption, - imageBgColorVariant: block.group_image?.img_bg_color?.value ?? 'surface', - imageBGTransparent: block.group_image?.bg_transparent ?? false, - aspectRatio: block.group_image?.img_aspect_ratio?.value ?? '16/9', + card: { + orientation: block.card_properties?.card_orientation?.value ?? 'vertical', + variant: block.card_properties?.card_variant?.value ?? 'surface', + appearance: block.card_properties?.appearance?.value ?? 'filled', + transparent: block.card_properties?.card_bg_transparent ?? false, + }, + image: { + imageUrl: block.group_image?.img_light_mode?.[0]?.url + ? `${environment.cmsBaseUrl}${block.group_image.img_light_mode[0].url}` + : '', + lightUrl: block.group_image?.img_light_mode?.[0]?.url + ? `${environment.cmsBaseUrl}${block.group_image.img_light_mode[0].url}` + : '', + darkUrl: block.group_image?.img_dark_mode?.[0]?.url + ? `${environment.cmsBaseUrl}${block.group_image.img_dark_mode[0].url}` + : '', + caption: block.content?.content_title, + bgColorVariant: block.group_image?.img_bg_color?.value ?? 'surface', + bgTransparent: block.group_image?.bg_transparent ?? false, + filledInContainer: block.group_image?.filled_in_container ?? false, + aspectRatio: block.group_image?.img_aspect_ratio?.value ?? '16/9', + state: block.group_image?.state?.value ?? 'no_state', + }, overTitle: block.content?.content_over_title, title: block.content?.content_title, description: block.content?.content_description, - buttonOne: Array.isArray(block.button?.button) ? block.button?.button[0]?.button_label : undefined, - buttonOneUrl: Array.isArray(block.button?.button) ? block.button?.button[0]?.button_url : block.button?.button?.button_url, - buttonTwo: Array.isArray(block.button?.button) ? block.button?.button[1]?.button_label : undefined, - buttonTwoUrl: Array.isArray(block.button?.button) ? block.button?.button[1]?.button_url : block.button?.button?.button_url, + button: Array.isArray(block.button?.button) ? block.button?.button.map((btn) => ({ + text: btn.button_label, + url: btn.button_url, + })) : [], }); } } diff --git a/projects/demo/src/app/pages/list-page/list-page.component.ts b/projects/demo/src/app/pages/list-page/list-page.component.ts index edecac71..bd3991da 100644 --- a/projects/demo/src/app/pages/list-page/list-page.component.ts +++ b/projects/demo/src/app/pages/list-page/list-page.component.ts @@ -100,7 +100,6 @@ export class ListPageComponent implements OnInit { this._loadData(collection, typeName, slug); }); - } private _loadData(collection: string, typeName: string, slug: string): void { @@ -132,8 +131,8 @@ export class ListPageComponent implements OnInit { imageLink: entryItem.slug ? `/${slug}/${entryItem.slug}` : '', last_modified: entryItem.last_modified, date: entryItem.date, - tags: entryItem.tags?.filter((tag): tag is { id: number; title: string } => - tag.id !== undefined && tag.title !== undefined, + tags: entryItem.tags?.filter( + (tag): tag is { id: number; title: string } => tag.id !== undefined && tag.title !== undefined, ), }); } @@ -161,7 +160,6 @@ export class ListPageComponent implements OnInit { } private _generateTypeName(collection: string): string { - const pascalCaseCollection = collection .split('-') .map((part) => part.charAt(0).toUpperCase() + part.slice(1)) @@ -180,17 +178,31 @@ export class ListPageComponent implements OnInit { public transformToCardData(item: ContentData): ContentCardData { return { id: item.id, + card: { + orientation: 'vertical', + appearance: 'elevated', + variant: 'light', + transparent: false, + }, + image: { + imageUrl: item.imageUrl ?? '', + aspectRatio: '16/9', + lightUrl: item.imageUrl ?? '', + darkUrl: item.comp_img_dark_mode?.[0]?.url ? `${environment.cmsBaseUrl}${item.comp_img_dark_mode[0].url}` : item.imageUrl ?? '', + caption: item.title ?? '', + bgColorVariant: 'surface', + bgTransparent: false, + filledInContainer: false, + state: 'no_state', + }, + button: [ + { + text: 'Tovább', + url: item.imageLink ?? '', + }, + ], title: item.title, description: item.description, - orientation: 'vertical', - aspectRatio: '16/9', - appearance: 'elevated', - variant: 'light', - imageCaption: item.title, - imageURL: item.imageUrl, - imageUrlLight: item.imageUrl, - imageUrlDark: item.comp_img_dark_mode?.[0]?.url ? `${environment.cmsBaseUrl}${item.comp_img_dark_mode[0].url}` : item.imageUrl, - buttonOneUrl: item.imageLink, last_modified: item.last_modified, date: item.date, tags: item.tags, From e46299e30941bc0d01661c77a2906d9bbbbd67b9 Mon Sep 17 00:00:00 2001 From: Pipicz Petra Date: Wed, 8 Apr 2026 14:10:29 +0200 Subject: [PATCH 2/2] replace buttons --- .../list-page/content-page/content-page.component.html | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/projects/demo/src/app/pages/list-page/content-page/content-page.component.html b/projects/demo/src/app/pages/list-page/content-page/content-page.component.html index 5f5af167..e9fa90f9 100644 --- a/projects/demo/src/app/pages/list-page/content-page/content-page.component.html +++ b/projects/demo/src/app/pages/list-page/content-page/content-page.component.html @@ -36,14 +36,10 @@

{{ block.overTitle }}

@if(block.isButton){ - - @if(block.buttonTwo){ - } }