Browse Source

refactor(26-01): use actual screenshot in detail modal instead of preview

- Replace WorkflowPreview component with actual template screenshot image
- Remove unused presetWorkflows memo from TemplateExplorerView
- Pass previewImage prop instead of workflow to TemplateDetailModal

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
handoff-20260429-1057
shrimbly 6 months ago
parent
commit
8007766d35
  1. 21
      src/components/quickstart/TemplateDetailModal.tsx
  2. 16
      src/components/quickstart/TemplateExplorerView.tsx

21
src/components/quickstart/TemplateDetailModal.tsx

@ -1,9 +1,7 @@
"use client"; "use client";
import { useEffect, useCallback } from "react"; import { useEffect, useCallback } from "react";
import { Node, Edge } from "@xyflow/react";
import { TemplateCategory } from "@/types/quickstart"; import { TemplateCategory } from "@/types/quickstart";
import { WorkflowPreview } from "./WorkflowPreview";
interface TemplateDetailModalProps { interface TemplateDetailModalProps {
isOpen: boolean; isOpen: boolean;
@ -18,7 +16,7 @@ interface TemplateDetailModalProps {
tags: string[]; tags: string[];
}; };
nodeCount: number; nodeCount: number;
workflow: { nodes: Node[]; edges: Edge[] }; previewImage?: string;
} }
const CATEGORY_LABELS: Record<TemplateCategory, string> = { const CATEGORY_LABELS: Record<TemplateCategory, string> = {
@ -42,7 +40,7 @@ export function TemplateDetailModal({
isLoading, isLoading,
template, template,
nodeCount, nodeCount,
workflow, previewImage,
}: TemplateDetailModalProps) { }: TemplateDetailModalProps) {
// Handle escape key to close // Handle escape key to close
const handleKeyDown = useCallback( const handleKeyDown = useCallback(
@ -117,10 +115,19 @@ export function TemplateDetailModal({
</button> </button>
</div> </div>
{/* Workflow Preview */} {/* Workflow Screenshot */}
<div className="flex-1 min-h-0 p-6 bg-neutral-950/50"> <div className="flex-1 min-h-0 p-6 bg-neutral-950/50">
<div className="w-full h-[50vh] bg-neutral-900 rounded-lg border border-neutral-800 overflow-hidden"> <div className="w-full h-[50vh] bg-neutral-900 rounded-lg border border-neutral-800 overflow-hidden flex items-center justify-center">
<WorkflowPreview workflow={workflow} /> {previewImage ? (
/* eslint-disable-next-line @next/next/no-img-element */
<img
src={previewImage}
alt={`${template.name} workflow screenshot`}
className="max-w-full max-h-full object-contain"
/>
) : (
<div className="text-neutral-500 text-sm">No preview available</div>
)}
</div> </div>
</div> </div>

16
src/components/quickstart/TemplateExplorerView.tsx

@ -71,18 +71,6 @@ export function TemplateExplorerView({
return metadata; return metadata;
}, []); }, []);
// Get workflow data for each template
const presetWorkflows = useMemo(() => {
const workflows: Record<string, { nodes: typeof PRESET_TEMPLATES[0]["workflow"]["nodes"]; edges: typeof PRESET_TEMPLATES[0]["workflow"]["edges"] } | undefined> = {};
PRESET_TEMPLATES.forEach((template) => {
workflows[template.id] = {
nodes: template.workflow.nodes,
edges: template.workflow.edges,
};
});
return workflows;
}, []);
// Get preview image for each template (first image from "full" content level) // Get preview image for each template (first image from "full" content level)
const previewImages = useMemo(() => { const previewImages = useMemo(() => {
const images: Record<string, string | undefined> = {}; const images: Record<string, string | undefined> = {};
@ -595,7 +583,7 @@ export function TemplateExplorerView({
</div> </div>
{/* Template Detail Modal */} {/* Template Detail Modal */}
{selectedTemplateId && presetWorkflows[selectedTemplateId] && ( {selectedTemplateId && (
<TemplateDetailModal <TemplateDetailModal
isOpen={true} isOpen={true}
onClose={() => setSelectedTemplateId(null)} onClose={() => setSelectedTemplateId(null)}
@ -605,7 +593,7 @@ export function TemplateExplorerView({
isLoading={loadingWorkflowId === selectedTemplateId} isLoading={loadingWorkflowId === selectedTemplateId}
template={presets.find((p) => p.id === selectedTemplateId)!} template={presets.find((p) => p.id === selectedTemplateId)!}
nodeCount={presetMetadata[selectedTemplateId]?.nodeCount ?? 0} nodeCount={presetMetadata[selectedTemplateId]?.nodeCount ?? 0}
workflow={presetWorkflows[selectedTemplateId]} previewImage={previewImages[selectedTemplateId]}
/> />
)} )}
</div> </div>

Loading…
Cancel
Save