import React, { useEffect, useRef } from 'react'; import { InputGroup, Form, Row, Col } from 'react-bootstrap'; import { setAttribute } from '../socket'; import { DocStringComponent } from './DocStringComponent'; import { getIdFromFullAccessPath } from '../utils/stringUtils'; import { LevelName } from './NotificationsComponent'; interface ColouredEnumComponentProps { name: string; parentPath: string; value: string; docString?: string; readOnly: boolean; enumDict: Record; addNotification: (message: string, levelname?: LevelName) => void; } export const ColouredEnumComponent = React.memo((props: ColouredEnumComponentProps) => { const { name, parentPath: parentPath, value, docString, enumDict, readOnly, addNotification } = props; const renderCount = useRef(0); const id = getIdFromFullAccessPath(parentPath.concat('.' + name)); useEffect(() => { renderCount.current++; }); useEffect(() => { addNotification(`${parentPath}.${name} changed to ${value}.`); }, [props.value]); const handleValueChange = (newValue: string) => { setAttribute(name, parentPath, newValue); }; return (
{process.env.NODE_ENV === 'development' && (
Render count: {renderCount.current}
)} {name} {readOnly ? ( // Display the Form.Control when readOnly is true ) : ( // Display the Form.Select when readOnly is false handleValueChange(event.target.value)}> {Object.entries(enumDict).map(([key]) => ( ))} )}
); });