Boolean checkbox is always in changed data, even if it didn't change.
Boolean checkbox is always in changed data, even if it didn't change.
I have a field on my editor that is configured as a boolean checkbox like this, based on the example at the bottom of these docs:
{
'data': 'has_cats',
'name': 'has_cats',
'label': 'Does the house have cats?',
'type': 'checkbox',
'options': [{'label': '', 'value': 1}],
'unselectedValue': 0,
}
I also have my editor set up to only submit the changed data on submit like this in the editor options based on the docs here:
formOptions: {
main: {
submit: 'changed'
},
}
This is working beautifully for all field types except the boolean checkbox, which is added to the changed data even if I didn't change it. I assume this has to do with the values changing slightly via the unselectedValue
option.
If the value was already True, it doesn't add it to the changed fields, but if the value was False, and I edit the form (or even if I open the form and don't change anything), it picks up that field as "changed" in the data:
{
'data[item-1][has_cats][]': ['0'], // note the string of '0' instead of the integer
'action': ['edit']
}
Is there a way to configure these fields to properly only show in the changed data if it was actually changed?
Answers
See if this example helps.
Kevin
Thanks, Kevin! That is not quite what I'm looking for since we are using the bubble editor and not inline editing so we don't want the checkbox to show on the table itself. That also doesn't account for the fact that the post request payload is sending a string of
'0'
instead of the actual 0 value.Hi,
The issue is that we get the value from the checkbox's
value
parameter, which is always read back as a string. Typing information, unfortunately, is lost when using DOM attributes.One way to address this is with the
fields.getFormatter
option - you could "cast" the value back to an integer there - for example:or without arrow functions:
That said, it is odd that
unselectedValue
is coming back as a string. It doesn't have a checkbox, and looking at the code, it does do any type conversion, so it should be anumber
.If the formatting function doesn't help (it should ), can you link to a page showing the issue please?
Allan
Thanks Allan! I'll need to look into that a bit because we have a slightly unique set up with our field configuration, which we are defining in a python file, converting to JSON, and passing to the JS where we configure all the datatables stuff (this works best for our setup using python+Django).
Because of that setup, it's difficult to pass & parse javascript functions through that flow, but we're looking into maybe making a special case and defining this one field directly in the JS instead.