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 }