From 837f02b0d3aad2755acf47318bd6c77d3122ab6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mose=20M=C3=BCller?= Date: Wed, 2 Aug 2023 12:06:20 +0200 Subject: [PATCH] frontend: adding GenericComponent --- .../src/components/DataServiceComponent.tsx | 137 ++---------------- frontend/src/components/GenericComponent.tsx | 136 +++++++++++++++++ 2 files changed, 145 insertions(+), 128 deletions(-) create mode 100644 frontend/src/components/GenericComponent.tsx diff --git a/frontend/src/components/DataServiceComponent.tsx b/frontend/src/components/DataServiceComponent.tsx index 4f257ae..ae386d5 100644 --- a/frontend/src/components/DataServiceComponent.tsx +++ b/frontend/src/components/DataServiceComponent.tsx @@ -1,35 +1,9 @@ import { useState } from 'react'; -import { ButtonComponent } from './ButtonComponent'; -import { NumberComponent } from './NumberComponent'; -import { SliderComponent } from './SliderComponent'; -import { EnumComponent } from './EnumComponent'; -import { MethodComponent } from './MethodComponent'; -import { AsyncMethodComponent } from './AsyncMethodComponent'; import React from 'react'; import { Card, Collapse } from 'react-bootstrap'; import { ChevronDown, ChevronRight } from 'react-bootstrap-icons'; -import { StringComponent } from './StringComponent'; +import { Attribute, GenericComponent } from './GenericComponent'; -type AttributeType = - | 'str' - | 'bool' - | 'float' - | 'int' - | 'method' - | 'DataService' - | 'Enum' - | 'NumberSlider'; - -type ValueType = boolean | string | number | object; -interface Attribute { - type: AttributeType; - value?: ValueType; - readonly: boolean; - doc?: string | null; - parameters?: Record; - async?: boolean; - enum?: Record; -} type DataServiceProps = { props: DataServiceJSON; parentPath?: string; @@ -53,107 +27,14 @@ export const DataServiceComponent = React.memo( {Object.entries(props).map(([key, value]) => { - if (value.type === 'bool') { - return ( -
- -
- ); - } else if (value.type === 'float' || value.type === 'int') { - return ( -
- -
- ); - } else if (value.type === 'NumberSlider') { - return ( -
- -
- ); - } else if (value.type === 'Enum') { - return ( -
- -
- ); - } else if (value.type === 'method') { - if (!value.async) { - return ( -
- -
- ); - } else { - return ( -
- } - /> -
- ); - } - } else if (value.type === 'str') { - return ( -
- -
- ); - } else if (value.type === 'DataService') { - return ( -
- -
- ); - } else { - return
; - } + return ( + + ); })}
diff --git a/frontend/src/components/GenericComponent.tsx b/frontend/src/components/GenericComponent.tsx new file mode 100644 index 0000000..395af63 --- /dev/null +++ b/frontend/src/components/GenericComponent.tsx @@ -0,0 +1,136 @@ +import React from 'react'; +import { ButtonComponent } from './ButtonComponent'; +import { NumberComponent } from './NumberComponent'; +import { SliderComponent } from './SliderComponent'; +import { EnumComponent } from './EnumComponent'; +import { MethodComponent } from './MethodComponent'; +import { AsyncMethodComponent } from './AsyncMethodComponent'; +import { StringComponent } from './StringComponent'; +import { ListComponent } from './ListComponent'; +import { DataServiceComponent, DataServiceJSON } from './DataServiceComponent'; + +export type AttributeType = + | 'str' + | 'bool' + | 'float' + | 'int' + | 'list' + | 'method' + | 'DataService' + | 'Enum' + | 'NumberSlider'; + +type ValueType = boolean | string | number | object; +interface Attribute { + type: AttributeType; + value?: ValueType | ValueType[]; + readonly: boolean; + doc?: string | null; + parameters?: Record; + async?: boolean; + enum?: Record; +} +type GenericComponentProps = { + attribute: Attribute; + name: string; + parentPath: string; +}; + +export const GenericComponent = React.memo( + ({ attribute, name, parentPath }: GenericComponentProps) => { + if (attribute.type === 'bool') { + return ( + + ); + } else if (attribute.type === 'float' || attribute.type === 'int') { + return ( + + ); + } else if (attribute.type === 'NumberSlider') { + return ( + + ); + } else if (attribute.type === 'Enum') { + return ( + + ); + } else if (attribute.type === 'method') { + if (!attribute.async) { + return ( + + ); + } else { + return ( + } + /> + ); + } + } else if (attribute.type === 'str') { + return ( + + ); + } else if (attribute.type === 'DataService') { + return ( + + ); + } else if (attribute.type === 'list') { + return ( + + ); + } else { + return
{name}
; + } + } +);