add gs
This commit is contained in:
+237
@@ -0,0 +1,237 @@
|
||||
--[[
|
||||
A Roact alert overlay screen.
|
||||
Props:
|
||||
Key : Variant - The key of the overlay screen.
|
||||
InFocus : bool - Is the component in focus.
|
||||
Title : String - The title of the screen.
|
||||
Description : String - The description of the screen.
|
||||
ImageLabel : Roact.Component - the image to be displayed.
|
||||
ButtonTextYes : String - The text on the yes button.
|
||||
ButtonTextNo : String - The text on the no button.
|
||||
CallbackYes : function() - The callback function for the yes button.
|
||||
CallbackNo : function() - The callback function for the no button.
|
||||
CallbackBack : function() - The callback function for when back is pressed.
|
||||
DefaultButton : 0 or 1 - The default selection for the overlay screen.
|
||||
0 for Yes
|
||||
1 for No
|
||||
]]
|
||||
local CoreGui = game:GetService("CoreGui")
|
||||
local RobloxGui = CoreGui.RobloxGui
|
||||
local Modules = RobloxGui.Modules
|
||||
|
||||
local Roact = require(Modules.Common.Roact)
|
||||
local Utility = require(Modules.Shell.Utility)
|
||||
local GlobalSettings = require(Modules.Shell.GlobalSettings)
|
||||
local SoundManager = require(Modules.Shell.SoundManager)
|
||||
|
||||
local RoundedButton = require(Modules.Shell.Components.Common.RoundedButton)
|
||||
local RedirectComponent = require(Modules.Shell.Components.Common.RedirectComponent)
|
||||
local AlertOverlay = Roact.PureComponent:extend("AlertOverlay")
|
||||
|
||||
local TEXT_LEFT_EDGE = 776
|
||||
local CONFRIM_KEY = "ComfirmButtonKey"
|
||||
local CANCEL_KEY = "CancelButtonKey"
|
||||
function AlertOverlay:init()
|
||||
self.key = self.props.Key
|
||||
self.guiObjs = {}
|
||||
self.defaultItemKey = CANCEL_KEY
|
||||
if self.props.DefaultButton == 0 then
|
||||
self.defaultItemKey = CONFRIM_KEY
|
||||
end
|
||||
self.state =
|
||||
{
|
||||
currentItemKey = self.defaultItemKey
|
||||
}
|
||||
self.onSelectionGained = function(key)
|
||||
self:setState(
|
||||
{
|
||||
currentItemKey = key
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
function AlertOverlay:willUpdate(nextProps, nextState)
|
||||
self.defaultItemKey = nil
|
||||
if self.props.InFocus == nextProps.InFocus then
|
||||
return
|
||||
end
|
||||
if nextProps.InFocus then
|
||||
self.defaultItemKey = nextState.currentItemKey
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function AlertOverlay:render()
|
||||
local confirmButton;
|
||||
if not self.props.CallbackYes and self.defaultItemKey == CONFRIM_KEY then
|
||||
self.defaultItemKey = CANCEL_KEY
|
||||
elseif not self.props.CallbackNo and self.defaultItemKey == CANCEL_KEY then
|
||||
self.defaultItemKey = CONFRIM_KEY
|
||||
end
|
||||
if self.props.CallbackYes then
|
||||
local confirmButtonProps =
|
||||
{
|
||||
Position = UDim2.new(0, TEXT_LEFT_EDGE, 1, -166);
|
||||
AnchorPoint = Vector2.new(0,0),
|
||||
Size = UDim2.new(0, 320, 0, 66);
|
||||
}
|
||||
local confirmButtonTextProps =
|
||||
{
|
||||
Text = self.props.ButtonTextYes,
|
||||
TextXAlignment = Enum.TextXAlignment.Center,
|
||||
}
|
||||
confirmButton = Roact.createElement(RoundedButton,
|
||||
{
|
||||
Button = confirmButtonProps,
|
||||
Text = confirmButtonTextProps,
|
||||
Focused = self.props.InFocus and self.state.currentItemKey == CONFRIM_KEY,
|
||||
Selected = self.defaultItemKey == CONFRIM_KEY,
|
||||
OnSelectionGained = function()
|
||||
self.onSelectionGained(CONFRIM_KEY)
|
||||
end,
|
||||
OnActivated = function()
|
||||
SoundManager:Play('ButtonPress')
|
||||
self.props.CallbackYes()
|
||||
end
|
||||
})
|
||||
end
|
||||
local cancelButton;
|
||||
if self.props.CallbackNo then
|
||||
local cancelButtonProps =
|
||||
{
|
||||
Position = UDim2.new(0, 1106, 1 ,-166),
|
||||
AnchorPoint = Vector2.new(0, 0),
|
||||
Size = UDim2.new(0, 320, 0, 66),
|
||||
}
|
||||
local cancelButtonTextProps =
|
||||
{
|
||||
Text = self.props.ButtonTextNo,
|
||||
TextXAlignment = Enum.TextXAlignment.Center,
|
||||
}
|
||||
cancelButton = Roact.createElement(RoundedButton,
|
||||
{
|
||||
Button = cancelButtonProps,
|
||||
Text = cancelButtonTextProps,
|
||||
Focused = self.props.InFocus and self.state.currentItemKey == CANCEL_KEY,
|
||||
Selected = self.defaultItemKey == CANCEL_KEY,
|
||||
OnSelectionGained = function()
|
||||
self.onSelectionGained(CANCEL_KEY)
|
||||
end,
|
||||
OnActivated = function()
|
||||
SoundManager:Play('ButtonPress')
|
||||
self.props.CallbackNo()
|
||||
end
|
||||
})
|
||||
elseif self.defaultItemKey == CANCEL_KEY then
|
||||
self.defaultItemKey = CONFRIM_KEY
|
||||
end
|
||||
local titleText = Roact.createElement("TextLabel",
|
||||
{
|
||||
Size = UDim2.new(0, 0, 0, 0),
|
||||
Position = UDim2.new(0, TEXT_LEFT_EDGE, 0, 136),
|
||||
BackgroundTransparency = 1,
|
||||
Font = GlobalSettings.RegularFont,
|
||||
FontSize = GlobalSettings.HeaderSize,
|
||||
TextColor3 = GlobalSettings.WhiteTextColor,
|
||||
Text = self.props.Title,
|
||||
TextXAlignment = Enum.TextXAlignment.Left,
|
||||
})
|
||||
local descriptionText = Roact.createElement("TextLabel",
|
||||
{
|
||||
Size = UDim2.new(0, 762, 0, 304),
|
||||
Position = UDim2.new(0, TEXT_LEFT_EDGE, 0, 200),
|
||||
BackgroundTransparency = 1,
|
||||
TextXAlignment = Enum.TextXAlignment.Left,
|
||||
TextYAlignment = Enum.TextYAlignment.Top,
|
||||
Font = GlobalSettings.LightFont,
|
||||
FontSize = GlobalSettings.TitleSize,
|
||||
TextColor3 = GlobalSettings.WhiteTextColor,
|
||||
TextWrapped = true,
|
||||
Text = self.props.Description,
|
||||
})
|
||||
local reportIcon = self.props.ImageLabel
|
||||
if reportIcon == nil then
|
||||
reportIcon = Roact.createElement("ImageLabel",
|
||||
{
|
||||
Position = UDim2.new(0.5, 0, 0.5, 0),
|
||||
AnchorPoint = Vector2.new(0.5, 0.5),
|
||||
BackgroundTransparency = 1,
|
||||
Image = GlobalSettings.Images.LargeErrorIcon,
|
||||
Size = UDim2.new(0, 321, 0, 264),
|
||||
})
|
||||
end
|
||||
local imageContainer = Roact.createElement("Frame",
|
||||
{
|
||||
Size = UDim2.new(0, 576, 0, 642),
|
||||
Position = UDim2.new(0, 100, 0.5, 0),
|
||||
AnchorPoint = Vector2.new(0, 0.5),
|
||||
BorderSizePixel = 0,
|
||||
BackgroundTransparency = 1,
|
||||
},{
|
||||
reportImage = reportIcon
|
||||
})
|
||||
local container = Roact.createElement("Frame",
|
||||
{
|
||||
Size = UDim2.new(1, 0, 0, 640),
|
||||
AnchorPoint = Vector2.new(0, 0.5),
|
||||
Position = UDim2.new(0, 0, 0.5, 0),
|
||||
BackgroundColor3 = GlobalSettings.Colors.OverlayColor;
|
||||
},{
|
||||
ImageContainer = imageContainer,
|
||||
TitleText = titleText,
|
||||
DescriptionText = descriptionText,
|
||||
CancelButton = cancelButton,
|
||||
ConfirmButton = confirmButton,
|
||||
})
|
||||
local modalOverlay = Roact.createElement("Frame",
|
||||
{
|
||||
Size = UDim2.new(1, 0, 1, 0),
|
||||
AnchorPoint = Vector2.new(0, 0.5),
|
||||
Position = UDim2.new(0, 0, 0.5, 0),
|
||||
BackgroundColor3 = Color3.new(0, 0, 0),
|
||||
BackgroundTransparency = 0.3,
|
||||
[Roact.Ref] = function(rbx)
|
||||
self.ref = rbx
|
||||
end,
|
||||
},{
|
||||
Container = container,
|
||||
})
|
||||
local redirectObj;
|
||||
if self.props.CallbackBack then
|
||||
redirectObj = Roact.createElement(RedirectComponent,
|
||||
{
|
||||
Key = self.key,
|
||||
InFocus = true,
|
||||
RedirectBack = function()
|
||||
self.props.CallbackBack()
|
||||
end,
|
||||
})
|
||||
end
|
||||
return Roact.createElement(Roact.Portal,
|
||||
{
|
||||
target = CoreGui
|
||||
},{
|
||||
[self.key] = Roact.createElement("ScreenGui",
|
||||
{
|
||||
ZIndexBehavior = Enum.ZIndexBehavior.Sibling,
|
||||
DisplayOrder = 1
|
||||
},
|
||||
{
|
||||
ModalOverlay = modalOverlay,
|
||||
RedirectObj = redirectObj,
|
||||
}),
|
||||
})
|
||||
end
|
||||
|
||||
function AlertOverlay:didMount()
|
||||
delay(0,function()
|
||||
Utility.AddSelectionParent(self.key, self.ref)
|
||||
end)
|
||||
SoundManager:Play("OverlayOpen")
|
||||
end
|
||||
|
||||
function AlertOverlay:willUnmount()
|
||||
Utility.RemoveSelectionGroup(self.key)
|
||||
end
|
||||
|
||||
return AlertOverlay
|
||||
Reference in New Issue
Block a user