diff --git a/libs/webServerAdminPaths.js b/libs/webServerAdminPaths.js
index 64384542..ddad25ca 100644
--- a/libs/webServerAdminPaths.js
+++ b/libs/webServerAdminPaths.js
@@ -4,6 +4,9 @@ var moment = require('moment')
var exec = require('child_process').exec;
var spawn = require('child_process').spawn;
var execSync = require('child_process').execSync;
+const {
+ mergeDeep
+} = require('./common.js')
module.exports = function(s,config,lang,app){
const {
deleteMonitor,
@@ -334,10 +337,12 @@ module.exports = function(s,config,lang,app){
return
}
form.mid = req.params.id.replace(/[^\w\s]/gi,'').replace(/ /g,'')
+ const alreadyExisting = s.group[groupKey].rawMonitorConfigurations[monitorId];
if(form && form.name){
s.checkDetails(form)
- form.ke = req.params.ke
- endData = await s.addOrEditMonitor(form,null,user)
+ const postForm = mergeDeep({}, alreadyExisting || {}, form);
+ form.ke = groupKey;
+ endData = await s.addOrEditMonitor(postForm,null,user)
}else{
endData.msg = user.lang.monitorEditText1;
}
diff --git a/web/assets/js/bs5.dashboard-base.js b/web/assets/js/bs5.dashboard-base.js
index 75648a2c..c626cbeb 100644
--- a/web/assets/js/bs5.dashboard-base.js
+++ b/web/assets/js/bs5.dashboard-base.js
@@ -1124,3 +1124,45 @@ function getQueryString(){
})
return theObject
}
+function getChangedObjectValues(obj1, obj2) {
+ if (Object.keys(obj1).length === 0) {
+ return obj2;
+ }
+
+ const changes = {};
+
+ function compare(obj1, obj2, changes) {
+ for (const key in obj1) {
+ if (obj1.hasOwnProperty(key)) {
+ if (Array.isArray(obj1[key]) && Array.isArray(obj2[key])) {
+ if (!arraysEqual(obj1[key], obj2[key])) {
+ changes[key] = obj2[key];
+ }
+ } else if (typeof obj1[key] === 'object' && obj1[key] !== null) {
+ if (typeof obj2[key] === 'object' && obj2[key] !== null) {
+ const nestedChanges = {};
+ compare(obj1[key], obj2[key], nestedChanges);
+ if (Object.keys(nestedChanges).length > 0) {
+ changes[key] = nestedChanges;
+ }
+ } else {
+ changes[key] = obj2[key];
+ }
+ } else if (obj1[key] !== obj2[key]) {
+ changes[key] = obj2[key];
+ }
+ }
+ }
+ }
+
+ function arraysEqual(arr1, arr2) {
+ if (arr1.length !== arr2.length) return false;
+ for (let i = 0; i < arr1.length; i++) {
+ if (arr1[i] !== arr2[i]) return false;
+ }
+ return true;
+ }
+
+ compare(obj1, obj2, changes);
+ return changes;
+}
diff --git a/web/assets/js/bs5.monitorSettings.js b/web/assets/js/bs5.monitorSettings.js
index 732150ce..1be702f2 100644
--- a/web/assets/js/bs5.monitorSettings.js
+++ b/web/assets/js/bs5.monitorSettings.js
@@ -817,34 +817,39 @@ editorForm.submit(function(e){
var validation = getMonitorEditFormFields()
if(!validation.ok){
var errorsFound = validation.errors
- $.sM.e.find('.msg').html(errorsFound.join('
'));
new PNotify({title:'Configuration Invalid',text:errorsFound.join('
'),type:'error'});
+ return;
}
var monitorConfig = validation.monitorConfig
- setSubmitButton(editorForm, lang[`Please Wait...`], `spinner fa-pulse`, true)
- $.post(getApiPrefix()+'/configureMonitor/'+$user.ke+'/'+monitorConfig.mid,{data:JSON.stringify(monitorConfig)},function(d){
- if(d.ok === false){
+ monitorConfig.ke = $user.ke;
+ var alreadyExisting = getDbColumnsForMonitor(loadedMonitors[monitorConfig.mid] || {});
+ var postFormVals = getChangedObjectValues(alreadyExisting, monitorConfig);
+ postFormVals.name = monitorConfig.name || alreadyExisting.name;
+ if(Object.keys(postFormVals).length > 0){
+ setSubmitButton(editorForm, lang[`Please Wait...`], `spinner fa-pulse`, true)
+ $.post(getApiPrefix()+'/configureMonitor/'+$user.ke+'/'+monitorConfig.mid,{data:JSON.stringify(postFormVals)},function(d){
+ if(d.ok === false){
+ new PNotify({
+ title: lang['Action Failed'],
+ text: d.msg,
+ type: 'danger'
+ })
+ }
+ debugLog(d)
+ setSubmitButton(editorForm, lang.Save, `check`, false)
+ }).fail((err) => {
new PNotify({
title: lang['Action Failed'],
- text: d.msg,
+ text: JSON.stringify(err, null, 3),
type: 'danger'
})
- }
- debugLog(d)
- setSubmitButton(editorForm, lang.Save, `check`, false)
- }).fail((err) => {
- new PNotify({
- title: lang['Action Failed'],
- text: JSON.stringify(err, null, 3),
- type: 'danger'
+ setSubmitButton(editorForm, lang.Save, `check`, false)
})
- setSubmitButton(editorForm, lang.Save, `check`, false)
- })
- //
- if(copySettingsSelector.val() === '1'){
- copyMonitorSettingsToSelected(monitorConfig)
+ //
+ if(copySettingsSelector.val() === '1'){
+ copyMonitorSettingsToSelected(monitorConfig)
+ }
}
- monitorEditorWindow.modal('hide')
return false;
});
//////////////////