the title says it all. watch the video for more context.
client side:
for _, box in pairs(list:GetDescendants()) do
if not box:IsA("TextBox") then continue end
box.FocusLost:Connect(function()
if debounce then
return
end
debounce = true
box.Interactable = false
if box.Text:match("^%s*$") then
box.Text = box.PlaceholderText
else
local save_name = box.Parent.Name
local new = box.Text
local updates = {
path = {save_name, "name"}, value = new
}
update:FireServer(updates)
end
task.wait(3)
debounce = false
box.Interactable = true
end)
end