From ffa3ff2d63c847f020019d5eb31174250e4f3dd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sedat=20=C3=96ZT=C3=9CRK?= <76204082+iamsedatozturk@users.noreply.github.com> Date: Tue, 17 Mar 2026 16:35:58 +0300 Subject: [PATCH] =?UTF-8?q?Public=20Designer=20i=C3=A7in=20style=20ve=20cs?= =?UTF-8?q?s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Public/HomeDto.cs | 4 + .../Public/SavePublicPageContentInput.cs | 29 + .../Public/PublicAppService.cs | 32 ++ .../Public/BankDto.cs | 1 + .../Public/MapDto.cs | 2 + .../Public/WorkHoursDto.cs | 1 + ....cs => 20260317120000_Initial.Designer.cs} | 2 +- ...9_Initial.cs => 20260317120000_Initial.cs} | 0 ui/src/proxy/contact/models.ts | 5 + ui/src/services/about.ts | 1 + ui/src/services/contact.service.ts | 10 + ui/src/services/home.service.ts | 26 + ui/src/services/service.service.ts | 1 + ui/src/views/public/About.tsx | 285 +++++++++- ui/src/views/public/Contact.tsx | 180 ++++++- ui/src/views/public/Home.tsx | 496 ++++++++++-------- ui/src/views/public/Services.tsx | 327 +++++++++++- ui/tailwind.config.ts | 8 + 18 files changed, 1124 insertions(+), 286 deletions(-) rename api/src/Sozsoft.Platform.EntityFrameworkCore/Migrations/{20260317104139_Initial.Designer.cs => 20260317120000_Initial.Designer.cs} (99%) rename api/src/Sozsoft.Platform.EntityFrameworkCore/Migrations/{20260317104139_Initial.cs => 20260317120000_Initial.cs} (100%) diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Public/HomeDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/Public/HomeDto.cs index 893bada..863c313 100644 --- a/api/src/Sozsoft.Platform.Application.Contracts/Public/HomeDto.cs +++ b/api/src/Sozsoft.Platform.Application.Contracts/Public/HomeDto.cs @@ -66,6 +66,7 @@ public class HomeSlideDto { public string TitleKey { get; set; } public string SubtitleKey { get; set; } + public string StyleClass { get; set; } public List Services { get; set; } = []; } @@ -74,6 +75,7 @@ public class HomeSlideServiceDto public string Icon { get; set; } public string TitleKey { get; set; } public string DescriptionKey { get; set; } + public string StyleClass { get; set; } } public class HomeFeatureDto @@ -81,6 +83,7 @@ public class HomeFeatureDto public string Icon { get; set; } public string TitleKey { get; set; } public string DescriptionKey { get; set; } + public string StyleClass { get; set; } } public class HomeSolutionDto @@ -89,4 +92,5 @@ public class HomeSolutionDto public string ColorClass { get; set; } public string TitleKey { get; set; } public string DescriptionKey { get; set; } + public string StyleClass { get; set; } } diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Public/SavePublicPageContentInput.cs b/api/src/Sozsoft.Platform.Application.Contracts/Public/SavePublicPageContentInput.cs index 34344b0..30ee475 100644 --- a/api/src/Sozsoft.Platform.Application.Contracts/Public/SavePublicPageContentInput.cs +++ b/api/src/Sozsoft.Platform.Application.Contracts/Public/SavePublicPageContentInput.cs @@ -15,6 +15,7 @@ public class SaveAboutPageInput public List Stats { get; set; } = []; public List Descriptions { get; set; } = []; public List Sections { get; set; } = []; + public List StyleTexts { get; set; } = []; } public class SaveAboutStatInput @@ -58,6 +59,7 @@ public class SaveServicesPageInput public string CtaButtonLabelValue { get; set; } public List ServiceItems { get; set; } = []; public List SupportItems { get; set; } = []; + public List StyleTexts { get; set; } = []; } public class SaveServiceItemInput @@ -84,22 +86,40 @@ public class SaveHomePageInput public string HeroBackgroundImageValue { get; set; } public string HeroPrimaryCtaKey { get; set; } public string HeroPrimaryCtaValue { get; set; } + public string HeroPrimaryCtaStyleKey { get; set; } + public string HeroPrimaryCtaStyleValue { get; set; } public string HeroSecondaryCtaKey { get; set; } public string HeroSecondaryCtaValue { get; set; } + public string HeroSecondaryCtaStyleKey { get; set; } + public string HeroSecondaryCtaStyleValue { get; set; } public string FeaturesTitleKey { get; set; } public string FeaturesTitleValue { get; set; } + public string FeaturesTitleStyleKey { get; set; } + public string FeaturesTitleStyleValue { get; set; } public string FeaturesSubtitleKey { get; set; } public string FeaturesSubtitleValue { get; set; } + public string FeaturesSubtitleStyleKey { get; set; } + public string FeaturesSubtitleStyleValue { get; set; } public string SolutionsTitleKey { get; set; } public string SolutionsTitleValue { get; set; } + public string SolutionsTitleStyleKey { get; set; } + public string SolutionsTitleStyleValue { get; set; } public string SolutionsSubtitleKey { get; set; } public string SolutionsSubtitleValue { get; set; } + public string SolutionsSubtitleStyleKey { get; set; } + public string SolutionsSubtitleStyleValue { get; set; } public string CtaTitleKey { get; set; } public string CtaTitleValue { get; set; } + public string CtaTitleStyleKey { get; set; } + public string CtaTitleStyleValue { get; set; } public string CtaSubtitleKey { get; set; } public string CtaSubtitleValue { get; set; } + public string CtaSubtitleStyleKey { get; set; } + public string CtaSubtitleStyleValue { get; set; } public string CtaButtonLabelKey { get; set; } public string CtaButtonLabelValue { get; set; } + public string CtaButtonStyleKey { get; set; } + public string CtaButtonStyleValue { get; set; } public List Slides { get; set; } = []; public List Features { get; set; } = []; public List Solutions { get; set; } = []; @@ -111,6 +131,7 @@ public class SaveHomeSlideInput public string TitleValue { get; set; } public string SubtitleKey { get; set; } public string SubtitleValue { get; set; } + public string StyleClass { get; set; } public List Services { get; set; } = []; } @@ -121,6 +142,7 @@ public class SaveHomeSlideServiceInput public string TitleValue { get; set; } public string DescriptionKey { get; set; } public string DescriptionValue { get; set; } + public string StyleClass { get; set; } } public class SaveHomeFeatureInput @@ -130,6 +152,7 @@ public class SaveHomeFeatureInput public string TitleValue { get; set; } public string DescriptionKey { get; set; } public string DescriptionValue { get; set; } + public string StyleClass { get; set; } } public class SaveHomeSolutionInput @@ -140,6 +163,7 @@ public class SaveHomeSolutionInput public string TitleValue { get; set; } public string DescriptionKey { get; set; } public string DescriptionValue { get; set; } + public string StyleClass { get; set; } } public class SaveContactPageInput @@ -168,6 +192,7 @@ public class SaveContactPageInput public string BankBranch { get; set; } public string BankAccountNumber { get; set; } public string BankIban { get; set; } + public string BankStyleClass { get; set; } public string WorkHoursTitleKey { get; set; } public string WorkHoursTitleValue { get; set; } @@ -177,6 +202,7 @@ public class SaveContactPageInput public string WorkWeekendValue { get; set; } public string WorkWhatsappKey { get; set; } public string WorkWhatsappValue { get; set; } + public string WorkHoursStyleClass { get; set; } public string MapTitleKey { get; set; } public string MapTitleValue { get; set; } @@ -186,4 +212,7 @@ public class SaveContactPageInput public bool MapAllowFullScreen { get; set; } public string MapLoading { get; set; } public string MapReferrerPolicy { get; set; } + public string MapContainerStyleClass { get; set; } + public string MapFrameStyleClass { get; set; } + public List StyleTexts { get; set; } = []; } \ No newline at end of file diff --git a/api/src/Sozsoft.Platform.Application/Public/PublicAppService.cs b/api/src/Sozsoft.Platform.Application/Public/PublicAppService.cs index bdf34c2..06d4d47 100644 --- a/api/src/Sozsoft.Platform.Application/Public/PublicAppService.cs +++ b/api/src/Sozsoft.Platform.Application/Public/PublicAppService.cs @@ -128,6 +128,11 @@ public class PublicAppService : PlatformAppService await UpsertLanguageTextAsync(input.CultureName, section.DescriptionKey, section.DescriptionValue); } + foreach (var styleText in input.StyleTexts) + { + await UpsertLanguageTextAsync(input.CultureName, styleText.Key, styleText.Value); + } + await _aboutRepository.UpdateAsync(entity, autoSave: true); await _languageTextAppService.ClearRedisCacheAsync(); } @@ -176,6 +181,11 @@ public class PublicAppService : PlatformAppService await UpsertLanguageTextAsync(input.CultureName, input.CtaDescriptionKey, input.CtaDescriptionValue); await UpsertLanguageTextAsync(input.CultureName, input.CtaButtonLabelKey, input.CtaButtonLabelValue); + foreach (var styleText in input.StyleTexts) + { + await UpsertLanguageTextAsync(input.CultureName, styleText.Key, styleText.Value); + } + await CurrentUnitOfWork!.SaveChangesAsync(); await _languageTextAppService.ClearRedisCacheAsync(); } @@ -212,11 +222,13 @@ public class PublicAppService : PlatformAppService { TitleKey = slide.TitleKey, SubtitleKey = slide.SubtitleKey, + StyleClass = slide.StyleClass, Services = slide.Services.Select(service => new HomeSlideServiceDto { Icon = service.Icon, TitleKey = service.TitleKey, DescriptionKey = service.DescriptionKey, + StyleClass = service.StyleClass, }).ToList(), }).ToList()); @@ -225,6 +237,7 @@ public class PublicAppService : PlatformAppService Icon = feature.Icon, TitleKey = feature.TitleKey, DescriptionKey = feature.DescriptionKey, + StyleClass = feature.StyleClass, }).ToList()); entity.SolutionsJson = JsonSerializer.Serialize(input.Solutions.Select(solution => new HomeSolutionDto @@ -233,6 +246,7 @@ public class PublicAppService : PlatformAppService ColorClass = solution.ColorClass, TitleKey = solution.TitleKey, DescriptionKey = solution.DescriptionKey, + StyleClass = solution.StyleClass, }).ToList()); if (isNewEntity) @@ -246,14 +260,23 @@ public class PublicAppService : PlatformAppService await UpsertLanguageTextAsync(input.CultureName, input.HeroBackgroundImageKey, input.HeroBackgroundImageValue); await UpsertLanguageTextAsync(input.CultureName, input.HeroPrimaryCtaKey, input.HeroPrimaryCtaValue); + await UpsertLanguageTextAsync(input.CultureName, input.HeroPrimaryCtaStyleKey, input.HeroPrimaryCtaStyleValue); await UpsertLanguageTextAsync(input.CultureName, input.HeroSecondaryCtaKey, input.HeroSecondaryCtaValue); + await UpsertLanguageTextAsync(input.CultureName, input.HeroSecondaryCtaStyleKey, input.HeroSecondaryCtaStyleValue); await UpsertLanguageTextAsync(input.CultureName, input.FeaturesTitleKey, input.FeaturesTitleValue); + await UpsertLanguageTextAsync(input.CultureName, input.FeaturesTitleStyleKey, input.FeaturesTitleStyleValue); await UpsertLanguageTextAsync(input.CultureName, input.FeaturesSubtitleKey, input.FeaturesSubtitleValue); + await UpsertLanguageTextAsync(input.CultureName, input.FeaturesSubtitleStyleKey, input.FeaturesSubtitleStyleValue); await UpsertLanguageTextAsync(input.CultureName, input.SolutionsTitleKey, input.SolutionsTitleValue); + await UpsertLanguageTextAsync(input.CultureName, input.SolutionsTitleStyleKey, input.SolutionsTitleStyleValue); await UpsertLanguageTextAsync(input.CultureName, input.SolutionsSubtitleKey, input.SolutionsSubtitleValue); + await UpsertLanguageTextAsync(input.CultureName, input.SolutionsSubtitleStyleKey, input.SolutionsSubtitleStyleValue); await UpsertLanguageTextAsync(input.CultureName, input.CtaTitleKey, input.CtaTitleValue); + await UpsertLanguageTextAsync(input.CultureName, input.CtaTitleStyleKey, input.CtaTitleStyleValue); await UpsertLanguageTextAsync(input.CultureName, input.CtaSubtitleKey, input.CtaSubtitleValue); + await UpsertLanguageTextAsync(input.CultureName, input.CtaSubtitleStyleKey, input.CtaSubtitleStyleValue); await UpsertLanguageTextAsync(input.CultureName, input.CtaButtonLabelKey, input.CtaButtonLabelValue); + await UpsertLanguageTextAsync(input.CultureName, input.CtaButtonStyleKey, input.CtaButtonStyleValue); foreach (var slide in input.Slides) { @@ -528,6 +551,7 @@ public class PublicAppService : PlatformAppService Branch = input.BankBranch, AccountNumber = input.BankAccountNumber, Iban = input.BankIban, + StyleClass = input.BankStyleClass, }); entity.WorkHoursJson = JsonSerializer.Serialize(new WorkHoursDto @@ -535,6 +559,7 @@ public class PublicAppService : PlatformAppService Weekday = input.WorkWeekdayKey, Weekend = input.WorkWeekendKey, Whatsapp = input.WorkWhatsappKey, + StyleClass = input.WorkHoursStyleClass, }); entity.MapJson = JsonSerializer.Serialize(new MapDto @@ -546,6 +571,8 @@ public class PublicAppService : PlatformAppService AllowFullScreen = input.MapAllowFullScreen, Loading = input.MapLoading, ReferrerPolicy = input.MapReferrerPolicy, + ContainerStyleClass = input.MapContainerStyleClass, + FrameStyleClass = input.MapFrameStyleClass, }); await _contactRepository.UpdateAsync(entity, autoSave: false); @@ -562,6 +589,11 @@ public class PublicAppService : PlatformAppService await UpsertLanguageTextAsync(input.CultureName, input.WorkWhatsappKey, input.WorkWhatsappValue); await UpsertLanguageTextAsync(input.CultureName, input.MapTitleKey, input.MapTitleValue); + foreach (var styleText in input.StyleTexts) + { + await UpsertLanguageTextAsync(input.CultureName, styleText.Key, styleText.Value); + } + await CurrentUnitOfWork!.SaveChangesAsync(); await _languageTextAppService.ClearRedisCacheAsync(); } diff --git a/api/src/Sozsoft.Platform.Domain.Shared/Public/BankDto.cs b/api/src/Sozsoft.Platform.Domain.Shared/Public/BankDto.cs index ee4996d..3bd6d35 100644 --- a/api/src/Sozsoft.Platform.Domain.Shared/Public/BankDto.cs +++ b/api/src/Sozsoft.Platform.Domain.Shared/Public/BankDto.cs @@ -6,4 +6,5 @@ public class BankDto public string Branch { get; set; } public string AccountNumber { get; set; } public string Iban { get; set; } + public string StyleClass { get; set; } } diff --git a/api/src/Sozsoft.Platform.Domain.Shared/Public/MapDto.cs b/api/src/Sozsoft.Platform.Domain.Shared/Public/MapDto.cs index e57130a..fd6784c 100644 --- a/api/src/Sozsoft.Platform.Domain.Shared/Public/MapDto.cs +++ b/api/src/Sozsoft.Platform.Domain.Shared/Public/MapDto.cs @@ -7,6 +7,8 @@ public class MapDto public string Width { get; set; } public string Height { get; set; } public string Style { get; set; } + public string ContainerStyleClass { get; set; } + public string FrameStyleClass { get; set; } public bool? AllowFullScreen { get; set; } public string Loading { get; set; } public string ReferrerPolicy { get; set; } diff --git a/api/src/Sozsoft.Platform.Domain.Shared/Public/WorkHoursDto.cs b/api/src/Sozsoft.Platform.Domain.Shared/Public/WorkHoursDto.cs index b308272..6490c56 100644 --- a/api/src/Sozsoft.Platform.Domain.Shared/Public/WorkHoursDto.cs +++ b/api/src/Sozsoft.Platform.Domain.Shared/Public/WorkHoursDto.cs @@ -5,4 +5,5 @@ public class WorkHoursDto public string Weekday { get; set; } public string Weekend { get; set; } public string Whatsapp { get; set; } + public string StyleClass { get; set; } } diff --git a/api/src/Sozsoft.Platform.EntityFrameworkCore/Migrations/20260317104139_Initial.Designer.cs b/api/src/Sozsoft.Platform.EntityFrameworkCore/Migrations/20260317120000_Initial.Designer.cs similarity index 99% rename from api/src/Sozsoft.Platform.EntityFrameworkCore/Migrations/20260317104139_Initial.Designer.cs rename to api/src/Sozsoft.Platform.EntityFrameworkCore/Migrations/20260317120000_Initial.Designer.cs index 3a3e49e..5f7fccb 100644 --- a/api/src/Sozsoft.Platform.EntityFrameworkCore/Migrations/20260317104139_Initial.Designer.cs +++ b/api/src/Sozsoft.Platform.EntityFrameworkCore/Migrations/20260317120000_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace Sozsoft.Platform.Migrations { [DbContext(typeof(PlatformDbContext))] - [Migration("20260317104139_Initial")] + [Migration("20260317120000_Initial")] partial class Initial { /// diff --git a/api/src/Sozsoft.Platform.EntityFrameworkCore/Migrations/20260317104139_Initial.cs b/api/src/Sozsoft.Platform.EntityFrameworkCore/Migrations/20260317120000_Initial.cs similarity index 100% rename from api/src/Sozsoft.Platform.EntityFrameworkCore/Migrations/20260317104139_Initial.cs rename to api/src/Sozsoft.Platform.EntityFrameworkCore/Migrations/20260317120000_Initial.cs diff --git a/ui/src/proxy/contact/models.ts b/ui/src/proxy/contact/models.ts index 2c8ac5e..df0c02d 100644 --- a/ui/src/proxy/contact/models.ts +++ b/ui/src/proxy/contact/models.ts @@ -15,12 +15,14 @@ export interface BankDto { branch: string accountNumber: string iban: string + styleClass?: string } export interface WorkHoursDto { weekday: string weekend: string whatsapp: string + styleClass?: string } export interface MapDto { @@ -28,6 +30,9 @@ export interface MapDto { src: string width: string height: string + style?: string + containerStyleClass?: string + frameStyleClass?: string allowFullScreen?: boolean loading: string referrerPolicy: string diff --git a/ui/src/services/about.ts b/ui/src/services/about.ts index c020b32..06e98f8 100644 --- a/ui/src/services/about.ts +++ b/ui/src/services/about.ts @@ -35,6 +35,7 @@ export interface SaveAboutPageInput { stats: SaveAboutStatInput[] descriptions: SaveLocalizedTextInput[] sections: SaveAboutSectionInput[] + styleTexts: SaveLocalizedTextInput[] } export function getAbout() { diff --git a/ui/src/services/contact.service.ts b/ui/src/services/contact.service.ts index 429a7eb..d8a3a75 100644 --- a/ui/src/services/contact.service.ts +++ b/ui/src/services/contact.service.ts @@ -1,6 +1,11 @@ import apiService from './api.service' import { ContactDto } from '@/proxy/contact/models' +export interface SaveLocalizedTextInput { + key: string + value: string +} + export function getContact() { return apiService.fetchData( { @@ -33,6 +38,7 @@ export interface SaveContactPageInput extends Record { bankBranch: string bankAccountNumber: string bankIban: string + bankStyleClass: string workHoursTitleKey: string workHoursTitleValue: string workWeekdayKey: string @@ -41,6 +47,7 @@ export interface SaveContactPageInput extends Record { workWeekendValue: string workWhatsappKey: string workWhatsappValue: string + workHoursStyleClass: string mapTitleKey: string mapTitleValue: string mapSrc: string @@ -49,6 +56,9 @@ export interface SaveContactPageInput extends Record { mapAllowFullScreen: boolean mapLoading: string mapReferrerPolicy: string + mapContainerStyleClass: string + mapFrameStyleClass: string + styleTexts: SaveLocalizedTextInput[] } export function saveContactPage(input: SaveContactPageInput) { diff --git a/ui/src/services/home.service.ts b/ui/src/services/home.service.ts index 1f5fbd9..342130d 100644 --- a/ui/src/services/home.service.ts +++ b/ui/src/services/home.service.ts @@ -4,11 +4,13 @@ export interface HomeSlideServiceDto { icon: string titleKey: string descriptionKey: string + styleClass?: string } export interface HomeSlideDto { titleKey: string subtitleKey: string + styleClass?: string services: HomeSlideServiceDto[] } @@ -16,6 +18,7 @@ export interface HomeFeatureDto { icon: string titleKey: string descriptionKey: string + styleClass?: string } export interface HomeSolutionDto { @@ -23,6 +26,7 @@ export interface HomeSolutionDto { colorClass: string titleKey: string descriptionKey: string + styleClass?: string } export interface HomeDto { @@ -48,6 +52,7 @@ export interface SaveHomeSlideServiceInput { titleValue: string descriptionKey: string descriptionValue: string + styleClass: string } export interface SaveHomeSlideInput { @@ -55,6 +60,7 @@ export interface SaveHomeSlideInput { titleValue: string subtitleKey: string subtitleValue: string + styleClass: string services: SaveHomeSlideServiceInput[] } @@ -64,6 +70,7 @@ export interface SaveHomeFeatureInput { titleValue: string descriptionKey: string descriptionValue: string + styleClass: string } export interface SaveHomeSolutionInput { @@ -73,6 +80,7 @@ export interface SaveHomeSolutionInput { titleValue: string descriptionKey: string descriptionValue: string + styleClass: string } export interface SaveHomePageInput { @@ -81,22 +89,40 @@ export interface SaveHomePageInput { heroBackgroundImageValue: string heroPrimaryCtaKey: string heroPrimaryCtaValue: string + heroPrimaryCtaStyleKey: string + heroPrimaryCtaStyleValue: string heroSecondaryCtaKey: string heroSecondaryCtaValue: string + heroSecondaryCtaStyleKey: string + heroSecondaryCtaStyleValue: string featuresTitleKey: string featuresTitleValue: string + featuresTitleStyleKey: string + featuresTitleStyleValue: string featuresSubtitleKey: string featuresSubtitleValue: string + featuresSubtitleStyleKey: string + featuresSubtitleStyleValue: string solutionsTitleKey: string solutionsTitleValue: string + solutionsTitleStyleKey: string + solutionsTitleStyleValue: string solutionsSubtitleKey: string solutionsSubtitleValue: string + solutionsSubtitleStyleKey: string + solutionsSubtitleStyleValue: string ctaTitleKey: string ctaTitleValue: string + ctaTitleStyleKey: string + ctaTitleStyleValue: string ctaSubtitleKey: string ctaSubtitleValue: string + ctaSubtitleStyleKey: string + ctaSubtitleStyleValue: string ctaButtonLabelKey: string ctaButtonLabelValue: string + ctaButtonStyleKey: string + ctaButtonStyleValue: string slides: SaveHomeSlideInput[] features: SaveHomeFeatureInput[] solutions: SaveHomeSolutionInput[] diff --git a/ui/src/services/service.service.ts b/ui/src/services/service.service.ts index 88b9383..86c5af0 100644 --- a/ui/src/services/service.service.ts +++ b/ui/src/services/service.service.ts @@ -36,6 +36,7 @@ export interface SaveServicesPageInput { ctaButtonLabelValue: string serviceItems: SaveServiceItemInput[] supportItems: SaveServiceItemInput[] + styleTexts: SaveLocalizedTextInput[] } export function getServices() { diff --git a/ui/src/views/public/About.tsx b/ui/src/views/public/About.tsx index 1205b0d..5372ea8 100644 --- a/ui/src/views/public/About.tsx +++ b/ui/src/views/public/About.tsx @@ -9,7 +9,6 @@ import { APP_NAME } from '@/constants/app.constant' import { Notification, toast } from '@/components/ui' import { useStoreState } from '@/store' import { useStoreActions } from '@/store' -import { useNavigate } from 'react-router-dom' import DesignerDrawer from './designer/DesignerDrawer' import SelectableBlock from './designer/SelectableBlock' import { DesignerSelection } from './designer/types' @@ -20,6 +19,12 @@ interface AboutStatContent { value: string label: string labelKey: string + styleClassKey: string + styleClass: string + valueStyleClassKey: string + valueStyleClass: string + labelStyleClassKey: string + labelStyleClass: string useCounter?: boolean counterEnd?: string counterSuffix?: string @@ -29,6 +34,8 @@ interface AboutStatContent { interface AboutDescriptionContent { key: string text: string + styleClassKey: string + styleClass: string } interface AboutSectionContent { @@ -36,15 +43,29 @@ interface AboutSectionContent { description: string titleKey: string descriptionKey: string + cardStyleClassKey: string + cardStyleClass: string + titleStyleClassKey: string + titleStyleClass: string + descriptionStyleClassKey: string + descriptionStyleClass: string } interface AboutContent { heroTitle: string heroTitleKey: string + heroTitleStyleClassKey: string + heroTitleStyleClass: string heroSubtitle: string heroSubtitleKey: string + heroSubtitleStyleClassKey: string + heroSubtitleStyleClass: string heroImage: string heroImageKey: string + heroSectionStyleClassKey: string + heroSectionStyleClass: string + descriptionsContainerStyleClassKey: string + descriptionsContainerStyleClass: string stats: AboutStatContent[] descriptions: AboutDescriptionContent[] sections: AboutSectionContent[] @@ -55,6 +76,10 @@ const ABOUT_HERO_IMAGE = const ABOUT_HERO_TITLE_KEY = 'App.About' const ABOUT_HERO_SUBTITLE_KEY = 'Public.about.subtitle' const ABOUT_HERO_IMAGE_KEY = 'Public.about.heroImage' +const ABOUT_HERO_SECTION_STYLE_KEY = 'Public.about.hero.sectionStyleClass' +const ABOUT_HERO_TITLE_STYLE_KEY = 'Public.about.hero.titleStyleClass' +const ABOUT_HERO_SUBTITLE_STYLE_KEY = 'Public.about.hero.subtitleStyleClass' +const ABOUT_DESCRIPTIONS_CONTAINER_STYLE_KEY = 'Public.about.descriptions.containerStyleClass' function isLikelyLocalizationKey(value?: string) { return Boolean(value && /^[A-Za-z0-9_.-]+$/.test(value) && value.includes('.')) @@ -84,18 +109,60 @@ function buildAboutContent( return { heroTitle: resolveLocalizedValue(translate, ABOUT_HERO_TITLE_KEY, 'About'), heroTitleKey: ABOUT_HERO_TITLE_KEY, + heroTitleStyleClassKey: ABOUT_HERO_TITLE_STYLE_KEY, + heroTitleStyleClass: resolveLocalizedValue( + translate, + ABOUT_HERO_TITLE_STYLE_KEY, + 'text-5xl font-bold ml-4 mt-3 mb-2 text-white', + ), heroSubtitle: resolveLocalizedValue(translate, ABOUT_HERO_SUBTITLE_KEY), heroSubtitleKey: ABOUT_HERO_SUBTITLE_KEY, + heroSubtitleStyleClassKey: ABOUT_HERO_SUBTITLE_STYLE_KEY, + heroSubtitleStyleClass: resolveLocalizedValue( + translate, + ABOUT_HERO_SUBTITLE_STYLE_KEY, + 'text-xl max-w-3xl ml-4', + ), heroImage: resolveLocalizedValue(translate, ABOUT_HERO_IMAGE_KEY, ABOUT_HERO_IMAGE), heroImageKey: ABOUT_HERO_IMAGE_KEY, + heroSectionStyleClassKey: ABOUT_HERO_SECTION_STYLE_KEY, + heroSectionStyleClass: resolveLocalizedValue( + translate, + ABOUT_HERO_SECTION_STYLE_KEY, + 'relative bg-blue-900 text-white py-12', + ), + descriptionsContainerStyleClassKey: ABOUT_DESCRIPTIONS_CONTAINER_STYLE_KEY, + descriptionsContainerStyleClass: resolveLocalizedValue( + translate, + ABOUT_DESCRIPTIONS_CONTAINER_STYLE_KEY, + 'p-5 mx-auto text-gray-800 text-lg leading-relaxed shadow-md bg-white border-l-4 border-blue-600', + ), stats: - about?.statsDto.map((stat) => ({ + about?.statsDto.map((stat, index) => ({ + styleClassKey: `Public.about.dynamic.stat.${index + 1}.styleClass`, + styleClass: resolveLocalizedValue( + translate, + `Public.about.dynamic.stat.${index + 1}.styleClass`, + 'text-center rounded-xl px-4 py-6', + ), + valueStyleClassKey: `Public.about.dynamic.stat.${index + 1}.valueStyleClass`, + valueStyleClass: resolveLocalizedValue( + translate, + `Public.about.dynamic.stat.${index + 1}.valueStyleClass`, + 'text-4xl font-bold text-gray-900 mb-2', + ), + labelStyleClassKey: `Public.about.dynamic.stat.${index + 1}.labelStyleClass`, + labelStyleClass: resolveLocalizedValue( + translate, + `Public.about.dynamic.stat.${index + 1}.labelStyleClass`, + 'text-gray-600', + ), icon: stat.icon || '', value: stat.value, label: resolveLocalizedValue(translate, stat.labelKey, stat.labelKey), labelKey: (isLikelyLocalizationKey(stat.labelKey) ? stat.labelKey : undefined) || - `Public.about.dynamic.stat.${stat.value}.label`, + `Public.about.dynamic.stat.${index + 1}.label`, useCounter: stat.useCounter, counterEnd: stat.counterEnd, counterSuffix: stat.counterSuffix, @@ -107,6 +174,12 @@ function buildAboutContent( (isLikelyLocalizationKey(item) ? item : undefined) || `Public.about.dynamic.description.${index + 1}`, text: resolveLocalizedValue(translate, item, item), + styleClassKey: `Public.about.dynamic.description.${index + 1}.styleClass`, + styleClass: resolveLocalizedValue( + translate, + `Public.about.dynamic.description.${index + 1}.styleClass`, + index % 2 === 0 ? '' : 'text-center p-5 text-blue-800', + ), })) ?? [], sections: about?.sectionsDto.map((section) => ({ @@ -118,13 +191,30 @@ function buildAboutContent( descriptionKey: (isLikelyLocalizationKey(section.descKey) ? section.descKey : undefined) || `Public.about.dynamic.section.${section.key}.description`, + cardStyleClassKey: `Public.about.dynamic.section.${section.key}.cardStyleClass`, + cardStyleClass: resolveLocalizedValue( + translate, + `Public.about.dynamic.section.${section.key}.cardStyleClass`, + 'bg-white p-8 rounded-xl shadow-lg', + ), + titleStyleClassKey: `Public.about.dynamic.section.${section.key}.titleStyleClass`, + titleStyleClass: resolveLocalizedValue( + translate, + `Public.about.dynamic.section.${section.key}.titleStyleClass`, + 'text-2xl font-bold text-gray-900 mb-4', + ), + descriptionStyleClassKey: `Public.about.dynamic.section.${section.key}.descriptionStyleClass`, + descriptionStyleClass: resolveLocalizedValue( + translate, + `Public.about.dynamic.section.${section.key}.descriptionStyleClass`, + 'text-gray-700', + ), })) ?? [], } } const About: React.FC = () => { const { translate } = useLocalization() - const navigate = useNavigate() const { setLang } = useStoreActions((actions) => actions.locale) const { getConfig } = useStoreActions((actions) => actions.abpConfig) const configCultureName = useStoreState( @@ -207,7 +297,15 @@ const About: React.FC = () => { const handleFieldChange = (fieldKey: string, value: string | string[]) => { updateContent((current) => { - if (fieldKey === 'heroTitle' || fieldKey === 'heroSubtitle' || fieldKey === 'heroImage') { + if ( + fieldKey === 'heroTitle' || + fieldKey === 'heroSubtitle' || + fieldKey === 'heroImage' || + fieldKey === 'heroSectionStyleClass' || + fieldKey === 'heroTitleStyleClass' || + fieldKey === 'heroSubtitleStyleClass' || + fieldKey === 'descriptionsContainerStyleClass' + ) { return { ...current, [fieldKey]: value as string, @@ -228,6 +326,20 @@ const About: React.FC = () => { } } + if (fieldKey.startsWith('descriptionStyle-')) { + const index = Number(fieldKey.replace('descriptionStyle-', '')) + const descriptions = [...current.descriptions] + descriptions[index] = { + ...descriptions[index], + styleClass: value as string, + } + + return { + ...current, + descriptions, + } + } + if (selectedBlockId?.startsWith('stat-')) { const index = Number(selectedBlockId.replace('stat-', '')) const stats = [...current.stats] @@ -277,18 +389,36 @@ const About: React.FC = () => { type: 'text', value: content.heroTitle, }, + { + key: 'heroTitleStyleClass', + label: content.heroTitleStyleClassKey, + type: 'text', + value: content.heroTitleStyleClass, + }, { key: 'heroSubtitle', label: content.heroSubtitleKey, type: 'textarea', value: content.heroSubtitle, }, + { + key: 'heroSubtitleStyleClass', + label: content.heroSubtitleStyleClassKey, + type: 'text', + value: content.heroSubtitleStyleClass, + }, { key: 'heroImage', label: content.heroImageKey, type: 'image', value: content.heroImage, }, + { + key: 'heroSectionStyleClass', + label: content.heroSectionStyleClassKey, + type: 'text', + value: content.heroSectionStyleClass, + }, ], } } @@ -298,13 +428,29 @@ const About: React.FC = () => { id: 'descriptions', title: 'Public.about.description.*', description: 'Orta bolumdeki aciklama metinlerini duzenleyin.', - fields: content.descriptions.map((item, index) => ({ - key: `description-${index}`, - label: item.key || `Public.about.dynamic.description.${index + 1}`, - type: 'textarea', - value: item.text, - rows: index % 2 === 0 ? 4 : 3, - })), + fields: [ + { + key: 'descriptionsContainerStyleClass', + label: content.descriptionsContainerStyleClassKey, + type: 'text', + value: content.descriptionsContainerStyleClass, + }, + ...content.descriptions.flatMap((item, index) => [ + { + key: `description-${index}`, + label: item.key || `Public.about.dynamic.description.${index + 1}`, + type: 'textarea' as const, + value: item.text, + rows: index % 2 === 0 ? 4 : 3, + }, + { + key: `descriptionStyle-${index}`, + label: item.styleClassKey, + type: 'text' as const, + value: item.styleClass, + }, + ]), + ], } } @@ -340,6 +486,24 @@ const About: React.FC = () => { type: 'text', value: stat.label, }, + { + key: 'styleClass', + label: stat.styleClassKey, + type: 'text', + value: stat.styleClass, + }, + { + key: 'valueStyleClass', + label: stat.valueStyleClassKey, + type: 'text', + value: stat.valueStyleClass, + }, + { + key: 'labelStyleClass', + label: stat.labelStyleClassKey, + type: 'text', + value: stat.labelStyleClass, + }, ], } } @@ -369,6 +533,24 @@ const About: React.FC = () => { type: 'textarea', value: section.description, }, + { + key: 'cardStyleClass', + label: section.cardStyleClassKey, + type: 'text', + value: section.cardStyleClass, + }, + { + key: 'titleStyleClass', + label: section.titleStyleClassKey, + type: 'text', + value: section.titleStyleClass, + }, + { + key: 'descriptionStyleClass', + label: section.descriptionStyleClassKey, + type: 'text', + value: section.descriptionStyleClass, + }, ], } } @@ -413,6 +595,56 @@ const About: React.FC = () => { section.descriptionKey || `Public.about.dynamic.section.${index + 1}.description`, descriptionValue: section.description, })), + styleTexts: [ + { + key: content.heroSectionStyleClassKey, + value: content.heroSectionStyleClass, + }, + { + key: content.heroTitleStyleClassKey, + value: content.heroTitleStyleClass, + }, + { + key: content.heroSubtitleStyleClassKey, + value: content.heroSubtitleStyleClass, + }, + { + key: content.descriptionsContainerStyleClassKey, + value: content.descriptionsContainerStyleClass, + }, + ...content.stats.flatMap((stat) => [ + { + key: stat.styleClassKey, + value: stat.styleClass, + }, + { + key: stat.valueStyleClassKey, + value: stat.valueStyleClass, + }, + { + key: stat.labelStyleClassKey, + value: stat.labelStyleClass, + }, + ]), + ...content.descriptions.map((item) => ({ + key: item.styleClassKey, + value: item.styleClass, + })), + ...content.sections.flatMap((section) => [ + { + key: section.cardStyleClassKey, + value: section.cardStyleClass, + }, + { + key: section.titleStyleClassKey, + value: section.titleStyleClass, + }, + { + key: section.descriptionStyleClassKey, + value: section.descriptionStyleClass, + }, + ]), + ], }) await getConfig(false) @@ -483,7 +715,7 @@ const About: React.FC = () => { isDesignMode={isDesignMode} onSelect={handleSelectBlock} > -
+
{ }} >
-

+

{content?.heroTitle}

-

{content?.heroSubtitle}

+

{content?.heroSubtitle}

@@ -516,14 +748,14 @@ const About: React.FC = () => { isDesignMode={isDesignMode} onSelect={handleSelectBlock} > -
+
{IconComponent && ( )} -
{stat.value}
-
{stat.label}
+
{stat.value}
+
{stat.label}
) @@ -542,11 +774,12 @@ const About: React.FC = () => { isDesignMode={isDesignMode} onSelect={handleSelectBlock} > -
-

{content?.descriptions[0]?.text}

-

{content?.descriptions[1]?.text}

-

{content?.descriptions[2]?.text}

-

{content?.descriptions[3]?.text}

+
+ {content?.descriptions.map((item, index) => ( +

+ {item.text} +

+ ))}
@@ -560,9 +793,9 @@ const About: React.FC = () => { isDesignMode={isDesignMode} onSelect={handleSelectBlock} > -
-

{section.title}

-

{section.description}

+
+

{section.title}

+

{section.description}

))} diff --git a/ui/src/views/public/Contact.tsx b/ui/src/views/public/Contact.tsx index a01085b..502b291 100644 --- a/ui/src/views/public/Contact.tsx +++ b/ui/src/views/public/Contact.tsx @@ -25,12 +25,22 @@ import { Notification, toast } from '@/components/ui' interface ContactContent { heroTitle: string heroTitleKey: string + heroSectionStyleClass: string + heroSectionStyleClassKey: string + heroTitleStyleClass: string + heroTitleStyleClassKey: string heroSubtitle: string heroSubtitleKey: string + heroSubtitleStyleClass: string + heroSubtitleStyleClassKey: string heroImage: string heroImageKey: string contactInfoTitle: string contactInfoTitleKey: string + contactInfoCardStyleClass: string + contactInfoCardStyleClassKey: string + contactInfoTitleStyleClass: string + contactInfoTitleStyleClassKey: string address: string addressKey: string phoneNumber: string @@ -43,6 +53,7 @@ interface ContactContent { bankBranch: string bankAccountNumber: string bankIban: string + bankStyleClass: string workHoursTitle: string workHoursTitleKey: string workWeekday: string @@ -51,6 +62,7 @@ interface ContactContent { workWeekendKey: string workWhatsapp: string workWhatsappKey: string + workHoursStyleClass: string mapTitle: string mapTitleKey: string mapSrc: string @@ -59,6 +71,8 @@ interface ContactContent { mapAllowFullScreen: string mapLoading: string mapReferrerPolicy: string + mapContainerStyleClass: string + mapFrameStyleClass: string } const CONTACT_HERO_TITLE_KEY = 'App.Contact' @@ -67,13 +81,13 @@ const CONTACT_HERO_IMAGE_KEY = 'Public.contact.heroImage' const CONTACT_HERO_IMAGE_DEFAULT = 'https://images.pexels.com/photos/3183171/pexels-photo-3183171.jpeg?auto=compress&cs=tinysrgb&w=1920' const CONTACT_INFO_TITLE_KEY = 'Abp.Identity.User.UserInformation.ContactInformation' -const CONTACT_ADDRESS_KEY = 'Public.contact.address.full' const CONTACT_BANK_TITLE_KEY = 'Public.contact.bank.title' const CONTACT_WORK_HOURS_TITLE_KEY = 'App.Definitions.WorkHour' -const CONTACT_WORK_WEEKDAY_KEY = 'Public.contact.workHours.weekday' -const CONTACT_WORK_WEEKEND_KEY = 'Public.contact.workHours.weekend' -const CONTACT_WORK_WHATSAPP_KEY = 'Public.contact.workHours.whatsapp' -const CONTACT_MAP_TITLE_KEY = 'Public.contact.location' +const CONTACT_HERO_SECTION_STYLE_KEY = 'Public.contact.hero.sectionStyleClass' +const CONTACT_HERO_TITLE_STYLE_KEY = 'Public.contact.hero.titleStyleClass' +const CONTACT_HERO_SUBTITLE_STYLE_KEY = 'Public.contact.hero.subtitleStyleClass' +const CONTACT_INFO_CARD_STYLE_KEY = 'Public.contact.info.cardStyleClass' +const CONTACT_INFO_TITLE_STYLE_KEY = 'Public.contact.info.titleStyleClass' function isLikelyLocalizationKey(value?: string) { return Boolean(value && /^[A-Za-z0-9_.-]+$/.test(value) && value.includes('.')) @@ -103,14 +117,44 @@ function buildContactContent( return { heroTitle: resolveLocalizedValue(translate, CONTACT_HERO_TITLE_KEY, 'Contact'), heroTitleKey: CONTACT_HERO_TITLE_KEY, + heroSectionStyleClass: resolveLocalizedValue( + translate, + CONTACT_HERO_SECTION_STYLE_KEY, + 'relative bg-blue-900 py-12 text-white', + ), + heroSectionStyleClassKey: CONTACT_HERO_SECTION_STYLE_KEY, + heroTitleStyleClass: resolveLocalizedValue( + translate, + CONTACT_HERO_TITLE_STYLE_KEY, + 'ml-4 mb-2 mt-3 text-5xl font-bold text-white', + ), + heroTitleStyleClassKey: CONTACT_HERO_TITLE_STYLE_KEY, heroSubtitle: resolveLocalizedValue(translate, CONTACT_HERO_SUBTITLE_KEY), heroSubtitleKey: CONTACT_HERO_SUBTITLE_KEY, + heroSubtitleStyleClass: resolveLocalizedValue( + translate, + CONTACT_HERO_SUBTITLE_STYLE_KEY, + 'ml-4 max-w-3xl text-xl', + ), + heroSubtitleStyleClassKey: CONTACT_HERO_SUBTITLE_STYLE_KEY, heroImage: resolveLocalizedValue(translate, CONTACT_HERO_IMAGE_KEY, CONTACT_HERO_IMAGE_DEFAULT), heroImageKey: CONTACT_HERO_IMAGE_KEY, contactInfoTitle: resolveLocalizedValue(translate, CONTACT_INFO_TITLE_KEY), contactInfoTitleKey: CONTACT_INFO_TITLE_KEY, - address: resolveLocalizedValue(translate, contact?.address || CONTACT_ADDRESS_KEY), - addressKey: contact?.address || CONTACT_ADDRESS_KEY, + contactInfoCardStyleClass: resolveLocalizedValue( + translate, + CONTACT_INFO_CARD_STYLE_KEY, + 'rounded-xl bg-white p-8 shadow-lg', + ), + contactInfoCardStyleClassKey: CONTACT_INFO_CARD_STYLE_KEY, + contactInfoTitleStyleClass: resolveLocalizedValue( + translate, + CONTACT_INFO_TITLE_STYLE_KEY, + 'mb-6 text-2xl font-bold text-gray-900', + ), + contactInfoTitleStyleClassKey: CONTACT_INFO_TITLE_STYLE_KEY, + address: resolveLocalizedValue(translate, contact?.address, ''), + addressKey: contact?.address || '', phoneNumber: contact?.phoneNumber || '', email: contact?.email || '', location: contact?.location || '', @@ -121,25 +165,27 @@ function buildContactContent( bankBranch: contact?.bankDto?.branch || '', bankAccountNumber: contact?.bankDto?.accountNumber || '', bankIban: contact?.bankDto?.iban || '', + bankStyleClass: contact?.bankDto?.styleClass || 'rounded-xl bg-white p-8 shadow-lg', workHoursTitle: resolveLocalizedValue(translate, CONTACT_WORK_HOURS_TITLE_KEY), workHoursTitleKey: CONTACT_WORK_HOURS_TITLE_KEY, - workWeekday: resolveLocalizedValue(translate, contact?.workHoursDto?.weekday || CONTACT_WORK_WEEKDAY_KEY), - workWeekdayKey: contact?.workHoursDto?.weekday || CONTACT_WORK_WEEKDAY_KEY, - workWeekend: resolveLocalizedValue(translate, contact?.workHoursDto?.weekend || CONTACT_WORK_WEEKEND_KEY), - workWeekendKey: contact?.workHoursDto?.weekend || CONTACT_WORK_WEEKEND_KEY, - workWhatsapp: resolveLocalizedValue( - translate, - contact?.workHoursDto?.whatsapp || CONTACT_WORK_WHATSAPP_KEY, - ), - workWhatsappKey: contact?.workHoursDto?.whatsapp || CONTACT_WORK_WHATSAPP_KEY, - mapTitle: resolveLocalizedValue(translate, contact?.mapDto?.title || CONTACT_MAP_TITLE_KEY), - mapTitleKey: contact?.mapDto?.title || CONTACT_MAP_TITLE_KEY, + workWeekday: resolveLocalizedValue(translate, contact?.workHoursDto?.weekday, ''), + workWeekdayKey: contact?.workHoursDto?.weekday || '', + workWeekend: resolveLocalizedValue(translate, contact?.workHoursDto?.weekend, ''), + workWeekendKey: contact?.workHoursDto?.weekend || '', + workWhatsapp: resolveLocalizedValue(translate, contact?.workHoursDto?.whatsapp, ''), + workWhatsappKey: contact?.workHoursDto?.whatsapp || '', + workHoursStyleClass: contact?.workHoursDto?.styleClass || 'rounded-xl bg-white p-8 shadow-lg', + mapTitle: resolveLocalizedValue(translate, contact?.mapDto?.title, ''), + mapTitleKey: contact?.mapDto?.title || '', mapSrc: contact?.mapDto?.src || '', mapWidth: contact?.mapDto?.width || '100%', mapHeight: contact?.mapDto?.height || '700', mapAllowFullScreen: String(contact?.mapDto?.allowFullScreen ?? true), mapLoading: contact?.mapDto?.loading || 'lazy', mapReferrerPolicy: contact?.mapDto?.referrerPolicy || 'no-referrer-when-downgrade', + mapContainerStyleClass: contact?.mapDto?.containerStyleClass || 'rounded-xl bg-white p-8 shadow-lg', + mapFrameStyleClass: + contact?.mapDto?.frameStyleClass || 'aspect-w-16 aspect-h-9 overflow-hidden rounded-xl bg-gray-200', } } @@ -238,18 +284,36 @@ const Contact: React.FC = () => { type: 'text', value: content.heroTitle, }, + { + key: 'heroTitleStyleClass', + label: content.heroTitleStyleClassKey, + type: 'text', + value: content.heroTitleStyleClass, + }, { key: 'heroSubtitle', label: content.heroSubtitleKey, type: 'textarea', value: content.heroSubtitle, }, + { + key: 'heroSubtitleStyleClass', + label: content.heroSubtitleStyleClassKey, + type: 'text', + value: content.heroSubtitleStyleClass, + }, { key: 'heroImage', label: content.heroImageKey, type: 'image', value: content.heroImage, }, + { + key: 'heroSectionStyleClass', + label: content.heroSectionStyleClassKey, + type: 'text', + value: content.heroSectionStyleClass, + }, ], } } @@ -266,6 +330,18 @@ const Contact: React.FC = () => { type: 'text', value: content.contactInfoTitle, }, + { + key: 'contactInfoTitleStyleClass', + label: content.contactInfoTitleStyleClassKey, + type: 'text', + value: content.contactInfoTitleStyleClass, + }, + { + key: 'contactInfoCardStyleClass', + label: content.contactInfoCardStyleClassKey, + type: 'text', + value: content.contactInfoCardStyleClass, + }, { key: 'address', label: content.addressKey, @@ -336,6 +412,12 @@ const Contact: React.FC = () => { type: 'text', value: content.bankIban, }, + { + key: 'bankStyleClass', + label: 'Public.contact.bank.styleClass', + type: 'text', + value: content.bankStyleClass, + }, ], } } @@ -370,6 +452,12 @@ const Contact: React.FC = () => { type: 'text', value: content.workWhatsapp, }, + { + key: 'workHoursStyleClass', + label: 'Public.contact.workHours.styleClass', + type: 'text', + value: content.workHoursStyleClass, + }, ], } } @@ -423,6 +511,18 @@ const Contact: React.FC = () => { type: 'text', value: content.mapReferrerPolicy, }, + { + key: 'mapContainerStyleClass', + label: 'Public.contact.map.containerStyleClass', + type: 'text', + value: content.mapContainerStyleClass, + }, + { + key: 'mapFrameStyleClass', + label: 'Public.contact.map.frameStyleClass', + type: 'text', + value: content.mapFrameStyleClass, + }, ], } } @@ -460,6 +560,7 @@ const Contact: React.FC = () => { bankBranch: content.bankBranch, bankAccountNumber: content.bankAccountNumber, bankIban: content.bankIban, + bankStyleClass: content.bankStyleClass, workHoursTitleKey: content.workHoursTitleKey, workHoursTitleValue: content.workHoursTitle, workWeekdayKey: content.workWeekdayKey, @@ -468,6 +569,7 @@ const Contact: React.FC = () => { workWeekendValue: content.workWeekend, workWhatsappKey: content.workWhatsappKey, workWhatsappValue: content.workWhatsapp, + workHoursStyleClass: content.workHoursStyleClass, mapTitleKey: content.mapTitleKey, mapTitleValue: content.mapTitle, mapSrc: content.mapSrc, @@ -476,6 +578,30 @@ const Contact: React.FC = () => { mapAllowFullScreen: content.mapAllowFullScreen.toLowerCase() === 'true', mapLoading: content.mapLoading, mapReferrerPolicy: content.mapReferrerPolicy, + mapContainerStyleClass: content.mapContainerStyleClass, + mapFrameStyleClass: content.mapFrameStyleClass, + styleTexts: [ + { + key: content.heroSectionStyleClassKey, + value: content.heroSectionStyleClass, + }, + { + key: content.heroTitleStyleClassKey, + value: content.heroTitleStyleClass, + }, + { + key: content.heroSubtitleStyleClassKey, + value: content.heroSubtitleStyleClass, + }, + { + key: content.contactInfoCardStyleClassKey, + value: content.contactInfoCardStyleClass, + }, + { + key: content.contactInfoTitleStyleClassKey, + value: content.contactInfoTitleStyleClass, + }, + ], }) await getConfig(false) @@ -548,7 +674,7 @@ const Contact: React.FC = () => { isDesignMode={isDesignMode} onSelect={handleSelectBlock} > -
+
{ }} >
-

{content?.heroTitle}

-

{content?.heroSubtitle}

+

{content?.heroTitle}

+

{content?.heroSubtitle}

@@ -574,8 +700,8 @@ const Contact: React.FC = () => { isDesignMode={isDesignMode} onSelect={handleSelectBlock} > -
-

{content?.contactInfoTitle}

+
+

{content?.contactInfoTitle}

@@ -621,7 +747,7 @@ const Contact: React.FC = () => { isDesignMode={isDesignMode} onSelect={handleSelectBlock} > -
+

{content?.bankTitle}

{ isDesignMode={isDesignMode} onSelect={handleSelectBlock} > -
+

{content?.workHoursTitle}

@@ -671,9 +797,9 @@ const Contact: React.FC = () => { isDesignMode={isDesignMode} onSelect={handleSelectBlock} > -
+

{content?.mapTitle}

-
+