Skip to content

Commit 4c99a2e

Browse files
authored
Update order-search-filter.lua
Motivation Prevent deleted work orders from being reinserted into the filtered snapshot while a search filter is active, which could lead to UI actions on stale entries and crashes. Description Track the IDs of the last filtered set in self.last_filtered_ids and compute the current live orders IDs each filter application. When previously-visible orders are missing from the live list, prune those IDs out of self.unfiltered_orders so deleted orders are not re-added. Reset self.last_filtered_ids when restoring the full, unfiltered list in restore_orders.
1 parent d47070b commit 4c99a2e

1 file changed

Lines changed: 26 additions & 0 deletions

File tree

order-search-filter.lua

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ function OrderSearchFilter:restore_orders()
169169
end
170170
self:rebuild_orders(self.unfiltered_orders)
171171
self.unfiltered_orders = nil
172+
self.last_filtered_ids = nil
172173
end
173174

174175
function OrderSearchFilter:apply_filter(filter)
@@ -180,13 +181,38 @@ function OrderSearchFilter:apply_filter(filter)
180181
self.unfiltered_orders = self:snapshot_orders()
181182
end
182183
local filter_lc = filter:lower()
184+
local current_ids = {}
185+
for _, order in ipairs(orders) do
186+
current_ids[order.id] = true
187+
end
188+
if self.last_filtered_ids then
189+
local deleted_ids = {}
190+
for id in pairs(self.last_filtered_ids) do
191+
if not current_ids[id] then
192+
deleted_ids[id] = true
193+
end
194+
end
195+
if next(deleted_ids) then
196+
local cleaned = {}
197+
for _, order in ipairs(self.unfiltered_orders) do
198+
if not deleted_ids[order.id] then
199+
table.insert(cleaned, order)
200+
end
201+
end
202+
self.unfiltered_orders = cleaned
203+
end
204+
end
183205
local filtered = {}
184206
for _, order in ipairs(self.unfiltered_orders) do
185207
if order_matches(filter_lc, order) then
186208
table.insert(filtered, order)
187209
end
188210
end
189211
self:rebuild_orders(filtered)
212+
self.last_filtered_ids = {}
213+
for _, order in ipairs(filtered) do
214+
self.last_filtered_ids[order.id] = true
215+
end
190216
end
191217

192218
function OrderSearchFilter:on_filter_change(text)

0 commit comments

Comments
 (0)