From c6490fd7b201dc5f7fddb6dea0d6a43f0beede81 Mon Sep 17 00:00:00 2001 From: David Carley Date: Tue, 13 Sep 2022 02:17:32 +0000 Subject: [PATCH] The Settings page was saving numbers as strings. --- package-lock.json | 4 +- package.json | 2 +- .../components/ConfigTemplatedInput.svelte | 76 +++++++++++-------- 3 files changed, 49 insertions(+), 33 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9c1bd55..fb79a32 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "bbctrl", - "version": "1.1.1b4", + "version": "1.1.1b5", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "bbctrl", - "version": "1.1.1b4", + "version": "1.1.1b5", "hasInstallScript": true, "license": "GPL-3.0+", "devDependencies": { diff --git a/package.json b/package.json index 91345da..936ce26 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bbctrl", - "version": "1.1.1b4", + "version": "1.1.1b5", "homepage": "https://onefinitycnc.com/", "repository": "https://github.com/OneFinityCNC/onefinity", "license": "GPL-3.0+", diff --git a/src/svelte-components/src/components/ConfigTemplatedInput.svelte b/src/svelte-components/src/components/ConfigTemplatedInput.svelte index 5c410ea..120d8af 100644 --- a/src/svelte-components/src/components/ConfigTemplatedInput.svelte +++ b/src/svelte-components/src/components/ConfigTemplatedInput.svelte @@ -4,13 +4,14 @@ import { ControllerMethods } from "$lib/RegisterControllerMethods"; import { onMount } from "svelte"; + type ValueType = + | string + | number + | { title: string; value: string | number }; + type Template = { type?: string; - values?: ( - | string - | number - | { title: string; value: string | number } - )[]; + values?: Array; unit?: "string"; iunit?: "string"; min?: number; @@ -73,18 +74,15 @@ return value; } - function onKeyup(event) { - value = event.target.value; - onChange(); - } - - function onChange() { + function onChange(event) { Config.update((config) => { let target = config; for (const part of keyParts.slice(0, -1)) { target = target[part]; } + const value = coerceValue(event.target.value); + console.log(value); target[keyParts[keyParts.length - 1]] = value; return config; @@ -92,6 +90,37 @@ ControllerMethods.dispatch("config-changed"); } + + function coerceValue(value) { + switch (template.type) { + case "float": + case "int": + return Number(value); + + default: + return value; + } + } + + function getOptionValue(opt: ValueType) { + switch (typeof opt) { + case "object": + return opt.value || opt; + + default: + return opt; + } + } + + function getOptionTitle(opt: ValueType) { + switch (typeof opt) { + case "object": + return opt.title || opt; + + default: + return opt; + } + } {#if template} @@ -102,10 +131,10 @@ @@ -119,8 +148,7 @@ max={template.max} step={template.step || "any"} bind:value - on:input={onChange} - on:keyup={onKeyup} + on:keyup={onChange} /> {:else if template.type === "int"} {:else if template.type === "string"} - + {:else if template.type == "text"} -