deckhearth/components/CardEditorView.js
Randall Stillwell b8bdacefda refactor(card-editor): useCardEditor + CardEditorView (Brief 3)
Extract admin editor state into useCardEditor and UI into CardEditorView;
keep dynamic(ssr: false) on the page export. Page is ~40 lines.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-03 17:30:29 -05:00

100 lines
3.1 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import CardEditorForm from './CardEditorForm';
import CardEditorPreview from './CardEditorPreview';
import CardEditorSearchPanel from './CardEditorSearchPanel';
export default function CardEditorView({
card,
formData,
handleColorChange,
handleInputChange,
handleSave,
message,
onSearchQueryChange,
router,
saving,
searchLoading,
searchQuery,
searchResults,
selectCard,
showEmptyState,
}) {
return (
<div className="container mx-auto px-6 py-8">
<div className="mb-8 p-4 rounded-xl" style={{ backgroundColor: 'var(--bg-secondary)' }}>
<div className="flex items-center justify-between">
<h1 className="text-2xl font-bold" style={{ color: 'var(--text-primary)' }}>
Admin Tools
</h1>
<div className="flex gap-4">
<button
type="button"
onClick={() => router.push('/admin/card-editor')}
className="px-4 py-2 rounded-lg font-medium gradient-bg-purple text-white"
>
🖊 Card Editor
</button>
<button
type="button"
onClick={() => router.push('/admin/card-import')}
className="px-4 py-2 rounded-lg font-medium transition-all duration-200 border"
style={{
backgroundColor: 'var(--bg-primary)',
borderColor: 'var(--border)',
color: 'var(--text-primary)',
}}
>
📥 Card Import
</button>
</div>
</div>
</div>
<div className="mb-8">
<h2 className="text-3xl font-bold mb-2" style={{ color: 'var(--text-primary)' }}>
Admin Card Editor
</h2>
<p style={{ color: 'var(--text-secondary)' }}>
Search for a card to edit its details, or continue editing the selected card.
</p>
</div>
<CardEditorSearchPanel
searchQuery={searchQuery}
onSearchQueryChange={onSearchQueryChange}
searchLoading={searchLoading}
searchResults={searchResults}
onSelectCard={selectCard}
/>
{card && (
<div className="grid grid-cols-1 lg:grid-cols-3 gap-8">
<div className="lg:col-span-1">
<CardEditorPreview formData={formData} />
</div>
<div className="lg:col-span-2">
<CardEditorForm
formData={formData}
onInputChange={handleInputChange}
onColorChange={handleColorChange}
onSave={handleSave}
saving={saving}
message={message}
/>
</div>
</div>
)}
{showEmptyState && (
<div className="text-center py-12">
<div className="text-6xl mb-4">🔍</div>
<h2 className="text-2xl font-bold mb-2" style={{ color: 'var(--text-primary)' }}>
Search for a Card to Edit
</h2>
<p style={{ color: 'var(--text-secondary)' }}>
Use the search box above to find a card you want to edit.
</p>
</div>
)}
</div>
);
}