Support nested parameters in object configurations in presets.
This commit is contained in:
1 parent
c88e5d6fe8
commit
c70354997a
2 files changed
+35
-13
No files matched your search
+13
-1
@@ -82,10 +82,22 @@ exports.parseDeviceId = (deviceId) ->
|
||||
|
||||
|
||||
exports.extend = (obj, mixin) ->
|
||||
obj[name] = method for name, method of mixin
|
||||
obj[name] = method for name, method of mixin
|
||||
obj
|
||||
|
||||
|
||||
exports.flattenObject = (object) ->
|
||||
newObj = {}
|
||||
f = (obj, prefix) ->
|
||||
for k, v of obj
|
||||
if typeof(v) is 'object'
|
||||
f(v, "#{prefix}#{k}.")
|
||||
else
|
||||
newObj["#{prefix}#{k}"] = v
|
||||
f(object, '')
|
||||
return newObj
|
||||
|
||||
|
||||
exports.getParamValueFromPath = (obj, path) ->
|
||||
pp = path.split('.')
|
||||
ref = obj
|
||||
|
||||
+22
-12
@@ -54,12 +54,21 @@ exports.calculatePresetsHash = (presets, objects) ->
|
||||
|
||||
|
||||
matchObject = (object, param) ->
|
||||
return false if not object._keys? or object._keys.length == 0
|
||||
for k in object._keys
|
||||
return false if not param[k]?
|
||||
v = common.matchType(param[k]._value, object[k])
|
||||
if param[k]._value != v
|
||||
flatObject = common.flattenObject(object)
|
||||
if object._keys?.length
|
||||
keys = object._keys
|
||||
else
|
||||
# Consider all parameters as keys if none are defined
|
||||
keys = (k for k in Object.keys(flatObject) when k[0] != '_')
|
||||
|
||||
for k in keys
|
||||
p = common.getParamValueFromPath(param, k)
|
||||
return false if not p?
|
||||
v = common.matchType(p._value, flatObject[k])
|
||||
|
||||
if p._value != common.matchType(p._value, flatObject[k])
|
||||
return false
|
||||
|
||||
return true
|
||||
|
||||
|
||||
@@ -250,18 +259,19 @@ exports.processDevicePreset = (deviceId, devicePreset, callback) ->
|
||||
for objectName, objectDetails of object
|
||||
continue if not objectDetails.current?
|
||||
if objectDetails.preset?
|
||||
flatObject = common.flattenObject(objectDetails.preset)
|
||||
if Object.keys(objectDetails.current).length > 0
|
||||
for i, obj of objectDetails.current
|
||||
for paramName, paramValue of objectDetails.preset
|
||||
for paramName, paramValue of flatObject
|
||||
continue if paramName[0] == '_'
|
||||
if obj[paramName]
|
||||
currentValue = obj[paramName]._value
|
||||
presetValue = common.matchType(currentValue, objectDetails.preset[paramName])
|
||||
if currentValue != presetValue
|
||||
setParameterValues.push(["#{parameterPath}.#{i}.#{paramName}", presetValue, obj[paramName]._type])
|
||||
currentValue = common.getParamValueFromPath(obj, paramName)
|
||||
if currentValue?
|
||||
presetValue = common.matchType(currentValue._value, flatObject[paramName])
|
||||
if currentValue._value != presetValue
|
||||
setParameterValues.push(["#{parameterPath}.#{i}.#{paramName}", presetValue, currentValue._type])
|
||||
else
|
||||
vals = []
|
||||
for k,v of objectDetails.preset
|
||||
for k,v of flatObject
|
||||
vals.push([k, v]) if k[0] != '_'
|
||||
taskList.push({device : deviceId, name : 'addObject', objectName : parameterPath, parameterValues : vals, instanceName : objectName})
|
||||
else if Object.keys(objectDetails.current).length > 0
|
||||
|
||||
Reference in new issue
Block a user