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; }); //////////////////