mirror of
https://github.com/tiqi-group/pydase.git
synced 2025-06-05 13:10:41 +02:00
frontend: introducing DocStringComponent
This commit is contained in:
parent
68c3f6659e
commit
bae1752e48
@ -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>
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
23
frontend/src/components/DocStringComponent.tsx
Normal file
23
frontend/src/components/DocStringComponent.tsx
Normal 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>
|
||||||
|
);
|
||||||
|
});
|
@ -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>
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
@ -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>
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user