From 7fe56f72ae6de29522e62e32b0f125ed71d160af Mon Sep 17 00:00:00 2001 From: mbecker20 Date: Wed, 4 Mar 2026 16:14:57 -0800 Subject: [PATCH] setters use maps instead of mutations --- .../resources/stack/config/config-files.tsx | 29 +++++++++++++------ ui/src/resources/stack/config/index.tsx | 24 +++++++++------ ui/src/ui/input-list.tsx | 7 +++-- 3 files changed, 40 insertions(+), 20 deletions(-) diff --git a/ui/src/resources/stack/config/config-files.tsx b/ui/src/resources/stack/config/config-files.tsx index 53a41ae28..011091e3a 100644 --- a/ui/src/resources/stack/config/config-files.tsx +++ b/ui/src/resources/stack/config/config-files.tsx @@ -59,8 +59,11 @@ export default function StackConfigFiles({ placeholder="configs/config.yaml" value={path} onChange={(e) => { - values[i] = { ...values[i], path: e.target.value }; - set({ config_files: [...values] }); + set({ + config_files: values.map((v, index) => + i === index ? { ...v, path: e.target.value } : v, + ), + }); }} w={{ base: "100%", md: 400 }} disabled={disabled} @@ -91,8 +94,11 @@ export default function StackConfigFiles({ value={services} data={allServices} onChange={(services) => { - values[i] = { ...values[i], services }; - set({ config_files: [...values] }); + set({ + config_files: values.map((v, index) => + i === index ? { ...v, services } : v, + ), + }); }} disabled={disabled} searchable @@ -102,11 +108,16 @@ export default function StackConfigFiles({ value={requires} onChange={(requires) => { if (!requires) return; - values[i] = { - ...values[i], - requires: requires as Types.StackFileRequires, - }; - set({ config_files: [...values] }); + set({ + config_files: values.map((v, index) => + i === index + ? { + ...v, + requires: requires as Types.StackFileRequires, + } + : v, + ), + }); }} disabled={disabled} data={Object.values(Types.StackFileRequires)} diff --git a/ui/src/resources/stack/config/index.tsx b/ui/src/resources/stack/config/index.tsx index 4e19bf4f8..2fe75f8d6 100644 --- a/ui/src/resources/stack/config/index.tsx +++ b/ui/src/resources/stack/config/index.tsx @@ -279,12 +279,16 @@ export default function StackConfig({ { - const newFiles = [...files]; - newFiles[i] = { - path: e.target.value, - track: file.track ?? true, - }; - set({ additional_env_files: newFiles }); + set({ + additional_env_files: files.map((v, index) => + i === index + ? { + path: e.target.value, + track: file.track ?? true, + } + : v, + ), + }); }} placeholder=".env" disabled={disabled} @@ -296,9 +300,11 @@ export default function StackConfig({ label="Track" checked={file.track ?? true} onCheckedChange={(track) => { - const newFiles = [...files]; - newFiles[i] = { ...newFiles[i], track }; - set({ additional_env_files: newFiles }); + set({ + additional_env_files: files.map((v, index) => + i === index ? { ...v, track } : v, + ), + }); }} disabled={disabled} id={`track-${i}`} diff --git a/ui/src/ui/input-list.tsx b/ui/src/ui/input-list.tsx index 6b457cfb6..2b00ec669 100644 --- a/ui/src/ui/input-list.tsx +++ b/ui/src/ui/input-list.tsx @@ -25,8 +25,11 @@ export default function InputList({ key={i} value={arg} onChange={(e) => { - values[i] = e.target.value; - set({ [field]: [...values] } as Partial); + set({ + [field]: values.map((v, index) => + i === index ? e.target.value : v, + ), + } as Partial); }} disabled={disabled} w={{ base: 230, md: 400 }}