/*global ConsoleLogging jsrsExecuteWithErrorP rsCallbackHandleStandardJSONResponse UserOptionDataType_Enum UserOptionStrings_Const */ //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ // eslint-disable-next-line no-unused-vars var SZUserOptions = function() { var _userOptionsMap; //-------------------------------------------------------------------------- //-------------------------------------------------------------------------- function pbSetUserOptionsMap(userOptionsMap_) { _userOptionsMap = userOptionsMap_; } //-------------------------------------------------------------------------- //-------------------------------------------------------------------------- function pvGetOrCreateUserOptionsMap() { if(!_userOptionsMap) { _userOptionsMap = {}; } return _userOptionsMap; } //-------------------------------------------------------------------------- //-------------------------------------------------------------------------- function pvGetOption(optionId_) { var rc; if(null !== _userOptionsMap) { if(Object.prototype.hasOwnProperty.call(_userOptionsMap, optionId_)) { rc = _userOptionsMap[optionId_]; } } return rc; } //-------------------------------------------------------------------------- //-------------------------------------------------------------------------- function pvGetOrCreateOption(optionId_) { var objOption = pvGetOption(optionId_); if(!objOption) { objOption = {}; pvGetOrCreateUserOptionsMap()[optionId_] = objOption; } return objOption; } //-------------------------------------------------------------------------- // Returns the "0/1" version of a boolean value. //-------------------------------------------------------------------------- function pbGetBooleanOption(optionId_, defaultValue_) { var objOption = pvGetOption(optionId_), rc = objOption ? objOption.booleanValFromIntVal : defaultValue_; if(rc !== null && rc !== undefined) { rc = rc ? 1 : 0; } return rc; } //-------------------------------------------------------------------------- //-------------------------------------------------------------------------- function pbSetBooleanOption(optionId_, value_) { var objOption = pvGetOrCreateOption(optionId_), tmpUnderlyingVal = value_ ? 1 : 0; objOption.intVal = tmpUnderlyingVal; objOption.decimalVal = tmpUnderlyingVal; objOption.booleanValFromIntVal = !!value_; } //-------------------------------------------------------------------------- //-------------------------------------------------------------------------- function pbGetIntOption(optionId_, defaultValue_) { var objOption = pvGetOption(optionId_), rc = objOption ? objOption.intVal : defaultValue_; return rc; } //-------------------------------------------------------------------------- //-------------------------------------------------------------------------- function pbSetIntOption(optionId_, value_) { var objOption = pvGetOrCreateOption(optionId_), tmpFloatValue, tmpIntVal = null; if(Number.isInteger(value_)) { tmpIntVal = value_; } else if('' !== value_ && null !== value_ && undefined !== value_) { tmpFloatValue = parseFloat(value_); if(Number.isInteger(tmpFloatValue)) { tmpIntVal = parseInt(tmpFloatValue); } } objOption.intVal = tmpIntVal; objOption.decimalVal = tmpIntVal; objOption.booleanValFromIntVal = tmpIntVal === 1; } //-------------------------------------------------------------------------- //-------------------------------------------------------------------------- function pbGetDecimalOption(optionId_, defaultValue_) { var objOption = pvGetOption(optionId_), rc = objOption ? objOption.decimalVal : defaultValue_; return rc; } //-------------------------------------------------------------------------- //-------------------------------------------------------------------------- function pbSetDecimalOption(optionId_, value_) { var objOption = pvGetOrCreateOption(optionId_), tmpFloatValue = parseFloat(value_), tmpIsNaN = isNaN(tmpFloatValue), tmpValueIsInteger = !tmpIsNaN && Number.isInteger(tmpFloatValue), tmpParsedAsInt = tmpValueIsInteger ? parseInt(value_, 10) : null; objOption.intVal = tmpParsedAsInt; objOption.decimalVal = tmpIsNaN ? null : tmpFloatValue; objOption.booleanValFromIntVal = tmpParsedAsInt === 1; } //-------------------------------------------------------------------------- //-------------------------------------------------------------------------- function pbGetStringOption(optionId_, defaultValue_) { var objOption = pvGetOption(optionId_), rc = objOption ? objOption.noteVal : defaultValue_; return rc; } //-------------------------------------------------------------------------- //-------------------------------------------------------------------------- function pbSetStringOption(optionId_, value_) { var objOption = pvGetOrCreateOption(optionId_), tmpFloatValue = parseFloat(value_), tmpIsNaN = isNaN(tmpFloatValue), tmpValueIsInteger = !tmpIsNaN && Number.isInteger(tmpFloatValue), tmpParsedAsInt = tmpValueIsInteger ? parseInt(value_, 10) : null; objOption.stringValue = value_; objOption.intVal = tmpParsedAsInt; objOption.decimalVal = tmpIsNaN ? null : tmpFloatValue; objOption.booleanValFromIntVal = tmpParsedAsInt === 1; } //-------------------------------------------------------------------------- //-------------------------------------------------------------------------- function pbGetDateOnlyOption(optionId_, defaultValue_) { var objOption = pvGetOption(optionId_), rc = objOption ? objOption.dateOnlyOption : defaultValue_; return rc; } //-------------------------------------------------------------------------- //-------------------------------------------------------------------------- function pbSetDateOnlyOption(optionId_, value_) { var objOption = pvGetOrCreateOption(optionId_); objOption.dateOnlyOption = value_ || null; } //-------------------------------------------------------------------------- //-------------------------------------------------------------------------- function rsCallbackSaveUserOptionsToServer(json_) { ConsoleLogging.logBlockOpen('rsCallbackSaveUserOptionsToServer()'); ConsoleLogging.logObject({ what: 'Saved user options', json_: ConsoleLogging.undefinedStringIfUndefined(json_) }); ConsoleLogging.logBlockClose(); } //-------------------------------------------------------------------------- //-------------------------------------------------------------------------- function pvInterpretUserOptionAndAddToUpdateList(params_) { ConsoleLogging.logBlockOpen('SZUserOptions.pvInterpretUserOptionAndAddToUpdateList()'); var arrUpdateObjects = params_.arrUpdateObjects, objSourceOption = params_.sourceOption, tmpUserOptionId = objSourceOption[UserOptionStrings_Const.uosUserOptionId], tmpUserOptionDataTypeId = objSourceOption[UserOptionStrings_Const.uosUserOptionDataTypeId], objTargetUserOption = {}, tmpHandledType = 1; objTargetUserOption[UserOptionStrings_Const.uosUserOptionId] = tmpUserOptionId; objTargetUserOption[UserOptionStrings_Const.uosUserOptionDataTypeId] = tmpUserOptionDataTypeId; switch(tmpUserOptionDataTypeId) { case UserOptionDataType_Enum.uodtBoolean: objTargetUserOption.value = pbGetBooleanOption( tmpUserOptionId) ? 1 : 0; break; case UserOptionDataType_Enum.uodtDecimal: var tmpValue = pbGetDecimalOption(tmpUserOptionId); if(tmpValue === null || tmpValue === undefined) { tmpValue = ''; } objTargetUserOption[UserOptionStrings_Const.uosUserOptionValue] = tmpValue; break; default: tmpHandledType = 0; break; } if(tmpHandledType) { arrUpdateObjects.push(objTargetUserOption); } ConsoleLogging.logObject({ what: 'Interpretting an option', tmpKnownType: tmpHandledType, objTargetUserOption: objTargetUserOption, arrUpdateObjects__length: arrUpdateObjects.lengt, objSourceOption: objSourceOption }); ConsoleLogging.logBlockClose(); } //-------------------------------------------------------------------------- //-------------------------------------------------------------------------- function pbSaveUserOptionsToServer(params_) { ConsoleLogging.logBlockOpen('SZUserOptions.pbSaveUserOptionsToServer()'); var arrUserOptionIdAndDataType = params_.arrUserOptionIdAndDataType, strRemoteScriptingCommand = params_.remoteScriptingCommand, arrUpdateObjects = [], objPayload = {}; objPayload[UserOptionStrings_Const.uosUserOptionUpdateArrayName] = arrUpdateObjects; (arrUserOptionIdAndDataType || []).forEach(function(option_, idxOption_) { ConsoleLogging.logMessage('Interpreting option #' + idxOption_); if(option_) { pvInterpretUserOptionAndAddToUpdateList({ arrUpdateObjects: arrUpdateObjects, sourceOption: option_ }); } else { ConsoleLogging.logMessage('-[null option]-'); } }); ConsoleLogging.logObject({ what: 'TODO: Persist user options', arrUserOptionIdAndDataType: arrUserOptionIdAndDataType, arrUpdateObjects: arrUpdateObjects }); if(arrUpdateObjects.length) { jsrsExecuteWithErrorP( strRemoteScriptingCommand, // commandString_ rsCallbackHandleStandardJSONResponse, 'Updating User Options', objPayload, { fnOnSuccess: rsCallbackSaveUserOptionsToServer }); // options_ } ConsoleLogging.logBlockClose(); } //-------------------------------------------------------------------------- // SZUserOptions //-------------------------------------------------------------------------- return { setUserOptionsMap: pbSetUserOptionsMap, getBooleanOption: pbGetBooleanOption, setBooleanOption: pbSetBooleanOption, getIntOption: pbGetIntOption, setIntOption: pbSetIntOption, getDecimalOption: pbGetDecimalOption, setDecimalOption: pbSetDecimalOption, getStringOption: pbGetStringOption, setStringOption: pbSetStringOption, getDateOnlyOption: pbGetDateOnlyOption, setDateOnlyOption: pbSetDateOnlyOption, saveUserOptionsToServer: pbSaveUserOptionsToServer }; }();