'use client'; import { useState } from 'react'; import { api } from '~/trpc/react'; import { ScriptCard } from './ScriptCard'; import { ScriptDetailModal } from './ScriptDetailModal'; import type { ScriptCard as ScriptCardType, Script } from '~/types/script'; interface ScriptsGridProps { onInstallScript?: (scriptPath: string, scriptName: string) => void; } export function ScriptsGrid({ onInstallScript }: ScriptsGridProps) { const [selectedSlug, setSelectedSlug] = useState(null); const [isModalOpen, setIsModalOpen] = useState(false); const { data: scriptCardsData, isLoading, error, refetch } = api.scripts.getScriptCards.useQuery(); const { data: scriptData } = api.scripts.getScriptBySlug.useQuery( { slug: selectedSlug ?? '' }, { enabled: !!selectedSlug } ); // Debug logging console.log('ScriptsGrid render:', { isLoading, error: error?.message, scriptCardsData: scriptCardsData?.success, cardsCount: scriptCardsData?.cards?.length }); const handleCardClick = (scriptCard: ScriptCardType) => { setSelectedSlug(scriptCard.slug); setIsModalOpen(true); }; const handleCloseModal = () => { setIsModalOpen(false); setSelectedSlug(null); }; if (isLoading) { return (
Loading scripts...
); } if (error || !scriptCardsData?.success) { return (

Failed to load scripts

{scriptCardsData?.error || 'Unknown error occurred'}

No JSON files found in scripts/json directory.

Use the "Resync Scripts" button to download from GitHub.

); } const scripts = scriptCardsData?.cards || []; if (!scripts || scripts.length === 0) { return (

No scripts found

No script files were found in the repository.

); } return ( <>
{scripts.map((script, index) => { // Add validation to ensure script has required properties if (!script || typeof script !== 'object') { console.warn('Invalid script object at index', index, script); return null; } return ( ); })}
); }