import React, { useEffect, useRef, useState } from 'react'; import { InputGroup, Form, Row, Col, Button, Collapse } from 'react-bootstrap'; import { emit_update } from '../socket'; import { DocStringComponent } from './DocStringComponent'; import { Slider } from '@mui/material'; import { NumberComponent } from './NumberComponent'; interface SliderComponentProps { name: string; min: number; max: number; parent_path?: string; value: number; readOnly: boolean; docString: string; stepSize: number; isInstantUpdate: boolean; } export const SliderComponent = React.memo((props: SliderComponentProps) => { const renderCount = useRef(0); const [open, setOpen] = useState(false); useEffect(() => { renderCount.current++; }); const { name, parent_path, value, min, max, stepSize, readOnly, docString, isInstantUpdate } = props; const emitSliderUpdate = ( name: string, parent_path: string, value: number, callback?: (ack: unknown) => void, min: number = props.min, max: number = props.max, stepSize: number = props.stepSize ) => { emit_update( name, parent_path, { value: value, min: min, max: max, step_size: stepSize }, callback ); }; const handleOnChange = (event, newNumber: number | number[]) => { // This will never be the case as we do not have a range slider. However, we should // make sure this is properly handled. if (Array.isArray(newNumber)) { newNumber = newNumber[0]; } emitSliderUpdate(name, parent_path, newNumber); }; const handleValueChange = (newValue: number, valueType: string) => { switch (valueType) { case 'min': emitSliderUpdate(name, parent_path, value, undefined, newValue); break; case 'max': emitSliderUpdate(name, parent_path, value, undefined, min, newValue); break; case 'stepSize': emitSliderUpdate(name, parent_path, value, undefined, min, max, newValue); break; default: break; } }; return (
Render count: {renderCount.current}
)}