From 3b69f5a105de675fda014c8b76cd511a841716c4 Mon Sep 17 00:00:00 2001 From: Kasper Fabricius Kristensen <45367945+kasperkristensen@users.noreply.github.com> Date: Tue, 18 Feb 2025 11:28:24 +0100 Subject: [PATCH] fix(dashboard): Properly delete metadata keys, and fix number parsing (#11466) **What** - Fixes an issue where we would parse a string like `"52 tests"` into `52` in the Metadata form - If a row is deleted we now send off key with an empty string as its value to signify that it should be deleted. This is needed to introduce the API we had for updating metadata in V1. Adrien is implementing the BE support for this. RESOLVES SUP-895 --- .changeset/fluffy-vans-matter.md | 5 ++++ .../forms/metadata-form/metadata-form.tsx | 25 +++++++++++++------ 2 files changed, 23 insertions(+), 7 deletions(-) create mode 100644 .changeset/fluffy-vans-matter.md diff --git a/.changeset/fluffy-vans-matter.md b/.changeset/fluffy-vans-matter.md new file mode 100644 index 0000000000..296264da4a --- /dev/null +++ b/.changeset/fluffy-vans-matter.md @@ -0,0 +1,5 @@ +--- +"@medusajs/dashboard": patch +--- + +fix(dashboard): Properly delete metadata keys, and fix number parsing diff --git a/packages/admin/dashboard/src/components/forms/metadata-form/metadata-form.tsx b/packages/admin/dashboard/src/components/forms/metadata-form/metadata-form.tsx index c106a687ce..ffb44a9cd5 100644 --- a/packages/admin/dashboard/src/components/forms/metadata-form/metadata-form.tsx +++ b/packages/admin/dashboard/src/components/forms/metadata-form/metadata-form.tsx @@ -88,7 +88,7 @@ const InnerForm = ({ }) const handleSubmit = form.handleSubmit(async (data) => { - const parsedData = parseValues(data) + const parsedData = parseValues(data, metadata) await hook( { @@ -364,7 +364,8 @@ function getDefaultValues( } function parseValues( - values: z.infer + values: z.infer, + original?: Record | null ): Record | null { const metadata = values.metadata @@ -378,12 +379,22 @@ function parseValues( const update: Record = {} + // First, handle removed keys from original + if (original) { + Object.keys(original).forEach((originalKey) => { + const exists = metadata.some((field) => field.key === originalKey) + if (!exists) { + update[originalKey] = "" + } + }) + } + metadata.forEach((field) => { let key = field.key let value = field.value const disabled = field.disabled - if (!key || !value) { + if (!key) { return } @@ -393,7 +404,7 @@ function parseValues( } key = key.trim() - value = value.trim() + value = value?.trim() ?? "" // We try to cast the value to a boolean or number if possible if (value === "true") { @@ -401,9 +412,9 @@ function parseValues( } else if (value === "false") { update[key] = false } else { - const parsedNumber = parseFloat(value) - if (!isNaN(parsedNumber)) { - update[key] = parsedNumber + const isNumeric = /^-?\d*\.?\d+$/.test(value) + if (isNumeric) { + update[key] = parseFloat(value) } else { update[key] = value }