hperrin / svelte-material-ui

Svelte Material UI Components
https://sveltematerialui.com/
Apache License 2.0
3.27k stars 287 forks source link

fix: dynamically setting options sets undefined to select value #655

Open igrep opened 1 month ago

igrep commented 1 month ago

Approach

Without this change, the Select component doesn't know the Options (items in the internal List component) after onMount. So it can't tell which Options are added/removed.

To fix the root cause, I created a new events to List: SMUIList:mountItem and SMUIList:unmountItem, which tells the parent when some of its children are added or removed. Then, I implemented an event handler of Select for the new events to update the internal list and call layoutOptions. layoutOptions should always be called whenever the options are updated (Ref. https://github.com/material-components/material-components-web/blob/f80ac92b08dfa1b59cd9faf74f3d19a4b134993e/packages/mdc-select/foundation.ts#L235-L239.

Another Option

The change might be simpler adding bind:accessor={list} to the List. But I didn't choose it because List seems to want to hide its accessor as the implementation details. I'll rewrite to try if you prefer.