Skip to content

Commit 8fb0fba

Browse files
committed
fix: improve handling of radio inputs and select elements in setValue function
1 parent 8d1e0e1 commit 8fb0fba

File tree

3 files changed

+27
-11
lines changed

3 files changed

+27
-11
lines changed

src/getValue.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,10 @@ const getValue = (element, valueType) => {
5656
case "radio":
5757
const key = element.getAttribute("key");
5858
// Handles radio inputs by selecting the checked radio's value in the group with the same key
59-
value = document.querySelector(`input[key="${key}"]:checked`).value;
59+
let el = document.querySelector(`input[key="${key}"]:checked`);
60+
if (el) {
61+
value = el.value;
62+
}
6063
break;
6164

6265
case "number":

src/operators.js

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ const customOperators = new Map(
88
$clientId: () => localStorage.getItem("clientId"),
99
$session_id: () => localStorage.getItem("session_id"),
1010
$value: (element) => element.getValue() || "",
11+
// TODO: get length of value
12+
// $length: (element) => {element.getValue() || ""},
1113
$innerWidth: () => window.innerWidth,
1214
$innerHeight: () => window.innerHeight,
1315
$href: () => window.location.href.replace(/\/$/, ""),
@@ -34,7 +36,19 @@ const customOperators = new Map(
3436
return path === "/" ? "" : path;
3537
},
3638
$param: (element, args) => args,
37-
$setValue: (element, args) => element.setValue(...args) || ""
39+
$setValue: (element, args) => element.setValue(...args) || "",
40+
$true: () => true,
41+
$false: () => false,
42+
// TODO: Handle uuid generation
43+
// $uid: () => uid.generate(6),
44+
$parse: (element, args) => {
45+
let value = args || "";
46+
try {
47+
return JSON.parse(value);
48+
} catch (e) {
49+
return value;
50+
}
51+
}
3852
})
3953
);
4054

@@ -49,7 +63,8 @@ const propertyOperators = new Set([
4963
"$className",
5064
"$textContent",
5165
"$innerHTML",
52-
"$getValue"
66+
"$getValue",
67+
"$reset"
5368
]);
5469

5570
// Combine all known operator keys for the main parsing regex

src/setValue.js

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ const setValue = (el, value, dispatch) => {
5252
if (
5353
el.tagName == "INPUT" ||
5454
el.tagName == "TEXTAREA" ||
55-
(el.tagName == "SELECT" && el.options.length)
55+
el.tagName == "SELECT"
5656
) {
5757
// TODO: attribute config undefined when used with onload-value
5858
let isCrdt = el.getAttribute("crdt");
@@ -71,9 +71,11 @@ const setValue = (el, value, dispatch) => {
7171
if (inputs[i].value) {
7272
if (value === true || value === false)
7373
inputs[i].checked = value;
74-
else if (value.includes(inputValue))
74+
else if (value.includes(inputValue) || value === "on") {
7575
inputs[i].checked = true;
76-
else inputs[i].checked = false;
76+
} else {
77+
inputs[i].checked = false;
78+
}
7779
} else {
7880
if (
7981
value === "true" ||
@@ -88,11 +90,7 @@ const setValue = (el, value, dispatch) => {
8890
el.value == value ? (el.checked = true) : (el.checked = false);
8991
} else if (el.type === "password") {
9092
el.value = __decryptPassword(value);
91-
} else if (
92-
el.tagName == "SELECT" &&
93-
el.hasAttribute("multiple") &&
94-
Array.isArray(value)
95-
) {
93+
} else if (el.tagName == "SELECT") {
9694
let options = el.options;
9795
for (let i = 0; i < options.length; i++) {
9896
if (value.includes && value.includes(options[i].value)) {

0 commit comments

Comments
 (0)