diff --git a/app/web/src/components/Customizer/Customizer.tsx b/app/web/src/components/Customizer/Customizer.tsx index 1767897..37e8c1a 100644 --- a/app/web/src/components/Customizer/Customizer.tsx +++ b/app/web/src/components/Customizer/Customizer.tsx @@ -1,6 +1,6 @@ import { useRender } from 'src/components/IdeWrapper/useRender' import { useIdeContext } from 'src/helpers/hooks/useIdeContext' -import { genParams, getParams } from 'src/helpers/cadPackages/jscadParams' +import { genParams, getParams } from 'src/helpers/cadPackages/jsCad/jscadParams' const Customizer = () => { const [open, setOpen] = React.useState(true) diff --git a/app/web/src/components/IdeWrapper/useRender.ts b/app/web/src/components/IdeWrapper/useRender.ts index 52d233d..17824d6 100644 --- a/app/web/src/components/IdeWrapper/useRender.ts +++ b/app/web/src/components/IdeWrapper/useRender.ts @@ -1,9 +1,10 @@ import { makeCodeStoreKey, requestRender } from 'src/helpers/hooks/useIdeState' import { useIdeContext } from 'src/helpers/hooks/useIdeContext' +import type { RawCustomizerParams } from 'src/helpers/cadPackages/common' export const useRender = () => { const { state, thunkDispatch } = useIdeContext() - return (parameters) => { + return (parameters?: RawCustomizerParams) => { thunkDispatch((dispatch, getState) => { const state = getState() dispatch({ type: 'setLoading' }) diff --git a/app/web/src/helpers/cadPackages/common.ts b/app/web/src/helpers/cadPackages/common.ts index 4bdec2a..95a60c3 100644 --- a/app/web/src/helpers/cadPackages/common.ts +++ b/app/web/src/helpers/cadPackages/common.ts @@ -35,6 +35,10 @@ export interface HealthyResponse { lastParameters?: any } +export interface RawCustomizerParams { + [paramName: string]: number | string | boolean +} + export function createHealthyResponse({ date, data, diff --git a/app/web/src/helpers/cadPackages/index.ts b/app/web/src/helpers/cadPackages/index.ts index 145717e..568e9b9 100644 --- a/app/web/src/helpers/cadPackages/index.ts +++ b/app/web/src/helpers/cadPackages/index.ts @@ -3,7 +3,7 @@ import type { CadPackage } from 'src/helpers/hooks/useIdeState' import openscad from './openScadController' import cadquery from './cadQueryController' -import jscad from './jsCadController' +import jscad from './jsCad/jsCadController' export const cadPackages: { [key in CadPackage]: DefaultKernelExport } = { openscad, diff --git a/app/web/src/helpers/cadPackages/jsCadController.ts b/app/web/src/helpers/cadPackages/jsCad/jsCadController.ts similarity index 99% rename from app/web/src/helpers/cadPackages/jsCadController.ts rename to app/web/src/helpers/cadPackages/jsCad/jsCadController.ts index b0c4ddc..6cabb4a 100644 --- a/app/web/src/helpers/cadPackages/jsCadController.ts +++ b/app/web/src/helpers/cadPackages/jsCad/jsCadController.ts @@ -3,7 +3,7 @@ import { DefaultKernelExport, createUnhealthyResponse, createHealthyResponse, -} from './common' +} from '../common' import { MeshPhongMaterial, LineBasicMaterial, diff --git a/app/web/src/helpers/cadPackages/jscadParams.js b/app/web/src/helpers/cadPackages/jsCad/jscadParams.ts similarity index 77% rename from app/web/src/helpers/cadPackages/jscadParams.js rename to app/web/src/helpers/cadPackages/jsCad/jscadParams.ts index 66e6527..b43911a 100644 --- a/app/web/src/helpers/cadPackages/jscadParams.js +++ b/app/web/src/helpers/cadPackages/jsCad/jscadParams.ts @@ -1,20 +1,25 @@ +import type { RawCustomizerParams } from '../common' + const GROUP_SELECTOR = 'DIV[type="group"]' const INPUT_SELECTOR = 'INPUT, SELECT' -function forEachInput(target, callback) { +function forEachInput( + target: HTMLElement, + callback: (e: HTMLInputElement) => void +) { target.querySelectorAll(INPUT_SELECTOR).forEach(callback) } -function forEachGroup(target, callback) { +function forEachGroup(target: HTMLElement, callback: (e: HTMLElement) => void) { target.querySelectorAll(GROUP_SELECTOR).forEach(callback) } const numeric = { number: 1, float: 1, int: 1, range: 1, slider: 1 } function applyRange(inp) { - let label = inp.previousElementSibling + const label = inp.previousElementSibling if (label && label.tagName == 'LABEL') { - let info = label.querySelector('I') + const info = label.querySelector('I') if (info) info.innerHTML = inp.value } } @@ -26,10 +31,8 @@ export function genParams( callback = undefined, buttons = ['reset', 'save', 'load', 'edit', 'link'] ) { - let funcs = { - group: function ({ name, type, caption, captions, value, min, max }) { - return '' - }, + const funcs = { + group: () => '', choice: inputChoice, radio: inputRadio, float: inputNumber, @@ -43,17 +46,8 @@ export function genParams( password: inputNumber, color: inputNumber, // TODO radio similar options as choice - checkbox: function ({ - name, - type, - caption, - captions, - value, - checked, - min, - max, - }) { - let checkedStr = value === 'checked' || value === true ? 'checked' : '' + checkbox: function ({ name, value }) { + const checkedStr = value === 'checked' || value === true ? 'checked' : '' return `` }, number: inputNumber, @@ -65,7 +59,8 @@ export function genParams( let ret = '