From 065d0a71bf400996cdbee6a516d4b2218e97769b Mon Sep 17 00:00:00 2001 From: Marcel Pociot Date: Tue, 24 Jan 2017 20:55:17 +0100 Subject: [PATCH] Add support for readonly and featured field functions --- src/formGenerator.vue | 26 ++++++++- test/unit/specs/VueFormGenerator.spec.js | 70 ++++++++++++++++++++++++ 2 files changed, 94 insertions(+), 2 deletions(-) diff --git a/src/formGenerator.vue b/src/formGenerator.vue index 710a62d0..7f343d36 100644 --- a/src/formGenerator.vue +++ b/src/formGenerator.vue @@ -106,8 +106,8 @@ div let baseClasses = { error: field.errors && field.errors.length > 0, disabled: this.fieldDisabled(field), - readonly: field.readonly, - featured: field.featured, + readonly: this.fieldReadonly(field), + featured: this.fieldFeatured(field), required: this.fieldRequired(field) }; @@ -161,6 +161,28 @@ div return field.visible; }, + // Get readonly prop of field + fieldReadonly(field) { + if (isFunction(field.readonly)) + return field.readonly(this.model); + + if (isNil(field.readonly)) + return false; + + return field.readonly; + }, + + // Get featured prop of field + fieldFeatured(field) { + if (isFunction(field.featured)) + return field.featured(this.model); + + if (isNil(field.featured)) + return false; + + return field.featured; + }, + // Validating the model properties validate() { this.clearValidationErrors(); diff --git a/test/unit/specs/VueFormGenerator.spec.js b/test/unit/specs/VueFormGenerator.spec.js index a0cfc39c..e8ba6c90 100644 --- a/test/unit/specs/VueFormGenerator.spec.js +++ b/test/unit/specs/VueFormGenerator.spec.js @@ -306,6 +306,76 @@ describe("VueFormGenerator.vue", () => { }); + describe("check fieldReadonly with function", () => { + let schema = { + fields: [ + { + type: "text", + label: "Name", + model: "name", + readonly(model) { return model.status; } + } + ] + }; + + let model = { + name: "John Doe", + status: true + }; + + before( () => { + createFormGenerator(schema, model); + }); + + it("should be readonly", () => { + expect(el.querySelector(".form-group").classList.contains("readonly")).to.be.true; + }); + + it("should be writable", (done) => { + model.status = false; + vm.$nextTick(() => { + expect(el.querySelector(".form-group").classList.contains("readonly")).to.be.false; + done(); + }); + }); + + }); + + describe("check fieldFeatured with function", () => { + let schema = { + fields: [ + { + type: "text", + label: "Name", + model: "name", + featured(model) { return model.status; } + } + ] + }; + + let model = { + name: "John Doe", + status: true + }; + + before( () => { + createFormGenerator(schema, model); + }); + + it("should be featured", () => { + expect(el.querySelector(".form-group").classList.contains("featured")).to.be.true; + }); + + it("should not be featured", (done) => { + model.status = false; + vm.$nextTick(() => { + expect(el.querySelector(".form-group").classList.contains("featured")).to.be.false; + done(); + }); + }); + + }); + describe("check fieldRequired with function", () => { let schema = { fields: [