()
| 17 | } |
| 18 | |
| 19 | function App() { |
| 20 | const [editor, setEditor] = useState<Editor>(); |
| 21 | const [ready, setReady] = useState<Editor>(); |
| 22 | const [projectData, setProjectData] = useState<ProjectData>(); |
| 23 | const [projectDataDate, setProjectDataDate] = useState<Date>(); |
| 24 | const [selectedExample, setSelectedExample] = useState(Examples.Custom); |
| 25 | const mountedIconCls = `inline-block ${editor ? 'text-green-400' : 'text-red-400'}`; |
| 26 | const readyIconCls = `inline-block ${ready ? 'text-green-400' : 'text-red-400'}`; |
| 27 | |
| 28 | const onProjectUpdate = useCallback<Required<EditorProps>['onUpdate']>(pd => { |
| 29 | setProjectData(pd); |
| 30 | setProjectDataDate(new Date()); |
| 31 | projectData; |
| 32 | }, []); |
| 33 | |
| 34 | const exampleOptions = useMemo( |
| 35 | () => |
| 36 | Object.entries(Examples).map(([key, value]) => ( |
| 37 | <option key={key} value={value}> |
| 38 | {value} |
| 39 | </option> |
| 40 | )), |
| 41 | [] |
| 42 | ); |
| 43 | |
| 44 | const onExampleChange = (ev: React.ChangeEvent<HTMLSelectElement>) => { |
| 45 | setSelectedExample(ev.target.value as Examples); |
| 46 | setEditor(undefined); |
| 47 | setReady(undefined); |
| 48 | }; |
| 49 | |
| 50 | let EditorToRender = DefaultEditor; |
| 51 | |
| 52 | switch (selectedExample) { |
| 53 | case Examples.Custom: |
| 54 | EditorToRender = CustomEditor; |
| 55 | break; |
| 56 | case Examples.DefaultCustom: |
| 57 | EditorToRender = DefaultCustomEditor; |
| 58 | break; |
| 59 | case Examples.WaitReady: |
| 60 | EditorToRender = EditorWaitReady; |
| 61 | break; |
| 62 | } |
| 63 | |
| 64 | (window as any).editor = editor; |
| 65 | |
| 66 | return ( |
| 67 | <div className="flex flex-col h-screen text-sm text-white bg-slate-900"> |
| 68 | <div className="flex gap-3 p-3 items-center"> |
| 69 | <div> |
| 70 | <select className="rounded-sm bg-slate-700 p-1" value={selectedExample} onChange={onExampleChange}> |
| 71 | {exampleOptions} |
| 72 | </select> |
| 73 | </div> |
| 74 | <div className="flex gap-2 items-center"> |
| 75 | Mounted: |
| 76 | <Icon size={0.7} path={editor ? mdiCheckBold : mdiClose} className={mountedIconCls} /> |
nothing calls this directly
no test coverage detected