Files
modeling-app/src/components/MemoryPanel.tsx

69 lines
2.1 KiB
TypeScript
Raw Normal View History

2023-02-03 10:04:16 +11:00
import ReactJson from 'react-json-view'
import { CollapsiblePanel, CollapsiblePanelProps } from './CollapsiblePanel'
import { useStore } from '../useStore'
2023-02-03 10:04:16 +11:00
import { useMemo } from 'react'
import { ProgramMemory, Path, ExtrudeSurface } from '../lang/executor'
import { Themes } from '../lib/theme'
2023-02-03 10:04:16 +11:00
interface MemoryPanelProps extends CollapsiblePanelProps {
theme?: Exclude<Themes, Themes.System>
}
export const MemoryPanel = ({
theme = Themes.Light,
...props
}: MemoryPanelProps) => {
2023-02-03 10:04:16 +11:00
const { programMemory } = useStore((s) => ({
programMemory: s.programMemory,
}))
const ProcessedMemory = useMemo(
() => processMemory(programMemory),
[programMemory]
)
return (
<CollapsiblePanel {...props}>
2023-02-03 10:04:16 +11:00
<div className="h-full relative">
<div className="absolute inset-0 flex flex-col items-start">
<div className=" h-full console-tile w-full">
2023-02-03 10:04:16 +11:00
<ReactJson
src={ProcessedMemory}
collapsed={1}
collapseStringsAfterLength={60}
enableClipboard={false}
displayDataTypes={false}
displayObjectSize={true}
2023-02-03 11:31:37 +11:00
indentWidth={2}
quotesOnKeys={false}
2023-02-03 10:04:16 +11:00
name={false}
theme={theme === 'light' ? 'rjv-default' : 'monokai'}
2023-02-03 10:04:16 +11:00
/>
</div>
</div>
</div>
</CollapsiblePanel>
2023-02-03 10:04:16 +11:00
)
}
export const processMemory = (programMemory: ProgramMemory) => {
const processedMemory: any = {}
Object.keys(programMemory.root).forEach((key) => {
const val = programMemory.root[key]
if (typeof val.value !== 'function') {
if (val.type === 'SketchGroup') {
processedMemory[key] = val.value.map(({ __geoMeta, ...rest }: Path) => {
return rest
})
} else if (val.type === 'ExtrudeGroup') {
processedMemory[key] = val.value.map(({ ...rest }: ExtrudeSurface) => {
2023-02-03 10:04:16 +11:00
return rest
})
} else {
processedMemory[key] = val.value
}
} else if (key !== 'log') {
processedMemory[key] = '__function__'
}
})
return processedMemory
}