Reactive State Fix
This commit is contained in:
@@ -36,7 +36,7 @@ local tHex = require("libraries/colorHex")
|
|||||||
--- text = "Option 1",
|
--- text = "Option 1",
|
||||||
--- callback = function(self)
|
--- callback = function(self)
|
||||||
--- -- Handle selection
|
--- -- Handle selection
|
||||||
--- basalt.debug("Selected Option 1")
|
--- basalt.LOGGER.debug("Selected Option 1")
|
||||||
--- end
|
--- end
|
||||||
--- },
|
--- },
|
||||||
--- {
|
--- {
|
||||||
@@ -49,7 +49,7 @@ local tHex = require("libraries/colorHex")
|
|||||||
---
|
---
|
||||||
--- -- Listen for selections
|
--- -- Listen for selections
|
||||||
--- dropdown:onChange(function(self, value)
|
--- dropdown:onChange(function(self, value)
|
||||||
--- basalt.debug("Selected:", value)
|
--- basalt.LOGGER.debug("Selected:", value)
|
||||||
--- end)
|
--- end)
|
||||||
---
|
---
|
||||||
--- basalt.run()
|
--- basalt.run()
|
||||||
|
|||||||
@@ -87,9 +87,34 @@ local function parseExpression(expr, element, propName)
|
|||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
if objName == "self" then
|
if objName == "self" then
|
||||||
return element.get(propName)
|
-- Check if property exists
|
||||||
|
if element._properties[propName] then
|
||||||
|
return element.get(propName)
|
||||||
|
end
|
||||||
|
if element._registeredStates and element._registeredStates[propName] then
|
||||||
|
return element:hasState(propName)
|
||||||
|
end
|
||||||
|
local states = element.get("states")
|
||||||
|
if states and states[propName] ~= nil then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
errorManager.header = "Reactive evaluation error"
|
||||||
|
errorManager.error("Property or state '" .. propName .. "' not found in element '" .. element:getType() .. "'")
|
||||||
|
return nil
|
||||||
elseif objName == "parent" then
|
elseif objName == "parent" then
|
||||||
return element.parent.get(propName)
|
if element.parent._properties[propName] then
|
||||||
|
return element.parent.get(propName)
|
||||||
|
end
|
||||||
|
if element.parent._registeredStates and element.parent._registeredStates[propName] then
|
||||||
|
return element.parent:hasState(propName)
|
||||||
|
end
|
||||||
|
local states = element.parent.get("states")
|
||||||
|
if states and states[propName] ~= nil then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
errorManager.header = "Reactive evaluation error"
|
||||||
|
errorManager.error("Property or state '" .. propName .. "' not found in parent element")
|
||||||
|
return nil
|
||||||
else
|
else
|
||||||
local target = element.parent:getChild(objName)
|
local target = element.parent:getChild(objName)
|
||||||
if not target then
|
if not target then
|
||||||
@@ -98,7 +123,19 @@ local function parseExpression(expr, element, propName)
|
|||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
|
||||||
return target.get(propName)
|
if target._properties[propName] then
|
||||||
|
return target.get(propName)
|
||||||
|
end
|
||||||
|
if target._registeredStates and target._registeredStates[propName] then
|
||||||
|
return target:hasState(propName)
|
||||||
|
end
|
||||||
|
local states = target.get("states")
|
||||||
|
if states and states[propName] ~= nil then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
errorManager.header = "Reactive evaluation error"
|
||||||
|
errorManager.error("Property or state '" .. propName .. "' not found in element '" .. objName .. "'")
|
||||||
|
return nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
}, { __index = mathEnv })
|
}, { __index = mathEnv })
|
||||||
@@ -176,14 +213,26 @@ local function setupObservers(element, expr, propertyName)
|
|||||||
end
|
end
|
||||||
|
|
||||||
if target then
|
if target then
|
||||||
|
local isState = false
|
||||||
|
if target._properties[prop] then
|
||||||
|
isState = false
|
||||||
|
elseif target._registeredStates and target._registeredStates[prop] then
|
||||||
|
isState = true
|
||||||
|
else
|
||||||
|
local states = target.get("states")
|
||||||
|
if states and states[prop] ~= nil then
|
||||||
|
isState = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local observer = {
|
local observer = {
|
||||||
target = target,
|
target = target,
|
||||||
property = prop,
|
property = isState and "states" or prop,
|
||||||
callback = function()
|
callback = function()
|
||||||
element:updateRender()
|
element:updateRender()
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
target:observe(prop, observer.callback)
|
target:observe(observer.property, observer.callback)
|
||||||
table.insert(observers, observer)
|
table.insert(observers, observer)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user