import React, { useState, useMemo } from 'react'; import { HiCodeBracket, HiAdjustmentsHorizontal, HiCog6Tooth, } from 'react-icons/hi2'; import { Tabs, TabsList, TabsTrigger, TabsContent } from '../../../ui/tabs'; import { ScrollArea } from '../../../ui/scroll-area'; import Typography from '../../../ui/Typography'; import { useBlockTesterStore, useBlockValidation, } from '../../../../stores/blockTesterStore'; import { AttributeSchema } from '../../../../types/block-tester.types'; import { cn } from '../../../../lib/utils'; import TemplateEditor from './TemplateEditor'; import AttributeEditor from './AttributeEditor'; import InscriptionButton from '../inscription/InscriptionButton'; import InscriptionStatusModal from '../inscription/InscriptionStatusModal'; interface BlockEditorProps { className?: string; } const BlockEditor: React.FC = ({ className }) => { const { currentBlock, template, attributes, updateTemplate, updateAttributes, } = useBlockTesterStore(); const validateBlock = useBlockValidation(); const validation = useMemo(() => validateBlock(), [validateBlock]); const [activeTab, setActiveTab] = useState('template'); const handleTemplateChange = (newTemplate: string) => { updateTemplate(newTemplate); }; const handleAttributesChange = (newAttributes: Record) => { const convertedAttributes = Object.fromEntries( Object.entries(newAttributes).map(([key, data]) => [ key, data && typeof data === 'object' && 'schema' in data ? data : { schema: data, value: '' } ]) ); updateAttributes(convertedAttributes); }; const convertToAttributeData = (attrs: Record): Record => { return Object.fromEntries( Object.entries(attrs).map(([key, value]) => { if (value && typeof value === 'object' && 'schema' in value) { return [key, value]; } return [key, { schema: value || { type: 'string' as const, label: key, required: false, default: '' }, value: '' }]; }) ); }; if (!currentBlock) { return null; } return (
Block Description Required for inscription
{ if (currentBlock) { useBlockTesterStore.setState({ currentBlock: { ...currentBlock, description: e.target.value, modified: new Date(), }, }); } }} />
Template Attributes Settings
Block Information
Name:{' '} {currentBlock.name || 'Untitled'}
Category:{' '} {currentBlock.category || 'custom'}
Created:{' '} {new Date(currentBlock.created).toLocaleDateString()}
Modified:{' '} {new Date(currentBlock.modified).toLocaleDateString()}
Description