frontend: introducing DocStringComponent

This commit is contained in:
Mose Müller 2023-08-02 12:06:20 +02:00
parent 68c3f6659e
commit bae1752e48
4 changed files with 31 additions and 31 deletions

View File

@ -1,6 +1,7 @@
import React, { useEffect, useRef } from 'react'; import React, { useEffect, useRef } from 'react';
import { OverlayTrigger, Badge, Tooltip, ToggleButton } from 'react-bootstrap'; import { OverlayTrigger, Badge, Tooltip, ToggleButton } from 'react-bootstrap';
import { socket } from '../socket'; import { socket } from '../socket';
import { DocStringComponent } from './DocStringComponent';
interface ButtonComponentProps { interface ButtonComponentProps {
name: string; name: string;
@ -21,8 +22,6 @@ export const ButtonComponent = React.memo((props: ButtonComponentProps) => {
const buttonName = mapping ? (value ? mapping[0] : mapping[1]) : name; const buttonName = mapping ? (value ? mapping[0] : mapping[1]) : name;
const tooltip = <Tooltip id="tooltip">{docString}</Tooltip>;
const setChecked = (checked: boolean) => { const setChecked = (checked: boolean) => {
socket.emit('frontend_update', { socket.emit('frontend_update', {
name: name, name: name,
@ -34,6 +33,8 @@ export const ButtonComponent = React.memo((props: ButtonComponentProps) => {
return ( return (
<div className={'component boolean'} id={parent_path.concat('.' + name)}> <div className={'component boolean'} id={parent_path.concat('.' + name)}>
<p>Render count: {renderCount.current}</p> <p>Render count: {renderCount.current}</p>
<DocStringComponent docString={docString} />
<ToggleButton <ToggleButton
id="toggle-check" id="toggle-check"
type="checkbox" type="checkbox"
@ -44,14 +45,6 @@ export const ButtonComponent = React.memo((props: ButtonComponentProps) => {
onChange={(e) => setChecked(e.currentTarget.checked)}> onChange={(e) => setChecked(e.currentTarget.checked)}>
<p>{buttonName}</p> <p>{buttonName}</p>
</ToggleButton> </ToggleButton>
{docString && (
<OverlayTrigger placement="bottom" overlay={tooltip}>
<Badge pill className="tooltip-trigger" bg="light" text="dark">
?
</Badge>
</OverlayTrigger>
)}
</div> </div>
); );
}); });

View File

@ -0,0 +1,23 @@
import { Badge, Tooltip, OverlayTrigger } from 'react-bootstrap';
import React from 'react';
interface DocStringProps {
docString?: string;
}
export const DocStringComponent = React.memo((props: DocStringProps) => {
const { docString } = props;
if (!docString) {
return null; // render nothing if docString is not provided
}
const tooltip = <Tooltip id="tooltip">{docString}</Tooltip>;
return (
<OverlayTrigger placement="bottom" overlay={tooltip}>
<Badge pill className="tooltip-trigger" bg="light" text="dark">
?
</Badge>
</OverlayTrigger>
);
});

View File

@ -8,6 +8,7 @@ import {
Button Button
} from 'react-bootstrap'; } from 'react-bootstrap';
import { socket } from '../socket'; import { socket } from '../socket';
import { DocStringComponent } from './DocStringComponent';
// TODO: add button functionality // TODO: add button functionality
@ -138,8 +139,6 @@ export const NumberComponent = React.memo((props: ButtonComponentProps) => {
const { name, parent_path, value, readOnly, docString } = props; const { name, parent_path, value, readOnly, docString } = props;
const tooltip = <Tooltip id="tooltip">{docString}</Tooltip>;
const handleKeyDown = (event) => { const handleKeyDown = (event) => {
const { key, target } = event; const { key, target } = event;
if (key === 'F5' || key === 'ArrowRight' || key === 'ArrowLeft') { if (key === 'F5' || key === 'ArrowRight' || key === 'ArrowLeft') {
@ -209,6 +208,7 @@ export const NumberComponent = React.memo((props: ButtonComponentProps) => {
return ( return (
<div className={'component boolean'} id={parent_path.concat(name)}> <div className={'component boolean'} id={parent_path.concat(name)}>
<p>Render count: {renderCount.current}</p> <p>Render count: {renderCount.current}</p>
<DocStringComponent docString={docString} />
<div className="row"> <div className="row">
<div className="col-2 d-flex"> <div className="col-2 d-flex">
<InputGroup> <InputGroup>
@ -236,14 +236,6 @@ export const NumberComponent = React.memo((props: ButtonComponentProps) => {
</div> </div>
</div> </div>
</div> </div>
{docString && (
<OverlayTrigger placement="bottom" overlay={tooltip}>
<Badge pill className="tooltip-trigger" bg="light" text="dark">
?
</Badge>
</OverlayTrigger>
)}
</div> </div>
); );
}); });

View File

@ -11,8 +11,8 @@ import {
Collapse Collapse
} from 'react-bootstrap'; } from 'react-bootstrap';
import { socket } from '../socket'; import { socket } from '../socket';
import './NumberComponent.css';
import RangeSlider from 'react-bootstrap-range-slider'; import RangeSlider from 'react-bootstrap-range-slider';
import { DocStringComponent } from './DocStringComponent';
interface SliderComponentProps { interface SliderComponentProps {
name: string; name: string;
@ -38,8 +38,6 @@ export const SliderComponent = React.memo((props: SliderComponentProps) => {
const [max, setMax] = useState(props.max); const [max, setMax] = useState(props.max);
const [stepSize, setStepSize] = useState(props.stepSize); const [stepSize, setStepSize] = useState(props.stepSize);
const tooltip = <Tooltip id="tooltip">{docString}</Tooltip>;
const socketEmit = ( const socketEmit = (
newNumber: number, newNumber: number,
min: number = props.min, min: number = props.min,
@ -75,6 +73,8 @@ export const SliderComponent = React.memo((props: SliderComponentProps) => {
return ( return (
<div className={'component boolean'} id={parent_path.concat('.' + name)}> <div className={'component boolean'} id={parent_path.concat('.' + name)}>
<p>Render count: {renderCount.current}</p> <p>Render count: {renderCount.current}</p>
<DocStringComponent docString={docString} />
<Row> <Row>
<Col className="col-2 d-flex align-items-center"> <Col className="col-2 d-flex align-items-center">
<InputGroup.Text style={{ height: '65px' }}>{name}</InputGroup.Text> <InputGroup.Text style={{ height: '65px' }}>{name}</InputGroup.Text>
@ -126,14 +126,6 @@ export const SliderComponent = React.memo((props: SliderComponentProps) => {
</div> </div>
</Collapse> </Collapse>
</Row> </Row>
{docString && (
<OverlayTrigger placement="bottom" overlay={tooltip}>
<Badge pill className="tooltip-trigger" bg="light" text="dark">
?
</Badge>
</OverlayTrigger>
)}
</div> </div>
); );
}); });