From c9c3f4d6d99d9acf5412e799bd65172231e7dbff Mon Sep 17 00:00:00 2001 From: NunoSempere Date: Wed, 8 Jun 2022 11:10:30 -0400 Subject: [PATCH] tweak: Add debouncing for squiggle editor/playground The lack of it was getting pretty annoying --- .../src/components/SquiggleEditor.tsx | 22 +++++++++++++---- .../src/components/SquigglePlayground.tsx | 24 +++++++++++++++---- 2 files changed, 38 insertions(+), 8 deletions(-) diff --git a/packages/components/src/components/SquiggleEditor.tsx b/packages/components/src/components/SquiggleEditor.tsx index e35de4f5..17e3e4c9 100644 --- a/packages/components/src/components/SquiggleEditor.tsx +++ b/packages/components/src/components/SquiggleEditor.tsx @@ -57,18 +57,32 @@ export let SquiggleEditor: React.FC = ({ showControls = false, showSummary = false, }: SquiggleEditorProps) => { - const [expression, setExpression] = React.useState(initialSquiggleString); + const [editorExpression, setEditorExpression] = React.useState( + initialSquiggleString + ); + const [intoSquiggleExpression, setIntoSquiggleExpression] = React.useState( + initialSquiggleString + ); + const [intoSquiggleTimeout, setIntoSquiggleTimeout] = React.useState(null); const chartSettings = { start: diagramStart, stop: diagramStop, count: diagramCount, }; + const setEditorExpressionAndFeedIntoSquiggleWithDebouncing = (value) => { + setEditorExpression(value); + clearTimeout(intoSquiggleTimeout); + const newTimeout = setTimeout(() => { + setIntoSquiggleExpression(value); + }, 500); + setIntoSquiggleTimeout(newTimeout); + }; return (
= ({ = ({ showControls = false, showSummary = false, }) => { - const [squiggleString, setSquiggleString] = useState(initialSquiggleString); + const [editorExpression, setEditorExpression] = React.useState( + initialSquiggleString + ); + const [intoSquiggleExpression, setIntoSquiggleExpression] = React.useState( + initialSquiggleString + ); + const [intoSquiggleTimeout, setIntoSquiggleTimeout] = React.useState(null); const [importString, setImportString] = useState("{}"); const [imports, setImports] = useState({}); const [importsAreValid, setImportsAreValid] = useState(true); @@ -232,6 +238,14 @@ const SquigglePlayground: FC = ({ sampleCount: Number(vars.sampleCount), xyPointLength: Number(vars.xyPointLength), }; + const setEditorExpressionAndFeedIntoSquiggleWithDebouncing = (value) => { + setEditorExpression(value); + clearTimeout(intoSquiggleTimeout); + const newTimeout = setTimeout(() => { + setIntoSquiggleExpression(value); + }, 500); + setIntoSquiggleTimeout(newTimeout); + }; const getChangeJson = (r: string) => { setImportString(r); try { @@ -393,8 +407,10 @@ const SquigglePlayground: FC = ({
= ({