Another small change for states

This commit is contained in:
Robert Jelic
2025-04-16 05:08:20 +02:00
parent 44bf0945a2
commit c00409e8d5

View File

@@ -89,7 +89,7 @@ function BaseElement:setState(name, value)
-- Trigger observers -- Trigger observers
if observers[name] then if observers[name] then
for _, callback in ipairs(observers[name]) do for _, callback in ipairs(observers[name]) do
callback(self, name, value) callback(name, value)
end end
end end
@@ -99,7 +99,7 @@ function BaseElement:setState(name, value)
state.value = state.computeFn(self) state.value = state.computeFn(self)
if observers[stateName] then if observers[stateName] then
for _, callback in ipairs(observers[stateName]) do for _, callback in ipairs(observers[stateName]) do
callback(self, stateName, state.value) callback(stateName, state.value)
end end
end end
end end
@@ -135,12 +135,12 @@ end
--- @return BaseElement self The element instance --- @return BaseElement self The element instance
function BaseElement:onStateChange(stateName, callback) function BaseElement:onStateChange(stateName, callback)
local main = self:getBaseFrame() local main = self:getBaseFrame()
if not main.get("states")[stateName] then local state = main.get("states")[stateName]
if not state then
errorManager.error("Cannot observe state '" .. stateName .. "': State not initialized") errorManager.error("Cannot observe state '" .. stateName .. "': State not initialized")
return self return self
end end
local observers = main.get("stateObserver") local observers = main.get("stateObserver")
if not observers[stateName] then if not observers[stateName] then
observers[stateName] = {} observers[stateName] = {}
end end
@@ -201,14 +201,14 @@ function BaseElement:bind(propertyName, stateName)
self.set(propertyName, main:getState(stateName)) self.set(propertyName, main:getState(stateName))
end end
self:onChange(propertyName, function(_, name, value) self:onChange(propertyName, function(self, value)
if internalCall then return end if internalCall then return end
internalCall = true internalCall = true
self:setState(stateName, value) self:setState(stateName, value)
internalCall = false internalCall = false
end) end)
self:onStateChange(stateName, function(_, name, value) self:onStateChange(stateName, function(name, value)
if internalCall then return end if internalCall then return end
internalCall = true internalCall = true
if self.get(propertyName) ~= nil then if self.get(propertyName) ~= nil then