change logs aswell (#21)

* kurt-19-change-logs-aswell

* fix tests
This commit is contained in:
Kurt Hutten
2023-02-03 11:09:09 +11:00
committed by GitHub
parent 487d61b862
commit 9bb4f68794
5 changed files with 38 additions and 28 deletions

View File

@ -14,6 +14,6 @@ let listener: ((rect: any) => void) | undefined = undefined
test('renders learn react link', () => { test('renders learn react link', () => {
render(<App />) render(<App />)
const linkElement = screen.getByText(/reset/i) const linkElement = screen.getByText(/Variables/i)
expect(linkElement).toBeInTheDocument() expect(linkElement).toBeInTheDocument()
}) })

View File

@ -39,11 +39,12 @@ function App() {
code, code,
setCode, setCode,
setAst, setAst,
formatCode, // formatCode,
ast, ast,
setError, setError,
errorState, errorState,
setProgramMemory, setProgramMemory,
resetLogs,
} = useStore((s) => ({ } = useStore((s) => ({
editorView: s.editorView, editorView: s.editorView,
setEditorView: s.setEditorView, setEditorView: s.setEditorView,
@ -58,10 +59,11 @@ function App() {
ast: s.ast, ast: s.ast,
setAst: s.setAst, setAst: s.setAst,
lastGuiMode: s.lastGuiMode, lastGuiMode: s.lastGuiMode,
formatCode: s.formatCode, // formatCode: s.formatCode,
setError: s.setError, setError: s.setError,
errorState: s.errorState, errorState: s.errorState,
setProgramMemory: s.setProgramMemory, setProgramMemory: s.setProgramMemory,
resetLogs: s.resetLogs,
})) }))
// const onChange = React.useCallback((value: string, viewUpdate: ViewUpdate) => { // const onChange = React.useCallback((value: string, viewUpdate: ViewUpdate) => {
const onChange = (value: string, viewUpdate: ViewUpdate) => { const onChange = (value: string, viewUpdate: ViewUpdate) => {
@ -92,21 +94,13 @@ function App() {
const tokens = lexer(code) const tokens = lexer(code)
const _ast = abstractSyntaxTree(tokens) const _ast = abstractSyntaxTree(tokens)
setAst(_ast) setAst(_ast)
resetLogs()
const programMemory = executor(_ast, { const programMemory = executor(_ast, {
root: { root: {
log: { log: {
type: 'userVal', type: 'userVal',
value: (a: any) => { value: (a: any) => {
console.log('raw log', a) addLog(a)
let b = a
if (Array.isArray(a)) {
b = a.map(({ geo, __geoMeta, ...rest }) => rest)
b = JSON.stringify(b, null, 2)
} else if (typeof a === 'object') {
const { geo, __geoMeta, ...rest } = a
b = JSON.stringify(rest, null, 2)
}
addLog(b)
}, },
__meta: [ __meta: [
{ {

View File

@ -1,7 +1,10 @@
import ReactJson from 'react-json-view'
import { useEffect } from 'react' import { useEffect } from 'react'
import { useStore } from '../useStore' import { useStore } from '../useStore'
import { PanelHeader } from './PanelHeader' import { PanelHeader } from './PanelHeader'
const ReactJsonTypeHack = ReactJson as any
export const Logs = () => { export const Logs = () => {
const { logs, resetLogs } = useStore(({ logs, resetLogs }) => ({ const { logs, resetLogs } = useStore(({ logs, resetLogs }) => ({
logs, logs,
@ -18,19 +21,16 @@ export const Logs = () => {
<PanelHeader title="Logs" /> <PanelHeader title="Logs" />
<div className="h-full relative"> <div className="h-full relative">
<div className="absolute inset-0 flex flex-col items-start"> <div className="absolute inset-0 flex flex-col items-start">
<button onClick={resetLogs}>reset</button> <ReactJsonTypeHack
<div className=" overflow-auto h-full console-tile w-full"> src={logs}
{logs.map((msg, index) => { collapsed={1}
return ( collapseStringsAfterLength={60}
<pre className="text-xs pl-2 text-sky-600" key={index}> enableClipboard={false}
<code style={{ fontFamily: 'monospace' }} key={index}> displayArrayKey={false}
<span className="text-gray-400">{'- '}</span> displayDataTypes={false}
{String(msg)} displayObjectSize={true}
</code> name={false}
</pre> />
)
})}
</div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -326,7 +326,18 @@ export const executor = (
body: [], body: [],
} }
) )
_programMemory.root[variableName] = result as any // todo memory redo if (
result.type === 'extrudeGroup' ||
result.type === 'sketchGroup'
) {
_programMemory.root[variableName] = result
} else {
_programMemory.root[variableName] = {
type: 'userVal',
value: result,
__meta,
}
}
} else { } else {
_programMemory.root[variableName] = { _programMemory.root[variableName] = {
type: 'userVal', type: 'userVal',

View File

@ -113,7 +113,12 @@ export const useStore = create<StoreState>()((set, get) => ({
}, },
logs: [], logs: [],
addLog: (log) => { addLog: (log) => {
if (Array.isArray(log)) {
const cleanLog: any = log.map(({ __geoMeta, ...rest }) => rest)
set((state) => ({ logs: [...state.logs, cleanLog] }))
} else {
set((state) => ({ logs: [...state.logs, log] })) set((state) => ({ logs: [...state.logs, log] }))
}
}, },
resetLogs: () => { resetLogs: () => {
set({ logs: [] }) set({ logs: [] })