Skip to content

Commit a0615fb

Browse files
committed
Updated for multiple selection on forms
1 parent 0b83827 commit a0615fb

File tree

3 files changed

+39
-2
lines changed

3 files changed

+39
-2
lines changed

js/form.js

+37
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,17 @@ export default class Form extends View {
121121
elem.checked = true;
122122
}
123123
break;
124+
case 'select':
125+
if (elem.multiple) {
126+
elem.options.forEach((opt) => {
127+
// eslint-disable-next-line no-param-reassign
128+
opt.selected = this.constructor.$selected(opt.value, value);
129+
});
130+
} else {
131+
// eslint-disable-next-line no-param-reassign
132+
elem.value = `${value}`;
133+
}
134+
break;
124135
default:
125136
// eslint-disable-next-line no-param-reassign
126137
elem.value = `${value}`;
@@ -129,6 +140,22 @@ export default class Form extends View {
129140
});
130141
}
131142

143+
static $selected(value, src) {
144+
if (src) {
145+
if (typeof src === 'string') {
146+
return value === src;
147+
}
148+
if (Array.isArray(src)) {
149+
for (let i = 0; i < src.length; i += 1) {
150+
if (this.$selected(value, src[i])) {
151+
return true;
152+
}
153+
}
154+
}
155+
}
156+
return false;
157+
}
158+
132159
get values() {
133160
const values = {};
134161
Array.from(this.$form.elements).forEach((elem) => {
@@ -140,6 +167,16 @@ export default class Form extends View {
140167
values[key] = elem.value;
141168
}
142169
break;
170+
case 'select':
171+
if (elem.multiple) {
172+
values[key] = [];
173+
elem.selectedOptions.forEach((opt) => {
174+
values[key].push(opt.value);
175+
});
176+
} else {
177+
values[key] = elem.value;
178+
}
179+
break;
143180
default:
144181
values[key] = elem.value;
145182
break;

js/provider.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ export default class Provider extends Emitter {
147147
$fetch(url, req) {
148148
let status;
149149
let changed = false;
150-
this.dispatchEvent(EVENT_STARTED, this, this.$origin + url);
150+
this.dispatchEvent(EVENT_STARTED, this, this.$origin + (url || ''));
151151
fetch(this.$origin + url, req)
152152
.then((response) => {
153153
status = response;

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@djthorpe/js-framework",
3-
"version": "0.0.26",
3+
"version": "0.0.27",
44
"description": "Javascript Framework",
55
"main": "dist/js/index.js",
66
"scripts": {

0 commit comments

Comments
 (0)