Skip to content

Commit 7106394

Browse files
author
Lionel Bijaoui
committed
new: new "radios" field
1 parent deb50b6 commit 7106394

File tree

2 files changed

+101
-0
lines changed

2 files changed

+101
-0
lines changed

dev/schema.js

+32
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,38 @@ module.exports = {
218218
model: "",
219219
styleClasses: "alert alert-info"
220220
},
221+
{
222+
type: "radios",
223+
label: "RADIOS",
224+
model: "radios",
225+
values: [
226+
{name: "HTML5", value:"HTML5-123"},
227+
{name: "Javascript", value:{id:"Javascript-123", deep:true}},
228+
{name: "CSS3", value:"CSS3-123"},
229+
{name: "CoffeeScript", value:"CoffeeScript-123"},
230+
{name: "AngularJS", value:"AngularJS-123"},
231+
{name: "ReactJS", value:"ReactJS-123"},
232+
{name: "VueJS", value:"VueJS-123"}
233+
],
234+
radiosOptions: {
235+
value:"value",
236+
name:"name"
237+
}
238+
},
239+
{
240+
type: "radios",
241+
label: "RADIOS2",
242+
model: "radios2",
243+
values: [
244+
"HTML5",
245+
"Javascript",
246+
"CSS3",
247+
"CoffeeScript",
248+
"AngularJS",
249+
"ReactJS",
250+
"VueJS"
251+
]
252+
},
221253
{
222254
type: "image",
223255
label: "Avatar (image field)",

src/fields/fieldRadios.vue

+69
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
<template lang="jade">
2+
.radio-list(:disabled="disabled")
3+
label(v-for="item in items")
4+
input(type="radio", :disabled="disabled", :name="id", @click="onSelection(item)", :value="getItemValue(item)")
5+
| {{ getItemName(item) }}
6+
7+
</template>
8+
9+
<script>
10+
import {isObject} from "lodash";
11+
import abstractField from "./abstractField";
12+
13+
export default {
14+
mixins: [ abstractField ],
15+
16+
computed: {
17+
items() {
18+
let values = this.schema.values;
19+
if (typeof(values) == "function") {
20+
return values.apply(this, [this.model, this.schema]);
21+
} else {
22+
return values;
23+
}
24+
},
25+
id(){
26+
return this.schema.model;
27+
}
28+
},
29+
30+
methods: {
31+
onSelection(item) {
32+
if (isObject(item) && this.schema.radiosOptions.value && item[this.schema.radiosOptions.value]){
33+
this.value = item[this.schema.radiosOptions.value];
34+
} else{
35+
this.value = item;
36+
}
37+
},
38+
getItemValue(item) {
39+
if (isObject(item) && this.schema.radiosOptions.value && item[this.schema.radiosOptions.value]){
40+
return item[this.schema.radiosOptions.value];
41+
}
42+
43+
return item;
44+
},
45+
getItemName(item) {
46+
if (isObject(item) && this.schema.radiosOptions.name && item[this.schema.radiosOptions.name]){
47+
return item[this.schema.radiosOptions.name];
48+
}
49+
50+
return item;
51+
}
52+
}
53+
};
54+
</script>
55+
56+
<style lang="sass">
57+
.vue-form-generator .field-radios {
58+
59+
.radio-list {
60+
label {
61+
display: block;
62+
input[type="radio"]{
63+
margin-right: 5px;
64+
}
65+
}
66+
}
67+
68+
}
69+
</style>

0 commit comments

Comments
 (0)