Fix datetime picker on multi-form pages
The event_datetime_field JavaScript used querySelector to find the ts_utc hidden input by name, which breaks when multiple forms have ts_utc fields (like feed give and purchase forms). Now each hidden field gets a unique ID based on the field_id parameter, and the JavaScript uses getElementById for correct scoping. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -47,6 +47,7 @@ def event_datetime_field(
|
|||||||
"""
|
"""
|
||||||
picker_id = f"{field_id}_picker"
|
picker_id = f"{field_id}_picker"
|
||||||
input_id = f"{field_id}_input"
|
input_id = f"{field_id}_input"
|
||||||
|
ts_utc_id = f"{field_id}_ts_utc"
|
||||||
|
|
||||||
# If initial value is set, start with picker expanded
|
# If initial value is set, start with picker expanded
|
||||||
has_initial = bool(initial_value)
|
has_initial = bool(initial_value)
|
||||||
@@ -57,7 +58,7 @@ def event_datetime_field(
|
|||||||
toggle_onclick = f"""
|
toggle_onclick = f"""
|
||||||
var picker = document.getElementById('{picker_id}');
|
var picker = document.getElementById('{picker_id}');
|
||||||
var input = document.getElementById('{input_id}');
|
var input = document.getElementById('{input_id}');
|
||||||
var tsField = document.querySelector('input[name="ts_utc"]');
|
var tsField = document.getElementById('{ts_utc_id}');
|
||||||
if (picker.style.display === 'none') {{
|
if (picker.style.display === 'none') {{
|
||||||
picker.style.display = 'block';
|
picker.style.display = 'block';
|
||||||
this.textContent = 'Use current time';
|
this.textContent = 'Use current time';
|
||||||
@@ -70,14 +71,14 @@ def event_datetime_field(
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
# Inline JavaScript for input change handler
|
# Inline JavaScript for input change handler
|
||||||
input_onchange = """
|
input_onchange = f"""
|
||||||
var tsField = document.querySelector('input[name="ts_utc"]');
|
var tsField = document.getElementById('{ts_utc_id}');
|
||||||
if (tsField && this.value) {
|
if (tsField && this.value) {{
|
||||||
var date = new Date(this.value);
|
var date = new Date(this.value);
|
||||||
tsField.value = date.getTime().toString();
|
tsField.value = date.getTime().toString();
|
||||||
} else if (tsField) {
|
}} else if (tsField) {{
|
||||||
tsField.value = '0';
|
tsField.value = '0';
|
||||||
}
|
}}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
return Div(
|
return Div(
|
||||||
@@ -111,7 +112,7 @@ def event_datetime_field(
|
|||||||
),
|
),
|
||||||
cls="mt-1",
|
cls="mt-1",
|
||||||
),
|
),
|
||||||
Hidden(name="ts_utc", value=initial_ts),
|
Hidden(id=ts_utc_id, name="ts_utc", value=initial_ts),
|
||||||
cls="space-y-1",
|
cls="space-y-1",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user