Merge pull request #7 from felixroos/main

fixed editor crash
This commit is contained in:
Alex McLean 2022-02-07 22:07:58 +00:00 committed by GitHub
commit 5ecbcfffcb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 16 deletions

10
docs/dist/App.js vendored
View File

@ -43,9 +43,7 @@ function App() {
return []; return [];
} }
}, [pattern]), }, [pattern]),
onSchedule: useCallback((_events, cycle2) => { onSchedule: useCallback((_events, cycle2) => logCycle(_events, cycle2), [pattern]),
logCycle(_events, cycle2);
}, [pattern]),
ready: !!pattern ready: !!pattern
}); });
useEffect(() => { useEffect(() => {
@ -57,8 +55,12 @@ function App() {
} catch (err) { } catch (err) {
setMode("javascript"); setMode("javascript");
_pattern = parse(code); _pattern = parse(code);
if (_pattern?.constructor?.name !== "Pattern") {
const message = `got "${typeof _pattern}" instead of pattern`;
throw new Error(message + (typeof _pattern === "function" ? "did you foget to call a function?" : ""));
}
} }
setPattern(_pattern); setPattern(() => _pattern);
setError(void 0); setError(void 0);
} catch (err) { } catch (err) {
console.warn(err); console.warn(err);

View File

@ -53,31 +53,26 @@ function App() {
}, },
[pattern] [pattern]
), ),
onSchedule: useCallback( onSchedule: useCallback((_events, cycle) => logCycle(_events, cycle), [pattern]),
(_events, cycle) => {
// console.log('schedule', _events, cycle);
logCycle(_events, cycle);
},
[pattern]
),
ready: !!pattern, ready: !!pattern,
}); });
// parse pattern when code changes // parse pattern when code changes
useEffect(() => { useEffect(() => {
try { try {
let _pattern; let _pattern: Pattern;
try { try {
_pattern = h(code); _pattern = h(code);
setMode('pegjs'); // haskell mode does not recognize quotes, pegjs looks ok by accident.. setMode('pegjs'); // haskell mode does not recognize quotes, pegjs looks ok by accident..
// console.log('h _pattern', _pattern);
} catch (err) { } catch (err) {
setMode('javascript'); setMode('javascript');
// code is not haskell like // code is not haskell like
_pattern = parse(code); _pattern = parse(code);
// console.log('not haskell..', _pattern); if (_pattern?.constructor?.name !== 'Pattern') {
const message = `got "${typeof _pattern}" instead of pattern`;
throw new Error(message + (typeof _pattern === 'function' ? ', did you forget to call a function?' : '.'));
}
} }
setPattern(_pattern); setPattern(() => _pattern); // need arrow function here! otherwise if user returns a function, react will think it's a state reducer
// cycle.query(cycle.activeCycle()); // reschedule active cycle
setError(undefined); setError(undefined);
} catch (err: any) { } catch (err: any) {
console.warn(err); console.warn(err);