mirror of
https://github.com/maybe-finance/maybe.git
synced 2025-08-09 07:25:19 +02:00
[claudesquad] update from 'entry-drawer-form-behavior' on 23 Jul 25 10:07 EDT
This commit is contained in:
parent
27133f665c
commit
bf3c0e7c13
2 changed files with 46 additions and 6 deletions
|
@ -5,21 +5,19 @@ export default class extends Controller {
|
||||||
// will trigger a form submission when the configured event is triggered.
|
// will trigger a form submission when the configured event is triggered.
|
||||||
static targets = ["auto"];
|
static targets = ["auto"];
|
||||||
static values = {
|
static values = {
|
||||||
triggerEvent: { type: String, default: "input" },
|
triggerEvent: { type: String },
|
||||||
};
|
};
|
||||||
|
|
||||||
connect() {
|
connect() {
|
||||||
this.autoTargets.forEach((element) => {
|
this.autoTargets.forEach((element) => {
|
||||||
const event =
|
const event = this.#getEventForElement(element);
|
||||||
element.dataset.autosubmitTriggerEvent || this.triggerEventValue;
|
|
||||||
element.addEventListener(event, this.handleInput);
|
element.addEventListener(event, this.handleInput);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
disconnect() {
|
disconnect() {
|
||||||
this.autoTargets.forEach((element) => {
|
this.autoTargets.forEach((element) => {
|
||||||
const event =
|
const event = this.#getEventForElement(element);
|
||||||
element.dataset.autosubmitTriggerEvent || this.triggerEventValue;
|
|
||||||
element.removeEventListener(event, this.handleInput);
|
element.removeEventListener(event, this.handleInput);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -33,6 +31,48 @@ export default class extends Controller {
|
||||||
}, this.#debounceTimeout(target));
|
}, this.#debounceTimeout(target));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#getEventForElement(element) {
|
||||||
|
// Check for explicitly set event first
|
||||||
|
if (element.dataset.autosubmitTriggerEvent) {
|
||||||
|
return element.dataset.autosubmitTriggerEvent;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check form-level trigger event value
|
||||||
|
if (this.triggerEventValue) {
|
||||||
|
return this.triggerEventValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Determine event based on input type
|
||||||
|
const type = element.type || element.tagName.toLowerCase();
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
case "text":
|
||||||
|
case "email":
|
||||||
|
case "password":
|
||||||
|
case "search":
|
||||||
|
case "tel":
|
||||||
|
case "url":
|
||||||
|
case "number":
|
||||||
|
case "textarea":
|
||||||
|
return "blur";
|
||||||
|
case "select-one":
|
||||||
|
case "select-multiple":
|
||||||
|
case "checkbox":
|
||||||
|
case "radio":
|
||||||
|
return "change";
|
||||||
|
case "date":
|
||||||
|
case "datetime-local":
|
||||||
|
case "month":
|
||||||
|
case "time":
|
||||||
|
case "week":
|
||||||
|
case "color":
|
||||||
|
case "range":
|
||||||
|
return "change";
|
||||||
|
default:
|
||||||
|
return "blur";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#debounceTimeout(element) {
|
#debounceTimeout(element) {
|
||||||
if (element.dataset.autosubmitDebounceTimeout) {
|
if (element.dataset.autosubmitDebounceTimeout) {
|
||||||
return Number.parseInt(element.dataset.autosubmitDebounceTimeout);
|
return Number.parseInt(element.dataset.autosubmitDebounceTimeout);
|
||||||
|
|
|
@ -44,7 +44,7 @@
|
||||||
url: valuation_path(entry),
|
url: valuation_path(entry),
|
||||||
method: :patch,
|
method: :patch,
|
||||||
class: "space-y-2",
|
class: "space-y-2",
|
||||||
data: { controller: "auto-submit-form", auto_submit_form_trigger_event_value: "blur" } do |f| %>
|
data: { controller: "auto-submit-form" } do |f| %>
|
||||||
<%= f.text_area :notes,
|
<%= f.text_area :notes,
|
||||||
label: t(".note_label"),
|
label: t(".note_label"),
|
||||||
placeholder: t(".note_placeholder"),
|
placeholder: t(".note_placeholder"),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue