"use client" import type React from "react" import { useEffect, useState } from "react" import { X } from "lucide-react" import TemplatePreviewModal from "@/components/common/TemplatePreviewModal" import { PcTemplateModal } from "@/components/ChatInputBox/PcTemplateModal" import { useTemplateStoryServiceHook } from "@/app/service/Interaction/templateStoryService" /** * A compact template showcase with a header and link to all templates. * Shows first 12 templates, in 3 columns, each with thumbnail, name and brief. * @returns {JSX.Element} - FamousTemplate component */ const FamousTemplate: React.FC = () => { const { templateStoryList, getTemplateStoryList, isLoading } = useTemplateStoryServiceHook() const [isModalOpen, setIsModalOpen] = useState(false) const [initialTemplateId, setInitialTemplateId] = useState(undefined) const [isTemplateCreating, setIsTemplateCreating] = useState(false) const [isRoleGenerating, setIsRoleGenerating] = useState<{ [key: string]: boolean }>({}) const [isItemGenerating, setIsItemGenerating] = useState<{ [key: string]: boolean }>({}) const [activeTemplateId, setActiveTemplateId] = useState(null) const [isPreviewReady, setIsPreviewReady] = useState(false) const [activeTab, setActiveTab] = useState<"all" | "music" | "animation" | "fantasy">("all") useEffect(() => { void getTemplateStoryList() }, [getTemplateStoryList]) const filteredTemplates = templateStoryList.filter((t) => { if (activeTab === "all") return true const categories = (t.category || "").split(",").map((s) => s.trim().toLowerCase()) return categories.includes(activeTab) }) const topTemplates = filteredTemplates return (

Hot Templates

{(["all", "music", "animation", "fantasy"] as const).map((tab) => ( ))}
{isLoading ? (
Loading...
) : (
{topTemplates.map((t) => { return (
{t.name}
{t.name}
{ const id = t.id || t.template_id if (t.show_url) { if (activeTemplateId === id) { setActiveTemplateId(null) } else { setIsPreviewReady(false) setActiveTemplateId(id) } } else { setInitialTemplateId(id) setIsModalOpen(true) } }} />
) })}
)} {/* Centered modal for active template preview */} {activeTemplateId && (() => { const active = topTemplates.find((x) => (x.id || x.template_id) === activeTemplateId) if (!active || !active.show_url) return null return ( setActiveTemplateId(null)} title={active.name} description={active.generateText || active.name} onPrimaryAction={() => { setInitialTemplateId(active.id || active.template_id) setIsModalOpen(true) setActiveTemplateId(null) }} primaryLabel="Try it Free" /> ) })()} setIsModalOpen(false)} initialTemplateId={initialTemplateId} configOptions={{ mode: "auto", resolution: "720p", language: "english", videoDuration: "auto" }} />
) } export default FamousTemplate