@ -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()
|
||||||
})
|
})
|
||||||
|
18
src/App.tsx
18
src/App.tsx
@ -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: [
|
||||||
{
|
{
|
||||||
|
@ -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>
|
||||||
|
@ -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',
|
||||||
|
@ -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: [] })
|
||||||
|
Reference in New Issue
Block a user