Environment: Commerce 1.11.0-rc3, MODX Revolution 3.2.4-pl, PHP 8.2. Fresh install, no custom modules affecting the product form (confirmed by disabling all optional modules — issue persists).
Symptom 1 — dropdowns don’t show the selected value
Steps to reproduce:
- Commerce Dashboard → Products → Add Product (completely fresh, unsaved product)
- Look at the “Type” (Art/class_key) dropdown on the General tab
Expected: defaults to “Product” (the parent class), like a native would still visually fall back to the first option, but Choices.js (bundled: v11.2.2, wrapped in assets/…/backend/js/select.js via new Choices(select, {…})) does not replicate that fallback — it just shows nothing selected.
The same applies to any other Select-type field without an explicit default and to selecting a new value generally not visually updating afterwards — happens consistently, independent of which optional modules are enabled/disabled.
Symptom 2 — changing the Weight Unit closes the edit panel entirely
Steps to reproduce:
- Same fresh Add Product form
- Open the “Weight Unit” dropdown (Shipping tab) and pick a value
Expected: value is set, form stays open.
Actual: the edit panel closes/exits immediately.
Possibly related: duplicate DOM ids on the pricing tab
Chrome DevTools flags “Duplicate form field id in the same form” (6 elements) on the same form, all . Traced to backend/js/components/Fields.js, enhanceCurrencyField():
replacement.setAttribute(‘id’, fld.getAttribute(‘id’) + ‘-enhanced’);
When the source field has no id attribute, getAttribute(‘id’) returns null, and JS string concatenation produces the literal id “null-enhanced” on every affected input — so any two such fields collide. Not yet 100% pinned down which specific dynamically-built pricing row is missing the id, but wanted to flag it since it may be related to the general “enhanced field doesn’t reflect state” pattern above.
Happy to provide a screen recording or further repro details if useful. Given this affects basic product creation (not an edge case), wanted to flag it before it lands in a stable release.