From b41f9a97e2ae5202feaf427d1f8624a8fbc6fbb9 Mon Sep 17 00:00:00 2001 From: Francisco Hodge Date: Wed, 22 Apr 2020 21:52:17 -0400 Subject: [PATCH] Added setOptions re-render check --- package.json | 2 +- src/lib/components/Keyboard.js | 38 +++++++++++++++++++++++++--------- 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index dae25e19..75383647 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "simple-keyboard", - "version": "2.28.73", + "version": "2.29.0", "description": "On-screen Javascript Virtual Keyboard", "main": "build/index.js", "types": "build/index.d.ts", diff --git a/src/lib/components/Keyboard.js b/src/lib/components/Keyboard.js index 6da2af61..b79d7601 100644 --- a/src/lib/components/Keyboard.js +++ b/src/lib/components/Keyboard.js @@ -468,19 +468,37 @@ class SimpleKeyboard { * Set new option or modify existing ones after initialization. * @param {object} options The options to set */ - setOptions(options) { - options = options || {}; + setOptions(options = {}) { + const changedOptions = this.changedOptions(options); this.options = Object.assign(this.options, options); - /** - * Some option changes require adjustments before re-render - */ - this.onSetOptions(options); + if (changedOptions.length) { + if (this.options.debug) { + console.log("changedOptions", changedOptions); + } - /** - * Rendering - */ - this.render(); + /** + * Some option changes require adjustments before re-render + */ + this.onSetOptions(options); + + /** + * Rendering + */ + this.render(); + } + } + + /** + * Detecting changes to non-function options + * This allows us to ascertain whether a button re-render is needed + */ + changedOptions(newOptions) { + return Object.keys(newOptions).filter( + optionName => + JSON.stringify(newOptions[optionName]) !== + JSON.stringify(this.options[optionName]) + ); } /**