import React, { useState } from 'react'; import { useAppDispatch, useAppState } from '../state'; export function EventsPanel() { const dispatch = useAppDispatch(); const { design, selectedWidgetId, vscode } = useAppState(); const [eventType, setEventType] = useState('command'); const [eventName, setEventName] = useState('on_click'); const w = design.widgets.find((x) => x.id === selectedWidgetId); const widgetEvents = (id: string | undefined) => (design.events || []).filter((e) => e.widget === id); const add = () => { if (!w) { vscode.postMessage({ type: 'showError', text: 'Select a widget to add events to', }); return; } if (!eventName) { vscode.postMessage({ type: 'showError', text: 'Please fill in handler name', }); return; } if (!eventType) { vscode.postMessage({ type: 'showError', text: 'Please fill in event type', }); return; } dispatch({ type: 'addEvent', payload: { widget: w.id, type: eventType, name: eventName, code: 'pass', // Default body }, }); vscode.postMessage({ type: 'showInfo', text: `Event added: ${eventName}`, }); }; const remove = (type: string, name: string) => { if (!w) return; dispatch({ type: 'removeEvent', payload: { widget: w.id, type, name }, }); vscode.postMessage({ type: 'showInfo', text: 'Event removed' }); }; const commonEvents = [ 'command', '', '', '', '', '', '', '', '', '', '', '', ]; return (

Events & Commands

{!w ? (

Select a widget to configure events

) : (
{!commonEvents.includes(eventType) && ( setEventType(e.target.value) } /> )}
setEventName(e.target.value)} />

Configured Events

{widgetEvents(w.id).length === 0 ? (

No events added yet.

) : ( widgetEvents(w.id).map((ev) => (
{ev.type}: {ev.name}
)) )}
)}
); }