"use client"; import { useMemo } from "react"; import Image from "next/image"; import type { InfoScreenDefinition, DefaultTexts } from "@/lib/funnel/types"; import { TemplateLayout } from "../layouts/TemplateLayout"; import { cn } from "@/lib/utils"; interface InfoTemplateProps { screen: InfoScreenDefinition; onContinue: () => void; canGoBack: boolean; onBack: () => void; screenProgress?: { current: number; total: number }; defaultTexts?: DefaultTexts; } export function InfoTemplate({ screen, onContinue, canGoBack, onBack, screenProgress, defaultTexts, }: InfoTemplateProps) { const iconSizeClasses = useMemo(() => { const size = screen.icon?.size ?? "xl"; switch (size) { case "sm": return "text-4xl"; case "md": return "text-5xl"; case "lg": return "text-6xl"; case "xl": default: return "text-8xl"; } }, [screen.icon?.size]); // Функция для проверки валидности URL const isValidUrl = (value: string): boolean => { if (!value || value.trim() === '') return false; try { new URL(value); return true; } catch { // Проверяем относительные пути (начинаются с /) и API пути return value.startsWith('/') || value.startsWith('/api/'); } }; // Создаем иконку для передачи в childrenAboveTitle const iconElement = screen.icon ? (
{screen.icon.type === "emoji" ? (
{screen.icon.value}
) : (screen.icon.value && isValidUrl(screen.icon.value)) ? (
{ console.error('Preview image load error:', screen.icon?.value, e); }} onLoad={() => { console.log('Preview image loaded successfully:', screen.icon?.value); }} /> {/* Fallback для проблемных изображений */} { console.error('Fallback image load error:', screen.icon?.value, e); }} onLoad={() => { console.log('Fallback image loaded successfully:', screen.icon?.value); }} />
) : (
📷
)}
) : null; return ( {/* Пустые дети - весь контент теперь в заголовке, подзаголовке и иконке */}
{/* Дополнительный контент если нужен */}
); }