38 lines
1.1 KiB
Lua
38 lines
1.1 KiB
Lua
local CoreGui = game:GetService("CoreGui")
|
|
|
|
local Modules = CoreGui.RobloxGui.Modules
|
|
|
|
local Common = Modules.Common
|
|
local LuaChat = Modules.LuaChat
|
|
|
|
local DeleteAlert = require(LuaChat.Actions.DeleteAlert)
|
|
local ShowAlert = require(LuaChat.Actions.ShowAlert)
|
|
|
|
local Immutable = require(Common.Immutable)
|
|
local OrderedMap = require(LuaChat.OrderedMap)
|
|
|
|
local function getAlertId(alert)
|
|
return alert.id
|
|
end
|
|
|
|
local function alertSortPredicate(alert1, alert2)
|
|
return alert1.createdAt < alert2.createdAt
|
|
end
|
|
|
|
return function(state, action)
|
|
state = state or {}
|
|
|
|
if action.type == ShowAlert.name then
|
|
local alert = action.alert
|
|
local alerts = state["alerts"] or OrderedMap.new(getAlertId, alertSortPredicate)
|
|
alerts = OrderedMap.Insert(alerts, alert)
|
|
state = Immutable.Set(state, "alerts", alerts)
|
|
elseif action.type == DeleteAlert.name then
|
|
local alert = action.alert
|
|
local alerts = state["alerts"] or OrderedMap.new(getAlertId, alertSortPredicate)
|
|
alerts = OrderedMap.Delete(alerts, alert.id)
|
|
state = Immutable.Set(state, "alerts", alerts)
|
|
end
|
|
|
|
return state
|
|
end |