From d98fa5089585dd1053a73771fe4f839abc5748a9 Mon Sep 17 00:00:00 2001 From: David Higgins Date: Fri, 21 Dec 2018 11:59:56 -0500 Subject: [PATCH 1/3] added optional field property `debounceValidateTime` which works at the field level, allowing individual fields to be debounced as opposed to the entire schema. works the same as `formOptions.debounceValidateTime` --- src/fields/abstractField.js | 6 +++--- src/formGenerator.vue | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/fields/abstractField.js b/src/fields/abstractField.js index b3ca671b..0b620d26 100644 --- a/src/fields/abstractField.js +++ b/src/fields/abstractField.js @@ -139,7 +139,7 @@ export default { if (!isFunction(this.debouncedValidateFunc)) { this.debouncedValidateFunc = debounce( this.validate.bind(this), - objGet(this, "$parent.options.validateDebounceTime", 500) + objGet(this.schema, 'validateDebounceTime', objGet(this.formOptions, 'validateDebounceTime', 500)) ); } this.debouncedValidateFunc(); @@ -162,8 +162,8 @@ export default { this.schema.onChanged.call(this, this.model, newValue, oldValue, this.schema); } - if (objGet(this.$parent, "options.validateAfterChanged", false) === true) { - if (objGet(this.$parent, "options.validateDebounceTime", 0) > 0) { + if (objGet(this.formOptions, "validateAfterChanged", false) === true) { + if (objGet(this.schema, 'validateDebounceTime', objGet(this.formOptions, 'validateDebounceTime', 0)) > 0) { this.debouncedValidate(); } else { this.validate(); diff --git a/src/formGenerator.vue b/src/formGenerator.vue index aa10fffc..3d16b386 100644 --- a/src/formGenerator.vue +++ b/src/formGenerator.vue @@ -30,8 +30,9 @@ export default { default() { return { validateAfterLoad: false, - validateAsync: false, validateAfterChanged: false, + fieldIdPrefix: '', + validateAsync: false, validationErrorClass: "error", validationSuccessClass: "" }; From 57563175a322389c3ff433eccba7f11698d978b0 Mon Sep 17 00:00:00 2001 From: David Higgins Date: Fri, 21 Dec 2018 12:06:43 -0500 Subject: [PATCH 2/3] single-quotes fix --- src/fields/abstractField.js | 4 ++-- src/formGenerator.vue | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/fields/abstractField.js b/src/fields/abstractField.js index 0b620d26..b00ec2fd 100644 --- a/src/fields/abstractField.js +++ b/src/fields/abstractField.js @@ -139,7 +139,7 @@ export default { if (!isFunction(this.debouncedValidateFunc)) { this.debouncedValidateFunc = debounce( this.validate.bind(this), - objGet(this.schema, 'validateDebounceTime', objGet(this.formOptions, 'validateDebounceTime', 500)) + objGet(this.schema, "validateDebounceTime", objGet(this.formOptions, "validateDebounceTime", 500)) ); } this.debouncedValidateFunc(); @@ -163,7 +163,7 @@ export default { } if (objGet(this.formOptions, "validateAfterChanged", false) === true) { - if (objGet(this.schema, 'validateDebounceTime', objGet(this.formOptions, 'validateDebounceTime', 0)) > 0) { + if (objGet(this.schema, "validateDebounceTime", objGet(this.formOptions, "validateDebounceTime", 0)) > 0) { this.debouncedValidate(); } else { this.validate(); diff --git a/src/formGenerator.vue b/src/formGenerator.vue index 3d16b386..b58b35f3 100644 --- a/src/formGenerator.vue +++ b/src/formGenerator.vue @@ -31,7 +31,7 @@ export default { return { validateAfterLoad: false, validateAfterChanged: false, - fieldIdPrefix: '', + fieldIdPrefix: "", validateAsync: false, validationErrorClass: "error", validationSuccessClass: "" From 8c1f462bf94f77eac5f7a2e9e4bb91c012b36685 Mon Sep 17 00:00:00 2001 From: David Higgins Date: Fri, 21 Dec 2018 13:47:04 -0500 Subject: [PATCH 3/3] updated abstractField test, seems the `field.formOptions` wasn't being updated, the `this.$parent.options` reference was required here ... but it does work properly when using the fields client-side, so it's an issue with how the test is defined and not with how the component is written. --- test/unit/specs/fields/abstractField.spec.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/unit/specs/fields/abstractField.spec.js b/test/unit/specs/fields/abstractField.spec.js index 6d1b8525..4c0ba7f6 100644 --- a/test/unit/specs/fields/abstractField.spec.js +++ b/test/unit/specs/fields/abstractField.spec.js @@ -213,6 +213,8 @@ describe("abstractField.vue", () => { it("should call validate function after value changed", () => { options.validateAfterChanged = true; + // seems to be an issue with how the field is defined, the update to 'options' isn't carried over to field.formOptions + field.formOptions = options; field.value = "Jane Roe"; expect(field.validate.callCount).to.be.equal(1);