From 78f2cb62aa469d36982b37441ac4f42231fb319b Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 20 Jun 2026 20:02:55 -0400 Subject: [PATCH] Fix Block --- .../components/page-builder/BannerForm.tsx | 6 ++-- .../page-builder/EditorialCarouselForm.tsx | 6 ++-- .../page-builder/EditorialTileForm.tsx | 6 ++-- .../page-builder/HeroArticleForm.tsx | 10 +++--- .../src/components/page-builder/HeroForm.tsx | 6 ++-- apps/admin/src/pages/PageBuilderPage.tsx | 31 +++++++++++++++++++ 6 files changed, 53 insertions(+), 12 deletions(-) diff --git a/apps/admin/src/components/page-builder/BannerForm.tsx b/apps/admin/src/components/page-builder/BannerForm.tsx index 184f047..fc54799 100644 --- a/apps/admin/src/components/page-builder/BannerForm.tsx +++ b/apps/admin/src/components/page-builder/BannerForm.tsx @@ -6,6 +6,7 @@ interface BannerFormProps { editingLang: string; getLocalizedValue: (payload: any, field: string) => string; updateLocalizedValue: (field: string, value: string) => void; + updatePayloadValue: (field: string, value: string | number) => void; setUploadTarget: (target: { type: 'main' | 'slide'; index?: number } | null) => void; setIsMediaModalOpen: (open: boolean) => void; } @@ -14,6 +15,7 @@ export default function BannerForm({ editingSection, getLocalizedValue, updateLocalizedValue, + updatePayloadValue, setUploadTarget, setIsMediaModalOpen, }: BannerFormProps) { @@ -69,8 +71,8 @@ export default function BannerForm({ updateLocalizedValue('linkUrl', e.target.value)} + value={editingSection.payload?.linkUrl || ''} + onChange={(e) => updatePayloadValue('linkUrl', e.target.value)} className="admin-input w-full" /> diff --git a/apps/admin/src/components/page-builder/EditorialCarouselForm.tsx b/apps/admin/src/components/page-builder/EditorialCarouselForm.tsx index 726eb31..b71d0ec 100644 --- a/apps/admin/src/components/page-builder/EditorialCarouselForm.tsx +++ b/apps/admin/src/components/page-builder/EditorialCarouselForm.tsx @@ -10,6 +10,7 @@ interface EditorialCarouselFormProps { updateLocalizedValue: (field: string, value: string) => void; getLocalizedSlideValue: (slide: any, field: string) => string; updateLocalizedSlideValue: (idx: number, field: string, value: string) => void; + updateSlidePayloadValue: (idx: number, field: string, value: string | number) => void; setUploadTarget: (target: { type: 'main' | 'slide'; index?: number } | null) => void; setIsMediaModalOpen: (open: boolean) => void; } @@ -21,6 +22,7 @@ export default function EditorialCarouselForm({ updateLocalizedValue, getLocalizedSlideValue, updateLocalizedSlideValue, + updateSlidePayloadValue, setUploadTarget, setIsMediaModalOpen, }: EditorialCarouselFormProps) { @@ -155,8 +157,8 @@ export default function EditorialCarouselForm({ updateLocalizedSlideValue(idx, 'buttonLink', e.target.value)} + value={slide.buttonLink || ''} + onChange={(e) => updateSlidePayloadValue(idx, 'buttonLink', e.target.value)} className="admin-input w-full text-xs" /> diff --git a/apps/admin/src/components/page-builder/EditorialTileForm.tsx b/apps/admin/src/components/page-builder/EditorialTileForm.tsx index d477d71..08ad328 100644 --- a/apps/admin/src/components/page-builder/EditorialTileForm.tsx +++ b/apps/admin/src/components/page-builder/EditorialTileForm.tsx @@ -8,6 +8,7 @@ interface EditorialTileFormProps { editingLang: string; getLocalizedValue: (payload: any, field: string) => string; updateLocalizedValue: (field: string, value: string) => void; + updatePayloadValue: (field: string, value: string | number) => void; setUploadTarget: (target: { type: 'main' | 'slide'; index?: number } | null) => void; setIsMediaModalOpen: (open: boolean) => void; } @@ -17,6 +18,7 @@ export default function EditorialTileForm({ setEditingSection, getLocalizedValue, updateLocalizedValue, + updatePayloadValue, setUploadTarget, setIsMediaModalOpen, }: EditorialTileFormProps) { @@ -117,8 +119,8 @@ export default function EditorialTileForm({ updateLocalizedValue('buttonLink', e.target.value)} + value={editingSection.payload?.buttonLink || ''} + onChange={(e) => updatePayloadValue('buttonLink', e.target.value)} className="admin-input w-full" /> diff --git a/apps/admin/src/components/page-builder/HeroArticleForm.tsx b/apps/admin/src/components/page-builder/HeroArticleForm.tsx index ecd1647..6691c2b 100644 --- a/apps/admin/src/components/page-builder/HeroArticleForm.tsx +++ b/apps/admin/src/components/page-builder/HeroArticleForm.tsx @@ -8,6 +8,7 @@ interface HeroArticleFormProps { editingLang: string; getLocalizedValue: (payload: any, field: string) => string; updateLocalizedValue: (field: string, value: string) => void; + updatePayloadValue: (field: string, value: string | number) => void; setUploadTarget: (target: { type: 'main' | 'slide'; index?: number } | null) => void; setIsMediaModalOpen: (open: boolean) => void; } @@ -17,6 +18,7 @@ export default function HeroArticleForm({ setEditingSection, getLocalizedValue, updateLocalizedValue, + updatePayloadValue, setUploadTarget, setIsMediaModalOpen, }: HeroArticleFormProps) { @@ -74,8 +76,8 @@ export default function HeroArticleForm({ updateLocalizedValue('author', e.target.value)} + value={editingSection.payload?.author || ''} + onChange={(e) => updatePayloadValue('author', e.target.value)} className="admin-input w-full" placeholder="Author name" /> @@ -85,8 +87,8 @@ export default function HeroArticleForm({ updateLocalizedValue('category', e.target.value)} + value={editingSection.payload?.category || ''} + onChange={(e) => updatePayloadValue('category', e.target.value)} className="admin-input w-full" placeholder="Story" /> diff --git a/apps/admin/src/components/page-builder/HeroForm.tsx b/apps/admin/src/components/page-builder/HeroForm.tsx index b417c0c..7ebe1f2 100644 --- a/apps/admin/src/components/page-builder/HeroForm.tsx +++ b/apps/admin/src/components/page-builder/HeroForm.tsx @@ -6,6 +6,7 @@ interface HeroFormProps { editingLang: string; getLocalizedValue: (payload: any, field: string) => string; updateLocalizedValue: (field: string, value: string) => void; + updatePayloadValue: (field: string, value: string | number) => void; setUploadTarget: (target: { type: 'main' | 'slide'; index?: number } | null) => void; setIsMediaModalOpen: (open: boolean) => void; } @@ -14,6 +15,7 @@ export default function HeroForm({ editingSection, getLocalizedValue, updateLocalizedValue, + updatePayloadValue, setUploadTarget, setIsMediaModalOpen, }: HeroFormProps) { @@ -95,8 +97,8 @@ export default function HeroForm({ updateLocalizedValue('buttonLink', e.target.value)} + value={editingSection.payload?.buttonLink || ''} + onChange={(e) => updatePayloadValue('buttonLink', e.target.value)} className="admin-input w-full" /> diff --git a/apps/admin/src/pages/PageBuilderPage.tsx b/apps/admin/src/pages/PageBuilderPage.tsx index 38f589a..d45d14a 100644 --- a/apps/admin/src/pages/PageBuilderPage.tsx +++ b/apps/admin/src/pages/PageBuilderPage.tsx @@ -118,6 +118,19 @@ export default function PageBuilderPage() { }); }; + const updatePayloadValue = (field: string, value: string | number) => { + setEditingSection(prev => { + if (!prev) return null; + return { + ...prev, + payload: { + ...(prev.payload || {}), + [field]: value + } + }; + }); + }; + const getLocalizedSlideValue = (slide: any, field: string) => { if (!slide || slide[field] === undefined) return ''; const val = slide[field]; @@ -150,6 +163,19 @@ export default function PageBuilderPage() { }); }; + const updateSlidePayloadValue = (idx: number, field: string, value: string | number) => { + setEditingSection(prev => { + if (!prev) return null; + const currentSlides = [...(prev.payload?.slides || [])]; + const slide = currentSlides[idx] || {}; + currentSlides[idx] = { ...slide, [field]: value }; + return { + ...prev, + payload: { ...(prev.payload || {}), slides: currentSlides } + }; + }); + }; + const getLocalizedAnnouncementSlide = (slide: any) => { if (typeof slide === 'string') { return editingLang === 'th' ? slide : ''; @@ -1047,6 +1073,7 @@ export default function PageBuilderPage() { editingLang={editingLang} getLocalizedValue={getLocalizedValue} updateLocalizedValue={updateLocalizedValue} + updatePayloadValue={updatePayloadValue} setUploadTarget={setUploadTarget} setIsMediaModalOpen={setIsMediaModalOpen} /> @@ -1079,6 +1106,7 @@ export default function PageBuilderPage() { editingLang={editingLang} getLocalizedValue={getLocalizedValue} updateLocalizedValue={updateLocalizedValue} + updatePayloadValue={updatePayloadValue} setUploadTarget={setUploadTarget} setIsMediaModalOpen={setIsMediaModalOpen} /> @@ -1093,6 +1121,7 @@ export default function PageBuilderPage() { updateLocalizedValue={updateLocalizedValue} getLocalizedSlideValue={getLocalizedSlideValue} updateLocalizedSlideValue={updateLocalizedSlideValue} + updateSlidePayloadValue={updateSlidePayloadValue} setUploadTarget={setUploadTarget} setIsMediaModalOpen={setIsMediaModalOpen} /> @@ -1126,6 +1155,7 @@ export default function PageBuilderPage() { editingLang={editingLang} getLocalizedValue={getLocalizedValue} updateLocalizedValue={updateLocalizedValue} + updatePayloadValue={updatePayloadValue} setUploadTarget={setUploadTarget} setIsMediaModalOpen={setIsMediaModalOpen} /> @@ -1148,6 +1178,7 @@ export default function PageBuilderPage() { editingLang={editingLang} getLocalizedValue={getLocalizedValue} updateLocalizedValue={updateLocalizedValue} + updatePayloadValue={updatePayloadValue} setUploadTarget={setUploadTarget} setIsMediaModalOpen={setIsMediaModalOpen} />