187 lines
5.7 KiB
Lua
187 lines
5.7 KiB
Lua
local CoreGui = game:GetService("CoreGui")
|
|
local NotificationService = game:GetService("NotificationService")
|
|
|
|
local Modules = CoreGui.RobloxGui.Modules
|
|
local Common = Modules.Common
|
|
local LuaApp = Modules.LuaApp
|
|
local LuaChat = Modules.LuaChat
|
|
|
|
local AppNotificationService = require(LuaApp.Services.AppNotificationService)
|
|
local Constants = require(LuaChat.Constants)
|
|
local Create = require(LuaChat.Create)
|
|
local DialogInfo = require(LuaChat.DialogInfo)
|
|
local Intent = DialogInfo.Intent
|
|
local Signal = require(Common.Signal)
|
|
|
|
local Roact = require(Common.Roact)
|
|
local RoactAnalytics = require(LuaApp.Services.RoactAnalytics)
|
|
local RoactLocalization = require(LuaApp.Services.RoactLocalization)
|
|
local RoactNetworking = require(LuaApp.Services.RoactNetworking)
|
|
local RoactRodux = require(Common.RoactRodux)
|
|
local RoactServices = require(LuaApp.RoactServices)
|
|
|
|
local Components = LuaChat.Components
|
|
local HeaderLoader = require(Components.HeaderLoader)
|
|
local ResponseIndicator = require(Components.ResponseIndicator)
|
|
--[[
|
|
TODO: we would have a ticket "removing the fast flag LuaChatShareGameToChatFromChatV2".
|
|
When removing the flag LuaChatShareGameToChatFromChatV2, we need to delete the actions, reduces and store that
|
|
V1 share game to chat from chat used.
|
|
]]
|
|
-- V1 sharing game to chat from chat
|
|
local SharedGameList = require(Components.SharedGameList)
|
|
-- V2 sharing game to chat from chat
|
|
local SharedGamesList = require(Components.ShareGameToChatFromChat.SharedGamesList)
|
|
local TabBarView = require(LuaChat.TabBarView)
|
|
local TabPageParameters = require(LuaChat.Models.TabPageParameters)
|
|
|
|
-- Actions for V1 sharing game to chat from chat
|
|
local ClearAllGames = require(LuaChat.Actions.ShareGameToChatFromChat.ClearAllGamesInSortsShareGameToChatFromChat)
|
|
local ResetShareGameToChatAsync = require(LuaChat.Actions.ShareGameToChatFromChat.ResetShareGameToChatFromChatAsync)
|
|
|
|
local FFlagLuaChatToSplitRbxConnections = settings():GetFFlag("LuaChatToSplitRbxConnections")
|
|
local FFlagLuaChatShareGameToChatFromChatV2 = settings():GetFFlag("LuaChatShareGameToChatFromChatV2")
|
|
|
|
local BrowseGames = {}
|
|
BrowseGames.__index = BrowseGames
|
|
|
|
function BrowseGames.new(appState)
|
|
local self = {
|
|
appState = appState,
|
|
connections = {},
|
|
rbx_connections = {},
|
|
}
|
|
setmetatable(self, BrowseGames)
|
|
|
|
self._analytics = self.appState.analytics
|
|
self._localization = self.appState.localization
|
|
self._request = self.appState.request
|
|
|
|
self.responseIndicator = ResponseIndicator.new(appState)
|
|
self.responseIndicator:SetVisible(false)
|
|
|
|
self.header = HeaderLoader.GetHeader(appState, Intent.BrowseGames)
|
|
self.header:SetDefaultSubtitle()
|
|
self.header:SetTitle(self.appState.localization:Format("Feature.Chat.ShareGameToChat.BrowseGames"))
|
|
self.header:SetBackButtonEnabled(true)
|
|
self.header:SetConnectionState(Enum.ConnectionState.Disconnected)
|
|
|
|
local sharedGamesConfig = Constants.SharedGamesConfig
|
|
self.gamesPages = {}
|
|
|
|
local sharedGamesList = FFlagLuaChatShareGameToChatFromChatV2 and SharedGamesList
|
|
or SharedGameList
|
|
|
|
for _, sortName in ipairs(sharedGamesConfig.SortNames) do
|
|
table.insert(
|
|
self.gamesPages,
|
|
TabPageParameters(
|
|
self._localization:Format(sharedGamesConfig.SortsAttribute[sortName].TILE_LOCALIZATION_KEY),
|
|
sharedGamesList,
|
|
{
|
|
gameSort = sortName,
|
|
}
|
|
)
|
|
)
|
|
end
|
|
|
|
self.rbx = Create.new"Frame" {
|
|
Name = "BrowseGames",
|
|
BackgroundTransparency = 1,
|
|
BorderSizePixel = 0,
|
|
Size = UDim2.new(1, 0, 1, 0),
|
|
|
|
Create.new("UIListLayout") {
|
|
Name = "ListLayout",
|
|
SortOrder = Enum.SortOrder.LayoutOrder,
|
|
},
|
|
|
|
self.header.rbx,
|
|
|
|
Create.new"Frame" {
|
|
Name = "Content",
|
|
BackgroundColor3 = Constants.Color.GRAY5,
|
|
BorderSizePixel = 0,
|
|
ClipsDescendants = true,
|
|
LayoutOrder = 1,
|
|
Size = UDim2.new(1, 0, 1, -self.header.heightOfHeader),
|
|
|
|
self.responseIndicator.rbx,
|
|
},
|
|
}
|
|
|
|
self.mainContent = Roact.mount(Roact.createElement(RoactRodux.StoreProvider, {
|
|
store = appState.store,
|
|
}, {
|
|
Roact.createElement(RoactServices.ServiceProvider, {
|
|
services = {
|
|
[AppNotificationService] = NotificationService,
|
|
[RoactAnalytics] = self._analytics,
|
|
[RoactLocalization] = self._localization,
|
|
[RoactNetworking] = self._request,
|
|
}
|
|
}, {
|
|
TabBarView = Roact.createElement(TabBarView, {
|
|
tabs = self.gamesPages,
|
|
}),
|
|
}),
|
|
|
|
}), self.rbx.Content, "MainContent")
|
|
|
|
self.BackButtonPressed = Signal.new()
|
|
self.header.BackButtonPressed:connect(function()
|
|
if not FFlagLuaChatShareGameToChatFromChatV2 then
|
|
self:CleanGamesInSorts()
|
|
end
|
|
self.BackButtonPressed:fire()
|
|
end)
|
|
|
|
local headerSizeConnection = self.header.rbx:GetPropertyChangedSignal("AbsoluteSize"):Connect(function()
|
|
self:Resize()
|
|
end)
|
|
if FFlagLuaChatToSplitRbxConnections then
|
|
table.insert(self.rbx_connections, headerSizeConnection)
|
|
else
|
|
table.insert(self.connections, headerSizeConnection)
|
|
end
|
|
|
|
return self
|
|
end
|
|
|
|
function BrowseGames:CleanGamesInSorts()
|
|
self.appState.store:dispatch(ClearAllGames())
|
|
self.appState.store:dispatch(ResetShareGameToChatAsync())
|
|
end
|
|
|
|
function BrowseGames:Resize()
|
|
local sizeContent = UDim2.new(1, 0, 1, -self.header.rbx.AbsoluteSize.Y)
|
|
self.rbx.Content.Size = sizeContent
|
|
end
|
|
|
|
function BrowseGames:Update(current, previous)
|
|
self.header:SetConnectionState(current.ConnectionState)
|
|
|
|
local isSharing = self.appState.store:getState().ChatAppReducer.ShareGameToChatAsync.sharingGame or false
|
|
self.responseIndicator:SetVisible(isSharing)
|
|
end
|
|
|
|
function BrowseGames:Destruct()
|
|
for _, connection in pairs(self.connections) do
|
|
connection:Disconnect()
|
|
end
|
|
self.connections = {}
|
|
if FFlagLuaChatToSplitRbxConnections then
|
|
for _, connection in pairs(self.rbx_connections) do
|
|
connection:Disconnect()
|
|
end
|
|
self.rbx_connections = {}
|
|
end
|
|
|
|
self.header:Destroy()
|
|
self.responseIndicator:Destruct()
|
|
Roact.unmount(self.mainContent)
|
|
|
|
self.rbx:Destroy()
|
|
end
|
|
|
|
return BrowseGames |