SEV-392: combobox setOptions() for reactive parent-fed option lists
Passing a parent component's reactive array into the nested combobox x-data needs x-effect="setOptions(vpicMakes)" — a plain closure over the parent scope doesn't track Alpine updates. Falls back to config.options for static lists. 18/18 tests pass. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+13
-1
@@ -53,6 +53,7 @@ export function comboboxData(config = {}) {
|
||||
isOpen: false,
|
||||
highlighted: -1,
|
||||
placeholder: config.placeholder || '',
|
||||
_opts: null, // set reactively via setOptions(); see _options getter
|
||||
|
||||
init() {
|
||||
this.syncQueryFromValue();
|
||||
@@ -66,8 +67,19 @@ export function comboboxData(config = {}) {
|
||||
}
|
||||
},
|
||||
|
||||
// setOptions lets a parent feed reactive option lists in via x-effect —
|
||||
// e.g. x-effect="setOptions(vpicMakes)" — which is the reliable way to
|
||||
// pass a parent component's reactive array into this nested x-data (a
|
||||
// plain closure over the parent scope would NOT track updates). Falls back
|
||||
// to config.options when never called (static lists).
|
||||
setOptions(raw) {
|
||||
this._opts = normalizeOptions(raw);
|
||||
// a shrinking list shouldn't leave a stale highlight selected
|
||||
if (this.highlighted >= this._opts.length) this.highlighted = -1;
|
||||
},
|
||||
|
||||
get _options() {
|
||||
return normalizeOptions(config.options);
|
||||
return this._opts != null ? this._opts : normalizeOptions(config.options);
|
||||
},
|
||||
|
||||
syncQueryFromValue() {
|
||||
|
||||
Reference in New Issue
Block a user