Untracked

This commit is contained in:
Sabine Lim
2023-05-14 19:42:06 +10:00
parent 674955508d
commit 6fad764537

View File

@@ -167,7 +167,7 @@ local function registerFunctionEvent(self, data, event, renderContext)
end end
end end
local effectStack = {} local currentEffect = nil
local clearEffectDependencies = function(effect) local clearEffectDependencies = function(effect)
for _, dependency in ipairs(effect.dependencies) do for _, dependency in ipairs(effect.dependencies) do
@@ -186,15 +186,14 @@ return {
reactive = function(initialValue) reactive = function(initialValue)
local value = initialValue local value = initialValue
local observerEffects = {} local observerEffects = {}
local getter = function() local get = function()
local invokingEffect = effectStack[#effectStack] if (currentEffect ~= nil) then
if (invokingEffect ~= nil) then table.insert(observerEffects, currentEffect)
table.insert(observerEffects, invokingEffect) table.insert(currentEffect.dependencies, observerEffects)
table.insert(invokingEffect.dependencies, observerEffects)
end end
return value return value
end end
local setter = function(newValue) local set = function(newValue)
value = newValue value = newValue
local observerEffectsCopy = {} local observerEffectsCopy = {}
for index, effect in ipairs(observerEffects) do for index, effect in ipairs(observerEffects) do
@@ -204,16 +203,25 @@ return {
effect.execute() effect.execute()
end end
end end
return getter, setter return get, set
end,
untracked = function(getter)
local lastEffect = currentEffect
currentEffect = nil
local value = getter()
currentEffect = lastEffect
return value
end, end,
effect = function(effectFn) effect = function(effectFn)
local effect = {dependencies = {}} local effect = {dependencies = {}}
local execute = function() local execute = function()
clearEffectDependencies(effect) clearEffectDependencies(effect)
table.insert(effectStack, effect) local lastEffect = currentEffect
currentEffect = effect
effectFn() effectFn()
table.remove(effectStack) currentEffect = lastEffect
end end
effect.execute = execute effect.execute = execute
effect.execute() effect.execute()
@@ -326,12 +334,12 @@ return {
end end
end end
local function addXMLObjectType(tab, addFn, self, renderContext) local function addXMLObjectType(node, addFn, self, renderContext)
if (tab ~= nil) then if (node ~= nil) then
if (tab.properties ~= nil) then if (node.properties ~= nil) then
tab = {tab} node = {node}
end end
for _, v in pairs(tab) do for _, v in pairs(node) do
local obj = addFn(self, v["@id"] or uuid()) local obj = addFn(self, v["@id"] or uuid())
lastXMLReferences[obj:getName()] = obj lastXMLReferences[obj:getName()] = obj
xmlDefaultValues(v, obj, renderContext) xmlDefaultValues(v, obj, renderContext)
@@ -348,9 +356,10 @@ return {
local _OBJECTS = basalt.getObjects() local _OBJECTS = basalt.getObjects()
for _, childNode in pairs(children) do for _, childNode in pairs(children) do
if (childNode.___name~="animation") then local tagName = childNode.___name
local objectKey = childNode.___name:gsub("^%l", string.upper) if (tagName ~= "animation") then
if(_OBJECTS[objectKey] ~= nil) then local objectKey = tagName:gsub("^%l", string.upper)
if (_OBJECTS[objectKey] ~= nil) then
local addFn = self["add" .. objectKey] local addFn = self["add" .. objectKey]
addXMLObjectType(childNode, addFn, self, renderContext) addXMLObjectType(childNode, addFn, self, renderContext)
end end