From 15da907e811ba3f26a641bfd24abf0ba6aa8565c Mon Sep 17 00:00:00 2001 From: Patrick Robertson Date: Thu, 27 Feb 2025 15:58:30 +0000 Subject: [PATCH] Add a bit of typescripting --- scripts/settings/src/App.tsx | 21 ++++++++++----------- scripts/settings/src/StepCard.tsx | 7 ++----- scripts/settings/src/types.d.ts | 18 ++++++++++++++++++ 3 files changed, 30 insertions(+), 16 deletions(-) create mode 100644 scripts/settings/src/types.d.ts diff --git a/scripts/settings/src/App.tsx b/scripts/settings/src/App.tsx index ab1caeb..1c3f0e3 100644 --- a/scripts/settings/src/App.tsx +++ b/scripts/settings/src/App.tsx @@ -24,6 +24,8 @@ import { import type { DragStartEvent, DragEndEvent, UniqueIdentifier } from "@dnd-kit/core"; +import { Module } from './types'; + import { modules, steps, module_types } from './schema.json'; import { Stack, @@ -34,14 +36,6 @@ import Grid from '@mui/material/Grid2'; import { parseDocument, Document } from 'yaml' import StepCard from './StepCard'; -// create a Typescript interface for module -interface Module { - name: string; - description: string; - configs: object; - manifest: object; -} - function FileDrop({ setYamlFile }: { setYamlFile: React.Dispatch> }) { @@ -174,7 +168,7 @@ function ModuleTypes({ stepType, setEnabledModules, enabledModules, configValues {items.map((name: string) => { - let m = modules[name]; + let m: Module = modules[name]; return ( ); @@ -203,7 +197,12 @@ function ModuleTypes({ stepType, setEnabledModules, enabledModules, configValues export default function App() { const [yamlFile, setYamlFile] = useState(new Document()); const [enabledModules, setEnabledModules] = useState<{}>(Object.fromEntries(Object.keys(steps).map(type => [type, steps[type].map((name: string) => [name, false])]))); - const [configValues, setConfigValues] = useState<{}>( + const [configValues, setConfigValues] = useState<{ + [key: string]: { + [key: string + ]: any + } + }>( Object.keys(modules).reduce((acc, module) => { acc[module] = {}; return acc; @@ -218,7 +217,7 @@ export default function App() { // create a yaml file from const finalYaml = { - 'steps': Object.keys(steps).reduce((acc, stepType) => { + 'steps': Object.keys(steps).reduce((acc, stepType: string) => { acc[stepType] = stepsConfig[stepType].filter(([name, enabled]: [string, boolean]) => enabled).map(([name, enabled]: [string, boolean]) => name); return acc; }, {}) diff --git a/scripts/settings/src/StepCard.tsx b/scripts/settings/src/StepCard.tsx index 870926a..f326a50 100644 --- a/scripts/settings/src/StepCard.tsx +++ b/scripts/settings/src/StepCard.tsx @@ -6,7 +6,6 @@ import { CSS } from "@dnd-kit/utilities"; import { Card, - CardContent, CardActions, CardHeader, Button, @@ -20,7 +19,6 @@ import { MenuItem, FormControl, FormControlLabel, - Textarea, FormHelperText, TextField, Stack, @@ -28,8 +26,7 @@ import { } from '@mui/material'; import Grid from '@mui/material/Grid2'; import DragIndicatorIcon from '@mui/icons-material/DragIndicator'; -import { set } from "yaml/dist/schema/yaml-1.1/set"; - +import { Module } from "./types"; Object.defineProperty(String.prototype, 'capitalize', { value: function() { @@ -46,7 +43,7 @@ const StepCard = ({ configValues }: { type: string, - module: object, + module: Module, toggleModule: any, enabledModules: any, configValues: any diff --git a/scripts/settings/src/types.d.ts b/scripts/settings/src/types.d.ts new file mode 100644 index 0000000..64cba2f --- /dev/null +++ b/scripts/settings/src/types.d.ts @@ -0,0 +1,18 @@ +export interface Config { + name: string; + description: string; + type: string?; + default: any; +} + +interface Manifest { + description: string; +} + +export interface Module { + name: string; + description: string; + configs: { [key: string]: Config }; + manifest: Manifest; + display_name: string; +} \ No newline at end of file