126 lines
4.0 KiB
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 |