mirror of
https://github.com/tiqi-group/pydase.git
synced 2025-04-20 00:10:03 +02:00
displayName of components is now taken from WebSettingsContext
This commit is contained in:
parent
9fc6d6f910
commit
9d90fd2b81
@ -1,9 +1,10 @@
|
|||||||
import React, { useEffect, useRef } from 'react';
|
import React, { useContext, useEffect, useRef } from 'react';
|
||||||
import { runMethod } from '../socket';
|
import { runMethod } from '../socket';
|
||||||
import { InputGroup, Form, Button } from 'react-bootstrap';
|
import { InputGroup, Form, Button } from 'react-bootstrap';
|
||||||
import { DocStringComponent } from './DocStringComponent';
|
import { DocStringComponent } from './DocStringComponent';
|
||||||
import { getIdFromFullAccessPath } from '../utils/stringUtils';
|
import { getIdFromFullAccessPath } from '../utils/stringUtils';
|
||||||
import { LevelName } from './NotificationsComponent';
|
import { LevelName } from './NotificationsComponent';
|
||||||
|
import { WebSettingsContext } from '../WebSettings';
|
||||||
|
|
||||||
interface AsyncMethodProps {
|
interface AsyncMethodProps {
|
||||||
name: string;
|
name: string;
|
||||||
@ -19,7 +20,14 @@ export const AsyncMethodComponent = React.memo((props: AsyncMethodProps) => {
|
|||||||
const { name, parentPath, docString, value: runningTask, addNotification } = props;
|
const { name, parentPath, docString, value: runningTask, addNotification } = props;
|
||||||
const renderCount = useRef(0);
|
const renderCount = useRef(0);
|
||||||
const formRef = useRef(null);
|
const formRef = useRef(null);
|
||||||
const id = getIdFromFullAccessPath(parentPath.concat('.' + name));
|
const fullAccessPath = [parentPath, name].filter((element) => element).join('.');
|
||||||
|
const id = getIdFromFullAccessPath(fullAccessPath);
|
||||||
|
const webSettings = useContext(WebSettingsContext);
|
||||||
|
let displayName = name;
|
||||||
|
|
||||||
|
if (webSettings[fullAccessPath] && webSettings[fullAccessPath].displayName) {
|
||||||
|
displayName = webSettings[fullAccessPath].displayName;
|
||||||
|
}
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
renderCount.current++;
|
renderCount.current++;
|
||||||
@ -95,7 +103,7 @@ export const AsyncMethodComponent = React.memo((props: AsyncMethodProps) => {
|
|||||||
<div>Render count: {renderCount.current}</div>
|
<div>Render count: {renderCount.current}</div>
|
||||||
)}
|
)}
|
||||||
<h5>
|
<h5>
|
||||||
Function: {name}
|
Function: {displayName}
|
||||||
<DocStringComponent docString={docString} />
|
<DocStringComponent docString={docString} />
|
||||||
</h5>
|
</h5>
|
||||||
<Form onSubmit={execute} ref={formRef}>
|
<Form onSubmit={execute} ref={formRef}>
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import React, { useEffect, useRef } from 'react';
|
import React, { useContext, useEffect, useRef } from 'react';
|
||||||
|
import { WebSettingsContext } from '../WebSettings';
|
||||||
import { ToggleButton } from 'react-bootstrap';
|
import { ToggleButton } from 'react-bootstrap';
|
||||||
import { setAttribute } from '../socket';
|
import { setAttribute } from '../socket';
|
||||||
import { DocStringComponent } from './DocStringComponent';
|
import { DocStringComponent } from './DocStringComponent';
|
||||||
@ -16,11 +17,16 @@ interface ButtonComponentProps {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const ButtonComponent = React.memo((props: ButtonComponentProps) => {
|
export const ButtonComponent = React.memo((props: ButtonComponentProps) => {
|
||||||
const { name, parentPath, value, readOnly, docString, mapping, addNotification } =
|
const { name, parentPath, value, readOnly, docString, addNotification } = props;
|
||||||
props;
|
// const buttonName = props.mapping ? (value ? props.mapping[0] : props.mapping[1]) : name;
|
||||||
const buttonName = mapping ? (value ? mapping[0] : mapping[1]) : name;
|
|
||||||
const fullAccessPath = [parentPath, name].filter((element) => element).join('.');
|
const fullAccessPath = [parentPath, name].filter((element) => element).join('.');
|
||||||
const id = getIdFromFullAccessPath(fullAccessPath);
|
const id = getIdFromFullAccessPath(fullAccessPath);
|
||||||
|
const webSettings = useContext(WebSettingsContext);
|
||||||
|
let displayName = name;
|
||||||
|
|
||||||
|
if (webSettings[fullAccessPath] && webSettings[fullAccessPath].displayName) {
|
||||||
|
displayName = webSettings[fullAccessPath].displayName;
|
||||||
|
}
|
||||||
|
|
||||||
const renderCount = useRef(0);
|
const renderCount = useRef(0);
|
||||||
|
|
||||||
@ -51,7 +57,7 @@ export const ButtonComponent = React.memo((props: ButtonComponentProps) => {
|
|||||||
value={parentPath}
|
value={parentPath}
|
||||||
disabled={readOnly}
|
disabled={readOnly}
|
||||||
onChange={(e) => setChecked(e.currentTarget.checked)}>
|
onChange={(e) => setChecked(e.currentTarget.checked)}>
|
||||||
{buttonName}
|
{displayName}
|
||||||
</ToggleButton>
|
</ToggleButton>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import React, { useEffect, useRef } from 'react';
|
import React, { useContext, useEffect, useRef } from 'react';
|
||||||
|
import { WebSettingsContext } from '../WebSettings';
|
||||||
import { InputGroup, Form, Row, Col } from 'react-bootstrap';
|
import { InputGroup, Form, Row, Col } from 'react-bootstrap';
|
||||||
import { setAttribute } from '../socket';
|
import { setAttribute } from '../socket';
|
||||||
import { DocStringComponent } from './DocStringComponent';
|
import { DocStringComponent } from './DocStringComponent';
|
||||||
@ -28,6 +29,12 @@ export const ColouredEnumComponent = React.memo((props: ColouredEnumComponentPro
|
|||||||
const renderCount = useRef(0);
|
const renderCount = useRef(0);
|
||||||
const fullAccessPath = [parentPath, name].filter((element) => element).join('.');
|
const fullAccessPath = [parentPath, name].filter((element) => element).join('.');
|
||||||
const id = getIdFromFullAccessPath(fullAccessPath);
|
const id = getIdFromFullAccessPath(fullAccessPath);
|
||||||
|
const webSettings = useContext(WebSettingsContext);
|
||||||
|
let displayName = name;
|
||||||
|
|
||||||
|
if (webSettings[fullAccessPath] && webSettings[fullAccessPath].displayName) {
|
||||||
|
displayName = webSettings[fullAccessPath].displayName;
|
||||||
|
}
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
renderCount.current++;
|
renderCount.current++;
|
||||||
@ -49,7 +56,7 @@ export const ColouredEnumComponent = React.memo((props: ColouredEnumComponentPro
|
|||||||
<DocStringComponent docString={docString} />
|
<DocStringComponent docString={docString} />
|
||||||
<Row>
|
<Row>
|
||||||
<Col className="d-flex align-items-center">
|
<Col className="d-flex align-items-center">
|
||||||
<InputGroup.Text>{name}</InputGroup.Text>
|
<InputGroup.Text>{displayName}</InputGroup.Text>
|
||||||
{readOnly ? (
|
{readOnly ? (
|
||||||
// Display the Form.Control when readOnly is true
|
// Display the Form.Control when readOnly is true
|
||||||
<Form.Control
|
<Form.Control
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
import { useState } from 'react';
|
import { useContext, useState } from 'react';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Card, Collapse } from 'react-bootstrap';
|
import { Card, Collapse } from 'react-bootstrap';
|
||||||
import { ChevronDown, ChevronRight } from 'react-bootstrap-icons';
|
import { ChevronDown, ChevronRight } from 'react-bootstrap-icons';
|
||||||
import { Attribute, GenericComponent } from './GenericComponent';
|
import { Attribute, GenericComponent } from './GenericComponent';
|
||||||
import { getIdFromFullAccessPath } from '../utils/stringUtils';
|
import { getIdFromFullAccessPath } from '../utils/stringUtils';
|
||||||
import { LevelName } from './NotificationsComponent';
|
import { LevelName } from './NotificationsComponent';
|
||||||
|
import { WebSettingsContext } from '../WebSettings';
|
||||||
|
|
||||||
type DataServiceProps = {
|
type DataServiceProps = {
|
||||||
name: string;
|
name: string;
|
||||||
@ -31,6 +32,13 @@ export const DataServiceComponent = React.memo(
|
|||||||
}
|
}
|
||||||
const id = getIdFromFullAccessPath(fullAccessPath);
|
const id = getIdFromFullAccessPath(fullAccessPath);
|
||||||
|
|
||||||
|
const webSettings = useContext(WebSettingsContext);
|
||||||
|
let displayName = fullAccessPath;
|
||||||
|
|
||||||
|
if (webSettings[fullAccessPath] && webSettings[fullAccessPath].displayName) {
|
||||||
|
displayName = webSettings[fullAccessPath].displayName;
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="dataServiceComponent" id={id}>
|
<div className="dataServiceComponent" id={id}>
|
||||||
<Card className="mb-3">
|
<Card className="mb-3">
|
||||||
@ -38,7 +46,7 @@ export const DataServiceComponent = React.memo(
|
|||||||
onClick={() => setOpen(!open)}
|
onClick={() => setOpen(!open)}
|
||||||
style={{ cursor: 'pointer' }} // Change cursor style on hover
|
style={{ cursor: 'pointer' }} // Change cursor style on hover
|
||||||
>
|
>
|
||||||
{fullAccessPath} {open ? <ChevronDown /> : <ChevronRight />}
|
{displayName} {open ? <ChevronDown /> : <ChevronRight />}
|
||||||
</Card.Header>
|
</Card.Header>
|
||||||
<Collapse in={open}>
|
<Collapse in={open}>
|
||||||
<Card.Body>
|
<Card.Body>
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import React, { useEffect, useRef } from 'react';
|
import React, { useContext, useEffect, useRef } from 'react';
|
||||||
|
import { WebSettingsContext } from '../WebSettings';
|
||||||
import { InputGroup, Form, Row, Col } from 'react-bootstrap';
|
import { InputGroup, Form, Row, Col } from 'react-bootstrap';
|
||||||
import { setAttribute } from '../socket';
|
import { setAttribute } from '../socket';
|
||||||
import { getIdFromFullAccessPath } from '../utils/stringUtils';
|
import { getIdFromFullAccessPath } from '../utils/stringUtils';
|
||||||
@ -27,6 +28,12 @@ export const EnumComponent = React.memo((props: EnumComponentProps) => {
|
|||||||
const renderCount = useRef(0);
|
const renderCount = useRef(0);
|
||||||
const fullAccessPath = [parentPath, name].filter((element) => element).join('.');
|
const fullAccessPath = [parentPath, name].filter((element) => element).join('.');
|
||||||
const id = getIdFromFullAccessPath(fullAccessPath);
|
const id = getIdFromFullAccessPath(fullAccessPath);
|
||||||
|
const webSettings = useContext(WebSettingsContext);
|
||||||
|
let displayName = name;
|
||||||
|
|
||||||
|
if (webSettings[fullAccessPath] && webSettings[fullAccessPath].displayName) {
|
||||||
|
displayName = webSettings[fullAccessPath].displayName;
|
||||||
|
}
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
renderCount.current++;
|
renderCount.current++;
|
||||||
@ -48,7 +55,7 @@ export const EnumComponent = React.memo((props: EnumComponentProps) => {
|
|||||||
<DocStringComponent docString={docString} />
|
<DocStringComponent docString={docString} />
|
||||||
<Row>
|
<Row>
|
||||||
<Col className="d-flex align-items-center">
|
<Col className="d-flex align-items-center">
|
||||||
<InputGroup.Text>{name}</InputGroup.Text>
|
<InputGroup.Text>{displayName}</InputGroup.Text>
|
||||||
<Form.Select
|
<Form.Select
|
||||||
aria-label="Default select example"
|
aria-label="Default select example"
|
||||||
value={value}
|
value={value}
|
||||||
|
@ -186,7 +186,6 @@ export const GenericComponent = React.memo(
|
|||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
} else if (attribute.type === 'ColouredEnum') {
|
} else if (attribute.type === 'ColouredEnum') {
|
||||||
console.log(attribute);
|
|
||||||
return (
|
return (
|
||||||
<ColouredEnumComponent
|
<ColouredEnumComponent
|
||||||
name={name}
|
name={name}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import React, { useEffect, useRef, useState } from 'react';
|
import React, { useContext, useEffect, useRef, useState } from 'react';
|
||||||
|
import { WebSettingsContext } from '../WebSettings';
|
||||||
import { Card, Collapse, Image } from 'react-bootstrap';
|
import { Card, Collapse, Image } from 'react-bootstrap';
|
||||||
import { DocStringComponent } from './DocStringComponent';
|
import { DocStringComponent } from './DocStringComponent';
|
||||||
import { ChevronDown, ChevronRight } from 'react-bootstrap-icons';
|
import { ChevronDown, ChevronRight } from 'react-bootstrap-icons';
|
||||||
@ -22,6 +23,12 @@ export const ImageComponent = React.memo((props: ImageComponentProps) => {
|
|||||||
const [open, setOpen] = useState(true);
|
const [open, setOpen] = useState(true);
|
||||||
const fullAccessPath = [parentPath, name].filter((element) => element).join('.');
|
const fullAccessPath = [parentPath, name].filter((element) => element).join('.');
|
||||||
const id = getIdFromFullAccessPath(fullAccessPath);
|
const id = getIdFromFullAccessPath(fullAccessPath);
|
||||||
|
const webSettings = useContext(WebSettingsContext);
|
||||||
|
let displayName = name;
|
||||||
|
|
||||||
|
if (webSettings[fullAccessPath] && webSettings[fullAccessPath].displayName) {
|
||||||
|
displayName = webSettings[fullAccessPath].displayName;
|
||||||
|
}
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
renderCount.current++;
|
renderCount.current++;
|
||||||
@ -41,7 +48,7 @@ export const ImageComponent = React.memo((props: ImageComponentProps) => {
|
|||||||
onClick={() => setOpen(!open)}
|
onClick={() => setOpen(!open)}
|
||||||
style={{ cursor: 'pointer' }} // Change cursor style on hover
|
style={{ cursor: 'pointer' }} // Change cursor style on hover
|
||||||
>
|
>
|
||||||
{name} {open ? <ChevronDown /> : <ChevronRight />}
|
{displayName} {open ? <ChevronDown /> : <ChevronRight />}
|
||||||
</Card.Header>
|
</Card.Header>
|
||||||
<Collapse in={open}>
|
<Collapse in={open}>
|
||||||
<Card.Body>
|
<Card.Body>
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import React, { useState, useEffect, useRef } from 'react';
|
import React, { useContext, useEffect, useRef, useState } from 'react';
|
||||||
|
import { WebSettingsContext } from '../WebSettings';
|
||||||
import { runMethod } from '../socket';
|
import { runMethod } from '../socket';
|
||||||
import { Button, InputGroup, Form, Collapse } from 'react-bootstrap';
|
import { Button, InputGroup, Form, Collapse } from 'react-bootstrap';
|
||||||
import { DocStringComponent } from './DocStringComponent';
|
import { DocStringComponent } from './DocStringComponent';
|
||||||
@ -23,6 +24,12 @@ export const MethodComponent = React.memo((props: MethodProps) => {
|
|||||||
const [functionCalls, setFunctionCalls] = useState([]);
|
const [functionCalls, setFunctionCalls] = useState([]);
|
||||||
const fullAccessPath = [parentPath, name].filter((element) => element).join('.');
|
const fullAccessPath = [parentPath, name].filter((element) => element).join('.');
|
||||||
const id = getIdFromFullAccessPath(fullAccessPath);
|
const id = getIdFromFullAccessPath(fullAccessPath);
|
||||||
|
const webSettings = useContext(WebSettingsContext);
|
||||||
|
let displayName = name;
|
||||||
|
|
||||||
|
if (webSettings[fullAccessPath] && webSettings[fullAccessPath].displayName) {
|
||||||
|
displayName = webSettings[fullAccessPath].displayName;
|
||||||
|
}
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
renderCount.current++;
|
renderCount.current++;
|
||||||
@ -81,7 +88,7 @@ export const MethodComponent = React.memo((props: MethodProps) => {
|
|||||||
<div>Render count: {renderCount.current}</div>
|
<div>Render count: {renderCount.current}</div>
|
||||||
)}
|
)}
|
||||||
<h5 onClick={() => setHideOutput(!hideOutput)} style={{ cursor: 'pointer' }}>
|
<h5 onClick={() => setHideOutput(!hideOutput)} style={{ cursor: 'pointer' }}>
|
||||||
Function: {name}
|
Function: {displayName}
|
||||||
<DocStringComponent docString={docString} />
|
<DocStringComponent docString={docString} />
|
||||||
</h5>
|
</h5>
|
||||||
<Form onSubmit={execute}>
|
<Form onSubmit={execute}>
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import React, { useEffect, useRef, useState } from 'react';
|
import React, { useContext, useEffect, useRef, useState } from 'react';
|
||||||
|
import { WebSettingsContext } from '../WebSettings';
|
||||||
import { Form, InputGroup } from 'react-bootstrap';
|
import { Form, InputGroup } from 'react-bootstrap';
|
||||||
import { setAttribute } from '../socket';
|
import { setAttribute } from '../socket';
|
||||||
import { DocStringComponent } from './DocStringComponent';
|
import { DocStringComponent } from './DocStringComponent';
|
||||||
@ -148,6 +149,12 @@ export const NumberComponent = React.memo((props: NumberComponentProps) => {
|
|||||||
const [inputString, setInputString] = useState(props.value.toString());
|
const [inputString, setInputString] = useState(props.value.toString());
|
||||||
const fullAccessPath = [parentPath, name].filter((element) => element).join('.');
|
const fullAccessPath = [parentPath, name].filter((element) => element).join('.');
|
||||||
const id = getIdFromFullAccessPath(fullAccessPath);
|
const id = getIdFromFullAccessPath(fullAccessPath);
|
||||||
|
const webSettings = useContext(WebSettingsContext);
|
||||||
|
let displayName = name;
|
||||||
|
|
||||||
|
if (webSettings[fullAccessPath] && webSettings[fullAccessPath].displayName) {
|
||||||
|
displayName = webSettings[fullAccessPath].displayName;
|
||||||
|
}
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
renderCount.current++;
|
renderCount.current++;
|
||||||
@ -309,7 +316,7 @@ export const NumberComponent = React.memo((props: NumberComponentProps) => {
|
|||||||
<DocStringComponent docString={docString} />
|
<DocStringComponent docString={docString} />
|
||||||
<div className="d-flex">
|
<div className="d-flex">
|
||||||
<InputGroup>
|
<InputGroup>
|
||||||
{showName && <InputGroup.Text>{name}</InputGroup.Text>}
|
{showName && <InputGroup.Text>{displayName}</InputGroup.Text>}
|
||||||
<Form.Control
|
<Form.Control
|
||||||
type="text"
|
type="text"
|
||||||
value={inputString}
|
value={inputString}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import React, { useEffect, useRef, useState } from 'react';
|
import React, { useContext, useEffect, useRef, useState } from 'react';
|
||||||
|
import { WebSettingsContext } from '../WebSettings';
|
||||||
import { InputGroup, Form, Row, Col, Collapse, ToggleButton } from 'react-bootstrap';
|
import { InputGroup, Form, Row, Col, Collapse, ToggleButton } from 'react-bootstrap';
|
||||||
import { setAttribute } from '../socket';
|
import { setAttribute } from '../socket';
|
||||||
import { DocStringComponent } from './DocStringComponent';
|
import { DocStringComponent } from './DocStringComponent';
|
||||||
@ -36,6 +37,12 @@ export const SliderComponent = React.memo((props: SliderComponentProps) => {
|
|||||||
} = props;
|
} = props;
|
||||||
const fullAccessPath = [parentPath, name].filter((element) => element).join('.');
|
const fullAccessPath = [parentPath, name].filter((element) => element).join('.');
|
||||||
const id = getIdFromFullAccessPath(fullAccessPath);
|
const id = getIdFromFullAccessPath(fullAccessPath);
|
||||||
|
const webSettings = useContext(WebSettingsContext);
|
||||||
|
let displayName = name;
|
||||||
|
|
||||||
|
if (webSettings[fullAccessPath] && webSettings[fullAccessPath].displayName) {
|
||||||
|
displayName = webSettings[fullAccessPath].displayName;
|
||||||
|
}
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
renderCount.current++;
|
renderCount.current++;
|
||||||
@ -101,7 +108,7 @@ export const SliderComponent = React.memo((props: SliderComponentProps) => {
|
|||||||
<DocStringComponent docString={docString} />
|
<DocStringComponent docString={docString} />
|
||||||
<Row>
|
<Row>
|
||||||
<Col xs="auto" xl="auto">
|
<Col xs="auto" xl="auto">
|
||||||
<InputGroup.Text>{name}</InputGroup.Text>
|
<InputGroup.Text>{displayName}</InputGroup.Text>
|
||||||
</Col>
|
</Col>
|
||||||
<Col xs="5" xl>
|
<Col xs="5" xl>
|
||||||
<Slider
|
<Slider
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
import React, { useEffect, useRef, useState } from 'react';
|
import React, { useContext, useEffect, useRef, useState } from 'react';
|
||||||
import { Form, InputGroup } from 'react-bootstrap';
|
import { Form, InputGroup } from 'react-bootstrap';
|
||||||
import { setAttribute } from '../socket';
|
import { setAttribute } from '../socket';
|
||||||
import { DocStringComponent } from './DocStringComponent';
|
import { DocStringComponent } from './DocStringComponent';
|
||||||
import '../App.css';
|
import '../App.css';
|
||||||
import { getIdFromFullAccessPath } from '../utils/stringUtils';
|
import { getIdFromFullAccessPath } from '../utils/stringUtils';
|
||||||
import { LevelName } from './NotificationsComponent';
|
import { LevelName } from './NotificationsComponent';
|
||||||
|
import { WebSettingsContext } from '../WebSettings';
|
||||||
|
|
||||||
// TODO: add button functionality
|
// TODO: add button functionality
|
||||||
|
|
||||||
@ -26,6 +27,12 @@ export const StringComponent = React.memo((props: StringComponentProps) => {
|
|||||||
const [inputString, setInputString] = useState(props.value);
|
const [inputString, setInputString] = useState(props.value);
|
||||||
const fullAccessPath = [parentPath, name].filter((element) => element).join('.');
|
const fullAccessPath = [parentPath, name].filter((element) => element).join('.');
|
||||||
const id = getIdFromFullAccessPath(fullAccessPath);
|
const id = getIdFromFullAccessPath(fullAccessPath);
|
||||||
|
const webSettings = useContext(WebSettingsContext);
|
||||||
|
let displayName = name;
|
||||||
|
|
||||||
|
if (webSettings[fullAccessPath] && webSettings[fullAccessPath].displayName) {
|
||||||
|
displayName = webSettings[fullAccessPath].displayName;
|
||||||
|
}
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
renderCount.current++;
|
renderCount.current++;
|
||||||
@ -65,7 +72,7 @@ export const StringComponent = React.memo((props: StringComponentProps) => {
|
|||||||
)}
|
)}
|
||||||
<DocStringComponent docString={docString} />
|
<DocStringComponent docString={docString} />
|
||||||
<InputGroup>
|
<InputGroup>
|
||||||
<InputGroup.Text>{name}</InputGroup.Text>
|
<InputGroup.Text>{displayName}</InputGroup.Text>
|
||||||
<Form.Control
|
<Form.Control
|
||||||
type="text"
|
type="text"
|
||||||
value={inputString}
|
value={inputString}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user