Skip to content

fix(magento-store): allow empty/false custom-attribute values to pass through#2625

Merged
paales merged 1 commit into
canaryfrom
fix/attribute-value-inputs-allow-clearing
May 20, 2026
Merged

fix(magento-store): allow empty/false custom-attribute values to pass through#2625
paales merged 1 commit into
canaryfrom
fix/attribute-value-inputs-allow-clearing

Conversation

@paales
Copy link
Copy Markdown
Member

@paales paales commented May 20, 2026

Summary

CustomAttributesField_to_AttributeValueInputs filtered out any falsy form value with if (!value) return, so:

  • An empty-string option in a SELECT attribute (the canonical "-- None --" / "-- Geen … --" pattern used to undo a previous choice) never reached the mutation — Magento kept the old value.
  • A BOOLEAN attribute the consumer unchecks after previously checking it — same story, the false value got swallowed.

Skip only when the value is undefined (the attribute was never touched on the form). Pass empty strings and false booleans through so the backend can interpret them as "clear this attribute".

Why

The Magento updateCustomerV2 mutation handles value: "" correctly when the consuming module's data patch is set up for it (Reach Digital's clubportaal module does exactly this in jumbosports — empty string from the SELECT clears the club customer attribute, full URL on first set). The bug was that the storefront never sent the empty value through, so the user's "-- None --" choice silently no-op'd.

Test plan

  • Pick an attribute exposing a "-- None --" option whose value is '', change from a non-empty value back to that option, save → the mutation includes { attribute_code: "<code>", value: "" } and Magento clears the attribute
  • Toggle off a BOOLEAN custom attribute the customer previously had checked → mutation includes { attribute_code: "<code>", value: "0" }
  • An attribute the user never touched still gets omitted from the mutation (unchanged behaviour)

🤖 Generated with Claude Code

… through

CustomAttributesField_to_AttributeValueInputs was filtering out any
falsy form value (`if (!value) return`), so consumers couldn't clear
a previously-set attribute by picking the empty-string option of a
SELECT (the canonical "-- None --" pattern) — the mutation simply
omitted the attribute and Magento kept the old value. Same problem
for unchecking a BOOLEAN attribute the customer had checked.

Skip only when value is `undefined` (the attribute was never touched
on the form). Pass empty strings and `false` booleans through so the
backend can interpret them as "clear this attribute".

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented May 20, 2026

🦋 Changeset detected

Latest commit: 539b353

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 86 packages
Name Type
@graphcommerce/magento-store Patch
@graphcommerce/magento-graphcms Patch
@graphcommerce/magento-open-source Patch
@graphcommerce/magento-storyblok Patch
@graphcommerce/docs Patch
@graphcommerce/browserslist-config-pwa Patch
@graphcommerce/changeset-changelog Patch
@graphcommerce/eslint-config-pwa Patch
@graphcommerce/graphql-codegen-markdown-docs Patch
@graphcommerce/graphql-codegen-near-operation-file Patch
@graphcommerce/graphql-codegen-relay-optimizer-plugin Patch
@graphcommerce/misc Patch
@graphcommerce/next-config Patch
@graphcommerce/prettier-config-pwa Patch
@graphcommerce/typescript-config-pwa Patch
@graphcommerce/address-fields-nl Patch
@graphcommerce/algolia-categories Patch
@graphcommerce/algolia-insights Patch
@graphcommerce/algolia-personalization Patch
@graphcommerce/algolia-products Patch
@graphcommerce/algolia-recommend Patch
@graphcommerce/algolia-search Patch
@graphcommerce/cli Patch
@graphcommerce/demo-magento-graphcommerce Patch
@graphcommerce/ecommerce-ui Patch
@graphcommerce/framer-next-pages Patch
@graphcommerce/framer-scroller Patch
@graphcommerce/framer-utils Patch
@graphcommerce/google-datalayer Patch
@graphcommerce/google-playstore Patch
@graphcommerce/googleanalytics Patch
@graphcommerce/googlerecaptcha Patch
@graphcommerce/googletagmanager Patch
@graphcommerce/graphcms-ui Patch
@graphcommerce/graphql-mesh Patch
@graphcommerce/graphql Patch
@graphcommerce/hygraph-cli Patch
@graphcommerce/hygraph-dynamic-rows-ui Patch
@graphcommerce/hygraph-dynamic-rows Patch
@graphcommerce/hygraph-ui Patch
@graphcommerce/image Patch
@graphcommerce/lingui-next Patch
@graphcommerce/magento-cart-checkout Patch
@graphcommerce/magento-cart-coupon Patch
@graphcommerce/magento-cart-email Patch
@graphcommerce/magento-cart-items Patch
@graphcommerce/magento-cart-payment-method Patch
@graphcommerce/magento-cart-pickup Patch
@graphcommerce/magento-cart-shipping-address Patch
@graphcommerce/magento-cart-shipping-method Patch
@graphcommerce/magento-cart Patch
@graphcommerce/magento-category Patch
@graphcommerce/magento-cms Patch
@graphcommerce/magento-compare Patch
@graphcommerce/magento-customer Patch
@graphcommerce/magento-graphql-rest Patch
@graphcommerce/magento-graphql Patch
@graphcommerce/magento-newsletter Patch
@graphcommerce/magento-payment-adyen Patch
@graphcommerce/magento-payment-afterpay Patch
@graphcommerce/magento-payment-braintree Patch
@graphcommerce/magento-payment-included Patch
@graphcommerce/magento-payment-klarna Patch
@graphcommerce/magento-payment-multisafepay Patch
@graphcommerce/magento-payment-paypal Patch
@graphcommerce/magento-payment-tokens Patch
@graphcommerce/magento-product-bundle Patch
@graphcommerce/magento-product-configurable Patch
@graphcommerce/magento-product-downloadable Patch
@graphcommerce/magento-product-grouped Patch
@graphcommerce/magento-product-simple Patch
@graphcommerce/magento-product-virtual Patch
@graphcommerce/magento-product Patch
@graphcommerce/magento-recently-viewed-products Patch
@graphcommerce/magento-review Patch
@graphcommerce/magento-search-overlay Patch
@graphcommerce/magento-search Patch
@graphcommerce/magento-wishlist Patch
@graphcommerce/mollie-magento-payment Patch
@graphcommerce/next-ui Patch
@graphcommerce/react-hook-form Patch
@graphcommerce/service-worker Patch
@graphcommerce/storyblok-ui Patch
@graphcommerce/framer-next-pages-example Patch
@graphcommerce/framer-scroller-example Patch
@graphcommerce/image-example Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@vercel
Copy link
Copy Markdown

vercel Bot commented May 20, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
graphcommerce-246 Ready Ready Preview May 20, 2026 10:29am
graphcommerce-247 Ready Ready Preview May 20, 2026 10:29am
graphcommerce-hygraph-dynamic-rows-ui Ready Ready Preview May 20, 2026 10:29am
graphcommerce-open-source Ready Ready Preview May 20, 2026 10:29am
graphcommerce-storyblok Ready Ready Preview May 20, 2026 10:29am

Request Review

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant