add gs
This commit is contained in:
+147
@@ -0,0 +1,147 @@
|
||||
local GuiService = game:GetService("GuiService")
|
||||
local Modules = game:GetService("CoreGui").RobloxGui.Modules
|
||||
local ShellModules = Modules:FindFirstChild("Shell")
|
||||
local Roact = require(Modules.Common.Roact)
|
||||
local RoactRodux = require(Modules.Common.RoactRodux)
|
||||
local Strings = require(ShellModules:FindFirstChild("LocalizedStrings"))
|
||||
local ScreenManager = require(ShellModules.ScreenManager)
|
||||
local AppState = require(ShellModules.AppState)
|
||||
local Analytics = require(ShellModules:FindFirstChild("Analytics"))
|
||||
local Utility = require(ShellModules:FindFirstChild("Utility"))
|
||||
local Components = ShellModules.Components
|
||||
local FriendsView = require(Components.Social.FriendsView)
|
||||
local FriendsData = require(ShellModules.FriendsData)
|
||||
|
||||
local function CreateSocialPane(parent)
|
||||
local this = {}
|
||||
local isPaneFocused = false
|
||||
local HubContainer = parent.Parent
|
||||
local UpSelector = HubContainer:FindFirstChild("TabContainer")
|
||||
|
||||
local noSelectionObject = Utility.Create"ImageLabel"({
|
||||
BackgroundTransparency = 1,
|
||||
})
|
||||
|
||||
local SocialPaneContainer = Utility.Create"Frame"({
|
||||
Name = "SocialPane",
|
||||
Size = UDim2.new(1, 0, 1, 0),
|
||||
BackgroundTransparency = 1,
|
||||
Visible = false,
|
||||
SelectionImageObject = noSelectionObject,
|
||||
Parent = parent,
|
||||
})
|
||||
|
||||
local FriendsContainer = Utility.Create"Frame"({
|
||||
Name = "FriendsContainer",
|
||||
Size = UDim2.new(1, 0, 1, 0),
|
||||
Position = UDim2.new(0, 0, 0, 23),
|
||||
BackgroundTransparency = 1,
|
||||
Parent = SocialPaneContainer,
|
||||
})
|
||||
|
||||
local friendsScrollerInstance;
|
||||
local function ReconcileFriendsScrollerInstance()
|
||||
if not friendsScrollerInstance then
|
||||
return
|
||||
end
|
||||
local friendsScroller = Roact.createElement(RoactRodux.StoreProvider, {
|
||||
store = AppState.store,
|
||||
}, {
|
||||
FriendsView = Roact.createElement(FriendsView, {
|
||||
inFocus = isPaneFocused,
|
||||
hide = not SocialPaneContainer.Visible,
|
||||
redirectUp = function()
|
||||
Utility.SetSelectedCoreObject(UpSelector)
|
||||
end,
|
||||
})
|
||||
})
|
||||
friendsScrollerInstance = Roact.reconcile(friendsScrollerInstance, friendsScroller)
|
||||
end
|
||||
|
||||
function this:GetName()
|
||||
return Strings:LocalizedString("FriendsWord")
|
||||
end
|
||||
|
||||
function this:IsFocused()
|
||||
return isPaneFocused
|
||||
end
|
||||
|
||||
--[[ Public API ]]--
|
||||
function this:GetAnalyticsInfo()
|
||||
return {[Analytics.WidgetNames("WidgetId")] = Analytics.WidgetNames("SocialPaneId")}
|
||||
end
|
||||
|
||||
function this:Show(fromAppHub)
|
||||
SocialPaneContainer.Visible = true
|
||||
--Suspend Friends BG Update whenever we are on GamesPane
|
||||
FriendsData:SuspendUpdate()
|
||||
|
||||
--We rebuild Friends Scroller only if we navigate from other tabs
|
||||
if fromAppHub then
|
||||
if friendsScrollerInstance then
|
||||
Roact.unmount(friendsScrollerInstance)
|
||||
end
|
||||
local friendsScroller = Roact.createElement(RoactRodux.StoreProvider, {
|
||||
store = AppState.store,
|
||||
}, {
|
||||
FriendsView = Roact.createElement(FriendsView, {
|
||||
hide = not SocialPaneContainer.Visible,
|
||||
inFocus = isPaneFocused,
|
||||
redirectUp = function()
|
||||
Utility.SetSelectedCoreObject(UpSelector)
|
||||
end,
|
||||
})
|
||||
})
|
||||
friendsScrollerInstance = Roact.mount(friendsScroller, FriendsContainer, "FriendsViewContainer")
|
||||
else
|
||||
ReconcileFriendsScrollerInstance()
|
||||
end
|
||||
ScreenManager:PlayDefaultOpenSound()
|
||||
end
|
||||
|
||||
function this:Hide(fromAppHub)
|
||||
SocialPaneContainer.Visible = false
|
||||
|
||||
--We destroy Friends Scroller if we navigate to other tabs
|
||||
if fromAppHub then
|
||||
if friendsScrollerInstance then
|
||||
Roact.unmount(friendsScrollerInstance)
|
||||
end
|
||||
friendsScrollerInstance = nil
|
||||
--We resume Friends Update only if we navigate to other tabs
|
||||
FriendsData:ResumeUpdate()
|
||||
else
|
||||
ReconcileFriendsScrollerInstance()
|
||||
end
|
||||
end
|
||||
|
||||
function this:Focus()
|
||||
isPaneFocused = true
|
||||
ReconcileFriendsScrollerInstance()
|
||||
end
|
||||
|
||||
function this:RemoveFocus()
|
||||
isPaneFocused = false
|
||||
ReconcileFriendsScrollerInstance()
|
||||
local selectedObject = GuiService.SelectedCoreObject
|
||||
if selectedObject and selectedObject:IsDescendantOf(SocialPaneContainer) then
|
||||
Utility.SetSelectedCoreObject(nil)
|
||||
end
|
||||
end
|
||||
|
||||
function this:SetPosition(newPosition)
|
||||
SocialPaneContainer.Position = newPosition
|
||||
end
|
||||
|
||||
function this:SetParent(newParent)
|
||||
SocialPaneContainer.Parent = newParent
|
||||
end
|
||||
|
||||
function this:IsAncestorOf(object)
|
||||
return SocialPaneContainer and SocialPaneContainer:IsAncestorOf(object)
|
||||
end
|
||||
|
||||
return this
|
||||
end
|
||||
|
||||
return CreateSocialPane
|
||||
Reference in New Issue
Block a user