-
Notifications
You must be signed in to change notification settings - Fork 21
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Quite difficult to understand how to use the Select component properly #187
Comments
I don't disagree with you as most people do not think in terms of objects for their Select values but strings. I will take a look at the Select and Autocomplete as you should be able to bind a string to the value of each of these and it just works. This will be a breaking change. |
Thank you for considering it. As seen below that's not a huge problem, but it definitely feels like it gets in the way of things just working the way one would expect. <script>
let languageObject;
$: language = languageObject && languageObject.value;
</script>
<Select bind:value={languageObject}> |
@jerefrer Not sure if you have seen the latest update for the |
How do you mean the latest update? Anyhow I was just now trying to improve the docs for this component with variable binding, and I found this: let value: SelectOption | undefined;
let error: string | undefined = "You're doing it wrong!";
$: if (value && value.value) {
error = undefined;
} else {
error = "You're doing it wrong!";
} I have to say that this Wouldn't it be much simpler that when we I see two possible ways to improve this:
Of course the second option would be quicker to implement but I believe the first one would be what a developer would expect to happen before he read the docs. Also it would allow bindind directly an object's property without having to resort to an intermediate variable: <Select bind:value={user.gender} />
<!-- versus -->
<script>
let selectedOption;
$: user.gender = selectedOption && selectedOption.value;
</script>
<Select bind:value={selectedOption} /> What do you think? :) |
Hi Jeremy,
I see how that would be confusing since I forgot to update the docs! The
underlying code has been changed and:
$: if (value) {
error = undefined;
} else {
error = "You're doing it wrong!";
}
Is the correct way of handling this with `bind:value` being the appropriate
binding. No more passing objects as values as that does not coordinate with
native behaviour.
…On Thu, Dec 28, 2023 at 8:16 AM Jérémy FRERE ***@***.***> wrote:
How do you mean the latest update?
I believe there hasn't been any recent update for Select that would have
an impact on how to use it.
Anyhow I was just now trying to improve the docs for this component with
variable binding, and I found this
<https://github.com/N00nDay/stwui/blob/main/src/routes/select/%2Bpage.svelte#L82>
:
let value: SelectOption | undefined;let error: string | undefined = "You're doing it wrong!";
$: if (value && value.value) {
error = undefined;} else {
error = "You're doing it wrong!";}
I have to say that this value.value bothers me.
Wouldn't it be much simpler that when we bind:value={value} it actually
returns the selected option's value only ?
I believe in the vast majority of cases the developer wouldn't care to get
back what the label is for the selected option.
I see two possible ways to improve this:
1.
bind:value={value} should return just the selected option's actual
value, and to have maybe another bind:label={label} if really someone
wants to get the label.
2.
renaming the current bind:value={value} into
bind:selectedOption={selectedOption}, leading to:
let value = selectedOption.value;let label = selectedOption.label;
which is much less confusing.
Of course the second option would be quicker to implement but I believe
the first one would be what a developer would expect to happen before he
read the docs.
Also it would allow bindind directly an object's property without having
to resort to an intermediate variable:
<Select bind:value={user.gender} />
// versus
<script> let selectedOption; $: user.gender = selectedOption && selectedOption.value;</script>
<Select bind:value={selectedOption} />
What do you think? :)
—
Reply to this email directly, view it on GitHub
<#187 (comment)>, or
unsubscribe
<https://github.com/notifications/unsubscribe-auth/AG3TJVN3PSD3YCJFXQUIV3DYLVWMTAVCNFSM6AAAAAA7ETSCNSVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQNZRGE3DSMJYGE>
.
You are receiving this because you were assigned.Message ID:
***@***.***>
|
Now that you mention it, I never pushed that update. It has been a busy end of year at work and travel for the holidays. I have this staged and I will try to get this pushed out along with the other pull requests this weekend. |
Ah yes I thought that might have been the case :) No rush, I'm not especially waiting for it but I'm just glad it's been taken care of ! |
Link to the Page
https://stwui.vercel.app/select
Describe the Issue (screenshots encouraged!)
Should I bind to the
value
attribute?Then the variable I am binding will be set to
{ label: X, value: Y }
, so I need to adapt my code to use the value only.Is there a way to bind a variable to receive the value directly?
Wouldn't it be nice to have it clearly explained in the docs?
The text was updated successfully, but these errors were encountered: