From c80dbae88ef5187f681e1ba73d4e3f44b4dabaf0 Mon Sep 17 00:00:00 2001 From: Patrick Robert Iacob Date: Wed, 24 Jun 2026 07:31:39 -0700 Subject: [PATCH] fix(aws): correctly reformat dropdown text on forced update Some combinations of values for the dropdown widget are note possible requiring a forced update. In some cases this only updated the main field and not dependent fields earlier in the string. --- docs/_static/js/formatted-dropdown.js | 60 ++++++++++++++++----------- docs/exts/formatted-dropdown.py | 2 + 2 files changed, 38 insertions(+), 24 deletions(-) diff --git a/docs/_static/js/formatted-dropdown.js b/docs/_static/js/formatted-dropdown.js index 122a2176..c6f07b2f 100644 --- a/docs/_static/js/formatted-dropdown.js +++ b/docs/_static/js/formatted-dropdown.js @@ -33,32 +33,44 @@ document.addEventListener("DOMContentLoaded", () => { } function updateDropdowns() { - selects.forEach(sel => { - const key = sel.dataset.key; - const field = widget.querySelector(`.dropdown-field[data-field="${key}"]`); - - const prevValue = sel.value; - const available = computeAvailableValues(key); - - sel.innerHTML = available - .map(o => ``) - .join(""); - - // Try to restore previous value - if (available.some(a => a.value === prevValue)) { - sel.value = prevValue; - } else { - // Otherwise pick first valid value - sel.value = available[0]?.value; - } + for (let pass = 0; pass < selects.length; pass++) { + let changed = false; + + selects.forEach(sel => { + const key = sel.dataset.key; + const field = widget.querySelector(`.dropdown-field[data-field="${key}"]`); + + const prevValue = sel.value; + const available = computeAvailableValues(key); + + sel.innerHTML = available + .map(o => ``) + .join(""); + + // Try to restore previous value + if (available.some(a => a.value === prevValue)) { + sel.value = prevValue; + } else { + // Otherwise pick first valid value + sel.value = available[0]?.value; + } + + if (sel.value !== prevValue) { + changed = true; + } - // Hide the field if only one possible value - if (available.length === 1) { - field.style.display = "none"; - } else { - field.style.display = "flex"; + // Hide the field if only one possible value + if (available.length === 1) { + field.style.display = "none"; + } else { + field.style.display = "flex"; + } + }); + + if (!changed) { + break; } - }); + } } function updateOutput() { diff --git a/docs/exts/formatted-dropdown.py b/docs/exts/formatted-dropdown.py index 1e40a857..b505562a 100644 --- a/docs/exts/formatted-dropdown.py +++ b/docs/exts/formatted-dropdown.py @@ -26,6 +26,8 @@ def parse_value(self, raw: str): return {"value": raw.strip(), "conditions": {}} value = m.group("val").strip() + if value == '""': + value = "" conds = m.group("conds") if not conds: return {"value": value, "conditions": {}}