tweak: Add debouncing for squiggle editor/playground
The lack of it was getting pretty annoying
This commit is contained in:
		
							parent
							
								
									b022ea2fae
								
							
						
					
					
						commit
						c9c3f4d6d9
					
				|  | @ -57,18 +57,32 @@ export let SquiggleEditor: React.FC<SquiggleEditorProps> = ({ | |||
|   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 ( | ||||
|     <div> | ||||
|       <div className="border border-grey-200 p-2 m-4"> | ||||
|         <CodeEditor | ||||
|           value={expression} | ||||
|           onChange={setExpression} | ||||
|           value={editorExpression} | ||||
|           onChange={setEditorExpressionAndFeedIntoSquiggleWithDebouncing} | ||||
|           oneLine={true} | ||||
|           showGutter={false} | ||||
|           height={20} | ||||
|  | @ -77,7 +91,7 @@ export let SquiggleEditor: React.FC<SquiggleEditorProps> = ({ | |||
|       <SquiggleChart | ||||
|         width={width} | ||||
|         environment={environment} | ||||
|         squiggleString={expression} | ||||
|         squiggleString={intoSquiggleExpression} | ||||
|         chartSettings={chartSettings} | ||||
|         onChange={onChange} | ||||
|         bindings={bindings} | ||||
|  |  | |||
|  | @ -200,7 +200,13 @@ const SquigglePlayground: FC<PlaygroundProps> = ({ | |||
|   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<PlaygroundProps> = ({ | |||
|     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<PlaygroundProps> = ({ | |||
|             <Tab.Panel> | ||||
|               <div className="border border-slate-200"> | ||||
|                 <CodeEditor | ||||
|                   value={squiggleString} | ||||
|                   onChange={setSquiggleString} | ||||
|                   value={editorExpression} | ||||
|                   onChange={ | ||||
|                     setEditorExpressionAndFeedIntoSquiggleWithDebouncing | ||||
|                   } | ||||
|                   oneLine={false} | ||||
|                   showGutter={true} | ||||
|                   height={height - 1} | ||||
|  | @ -410,7 +426,7 @@ const SquigglePlayground: FC<PlaygroundProps> = ({ | |||
|         <div className="w-1/2 p-2 pl-4"> | ||||
|           <div style={{ maxHeight: height }}> | ||||
|             <SquiggleChart | ||||
|               squiggleString={squiggleString} | ||||
|               squiggleString={intoSquiggleExpression} | ||||
|               environment={env} | ||||
|               chartSettings={chartSettings} | ||||
|               height={vars.chartHeight} | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user