clear old engine ids (#415)

* clear old engine ids

* animate re-execute and deffer execution for user typing
This commit is contained in:
Kurt Hutten
2023-09-08 17:50:37 +10:00
committed by GitHub
parent 0120a89d9c
commit 3bccae492d
5 changed files with 304 additions and 188 deletions

View File

@ -95,6 +95,9 @@ export function App() {
didDragInStream,
setStreamDimensions,
streamDimensions,
setIsExecuting,
defferedCode,
defferedSetCode,
} = useStore((s) => ({
editorView: s.editorView,
setEditorView: s.setEditorView,
@ -103,7 +106,9 @@ export function App() {
setGuiMode: s.setGuiMode,
addLog: s.addLog,
code: s.code,
defferedCode: s.defferedCode,
setCode: s.setCode,
defferedSetCode: s.defferedSetCode,
setAst: s.setAst,
setError: s.setError,
setProgramMemory: s.setProgramMemory,
@ -132,6 +137,7 @@ export function App() {
didDragInStream: s.didDragInStream,
setStreamDimensions: s.setStreamDimensions,
streamDimensions: s.streamDimensions,
setIsExecuting: s.setIsExecuting,
}))
const {
@ -182,7 +188,7 @@ export function App() {
// const onChange = React.useCallback((value: string, viewUpdate: ViewUpdate) => {
const onChange = (value: string, viewUpdate: ViewUpdate) => {
setCode(value)
defferedSetCode(value)
if (isTauri() && pathParams.id) {
// Save the file to disk
// Note that PROJECT_ENTRYPOINT is hardcoded until we support multiple files
@ -287,16 +293,17 @@ export function App() {
let unsubFn: any[] = []
const asyncWrap = async () => {
try {
if (!code) {
if (!defferedCode) {
setAst(null)
return
}
const _ast = await asyncParser(code)
const _ast = await asyncParser(defferedCode)
setAst(_ast)
resetLogs()
resetKCLErrors()
engineCommandManager.endSession()
engineCommandManager.startNewSession()
setIsExecuting(true)
const programMemory = await _executor(
_ast,
{
@ -328,6 +335,7 @@ export function App() {
const { artifactMap, sourceRangeMap } =
await engineCommandManager.waitForAllCommands()
setIsExecuting(false)
setArtifactMap({ artifactMap, sourceRangeMap })
const unSubHover = engineCommandManager.subscribeToUnreliable({
@ -362,6 +370,7 @@ export function App() {
setError()
} catch (e: any) {
setIsExecuting(false)
if (e instanceof KCLError) {
addKCLError(e)
} else {
@ -375,7 +384,7 @@ export function App() {
return () => {
unsubFn.forEach((fn) => fn())
}
}, [code, isStreamReady, engineCommandManager])
}, [defferedCode, isStreamReady, engineCommandManager])
const debounceSocketSend = throttle<EngineCommand>((message) => {
engineCommandManager?.sendSceneCommand(message)