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 = ({
= ({