From 27357110b51e0d53b20c16b0606fdf4918d25a0c Mon Sep 17 00:00:00 2001 From: boatbomber Date: Sat, 8 Jul 2023 14:37:42 -0700 Subject: [PATCH] Handle strings and instances in patch removes for visualizer (#713) When an object is deleted in a patch, it is either represented with an ID or an Instance. On initial sync, removals are instances since the map does not contain those instances. Later removals of managed objects use an ID. The patch visualizer only handled instances, so this fixes that. Closes #710. --- plugin/src/App/Components/PatchVisualizer/init.lua | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/plugin/src/App/Components/PatchVisualizer/init.lua b/plugin/src/App/Components/PatchVisualizer/init.lua index 95673dfe..a751f2ff 100644 --- a/plugin/src/App/Components/PatchVisualizer/init.lua +++ b/plugin/src/App/Components/PatchVisualizer/init.lua @@ -7,6 +7,7 @@ local Packages = Rojo.Packages local Roact = require(Packages.Roact) local Log = require(Packages.Log) +local Types = require(Plugin.Types) local PatchSet = require(Plugin.PatchSet) local decodeValue = require(Plugin.Reconciler.decodeValue) local getProperty = require(Plugin.Reconciler.getProperty) @@ -240,7 +241,14 @@ function PatchVisualizer:buildTree(patch, instanceMap) }) end - for _, instance in patch.removed do + for _, idOrInstance in patch.removed do + local instance = if Types.RbxId(idOrInstance) then instanceMap.fromIds[idOrInstance] else idOrInstance + if not instance then + -- If we're viewing a past patch, the instance is already removed + -- and we therefore cannot get the tree for it anymore + continue + end + -- Gather ancestors from existing DOM -- (note that they may have no ID if they're being removed as unknown) local ancestry = {}