Commit Graph

20 Commits

Author SHA1 Message Date
Gaetan Craig-Riou
31afdfd8c4 Disable "enter" hotkeys only on tag input element
We are still able to use enter to submit the form on anyother input.The
tag input creates a new tag when enter is pressed
2025-04-22 13:42:09 +10:00
Gaetan Craig-Riou
157de25f36 Prettyfy code 2025-04-22 13:41:02 +10:00
Gaetan Craig-Riou
9e1a80c327 Mock hotkeys.js 2025-04-22 13:41:02 +10:00
Gaetan Craig-Riou
94cc774f27 Fix html used in test
It get rids of errors, even if they didn't affect the test result it's
noise we don't need
2025-04-22 13:41:02 +10:00
David Cook
4f287ffe05 When dropdown fields don't allow blank, but are blank, show as changed
They were already counted as changed by the javascript, but didn't have a 'changed' class to indicate it.
The reason they are 'changed', is because the dropdown has no blank option, and is forced to select the first item in the list.

This is purely to cover the case of invalid data, but should help a lot when debugging data issues. I don't think it's any less efficient, because the extra 'classList.toggle' calls don't do anything on unchanged fields.
2024-05-27 17:14:18 +10:00
David Cook
bfd6319cf2 Mark tom-select as changed
Thankfully I was able to use basic DOM features, so there's no coupling of the logic with tom-select.

It wasn't going to be simple to get tom-select to listen for the 'changed' class on the original select, so I found a simple solution with a CSS sibling selector instead.
2024-03-06 13:41:22 +11:00
David Cook
915a5ce66b Listen for changes on added fields
Finally, we can add new variants!

Requires updated stimulus-rails-nested-form
2024-02-16 08:51:49 +11:00
David Cook
994dd606b9 Refactor: remove dead code
I was mistakenly thinking that you can define variables in beforeEach, but it turns out these are not used.

Rather, Jest was automatically creating variables for the elements according to their IDs. How convenient!
2023-11-28 10:44:34 +11:00
David Cook
373743f96d Simplify event handlers
The new 'input' event is for this exact use case.
2023-11-28 10:44:34 +11:00
David Cook
735b5789cc [wip] Style on-hand button
Had to update the form controller a little bit to handle buttons.

But arrow not showwing on focus.
Getting some weird SCSS behaviour here.. maybe I'm trying to be too clever.
2023-11-28 10:44:34 +11:00
David Cook
7fe6f3fe89 Disable form elements in a disabled-section
I chose to use the 'elements' collection rather than choosing which elements to include (ie this supports inputs, textareas, buttons and anything else I didn't think of). It could be a bit simpler if we assume the element is a form. Even simpler if it's a fieldset (that has a disabled property). But I didn't want to limit it too much.

Unfortunately JS is quite ugly compared to Ruby. And 'prettier' made it uglier in my opinion.
2023-11-03 14:32:58 +11:00
David Cook
d0abbc5d2c Ensure error summary always shows when error
Best viewed with whitespace ignored.
2023-11-03 14:32:58 +11:00
David Cook
fdad45bb46 Rename 'modified' state to 'changed'
This conveniently matches the terminology used in both JavaScript and ActiveModel::Dirty.
2023-10-24 15:21:13 +11:00
David Cook
759705efcf Add spec for onKeyup 2023-09-19 14:48:39 +10:00
David Cook
6bfdd1bc12 Split spec into multiple examples 2023-09-19 14:48:34 +10:00
David Cook
e075d40525 Prevent accidentally leaving the page 2023-09-15 16:00:41 +10:00
David Cook
8ff67aca41 Disable filters and sorting when form is modified
Stimulus controllers aren't supposed to reach outside their own element (so we can't do this with targets). Perhaps the controller should be bigger to encompass more, but I wanted to see if I could avoid making a mega component that does everything. For now it seems appropriate just to pass a selector in.
Another option is to publish events on other controllers using Outlets, but I don't know if we need to go there just yet.
2023-09-15 15:45:48 +10:00
David Cook
15f7a8299b Show form actions only when modified 2023-09-15 15:45:48 +10:00
David Cook
daefada5a9 Show summary of modified records
I found myself trying to write Ruby in Javascript, and it's not nearly as pretty..
Javascript now has more advanced data structures like Map, but it's rather useless because it doesn't have the usual iterator methods (such as filter, map, reduce etc).

Also for the spec I wasn't sure of the best approach, so will gladly recieve feedback.
2023-09-15 15:45:48 +10:00
David Cook
18e40bebd0 Mark modified fields 2023-09-15 15:45:45 +10:00