SyntaxGameServer/RCCService2018/content/LuaPackages/PurchasePrompt/Components/Presentation/AdditionalDetailLabel.lua

126 lines
4.0 KiB
Lua

local CorePackages = game:GetService("CorePackages")
local UserInputService = game:GetService("UserInputService")
local Roact = require(CorePackages.Roact)
local connectToStore = require(script.Parent.Parent.Parent.connectToStore)
local LocalizationService = require(script.Parent.Parent.Parent.Localization.LocalizationService)
local PromptState = require(script.Parent.Parent.Parent.PromptState)
local UpsellFlow = require(script.Parent.Parent.Parent.UpsellFlow)
local TextLocalizer = require(script.Parent.Parent.Connection.TextLocalizer)
local withLayoutValues = require(script.Parent.Parent.Connection.withLayoutValues)
local getUpsellFlow = require(script.Parent.Parent.Parent.NativeUpsell.getUpsellFlow)
local isMockingPurchases = require(script.Parent.Parent.Parent.isMockingPurchases)
local PURCHASE_DETAILS_KEY = "CoreScripts.PurchasePrompt.PurchaseDetails.%s"
local function AdditionalDetailLabel(props)
return withLayoutValues(function(values)
local layoutOrder = props.layoutOrder
local messageKey = props.messageKey
local messageParams = props.messageParams
if messageKey == nil then
-- We return an empty frame to preserve UIListLayout spacing
return Roact.createElement("Frame", {
LayoutOrder = layoutOrder,
Size = values.Size.AdditonalDetailsLabel,
BackgroundTransparency = 1,
BorderSizePixel = 0,
})
end
return Roact.createElement(TextLocalizer, {
key = messageKey,
params = messageParams,
render = function(localizedText)
return Roact.createElement("TextLabel", {
Text = localizedText,
LayoutOrder = layoutOrder,
Size = values.Size.AdditonalDetailsLabel,
BackgroundTransparency = 1,
BorderSizePixel = 0,
TextColor3 = Color3.new(1, 1, 1),
Font = Enum.Font.SourceSans,
TextSize = values.TextSize.AdditonalDetails,
TextYAlignment = Enum.TextYAlignment.Top,
TextScaled = true,
TextWrapped = true,
}, {
TextSizeConstraint = Roact.createElement("UITextSizeConstraint", {
MaxTextSize = values.TextSize.AdditonalDetails,
})
})
end,
})
end)
end
local function mapStateToProps(state)
local promptState = state.promptState
local messageKey = nil
local messageParams = nil
local price = state.productInfo.price
local balance = state.accountInfo.balance
if promptState == PromptState.PromptPurchase then
if price == 0 then
messageKey = PURCHASE_DETAILS_KEY:format("BalanceUnaffected")
elseif isMockingPurchases() then
messageKey = PURCHASE_DETAILS_KEY:format("MockPurchase")
else
messageKey = PURCHASE_DETAILS_KEY:format("BalanceFuture")
messageParams = {
BALANCE_FUTURE = LocalizationService.numberParam(balance - price),
}
end
elseif promptState == PromptState.RobuxUpsell then
local upsellFlow = getUpsellFlow(UserInputService:GetPlatform())
if upsellFlow ~= UpsellFlow.Web then
local upsellRobux = state.nativeUpsell.robuxPurchaseAmount
local amountNeeded = price - balance
local amountRemaining = upsellRobux - amountNeeded
messageKey = PURCHASE_DETAILS_KEY:format("RemainingAfterUpsell")
messageParams = {
REMAINING_ROBUX = LocalizationService.numberParam(amountRemaining),
}
end
elseif promptState == PromptState.BuildersClubUpsell then
local bcLevelRequired = state.productInfo.bcLevelRequired
messageKey = PURCHASE_DETAILS_KEY:format("InvalidBuildersClub")
messageParams = {
BC_LEVEL = LocalizationService.nestedKeyParam(
LocalizationService.getBuildersClubLevelKey(bcLevelRequired)
)
}
elseif promptState == PromptState.PurchaseComplete then
if isMockingPurchases() then
messageKey = PURCHASE_DETAILS_KEY:format("MockPurchaseComplete")
else
messageKey = PURCHASE_DETAILS_KEY:format("BalanceNow")
messageParams = {
BALANCE_NOW = LocalizationService.numberParam(balance - price),
}
end
end
return {
messageKey = messageKey,
messageParams = messageParams,
}
end
AdditionalDetailLabel = connectToStore(
mapStateToProps
)(AdditionalDetailLabel)
return AdditionalDetailLabel