43 lines
1.6 KiB
Lua
43 lines
1.6 KiB
Lua
local CorePackages = game:GetService("CorePackages")
|
|
|
|
local Immutable = require(CorePackages.AppTempCommon.Common.Immutable)
|
|
local RetrievalStatus = require(CorePackages.AppTempCommon.LuaApp.Enum.RetrievalStatus)
|
|
|
|
local FetchUserFriendsStarted = require(CorePackages.AppTempCommon.LuaApp.Actions.FetchUserFriendsStarted)
|
|
local FetchUserFriendsFailed = require(CorePackages.AppTempCommon.LuaApp.Actions.FetchUserFriendsFailed)
|
|
local FetchUserFriendsCompleted = require(CorePackages.AppTempCommon.LuaApp.Actions.FetchUserFriendsCompleted)
|
|
|
|
local function setFieldPerUser(state, fieldName, userId, value)
|
|
local field = state[fieldName] or {}
|
|
return Immutable.JoinDictionaries(state, {
|
|
[fieldName] = Immutable.JoinDictionaries(field, {
|
|
[userId] = value
|
|
})
|
|
})
|
|
end
|
|
|
|
local function setRetrievalStatus(state, userId, status)
|
|
return setFieldPerUser(state, "retrievalStatus", userId, status)
|
|
end
|
|
|
|
local function setRetrievalFailureResponse(state, userId, response)
|
|
return setFieldPerUser(state, "retrievalFailureResponse", userId, response)
|
|
end
|
|
|
|
return function(state, action)
|
|
state = state or {
|
|
retrievalStatus = {},
|
|
retrievalFailureResponse = {},
|
|
}
|
|
|
|
if action.type == FetchUserFriendsStarted.name then
|
|
state = setRetrievalStatus(state, action.userId, RetrievalStatus.Fetching)
|
|
elseif action.type == FetchUserFriendsFailed.name then
|
|
state = setRetrievalStatus(state, action.userId, RetrievalStatus.Failed)
|
|
state = setRetrievalFailureResponse(state, action.userId, action.response)
|
|
elseif action.type == FetchUserFriendsCompleted.name then
|
|
state = setRetrievalStatus(state, action.userId, RetrievalStatus.Done)
|
|
end
|
|
|
|
return state
|
|
end |