- Fixed reactive not using getResolved

- Fixed responsive using default value instead of lower priority state value
This commit is contained in:
Robert Jelic
2025-11-05 01:36:52 +01:00
parent 424334cfae
commit cf082af210
3 changed files with 16 additions and 9 deletions

View File

@@ -232,6 +232,7 @@ function BaseElement:setState(stateName, priority)
end
states[stateName] = priority or 0
self.set("states", states)
return self
end
@@ -299,7 +300,9 @@ end
function BaseElement:updateConditionalStates()
for stateName, stateInfo in pairs(self._registeredStates) do
if stateInfo.condition then
if stateInfo.condition(self) then
local result = stateInfo.condition(self)
if result then
self:setState(stateName, stateInfo.priority)
else
self:unsetState(stateName)

View File

@@ -90,7 +90,7 @@ local function parseExpression(expr, element, propName)
if objName == "self" then
-- Check if property exists
if element._properties[propName] then
return element.get(propName)
return element.getResolved(propName)
end
if element._registeredStates and element._registeredStates[propName] then
return element:hasState(propName)
@@ -104,7 +104,7 @@ local function parseExpression(expr, element, propName)
return nil
elseif objName == "parent" then
if element.parent._properties[propName] then
return element.parent.get(propName)
return element.parent.getResolved(propName)
end
if element.parent._registeredStates and element.parent._registeredStates[propName] then
return element.parent:hasState(propName)
@@ -125,7 +125,7 @@ local function parseExpression(expr, element, propName)
end
if target._properties[propName] then
return target.get(propName)
return target.getResolved(propName)
end
if target._registeredStates and target._registeredStates[propName] then
return target:hasState(propName)

View File

@@ -335,12 +335,16 @@ function PropertySystem:__init()
end
self.getResolved = function(name, ...)
local currentState = self:getCurrentState()
local value
local activeStates = self:getActiveStates()
local value = nil
for _, stateInfo in ipairs(activeStates) do
if self._states and self._states[stateInfo.name] and self._states[stateInfo.name][name] ~= nil then
value = self._states[stateInfo.name][name]
break
end
end
if currentState and self._states and self._states[currentState] and self._states[currentState][name] ~= nil then
value = self._states[currentState][name]
else
if value == nil then
value = self._values[name]
end