'use client';
import React, { useState } from 'react';
import { TemplateStyles } from '@/data/templates';
export interface ThreeColumnLayoutProps {
title: string;
columns: Array<{ heading: string; text: string }>;
styles: TemplateStyles;
slideId?: string;
isEditable?: boolean;
onFieldUpdate?: (slideId: string, field: string, value: string, index?: number) => void;
}
export default function ThreeColumnLayout({
title,
columns,
styles,
slideId,
isEditable = false,
onFieldUpdate,
}: ThreeColumnLayoutProps) {
const [editingField, setEditingField] = useState<{ field: string; index?: number; sub?: string } | null>(null);
const [tempTitle, setTempTitle] = useState(title);
const [tempColumns, setTempColumns] = useState(columns);
const handleBlur = (field: string, index?: number) => {
if (!slideId || !onFieldUpdate) return;
if (field === 'title' && tempTitle !== title) onFieldUpdate(slideId, 'title', tempTitle);
if (field === 'columns' && index !== undefined) {
onFieldUpdate(slideId, 'columns', JSON.stringify(tempColumns[index]), index);
}
setEditingField(null);
};
const handleKeyDown = (e: React.KeyboardEvent, field: string, index?: number) => {
if (e.key === 'Enter') { e.preventDefault(); handleBlur(field, index); }
if (e.key === 'Escape') {
setEditingField(null);
setTempTitle(title);
setTempColumns(columns);
}
};
return (
{styles.dotPattern && (
)}
{/* Title */}
{editingField?.field === 'title' ? (
setTempTitle(e.target.value)}
onBlur={() => handleBlur('title')}
onKeyDown={(e) => handleKeyDown(e, 'title')}
className="bg-transparent outline-none mb-8"
style={{
fontFamily: styles.fonts.heading,
fontSize: '42px',
fontWeight: 'bold',
textTransform: 'uppercase',
backgroundColor: styles.colors.accent,
border: `${styles.border.width} solid ${styles.colors.border}`,
boxShadow: styles.border.shadow,
padding: '8px 24px',
color: styles.colors.text,
}}
autoFocus
/>
) : (
{ if (isEditable) { setEditingField({ field: 'title' }); setTempTitle(title); } }}
>
{title}
)}
{/* Three Columns */}
{columns.map((col, i) => (
{/* Column number */}
{String(i + 1).padStart(2, '0')}
{/* Heading */}
{editingField?.field === 'columns' && editingField?.index === i && editingField?.sub === 'heading' ? (
{
const next = [...tempColumns];
next[i] = { ...next[i], heading: e.target.value };
setTempColumns(next);
}}
onBlur={() => handleBlur('columns', i)}
onKeyDown={(e) => handleKeyDown(e, 'columns', i)}
className="bg-transparent outline-none mb-3"
style={{ fontFamily: styles.fonts.heading, fontSize: '22px', fontWeight: 'bold', color: styles.colors.text }}
autoFocus
/>
) : (
{ if (isEditable) { setEditingField({ field: 'columns', index: i, sub: 'heading' }); setTempColumns(columns); } }}
>
{col.heading}
)}
{/* Text */}
{editingField?.field === 'columns' && editingField?.index === i && editingField?.sub === 'text' ? (
))}
);
}