Skip to content

Commit c6d0a76

Browse files
committed
🆕 implement #14
1 parent 84b0a2c commit c6d0a76

File tree

4 files changed

+81
-1
lines changed

4 files changed

+81
-1
lines changed

dev/data.js

+1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ module.exports = {
3232
user.role = fakerator.random.arrayElement(roles).id;
3333
//user.mobile = fakerator.phone.phoneNumber();
3434
user.avatar = fakerator.internet.avatar();
35+
user.sex = fakerator.random.arrayElement(["male", "female"]);
3536

3637
user.skills = fakerator.utimes(fakerator.random.arrayElement, 2, skills);
3738

dev/schema.js

+12
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,18 @@ module.exports = {
234234

235235
},
236236

237+
{
238+
type: "switch",
239+
label: "Sex (switch field)",
240+
model: "sex",
241+
multi: true,
242+
default: "male",
243+
textOn: "Female",
244+
textOff: "Male",
245+
valueOn: "female",
246+
valueOff: "male"
247+
},
248+
237249
{
238250
type: "slider",
239251
label: "Rank (slider field)",

src/fields/fieldSwitch.vue

+22-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,28 @@
99
import abstractField from "./abstractField";
1010
1111
export default {
12-
mixins: [ abstractField ]
12+
mixins: [ abstractField ],
13+
14+
methods: {
15+
16+
formatValueToField(value) {
17+
if (value != null && this.schema.valueOn)
18+
return value == this.schema.valueOn;
19+
20+
return value;
21+
},
22+
23+
formatValueToModel(value) {
24+
if (value != null && this.schema.valueOn) {
25+
if (value)
26+
return this.schema.valueOn;
27+
else
28+
return this.schema.valueOff;
29+
}
30+
31+
return value;
32+
}
33+
}
1334
};
1435
</script>
1536

test/unit/specs/fields/fieldSwitch.spec.js

+46
Original file line numberDiff line numberDiff line change
@@ -102,4 +102,50 @@ describe("FieldSwitch.vue", () => {
102102

103103
});
104104

105+
describe("check template with custom On/Off values", () => {
106+
let schema = {
107+
type: "switch",
108+
model: "sex",
109+
textOn: "Female",
110+
textOff: "Male",
111+
valueOn: "female",
112+
valueOff: "male"
113+
};
114+
let model = { sex: "female" };
115+
let input;
116+
117+
before( () => {
118+
createField(schema, model, false);
119+
input = el.querySelector("input");
120+
});
121+
122+
it("check input value", (done) => {
123+
vm.$nextTick( () => {
124+
expect(input.checked).to.be.true;
125+
done();
126+
});
127+
});
128+
129+
it("input value should be the model value after changed", (done) => {
130+
model.sex = "male";
131+
vm.$nextTick( () => {
132+
expect(input.checked).to.be.false;
133+
done();
134+
});
135+
136+
});
137+
138+
it("model value should be the input value if changed", (done) => {
139+
input.checked = true;
140+
trigger(input, "change");
141+
142+
vm.$nextTick( () => {
143+
expect(model.sex).to.be.equal("female");
144+
done();
145+
});
146+
147+
});
148+
149+
});
150+
105151
});

0 commit comments

Comments
 (0)