import React, { useEffect, useRef } from 'react'; import { ToggleButton } from 'react-bootstrap'; import { emit_update } from '../socket'; import { DocStringComponent } from './DocStringComponent'; import { getIdFromFullAccessPath } from '../utils/stringUtils'; interface ButtonComponentProps { name: string; parentPath?: string; value: boolean; readOnly: boolean; docString: string; mapping?: [string, string]; // Enforce a tuple of two strings addNotification: (message: string) => void; } export const ButtonComponent = React.memo((props: ButtonComponentProps) => { const { name, parentPath, value, readOnly, docString, mapping, addNotification } = props; const buttonName = mapping ? (value ? mapping[0] : mapping[1]) : name; const id = getIdFromFullAccessPath(parentPath.concat('.' + name)); const renderCount = useRef(0); useEffect(() => { renderCount.current++; }); useEffect(() => { addNotification(`${parentPath}.${name} changed to ${value}.`); }, [props.value]); const setChecked = (checked: boolean) => { emit_update(name, parentPath, checked); }; return (
{process.env.NODE_ENV === 'development' && (

Render count: {renderCount.current}

)} setChecked(e.currentTarget.checked)}>

{buttonName}

); });