This commit is contained in:
janisslsm committed 2026-11-01 12:12:55 +02:00
1 parent 1781d25a15
commit 732c0ad767
33051 files changed
+2591613 -3019689

No files matched your search

@@ -0,0 +1,132 @@
// Metro module 2255 (f2256).
import { loadJsonAsset } from "../../asset_json/native/AssetJsonUtils";
import * as _Module2256 from "../../../_bundle/Module2256";
import * as _Module2257 from "../../../_bundle/Module2257";
import * as _Module2258 from "../../../_bundle/Module2258";
import * as _Module2259 from "../../../_bundle/Module2259";
import * as _Module2260 from "../../../_bundle/Module2260";
import * as _Module2261 from "../../../_bundle/Module2261";
import * as _Module2262 from "../../../_bundle/Module2262";
import * as _Module2263 from "../../../_bundle/Module2263";
import * as _Module2264 from "../../../_bundle/Module2264";
import * as _Module2265 from "../../../_bundle/Module2265";
import * as _Module2266 from "../../../_bundle/Module2266";
import * as _Module2267 from "../../../_bundle/Module2267";
import * as _Module2268 from "../../../_bundle/Module2268";
import * as _Module2269 from "../../../_bundle/Module2269";
import * as _Module2270 from "../../../_bundle/Module2270";
import * as _Module2271 from "../../../_bundle/Module2271";
import * as _Module2272 from "../../../_bundle/Module2272";
import * as _Module2273 from "../../../_bundle/Module2273";
import * as _Module2274 from "../../../_bundle/Module2274";
import * as _Module2275 from "../../../_bundle/Module2275";
import * as _Module2276 from "../../../_bundle/Module2276";
import * as _Module2277 from "../../../_bundle/Module2277";
import * as _Module2278 from "../../../_bundle/Module2278";
import * as _Module2279 from "../../../_bundle/Module2279";
import * as _Module2280 from "../../../_bundle/Module2280";
import * as _Module2281 from "../../../_bundle/Module2281";
import * as _Module2282 from "../../../_bundle/Module2282";
import * as _Module2283 from "../../../_bundle/Module2283";
import * as _Module2284 from "../../../_bundle/Module2284";
import * as _Module2285 from "../../../_bundle/Module2285";
import * as _Module2286 from "../../../_bundle/Module2286";
import { createLoader, makeMessagesProxy } from "../../../_bundle/Module1274";
const loader = createLoader({
bg: () => loadJsonAsset(_Module2256).then((result) => ({
default: result
})),
cs: () => loadJsonAsset(_Module2257).then((result) => ({
default: result
})),
da: () => loadJsonAsset(_Module2258).then((result) => ({
default: result
})),
de: () => loadJsonAsset(_Module2259).then((result) => ({
default: result
})),
el: () => loadJsonAsset(_Module2260).then((result) => ({
default: result
})),
"en-GB": () => loadJsonAsset(_Module2261).then((result) => ({
default: result
})),
"es-419": () => loadJsonAsset(_Module2262).then((result) => ({
default: result
})),
"es-ES": () => loadJsonAsset(_Module2263).then((result) => ({
default: result
})),
fi: () => loadJsonAsset(_Module2264).then((result) => ({
default: result
})),
fr: () => loadJsonAsset(_Module2265).then((result) => ({
default: result
})),
hi: () => loadJsonAsset(_Module2266).then((result) => ({
default: result
})),
hr: () => loadJsonAsset(_Module2267).then((result) => ({
default: result
})),
hu: () => loadJsonAsset(_Module2268).then((result) => ({
default: result
})),
it: () => loadJsonAsset(_Module2269).then((result) => ({
default: result
})),
ja: () => loadJsonAsset(_Module2270).then((result) => ({
default: result
})),
ko: () => loadJsonAsset(_Module2271).then((result) => ({
default: result
})),
lt: () => loadJsonAsset(_Module2272).then((result) => ({
default: result
})),
nl: () => loadJsonAsset(_Module2273).then((result) => ({
default: result
})),
no: () => loadJsonAsset(_Module2274).then((result) => ({
default: result
})),
pl: () => loadJsonAsset(_Module2275).then((result) => ({
default: result
})),
"pt-BR": () => loadJsonAsset(_Module2276).then((result) => ({
default: result
})),
ro: () => loadJsonAsset(_Module2277).then((result) => ({
default: result
})),
ru: () => loadJsonAsset(_Module2278).then((result) => ({
default: result
})),
"sv-SE": () => loadJsonAsset(_Module2279).then((result) => ({
default: result
})),
th: () => loadJsonAsset(_Module2280).then((result) => ({
default: result
})),
tr: () => loadJsonAsset(_Module2281).then((result) => ({
default: result
})),
uk: () => loadJsonAsset(_Module2282).then((result) => ({
default: result
})),
vi: () => loadJsonAsset(_Module2283).then((result) => ({
default: result
})),
"zh-CN": () => loadJsonAsset(_Module2284).then((result) => ({
default: result
})),
"zh-TW": () => loadJsonAsset(_Module2285).then((result) => ({
default: result
})),
"en-US": () => loadJsonAsset(_Module2286).then((result) => ({
default: result
}))
}, "en-US");
const r51 = makeMessagesProxy(loader);
export default r51;
export { loader as messagesLoader };
@@ -0,0 +1,142 @@
// Metro module 11580 (f11581).
import { GUILD_POWERUP_APPLICATION_ID, GuildPowerupType } from "./constants/GuildPowerupsConstants";
import { Endpoints } from "../../../Constants";
import Dispatcher from "../../../Dispatcher";
import { MOCK_LEVELS, MOCK_PERKS } from "./mocks/GuildPowerupMocks";
import { httpGetWithCountryCodeQuery } from "../../../utils/StoreUtils";
import { rejectWithMigratedError, HTTP } from "../../../_bundle/sendRequest";
import storeListingToGuildPowerup from "./utils/storeListingToGuildPowerup";
import { isNotNullish } from "../../../utils/GlobalUtils";
export function guildPowerupsAckNotification(a0) {
Dispatcher.dispatch({
type: "GUILD_POWERUPS_ACK_NOTIFICATION",
guildId: a0
});
}
export function guildPowerupsResetNotifications() {
Dispatcher.dispatch({
type: "GUILD_POWERUPS_RESET_NOTIFICATIONS"
});
}
export function fetchPowerupCatalogForGuild(a0, a1) {
const guildId = a0;
if (a1 === true) {
const r34 = MOCK_LEVELS.concat(MOCK_PERKS);
const powerupCatalog = {};
powerupCatalog[GuildPowerupType.LEVEL] = MOCK_LEVELS;
powerupCatalog[GuildPowerupType.PERK] = MOCK_PERKS;
Dispatcher.dispatch({
type: "GUILD_POWERUP_CATALOG_FETCH_SUCCESS",
guildId: a0,
allPowerups: r34.sort((a, b) => a.skuId >= b.skuId ? 1 : -1).reduce((acc, item) => {
acc[item.skuId] = item;
return acc;
}, {}),
powerupCatalog
});
return void 0;
}
return httpGetWithCountryCodeQuery({
url: Endpoints.STORE_PUBLISHED_LISTINGS_SKUS,
query: {
application_id: GUILD_POWERUP_APPLICATION_ID,
guild_id: a0
},
oldFormErrors: true,
rejectWithError: rejectWithMigratedError()
}).then((result) => {
const r23 = result.body.map((item) => storeListingToGuildPowerup(result.body, item)).filter(isNotNullish).sort((a, b) => a.skuId >= b.skuId ? 1 : -1).reduce((acc, item) => {
const { allPowerups, powerupCatalog } = acc;
allPowerups[item.skuId] = item;
if (powerupCatalog[item.type] == null) {
powerupCatalog[item.type] = [];
}
const r11 = powerupCatalog[item.type];
if (r11 != null) {
const push = r11.push;
if (push != null) {
push.call(r11, item);
}
}
return acc;
}, {
allPowerups: {},
powerupCatalog: {}
});
Dispatcher.dispatch({
type: "GUILD_POWERUP_CATALOG_FETCH_SUCCESS",
guildId,
allPowerups: r23.allPowerups,
powerupCatalog: r23.powerupCatalog
});
return result.body;
});
}
export function fetchGuildBoostEntitlements(a0) {
const guildId2 = a0;
let include_ends_at = arguments[1];
if (include_ends_at === void 0) {
include_ends_at = true;
}
return httpGetWithCountryCodeQuery({
url: Endpoints.GUILD_POWERUPS(a0),
query: {
include_ends_at
},
oldFormErrors: true,
rejectWithError: rejectWithMigratedError()
}).then((result) => {
const unlockedPowerups = {};
let c27112_0 = unlockedPowerups;
const unlockedGameServers = {};
let c27112_1 = unlockedGameServers;
result.body.forEach((item) => {
const sku = item.sku;
const r2 = sku == null;
let r4 = void 0;
if (!r2) {
const tenant_metadata = sku.tenant_metadata;
r4 = tenant_metadata == null ? void 0 : tenant_metadata.guild_monetization?.powerup;
}
L16: {
if (r4 == null) {
if ((item == null ? void 0 : item.sku?.powerup_metadata) == null) {
const sku2 = item.sku;
const r16 = sku2 == null;
let r17 = void 0;
if (!r16) {
const tenant_metadata2 = sku2.tenant_metadata;
r17 = tenant_metadata2 == null ? void 0 : tenant_metadata2.guild_monetization?.game_server;
}
if (r17 == null) {
break L16;
}
c27112_1[item.id] = item;
} else {
c27112_0[item.sku_id] = item;
}
} else {
c27112_0[item.sku_id] = item;
}
}
});
Dispatcher.dispatch({
type: "GUILD_BOOST_ENTITLEMENTS_FETCH_SUCCESS",
guildId: guildId2,
unlockedPowerups,
unlockedGameServers
});
});
}
export function enablePowerupForGuild(a0, a1) {
return HTTP.post({
url: Endpoints.GUILD_POWERUP_TOGGLE(a0, a1),
rejectWithError: true
});
}
export function disablePowerupForGuild(a0, a1) {
return HTTP.del({
url: Endpoints.GUILD_POWERUP_TOGGLE(a0, a1),
rejectWithError: true
});
}
@@ -0,0 +1,98 @@
// Metro module 16191 (f16192).
import GuildStore from "../../../stores/GuildStore";
import PermissionStore from "../../../stores/PermissionStore";
import SelectedGuildStore from "../../../stores/SelectedGuildStore";
import GuildPowerupsStore from "./GuildPowerupsStore";
import AutomaticLifecycleManager from "../../../lib/AutomaticLifecycleManager";
import { isFavoritesGuildId } from "../../favorites/FavoritesUtils";
import { GameServerExperiment, getGameServerEnabled } from "../game_server/GameServerExperiment";
import { FileUpload250MbPowerupExperiment } from "./experiments/FileUpload250MbPowerupExperiment";
import { ServerThemeExperiment, getServerThemeEnabled } from "./experiments/ServerThemeExperiment";
import { ServerThemeApexShadowExperiment } from "./experiments/ServerThemeApexShadowExperiment";
import { GameServerPricingExperiment } from "../game_server/experiments/GameServerPricingExperiment";
import { getHasAllocateBoostPermission } from "./hooks/useHasAllocateBoostPermission";
import { getIsCurrentUserEligibleForPowerupUpsells } from "./hooks/useIsCurrentUserEligibleForPowerupUpsells";
import { isMobile } from "../../../_bundle/Module4426";
import { getServerThemeUserEnabled } from "./experiments/ServerThemeUserExperiment";
import BoostToUnlockMobileCoachmarkExperiment from "../../guild_boosting/experiments/BoostToUnlockMobileCoachmarkExperiment";
import { fetchPowerupCatalogForGuild, fetchGuildBoostEntitlements } from "./GuildPowerupsActionCreators";
import ExpiringBoostsExperiment from "./experiments/ExpiringBoostsExperiment";
import { fetchAppliedGuildBoostsForGuild } from "../../../actions/BoostingActionCreators";
class GuildPowerupsManager extends AutomaticLifecycleManager {
stores = new Map().set(SelectedGuildStore, this.handleSelectedGuildChange);
actions = {
GUILD_POWERUP_ENTITLEMENTS_CREATE: this.handleEntitlementUpdate.bind(this),
GUILD_POWERUP_ENTITLEMENTS_DELETE: this.handleEntitlementUpdate.bind(this),
GUILD_APPLIED_BOOSTS_UPDATE: this.handleAppliedBoostUpdate.bind(this)
};
handleSelectedGuildChange() {
const guildId = SelectedGuildStore.getGuildId();
if (guildId != null && !isFavoritesGuildId(guildId)) {
const guild = GuildStore.getGuild(guildId);
if (guild != null) {
GameServerExperiment.trackExposure({
guildId: guild.id,
location: "GuildPowerupsManager"
});
FileUpload250MbPowerupExperiment.trackExposure({
guildId: guild.id,
location: "GuildPowerupsManager"
});
ServerThemeExperiment.trackExposure({
guildId: guild.id,
location: "GuildPowerupsManager"
});
ServerThemeApexShadowExperiment.getConfig({
guildId: guild.id,
location: "GuildPowerupsManager"
});
if (getGameServerEnabled(guild.id, "GuildPowerupsManager")) {
GameServerPricingExperiment.trackExposure({
guildId: guild.id,
location: "GuildPowerupsManager"
});
}
if (!getHasAllocateBoostPermission(PermissionStore, guild)) {
let r64 = getIsCurrentUserEligibleForPowerupUpsells();
let r67 = isMobile && getServerThemeEnabled(guildId, "GuildPowerupsManager") && getIsCurrentUserEligibleForPowerupUpsells() && getServerThemeUserEnabled("GuildPowerupsManager");
const r79 = isMobile && getIsCurrentUserEligibleForPowerupUpsells() && BoostToUnlockMobileCoachmarkExperiment.getConfig({
location: "GuildPowerupsManager"
}).showCoachmark;
if (isMobile) {
if (!r67) {
r67 = r79;
}
r64 = r67;
}
if (!r64) {
return void 0;
}
}
if (GuildPowerupsStore.shouldFetchCatalogForGuild(guildId)) {
fetchPowerupCatalogForGuild(guildId);
}
if (GuildPowerupsStore.shouldFetchPowerupsForGuild(guildId)) {
fetchGuildBoostEntitlements(guildId);
}
}
}
}
handleEntitlementUpdate(a0) {
this.refreshGuildPowerups(a0.guildId);
}
handleAppliedBoostUpdate(a0) {
this.refreshGuildPowerups(a0.guildId);
}
refreshGuildPowerups(a0) {
if (getHasAllocateBoostPermission(PermissionStore, GuildStore.getGuild(a0)) === true) {
fetchGuildBoostEntitlements(a0);
fetchAppliedGuildBoostsForGuild(a0, {
includeEnded: ExpiringBoostsExperiment.getConfig({
location: "GuildPowerupsManager"
}).enabled
});
}
}
}
const guildPowerupsManager = new GuildPowerupsManager();
export default guildPowerupsManager;
@@ -0,0 +1,74 @@
// Metro module 11584 (f11585).
import GuildStore from "../../../stores/GuildStore";
import GameServerStore from "../game_server/GameServerStore";
import GuildPowerupsStore from "./GuildPowerupsStore";
import { getExpiringGuildEntitlements } from "./utils/getExpiringGuildEntitlements";
import Module589 from "../../../_bundle/Module589";
import Dispatcher from "../../../Dispatcher";
import { HermesBuiltin } from "../../../_hermes/prelude";
let c7903_5 = {};
class GuildPowerupsNotificationStore extends Module589.PersistedStore {
static displayName = "GuildPowerupsNotificationStore";
static persistKey = "GuildPowerupsNotificationStore";
static migrations = [(a0) => {
Object.entries(a0).forEach((item) => {
const [r13, r14] = item;
a0[r13] = r14;
});
return a0;
}];
getState() {
return c7903_5;
}
initialize(a0) {
this.waitFor(GameServerStore, GuildPowerupsStore, GuildStore);
if (a0 != null) {
c7903_5 = a0;
}
}
getNotificationStateForGuild(a0) {
return c7903_5[a0];
}
}
const guildPowerupsNotificationStore = new GuildPowerupsNotificationStore(Dispatcher, {
GUILD_POWERUPS_ACK_NOTIFICATION: function handleAckNotification({ guildId }) {
let lastBoostCount = GuildStore.getGuild(guildId)?.premiumSubscriberCount;
if (lastBoostCount == null) {
lastBoostCount = 0;
}
const stateForGuild = GuildPowerupsStore.getStateForGuild(guildId);
const stateForGuild2 = GameServerStore.getStateForGuild(guildId);
const r12 = Object;
let r30 = stateForGuild?.unlockedPowerups;
if (r30 == null) {
r30 = {};
}
const r16 = r12.values(r30);
const r31 = [];
const r0 = HermesBuiltin.arraySpread(r31, r16, 0);
const r32 = Object;
let r35 = stateForGuild2?.entitlements;
if (r35 == null) {
r35 = {};
}
HermesBuiltin.arraySpread(r31, r32.values(r35), r0);
const expiringGuildEntitlements = getExpiringGuildEntitlements(r31);
const r41 = {
...c7903_5
};
const r45 = Date;
let r51 = expiringGuildEntitlements[expiringGuildEntitlements.length - 1]?.ends_at;
if (r51 == null) {
r51 = Date.now();
}
r41[guildId] = {
lastSeenWarningNotification: new r45(r51).getTime(),
lastBoostCount
};
c7903_5 = r41;
},
GUILD_POWERUPS_RESET_NOTIFICATIONS: function handleResetNotifications() {
c7903_5 = {};
}
});
export default guildPowerupsNotificationStore;
@@ -0,0 +1,248 @@
// Metro module 4076 (f4077).
import GuildStore from "../../../stores/GuildStore";
import { GUILD_POWERUP_TIER_3_OVERRIDDEN_PURCHASABLE_FEATURES, PURCHASABLE_PREMIUM_FEATURES_BOOST_INFO } from "./constants/GuildPowerupsConstants";
import { AppliedGuildBoostsRequiredForBoostedGuildTier, BoostedGuildTiers, GuildFeatures } from "../../../Constants";
import Module589 from "../../../_bundle/Module589";
import Dispatcher from "../../../Dispatcher";
function $mk73563($env) {
return (a0) => {
const r1 = $env;
const r0 = r1[0];
const unlockedPowerups = r1[1].unlockedPowerups;
const sku_id = a0.sku_id;
if (r0) {
unlockedPowerups[sku_id] = a0;
} else {
delete unlockedPowerups[sku_id];
}
};
}
let c2344_7;
const calculateAppliedBoosts = function calculateAppliedBoosts(a0) {
const guild = GuildStore.getGuild(a0);
const r5 = (guild == null ? void 0 : guild.features.has(GuildFeatures.PREMIUM_TIER_3_OVERRIDE)) === true;
let r35 = 0;
if (!r5) {
let r38 = guild?.premiumTier;
if (r38 == null) {
r38 = BoostedGuildTiers.NONE;
}
r35 = AppliedGuildBoostsRequiredForBoostedGuildTier[r38];
}
let r40 = r35;
for (const item of Object.entries(PURCHASABLE_PREMIUM_FEATURES_BOOST_INFO)) {
const [r54, r55] = item;
if (!(r5 && GUILD_POWERUP_TIER_3_OVERRIDDEN_PURCHASABLE_FEATURES.has(r54))) {
const r58 = guild == null;
let r59 = void 0;
if (!r58) {
const premiumFeatures = guild.premiumFeatures;
r59 = premiumFeatures == null ? void 0 : premiumFeatures.features.includes(r54);
}
if (r59) {
const isEnabled = r55.isEnabled;
let r67 = isEnabled == null ? void 0 : isEnabled.call(r55, a0);
if (r67 == null) {
r67 = 1;
}
r59 = r67;
}
if (r59) {
r59 = r55.includedInLevel == null || guild.premiumTier < r55.includedInLevel;
}
if (r59) {
r40 = r40 + r55.boostPrice;
}
}
}
return r40;
};
c2344_7 = {};
class GuildPowerupsStore extends Module589.PersistedStore {
static displayName = "GuildPowerupsStore";
static persistKey = "GuildPowerupsStore";
static migrations = [(a0) => a0 != null ? Object.fromEntries(Object.entries(a0).filter((item) => {
const [, r13] = item;
return r13 != null && typeof r13 === "object";
}).map((item) => {
const [r23, r24] = item;
const r26 = [r23, ,];
let allPowerups = r24.allPowerups;
if (allPowerups == null) {
allPowerups = {};
}
let powerupCatalog = r24.powerupCatalog;
if (powerupCatalog == null) {
powerupCatalog = {};
}
let unlockedPowerups = r24.unlockedPowerups;
if (unlockedPowerups == null) {
unlockedPowerups = {};
}
r26[1] = {
...r24,
allPowerups,
powerupCatalog,
unlockedPowerups
};
return r26;
})) : a0];
initialize(a0) {
this.waitFor(GuildStore);
if (a0 != null) {
c2344_7 = a0;
}
}
getState() {
return c2344_7;
}
getStateForGuild(a0) {
return a0 != null ? c2344_7[a0] : void 0;
}
shouldFetchCatalogForGuild(a0) {
const catalogFetchCooldown = c2344_7[a0]?.catalogFetchCooldown;
return catalogFetchCooldown == null || catalogFetchCooldown + 86400000 < Date.now();
}
shouldFetchPowerupsForGuild(a0) {
const unlockedPowerupsFetchCooldown = c2344_7[a0]?.unlockedPowerupsFetchCooldown;
return unlockedPowerupsFetchCooldown == null || unlockedPowerupsFetchCooldown + 3600000 < Date.now();
}
hasFetchedPowerupCatalog(a0) {
return a0 != null && c2344_7[a0]?.hasFetchedPowerupCatalog === true;
}
hasFetchedUnlockedPowerups(a0) {
return a0 != null && c2344_7[a0]?.hasFetchedUnlockedPowerups === true;
}
}
const guildPowerupsStore = new GuildPowerupsStore(Dispatcher, {
LOGOUT: function handleReset() {
c2344_7 = {};
},
GUILD_POWERUP_CATALOG_FETCH_SUCCESS: function handleGuildPowerupCatalogFetchSuccess({ guildId, allPowerups, powerupCatalog }) {
if (c2344_7[guildId] == null) {
c2344_7[guildId] = {
allPowerups: {},
powerupCatalog: {},
unlockedPowerups: {},
appliedBoosts: calculateAppliedBoosts(guildId)
};
}
const r19 = c2344_7[guildId];
const r20 = {
...c2344_7
};
r20[guildId] = {
...r19,
allPowerups,
powerupCatalog,
catalogFetchCooldown: Date.now(),
hasFetchedPowerupCatalog: true
};
c2344_7 = r20;
},
GUILD_BOOST_ENTITLEMENTS_FETCH_SUCCESS: function handleGuildBoostEntitlementsFetchSuccess({ guildId, unlockedPowerups }) {
if (c2344_7[guildId] == null) {
c2344_7[guildId] = {
allPowerups: {},
powerupCatalog: {},
unlockedPowerups: {},
appliedBoosts: calculateAppliedBoosts(guildId)
};
}
const r18 = c2344_7[guildId];
const appliedBoosts = calculateAppliedBoosts(guildId);
const r22 = {
...c2344_7
};
r22[guildId] = {
...r18,
unlockedPowerups,
appliedBoosts,
unlockedPowerupsFetchCooldown: Date.now(),
hasFetchedUnlockedPowerups: true
};
c2344_7 = r22;
},
GUILD_POWERUP_ENTITLEMENTS_CREATE: function handleGuildPowerupCreated(a0) {
let env13839;
const r3 = env13839 = {};
const { guildId, entitlements } = a0;
env13839[0] = true;
env13839[1] = void 0;
if (c2344_7[guildId] == null) {
c2344_7[guildId] = {
allPowerups: {},
powerupCatalog: {},
unlockedPowerups: {},
appliedBoosts: calculateAppliedBoosts(guildId)
};
}
const r21 = c2344_7[guildId];
env13839[1] = r21;
entitlements.forEach($mk73563(r3));
const r25 = {
...c2344_7
};
r25[guildId] = {
...r21,
appliedBoosts: calculateAppliedBoosts(guildId)
};
c2344_7 = r25;
},
GUILD_POWERUP_ENTITLEMENTS_DELETE: function handleGuildPowerupDeleted(a0) {
let env13840;
const r3 = env13840 = {};
const { guildId, entitlements } = a0;
env13840[0] = false;
env13840[1] = void 0;
if (c2344_7[guildId] == null) {
c2344_7[guildId] = {
allPowerups: {},
powerupCatalog: {},
unlockedPowerups: {},
appliedBoosts: calculateAppliedBoosts(guildId)
};
}
const r21 = c2344_7[guildId];
env13840[1] = r21;
entitlements.forEach($mk73563(r3));
const r25 = {
...c2344_7
};
r25[guildId] = {
...r21,
appliedBoosts: calculateAppliedBoosts(guildId)
};
c2344_7 = r25;
},
GUILD_UPDATE: function handleGuildUpdated(a0) {
const id = a0.guild.id;
if (c2344_7[id] == null) {
c2344_7[id] = {
allPowerups: {},
powerupCatalog: {},
unlockedPowerups: {},
appliedBoosts: calculateAppliedBoosts(id)
};
}
c2344_7[id] = {
...c2344_7[id],
appliedBoosts: calculateAppliedBoosts(id)
};
},
GAME_SERVER_FETCH_INSTANCES_SUCCESS: function handleGameServerInstanceFetched({ guildId }) {
if (c2344_7[guildId] == null) {
c2344_7[guildId] = {
allPowerups: {},
powerupCatalog: {},
unlockedPowerups: {},
appliedBoosts: calculateAppliedBoosts(guildId)
};
}
c2344_7[guildId] = {
...c2344_7[guildId],
appliedBoosts: calculateAppliedBoosts(guildId)
};
}
});
export default guildPowerupsStore;
@@ -0,0 +1,20 @@
// Metro module 11634 (f11635).
import { useEffect } from "react";
import { AnalyticEvents } from "../../../../Constants";
import AnalyticsUtils from "../../../../utils/AnalyticsUtils";
const r18 = {
DETAIL: "Boost Perk Shop Details",
DEACTIVATE: "Boost Perk Shop Disable"
};
export { r18 as ModalType };
export function useLogPowerupModalOpened(a0, a1, a2) {
const guild_id = a0;
const type = a2;
useEffect(() => {
AnalyticsUtils.track(AnalyticEvents.OPEN_MODAL, {
type,
sku_id: a1.skuId,
guild_id
});
}, [a2, a0, a1.skuId]);
}
@@ -0,0 +1,48 @@
// Metro module 16451 (f16452).
export const HOLOGRAPHIC_ROLE_COLORS = {
primary_color: 11127295,
secondary_color: 16759788,
tertiary_color: 16761760
};
export const DEFAULT_GRADIENT_ROLE_COLORS = {
primary_color: 10382335,
secondary_color: 10469887,
tertiary_color: null
};
export const GRADIENT_PRESETS = [{
colors: [11156283, 16730184],
name: "fire"
}, {
colors: [13927485, 16768656],
name: "golddust"
}, {
colors: [3577974, 7471006],
name: "emerald"
}, {
colors: [5025232, 11729407],
name: "diamond"
}, {
colors: [10382335, 10469887],
name: "blurple"
}, {
colors: [16735702, 16751807],
name: "cupid"
}, {
colors: [9467253, 16764614],
name: "rosegold"
}, {
colors: [10192486, 16769460],
name: "desert"
}, {
colors: [7640178, 11788729],
name: "moss"
}, {
colors: [8886702, 15857663],
name: "platinum"
}, {
colors: [8547266, 12036081],
name: "plum"
}, {
colors: [9854847, 16755420],
name: "rose"
}];
@@ -0,0 +1,228 @@
// Metro module 4077 (f4078).
import { BoostedGuildFeatures } from "../../PremiumConstants";
import { GAME_SERVER_POWERUP_SKU_ID } from "../../game_server/GameServerConstants";
import { BoostedGuildTiers, GuildFeatures } from "../../../../Constants";
import { GUILD_POWERUP_LEVEL_1_SKU_ID, GUILD_POWERUP_LEVEL_2_SKU_ID, GUILD_POWERUP_LEVEL_3_SKU_ID, GUILD_POWERUP_TAG_SKU_ID, GUILD_POWERUP_ROLE_COLOR_SKU_ID, GUILD_TAGS_BADGE_PACK_PETS_POWERUP_SKU_ID, GUILD_TAGS_BADGE_PACK_FLEX_POWERUP_SKU_ID, GUILD_TAGS_BADGE_PACK_PLANT_POWERUP_SKU_ID, GUILD_TAGS_BADGE_PACK_CREEPY_CRAWLIES_POWERUP_SKU_ID, VANITY_URL_POWERUP_SKU_ID, GUILD_POWERUP_MAX_FILE_SIZE_250_MB_SKU_ID, GUILD_POWERUP_GUILD_THEME_SKU_ID } from "../../../../_bundle/Module4080";
import { DismissibleGuildContent } from "../../../../_bundle/Module1358";
import { PerkIcons } from "../../../../utils/GuildBoostingUtils";
import { intl, t } from "../../../../intl/index.native";
import { FileUploadPowerupHoldoutExperiment } from "../experiments/FileUploadPowerupHoldoutExperiment";
import { getFileUpload250MbPowerupEnabled } from "../experiments/FileUpload250MbPowerupExperiment";
import { getServerThemeUserEnabled } from "../experiments/ServerThemeUserExperiment";
import { getServerThemeEnabled } from "../experiments/ServerThemeExperiment";
import { getGameServerEnabled } from "../../game_server/GameServerExperiment";
const r32 = {
PERK: "perk",
LEVEL: "level"
};
const set4 = new Set([GUILD_POWERUP_LEVEL_1_SKU_ID, GUILD_POWERUP_LEVEL_2_SKU_ID, GUILD_POWERUP_LEVEL_3_SKU_ID, GUILD_POWERUP_TAG_SKU_ID, GUILD_POWERUP_ROLE_COLOR_SKU_ID, GUILD_TAGS_BADGE_PACK_PETS_POWERUP_SKU_ID, GUILD_TAGS_BADGE_PACK_FLEX_POWERUP_SKU_ID, GUILD_TAGS_BADGE_PACK_PLANT_POWERUP_SKU_ID, GUILD_TAGS_BADGE_PACK_CREEPY_CRAWLIES_POWERUP_SKU_ID]);
const set3 = new Set([GuildFeatures.GUILD_TAGS, GuildFeatures.ENHANCED_ROLE_COLORS, GuildFeatures.GUILD_TAGS_BADGE_PACK_PETS, GuildFeatures.GUILD_TAGS_BADGE_PACK_FLEX, GuildFeatures.GUILD_TAGS_BADGE_PACK_PLANT, GuildFeatures.GUILD_TAGS_BADGE_PACK_CREEPY_CRAWLIES]);
const r27 = {};
r27[BoostedGuildTiers.TIER_1] = GUILD_POWERUP_LEVEL_1_SKU_ID;
r27[BoostedGuildTiers.TIER_2] = GUILD_POWERUP_LEVEL_2_SKU_ID;
r27[BoostedGuildTiers.TIER_3] = GUILD_POWERUP_LEVEL_3_SKU_ID;
r27[BoostedGuildTiers.NONE] = void 0;
const r26 = {};
r26[GUILD_POWERUP_LEVEL_1_SKU_ID] = BoostedGuildTiers.TIER_1;
r26[GUILD_POWERUP_LEVEL_2_SKU_ID] = BoostedGuildTiers.TIER_2;
r26[GUILD_POWERUP_LEVEL_3_SKU_ID] = BoostedGuildTiers.TIER_3;
const r25 = {};
r25[BoostedGuildTiers.TIER_1] = DismissibleGuildContent.GUILD_POWERUP_LEVEL_1_COACHMARK;
r25[BoostedGuildTiers.TIER_2] = DismissibleGuildContent.GUILD_POWERUP_LEVEL_2_COACHMARK;
r25[BoostedGuildTiers.TIER_3] = DismissibleGuildContent.GUILD_POWERUP_LEVEL_3_COACHMARK;
r25[BoostedGuildTiers.NONE] = void 0;
const r24 = [[GUILD_POWERUP_TAG_SKU_ID], [GUILD_POWERUP_ROLE_COLOR_SKU_ID], [VANITY_URL_POWERUP_SKU_ID], [GUILD_TAGS_BADGE_PACK_PETS_POWERUP_SKU_ID, GUILD_TAGS_BADGE_PACK_FLEX_POWERUP_SKU_ID], [GUILD_TAGS_BADGE_PACK_PLANT_POWERUP_SKU_ID, GUILD_TAGS_BADGE_PACK_CREEPY_CRAWLIES_POWERUP_SKU_ID], [GUILD_POWERUP_MAX_FILE_SIZE_250_MB_SKU_ID], [GUILD_POWERUP_GUILD_THEME_SKU_ID]];
const r23 = {};
r23[GAME_SERVER_POWERUP_SKU_ID] = "beta";
r23[GUILD_POWERUP_MAX_FILE_SIZE_250_MB_SKU_ID] = "beta";
r23[GUILD_POWERUP_GUILD_THEME_SKU_ID] = "beta";
const set2 = new Set([GUILD_POWERUP_TAG_SKU_ID, GUILD_POWERUP_ROLE_COLOR_SKU_ID, VANITY_URL_POWERUP_SKU_ID, GUILD_TAGS_BADGE_PACK_PETS_POWERUP_SKU_ID, GUILD_TAGS_BADGE_PACK_FLEX_POWERUP_SKU_ID, GUILD_TAGS_BADGE_PACK_PLANT_POWERUP_SKU_ID, GUILD_TAGS_BADGE_PACK_CREEPY_CRAWLIES_POWERUP_SKU_ID, GUILD_POWERUP_GUILD_THEME_SKU_ID]);
const set = new Set([GUILD_POWERUP_ROLE_COLOR_SKU_ID, GUILD_POWERUP_TAG_SKU_ID]);
const r17 = {};
r17[GuildFeatures.VANITY_URL] = {
boostPrice: 5,
includedInLevel: BoostedGuildTiers.TIER_3
};
r17[GuildFeatures.GUILD_TAGS] = {
boostPrice: 3
};
r17[GuildFeatures.ENHANCED_ROLE_COLORS] = {
boostPrice: 3
};
r17[GuildFeatures.GUILD_TAGS_BADGE_PACK_PETS] = {
boostPrice: 3
};
r17[GuildFeatures.GUILD_TAGS_BADGE_PACK_FLEX] = {
boostPrice: 5
};
r17[GuildFeatures.GUILD_TAGS_BADGE_PACK_PLANT] = {
boostPrice: 3
};
r17[GuildFeatures.GUILD_TAGS_BADGE_PACK_CREEPY_CRAWLIES] = {
boostPrice: 2
};
r17[GuildFeatures.MAX_FILE_SIZE_250_MB] = {
boostPrice: 4,
isEnabled: (a0) => {
const enabled = FileUploadPowerupHoldoutExperiment.getConfig({
location: "GuildPowerupsConstants"
}).enabled;
return enabled ? !enabled : getFileUpload250MbPowerupEnabled(a0, "GuildPowerupsConstants");
}
};
r17[GuildFeatures.GUILD_THEME] = {
boostPrice: 3,
isEnabled: (a0) => getServerThemeUserEnabled("GuildPowerupsConstants") && getServerThemeEnabled(a0, "GuildPowerupsConstants")
};
const r16 = {};
r16[GuildFeatures.GAME_SERVERS] = {
boostPrice: 3,
isEnabled: (a0) => getGameServerEnabled(a0, "GuildPowerupsConstants")
};
const r15 = {};
r15[VANITY_URL_POWERUP_SKU_ID] = BoostedGuildTiers.TIER_3;
const r14 = {
INACTIVE: "inactive",
POWERUP_ACTIVATED: "powerup_activated",
LEVEL_ACTIVATED: "level_activated",
TIER_OVERRIDE_ACTIVATED: "tier_override_activated"
};
const r13 = {
VANITY_URL: 1,
1: "VANITY_URL",
GUILD_TAG_BADGE_PACKS_WAVE_ONE: 2,
2: "GUILD_TAG_BADGE_PACKS_WAVE_ONE",
GAME_SERVER_HOSTING: 3,
3: "GAME_SERVER_HOSTING",
GUILD_TAG_BADGE_PACKS_WAVE_TWO: 4,
4: "GUILD_TAG_BADGE_PACKS_WAVE_TWO",
FILE_UPLOAD_250_MB: 5,
5: "FILE_UPLOAD_250_MB",
GUILD_THEME: 6,
6: "GUILD_THEME",
GUILD_TAG: 7,
7: "GUILD_TAG"
};
const set5 = new Set([GUILD_TAGS_BADGE_PACK_PETS_POWERUP_SKU_ID, GUILD_TAGS_BADGE_PACK_FLEX_POWERUP_SKU_ID]);
const set6 = new Set([GUILD_TAGS_BADGE_PACK_PLANT_POWERUP_SKU_ID, GUILD_TAGS_BADGE_PACK_CREEPY_CRAWLIES_POWERUP_SKU_ID]);
const r278 = {};
r278[r13.VANITY_URL] = new Set([VANITY_URL_POWERUP_SKU_ID]);
r278[r13.GUILD_TAG_BADGE_PACKS_WAVE_ONE] = set5;
r278[r13.GAME_SERVER_HOSTING] = new Set();
r278[r13.GUILD_TAG_BADGE_PACKS_WAVE_TWO] = set6;
r278[r13.FILE_UPLOAD_250_MB] = new Set([GUILD_POWERUP_MAX_FILE_SIZE_250_MB_SKU_ID]);
r278[r13.GUILD_THEME] = new Set([GUILD_POWERUP_GUILD_THEME_SKU_ID]);
r278[r13.GUILD_TAG] = new Set([GUILD_POWERUP_TAG_SKU_ID]);
const r330 = {
AVAILABLE: 0,
0: "AVAILABLE",
SPENT: 1,
1: "SPENT",
TOTAL: 2,
2: "TOTAL"
};
const r335 = {
LEVEL: 0,
0: "LEVEL",
PERK: 1,
1: "PERK"
};
const r338 = {
START: "start",
MIDDLE: "middle",
END: "end"
};
const r342 = {
FULL: "full",
HALF: "half",
NONE: "none"
};
export { r32 as GuildPowerupType };
export const GUILD_POWERUP_APPLICATION_ID = "1340102344645283891";
export { set4 as GUILD_POWERUP_TIER_3_OVERRIDDEN_SKUS };
export { set3 as GUILD_POWERUP_TIER_3_OVERRIDDEN_PURCHASABLE_FEATURES };
export const GUILD_POWERUP_MIGRATION_USER_ID = "525479941211684874";
export { r27 as BOOSTING_TIER_TO_LEVEL_SKU_ID };
export { r26 as LEVEL_SKU_ID_TO_BOOSTING_TIER };
export { r25 as BOOSTING_TIER_TO_LEVEL_UNLOCKED_DC };
export const GUILD_POWERUP_MODAL_KEY = "guild_powerup_modal";
export { r24 as GUILD_POWERUP_NEW_PERK_GROUPS };
export { r23 as PERK_SKU_BADGES };
export { set2 as GUILD_POWERUP_CONFIGURABLE_SKUS_DESKTOP };
export { set as GUILD_POWERUP_CONFIGURABLE_SKUS_MOBILE };
export const GUILD_FEATURE_TO_PERK = () => {
const r3 = {};
r3[GuildFeatures.VIDEO_QUALITY_1080_60FPS] = {
perkIcon: PerkIcons.STREAM,
description: intl.string(t.y4ft4D)
};
r3[GuildFeatures.AUDIO_BITRATE_128_KBPS] = {
perkIcon: PerkIcons.AUDIO,
description: intl.formatToPlainString(t.zoT1ZE, {
bitrate: BoostedGuildFeatures[BoostedGuildTiers.TIER_1].limits.bitrate / 1000
})
};
r3[GuildFeatures.INVITE_SPLASH] = {
perkIcon: PerkIcons.CUSTOMIZATION,
description: intl.string(t.Qwlpov)
};
r3[GuildFeatures.ANIMATED_ICON] = {
perkIcon: PerkIcons.ANIMATED,
description: intl.string(t.PbAyub)
};
r3[GuildFeatures.AUDIO_BITRATE_256_KBPS] = {
perkIcon: PerkIcons.AUDIO,
description: intl.formatToPlainString(t.zoT1ZE, {
bitrate: BoostedGuildFeatures[BoostedGuildTiers.TIER_2].limits.bitrate / 1000
})
};
r3[GuildFeatures.ROLE_ICONS] = {
perkIcon: PerkIcons.CUSTOM_ROLE_ICON,
description: intl.string(t["6PV6Qc"])
};
r3[GuildFeatures.MAX_FILE_SIZE_50_MB] = {
perkIcon: PerkIcons.UPLOAD,
description: intl.formatToPlainString(t.aFRl53, {
uploadSizeLimit: intl.string(t.M6qV8j)
})
};
r3[GuildFeatures.BANNER] = {
perkIcon: PerkIcons.CUSTOMIZATION,
description: intl.string(t["1a5rjl"])
};
r3[GuildFeatures.ANIMATED_BANNER] = {
perkIcon: PerkIcons.ANIMATED,
description: intl.string(t["1+Vmh9"])
};
r3[GuildFeatures.AUDIO_BITRATE_384_KBPS] = {
perkIcon: PerkIcons.AUDIO,
description: intl.formatToPlainString(t.zoT1ZE, {
bitrate: BoostedGuildFeatures[BoostedGuildTiers.TIER_3].limits.bitrate / 1000
})
};
r3[GuildFeatures.VANITY_URL] = {
perkIcon: PerkIcons.VANITY,
description: intl.string(t["5XZKy/"])
};
r3[GuildFeatures.MAX_FILE_SIZE_100_MB] = {
perkIcon: PerkIcons.UPLOAD,
description: intl.formatToPlainString(t.aFRl53, {
uploadSizeLimit: intl.string(t.yMOW8D)
})
};
return r3;
};
export const GUILD_THEME_POWERUP_BOOST_PRICE = 3;
export { r17 as PURCHASABLE_PREMIUM_FEATURES_BOOST_INFO };
export { r16 as MULTIPLE_PURCHASEABLE_PREMIUM_FEATURES_BOOST_INFO };
export { r15 as POWERUPS_INCLUDED_IN_LEVEL };
export { r14 as PowerupActiveStatusType };
export { r13 as GuildPowerupNewPerkMarketingVersion };
export { set5 as GUILD_TAG_BADGE_PACKS_WAVE_ONE_SKU_ID_SET };
export { set6 as GUILD_TAG_BADGE_PACKS_WAVE_TWO_SKU_ID_SET };
export { r278 as NEW_PERK_MARKETING_VERSION_TO_POWERUP_SKU_ID_SET };
export const POWERUP_ID_QUERY_PARAM = "powerupId";
export { r330 as BoostInfoType };
export { r335 as BoostPurchaseIntent };
export { r338 as LevelCardPosition };
export { r342 as LevelCardGradient };
@@ -0,0 +1,35 @@
// Metro module 11587 (f11588).
const r11 = {
WARNING: "warning",
UNREAD: "unread"
};
const r14 = {
LEVEL_REACHED: 0,
0: "LEVEL_REACHED",
PERKS_PURCHASABLE: 1,
1: "PERKS_PURCHASABLE",
PERKS_AVAILABLE: 2,
2: "PERKS_AVAILABLE",
NEW_PERK_AVAILABLE: 3,
3: "NEW_PERK_AVAILABLE",
BOOST_TO_UNLOCK: 4,
4: "BOOST_TO_UNLOCK",
EXPIRING_PERK: 5,
5: "EXPIRING_PERK",
GAME_SERVER_HOSTING_AVAILABLE: 6,
6: "GAME_SERVER_HOSTING_AVAILABLE",
GAME_SERVER_HOSTING_GUILD_ELIGIBLE: 7,
7: "GAME_SERVER_HOSTING_GUILD_ELIGIBLE",
GAME_SERVER_HOSTING_ENABLED: 8,
8: "GAME_SERVER_HOSTING_ENABLED",
GAME_SERVER_NEW_GAMES: 9,
9: "GAME_SERVER_NEW_GAMES",
GAME_SERVER_PRICING_CHANGE: 10,
10: "GAME_SERVER_PRICING_CHANGE"
};
export const GUILD_POWERUP_NOTIFICATION_COOLDOWN = 21600000;
export const BOOST_TO_UNLOCK_COACHMARK_COOLDOWN = 2592000000;
export const BOOST_TO_UNLOCK_COACHMARK_MAX_TIMES_TO_RECUR = 5;
export const EXPIRING_POWERUP_COACHMARK_COOLDOWN = 259200000;
export { r11 as GuildPowerupNotificationIndicatorType };
export { r14 as GuildPowerupNotificationPopoutType };
@@ -0,0 +1,23 @@
// Metro module 11672 (f11673).
import ApexExperiment from "../../../experiments/apex/ApexExperiment";
let c7984_0 = ApexExperiment({
name: "2026-05-expiring-boosts",
kind: "user",
defaultConfig: {
enabled: false
},
variations: {
0: {
enabled: false
},
1: {
enabled: true
}
}
});
export default c7984_0;
export function useExpiringBoostsEnabled(a0) {
return c7984_0.useConfig({
location: a0
}).enabled;
}
@@ -0,0 +1,23 @@
// Metro module 11599 (f11600).
import ApexExperiment from "../../../experiments/apex/ApexExperiment";
let c7915_0 = ApexExperiment({
name: "2026-02-expiring-powerup-coachmark",
kind: "user",
defaultConfig: {
enabled: false
},
variations: {
0: {
enabled: false
},
1: {
enabled: true
}
}
});
export default c7915_0;
export function useExpiringPowerupCoachmarkEnabled(a0) {
return c7915_0.useConfig({
location: a0
}).enabled;
}
@@ -0,0 +1,59 @@
// Metro module 4117 (f4118).
import { createExperiment } from "../../../experiments/index";
const experiment = createExperiment({
kind: "guild",
id: "2026-03_file_upload_250_mb_powerup",
label: "File Upload 250MB Powerup",
defaultConfig: {
enabled: false,
rollbackEnabled: false
},
treatments: [{
id: 1,
label: "Enable File Upload 250MB Powerup",
config: {
enabled: true,
rollbackEnabled: false
}
}, {
id: 2,
label: "Rollback UI for File Upload 250MB Powerup",
config: {
enabled: true,
rollbackEnabled: true
}
}]
});
export { experiment as FileUpload250MbPowerupExperiment };
export function getFileUpload250MbPowerupEnabled(a0, a1) {
return experiment.getCurrentConfig({
guildId: a0,
location: a1
}, {
autoTrackExposure: false
}).enabled;
}
export function useFileUpload250MbPowerupEnabled(a0, a1) {
return experiment.useExperiment({
guildId: a0,
location: a1
}, {
autoTrackExposure: false
}).enabled;
}
export function useFileUpload250MbPowerupRollbackEnabled(a0, a1) {
return experiment.useExperiment({
guildId: a0,
location: a1
}, {
autoTrackExposure: false
}).rollbackEnabled;
}
export function getFileUpload250MbPowerupRollbackEnabled(a0, a1) {
return experiment.getCurrentConfig({
guildId: a0,
location: a1
}, {
autoTrackExposure: false
}).rollbackEnabled;
}
@@ -0,0 +1,15 @@
// Metro module 4116 (f4117).
import { createApexExperiment } from "../../../experiments/apex/index";
const apexExperiment = createApexExperiment({
kind: "user",
name: "2026-03-file-upload-powerup-holdout",
defaultConfig: {
enabled: false
},
variations: {
1: {
enabled: true
}
}
});
export { apexExperiment as FileUploadPowerupHoldoutExperiment };
@@ -0,0 +1,25 @@
// Metro module 15130 (f15131).
import { createApexExperiment } from "../../../experiments/apex/index";
const apexExperiment = createApexExperiment({
name: "2026-04-mobile-boost-progress-bar",
kind: "user",
defaultConfig: {
enabled: false
},
variations: {
1: {
enabled: true
}
}
});
export { apexExperiment as MobileBoostProgressBarExperiment };
export function useMobileBoostProgressBarEnabled(a0) {
return apexExperiment.useConfig({
location: a0
}).enabled;
}
export function getMobileBoostProgressBarEnabled(a0) {
return apexExperiment.getConfig({
location: a0
}).enabled;
}
@@ -0,0 +1,54 @@
// Metro module 12584 (f12585).
import { createApexExperiment } from "../../../experiments/apex/index";
const apexExperiment = createApexExperiment({
name: "2026-07-mobile-boosting-optimizations",
kind: "user",
defaultConfig: {
enabled: false,
removeYearlyUpsell: false,
recommendedBoostCount: null
},
variations: {
0: {
enabled: false,
removeYearlyUpsell: false,
recommendedBoostCount: null
},
1: {
enabled: true,
removeYearlyUpsell: false,
recommendedBoostCount: 2
},
2: {
enabled: true,
removeYearlyUpsell: true,
recommendedBoostCount: 2
},
3: {
enabled: true,
removeYearlyUpsell: false,
recommendedBoostCount: 3
},
4: {
enabled: true,
removeYearlyUpsell: true,
recommendedBoostCount: 3
}
}
});
export default apexExperiment;
export function getShouldRemoveYearlyUpsell(a0) {
return apexExperiment.getConfig({
location: a0
}).removeYearlyUpsell;
}
export function getMobileBoostingEnabled(a0) {
return apexExperiment.getConfig({
location: a0
}).enabled;
}
export function getRecommendedBoostCount(a0) {
return apexExperiment.getConfig({
location: a0
}).recommendedBoostCount;
}
@@ -0,0 +1,21 @@
// Metro module 12651 (f12652).
import ApexExperiment from "../../../experiments/apex/ApexExperiment";
let c8732_0 = ApexExperiment({
name: "2026-04-server-boost-copy-1440p",
kind: "user",
defaultConfig: {
streamQualityMarketingResolution: "1080p"
},
variations: {
1: {
streamQualityMarketingResolution: "1440p"
}
}
});
export default c8732_0;
export const CONTROL_RESOLUTION = "1080p";
export function getServerBoostStreamQualityMarketingResolution(a0) {
return c8732_0.getConfig({
location: a0
}).streamQualityMarketingResolution;
}
@@ -0,0 +1,15 @@
// Metro module 11682 (f11683).
import { createApexExperiment } from "../../../experiments/apex/index";
const apexExperiment = createApexExperiment({
name: "2026-06-server-setup-boost-cta",
kind: "user",
defaultConfig: {
enabled: false
},
variations: {
1: {
enabled: true
}
}
});
export { apexExperiment as ServerSetupBoostCtaExperiment };
@@ -0,0 +1,34 @@
// Metro module 4120 (f4121).
import { createApexExperiment } from "../../../experiments/apex/index";
const apexExperiment = createApexExperiment({
kind: "guild",
name: "2026-06-server-theme-apex-shadow",
defaultConfig: {
enabled: false,
inExperiment: false,
gatesApex: false
},
variations: {
0: {
enabled: false,
inExperiment: true,
gatesApex: false
},
1: {
enabled: true,
inExperiment: true,
gatesApex: false
},
2: {
enabled: false,
inExperiment: true,
gatesApex: true
},
3: {
enabled: true,
inExperiment: true,
gatesApex: true
}
}
});
export { apexExperiment as ServerThemeApexShadowExperiment };
@@ -0,0 +1,73 @@
// Metro module 4119 (f4120).
import { EMPTY_STRING_SNOWFLAKE_ID } from "../../../../Constants";
import { createExperiment } from "../../../experiments/index";
import { ServerThemeApexShadowExperiment } from "./ServerThemeApexShadowExperiment";
const experiment = createExperiment({
kind: "guild",
id: "2026-04_server_theme",
label: "Server Theme",
defaultConfig: {
enabled: false,
inExperiment: false,
gatesApex: false
},
treatments: [{
id: 0,
label: "Control",
config: {
enabled: false,
inExperiment: true,
gatesApex: false
}
}, {
id: 1,
label: "Enable Server Theme",
config: {
enabled: true,
inExperiment: true,
gatesApex: false
}
}]
});
export { experiment as ServerThemeExperiment };
export function getServerThemeEnabled(a0, a1) {
const currentConfig = experiment.getCurrentConfig({
guildId: a0,
location: a1
}, {
autoTrackExposure: false
});
let enabled = currentConfig.enabled;
const inExperiment = currentConfig.inExperiment;
const r12 = a0 != null ? ServerThemeApexShadowExperiment.getConfig({
guildId: a0,
location: a1
}) : {
enabled: false,
gatesApex: false
};
const { enabled: enabled2, gatesApex } = r12;
if (!inExperiment) {
enabled = !!gatesApex && enabled2;
}
return enabled;
}
export function useServerThemeEnabled(a0, a1) {
const experiment2 = experiment.useExperiment({
guildId: a0,
location: a1
}, {
autoTrackExposure: false
});
let enabled = experiment2.enabled;
const inExperiment = experiment2.inExperiment;
const config = ServerThemeApexShadowExperiment.useConfig({
guildId: a0 == null ? EMPTY_STRING_SNOWFLAKE_ID : a0,
location: a1
});
const { enabled: enabled2, gatesApex } = config;
if (!inExperiment) {
enabled = a0 != null && (!!gatesApex && enabled2);
}
return enabled;
}
@@ -0,0 +1,25 @@
// Metro module 4118 (f4119).
import { createApexExperiment } from "../../../experiments/apex/index";
const apexExperiment = createApexExperiment({
kind: "user",
name: "2026-05-server-theme-user",
defaultConfig: {
enabled: false
},
variations: {
1: {
enabled: true
}
}
});
export { apexExperiment as ServerThemeUserExperiment };
export function getServerThemeUserEnabled(a0) {
return apexExperiment.getConfig({
location: a0
}).enabled;
}
export function useServerThemeUserEnabled(a0) {
return apexExperiment.useConfig({
location: a0
}).enabled;
}
@@ -0,0 +1,34 @@
// Metro module 11593 (f11594).
import { useSelectedDismissibleContent, useSelectedVersionedDismissibleContent, useSelectedTimeRecurringDismissibleContent, useSelectedTimeRecurringGuildDismissibleContent } from "../../../dismissible_content/hooks/useSelectedDismissibleContent";
import { DismissibleContent } from "../../../../_bundle/Module1358";
import { GUILD_POWERUP_NOTIFICATION_COOLDOWN, BOOST_TO_UNLOCK_COACHMARK_COOLDOWN, BOOST_TO_UNLOCK_COACHMARK_MAX_TIMES_TO_RECUR } from "../constants/GuildPowerupsNotification";
import BoostToUnlockMobileCoachmarkExperiment from "../../../guild_boosting/experiments/BoostToUnlockMobileCoachmarkExperiment";
export function usePerksCoachmarkDCF(a0) {
return useSelectedDismissibleContent(a0 ? [DismissibleContent.GUILD_POWERUP_PERKS_COACHMARK] : []);
}
export function useNewPerkAvailableCoachmarkDCF(a0, a1) {
return useSelectedVersionedDismissibleContent(a0 ? a1 > 0 ? DismissibleContent.GUILD_POWERUP_NEW_PERK_AVAILABLE_COACHMARK : null : null, a1);
}
export function useGuildPowerupNotificationDCF(a0) {
return useSelectedTimeRecurringDismissibleContent(a0 ? DismissibleContent.GUILD_POWERUP_NOTIFICATION : null, {
cooldownDurationMs: GUILD_POWERUP_NOTIFICATION_COOLDOWN
});
}
export function useNewGamesCoachmarkDC() {
return [null, () => {}];
}
export function useGameServerPricingCoachmarkDCF() {
return [null, () => {}];
}
export function useBoostToUnlockCoachmarkDCF(a0, a1, a2) {
const showCoachmark = BoostToUnlockMobileCoachmarkExperiment.useConfig({
location: "useBoostToUnlockCoachmarkDCF"
}).showCoachmark;
return useSelectedTimeRecurringGuildDismissibleContent(a0 ? showCoachmark ? DismissibleContent.BOOST_TO_UNLOCK_COACHMARK : null : null, a1, {
cooldownDurationMs: BOOST_TO_UNLOCK_COACHMARK_COOLDOWN,
numTimesToRecur: BOOST_TO_UNLOCK_COACHMARK_MAX_TIMES_TO_RECUR
}, a2);
}
export function useExpiringPowerupCoachmarkDCF() {
return [null, () => {}];
}
@@ -0,0 +1,39 @@
// Metro module 11627 (f11628).
import { useMemo } from "react";
import GuildStore from "../../../../stores/GuildStore";
import GuildPowerupsStore from "../GuildPowerupsStore";
import { GuildPowerupType, LEVEL_SKU_ID_TO_BOOSTING_TIER, POWERUPS_INCLUDED_IN_LEVEL } from "../constants/GuildPowerupsConstants";
import { useStateFromStores } from "../../../../_bundle/Module589";
import useGuildPowerupsBoostCount from "./useGuildPowerupsBoostCount";
import { isNotNullish } from "../../../../utils/GlobalUtils";
export default function useAvailableBoostCountForPowerup(a0, a1) {
let stateFromStores;
const stateFromStores2 = useStateFromStores([GuildStore], () => GuildStore.getGuild(a0));
stateFromStores = useStateFromStores([GuildPowerupsStore], () => GuildPowerupsStore.getStateForGuild(a0));
const spent = useGuildPowerupsBoostCount(a0).spent;
const memo = useMemo(() => {
if (a1 != null && a1.type === GuildPowerupType.LEVEL && stateFromStores != null) {
const r12 = LEVEL_SKU_ID_TO_BOOSTING_TIER[a1.skuId];
let c27122_0 = r12;
return r12 == null ? [] : Object.entries(POWERUPS_INCLUDED_IN_LEVEL).filter((item) => {
const [r13, r14] = item;
return r14 === c27122_0 && stateFromStores.unlockedPowerups[r13] != null;
}).map((item) => {
const [r8] = item;
return stateFromStores.allPowerups[r8];
}).filter(isNotNullish);
}
return [];
}, [a1, stateFromStores]);
let r34 = memo == null ? void 0 : memo.reduce((acc, item) => acc + item.cost, 0);
const r38 = Math;
let r41 = stateFromStores2?.premiumSubscriberCount;
if (r41 == null) {
r41 = 0;
}
const r42 = r41 - spent;
if (r34 == null) {
r34 = 0;
}
return r38.max(r42 + r34, 0);
};
@@ -0,0 +1,66 @@
// Metro module 11596 (f11597).
import _slicedToArray from "../../../../_bundle/_slicedToArray";
import { useState, useMemo } from "react";
import GuildStore from "../../../../stores/GuildStore";
import GuildPowerupsStore from "../GuildPowerupsStore";
import { GUILD_POWERUP_TIER_3_OVERRIDDEN_SKUS } from "../constants/GuildPowerupsConstants";
import { GuildFeatures } from "../../../../Constants";
import { GUILD_POWERUP_LEVEL_1_SKU_ID, GUILD_POWERUP_LEVEL_2_SKU_ID, GUILD_POWERUP_LEVEL_3_SKU_ID, GUILD_POWERUP_TAG_SKU_ID, GUILD_POWERUP_ROLE_COLOR_SKU_ID, GUILD_TAGS_BADGE_PACK_FLEX_POWERUP_SKU_ID, GUILD_TAGS_BADGE_PACK_PETS_POWERUP_SKU_ID } from "../../../../_bundle/Module4080";
import { useStateFromStores } from "../../../../_bundle/Module589";
import useGuildPowerupsBoostCount from "./useGuildPowerupsBoostCount";
let c7912_9 = [{
skuId: GUILD_POWERUP_LEVEL_1_SKU_ID,
threshold: 1
}, {
skuId: GUILD_POWERUP_LEVEL_2_SKU_ID,
threshold: 2
}, {
skuId: GUILD_POWERUP_LEVEL_3_SKU_ID,
threshold: 2
}, {
skuId: GUILD_POWERUP_TAG_SKU_ID,
threshold: 1
}, {
skuId: GUILD_POWERUP_ROLE_COLOR_SKU_ID,
threshold: 1
}, {
skuId: GUILD_TAGS_BADGE_PACK_FLEX_POWERUP_SKU_ID,
threshold: 1
}, {
skuId: GUILD_TAGS_BADGE_PACK_PETS_POWERUP_SKU_ID,
threshold: 1
}];
export default function useBoostToUnlockFeaturedPowerup(a0) {
let available, stateFromStores2, state;
const stateFromStores = useStateFromStores([GuildPowerupsStore], () => GuildPowerupsStore.getStateForGuild(a0));
available = useGuildPowerupsBoostCount(a0).available;
stateFromStores2 = useStateFromStores([GuildStore], () => {
const guild = GuildStore.getGuild(a0);
return (guild == null ? void 0 : guild.features.has(GuildFeatures.PREMIUM_TIER_3_OVERRIDE)) === true;
});
state = _slicedToArray(useState(() => Math.random()), 1)[0];
return useMemo(() => {
if (stateFromStores != null) {
const { allPowerups, unlockedPowerups } = stateFromStores;
const r29 = [];
for (const item of c7912_9) {
const { skuId, threshold } = item;
const r36 = allPowerups[skuId];
if (r36 != null) {
if (stateFromStores2 && GUILD_POWERUP_TIER_3_OVERRIDDEN_SKUS.has(skuId)) {
continue;
}
if (unlockedPowerups[skuId] == null && r36.dependencies.every((dependency) => unlockedPowerups[dependency] != null)) {
const r52 = r36.cost - available;
if (r52 > 0 && r52 <= threshold) {
r29.push(r36);
}
}
}
}
if (r29.length > 0) {
return r29[Math.floor(state * r29.length)];
}
}
}, [stateFromStores, available, stateFromStores2, state]);
};
@@ -0,0 +1,36 @@
// Metro module 11624 (f11625).
import { useMemo } from "react";
import GuildPowerupsStore from "../GuildPowerupsStore";
import { PowerupActiveStatusType } from "../constants/GuildPowerupsConstants";
import { useStateFromStores } from "../../../../_bundle/Module589";
import usePowerupActiveStatus from "./usePowerupActiveStatus";
import { intl } from "../../../../intl/index.native";
import GuildPowerups_messages from "../GuildPowerups.messages";
export default function useCanGuildPowerupBeToggled(a0, a1, a2) {
let c19035_4;
const stateFromStores = useStateFromStores([GuildPowerupsStore], () => GuildPowerupsStore.getStateForGuild(a0));
const powerupActiveStatus = usePowerupActiveStatus(a0, a1);
c19035_4 = powerupActiveStatus;
return useMemo(() => {
if (stateFromStores == null) {
return {
disabled: true,
reason: void 0
};
}
if (c19035_4.type !== PowerupActiveStatusType.LEVEL_ACTIVATED && c19035_4.type !== PowerupActiveStatusType.TIER_OVERRIDE_ACTIVATED) {
const { allPowerups, unlockedPowerups } = stateFromStores;
const r21 = a2 ? Object.values(unlockedPowerups).find((item) => item.sku?.dependent_sku_id === a1.skuId)?.sku_id : a1.dependencies.find((dependency) => unlockedPowerups[dependency] == null);
return {
disabled: r21 != null,
reason: r21 != null ? allPowerups[r21] != null ? intl.formatToPlainString(a2 ? GuildPowerups_messages.vCEBiS : GuildPowerups_messages["1B8AZr"], {
perk: allPowerups[r21]?.title
}) : void 0 : void 0
};
}
return {
disabled: true,
reason: void 0
};
}, [stateFromStores, a1.skuId, a1.dependencies, a2, powerupActiveStatus.type]);
};
@@ -0,0 +1,13 @@
// Metro module 11597 (f11598).
import UserStore from "../../../../stores/UserStore";
import { FractionalPremiumStates } from "../../PremiumConstants";
import useFractionalPremiumInfo from "../../../billing/hooks/useFractionalPremiumInfo";
import { useStateFromStores } from "../../../../_bundle/Module589";
export default function useCanPurchaseBoosts() {
const fractionalState = useFractionalPremiumInfo().fractionalState;
const stateFromStores = useStateFromStores([UserStore], () => {
const currentUser = UserStore.getCurrentUser();
return (currentUser == null ? void 0 : currentUser.isPremiumGroupMember()) === true;
});
return fractionalState === FractionalPremiumStates.NONE && !stateFromStores;
};
@@ -0,0 +1,75 @@
// Metro module 11633 (f11634).
import { useMemo } from "react";
import GuildMemberCountStore from "../../../../stores/GuildMemberCountStore";
import GuildRoleStore from "../../../../stores/GuildRoleStore";
import GuildStore from "../../../../stores/GuildStore";
import { useStateFromStores } from "../../../../_bundle/Module589";
import useGuildRoleMemberCounts from "../../../guild_role_subscriptions/useGuildRoleMemberCounts";
import { GUILD_POWERUP_ROLE_COLOR_SKU_ID, VANITY_URL_POWERUP_SKU_ID, GUILD_TAGS_BADGE_PACK_PETS_POWERUP_SKU_ID, GUILD_TAGS_BADGE_PACK_FLEX_POWERUP_SKU_ID, GUILD_TAGS_BADGE_PACK_PLANT_POWERUP_SKU_ID, GUILD_TAGS_BADGE_PACK_CREEPY_CRAWLIES_POWERUP_SKU_ID, GUILD_POWERUP_LEVEL_3_SKU_ID } from "../../../../_bundle/Module4080";
import { intl } from "../../../../intl/index.native";
import GuildPowerups_messages from "../GuildPowerups.messages";
export default function useDeactivateWarningText(a0, a1) {
let c19044_3, stateFromStores2, stateFromStores3;
const stateFromStores = useStateFromStores([GuildMemberCountStore], () => GuildMemberCountStore.getMemberCount(a0));
const guildRoleMemberCounts = useGuildRoleMemberCounts(a0);
c19044_3 = guildRoleMemberCounts;
stateFromStores2 = useStateFromStores([GuildStore], () => GuildStore.getGuild(a0)?.vanityURLCode != null);
stateFromStores3 = useStateFromStores([GuildRoleStore], () => a1.skuId === GUILD_POWERUP_ROLE_COLOR_SKU_ID ? c19044_3 == null ? 0 : GuildRoleStore.getSortedRoles(a0).reduce((acc, item) => {
const secondaryColor = item.colorStrings?.secondaryColor;
let r7 = acc;
if (secondaryColor != null) {
let r11 = c19044_3[item.id];
if (r11 == null) {
r11 = 0;
}
r7 = acc + r11;
}
return r7;
}, 0) : 0, [a0, a1.skuId, guildRoleMemberCounts]);
return useMemo(() => {
let r5, text;
L18: {
r5 = a1;
const skuId = r5.skuId;
if (GUILD_POWERUP_ROLE_COLOR_SKU_ID === skuId) {
text = stateFromStores3 > 0 ? intl.formatToPlainString(GuildPowerups_messages["4jSvr1"], {
perk: r5.title,
memberCount: stateFromStores3
}) : intl.formatToPlainString(GuildPowerups_messages.cavtEo, {
perk: r5.title
});
} else if (VANITY_URL_POWERUP_SKU_ID === skuId) {
text = stateFromStores2 ? intl.string(GuildPowerups_messages.hN75yb) : intl.string(GuildPowerups_messages.Du91Rb);
} else {
if (GUILD_TAGS_BADGE_PACK_PETS_POWERUP_SKU_ID !== skuId && GUILD_TAGS_BADGE_PACK_FLEX_POWERUP_SKU_ID !== skuId && GUILD_TAGS_BADGE_PACK_PLANT_POWERUP_SKU_ID !== skuId && GUILD_TAGS_BADGE_PACK_CREEPY_CRAWLIES_POWERUP_SKU_ID !== skuId) {
const r9 = GuildPowerups_messages["4jSvr1"];
let memberCount = stateFromStores;
if (stateFromStores == null) {
memberCount = 0;
}
text = intl.formatToPlainString(r9, {
perk: r5.title,
memberCount
});
break L18;
}
text = intl.string(GuildPowerups_messages.Vf2ZcR);
}
}
const r93 = [{
text,
critical: r5.skuId === VANITY_URL_POWERUP_SKU_ID
}];
let r94 = stateFromStores2;
if (stateFromStores2) {
r94 = r5.skuId === GUILD_POWERUP_LEVEL_3_SKU_ID;
}
if (r94) {
r93.push({
text: intl.string(GuildPowerups_messages.M4XL5n),
critical: true
});
}
return r93;
}, [a1, stateFromStores3, stateFromStores, stateFromStores2]);
};
@@ -0,0 +1,78 @@
// Metro module 11598 (f11599).
import { useMemo } from "react";
import GameServerStore from "../../game_server/GameServerStore";
import GuildPowerupsStore from "../GuildPowerupsStore";
import { useStateFromStores } from "../../../../_bundle/Module589";
import { useExpiringPowerupCoachmarkEnabled } from "../experiments/ExpiringPowerupCoachmarkExperiment";
import { getDaysRemaining } from "../../../collectibles/CollectiblesUtils";
import { HermesBuiltin } from "../../../../_hermes/prelude";
export default function useFeaturedExpiringPowerup(c19020_0) {
let stateFromStores2, expiringPowerupCoachmarkEnabled;
const stateFromStores = useStateFromStores([GuildPowerupsStore], () => GuildPowerupsStore.getStateForGuild(c19020_0));
stateFromStores2 = useStateFromStores([GameServerStore], () => GameServerStore.getStateForGuild(c19020_0));
expiringPowerupCoachmarkEnabled = useExpiringPowerupCoachmarkEnabled("useFeaturedExpiringPowerup");
return useMemo(() => {
L21: {
if (expiringPowerupCoachmarkEnabled) {
const r11 = Object;
let r9 = stateFromStores?.unlockedPowerups;
if (r9 == null) {
r9 = {};
}
const r16 = r11.values(r9);
const r20 = [];
const r1 = HermesBuiltin.arraySpread(r20, r16, 0);
const r21 = Object;
let r24 = stateFromStores2?.entitlements;
if (r24 == null) {
r24 = {};
}
HermesBuiltin.arraySpread(r20, r21.values(r24), r1);
const r31 = r20.filter((item) => {
let r1 = item.ends_at != null;
if (r1) {
let r7 = item.metadata?.num_expiring_boosts;
if (r7 == null) {
r7 = 0;
}
r1 = r7 > 0;
}
return r1;
});
if (r31.length !== 0) {
const r35 = r31.reduce((acc, item) => item.ends_at > acc.ends_at ? item : acc);
let name = stateFromStores == null ? void 0 : stateFromStores.allPowerups[r35.sku_id]?.title;
if (name == null) {
name = null;
}
const sku = r35.sku;
const r43 = sku == null;
let r44 = void 0;
if (!r43) {
const tenant_metadata = sku.tenant_metadata;
r44 = tenant_metadata == null ? void 0 : tenant_metadata.guild_monetization?.game_server;
}
const isGameServer = r44 != null;
if (name === null && !isGameServer) {
break L21;
}
const r50 = {
name,
daysUntilExpiry: Math.max(0, getDaysRemaining(new Date(r35.ends_at))),
numExpiringBoosts: null,
isGameServer: null,
skuId: null
};
let numExpiringBoosts = r35.metadata?.num_expiring_boosts;
if (numExpiringBoosts == null) {
numExpiringBoosts = 0;
}
r50.numExpiringBoosts = numExpiringBoosts;
r50.isGameServer = isGameServer;
r50.skuId = r35.sku_id;
return r50;
}
}
}
}, [stateFromStores, stateFromStores2, expiringPowerupCoachmarkEnabled]);
};
@@ -0,0 +1,16 @@
// Metro module 11649 (f11650).
import { useMemo } from "react";
import GuildPowerupsStore from "../GuildPowerupsStore";
import { useStateFromStores } from "../../../../_bundle/Module589";
import { getExpiringGuildEntitlements } from "../utils/getExpiringGuildEntitlements";
import { isNotNullish } from "../../../../utils/GlobalUtils";
export default function useGetExpiringGuildPowerups(c19051_0) {
const stateFromStores = useStateFromStores([GuildPowerupsStore], () => GuildPowerupsStore.getStateForGuild(c19051_0));
return useMemo(() => {
if (stateFromStores == null) {
return [];
}
const allPowerups = stateFromStores.allPowerups;
return getExpiringGuildEntitlements(Object.values(stateFromStores.unlockedPowerups)).map((item) => allPowerups[item.sku_id]).filter(isNotNullish);
}, [stateFromStores]);
};
@@ -0,0 +1,41 @@
// Metro module 11612 (f11613).
import AccessibilityStore from "../../../a11y/AccessibilityStore";
import { useStateFromStores } from "../../../../_bundle/Module589";
export default function useGetGuildPowerupBannerImage(a0, a1, a2) {
let animatedImageUrl;
const stateFromStores = useStateFromStores([AccessibilityStore], () => AccessibilityStore.useReducedMotion);
const r1 = a0 != null;
let r14 = void 0;
if (r1) {
L8: {
if (!stateFromStores && (a1 !== false && !a2)) {
animatedImageUrl = a0.animatedImageUrl;
if (animatedImageUrl != null) {
break L8;
}
animatedImageUrl = a0.staticImageUrl;
} else {
animatedImageUrl = a0.staticImageUrl;
}
}
r14 = animatedImageUrl;
}
return r14;
};
export function getGuildPowerupBannerImage(a0, a1, a2, a3) {
let animatedImageUrl;
if (a0 != null) {
L9: {
if (!a1 && (a2 !== false && !a3)) {
animatedImageUrl = a0.animatedImageUrl;
if (animatedImageUrl != null) {
break L9;
}
animatedImageUrl = a0.staticImageUrl;
} else {
animatedImageUrl = a0.staticImageUrl;
}
}
return animatedImageUrl;
}
}
@@ -0,0 +1,26 @@
// Metro module 11623 (f11624).
import GuildStore from "../../../../stores/GuildStore";
import { GUILD_POWERUP_CONFIGURABLE_SKUS_MOBILE, PowerupActiveStatusType, GUILD_POWERUP_CONFIGURABLE_SKUS_DESKTOP } from "../constants/GuildPowerupsConstants";
import { GuildFeatures } from "../../../../Constants";
import usePowerupActiveStatus from "./usePowerupActiveStatus";
import { useStateFromStores } from "../../../../_bundle/Module589";
import { GUILD_POWERUP_GUILD_THEME_SKU_ID } from "../../../../_bundle/Module4080";
import useGuildPowerupRollbackEnabled from "./useGuildPowerupRollbackEnabled";
GUILD_POWERUP_CONFIGURABLE_SKUS_DESKTOP;
export default function useGuildPowerupCardFooterConfig(a0, a1) {
const powerupActiveStatus = usePowerupActiveStatus(a0, a1);
const stateFromStores = useStateFromStores([GuildStore], () => {
const guild = GuildStore.getGuild(a0);
return (guild == null ? void 0 : guild.features.has(GuildFeatures.GUILD_THEME)) === true;
}, [a0]);
const skuId = a1.skuId;
const isPowerupActive = powerupActiveStatus.type !== PowerupActiveStatusType.INACTIVE || skuId === GUILD_POWERUP_GUILD_THEME_SKU_ID && stateFromStores;
const type = powerupActiveStatus.type;
const TIER_OVERRIDE_ACTIVATED = PowerupActiveStatusType.TIER_OVERRIDE_ACTIVATED;
const guildPowerupRollbackEnabled = useGuildPowerupRollbackEnabled(a0, a1, "GuildPowerupCardFooterAdmin");
return {
showToggleButton: (isPowerupActive ? isPowerupActive : !guildPowerupRollbackEnabled) && !(type === TIER_OVERRIDE_ACTIVATED),
showConfigureButton: isPowerupActive && GUILD_POWERUP_CONFIGURABLE_SKUS_MOBILE.has(a1.skuId),
isPowerupActive
};
};
@@ -0,0 +1,35 @@
// Metro module 11648 (f11649).
import useGetExpiringGuildPowerups from "./useGetExpiringGuildPowerups";
import useGameServerGetExpiringEntitlements from "../../game_server/hooks/useGameServerGetExpiringEntitlements";
import { intl } from "../../../../intl/index.native";
import GameServer_messages from "../../game_server/GameServer.messages";
import { VANITY_URL_POWERUP_SKU_ID } from "../../../../_bundle/Module4080";
import GuildPowerups_messages from "../GuildPowerups.messages";
export default function useGuildPowerupExpiringNotificationsConfig(a0) {
const getExpiringGuildPowerups = useGetExpiringGuildPowerups(a0);
const gameServerGetExpiringEntitlements = useGameServerGetExpiringEntitlements(a0);
const shouldShow = getExpiringGuildPowerups.length > 0 || gameServerGetExpiringEntitlements.length > 0;
if (shouldShow) {
const r13 = gameServerGetExpiringEntitlements.length > 0 ? intl.string(GameServer_messages["B3OfL/"]) : void 0;
const expiringPowerupNames = [...getExpiringGuildPowerups.map((getExpiringGuildPowerup) => getExpiringGuildPowerup.title), ...r13 != null ? [r13] : []];
const warnings = [];
if (getExpiringGuildPowerups.some((getExpiringGuildPowerup) => getExpiringGuildPowerup.skuId === VANITY_URL_POWERUP_SKU_ID)) {
warnings.push(intl.string(GuildPowerups_messages.Sfr0Jw));
}
if (gameServerGetExpiringEntitlements.length > 0) {
warnings.push(intl.string(GameServer_messages.wiungr));
}
return {
shouldShow,
expiringPowerups: getExpiringGuildPowerups,
expiringPowerupNames,
warnings
};
}
return {
shouldShow: false,
expiringPowerups: [],
expiringPowerupNames: [],
warnings: []
};
};
@@ -0,0 +1,52 @@
// Metro module 11618 (f11619).
import { useMemo } from "react";
import { GUILD_FEATURE_TO_PERK } from "../constants/GuildPowerupsConstants";
import { PerkIcons } from "../../../../utils/GuildBoostingUtils";
import { intl } from "../../../../intl/index.native";
import GuildPowerups_messages from "../GuildPowerups.messages";
import { isNotNullish } from "../../../../utils/GlobalUtils";
export default function useGuildPowerupLevelPerks(a0) {
let r3 = arguments[1];
if (r3 === void 0) {
r3 = {
includeEmojis: true,
includeStickers: true,
includeSoundboards: true
};
}
const { includeEmojis, includeStickers, includeSoundboards } = r3;
return useMemo(() => {
const r3 = [];
let c27119_0 = GUILD_FEATURE_TO_PERK();
if (includeEmojis) {
const r25 = GuildPowerups_messages["NXvV0+"];
r3.push({
perkIcon: PerkIcons.EMOJI,
description: intl.formatToPlainString(r25, {
totalEmojis: a0.features.total_emoji_slots,
additionalEmojis: a0.features.additional_emoji_slots
})
});
}
if (includeStickers) {
r3.push({
perkIcon: PerkIcons.STICKER,
description: intl.formatToPlainString(GuildPowerups_messages.ZEvvPz, {
totalStickers: a0.features.total_sticker_slots,
additionalStickers: a0.features.additional_sticker_slots
})
});
}
if (includeSoundboards) {
const r73 = GuildPowerups_messages["s9u/E7"];
r3.push({
perkIcon: PerkIcons.SOUNDBOARD,
description: intl.formatToPlainString(r73, {
totalSoundboards: a0.features.total_sound_slots,
additionalSoundboards: a0.features.additional_sound_slots
})
});
}
return r3.concat(a0.features.features.map((feature) => c27119_0[feature]).filter(isNotNullish));
}, [a0, includeEmojis, includeStickers, includeSoundboards]);
};
@@ -0,0 +1,94 @@
// Metro module 11595 (f11596).
import { useMemo } from "react";
import GuildStore from "../../../../stores/GuildStore";
import PermissionStore from "../../../../stores/PermissionStore";
import { GuildPowerupNewPerkMarketingVersion, NEW_PERK_MARKETING_VERSION_TO_POWERUP_SKU_ID_SET } from "../constants/GuildPowerupsConstants";
import { GuildFeatures, Permissions } from "../../../../Constants";
import { useGameServerEnabled } from "../../game_server/GameServerExperiment";
import { useStateFromStores } from "../../../../_bundle/Module589";
import { useServerThemeEnabled } from "../experiments/ServerThemeExperiment";
import { useServerThemeUserEnabled } from "../experiments/ServerThemeUserExperiment";
import { GUILD_POWERUP_TAG_SKU_ID, GUILD_POWERUP_GUILD_THEME_SKU_ID, GUILD_POWERUP_MAX_FILE_SIZE_250_MB_SKU_ID } from "../../../../_bundle/Module4080";
import { canUseMobileServerTagSettings } from "../../../guild_settings/GuildSettingsServerTagUtils";
export default function useGuildPowerupNewPerkMarketingVersion(a0, a1) {
let serverThemeUserEnabled, stateFromStores2;
const gameServerEnabled = useGameServerEnabled(a0, "useGuildPowerupNewPerkMarketingVersion");
const stateFromStores = useStateFromStores([GuildStore], () => {
const guild = GuildStore.getGuild(a0);
return guild == null ? void 0 : guild.features.has(GuildFeatures.GAME_SERVERS);
});
let r22 = useServerThemeEnabled(a0, "useGuildPowerupNewPerkMarketingVersion");
const serverThemeUserEnabled2 = useServerThemeUserEnabled("useGuildPowerupNewPerkMarketingVersion");
if (r22) {
r22 = serverThemeUserEnabled2;
}
serverThemeUserEnabled = r22;
stateFromStores2 = useStateFromStores([PermissionStore, GuildStore], () => PermissionStore.can(Permissions.MANAGE_GUILD, GuildStore.getGuild(a0)));
return useMemo(() => {
const r2 = a1 == null;
let r4 = void 0;
if (!r2) {
const allPowerups = a1.allPowerups;
r4 = allPowerups == null ? void 0 : allPowerups[GUILD_POWERUP_TAG_SKU_ID];
}
const r3 = r4 != null;
const r18 = a1 == null;
let r19 = void 0;
if (!r18) {
const unlockedPowerups = a1.unlockedPowerups;
r19 = unlockedPowerups == null ? void 0 : unlockedPowerups[GUILD_POWERUP_TAG_SKU_ID];
}
const r28 = r19 != null;
if (r3 && !r28 && stateFromStores2 && canUseMobileServerTagSettings(a0)) {
return GuildPowerupNewPerkMarketingVersion.GUILD_TAG;
}
const r40 = a1 == null;
let r41 = void 0;
if (!r40) {
const allPowerups2 = a1.allPowerups;
r41 = allPowerups2 == null ? void 0 : allPowerups2[GUILD_POWERUP_GUILD_THEME_SKU_ID];
}
const r50 = r41 != null;
const r51 = a1 == null;
let r52 = void 0;
if (!r51) {
const unlockedPowerups2 = a1.unlockedPowerups;
r52 = unlockedPowerups2 == null ? void 0 : unlockedPowerups2[GUILD_POWERUP_GUILD_THEME_SKU_ID];
}
const r61 = r52 != null;
if (serverThemeUserEnabled && r50 && !r61) {
return GuildPowerupNewPerkMarketingVersion.GUILD_THEME;
}
const r66 = a1 == null;
let r67 = void 0;
if (!r66) {
const allPowerups3 = a1.allPowerups;
r67 = allPowerups3 == null ? void 0 : allPowerups3[GUILD_POWERUP_MAX_FILE_SIZE_250_MB_SKU_ID];
}
const r76 = r67 != null;
const r77 = a1 == null;
let r78 = void 0;
if (!r77) {
const unlockedPowerups3 = a1.unlockedPowerups;
r78 = unlockedPowerups3 == null ? void 0 : unlockedPowerups3[GUILD_POWERUP_MAX_FILE_SIZE_250_MB_SKU_ID];
}
const r87 = r78 != null;
return r76 && !r87 ? GuildPowerupNewPerkMarketingVersion.FILE_UPLOAD_250_MB : Array.from(NEW_PERK_MARKETING_VERSION_TO_POWERUP_SKU_ID_SET[GuildPowerupNewPerkMarketingVersion.GUILD_TAG_BADGE_PACKS_WAVE_TWO]).some((item) => {
const r2 = a1 == null;
let r6 = void 0;
if (!r2) {
const unlockedPowerups = a1.unlockedPowerups;
r6 = unlockedPowerups == null ? void 0 : unlockedPowerups[item];
}
return r6 != null;
}) ? gameServerEnabled && !stateFromStores ? GuildPowerupNewPerkMarketingVersion.GAME_SERVER_HOSTING : Array.from(NEW_PERK_MARKETING_VERSION_TO_POWERUP_SKU_ID_SET[GuildPowerupNewPerkMarketingVersion.GUILD_TAG_BADGE_PACKS_WAVE_ONE]).some((item) => {
const r2 = a1 == null;
let r6 = void 0;
if (!r2) {
const unlockedPowerups = a1.unlockedPowerups;
r6 = unlockedPowerups == null ? void 0 : unlockedPowerups[item];
}
return r6 != null;
}) ? 0 : GuildPowerupNewPerkMarketingVersion.GUILD_TAG_BADGE_PACKS_WAVE_ONE : GuildPowerupNewPerkMarketingVersion.GUILD_TAG_BADGE_PACKS_WAVE_TWO;
}, [a1, gameServerEnabled, stateFromStores, serverThemeUserEnabled, a0, stateFromStores2]);
};
@@ -0,0 +1,12 @@
// Metro module 11632 (f11633).
import { useCallback } from "react";
import useGuildPowerupOnToggle from "./useGuildPowerupOnToggle";
export default function useGuildPowerupOnDeactivate(a0, a1) {
const guildPowerupOnToggle = useGuildPowerupOnToggle(a0, a1);
const { isLoading, error, onToggle } = guildPowerupOnToggle;
return {
isLoading,
error,
onDeactivate: useCallback(() => onToggle(false), [onToggle])
};
};
@@ -0,0 +1,30 @@
// Metro module 11626 (f11627).
import { useState, useCallback } from "react";
import { enablePowerupForGuild, disablePowerupForGuild } from "../GuildPowerupsActionCreators";
export default function useGuildPowerupOnToggle(a0, a1) {
let c19037_0 = a0;
const [isLoading, setState] = useState(false);
const [error, setState2] = useState(void 0);
return {
isLoading,
error,
onToggle: useCallback((a0) => {
if (a1 == null) {
return Promise.resolve();
}
const r11 = a0 ? enablePowerupForGuild : disablePowerupForGuild;
setState(true);
setState2(void 0);
return r11(c19037_0, a1.skuId).catch((error) => {
let r7 = error.body?.message;
if (r7 == null) {
r7 = void 0;
}
setState2(r7);
throw error;
}).finally(() => {
setState(false);
});
}, [a0, a1])
};
};
@@ -0,0 +1,10 @@
// Metro module 11588 (f11589).
import { useFileUpload250MbPowerupRollbackEnabled, getFileUpload250MbPowerupRollbackEnabled } from "../experiments/FileUpload250MbPowerupExperiment";
import { GUILD_POWERUP_MAX_FILE_SIZE_250_MB_SKU_ID } from "../../../../_bundle/Module4080";
export default function useGuildPowerupRollbackEnabled(a0, a1, a2) {
const fileUpload250MbPowerupRollbackEnabled = useFileUpload250MbPowerupRollbackEnabled(a0, a2);
return a1.skuId === GUILD_POWERUP_MAX_FILE_SIZE_250_MB_SKU_ID && fileUpload250MbPowerupRollbackEnabled;
};
export function isGuildPowerupRollbackEnabled(a0, a1, a2) {
return a1.skuId === GUILD_POWERUP_MAX_FILE_SIZE_250_MB_SKU_ID && getFileUpload250MbPowerupRollbackEnabled(a0, a2);
}
@@ -0,0 +1,61 @@
// Metro module 11604 (f11605).
import { useMemo } from "react";
import GuildStore from "../../../../stores/GuildStore";
import GuildPowerupsStore from "../GuildPowerupsStore";
import { useStateFromStores } from "../../../../_bundle/Module589";
import useHasAllocateBoostPermission from "./useHasAllocateBoostPermission";
import { GUILD_POWERUP_MAX_FILE_SIZE_250_MB_SKU_ID } from "../../../../_bundle/Module4080";
import { useShouldShowFileUploadRollback } from "../utils/fileUpload";
import getGuildPowerupFormattedDateString from "../utils/getGuildPowerupFormattedDateString";
import { DismissibleContent } from "../../../../_bundle/Module1358";
import { intl } from "../../../../intl/index.native";
import GuildPowerups_messages from "../GuildPowerups.messages";
export default function useGuildPowerupRollbackModalConfig(a0, a1) {
let c19026_1, storeRemovalDate, c19026_3;
const stateFromStores = useStateFromStores([GuildStore], () => GuildStore.getGuild(a0));
let shouldShow = useHasAllocateBoostPermission(a0);
if (shouldShow == null) {
shouldShow = false;
}
const stateFromStores2 = useStateFromStores([GuildPowerupsStore], () => GuildPowerupsStore.getStateForGuild(a0));
const r2 = stateFromStores2 == null;
let r26 = void 0;
if (!r2) {
const allPowerups = stateFromStores2.allPowerups;
r26 = allPowerups == null ? void 0 : allPowerups[GUILD_POWERUP_MAX_FILE_SIZE_250_MB_SKU_ID];
}
c19026_1 = r26;
storeRemovalDate = r26?.storeRemovalDate;
const shouldShowFileUploadRollback = useShouldShowFileUploadRollback(a0, a1);
if (shouldShow) {
shouldShow = shouldShowFileUploadRollback;
}
if (shouldShow) {
shouldShow = stateFromStores != null;
}
c19026_3 = shouldShow;
return {
shouldShow,
modalConfig: useMemo(() => {
if (c19026_3) {
if (c19026_1 != null && storeRemovalDate != null) {
const guildPowerupFormattedDateString = getGuildPowerupFormattedDateString(storeRemovalDate);
return {
dismissibleContent: DismissibleContent.FILE_UPLOAD_POWERUP_ROLLBACK_MODAL,
header: `${c19026_1.title} ${intl.formatToPlainString(GuildPowerups_messages["6e2ry1"], {
dateString: guildPowerupFormattedDateString
})}`,
bodies: [intl.formatToPlainString(GuildPowerups_messages.jd8fki, {
startDate: guildPowerupFormattedDateString,
endDate: guildPowerupFormattedDateString,
perkName: c19026_1.title,
boostCount: c19026_1.cost
})],
hasCancelButton: false
};
}
}
return null;
}, [shouldShow, r26, storeRemovalDate])
};
};
@@ -0,0 +1,32 @@
// Metro module 11589 (f11590).
import GuildPowerupsStore from "../GuildPowerupsStore";
import { useStateFromStores } from "../../../../_bundle/Module589";
import { GUILD_POWERUP_MAX_FILE_SIZE_250_MB_SKU_ID } from "../../../../_bundle/Module4080";
import { useShouldShowFileUploadRollback } from "../utils/fileUpload";
import { DismissibleContent } from "../../../../_bundle/Module1358";
import { intl } from "../../../../intl/index.native";
import GuildPowerups_messages from "../GuildPowerups.messages";
import getGuildPowerupFormattedDateString from "../utils/getGuildPowerupFormattedDateString";
export default function useGuildPowerupRollbackNotificationConfig(a0, a1) {
const stateFromStores = useStateFromStores([GuildPowerupsStore], () => GuildPowerupsStore.getStateForGuild(a0));
const r18 = stateFromStores == null ? void 0 : stateFromStores.allPowerups[GUILD_POWERUP_MAX_FILE_SIZE_250_MB_SKU_ID];
const storeRemovalDate = r18?.storeRemovalDate;
const shouldShowFileUploadRollback = useShouldShowFileUploadRollback(a0, a1);
let r30 = null;
if (shouldShowFileUploadRollback) {
const r31 = storeRemovalDate != null;
r30 = r31 ? r18?.title != null ? r18?.cost != null ? {
dismissibleContent: DismissibleContent.FILE_UPLOAD_POWERUP_ROLLBACK_NOTIFICATION,
title: intl.formatToPlainString(GuildPowerups_messages["6e2ry1"], {
dateString: getGuildPowerupFormattedDateString(storeRemovalDate)
}),
description: intl.formatToPlainString(GuildPowerups_messages.jd8fki, {
startDate: getGuildPowerupFormattedDateString(storeRemovalDate),
endDate: getGuildPowerupFormattedDateString(storeRemovalDate),
perkName: r18?.title,
boostCount: r18?.cost
})
} : null : null : null;
}
return r30;
};
@@ -0,0 +1,18 @@
// Metro module 11647 (f11648).
import GuildStore from "../../../../stores/GuildStore";
import { GuildFeatures } from "../../../../Constants";
import { useStateFromStores } from "../../../../_bundle/Module589";
import { intl } from "../../../../intl/index.native";
import GuildPowerups_messages from "../GuildPowerups.messages";
export default function useGuildPowerupTier3OverrideConfig(c19050_0) {
return useStateFromStores([GuildStore], () => {
const guild = GuildStore.getGuild(c19050_0);
return (guild == null ? void 0 : guild.features.has(GuildFeatures.PREMIUM_TIER_3_OVERRIDE)) === true;
}) ? {
shouldShow: true,
text: intl.string(GuildPowerups_messages.l9n4QZ)
} : {
shouldShow: false,
text: ""
};
};
@@ -0,0 +1,74 @@
// Metro module 4096 (f4097).
import { useMemo } from "react";
import GuildStore from "../../../../stores/GuildStore";
import GameServerStore from "../../game_server/GameServerStore";
import GuildPowerupsStore from "../GuildPowerupsStore";
import { useGameServerEnabled, getGameServerEnabled } from "../../game_server/GameServerExperiment";
import { useStateFromStores } from "../../../../_bundle/Module589";
export default function useGuildAppliedBoostCount(a0) {
let total, gameServerEnabled, stateFromStores, stateFromStores2;
let r15 = useStateFromStores([GuildStore], () => GuildStore.getGuild(a0)?.premiumSubscriberCount);
if (r15 == null) {
r15 = 0;
}
total = r15;
gameServerEnabled = useGameServerEnabled(a0, "GuildPowerupsBoostCount");
stateFromStores = useStateFromStores([GuildPowerupsStore], () => GuildPowerupsStore.getStateForGuild(a0)?.appliedBoosts);
stateFromStores2 = useStateFromStores([GameServerStore], () => GameServerStore.getStateForGuild(a0)?.appliedBoosts);
return useMemo(() => {
L6: {
if (stateFromStores != null) {
if (gameServerEnabled && stateFromStores2 == null) {
break L6;
}
let r10 = stateFromStores2;
if (stateFromStores2 == null) {
r10 = 0;
}
const spent = stateFromStores + r10;
return {
available: Math.max(0, total - spent),
spent,
total,
isLoading: false
};
}
}
return {
available: 0,
spent: 0,
total,
isLoading: true
};
}, [total, stateFromStores, stateFromStores2, gameServerEnabled]);
};
export function getGuildPowerupsBoostCount(a0) {
let total2 = GuildStore.getGuild(a0)?.premiumSubscriberCount;
if (total2 == null) {
total2 = 0;
}
const gameServerEnabled2 = getGameServerEnabled(a0, "GuildPowerupsBoostCount");
const appliedBoosts = GuildPowerupsStore.getStateForGuild(a0)?.appliedBoosts;
let r26 = GameServerStore.getStateForGuild(a0)?.appliedBoosts;
L14: {
if (appliedBoosts != null) {
if (gameServerEnabled2 && r26 == null) {
break L14;
}
if (r26 == null) {
r26 = 0;
}
const spent = appliedBoosts + r26;
return {
available: Math.max(0, total2 - spent),
spent,
total: total2
};
}
}
return {
available: 0,
spent: 0,
total: total2
};
}
@@ -0,0 +1,27 @@
// Metro module 4115 (f4116).
import GuildStore from "../../../../stores/GuildStore";
import { AppliedGuildBoostsRequiredForBoostedGuildTier, BoostedGuildTiers, GuildFeatures } from "../../../../Constants";
import useGuildPowerupsBoostCount, { getGuildPowerupsBoostCount } from "./useGuildPowerupsBoostCount";
import { useStateFromStores } from "../../../../_bundle/Module589";
export default function useGuildPowerupBoostLevelProgress(a0) {
const guildPowerupsBoostCount = useGuildPowerupsBoostCount(a0);
const stateFromStores = useStateFromStores([GuildStore], () => {
let r8 = GuildStore.getGuild(a0)?.premiumTier;
if (r8 == null) {
r8 = BoostedGuildTiers.NONE;
}
return r8;
});
return (useStateFromStores([GuildStore], () => {
const guild = GuildStore.getGuild(a0);
return (guild == null ? void 0 : guild.features.has(GuildFeatures.PREMIUM_TIER_3_OVERRIDE)) === true;
}) ? 0 : AppliedGuildBoostsRequiredForBoostedGuildTier[stateFromStores]) + guildPowerupsBoostCount.available;
};
export function getGuildPowerupBoostLevelProgress(a0) {
const guildPowerupsBoostCount = getGuildPowerupsBoostCount(a0);
let r14 = GuildStore.getGuild(a0)?.premiumTier;
if (r14 == null) {
r14 = BoostedGuildTiers.NONE;
}
return AppliedGuildBoostsRequiredForBoostedGuildTier[r14] + guildPowerupsBoostCount.available;
}
@@ -0,0 +1,63 @@
// Metro module 11602 (f11603).
import { useCallback, useEffect } from "react";
import GuildPowerupsStore from "../GuildPowerupsStore";
import { GuildPowerupNewPerkMarketingVersion } from "../constants/GuildPowerupsConstants";
import { ContentDismissActionType } from "../../../dismissible_content/DismissibleContentConstants";
import { DismissibleContent } from "../../../../_bundle/Module1358";
import { useStateFromStores } from "../../../../_bundle/Module589";
import useGuildPowerupNewPerkMarketingVersion from "./useGuildPowerupNewPerkMarketingVersion";
import { useSelectedVersionedDismissibleContent } from "../../../dismissible_content/hooks/useSelectedDismissibleContent";
import { markVersionedDismissibleContentAsDismissed } from "../../../dismissible_content/DismissibleContentUtils";
function $mk87713($env) {
return () => $env.$parent[5].getStateForGuild($env[0]);
}
let env7918 = {};
const GUILD_POWERUP_NEW_PERK_AVAILABLE_BADGE = DismissibleContent.GUILD_POWERUP_NEW_PERK_AVAILABLE_BADGE;
export default function useGuildPowerupsNewBadge(a0, r10 = false) {
let env19022;
const r8 = env19022 = {
$parent: env7918
};
env19022[0] = a0;
let r17 = useStateFromStores([GuildPowerupsStore], $mk87713(r8));
if (r17 == null) {
r17 = void 0;
}
const guildPowerupNewPerkMarketingVersion = useGuildPowerupNewPerkMarketingVersion(a0, r17);
const r24 = guildPowerupNewPerkMarketingVersion >= GuildPowerupNewPerkMarketingVersion.GUILD_THEME ? guildPowerupNewPerkMarketingVersion : 0;
const [r34, r35] = useSelectedVersionedDismissibleContent(r24 > 0 ? r10 ? null : GUILD_POWERUP_NEW_PERK_AVAILABLE_BADGE : null, r24);
let c19021_0 = r35;
const showNewBadgeOnRow = r34 === GUILD_POWERUP_NEW_PERK_AVAILABLE_BADGE;
let c19021_1 = showNewBadgeOnRow;
return {
showNewBadgeOnRow,
dismissNewBadgeIfShown: useCallback(function(r3 = ContentDismissActionType.TAKE_ACTION) {
if (c19021_1) {
c19021_0(r3);
}
}, [showNewBadgeOnRow, r35])
};
};
export function useAutoDismissGuildPowerupsNewBadge(a0) {
let env19024;
const guildId = a0;
const r4 = env19024 = {
$parent: env7918
};
env19024[0] = a0;
let r14 = useStateFromStores([GuildPowerupsStore], $mk87713(r4));
if (r14 == null) {
r14 = void 0;
}
const guildPowerupNewPerkMarketingVersion = useGuildPowerupNewPerkMarketingVersion(a0, r14);
const r22 = guildPowerupNewPerkMarketingVersion >= GuildPowerupNewPerkMarketingVersion.GUILD_THEME ? guildPowerupNewPerkMarketingVersion : 0;
let c19023_1 = r22;
useEffect(() => {
if (c19023_1 > 0) {
markVersionedDismissibleContentAsDismissed(GUILD_POWERUP_NEW_PERK_AVAILABLE_BADGE, c19023_1, {
dismissAction: ContentDismissActionType.AUTO_DISMISS,
guildId
});
}
}, [r22, a0]);
}
@@ -0,0 +1,444 @@
// Metro module 11583 (f11584).
import { useMemo, useEffect } from "react";
import GuildStore from "../../../../stores/GuildStore";
import GameServerStore from "../../game_server/GameServerStore";
import GuildPowerupsNotificationStore from "../GuildPowerupsNotificationStore";
import GuildPowerupsStore from "../GuildPowerupsStore";
import { GUILD_POWERUP_NEW_PERK_GROUPS, POWERUPS_INCLUDED_IN_LEVEL, BOOSTING_TIER_TO_LEVEL_UNLOCKED_DC, BOOSTING_TIER_TO_LEVEL_SKU_ID, GuildPowerupNewPerkMarketingVersion, NEW_PERK_MARKETING_VERSION_TO_POWERUP_SKU_ID_SET } from "../constants/GuildPowerupsConstants";
import { BoostedGuildTiers, GuildFeatures } from "../../../../Constants";
import { ContentDismissActionType } from "../../../dismissible_content/DismissibleContentConstants";
import { ReverseOrderedTiers } from "../../../../utils/GuildBoostingUtils";
import * as _GuildDismissibleContentUtils from "../../../guild_dismissible_content/GuildDismissibleContentUtils";
import { markContentAsDismissed } from "../../../guild_dismissible_content/GuildDismissibleContentUtils";
import { GuildPowerupNotificationPopoutType, GuildPowerupNotificationIndicatorType } from "../constants/GuildPowerupsNotification";
import { GUILD_POWERUP_GUILD_THEME_SKU_ID } from "../../../../_bundle/Module4080";
import { isGuildPowerupRollbackEnabled } from "./useGuildPowerupRollbackEnabled";
import { isNotNullish } from "../../../../utils/GlobalUtils";
import { DismissibleGuildContent, DismissibleContent } from "../../../../_bundle/Module1358";
import { getGameServerEnabled } from "../../game_server/GameServerExperiment";
import useGuildPowerupsBoostCount from "./useGuildPowerupsBoostCount";
import useGuildPowerupRollbackNotificationConfig from "./useGuildPowerupRollbackNotificationConfig";
import { useIsSingleUseGuildDismissibleContentDismissed } from "../../../dismissible_content/DismissibleContentUtils";
import { useStateFromStores } from "../../../../_bundle/defaultAreStatesEqual";
import { getExpiringGuildEntitlements } from "../utils/getExpiringGuildEntitlements";
import { usePerksCoachmarkDCF, useNewPerkAvailableCoachmarkDCF, useBoostToUnlockCoachmarkDCF, useExpiringPowerupCoachmarkDCF, useNewGamesCoachmarkDC, useGameServerPricingCoachmarkDCF, useGuildPowerupNotificationDCF } from "./GuildPowerupsNotificationsDCF.native";
import { useServerThemeEnabled } from "../experiments/ServerThemeExperiment";
import { useServerThemeUserEnabled } from "../experiments/ServerThemeUserExperiment";
import useGuildPowerupNewPerkMarketingVersion from "./useGuildPowerupNewPerkMarketingVersion";
import useBoostToUnlockFeaturedPowerup from "./useBoostToUnlockFeaturedPowerup";
import useCanPurchaseBoosts from "./useCanPurchaseBoosts";
import useFeaturedExpiringPowerup from "./useFeaturedExpiringPowerup";
import { useIsNewGamesCoachmarkEnabled } from "../../game_server/experiments/NewGamesCoachmarkExperiment";
import { useIsGameServerPricingEnabled } from "../../game_server/experiments/GameServerPricingExperiment";
import { useAutoDismissGuildPowerupsNewBadge } from "./useGuildPowerupsNewBadge";
import { guildPowerupsAckNotification } from "../GuildPowerupsActionCreators";
import { HermesBuiltin } from "../../../../_hermes/prelude";
function $mk87671($env) {
return (a0) => {
const r2 = $env.$parent;
const r5 = r2[9][a0];
const r6 = r5 != null ? $env[1].unlockedPowerups[r5] : void 0;
return r6 != null && r6.user_id !== r2[11];
};
}
function $mk87672($env) {
return (a0) => {
const r2 = $env;
const r3 = $env.$parent;
(0, r3[0])(r3[2][10]).markContentAsDismissed(r2[2], r2[0], true, a0);
};
}
function $mk87676($env) {
return (a0) => {
const r2 = $env.$parent;
const r3 = r2[0];
const r12 = r2[2];
r3(r12[10]).markContentAsDismissed(r3(r12[15]).DismissibleGuildContent.GAME_SERVER_HOSTING_GUILD_ELIGIBLE_COACHMARK, $env[0], true, a0);
};
}
function $mk87683($env) {
return () => $env.$parent[7].getNotificationStateForGuild($env[0]);
}
function $mk87684($env) {
return () => $env.$parent[8].getStateForGuild($env[0]);
}
let useGuildPowerupsNotificationIndicator, useGuildPowerupsChannelListPopout;
let env7902 = {};
export function maybeGetPerkPurchaseablePopoutDCF(a0, c19004_1, c19004_2, c19004_3) {
let c19004_0 = a0;
let r18 = GuildStore.getGuild(a0)?.premiumTier;
if (r18 == null) {
r18 = BoostedGuildTiers.NONE;
}
const NONE = r18;
const powerups = Array.from(GUILD_POWERUP_NEW_PERK_GROUPS.values()).flatMap((a0) => !(a0.length <= 0) && !a0.some((item) => {
if (c19004_1.unlockedPowerups[item] != null) {
return true;
}
const r9 = POWERUPS_INCLUDED_IN_LEVEL[item];
return r9 != null && NONE >= r9;
}) ? a0.map((item) => {
if (item === GUILD_POWERUP_GUILD_THEME_SKU_ID && !c19004_3) {
return null;
}
const r5 = c19004_1.allPowerups[item];
return r5 == null ? null : c19004_2 < r5.cost ? null : r5.dependencies.every((dependency) => c19004_1.unlockedPowerups[dependency] != null) ? isGuildPowerupRollbackEnabled(c19004_0, r5, "maybeGetPerkPurchaseablePopoutDCF") ? null : r5 : null;
}) : []).filter(isNotNullish);
if (powerups.length !== 0) {
return powerups.length === 1 && !_GuildDismissibleContentUtils.isContentDismissed(DismissibleGuildContent.GUILD_POWERUP_SINGLE_SKU_PURCHASE_COACHMARK, a0) ? {
type: GuildPowerupNotificationPopoutType.PERKS_PURCHASABLE,
powerups,
markAsDismissed: (a0) => {
markContentAsDismissed(DismissibleGuildContent.GUILD_POWERUP_SINGLE_SKU_PURCHASE_COACHMARK, c19004_0, true, a0);
}
} : powerups.length > 1 ? _GuildDismissibleContentUtils.isContentDismissed(DismissibleGuildContent.GUILD_POWERUP_CHOICE_SKU_PURCHASE_COACHMARK, a0) ? void 0 : {
type: GuildPowerupNotificationPopoutType.PERKS_PURCHASABLE,
powerups,
markAsDismissed: (a0) => {
markContentAsDismissed(DismissibleGuildContent.GUILD_POWERUP_CHOICE_SKU_PURCHASE_COACHMARK, c19004_0, true, a0);
}
} : void 0;
}
}
useGuildPowerupsNotificationIndicator = function useGuildPowerupsNotificationIndicator(a0, a1, a2) {
const available = useGuildPowerupsBoostCount(a0).available;
const guildPowerupRollbackNotificationConfig = useGuildPowerupRollbackNotificationConfig(a0, "useGuildPowerupsNotificationIndicator");
const isSingleUseGuildDismissibleContentDismissed = useIsSingleUseGuildDismissibleContentDismissed(guildPowerupRollbackNotificationConfig != null ? guildPowerupRollbackNotificationConfig.dismissibleContent : null, a0);
const r25 = guildPowerupRollbackNotificationConfig != null && !isSingleUseGuildDismissibleContentDismissed;
let c19006_4 = r25;
const stateFromStores = useStateFromStores([GameServerStore], () => GameServerStore.getStateForGuild(a0));
return useMemo(() => {
let r56;
if (a1 == null) {
return {
indicator: void 0,
showUnread: false
};
}
const r17 = Object.values(a1.unlockedPowerups);
const r23 = [];
const r0 = HermesBuiltin.arraySpread(r23, r17, 0);
const r14 = Object;
let r25 = stateFromStores?.entitlements;
if (r25 == null) {
r25 = {};
}
HermesBuiltin.arraySpread(r23, r14.values(r25), r0);
const expiringGuildEntitlements = getExpiringGuildEntitlements(r23);
let r33 = a2?.lastSeenWarningNotification;
if (r33 == null) {
r33 = Date.now();
}
const time = new Date(expiringGuildEntitlements[expiringGuildEntitlements.length - 1]?.ends_at).getTime();
let r50 = a2?.lastBoostCount;
if (r50 == null) {
r50 = 0;
}
const r52 = expiringGuildEntitlements.length > 0 && r33 < time;
L25: {
const count = available - r50;
if (!r52 && !c19006_4) {
if (available !== r50 && count > 0) {
r56 = {
indicator: {
type: GuildPowerupNotificationIndicatorType.UNREAD,
count
},
showUnread: true
};
break L25;
}
r56 = {
indicator: void 0,
showUnread: false
};
} else {
r56 = {
indicator: {
type: GuildPowerupNotificationIndicatorType.WARNING
},
showUnread: true
};
}
}
return r56;
}, [available, a2?.lastBoostCount, a2?.lastSeenWarningNotification, a1, r25, stateFromStores?.entitlements]);
};
useGuildPowerupsChannelListPopout = function useGuildPowerupsChannelListPopout(a0, a1) {
let stateFromStores3, serverThemeUserEnabled, c19007_8, c19007_10, powerup, c19007_13, featuredExpiringPowerup, c19007_16, c19007_18, c19007_20, memo, c19007_22, c19007_23;
let c19007_0 = a0;
const [r14, markAsDismissed2] = usePerksCoachmarkDCF(a1 != null);
const r4 = r14 === DismissibleContent.GUILD_POWERUP_PERKS_COACHMARK;
let c19007_3 = r4;
const available2 = useGuildPowerupsBoostCount(a0).available;
const stateFromStores2 = useStateFromStores([GuildStore], () => {
const guild = GuildStore.getGuild(c19007_0);
let r8 = guild == null ? void 0 : guild.features.has(GuildFeatures.GAME_SERVERS);
if (r8 == null) {
r8 = false;
}
return r8;
});
stateFromStores3 = useStateFromStores([GameServerStore], () => GameServerStore.getLowestGameCostForGuild(c19007_0));
let r22 = useServerThemeEnabled(a0, "useGuildPowerupsChannelListPopout");
const serverThemeUserEnabled2 = useServerThemeUserEnabled("useGuildPowerupsChannelListPopout");
if (r22) {
r22 = serverThemeUserEnabled2;
}
serverThemeUserEnabled = r22;
const guildPowerupNewPerkMarketingVersion = useGuildPowerupNewPerkMarketingVersion(a0, a1);
c19007_8 = guildPowerupNewPerkMarketingVersion;
let [r69, markAsDismissed3] = useNewPerkAvailableCoachmarkDCF(a1 != null && !r4, guildPowerupNewPerkMarketingVersion);
const r5 = r69 === DismissibleContent.GUILD_POWERUP_NEW_PERK_AVAILABLE_COACHMARK;
c19007_10 = r5;
powerup = useBoostToUnlockFeaturedPowerup(a0);
const canPurchaseBoosts = useCanPurchaseBoosts();
let [r85, markAsDismissed4] = useBoostToUnlockCoachmarkDCF(a1 != null && !r4 && !r5 && powerup != null && canPurchaseBoosts, a0);
const r6 = r85 === DismissibleContent.BOOST_TO_UNLOCK_COACHMARK;
c19007_13 = r6;
featuredExpiringPowerup = useFeaturedExpiringPowerup(a0);
let [r100, markAsDismissed5] = useExpiringPowerupCoachmarkDCF(a1 != null && !r4 && !r5 && !r6 && featuredExpiringPowerup != null, a0);
const r7 = r100 === DismissibleContent.EXPIRING_POWERUP_COACHMARK;
c19007_16 = r7;
const gameServerEnabled = getGameServerEnabled(a0, "useGuildPowerupsChannelListPopout");
const isNewGamesCoachmarkEnabled = useIsNewGamesCoachmarkEnabled("useGuildPowerupsChannelListPopout");
let [r117, markAsDismissed6] = useNewGamesCoachmarkDC(a1 != null && gameServerEnabled && isNewGamesCoachmarkEnabled);
const r8 = r117 === DismissibleContent.GAME_SERVER_NEW_GAMES_COACHMARK;
c19007_18 = r8;
const isGameServerPricingEnabled = useIsGameServerPricingEnabled(a0, "useGuildPowerupsChannelListPopout");
let [r133, markAsDismissed7] = useGameServerPricingCoachmarkDCF(a1 != null && !stateFromStores2 && gameServerEnabled && isGameServerPricingEnabled);
const r139 = r133 === DismissibleContent.GAME_SERVER_PRICING_CHANGE_COACHMARK;
c19007_20 = r139;
memo = useMemo(() => {
if (a1 != null && !c19007_3 && !c19007_10 && !c19007_18 && !c19007_20 && !c19007_13 && !c19007_16) {
let env27113;
const r6 = env7902;
const r7 = env27113 = {
$parent: r6
};
env27113[0] = c19007_0;
env27113[1] = a1;
const r28 = ReverseOrderedTiers.find($mk87671(r7));
const r2 = r28 != null;
let r29 = void 0;
if (r2) {
const r14 = BOOSTING_TIER_TO_LEVEL_UNLOCKED_DC[r28];
env27113[2] = r14;
const r31 = r14 != null;
r29 = void 0;
if (r31) {
const isContentDismissed = _GuildDismissibleContentUtils.isContentDismissed(r14, c19007_0);
r29 = void 0;
if (!isContentDismissed) {
const r36 = BOOSTING_TIER_TO_LEVEL_SKU_ID[r28];
const powerup2 = r36 != null ? a1.allPowerups[r36] : void 0;
r29 = powerup2 != null ? {
type: GuildPowerupNotificationPopoutType.LEVEL_REACHED,
powerup: powerup2,
markAsDismissed: $mk87672(r7)
} : void 0;
}
}
}
if (r29 != null) {
return r29;
}
const r49 = maybeGetPerkPurchaseablePopoutDCF(c19007_0, a1, available2, serverThemeUserEnabled);
if (r49 != null) {
return r49;
}
let env27114;
const r52 = env27114 = {
$parent: r6
};
env27114[0] = c19007_0;
const r58 = getGameServerEnabled(c19007_0, "maybeGetGameServerHostingGuildEligiblePopoutDCF") ? stateFromStores2 ? void 0 : stateFromStores3 != null ? available2 >= stateFromStores3 ? _GuildDismissibleContentUtils.isContentDismissed(DismissibleGuildContent.GAME_SERVER_HOSTING_GUILD_ELIGIBLE_COACHMARK, c19007_0) ? void 0 : {
type: GuildPowerupNotificationPopoutType.GAME_SERVER_HOSTING_GUILD_ELIGIBLE,
markAsDismissed: $mk87676(r52)
} : void 0 : void 0 : void 0;
return r58 ?? void 0;
}
}, [a0, a1, r4, r5, r8, r139, r6, r7, available2, stateFromStores2, stateFromStores3, serverThemeUserEnabled]);
const [r151, r152] = useGuildPowerupNotificationDCF(memo != null);
c19007_22 = r151;
c19007_23 = r152;
return useMemo(() => {
if (a1 != null) {
if (c19007_3) {
return {
type: GuildPowerupNotificationPopoutType.PERKS_AVAILABLE,
markAsDismissed: markAsDismissed2
};
}
if (c19007_10) {
if (c19007_8 === GuildPowerupNewPerkMarketingVersion.GAME_SERVER_HOSTING) {
return {
type: GuildPowerupNotificationPopoutType.GAME_SERVER_HOSTING_AVAILABLE,
markAsDismissed: markAsDismissed3
};
}
let c27115_0 = NEW_PERK_MARKETING_VERSION_TO_POWERUP_SKU_ID_SET[c19007_8];
const powerups = Object.values(a1.allPowerups).filter((item) => c27115_0.has(item.skuId));
if (powerups.length === 0) {
return void 0;
}
return {
powerups,
type: GuildPowerupNotificationPopoutType.NEW_PERK_AVAILABLE,
markAsDismissed: markAsDismissed3
};
}
return c19007_13 && powerup != null ? {
type: GuildPowerupNotificationPopoutType.BOOST_TO_UNLOCK,
powerup,
markAsDismissed: markAsDismissed4
} : c19007_16 && featuredExpiringPowerup != null ? {
type: GuildPowerupNotificationPopoutType.EXPIRING_PERK,
featuredExpiringPowerup,
markAsDismissed: markAsDismissed5
} : c19007_18 ? {
type: GuildPowerupNotificationPopoutType.GAME_SERVER_NEW_GAMES,
markAsDismissed: markAsDismissed6
} : c19007_20 ? {
type: GuildPowerupNotificationPopoutType.GAME_SERVER_PRICING_CHANGE,
markAsDismissed: markAsDismissed7
} : c19007_22 === DismissibleContent.GUILD_POWERUP_NOTIFICATION ? memo != null ? {
...memo,
markAsDismissed: (a0) => {
c19007_23(a0);
memo.markAsDismissed(a0);
}
} : void 0 : void 0;
}
}, [a1, r4, markAsDismissed2, memo, r151, r152, r5, markAsDismissed3, guildPowerupNewPerkMarketingVersion, r6, powerup, markAsDismissed4, r7, featuredExpiringPowerup, markAsDismissed5, r8, markAsDismissed6, r139, markAsDismissed7]);
};
export default function useGuildPowerupsNotifications(a0) {
let env19008;
const r2 = env19008 = {
$parent: env7902
};
env19008[0] = a0;
const stateFromStores5 = useStateFromStores([GuildPowerupsNotificationStore], $mk87683(r2), [a0]);
const stateFromStores6 = useStateFromStores([GuildPowerupsStore], $mk87684(r2));
const guildPowerupsNotificationIndicator = useGuildPowerupsNotificationIndicator(a0, stateFromStores6 == null ? void 0 : stateFromStores6, stateFromStores5);
const { indicator, showUnread } = guildPowerupsNotificationIndicator;
let r28 = stateFromStores6;
if (r28 == null) {
r28 = void 0;
}
L8: {
const popout = useGuildPowerupsChannelListPopout(a0, r28);
if (stateFromStores6 !== null) {
if (indicator == null && !showUnread && popout == null) {
break L8;
}
return {
indicator,
showUnread,
popout
};
}
}
};
export function maybeGetLevelUnlockedPopoutDCF(a0, a1) {
let env19003;
const r4 = env19003 = {
$parent: env7902
};
env19003[0] = a0;
env19003[1] = a1;
const r15 = ReverseOrderedTiers.find($mk87671(r4));
if (r15 != null) {
const r11 = BOOSTING_TIER_TO_LEVEL_UNLOCKED_DC[r15];
env19003[2] = r11;
if (r11 != null && !_GuildDismissibleContentUtils.isContentDismissed(r11, a0)) {
const r22 = BOOSTING_TIER_TO_LEVEL_SKU_ID[r15];
const powerup2 = r22 != null ? a1.allPowerups[r22] : void 0;
if (powerup2 != null) {
return {
type: GuildPowerupNotificationPopoutType.LEVEL_REACHED,
powerup: powerup2,
markAsDismissed: $mk87672(r4)
};
}
}
}
}
export function maybeGetGameServerHostingGuildEligiblePopoutDCF(a0, a1, a2, a3) {
let env19005;
const r3 = env19005 = {
$parent: env7902
};
env19005[0] = a0;
if (getGameServerEnabled(a0, "maybeGetGameServerHostingGuildEligiblePopoutDCF") && !a1 && a3 != null && a2 >= a3 && !_GuildDismissibleContentUtils.isContentDismissed(DismissibleGuildContent.GAME_SERVER_HOSTING_GUILD_ELIGIBLE_COACHMARK, a0)) {
return {
type: GuildPowerupNotificationPopoutType.GAME_SERVER_HOSTING_GUILD_ELIGIBLE,
markAsDismissed: $mk87676(r3)
};
}
}
export { useGuildPowerupsNotificationIndicator };
export { useGuildPowerupsChannelListPopout };
export function useAutoDismissGuildPowerupsNotifications(a0) {
let r37;
let c19009_2;
let env19010;
const stateFromStores4 = useStateFromStores([GuildPowerupsStore], () => GuildPowerupsStore.getStateForGuild(a0));
const r17 = env19010 = {
$parent: env7902
};
env19010[0] = a0;
const stateFromStores5 = useStateFromStores([GuildPowerupsNotificationStore], $mk87683(r17), [a0]);
const stateFromStores6 = useStateFromStores([GuildPowerupsStore], $mk87684(r17));
const guildPowerupsNotificationIndicator = useGuildPowerupsNotificationIndicator(a0, stateFromStores6 == null ? void 0 : stateFromStores6, stateFromStores5);
const { indicator, showUnread } = guildPowerupsNotificationIndicator;
let r35 = stateFromStores6;
if (r35 == null) {
r35 = void 0;
}
L9: {
const popout = useGuildPowerupsChannelListPopout(a0, r35);
r37 = void 0;
if (stateFromStores6 !== null) {
if (indicator == null && !showUnread) {
const r38 = popout != null;
r37 = void 0;
if (!r38) {
break L9;
}
}
r37 = {
indicator,
showUnread,
popout
};
}
}
c19009_2 = r37;
useAutoDismissGuildPowerupsNewBadge(a0);
useEffect(() => {
guildPowerupsAckNotification(a0);
}, [a0]);
useEffect(() => {
const set = new Set([GuildPowerupNotificationPopoutType.BOOST_TO_UNLOCK, GuildPowerupNotificationPopoutType.EXPIRING_PERK]);
if (!((c19009_2 == null ? void 0 : c19009_2.popout?.type) != null && set.has(c19009_2.popout.type)) && c19009_2 != null) {
const popout = c19009_2.popout;
if (popout != null) {
popout.markAsDismissed(ContentDismissActionType.AUTO_DISMISS);
}
}
}, [r37]);
useEffect(() => {
if (stateFromStores4 != null) {
ReverseOrderedTiers.forEach((reverseOrderedTier) => {
const r5 = BOOSTING_TIER_TO_LEVEL_SKU_ID[reverseOrderedTier];
if (r5 != null && stateFromStores4.unlockedPowerups[r5] != null) {
const r15 = BOOSTING_TIER_TO_LEVEL_UNLOCKED_DC[reverseOrderedTier];
if (r15 != null) {
markContentAsDismissed(r15, a0, false, ContentDismissActionType.AUTO_DISMISS);
}
}
});
}
}, [a0, stateFromStores4]);
}
@@ -0,0 +1,42 @@
// Metro module 11652 (f11653).
import { useMemo } from "react";
import AppliedGuildBoostStore from "../../../../stores/AppliedGuildBoostStore";
import useGuildPowerupsBoostCount from "./useGuildPowerupsBoostCount";
import { useStateFromStores } from "../../../../_bundle/Module589";
import { intl } from "../../../../intl/index.native";
import GuildPowerups_messages from "../GuildPowerups.messages";
export default function useGuildPowerupsWarningConfig(a0, a1) {
let boostCount;
let c19054_0 = a0;
const spent = useGuildPowerupsBoostCount(a0).spent;
const stateFromStores = useStateFromStores([AppliedGuildBoostStore], () => AppliedGuildBoostStore.getAppliedGuildBoostsForGuild(c19054_0), [a0]);
boostCount = spent - useMemo(() => {
const r3 = stateFromStores == null;
let r8 = void 0;
if (!r3) {
const filter = stateFromStores.filter;
r8 = filter == null ? void 0 : filter.call(stateFromStores, (a0) => {
const ended = a0.ended;
return ended ? !ended : a0.endsAt == null;
})?.length;
}
if (r8 == null) {
r8 = 0;
}
return r8;
}, [stateFromStores]);
return useMemo(() => boostCount <= 0 ? {
shouldShow: false,
title: "",
description: "",
requiredBoostCount: 0
} : {
shouldShow: true,
title: intl.string(GuildPowerups_messages.n5hQhc),
description: intl.formatToPlainString(GuildPowerups_messages.iAaAiG, {
boostCount,
perksString: a1.join(", ")
}),
requiredBoostCount: boostCount
}, [boostCount, a1]);
};
@@ -0,0 +1,14 @@
// Metro module 11605 (f11606).
import GuildStore from "../../../../stores/GuildStore";
import PermissionStore from "../../../../stores/PermissionStore";
import { Permissions } from "../../../../_bundle/Module505";
import { useStateFromStores } from "../../../../_bundle/Module589";
export default function useHasAllocateBoostPermission(c19027_0) {
return useStateFromStores([PermissionStore, GuildStore], () => {
const guild = GuildStore.getGuild(c19027_0);
return guild == null ? null : PermissionStore.getGuildPermissions(guild) == null ? null : PermissionStore.can(Permissions.ADMINISTRATOR, guild);
});
};
export function getHasAllocateBoostPermission(a0, a1) {
return a1 == null ? null : a0.getGuildPermissions(a1) == null ? null : a0.can(Permissions.ADMINISTRATOR, a1);
}
@@ -0,0 +1,27 @@
// Metro module 4628 (f4629).
import GuildStore from "../../../../stores/GuildStore";
import { GuildFeatures } from "../../../../Constants";
import { useStateFromStores } from "../../../../_bundle/Module589";
export default function useHasEnhancedRoleColors(c14368_0) {
return useStateFromStores([GuildStore], () => {
const guild = GuildStore.getGuild(c14368_0);
return guild != null && guild.features.has(GuildFeatures.ENHANCED_ROLE_COLORS);
});
};
export function getHasEnhancedRoleColors(a0) {
if (a0 == null) {
return false;
}
const guild = GuildStore.getGuild(a0);
return guild != null && guild.features.has(GuildFeatures.ENHANCED_ROLE_COLORS);
}
export function useHasEnhancedRoleColorsForRole(c14369_0) {
return useStateFromStores([GuildStore], () => {
const guild = GuildStore.getGuild(c14369_0);
return guild != null && guild.features.has(GuildFeatures.ENHANCED_ROLE_COLORS);
});
}
export function getHasEnhancedRoleColorsForRole(a0) {
const guild = GuildStore.getGuild(a0);
return guild != null && guild.features.has(GuildFeatures.ENHANCED_ROLE_COLORS);
}
@@ -0,0 +1,47 @@
// Metro module 15140 (f15141).
import "../../../../stores/GuildMemberStore";
import SortedGuildStore from "../../../../stores/SortedGuildStore";
import UserStore from "../../../../stores/UserStore";
import GuildBoostSlotStore from "../../../../stores/billing/GuildBoostSlotStore";
import { PremiumTypes } from "../../PremiumConstants";
import { isPremium } from "../../../../utils/PremiumTypeUtils";
import { useStateFromStores, useStateFromStoresArray } from "../../../../_bundle/Module589";
function $mk95545() {
return (a0) => a0.premiumGuildSubscription != null;
}
function $mk95546($env) {
return (a0) => $env.$parent[2].getMember(a0, $env[0].id)?.premiumSince != null;
}
let env10741 = {};
export default function useIsCurrentUserEligibleForPowerupUpsells() {
let env21702;
const stateFromStores = useStateFromStores([UserStore], () => UserStore.getCurrentUser());
const stateFromStoresArray = useStateFromStoresArray([GuildBoostSlotStore], () => GuildBoostSlotStore.hasFetched ? Object.values(GuildBoostSlotStore.boostSlots) : []);
const stateFromStores2 = useStateFromStores([SortedGuildStore], () => SortedGuildStore.getFlattenedGuildIds());
const r27 = env21702 = {
$parent: env10741
};
env21702[0] = stateFromStores;
let r28 = stateFromStores != null;
if (r28) {
const isPremiumGroupMember = stateFromStores.isPremiumGroupMember();
r28 = isPremiumGroupMember ? !isPremiumGroupMember : !!isPremium(stateFromStores, PremiumTypes.TIER_2) || (!!stateFromStoresArray.some($mk95545()) || stateFromStores2.some($mk95546(r27)));
}
return r28;
};
export function getIsCurrentUserEligibleForPowerupUpsells() {
const currentUser = UserStore.getCurrentUser();
const r9 = GuildBoostSlotStore.hasFetched ? Object.values(GuildBoostSlotStore.boostSlots) : [];
let env21703;
const flattenedGuildIds = SortedGuildStore.getFlattenedGuildIds();
const r6 = env21703 = {
$parent: env10741
};
env21703[0] = currentUser;
let r18 = currentUser != null;
if (r18) {
const isPremiumGroupMember = currentUser.isPremiumGroupMember();
r18 = isPremiumGroupMember ? !isPremiumGroupMember : !!isPremium(currentUser, PremiumTypes.TIER_2) || (!!r9.some($mk95545()) || flattenedGuildIds.some($mk95546(r6)));
}
return r18;
}
@@ -0,0 +1,27 @@
// Metro module 15132 (f15133).
import GuildStore from "../../../../stores/GuildStore";
import GuildPowerupsStore from "../GuildPowerupsStore";
import { GuildFeatures } from "../../../../Constants";
import { useStateFromStores } from "../../../../_bundle/Module589";
import { GUILD_POWERUP_GUILD_THEME_SKU_ID } from "../../../../_bundle/Module4080";
export default function useIsGuildThemePerkEnabled(a0) {
return useStateFromStores([GuildStore, GuildPowerupsStore], () => {
let r1 = a0 != null;
if (r1) {
const guild = GuildStore.getGuild(a0);
let r17 = (guild == null ? void 0 : guild.features.has(GuildFeatures.GUILD_THEME)) === true;
if (!r17) {
const stateForGuild = GuildPowerupsStore.getStateForGuild(a0);
const r4 = stateForGuild == null;
let r21 = void 0;
if (!r4) {
const unlockedPowerups = stateForGuild.unlockedPowerups;
r21 = unlockedPowerups == null ? void 0 : unlockedPowerups[GUILD_POWERUP_GUILD_THEME_SKU_ID];
}
r17 = r21 != null;
}
r1 = r17;
}
return r1;
}, [a0]);
};
@@ -0,0 +1,7 @@
// Metro module 13049 (f13050).
import { useServerThemeEnabled } from "../experiments/ServerThemeExperiment";
import { useEnabledGuildThemeForGuildId } from "../../../guild_themes/GuildThemeResolver";
export default function useIsServerThemeAvailableForGuild(a0, a1) {
useServerThemeEnabled(a0 == null ? void 0 : a0, a1);
return useEnabledGuildThemeForGuildId(a0, a1) != null;
};
@@ -0,0 +1,17 @@
// Metro module 11573 (f11574).
import { useEffect } from "react";
import { useGameServerEnabled } from "../../game_server/GameServerExperiment";
import { fetchGameServerCatalog } from "../../game_server/GameServerActionCreators";
import { fetchPowerupCatalogForGuild, fetchGuildBoostEntitlements } from "../GuildPowerupsActionCreators";
export default function useLoadGuildPowerups(a0) {
const gameServerEnabled = useGameServerEnabled(a0, "useLoadGuildPowerups");
useEffect(() => {
if (gameServerEnabled) {
fetchGameServerCatalog(a0);
}
}, [a0, gameServerEnabled]);
useEffect(() => {
fetchPowerupCatalogForGuild(a0);
fetchGuildBoostEntitlements(a0);
}, [a0]);
};
@@ -0,0 +1,36 @@
// Metro module 12640 (f12641).
import { useMemo } from "react";
import GuildPowerupsStore from "../GuildPowerupsStore";
import * as _GuildPowerupsConstants from "../constants/GuildPowerupsConstants";
import { GuildPowerupType } from "../constants/GuildPowerupsConstants";
import { VANITY_URL_POWERUP_SKU_ID } from "../../../../_bundle/Module4080";
import { useStateFromStores } from "../../../../_bundle/Module589";
import useGameServerPerk from "../../game_server/hooks/useGameServerPerk";
const { GUILD_TAG_BADGE_PACKS_WAVE_ONE_SKU_ID_SET, GUILD_TAG_BADGE_PACKS_WAVE_TWO_SKU_ID_SET } = _GuildPowerupsConstants;
let c8725_6 = new Set([...Array.from(GUILD_TAG_BADGE_PACKS_WAVE_ONE_SKU_ID_SET), ...Array.from(GUILD_TAG_BADGE_PACKS_WAVE_TWO_SKU_ID_SET), VANITY_URL_POWERUP_SKU_ID]);
export default function useMarketablePowerupPerks(a0) {
let c19951_2;
const stateFromStores = useStateFromStores([GuildPowerupsStore], () => {
const stateForGuild = GuildPowerupsStore.getStateForGuild(a0);
const r2 = stateForGuild == null;
let r9 = void 0;
if (!r2) {
const powerupCatalog = stateForGuild.powerupCatalog;
r9 = powerupCatalog == null ? void 0 : powerupCatalog[GuildPowerupType.PERK];
}
return r9;
});
const gameServerPerk = useGameServerPerk(a0);
c19951_2 = gameServerPerk;
return useMemo(() => {
let r3 = stateFromStores;
if (stateFromStores == null) {
r3 = [];
}
const r4 = [...r3];
if (c19951_2 != null) {
r4.push(c19951_2);
}
return r4.filter((item) => !c8725_6.has(item.skuId));
}, [stateFromStores, gameServerPerk]);
};
@@ -0,0 +1,107 @@
// Metro module 11671 (f11672).
import _slicedToArray from "../../../../_bundle/_slicedToArray";
import { useState, useMemo, useEffect } from "react";
import AppliedGuildBoostStore from "../../../../stores/AppliedGuildBoostStore";
import GuildMemberRequesterStore from "../../../../stores/GuildMemberRequesterStore";
import GuildMemberStore from "../../../../stores/GuildMemberStore";
import GuildStore from "../../../../stores/GuildStore";
import { useExpiringBoostsEnabled } from "../experiments/ExpiringBoostsExperiment";
import { useStateFromStoresArray, useStateFromStores, useStateFromStoresObject } from "../../../../_bundle/Module589";
import { getBoostLifecycleInfo, getBoostLifecycleTimestamp } from "../utils/getBoostLifecyclePhase";
import { fetchAppliedGuildBoostsForGuild } from "../../../../actions/BoostingActionCreators";
import SnowflakeUtils from "../../../../utils/SnowflakeUtils";
import { intl, t } from "../../../../intl/index.native";
export default function useMaybeGetSortedBoosts(a0, a1) {
let state, memo, stateFromStoresArray2, stateFromStores, memo2, stateFromStores2;
const expiringBoostsEnabled = useExpiringBoostsEnabled("GuildPowerupsRecentActivity");
const stateFromStoresArray = useStateFromStoresArray([AppliedGuildBoostStore], () => {
let r6 = AppliedGuildBoostStore.getAppliedGuildBoostsForGuild(a0);
if (r6 == null) {
r6 = [];
}
return r6;
}, [a0]);
state = _slicedToArray(useState(() => Date.now()), 1)[0];
memo = useMemo(() => stateFromStoresArray.map((item) => {
const r3 = expiringBoostsEnabled ? getBoostLifecycleInfo(item, state) : {
phase: "gave"
};
const boostLifecycleTimestamp = getBoostLifecycleTimestamp(item, r3);
return r3.phase === "expiring" ? {
boost: item,
phase: "expiring",
sortKey: boostLifecycleTimestamp,
endsAt: r3.endsAt
} : {
boost: item,
phase: r3.phase,
sortKey: boostLifecycleTimestamp
};
}).sort((a, b) => b.sortKey - a.sortKey).slice(0, a1), [stateFromStoresArray, a1, state, expiringBoostsEnabled]);
stateFromStoresArray2 = useStateFromStoresArray([GuildMemberStore], () => {
const set = new Set();
let c27125_0 = set;
memo.forEach(({ boost }) => {
if (GuildMemberStore.getMember(a0, boost.userId) == null) {
c27125_0.add(boost.userId);
}
});
return Array.from(set);
}, [a0, memo]);
useEffect(() => {
if (stateFromStoresArray2.length > 0) {
stateFromStoresArray2.forEach((item) => GuildMemberRequesterStore.requestMember(a0, item));
}
}, [a0, stateFromStoresArray2]);
stateFromStores = useStateFromStores([GuildStore], () => GuildStore.getGuild(a0)?.premiumSubscriberCount);
memo2 = useMemo(() => stateFromStoresArray.filter((item) => !item.ended).length, [stateFromStoresArray]);
stateFromStores2 = useStateFromStores([AppliedGuildBoostStore], () => AppliedGuildBoostStore.getLastFetchedAtForGuild(a0) != null, [a0]);
useEffect(() => {
let r6 = stateFromStores !== memo2;
if (!r6) {
let r7 = expiringBoostsEnabled;
if (expiringBoostsEnabled) {
r7 = !stateFromStores2;
}
r6 = r7;
}
if (r6) {
fetchAppliedGuildBoostsForGuild(a0, {
includeEnded: expiringBoostsEnabled
});
}
}, [a0, stateFromStores, memo2, expiringBoostsEnabled, stateFromStores2]);
return memo;
};
export function useGetBoostUserConfig(a0) {
const date = new Date(SnowflakeUtils.extractTimestamp(a0.id));
const stateFromStoresObject = useStateFromStoresObject([GuildMemberStore], () => {
const member = GuildMemberStore.getMember(a0.guildId, a0.userId);
let username = GuildMemberStore.getNick(a0.guildId, a0.userId);
if (username == null) {
username = a0.user?.username;
}
if (username == null) {
username = intl.string(t["30mdIx"]);
}
let roleColor = member?.colorString;
if (roleColor == null) {
roleColor = null;
}
let roleColorStrings = member?.colorStrings;
if (roleColorStrings == null) {
roleColorStrings = null;
}
return {
username,
roleColor,
roleColorStrings
};
}, [a0]);
return {
timestamp: date,
username: stateFromStoresObject.username,
roleColor: stateFromStoresObject.roleColor,
roleColorStrings: stateFromStoresObject.roleColorStrings
};
}
@@ -0,0 +1,62 @@
// Metro module 11664 (f11665).
import { PowerupActiveStatusType } from "../constants/GuildPowerupsConstants";
import { usePowerupsActiveStatuses } from "./usePowerupActiveStatus";
import { intl } from "../../../../intl/index.native";
import GuildPowerups_messages from "../GuildPowerups.messages";
export default function useMultiPerkStatusValues({ guildId, powerups }) {
const powerupsActiveStatuses = usePowerupsActiveStatuses(guildId, powerups);
const isActive = powerupsActiveStatuses.some((powerupsActiveStatuse) => powerupsActiveStatuse.type !== PowerupActiveStatusType.INACTIVE);
if (powerups.length <= 0) {
return null;
}
const expiringAt = powerupsActiveStatuses.reduce((acc, powerupsActiveStatuse) => {
const ends_at = powerupsActiveStatuse.sourceEntitlement?.ends_at;
return ends_at != null ? acc != null ? ends_at < acc ? ends_at : acc : ends_at : acc;
}, void 0);
const status = expiringAt != null ? {
type: "expiring",
expiringAt
} : isActive ? {
type: "active",
statusText: intl.string(GuildPowerups_messages.FFLkmx)
} : void 0;
const activeCost = powerupsActiveStatuses.reduce((acc, { type, powerup }) => type === PowerupActiveStatusType.POWERUP_ACTIVATED ? acc + powerup.cost : acc, 0);
const r37 = powerupsActiveStatuses[0];
let r38 = r37 == null ? void 0 : r37.powerup?.cost;
if (r38 == null) {
r38 = 0;
}
const minCost = powerupsActiveStatuses.reduce((acc, { powerup }) => {
let r6 = powerup?.cost;
if (r6 == null) {
r6 = 0;
}
let r7 = acc;
if (!(acc < r6)) {
let r4 = powerup?.cost;
if (r4 == null) {
r4 = 0;
}
r7 = r4;
}
return r7;
}, r38);
const totalCost = powerupsActiveStatuses.reduce((acc, powerupsActiveStatuse) => {
let r4 = powerupsActiveStatuse.powerup?.cost;
if (r4 == null) {
r4 = 0;
}
return acc + r4;
}, 0);
const cost = isActive ? activeCost : minCost;
return {
isActive,
status,
cost,
costDecorator: isActive ? void 0 : totalCost > cost ? "+" : void 0,
expiringAt,
activeCost,
minCost,
totalCost
};
};
@@ -0,0 +1,175 @@
// Metro module 11591 (f11592).
import GuildStore from "../../../../stores/GuildStore";
import GuildPowerupsStore from "../GuildPowerupsStore";
import "../../game_server/GameServerConstants";
import { PowerupActiveStatusType } from "../constants/GuildPowerupsConstants";
import { GuildFeatures } from "../../../../Constants";
import { useStateFromStores } from "../../../../_bundle/Module589";
function $mk87696($env) {
return () => $env.$parent[2].getGuild($env[0]);
}
function $mk87697($env) {
return () => $env.$parent[3].getStateForGuild($env[0]);
}
function $mk87698($env) {
return (a0) => {
let r27, r41;
const r6 = $env;
const skuId = a0.skuId;
const r4 = $env.$parent;
if (skuId === r4[4]) {
const r48 = r6[1];
const r50 = r48 == null;
let r51 = void 0;
if (!r50) {
const features = r48.features;
r51 = features == null ? void 0 : features.has(r4[9].GAME_SERVERS);
}
r41 = {
type: r51 != null && r51 ? r4[6].POWERUP_ACTIVATED : r4[6].INACTIVE,
powerup: a0,
sourceEntitlement: void 0,
sourcePowerup: void 0
};
} else {
L16: {
if (a0 != null) {
const r14 = r6[1];
if (r14 != null) {
const r9 = r6[2];
if (r9 != null) {
const r16 = r4[7][a0.skuId];
if (r16 == null) {
r27 = {
isActiveFromLevel: false,
levelEntitlement: void 0,
levelPowerup: void 0
};
break L16;
}
const isActiveFromLevel2 = r14.premiumTier >= r16;
const r10 = r4[8][r16];
const r1 = r10 != null;
let levelEntitlement2 = void 0;
if (r1) {
const unlockedPowerups = r9.unlockedPowerups;
levelEntitlement2 = unlockedPowerups == null ? void 0 : unlockedPowerups[r10];
}
const r22 = r10 != null;
let levelPowerup2 = void 0;
if (r22) {
const allPowerups = r9.allPowerups;
levelPowerup2 = allPowerups == null ? void 0 : allPowerups[r10];
}
r27 = {
isActiveFromLevel: isActiveFromLevel2,
levelEntitlement: levelEntitlement2,
levelPowerup: levelPowerup2
};
break L16;
}
}
}
r27 = {
isActiveFromLevel: false,
levelEntitlement: void 0,
levelPowerup: void 0
};
}
const { isActiveFromLevel, levelEntitlement, levelPowerup } = r27;
const r30 = r6[3] && r4[5].has(a0.skuId);
const r34 = r6[2];
const r35 = r34 == null;
let sourceEntitlement = void 0;
if (!r35) {
const unlockedPowerups2 = r34.unlockedPowerups;
sourceEntitlement = unlockedPowerups2 == null ? void 0 : unlockedPowerups2[a0.skuId];
}
if (sourceEntitlement == null) {
sourceEntitlement = null;
}
const r40 = r4[6];
r41 = {
type: r40.INACTIVE,
powerup: a0,
sourceEntitlement: void 0,
sourcePowerup: void 0
};
if (isActiveFromLevel) {
r41 = {
type: r40.LEVEL_ACTIVATED,
powerup: a0,
sourceEntitlement: levelEntitlement,
sourcePowerup: levelPowerup
};
} else if (r30) {
r41 = {
type: r40.TIER_OVERRIDE_ACTIVATED,
powerup: a0,
sourceEntitlement: void 0,
sourcePowerup: a0
};
} else if (sourceEntitlement != null) {
r41 = {
type: r40.POWERUP_ACTIVATED,
powerup: a0,
sourceEntitlement,
sourcePowerup: a0
};
}
}
return r41;
};
}
let env7908 = {};
export default function usePowerupActiveStatus(a0, a1) {
const r7 = a1 == null ? [] : [a1];
let env19017;
const r13 = env19017 = {
$parent: env7908
};
env19017[0] = a0;
const stateFromStores = useStateFromStores([GuildStore], $mk87696(r13));
env19017[1] = stateFromStores;
env19017[2] = useStateFromStores([GuildPowerupsStore], $mk87697(r13));
const r3 = stateFromStores == null;
let r25 = void 0;
if (!r3) {
const features = stateFromStores.features;
r25 = features == null ? void 0 : features.has(GuildFeatures.PREMIUM_TIER_3_OVERRIDE);
}
if (r25 == null) {
r25 = false;
}
env19017[3] = r25;
const r33 = r7.map($mk87698(r13));
return r33.length <= 0 ? {
type: PowerupActiveStatusType.INACTIVE,
sourceEntitlement: void 0,
sourcePowerup: void 0
} : r33[0];
};
export function isPowerupActiveStatusActive(a0) {
return a0.type !== PowerupActiveStatusType.INACTIVE;
}
export function usePowerupsActiveStatuses(a0, a1) {
let env19016;
const r3 = env19016 = {
$parent: env7908
};
env19016[0] = a0;
const stateFromStores = useStateFromStores([GuildStore], $mk87696(r3));
env19016[1] = stateFromStores;
env19016[2] = useStateFromStores([GuildPowerupsStore], $mk87697(r3));
const r2 = stateFromStores == null;
let r22 = void 0;
if (!r2) {
const features = stateFromStores.features;
r22 = features == null ? void 0 : features.has(GuildFeatures.PREMIUM_TIER_3_OVERRIDE);
}
if (r22 == null) {
r22 = false;
}
env19016[3] = r22;
return a1.map($mk87698(r3));
}
@@ -0,0 +1,32 @@
// Metro module 15131 (f15132).
import { GUILD_THEME_POWERUP_BOOST_PRICE } from "../constants/GuildPowerupsConstants";
import useHasAllocateBoostPermission from "./useHasAllocateBoostPermission";
import { useServerThemeEnabled } from "../experiments/ServerThemeExperiment";
import { useServerThemeUserEnabled } from "../experiments/ServerThemeUserExperiment";
import useIsGuildThemePerkEnabled from "./useIsGuildThemePerkEnabled";
import useGuildPowerupsBoostCount from "./useGuildPowerupsBoostCount";
export default function useShouldShowGuildThemeMemberCoachmark(a0) {
const hasAllocateBoostPermission = useHasAllocateBoostPermission(a0);
let r13 = useServerThemeEnabled(a0, "useShouldShowGuildThemeMemberCoachmark");
const serverThemeUserEnabled = useServerThemeUserEnabled("useShouldShowGuildThemeMemberCoachmark");
const isGuildThemePerkEnabled = useIsGuildThemePerkEnabled(a0);
const guildPowerupsBoostCount = useGuildPowerupsBoostCount(a0);
const { available, isLoading } = guildPowerupsBoostCount;
let r26 = !isLoading;
if (!isLoading) {
if (r13) {
r13 = serverThemeUserEnabled;
}
if (r13) {
r13 = available < GUILD_THEME_POWERUP_BOOST_PRICE;
}
if (r13) {
r13 = !isGuildThemePerkEnabled;
}
if (r13) {
r13 = hasAllocateBoostPermission === false;
}
r26 = r13;
}
return r26;
};
@@ -0,0 +1,28 @@
// Metro module 15188 (f15189).
import { useMemo } from "react";
import { MULTIPLE_PURCHASEABLE_PREMIUM_FEATURES_BOOST_INFO, PURCHASABLE_PREMIUM_FEATURES_BOOST_INFO } from "../constants/GuildPowerupsConstants";
import { AppliedGuildBoostsRequiredForBoostedGuildTier, BoostedGuildTiers, GuildFeatures } from "../../../../Constants";
export default function useTotalPossibleBoostCount(a0) {
return useMemo(() => {
if (a0 == null) {
return 0;
}
const r14 = (a0 == null ? void 0 : a0.features.has(GuildFeatures.PREMIUM_TIER_3_OVERRIDE)) !== true ? AppliedGuildBoostsRequiredForBoostedGuildTier[BoostedGuildTiers.TIER_3] : 0;
let c27960_0 = r14;
Object.values(PURCHASABLE_PREMIUM_FEATURES_BOOST_INFO).concat(Object.values(MULTIPLE_PURCHASEABLE_PREMIUM_FEATURES_BOOST_INFO)).forEach((item) => {
let r8 = item.includedInLevel == null;
if (r8) {
const isEnabled = item.isEnabled;
let r5 = isEnabled == null ? void 0 : isEnabled.call(item, a0.id);
if (r5 == null) {
r5 = 1;
}
r8 = r5;
}
if (r8) {
c27960_0 = c27960_0 + item.boostPrice;
}
});
return c27960_0;
}, [a0]);
};
@@ -0,0 +1,79 @@
// Metro module 11581 (f11582).
import { GuildPowerupType } from "../constants/GuildPowerupsConstants";
const r19 = [{
type: GuildPowerupType.LEVEL,
skuId: "1",
title: "Lorem ipsum",
cost: 1,
dependencies: [],
features: {
additional_emoji_slots: 50,
additional_sound_slots: 50,
additional_sticker_slots: 50,
total_emoji_slots: 50,
total_sound_slots: 50,
total_sticker_slots: 50,
features: []
}
}, {
type: GuildPowerupType.LEVEL,
skuId: "2",
title: "Lorem ipsum",
cost: 1,
dependencies: ["1"],
features: {
additional_emoji_slots: 50,
additional_sound_slots: 50,
additional_sticker_slots: 50,
total_emoji_slots: 50,
total_sound_slots: 50,
total_sticker_slots: 50,
features: []
}
}, {
type: GuildPowerupType.LEVEL,
skuId: "3",
title: "Lorem ipsum",
cost: 1,
dependencies: ["2"],
features: {
additional_emoji_slots: 50,
additional_sound_slots: 50,
additional_sticker_slots: 50,
total_emoji_slots: 50,
total_sound_slots: 50,
total_sticker_slots: 50,
features: []
}
}];
const r32 = [{
type: GuildPowerupType.PERK,
skuId: "4",
title: "Lorem ipsum",
description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec placerat posuere lao",
cost: 1,
dependencies: []
}, {
type: GuildPowerupType.PERK,
skuId: "5",
title: "Lorem ipsum",
description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec placerat posuere lao",
cost: 1,
dependencies: []
}, {
type: GuildPowerupType.PERK,
skuId: "6",
title: "Lorem ipsum",
description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec placerat posuere lao",
cost: 1,
dependencies: []
}, {
type: GuildPowerupType.PERK,
skuId: "7",
title: "Lorem ipsum",
description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec placerat posuere lao",
cost: 1,
dependencies: []
}];
export { r19 as MOCK_LEVELS };
export { r32 as MOCK_PERKS };
@@ -0,0 +1,46 @@
// Metro module 15141 (f15142).
import { useCallback, useMemo } from "react";
import { View } from "react-native";
import { ContentDismissActionType } from "../../../dismissible_content/DismissibleContentConstants";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import GuildSettingsActionCreators from "../../../guild_settings/GuildSettingsActionCreators";
import { intl, t } from "../../../../intl/index.native";
import GuildPowerups_messages from "../GuildPowerups.messages";
import { BoostThisServerRive } from "../../../../_bundle/Module3901";
import { useCoachmark } from "../../../../design/components/Coachmark/native/useCoachmark.native";
const useStyles = createStyles({
riveContainer: {
width: 120,
height: 80,
alignSelf: "center"
}
});
export default function BoostProgressBarCoachmark({ targetRef, guild, markAsDismissed }) {
let callback2;
callback2 = void 0;
const styles = useStyles();
const callback = useCallback(() => {
markAsDismissed(ContentDismissActionType.USER_DISMISS);
}, [markAsDismissed]);
callback2 = useCallback(() => {
markAsDismissed(ContentDismissActionType.TAKE_ACTION);
GuildSettingsActionCreators.saveGuild(guild.id, {
premiumProgressBarEnabled: true
});
}, [guild.id, markAsDismissed]);
useCoachmark(targetRef, useMemo(() => ({
title: intl.string(GuildPowerups_messages.uwV2dH),
description: intl.string(GuildPowerups_messages.MIwlcR),
visible: true,
position: "bottom",
offsetY: 8,
onDismiss: callback,
renderImgComponent: () => <View style={styles.riveContainer}>
<BoostThisServerRive stateMachine="State Machine 1" />
</View>,
buttonLabel: intl.string(t["0CJWP2"]),
buttonVariant: "primary",
onButtonPress: callback2
}), [callback, callback2, styles.riveContainer]));
return null;
};
@@ -0,0 +1,118 @@
// Metro module 16467 (f16468).
import { Pressable, View } from "react-native";
import { RoleColorsStyle } from "../../../guild_settings/roles/GuildSettingsRolesStore";
import { HOLOGRAPHIC_ROLE_COLORS } from "../constants/EnhancedRoleColorConstants";
import { STYLE_CONFIGS } from "../../../guild_settings/roles/GuildSettingsRoleConstants";
import { ThemeTypes } from "../../../../_bundle/Module505";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import useTheme from "../../../../hooks/useTheme";
import { useHasEnhancedRoleColorsForRole } from "../hooks/useHasEnhancedRoleColors";
import { useGuildSettingsRoleExampleMessage } from "../../../guild_settings/roles/hooks/useGuildSettingsRoleExampleMessage";
import { intl, t } from "../../../../intl/index.native";
import RowGenerator from "../../../messages/native/renderer/RowGenerator";
import { BottomSheet } from "../../../../design/components/Sheet/native/BottomSheet.native";
import { BottomSheetTitleHeader } from "../../../../design/components/Sheet/native/BottomSheetTitleHeader.native";
import ActionSheetActionCreators from "../../../action_sheet/native/ActionSheetActionCreators";
import ChatItem from "../../../../components_native/chat/ChatItem";
import { extractColorStringsFromServerColors } from "../../enhanced_role_colors/EnhancedRoleColorUtils";
import { processColorStrings } from "../../enhanced_role_colors/native/EnhancedRoleColorUtils";
import Module16469 from "../../../../_bundle/Module16469";
import { Text } from "../../../../design/components/Text/native/Text";
import GuildPowerups_messages from "../GuildPowerups.messages";
import { isFabric } from "../../../../utils/native/FabricUtils";
const useStyles = createStyles((a0) => ({
container: {
marginHorizontal: Module712.space.PX_12,
marginBottom: Module712.space.PX_32
},
stylesContainer: {
display: "flex",
flexDirection: "row",
gap: Module712.space.PX_8
},
button: {
borderRadius: Module712.radii.sm,
overflow: "hidden",
height: 100,
width: 100,
flex: 1,
backgroundColor: Module712.colors.BACKGROUND_BASE_LOWEST,
display: "flex",
flexDirection: "column",
alignItems: "center",
justifyContent: "center"
},
message: {
width: 400,
flex: 1,
marginStart: Module712.space.PX_8,
marginVertical: Module712.space.PX_8,
alignSelf: "flex-start"
},
text: {
width: "100%",
textAlign: "center",
backgroundColor: a0 === ThemeTypes.LIGHT ? Module712.colors.BACKGROUND_BASE_LOW : Module712.colors.BACKGROUND_SURFACE_HIGH,
paddingVertical: Module712.space.PX_8
},
upsellContainer: {
backgroundColor: a0 === ThemeTypes.LIGHT ? Module712.colors.BACKGROUND_BASE_LOW : Module712.colors.BACKGROUND_SURFACE_HIGH,
padding: Module712.space.PX_8,
marginTop: Module712.space.PX_16,
borderRadius: Module712.radii.sm
},
upsellText: {
textAlign: "center"
},
selected: {
borderWidth: 1,
borderColor: Module712.colors.BACKGROUND_BRAND
},
disabled: {
opacity: 0.5
}
}));
export default function EnhancedRoleColorsSelectStyleModal(props) {
const { guildId, role, roleStyle, onStyleChanged } = props;
const styles = useStyles(useTheme());
const hasEnhancedRoleColorsForRole = useHasEnhancedRoleColorsForRole(guildId, role);
const guildSettingsRoleExampleMessage = useGuildSettingsRoleExampleMessage(intl.string(t.Mi9Kbe));
const rowGenerator = new RowGenerator();
return <BottomSheet header={<BottomSheetTitleHeader title={intl.string(t["9wVJRB"])} />}>
<View style={styles.container}>
<View style={styles.stylesContainer}>
{STYLE_CONFIGS.map((item) => {
const disabled = hasEnhancedRoleColorsForRole ? !hasEnhancedRoleColorsForRole : item.id !== RoleColorsStyle.SOLID;
return <Pressable key={item.id} style={[styles.button, roleStyle === item.id && styles.selected, disabled && styles.disabled]} disabled={disabled} onPress={() => {
onStyleChanged(item.id);
ActionSheetActionCreators.hideActionSheet();
}}>
<ChatItem style={styles.message} pointerEvents="none" message={guildSettingsRoleExampleMessage} rowGenerator={rowGenerator} modifyRow={(a0) => {
const r12 = extractColorStringsFromServerColors(item.colors);
a0.message.roleColor = void 0;
a0.message.roleColors = processColorStrings(r12);
a0.message.shouldShowRoleOnName = true;
a0.message.avatarURL = Module16469;
}} />
<Text style={styles.text} variant="text-sm/normal">
{intl.string(item.labelString)}
</Text>
</Pressable>;
})}
</View>
{hasEnhancedRoleColorsForRole ? !hasEnhancedRoleColorsForRole : <View style={styles.upsellContainer}>
<Text style={styles.upsellText} variant="text-sm/semibold">
{intl.format(GuildPowerups_messages.VpEDJc, {
magical: <Text gradientColors={[HOLOGRAPHIC_ROLE_COLORS.primary_color, HOLOGRAPHIC_ROLE_COLORS.secondary_color, HOLOGRAPHIC_ROLE_COLORS.tertiary_color]} variant="text-sm/semibold" experimental_useNativeText={!isFabric()}>
{intl.string(GuildPowerups_messages["+/IHLl"])}
</Text>
})}
</Text>
<Text style={styles.upsellText} variant="text-sm/normal">
{intl.string(GuildPowerups_messages.FJZeZF)}
</Text>
</View>}
</View>
</BottomSheet>;
};
@@ -0,0 +1,7 @@
// Metro module 11607 (f11608).
import { PromoSheet } from "../../../../design/components/Sheet/native/PromoSheet.native";
import { Button } from "../../../../design/components/Button/native/Button.native";
export default function GuildPowerupRollbackSheet(props) {
const header = props.header;
return <PromoSheet title={header} description={props.body} onDismiss={props.onDismiss} actions={<Button variant="primary" text={props.ctaText} onPress={props.onCtaPress} />} />;
};
@@ -0,0 +1,33 @@
// Metro module 11679 (f11680).
import { useMemo, useCallback } from "react";
import GuildStore from "../../../../stores/GuildStore";
import UserStore from "../../../../stores/UserStore";
import GuildBoostSlotStore from "../../../../stores/billing/GuildBoostSlotStore";
import { AnalyticsSections } from "../../../../Constants";
import { useStateFromStores } from "../../../../_bundle/Module589";
import useFractionalPremiumInfo from "../../../billing/hooks/useFractionalPremiumInfo";
import { PremiumSubscriptionGroupRole } from "../../../../_bundle/Module1892";
import { openTransferModal } from "../../../../actions/native/BoostingActionCreators";
import GuildBoostingSubscribeButton from "../../../guild_boosting/native/GuildBoostingSubscribeButton";
export function GuildPowerupsBoostButton(props) {
let stateFromStores;
const guildId = props.guildId;
stateFromStores = void 0;
const stateFromStores2 = useStateFromStores([GuildStore], () => GuildStore.getGuild(guildId));
stateFromStores = useStateFromStores([GuildBoostSlotStore], () => GuildBoostSlotStore.boostSlots);
const fractionalPremiumInfo = useFractionalPremiumInfo({
forceFetch: true
});
const stateFromStores3 = useStateFromStores([UserStore], () => UserStore.getCurrentUser());
const premiumGroupRole = stateFromStores3 != null ? stateFromStores3.premiumGroupRole : PremiumSubscriptionGroupRole.UNSPECIFIED;
const memo = useMemo(() => Object.values(stateFromStores).find((item) => item.isAvailable()), [stateFromStores]);
const callback = useCallback((a0, a1) => {
if (a1 != null) {
openTransferModal({
guildBoostSlots: [a1],
guildId: a0
});
}
}, []);
return stateFromStores2 == null ? null : <GuildBoostingSubscribeButton guild={stateFromStores2} previousGuildSubscriptionSlot={memo} analyticsSection={AnalyticsSections.GUILD_POWERUPS_OVERVIEW_SIDEBAR} fractionalPremiumState={fractionalPremiumInfo.fractionalState} onAvailableSlotPress={callback} premiumGroupRole={premiumGroupRole} />;
}
@@ -0,0 +1,22 @@
// Metro module 11613 (f11614).
import { View } from "react-native";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import BoostGem from "./images/BoostGem";
const useStyles = createStyles({
boostGemContainer: {
width: 100,
height: 100,
borderRadius: Module712.radii.round,
backgroundColor: Module712.colors.BACKGROUND_SECONDARY_ALT,
alignItems: "center",
justifyContent: "center",
alignSelf: "center"
}
});
export default function GuildPowerupsBoostGem(props) {
const { style, gemWidth, gemHeight } = props;
return <View style={[useStyles().boostGemContainer, style]}>
<BoostGem width={gemWidth} height={gemHeight} />
</View>;
};
@@ -0,0 +1,34 @@
// Metro module 11644 (f11645).
import { View } from "react-native";
import { BoostInfoType } from "../constants/GuildPowerupsConstants";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import { getGuildPowerupsBoostInfoText } from "../utils/getGuildPowerupsBoostInfoText";
import { BoostGemIcon } from "../../../../design/components/Icon/native/redesign/generated/BoostGemIcon";
import { Text } from "../../../../design/components/Text/native/Text";
const useStyles = createStyles({
container: {
flex: 1,
alignItems: "center",
justifyContent: "center",
paddingVertical: Module712.space.PX_12
},
headerContainer: {
flexDirection: "row",
alignItems: "center",
justifyContent: "center",
display: "flex"
}
});
export default function GuildPowerupsBoostInfo(props) {
const { count, type } = props;
const styles = useStyles();
const guildPowerupsBoostInfoText = getGuildPowerupsBoostInfoText(count, type);
return <View style={styles.container} accessible accessibilityLabel={`${count}, ${guildPowerupsBoostInfoText}`}>
<View style={styles.headerContainer} importantForAccessibility="no-hide-descendants" accessible={false}>
<BoostGemIcon size="sm" color={type === BoostInfoType.AVAILABLE ? Module712.unsafe_rawColors.GUILD_BOOSTING_PINK : Module712.colors.TEXT_MUTED} />
<Text variant="text-lg/medium" color={type === BoostInfoType.AVAILABLE ? "text-strong" : "text-subtle"} importantForAccessibility="no-hide-descendants">{count}</Text>
</View>
<Text variant="text-md/normal" color="text-subtle" importantForAccessibility="no-hide-descendants">{guildPowerupsBoostInfoText}</Text>
</View>;
};
@@ -0,0 +1,12 @@
// Metro module 15144 (f15145).
import { useMemo } from "react";
import { GuildPowerupNotificationPopoutType } from "../constants/GuildPowerupsNotification";
import useGuildPowerupsCoachmark from "./hooks/useGuildPowerupsCoachmark";
export default function GuildPowerupsBoostToUnlockCoachmark({ guildId, powerup, targetRef, markAsDismissed }) {
useGuildPowerupsCoachmark(targetRef, guildId, useMemo(() => ({
type: GuildPowerupNotificationPopoutType.BOOST_TO_UNLOCK,
powerup,
markAsDismissed
}), [powerup, markAsDismissed]));
return null;
};
@@ -0,0 +1,202 @@
// Metro module 11610 (f11611).
import { View } from "react-native";
import AccessibilityStore from "../../../a11y/AccessibilityStore";
import { GAME_SERVER_POWERUP_SKU_ID } from "../../game_server/GameServerConstants";
import { GUILD_POWERUP_CONFIGURABLE_SKUS_DESKTOP, GuildPowerupType } from "../constants/GuildPowerupsConstants";
import { jsx } from "react/jsx-runtime";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import usePowerupActiveStatus from "../hooks/usePowerupActiveStatus";
import useGuildPowerupRollbackEnabled from "../hooks/useGuildPowerupRollbackEnabled";
import { useCalculatePowerupCardStatus } from "../utils/useCalculatePowerupCardStatus";
import useGetGuildPowerupBannerImage from "../hooks/useGetGuildPowerupBannerImage";
import { useStateFromStores } from "../../../../_bundle/Module589";
import GuildPowerupsBoostGem from "./GuildPowerupsBoostGem";
import { GameServerHostingRive } from "../../../../_bundle/Module3901";
import GuildPowerupsImage from "./GuildPowerupsImage";
import { Text } from "../../../../design/components/Text/native/Text";
import { GuildPowerupsCardFooter } from "./GuildPowerupsCardFooter";
import useGuildPowerupLevelPerks from "../hooks/useGuildPowerupLevelPerks";
import { getIconForPerk } from "../../../guild_boosting/native/GuildBoostingMarketingUtils";
import { CircleInformationIcon } from "../../../../design/components/Icon/native/redesign/generated/CircleInformationIcon";
import { intl } from "../../../../intl/index.native";
import GuildPowerups_messages from "../GuildPowerups.messages";
import useHasAllocateBoostPermission from "../hooks/useHasAllocateBoostPermission";
import useGuildPowerupCardFooterConfig from "../hooks/useGuildPowerupCardFooterConfig";
import { GUILD_POWERUP_TAG_SKU_ID } from "../../../../_bundle/Module4080";
import { canUseMobileServerTagSettings } from "../../../guild_settings/GuildSettingsServerTagUtils";
import useCanGuildPowerupBeToggled from "../hooks/useCanGuildPowerupBeToggled";
import useGuildPowerupOnActivate from "./hooks/useGuildPowerupOnActivate";
import useGuildPowerupOnShowDeactivate from "./hooks/useGuildPowerupOnShowDeactivate";
import useGuildPowerupConfigureCallback from "./hooks/useGuildPowerupConfigureCallback";
import GuildPowerupsDisabledWarning from "./GuildPowerupsDisabledWarning";
import { Button } from "../../../../design/components/Button/native/Button.native";
import { useLogPowerupModalOpened, ModalType } from "../analytics/GuildPowerupAnalytics";
import { BottomSheet } from "../../../../design/components/Sheet/native/BottomSheet.native";
let useStyles, GuildPowerupsBottomSheetLevelBody, GuildPowerupsBottomSheetBody, GuildPowerupsBottomSheetFooter;
const GuildPowerupsBottomSheetHeader = function GuildPowerupsBottomSheetHeader(props) {
const { guildId, powerup } = props;
const styles2 = useStyles();
const calculatePowerupCardStatus = useCalculatePowerupCardStatus(powerup, usePowerupActiveStatus(guildId, powerup), useGuildPowerupRollbackEnabled(guildId, powerup, "GuildPowerupsBottomSheet"));
let imageUrl = useGetGuildPowerupBannerImage(powerup, true);
if (imageUrl == null) {
imageUrl = "";
}
const stateFromStores = useStateFromStores([AccessibilityStore], () => AccessibilityStore.useReducedMotion);
const costDecorator = powerup.skuId === GAME_SERVER_POWERUP_SKU_ID ? "+" : void 0;
const skuId = powerup.skuId;
return <View>
{powerup.type === GuildPowerupType.LEVEL ? <GuildPowerupsBoostGem style={styles2.gemContainer} /> : skuId === GAME_SERVER_POWERUP_SKU_ID ? <View style={styles2.image}>
<GameServerHostingRive stateMachine="SM_Auto" dataBinding={{
reducedMotion: stateFromStores
}} />
</View> : <GuildPowerupsImage imageUrl={imageUrl} style={styles2.image} isAnimated />}
<View style={styles2.headerContainer}>
<Text variant="heading-xl/bold" accessibilityRole="header">{powerup.title}</Text>
<GuildPowerupsCardFooter cost={powerup.cost} costDecorator={costDecorator} status={calculatePowerupCardStatus} style={styles2.statusContainer} />
</View>
</View>;
};
GuildPowerupsBottomSheetLevelBody = function GuildPowerupsBottomSheetLevelBody(props) {
const powerup = props.powerup;
const styles = useStyles();
return <View style={styles.levelContainer}>
{useGuildPowerupLevelPerks(powerup).map((item, index) => <View key={`perk-${index}-${item.perkIcon}`} style={styles.perkContainer}>
<Text style={styles.perkText} variant="text-md/medium">{item.description}</Text>
{jsx(getIconForPerk(item.perkIcon), {
style: styles.perkIcon
})}
</View>)}
</View>;
};
GuildPowerupsBottomSheetBody = function GuildPowerupsBottomSheetBody(props) {
const powerup = props.powerup;
const styles2 = useStyles();
const type = powerup.type;
if (GuildPowerupType.PERK === type) {
return <>
<Text style={styles2.description} variant="text-md/medium">{powerup.description}</Text>
{powerup.deactivationCooldownPeriodDays != null && powerup.deactivationCooldownPeriodDays > 0 && <View style={styles2.cooldownInfo}>
<CircleInformationIcon size="xs" color={Module712.colors.TEXT_MUTED} />
<Text variant="text-sm/medium" color="text-muted">
{intl.formatToPlainString(GuildPowerups_messages.GMhQcE, {
cooldownDays: powerup.deactivationCooldownPeriodDays
})}
</Text>
</View>}
</>;
}
if (GuildPowerupType.LEVEL === type) {
return <GuildPowerupsBottomSheetLevelBody powerup={powerup} />;
}
};
GuildPowerupsBottomSheetFooter = function GuildPowerupsBottomSheetFooter(props) {
const { guildId, powerup } = props;
const styles2 = useStyles();
const hasAllocateBoostPermission = useHasAllocateBoostPermission(guildId);
const guildPowerupCardFooterConfig = useGuildPowerupCardFooterConfig(guildId, powerup);
let showToggleButton = guildPowerupCardFooterConfig.showToggleButton;
let showConfigureButton = guildPowerupCardFooterConfig.showConfigureButton;
const isPowerupActive = guildPowerupCardFooterConfig.isPowerupActive;
if (showConfigureButton) {
showConfigureButton = powerup.skuId !== GUILD_POWERUP_TAG_SKU_ID || canUseMobileServerTagSettings(guildId);
}
const canGuildPowerupBeToggled = useCanGuildPowerupBeToggled(guildId, powerup, isPowerupActive);
const { disabled, reason } = canGuildPowerupBeToggled;
const guildPowerupOnActivate = useGuildPowerupOnActivate(guildId, powerup);
const { onActivate, isLoading } = guildPowerupOnActivate;
let c19031_2 = useGuildPowerupOnShowDeactivate(guildId, powerup);
const guildPowerupConfigureCallback = useGuildPowerupConfigureCallback(guildId, powerup);
if (hasAllocateBoostPermission) {
const r53 = GUILD_POWERUP_CONFIGURABLE_SKUS_DESKTOP.has(powerup.skuId);
const r74 = [((showConfigureButton ? !showConfigureButton : isPowerupActive) && powerup.type === GuildPowerupType.PERK && r53 || powerup.skuId === GAME_SERVER_POWERUP_SKU_ID) && <Text style={styles2.description} variant="text-md/bold">
{intl.string(GuildPowerups_messages["jo5++h"])}
</Text>, disabled && reason != null && <GuildPowerupsDisabledWarning text={reason} />, , ,];
if (showConfigureButton) {
showConfigureButton = <Button variant="primary" text={intl.string(GuildPowerups_messages.g5Ds69)} onPress={guildPowerupConfigureCallback} />;
}
r74[2] = showConfigureButton;
if (showToggleButton) {
showToggleButton = powerup.skuId !== GAME_SERVER_POWERUP_SKU_ID;
}
if (showToggleButton) {
showToggleButton = <Button variant={isPowerupActive ? "secondary" : "primary"} text={isPowerupActive ? intl.string(GuildPowerups_messages.TZsu1U) : intl.string(GuildPowerups_messages.gSxlHf)} loading={isLoading} disabled={disabled} onPress={() => {
if (isPowerupActive) {
if (c19031_2 != null) {
c19031_2();
}
} else if (onActivate != null) {
onActivate();
}
}} />;
}
r74[3] = showToggleButton;
return <View style={styles2.footerContainer}>{r74}</View>;
}
return null;
};
useStyles = createStyles({
container: {
padding: Module712.space.PX_16,
gap: Module712.space.PX_16
},
headerContainer: {
marginTop: Module712.space.PX_24,
alignItems: "center"
},
statusContainer: {
justifyContent: "center",
gap: Module712.space.PX_8
},
levelContainer: {
flexDirection: "column",
gap: Module712.space.PX_8,
marginTop: Module712.space.PX_16
},
perkContainer: {
flexDirection: "row",
alignItems: "center",
justifyContent: "space-between"
},
perkIcon: {
width: 20,
height: 20
},
perkText: {
marginStart: Module712.space.PX_8
},
footerContainer: {
gap: Module712.space.PX_12,
marginTop: Module712.space.PX_8
},
image: {
width: "100%",
height: 160
},
description: {
marginHorizontal: Module712.space.PX_24,
textAlign: "center"
},
cooldownInfo: {
flexDirection: "row",
alignItems: "center",
justifyContent: "center",
gap: Module712.space.PX_4,
marginTop: Module712.space.PX_8
},
gemContainer: {
marginTop: Module712.space.PX_16
}
});
export default function GuildPowerupsBottomSheet(props) {
const { guildId, powerup } = props;
const styles2 = useStyles();
useLogPowerupModalOpened(guildId, powerup, ModalType.DETAIL);
return <BottomSheet startExpanded>
<View style={styles2.container}>
<GuildPowerupsBottomSheetHeader guildId={guildId} powerup={powerup} />
<GuildPowerupsBottomSheetBody guildId={guildId} powerup={powerup} />
<GuildPowerupsBottomSheetFooter guildId={guildId} powerup={powerup} />
</View>
</BottomSheet>;
};
@@ -0,0 +1,24 @@
// Metro module 11659 (f11660).
import { View } from "react-native";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module689 from "../../../../_bundle/Module689";
import Module712 from "../../../../_bundle/Module712";
import { Card } from "../../../../design/components/Card/native/Card.native";
const useStyles = createStyles({
cardActive: {
borderColor: Module689(Module712.unsafe_rawColors.GREEN_360).alpha(0.35).hex()
},
cardExpiring: {
borderColor: Module689(Module712.unsafe_rawColors.YELLOW_300).alpha(0.35).hex()
},
cardRemoving: {
borderColor: Module689(Module712.unsafe_rawColors.YELLOW_300).alpha(0.35).hex()
}
});
export default function GuildPowerupsCard(props) {
const { children, containerStyle, status, style, ...props2 } = props;
const styles = useStyles();
return <View style={containerStyle}>
<Card border="faint" radius={16} shadow="none" {...props2} style={[status?.type === "active" && styles.cardActive, status?.type === "expiring" && styles.cardExpiring, status?.type === "removing" && styles.cardRemoving, style]}>{children}</Card>
</View>;
};
@@ -0,0 +1,102 @@
// Metro module 11616 (f11617).
import { View } from "react-native";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import { CircleCheckIcon } from "../../../../design/components/Icon/native/redesign/generated/CircleCheckIcon";
import Module712 from "../../../../_bundle/Module712";
import { Text } from "../../../../design/components/Text/native/Text";
import { CircleErrorIcon } from "../../../../design/components/Icon/native/redesign/generated/CircleErrorIcon";
import { intl, t } from "../../../../intl/index.native";
import GuildPowerups_messages from "../GuildPowerups.messages";
import entitlementExpirationDateToString from "../utils/entitlementExpirationDateToString";
import getGuildPowerupFormattedDateString from "../utils/getGuildPowerupFormattedDateString";
import { BoostGemIcon } from "../../../../design/components/Icon/native/redesign/generated/BoostGemIcon";
let useStyles, GuildPowerupCardFooterExpiring, GuildPowerupCardFooterRemoving, GuildPowerupCardFooterStatus, GuildPowerupCardFooterCost;
const GuildPowerupCardFooterActive = function GuildPowerupCardFooterActive(props) {
const text = props.text;
return <View style={useStyles().inline}>
<CircleCheckIcon size="xs" color={Module712.colors.STATUS_POSITIVE} />
<Text color="status-positive" variant="text-sm/bold">{text}</Text>
</View>;
};
GuildPowerupCardFooterExpiring = function GuildPowerupCardFooterExpiring(props) {
const dateString = props.dateString;
return <View style={useStyles().inline}>
<CircleErrorIcon size="xs" color={Module712.colors.STATUS_WARNING} />
<Text color="text-feedback-warning" variant="text-sm/bold">
{intl.formatToMarkdownString(GuildPowerups_messages["ol/ao/"], {
dateString: entitlementExpirationDateToString(dateString)
})}
</Text>
</View>;
};
GuildPowerupCardFooterRemoving = function GuildPowerupCardFooterRemoving(props) {
const removingAt = props.removingAt;
return <View style={useStyles().inline}>
<CircleErrorIcon size="xs" color={Module712.colors.STATUS_WARNING} />
<Text color="text-feedback-warning" variant="text-sm/bold">
{intl.formatToPlainString(GuildPowerups_messages["6e2ry1"], {
dateString: getGuildPowerupFormattedDateString(removingAt)
})}
</Text>
</View>;
};
GuildPowerupCardFooterStatus = function GuildPowerupCardFooterStatus(props) {
const status = props.status;
if (status == null) {
return null;
}
const type = status.type;
if (type === "expiring") {
return <GuildPowerupCardFooterExpiring dateString={status.expiringAt} />;
}
if (type === "removing") {
return <GuildPowerupCardFooterRemoving removingAt={status.removingAt} />;
}
if (type === "active") {
return <GuildPowerupCardFooterActive text={status.statusText} />;
}
};
GuildPowerupCardFooterCost = function GuildPowerupCardFooterCost(props) {
const cost = props.cost;
let costDecorator = props.costDecorator;
const styles = useStyles();
const r2 = cost == null;
let r17 = null;
if (!r2) {
const r27 = [<BoostGemIcon size="sm" color={Module712.unsafe_rawColors.GUILD_BOOSTING_PINK} />, ,];
const t2Wbo1 = t.t2Wbo1;
if (costDecorator == null) {
costDecorator = "";
}
r27[1] = <Text variant="heading-sm/semibold" color="text-subtle">
{intl.formatToPlainString(t2Wbo1, {
required: cost,
decorator: costDecorator
})}
</Text>;
r17 = <View style={styles.inline}>{r27}</View>;
}
return r17;
};
useStyles = createStyles({
container: {
justifyContent: "space-between"
},
inline: {
flexDirection: "row",
alignItems: "center",
gap: 2
}
});
export { GuildPowerupCardFooterActive };
export { GuildPowerupCardFooterExpiring };
export { GuildPowerupCardFooterRemoving };
export { GuildPowerupCardFooterStatus };
export { GuildPowerupCardFooterCost };
export function GuildPowerupsCardFooter(props) {
const styles = useStyles();
return <View style={[styles.inline, styles.container, props.style]}>
<GuildPowerupCardFooterCost cost={props.cost} costDecorator={props.costDecorator} />
<GuildPowerupCardFooterStatus status={props.status} />
</View>;
}
@@ -0,0 +1,75 @@
// Metro module 15183 (f15184).
import { useContext, useRef, useCallback } from "react";
import { View } from "react-native";
import { CHANNEL_MARGIN_VERTICAL } from "../../../channel_list_v2/native/RedesignChannelListConstants";
import { GuildPowerupNotificationIndicatorType } from "../constants/GuildPowerupsNotification";
import { CircleErrorIcon } from "../../../../design/components/Icon/native/redesign/generated/CircleErrorIcon";
import Module712 from "../../../../_bundle/Module712";
import { Badge } from "../../../../design/void/native";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import useGuildPowerupsCoachmark from "./hooks/useGuildPowerupsCoachmark";
import { SidebarCoachmarkOverlayContext } from "../../../main_tabs_v2/native/panels/SidebarCoachmarkOverlay.native";
import { LayerContext } from "../../../../design/components/Layers/native/LayerContext.native";
import useGuildPowerupsNotifications from "../hooks/useGuildPowerupsNotifications";
import useGuildPowerupsNewBadge from "../hooks/useGuildPowerupsNewBadge";
import BaseChannelItem, { ChannelModes, BaseChannelName, BaseChannelIcon } from "../../../guild_sidebar/native/BaseChannelItem";
import openGuildPowerupsModal from "./utils/openGuildPowerupsModal";
import AnalyticsLocation from "../../../app_analytics/AnalyticsLocation";
import { intl } from "../../../../intl/index.native";
import GuildPowerups_messages from "../GuildPowerups.messages";
import { BoostTier2Icon } from "../../../../design/components/Icon/native/redesign/generated/BoostTier2Icon";
import { NewBadge } from "../../../channel_list_v2/native/components/index";
let useStyles, GuildPowerupsCoachmarkHost, GuildPowerupsCoachmark;
const GuildPowerupsChannelRowIndicator = function GuildPowerupsChannelRowIndicator(props) {
const indicator = props.indicator;
if (indicator == null) {
return null;
}
const type = indicator.type;
if (GuildPowerupNotificationIndicatorType.WARNING === type) {
return <CircleErrorIcon color={Module712.colors.STATUS_WARNING} size="sm" />;
}
if (GuildPowerupNotificationIndicatorType.UNREAD === type) {
return <Badge value={indicator.count} isMentionLowImportance />;
}
return null;
};
GuildPowerupsCoachmarkHost = function GuildPowerupsCoachmarkHost(a0) {
useGuildPowerupsCoachmark(a0.targetRef, a0.guildId, a0.popout);
return null;
};
GuildPowerupsCoachmark = function GuildPowerupsCoachmark(props) {
const { targetRef, guildId: guildId2, popout } = props;
const context = useContext(SidebarCoachmarkOverlayContext);
const r18 = <GuildPowerupsCoachmarkHost targetRef={targetRef} guildId={guildId2} popout={popout} />;
return context != null ? <LayerContext.Provider value={context}>{r18}</LayerContext.Provider> : r18;
};
useStyles = createStyles({
container: {
marginVertical: CHANNEL_MARGIN_VERTICAL,
marginHorizontal: 8,
borderRadius: Module712.radii.md
}
});
export default function GuildPowerupsChannelRow(props) {
const guildId = props.guildId;
const styles = useStyles();
const ref = useRef(null);
const guildPowerupsNotifications = useGuildPowerupsNotifications(guildId);
const guildPowerupsNewBadge = useGuildPowerupsNewBadge(guildId, guildPowerupsNotifications?.indicator != null || guildPowerupsNotifications?.popout != null);
const { showNewBadgeOnRow, dismissNewBadgeIfShown } = guildPowerupsNewBadge;
const unread = guildPowerupsNotifications?.showUnread === true;
const mode = unread ? ChannelModes.UNREAD_IMPORTANT : ChannelModes.DEFAULT;
return <View ref={ref} collapsable={false}>
<GuildPowerupsCoachmark targetRef={ref} guildId={guildId} popout={guildPowerupsNotifications?.popout} />
<BaseChannelItem onPress={useCallback(() => {
dismissNewBadgeIfShown();
openGuildPowerupsModal({
guildId,
analyticsLocation: AnalyticsLocation.GUILD_POWERUPS_CHANNEL_LIST_ROW
});
}, [guildId, dismissNewBadgeIfShown])} style={styles.container} accessible mode={mode} unread={unread} accessibilityLabel={intl.string(GuildPowerups_messages.yv3DJJ)} accessibilityState={{
selected: false
}} name={<BaseChannelName name={intl.string(GuildPowerups_messages.yv3DJJ)} mode={mode} />} icon={<BaseChannelIcon mode={mode} IconComponent={BoostTier2Icon} />} channelInfo={showNewBadgeOnRow ? <NewBadge /> : <GuildPowerupsChannelRowIndicator indicator={guildPowerupsNotifications?.indicator} />} />
</View>;
};
@@ -0,0 +1,57 @@
// Metro module 11631 (f11632).
import { View } from "react-native";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import useGuildPowerupOnDeactivate from "../hooks/useGuildPowerupOnDeactivate";
import useDeactivateWarningText from "../hooks/useDeactivateWarningText";
import { useLogPowerupModalOpened, ModalType } from "../analytics/GuildPowerupAnalytics";
import { AlertModal } from "../../../../design/components/AlertModal/native/AlertModal.native";
import { CircleErrorIcon } from "../../../../design/components/Icon/native/redesign/generated/CircleErrorIcon";
import { intl, t } from "../../../../intl/index.native";
import GuildPowerups_messages from "../GuildPowerups.messages";
import { AlertActions, AlertActionButton } from "../../../../design/components/AlertModal/native/AlertModal.native";
import { Text } from "../../../../design/components/Text/native/Text";
const useStyles = createStyles({
headerContainer: {
width: 64,
height: 64,
alignItems: "center",
justifyContent: "center",
borderRadius: Module712.radii.round,
backgroundColor: Module712.colors.BACKGROUND_MOD_SUBTLE,
alignSelf: "center"
},
extraContentContainer: {
paddingHorizontal: Module712.space.PX_12
},
warningText: {
textAlign: "center"
}
});
export default function GuildPowerupsDeactivateAlert(props) {
const { guildId, powerup } = props;
const styles = useStyles();
const guildPowerupOnDeactivate = useGuildPowerupOnDeactivate(guildId, powerup);
const { onDeactivate, error } = guildPowerupOnDeactivate;
const deactivateWarningText = useDeactivateWarningText(guildId, powerup);
useLogPowerupModalOpened(guildId, powerup, ModalType.DEACTIVATE);
return <AlertModal header={<View style={styles.headerContainer}>
<CircleErrorIcon color={Module712.colors.INTERACTIVE_ICON_DEFAULT} size="custom" style={{
width: 40,
height: 40
}} />
</View>} title={intl.formatToPlainString(GuildPowerups_messages.iEBw1M, {
perk: powerup.title
})} content={intl.formatToPlainString(GuildPowerups_messages["7o0K+2"], {
perk: powerup.title
})} actions={<AlertActions>
{error != null && <Text style={styles.warningText} variant="text-xs/semibold" color="text-feedback-critical">{error}</Text>}
<AlertActionButton key="deactivate" variant="destructive" onPress={(event) => {
event.stopPropagation();
return onDeactivate();
}} text={intl.string(GuildPowerups_messages.PYPdl4)} />
<AlertActionButton key="cancel" onPress={() => {}} variant="secondary" text={intl.string(t["ETE/oC"])} />
</AlertActions>} extraContent={<View style={styles.extraContentContainer}>
{deactivateWarningText.map((item, index) => <Text key={index} style={styles.warningText} variant={item.critical ? "text-sm/semibold" : "text-sm/medium"} color={item.critical ? "text-feedback-critical" : void 0}>{item.text}</Text>)}
</View>} />;
};
@@ -0,0 +1,29 @@
// Metro module 11636 (f11637).
import { View } from "react-native";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import { WarningIcon } from "../../../../design/components/Icon/native/redesign/generated/WarningIcon";
import { Text } from "../../../../design/components/Text/native/Text";
const useStyles = createStyles({
container: {
flexDirection: "row",
alignItems: "center",
gap: Module712.space.PX_8,
borderColor: Module712.colors.STATUS_WARNING_BACKGROUND,
borderWidth: 1,
borderRadius: Module712.radii.lg,
padding: Module712.space.PX_12,
backgroundColor: Module712.colors.BACKGROUND_FEEDBACK_WARNING
},
text: {
flex: 1
}
});
export default function GuildPowerupsDisabledWarning(props) {
const text = props.text;
const styles = useStyles();
return <View style={styles.container}>
<WarningIcon color={Module712.colors.TEXT_FEEDBACK_WARNING} size="md" />
<Text style={styles.text} variant="text-md/semibold" color="text-feedback-warning">{text}</Text>
</View>;
};
@@ -0,0 +1,32 @@
// Metro module 11665 (f11666).
import { View } from "react-native";
import AccessibilityStore from "../../../a11y/AccessibilityStore";
import GameServerStore from "../../game_server/GameServerStore";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import { useStateFromStores } from "../../../../_bundle/Module589";
import useGameServerPowerupStatus from "../../game_server/hooks/useGameServerPowerupStatus";
import useGameServerPerk from "../../game_server/hooks/useGameServerPerk";
import useGuildPowerupOnShowMore from "./hooks/useGuildPowerupOnShowMore";
import GuildPowerupsPerkCard from "./GuildPowerupsPerkCard";
import { GameServerHostingRive } from "../../../../_bundle/Module3901";
const useStyles = createStyles({
riveContainer: {
flex: 1,
paddingVertical: Module712.space.PX_8
}
});
export default function GuildPowerupsGameServerCard(props) {
const guildId = props.guildId;
const styles = useStyles();
const stateFromStores = useStateFromStores([GameServerStore], () => GameServerStore.getStateForGuild(guildId));
const gameServerPowerupStatus = useGameServerPowerupStatus(guildId);
const gameServerPerk = useGameServerPerk(guildId);
const stateFromStores2 = useStateFromStores([AccessibilityStore], () => AccessibilityStore.useReducedMotion);
const guildPowerupOnShowMore = useGuildPowerupOnShowMore(guildId, gameServerPerk);
return stateFromStores == null ? null : gameServerPerk == null ? null : <GuildPowerupsPerkCard title={gameServerPerk.title} description={gameServerPerk.description} cost={gameServerPerk.cost} costDecorator="+" riveComponent={<View style={styles.riveContainer}>
<GameServerHostingRive stateMachine="SM_Auto" dataBinding={{
reducedMotion: stateFromStores2
}} />
</View>} badge="beta" status={gameServerPowerupStatus} onPress={guildPowerupOnShowMore} />;
};
@@ -0,0 +1,23 @@
// Metro module 11615 (f11616).
import AccessibilityStore from "../../../a11y/AccessibilityStore";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import { useStateFromStores } from "../../../../_bundle/Module589";
import { isAndroid } from "../../../../_bundle/Module501";
import Module6208 from "../../../../_bundle/Module6208";
import FastImage from "../../../../components_native/common/FastImage";
const useStyles = createStyles({
image: {
width: "75%",
height: "100%",
alignSelf: "center",
resizeMode: "contain"
}
});
export default function GuildPowerupsImage(props) {
const { imageUrl, isAnimated = true, style } = props;
const styles = useStyles();
const stateFromStores = useStateFromStores([AccessibilityStore], () => AccessibilityStore.useReducedMotion);
return isAndroid() && (isAnimated && !stateFromStores) ? <Module6208 style={[styles.image, style]} url={imageUrl} /> : <FastImage style={[styles.image, style]} source={{
uri: imageUrl
}} />;
};
@@ -0,0 +1,168 @@
// Metro module 11656 (f11657).
import { useMemo, useCallback } from "react";
import { View } from "react-native";
import { LevelCardPosition, PowerupActiveStatusType } from "../constants/GuildPowerupsConstants";
import { BoostedGuildTiers, HorizontalGradient } from "../../../../Constants";
import { TIER_CARDS } from "../../../guild_boosting/GuildBoostingMarketingConstants";
import { jsx } from "react/jsx-runtime";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import Module4611 from "../../../../_bundle/Module4611";
import { BoostGemIcon } from "../../../../design/components/Icon/native/redesign/generated/BoostGemIcon";
import useGuildPowerupColorConfig from "./hooks/useGuildPowerupColorConfig";
import { getIconForPerk } from "../../../guild_boosting/native/GuildBoostingMarketingUtils";
import { Text } from "../../../../design/components/Text/native/Text";
import { intl } from "../../../../intl/index.native";
import GuildPowerups_messages from "../GuildPowerups.messages";
import usePowerupActiveStatus from "../hooks/usePowerupActiveStatus";
import { useCalculatePowerupCardStatus } from "../utils/useCalculatePowerupCardStatus";
import useGuildPowerupOnShowMore from "./hooks/useGuildPowerupOnShowMore";
import GuildPowerupsCard from "./GuildPowerupsCard";
import { GuildPowerupsCardFooter } from "./GuildPowerupsCardFooter";
let useStyles, GuildPowerupLevelBody;
const GuildLevelPowerupHeader = function GuildLevelPowerupHeader(props) {
const { active, nextActive, position } = props;
const styles2 = useStyles();
return <View style={styles2.progressContainer}>
<Module4611 start={HorizontalGradient.START} end={HorizontalGradient.END} colors={active && nextActive !== false ? [styles2.boostContainerActive.backgroundColor, styles2.boostContainerActive.backgroundColor] : active && nextActive === false ? [styles2.boostContainerActive.backgroundColor, styles2.boostContainerInactive.backgroundColor] : [styles2.boostContainerInactive.backgroundColor, styles2.boostContainerInactive.backgroundColor]} style={[styles2.progress, position === LevelCardPosition.START && styles2.progressStart, position === LevelCardPosition.END && styles2.progressEnd]} />
<View style={[styles2.boostContainer, styles2.boostContainerBackground]} />
<View style={[styles2.boostContainer, active && styles2.boostContainerActive]}>
<BoostGemIcon size="xs" color={active ? Module712.colors.WHITE : Module712.colors.TEXT_MUTED} />
</View>
</View>;
};
GuildPowerupLevelBody = function GuildPowerupLevelBody(props) {
const { isActive, index } = props;
const styles = useStyles();
const guildPowerupColorConfig = useGuildPowerupColorConfig(isActive);
const { textColor, iconColor } = guildPowerupColorConfig;
return <View style={styles.perkRowContainer}>
{useMemo(() => {
const r7 = TIER_CARDS[index];
if (r7 == null) {
return [];
}
const r11 = r7.tier === BoostedGuildTiers.TIER_3 ? r7.perks.slice(0, -1) : r7.perks;
return r11 == null ? void 0 : r11.map((item, a1) => <View key={`perk-${index}-${a1}`} style={styles.perkRowStyle}>
{jsx(getIconForPerk(item.perkIcon), {
color: iconColor,
size: "sm"
})}
<Text color={textColor} style={styles.perkText} variant="text-sm/medium">
{item.getCopy()}
</Text>
</View>);
}, [index, iconColor, textColor, styles])}
<View style={styles.perkRow}>
<Text color={textColor} variant="text-sm/medium">
{intl.string(GuildPowerups_messages.nIj3LZ)}
</Text>
</View>
</View>;
};
useStyles = createStyles({
cardContainer: {
flex: 1
},
card: {
padding: 0,
overflow: "hidden",
flex: 1
},
progressContainer: {
marginVertical: Module712.space.PX_24,
position: "relative"
},
progress: {
height: 6,
backgroundColor: Module712.colors.BACKGROUND_MOD_SUBTLE
},
progressStart: {
marginStart: Module712.space.PX_16
},
progressEnd: {
marginEnd: Module712.space.PX_16,
borderTopEndRadius: Module712.radii.round,
borderBottomEndRadius: Module712.radii.round
},
boostContainerBackground: {
backgroundColor: Module712.colors.CARD_BACKGROUND_DEFAULT,
width: 28,
height: 28,
start: Module712.space.PX_16 - 2,
top: -11
},
boostContainer: {
padding: Module712.space.PX_4,
borderRadius: Module712.radii.round,
position: "absolute",
width: 24,
height: 24,
top: -9,
start: Module712.space.PX_16,
alignItems: "center",
justifyContent: "center",
backgroundColor: Module712.colors.BACKGROUND_MOD_SUBTLE
},
boostContainerActive: {
backgroundColor: Module712.unsafe_rawColors.GUILD_BOOSTING_PINK
},
boostContainerInactive: {
backgroundColor: Module712.colors.BACKGROUND_MOD_SUBTLE
},
contentContainer: {
padding: Module712.space.PX_16,
paddingTop: 0,
flex: 1
},
perkRowContainer: {
flexDirection: "column",
marginTop: Module712.space.PX_16,
gap: Module712.space.PX_8
},
perkRow: {
flexDirection: "row",
alignItems: "center"
},
perkRowStyle: {
flexDirection: "row",
alignItems: "center"
},
perkText: {
marginStart: Module712.space.PX_8
},
footerContainer: {
marginTop: "auto",
paddingTop: Module712.space.PX_16
}
});
export default function GuildPowerupsLevelCard(props) {
const { guildId, powerup, nextPowerup, index: index2, isScrollingRef } = props;
const styles2 = useStyles();
const powerupActiveStatus2 = usePowerupActiveStatus(guildId, powerup);
const powerupActiveStatus = usePowerupActiveStatus(guildId, nextPowerup);
const calculatePowerupCardStatus = useCalculatePowerupCardStatus(powerup, powerupActiveStatus2, false);
const type2 = powerupActiveStatus2.type;
const INACTIVE = PowerupActiveStatusType.INACTIVE;
const type = powerupActiveStatus.type;
const INACTIVE2 = PowerupActiveStatusType.INACTIVE;
const guildPowerupOnShowMore = useGuildPowerupOnShowMore(guildId, powerup);
let c19061_1 = guildPowerupOnShowMore;
const position = index2 === 0 ? LevelCardPosition.START : nextPowerup == null ? LevelCardPosition.END : LevelCardPosition.MIDDLE;
const active = type2 !== INACTIVE;
return <GuildPowerupsCard containerStyle={styles2.cardContainer} style={styles2.card} onPress={useCallback(() => {
if (!isScrollingRef.current) {
c19061_1();
}
}, [isScrollingRef, guildPowerupOnShowMore])} status={calculatePowerupCardStatus}>
<GuildLevelPowerupHeader position={position} active={active} nextActive={nextPowerup != null ? type !== INACTIVE2 : void 0} />
<View style={styles2.contentContainer}>
<Text variant="heading-lg/semibold">{powerup.title}</Text>
<GuildPowerupLevelBody isActive={active} index={index2} />
<View style={styles2.footerContainer}>
<GuildPowerupsCardFooter cost={powerup.cost} status={calculatePowerupCardStatus} />
</View>
</View>
</GuildPowerupsCard>;
};
export { GuildPowerupLevelBody };
@@ -0,0 +1,45 @@
// Metro module 11654 (f11655).
import { useMemo, useRef, useCallback } from "react";
import { View } from "react-native";
import Module712 from "../../../../_bundle/Module712";
import { isIOS } from "../../../../_bundle/Module501";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import GuildPowerupsSectionHeader from "./GuildPowerupsSectionHeader";
import { intl } from "../../../../intl/index.native";
import GuildPowerups_messages from "../GuildPowerups.messages";
import { MarketingCardsScroller } from "../../../guild_boosting/native/marketing_redesign/MarketingCardsScroller";
import GuildPowerupsLevelCard from "./GuildPowerupsLevelCard";
const PX_16 = Module712.space.PX_16;
const useStyles = createStyles({
cardContainer: {
width: 250,
marginEnd: PX_16,
flex: 1
},
scroller: {
height: isIOS() ? 300 : 325,
paddingBottom: Module712.space.PX_8
},
scrollerContent: {
paddingHorizontal: Module712.space.PX_16
}
});
export default function GuildPowerupsLevelsSection(props) {
let ref;
const { guildId, listings } = props;
ref = void 0;
const styles = useStyles();
const memo = useMemo(() => listings.filter((listing) => listing.type === "singleLevel").map((item) => item.powerup), [listings]);
ref = useRef(false);
const callback = useCallback((a0) => {
ref.current = a0;
}, []);
return <>
<GuildPowerupsSectionHeader title={intl.string(GuildPowerups_messages["TXY/b0"])} description={intl.string(GuildPowerups_messages.aJv4PB)} />
<MarketingCardsScroller cardMarginRight={PX_16} cardWidth={250} contentContainerStyle={styles.scrollerContent} itemCount={memo.length} onScrollingChange={callback} style={styles.scroller}>
{memo.map((item, a1) => <View key={item.skuId} style={styles.cardContainer}>
<GuildPowerupsLevelCard guildId={guildId} powerup={item} nextPowerup={memo[a1 + 1]} index={a1} isScrollingRef={ref} />
</View>)}
</MarketingCardsScroller>
</>;
};
@@ -0,0 +1,67 @@
// Metro module 12639 (f12640).
import { useEffect } from "react";
import { View } from "react-native";
import GuildPowerupsStore from "../GuildPowerupsStore";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import Module689 from "../../../../_bundle/Module689";
import { Text } from "../../../../design/components/Text/native/Text";
import useMarketablePowerupPerks from "../hooks/useMarketablePowerupPerks";
import { fetchPowerupCatalogForGuild } from "../GuildPowerupsActionCreators";
import useHasAllocateBoostPermission from "../hooks/useHasAllocateBoostPermission";
import { intl } from "../../../../intl/index.native";
import GuildPowerups_messages from "../GuildPowerups.messages";
import orderMarketablePerksForDisplay from "../utils/orderMarketablePerksForDisplay";
let useStyles;
const PerkText = function PerkText(props) {
return <Text color="text-overlay-light" variant="text-sm/semibold">{props.powerup.title}</Text>;
};
useStyles = createStyles({
container: {
padding: Module712.space.PX_12,
backgroundColor: Module689("#000000").alpha(0.18).hex()
},
text: {
textAlign: "center",
color: Module689("#FFFFFF").alpha(0.5).hex()
}
});
export default function GuildPowerupsMarketingHeader(props) {
const guild = props.guild;
const styles = useStyles();
const marketablePowerupPerks = useMarketablePowerupPerks(guild.id);
useEffect(() => {
if (GuildPowerupsStore.shouldFetchCatalogForGuild(guild.id)) {
fetchPowerupCatalogForGuild(guild.id);
}
}, [guild.id]);
if (useHasAllocateBoostPermission(guild.id)) {
let r33 = marketablePowerupPerks?.length;
if (r33 == null) {
r33 = 0;
}
if (r33 !== 0) {
const r48 = GuildPowerups_messages["7lwpzR"];
const r49 = marketablePowerupPerks == null;
let perks = "";
if (!r49) {
const length = marketablePowerupPerks.length;
perks = "";
if (length !== 0) {
const r52 = orderMarketablePerksForDisplay(marketablePowerupPerks);
perks = r52.length === 1 ? <PerkText powerup={r52[0]} /> : intl.format(GuildPowerups_messages.MNO3sG, {
perk1: <PerkText powerup={r52[0]} />,
perk2: <PerkText powerup={r52[1]} />
});
}
}
return <View style={styles.container}>
<Text style={styles.text} variant="text-sm/semibold">
{intl.format(r48, {
perks
})}
</Text>
</View>;
}
}
};
@@ -0,0 +1,147 @@
// Metro module 11572 (f11573).
import { useRef, useEffect, useCallback } from "react";
import { ScrollView, View } from "react-native";
import { BoostInfoType, GuildPowerupType } from "../constants/GuildPowerupsConstants";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import { useGameServerEnabled } from "../../game_server/GameServerExperiment";
import useLoadGuildPowerups from "../hooks/useLoadGuildPowerups";
import { useAutoDismissGuildPowerupsNotifications } from "../hooks/useGuildPowerupsNotifications";
import useShowGuildPowerupRollbackSheet from "./hooks/useShowGuildPowerupRollbackSheet";
import useSafeAreaInsets_native from "../../../safe_area/useSafeAreaInsets.native";
import useAnalyticsLocations, { AnalyticsLocationProvider } from "../../../app_analytics/useAnalyticsLocations";
import { useBuildGuildPowerupsSections } from "../utils/powerupListing";
import openGuildPowerupsBottomSheet from "./utils/openGuildPowerupsBottomSheet";
import openGuildPowerupsMultiPerkBottomSheet from "./utils/openGuildPowerupsMultiPerkBottomSheet";
import ModalActionCreators from "../../../../actions/ModalActionCreators";
import useGuildPowerupsBoostCount from "../hooks/useGuildPowerupsBoostCount";
import { Header } from "../../../../_bundle/Module5150";
import { intl } from "../../../../intl/index.native";
import GuildPowerups_messages from "../GuildPowerups.messages";
import { GenericHeaderTitle } from "../../../main_tabs_v2/native/shared_components/HeaderShared";
import { getHeaderCloseButton } from "../../../../design/components/Navigator/native/NavigatorHeader.native";
import GuildPowerupsBoostInfo from "./GuildPowerupsBoostInfo";
import GuildPowerupsNotificationContainer from "./GuildPowerupsNotificationContainer";
import GuildPowerupsLevelsSection from "./GuildPowerupsLevelsSection";
import GuildPowerupsPerksSection from "./GuildPowerupsPerksSection";
import GuildPowerupsRecentActivitySection from "./GuildPowerupsRecentActivitySection";
import { GuildPowerupsBoostButton } from "./GuildPowerupsBoostButton";
const useStyles = createStyles({
container: {
flex: 1,
backgroundColor: Module712.colors.BACKGROUND_BASE_LOW
},
headerContainer: {
paddingHorizontal: Module712.space.PX_16,
paddingTop: Module712.space.PX_8
},
boostInfoContainer: {
flexDirection: "row",
justifyContent: "space-between",
borderWidth: 1,
borderStyle: "solid",
borderColor: Module712.colors.BORDER_SUBTLE,
marginBottom: Module712.space.PX_16
},
boostInfoSeparator: {
width: 1,
height: "100%",
backgroundColor: Module712.colors.BORDER_SUBTLE
},
scrollView: {
paddingBottom: Module712.space.PX_96
},
boostButtonContainer: {
paddingHorizontal: Module712.space.PX_16,
position: "absolute",
bottom: 0,
left: 0,
right: 0
}
});
export default function GuildPowerupsModal(props) {
const { guildId, analyticsLocation, autoOpenPerkId, autoOpenRequestId } = props;
const gameServerEnabled = useGameServerEnabled(guildId, "GuildPowerupsModal");
useLoadGuildPowerups(guildId);
useAutoDismissGuildPowerupsNotifications(guildId);
useShowGuildPowerupRollbackSheet(guildId, "GuildPowerupsModal", autoOpenPerkId != null);
const bottom = useSafeAreaInsets_native().bottom;
const styles = useStyles();
const analyticsLocations = useAnalyticsLocations.apply(void 0, [...analyticsLocation != null ? [analyticsLocation] : []]).analyticsLocations;
const buildGuildPowerupsSections = useBuildGuildPowerupsSections(guildId, gameServerEnabled);
const ref = useRef(void 0);
useEffect(() => {
if (autoOpenPerkId != null && autoOpenRequestId != null && ref.current !== autoOpenRequestId) {
for (const buildGuildPowerupsSection of buildGuildPowerupsSections) {
L15: {
done38: {
for (const listing of buildGuildPowerupsSection.listings) {
if (!(listing.type === "singlePerk" && listing.powerup.skuId === autoOpenPerkId)) {
if (listing.type !== "multiPerk") {
continue;
}
if (listing.group !== autoOpenPerkId && !listing.powerups.some((powerup) => powerup.skuId === autoOpenPerkId)) {
continue;
}
ref.current = autoOpenRequestId;
openGuildPowerupsMultiPerkBottomSheet({
guildId,
listing,
onDismiss: () => ModalActionCreators.pop()
});
break L15;
}
ref.current = autoOpenRequestId;
openGuildPowerupsBottomSheet({
guildId,
powerup: listing.powerup
});
break done38;
}
continue;
}
return void 0;
}
return void 0;
}
}
}, [autoOpenPerkId, autoOpenRequestId, guildId, buildGuildPowerupsSections]);
const callback = useCallback(() => {
ModalActionCreators.pop();
}, []);
const guildPowerupsBoostCount = useGuildPowerupsBoostCount(guildId);
const { available, spent, total } = guildPowerupsBoostCount;
return <AnalyticsLocationProvider value={analyticsLocations}>
<View style={styles.container}>
<View style={styles.headerContainer}>
<Header title={intl.string(GuildPowerups_messages.hjvcLO)} headerTitle={() => <GenericHeaderTitle title={intl.string(GuildPowerups_messages.hjvcLO)} />} headerTitleAlign="center" headerLeft={getHeaderCloseButton(callback)} />
</View>
<ScrollView contentContainerStyle={styles.scrollView}>
<View style={styles.boostInfoContainer}>
<GuildPowerupsBoostInfo count={available} type={BoostInfoType.AVAILABLE} />
<View style={styles.boostInfoSeparator} />
<GuildPowerupsBoostInfo count={spent} type={BoostInfoType.SPENT} />
<View style={styles.boostInfoSeparator} />
<GuildPowerupsBoostInfo count={total} type={BoostInfoType.TOTAL} />
</View>
<GuildPowerupsNotificationContainer guildId={guildId} />
{buildGuildPowerupsSections.map((buildGuildPowerupsSection) => {
const type = buildGuildPowerupsSection.type;
if (GuildPowerupType.LEVEL === type) {
return <GuildPowerupsLevelsSection key={buildGuildPowerupsSection.type} guildId={guildId} listings={buildGuildPowerupsSection.listings} />;
}
if (GuildPowerupType.PERK === type) {
return <GuildPowerupsPerksSection key={buildGuildPowerupsSection.type} guildId={guildId} listings={buildGuildPowerupsSection.listings} />;
}
return null;
})}
<GuildPowerupsRecentActivitySection guildId={guildId} />
</ScrollView>
<View style={[styles.boostButtonContainer, {
paddingBottom: bottom
}]}>
<GuildPowerupsBoostButton guildId={guildId} />
</View>
</View>
</AnalyticsLocationProvider>;
};
@@ -0,0 +1,152 @@
// Metro module 11638 (f11639).
import { View } from "react-native";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import Module689 from "../../../../_bundle/Module689";
import { isThemeLight } from "../../../../design/utils/shared/themes";
import useTheme from "../../../../hooks/useTheme";
import useHasAllocateBoostPermission from "../hooks/useHasAllocateBoostPermission";
import * as _usePowerupActiveStatus from "../hooks/usePowerupActiveStatus";
import usePowerupActiveStatus from "../hooks/usePowerupActiveStatus";
import useGuildPowerupRollbackEnabled from "../hooks/useGuildPowerupRollbackEnabled";
import { useCalculatePowerupCardStatus } from "../utils/useCalculatePowerupCardStatus";
import useGuildPowerupColorConfig from "./hooks/useGuildPowerupColorConfig";
import useGetGuildPowerupBannerImage from "../hooks/useGetGuildPowerupBannerImage";
import useCanGuildPowerupBeToggled from "../hooks/useCanGuildPowerupBeToggled";
import useGuildPowerupOnActivate from "./hooks/useGuildPowerupOnActivate";
import useGuildPowerupOnShowDeactivate from "./hooks/useGuildPowerupOnShowDeactivate";
import GuildPowerupsImage from "./GuildPowerupsImage";
import { TextBadge } from "../../../../design/void/native";
import { intl, t } from "../../../../intl/index.native";
import { Text } from "../../../../design/components/Text/native/Text";
import { GuildPowerupCardFooterStatus, GuildPowerupCardFooterCost } from "./GuildPowerupsCardFooter";
import { Button } from "../../../../design/components/Button/native/Button.native";
import GuildPowerups_messages from "../GuildPowerups.messages";
import useSafeAreaInsets_native from "../../../safe_area/useSafeAreaInsets.native";
import usePowerupGroupConfig from "./hooks/usePowerupGroupConfig";
import { BottomSheet } from "../../../../design/components/Sheet/native/BottomSheet.native";
import { BottomSheetScrollView } from "../../../../_bundle/Module5245";
import GuildPowerupsSectionHeader from "./GuildPowerupsSectionHeader";
import GuildPowerupsDisabledWarning from "./GuildPowerupsDisabledWarning";
let useStyles, useStyles2;
const GuildPowerupsMultiPerkCard = function GuildPowerupsMultiPerkCard(props) {
const { guildId: guildId2, powerup } = props;
let isNewPerk = props.isNewPerk;
const forceStaticImage = props.forceStaticImage;
const styles = useStyles(isThemeLight(useTheme()));
let r9 = useHasAllocateBoostPermission(guildId2);
const powerupActiveStatus = usePowerupActiveStatus(guildId2, powerup);
const calculatePowerupCardStatus = useCalculatePowerupCardStatus(powerup, powerupActiveStatus, useGuildPowerupRollbackEnabled(guildId2, powerup, "GuildPowerupsMultiPerkBottomSheet"));
const isPowerupActiveStatusActive = _usePowerupActiveStatus.isPowerupActiveStatusActive(powerupActiveStatus);
const textColor = useGuildPowerupColorConfig(isPowerupActiveStatusActive).textColor;
const getGuildPowerupBannerImage = useGetGuildPowerupBannerImage(powerup, true, forceStaticImage);
const disabled = useCanGuildPowerupBeToggled(guildId2, powerup, isPowerupActiveStatusActive).disabled;
const guildPowerupOnActivate = useGuildPowerupOnActivate(guildId2, powerup);
const { onActivate, isLoading } = guildPowerupOnActivate;
let c19047_2 = useGuildPowerupOnShowDeactivate(guildId2, powerup);
const style = [styles.container, disabled && r9 && styles.disabled];
const style2 = [styles.imageContainer, calculatePowerupCardStatus?.type === "active" && styles.imageContainerActive, calculatePowerupCardStatus?.type === "expiring" && styles.imageContainerExpiring, calculatePowerupCardStatus?.type === "removing" && styles.imageContainerRemoving];
let imageUrl = getGuildPowerupBannerImage;
if (imageUrl == null) {
imageUrl = "";
}
const r90 = [<GuildPowerupsImage imageUrl={imageUrl} isAnimated={!forceStaticImage} style={styles.image} />, ,];
if (isNewPerk) {
isNewPerk = <TextBadge text={intl.string(t.y2b7CA)} style={styles.badge} />;
}
r90[1] = isNewPerk;
const r104 = [<View style={style2}>{r90}</View>, ,];
const r127 = [<View style={styles.titleContainer}>
<Text variant="heading-md/semibold" color={textColor}>{powerup.title}</Text>
{calculatePowerupCardStatus != null ? <GuildPowerupCardFooterStatus status={calculatePowerupCardStatus} /> : <GuildPowerupCardFooterCost cost={powerup.cost} />}
</View>, ,];
if (r9) {
r9 = <Button disabled={disabled} loading={isLoading} variant={isPowerupActiveStatusActive ? "secondary" : "primary"} text={intl.string(isPowerupActiveStatusActive ? GuildPowerups_messages.TZsu1U : GuildPowerups_messages.gSxlHf)} onPress={() => {
if (isPowerupActiveStatusActive) {
c19047_2();
} else {
onActivate();
}
}} />;
}
r127[1] = r9;
r104[1] = <View style={styles.bodyContainer}>{r127}</View>;
return <View style={style}>{r104}</View>;
};
useStyles = createStyles((a0) => ({
container: {
gap: Module712.space.PX_8
},
cardsContainer: {
gap: Module712.space.PX_24,
marginHorizontal: Module712.space.PX_16
},
titleContainer: {
flexDirection: "column",
gap: 4
},
bodyContainer: {
justifyContent: "space-between",
alignItems: "center",
flexDirection: "row"
},
imageContainer: {
borderRadius: Module712.radii.md,
borderWidth: 1,
borderColor: Module712.colors.BACKGROUND_MOD_MUTED,
borderStyle: "solid",
backgroundColor: Module689(a0 ? "#000000" : "#ffffff").alpha(0.04).hex()
},
imageContainerActive: {
borderColor: Module689(Module712.unsafe_rawColors.GREEN_360).alpha(0.35).hex()
},
imageContainerExpiring: {
borderColor: Module689(Module712.unsafe_rawColors.YELLOW_300).alpha(0.35).hex()
},
imageContainerRemoving: {
borderColor: Module689(Module712.unsafe_rawColors.YELLOW_300).alpha(0.35).hex()
},
image: {
width: "75%",
height: 180,
resizeMode: "contain"
},
disabled: {
opacity: 0.5
},
badge: {
position: "absolute",
top: Module712.space.PX_8,
right: Module712.space.PX_8
}
}));
useStyles2 = createStyles({
cardsContainer: {
gap: Module712.space.PX_24,
marginHorizontal: Module712.space.PX_16
},
disabledReasonContainer: {
marginHorizontal: Module712.space.PX_16,
marginBottom: Module712.space.PX_16
}
});
export default function GuildPowerupsMultiPerkBottomSheet(props) {
const { guildId, listing, onDismiss } = props;
const styles2 = useStyles2();
const bottom = useSafeAreaInsets_native().bottom;
const powerupGroupConfig = usePowerupGroupConfig(guildId, listing);
let c19048_1 = powerupGroupConfig;
return powerupGroupConfig == null ? null : <BottomSheet scrollable startExpanded onDismiss={onDismiss}>
<BottomSheetScrollView contentContainerStyle={{
paddingBottom: bottom
}}>
<GuildPowerupsSectionHeader title={powerupGroupConfig.title} description={powerupGroupConfig.description} />
{powerupGroupConfig.disabledReason != null && <View style={styles2.disabledReasonContainer}>
<GuildPowerupsDisabledWarning text={powerupGroupConfig.disabledReason} />
</View>}
<View style={styles2.cardsContainer}>
{listing.powerups.map((a0) => <GuildPowerupsMultiPerkCard key={a0.skuId} guildId={guildId} powerup={a0} forceStaticImage={c19048_1.forceStaticImages} />)}
</View>
</BottomSheetScrollView>
</BottomSheet>;
};
@@ -0,0 +1,34 @@
// Metro module 11663 (f11664).
import { useCallback } from "react";
import AccessibilityStore from "../../../a11y/AccessibilityStore";
import usePowerupGroupConfig from "./hooks/usePowerupGroupConfig";
import { useStateFromStores } from "../../../../_bundle/Module589";
import useMultiPerkStatusValues from "../hooks/useMultiPerkStatusValues";
import openGuildPowerupsMultiPerkBottomSheet from "./utils/openGuildPowerupsMultiPerkBottomSheet";
import GuildPowerupsPerkCard from "./GuildPowerupsPerkCard";
export default function GuildPowerupsMultiPerkCard(props) {
const { guildId, listing } = props;
const powerupGroupConfig = usePowerupGroupConfig(guildId, listing);
const stateFromStores = useStateFromStores([AccessibilityStore], () => AccessibilityStore.useReducedMotion);
const multiPerkStatusValues = useMultiPerkStatusValues({
guildId,
powerups: listing.powerups
});
const callback = useCallback(() => {
openGuildPowerupsMultiPerkBottomSheet({
guildId,
listing
});
}, [guildId, listing]);
const r2 = multiPerkStatusValues == null;
let r31 = null;
if (!r2) {
const r32 = powerupGroupConfig == null;
r31 = null;
if (!r32) {
const image = powerupGroupConfig.image;
r31 = <GuildPowerupsPerkCard title={powerupGroupConfig.title} description={powerupGroupConfig.description} cost={multiPerkStatusValues.cost} imageUrl={stateFromStores ? image.staticUrl : image.animatedUrl} status={multiPerkStatusValues.status} costDecorator={multiPerkStatusValues.costDecorator} onPress={callback} badge={powerupGroupConfig.badge} />;
}
}
return r31;
};
@@ -0,0 +1,50 @@
// Metro module 11646 (f11647).
import { View } from "react-native";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import { Text } from "../../../../design/components/Text/native/Text";
import useGuildPowerupTier3OverrideConfig from "../hooks/useGuildPowerupTier3OverrideConfig";
import useGuildPowerupExpiringNotificationsConfig from "../hooks/useGuildPowerupExpiringNotificationsConfig";
import { intl } from "../../../../intl/index.native";
import GuildPowerups_messages from "../GuildPowerups.messages";
import GuildPowerupsWarning from "./GuildPowerupsWarning";
let useStyles;
const Tier3OverrideNotice = function Tier3OverrideNotice(props) {
const text = props.text;
return <View style={useStyles().staffContainer}>
<Text variant="text-sm/medium">{text}</Text>
</View>;
};
useStyles = createStyles({
container: {
gap: Module712.space.PX_12,
margin: Module712.space.PX_16
},
staffContainer: {
padding: Module712.space.PX_12,
backgroundColor: Module712.colors.BACKGROUND_MOD_SUBTLE,
borderRadius: Module712.radii.md,
borderWidth: 1,
borderStyle: "solid",
borderColor: Module712.colors.BORDER_SUBTLE
}
});
export default function GuildPowerupsNotificationContainer(props) {
const guildId = props.guildId;
const styles = useStyles();
const guildPowerupTier3OverrideConfig = useGuildPowerupTier3OverrideConfig(guildId);
const guildPowerupExpiringNotificationsConfig = useGuildPowerupExpiringNotificationsConfig(guildId);
return guildPowerupTier3OverrideConfig.shouldShow ? <View style={styles.container}>
<Text variant="eyebrow" color="text-subtle">
{intl.string(GuildPowerups_messages["3FRirU"])}
</Text>
{guildPowerupTier3OverrideConfig.shouldShow && <Tier3OverrideNotice text={guildPowerupTier3OverrideConfig.text} />}
{guildPowerupExpiringNotificationsConfig.shouldShow && <GuildPowerupsWarning guildId={guildId} powerupNames={guildPowerupExpiringNotificationsConfig.expiringPowerupNames} warnings={guildPowerupExpiringNotificationsConfig.warnings} />}
</View> : guildPowerupExpiringNotificationsConfig.shouldShow ? <View style={styles.container}>
<Text variant="eyebrow" color="text-subtle">
{intl.string(GuildPowerups_messages["3FRirU"])}
</Text>
{guildPowerupTier3OverrideConfig.shouldShow && <Tier3OverrideNotice text={guildPowerupTier3OverrideConfig.text} />}
{guildPowerupExpiringNotificationsConfig.shouldShow && <GuildPowerupsWarning guildId={guildId} powerupNames={guildPowerupExpiringNotificationsConfig.expiringPowerupNames} warnings={guildPowerupExpiringNotificationsConfig.warnings} />}
</View> : null;
};
@@ -0,0 +1,77 @@
// Metro module 11662 (f11663).
import { View } from "react-native";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import useTheme from "../../../../hooks/useTheme";
import { isThemeDark } from "../../../../design/shared";
import GuildPowerupsCard from "./GuildPowerupsCard";
import GuildPowerupsImage from "./GuildPowerupsImage";
import Module4611 from "../../../../_bundle/Module4611";
import { Text } from "../../../../design/components/Text/native/Text";
import { GuildPowerupsCardFooter } from "./GuildPowerupsCardFooter";
import { TextBadge, BadgeColors } from "../../../../design/void/native";
import { intl, t } from "../../../../intl/index.native";
const useStyles = createStyles({
container: {
marginHorizontal: Module712.space.PX_16
},
card: {
padding: 0,
overflow: "hidden"
},
contentContainer: {
gap: Module712.space.PX_16,
padding: Module712.space.PX_16
},
imageContainer: {
width: "100%",
height: 160
},
gradient: {
position: "absolute",
left: 0,
right: 0,
top: 0,
height: "100%"
},
headerContainer: {
gap: Module712.space.PX_4
},
badge: {
position: "absolute",
top: Module712.space.PX_12,
right: Module712.space.PX_12
}
});
export default function GuildPowerupsPerkCard(props) {
const { title, description, imageUrl: _imageUrl, isImageAnimated: _isImageAnimated, riveComponent: _riveComponent, style, onPress, status, badge, ...props2 } = props;
let imageUrl = props.imageUrl;
let isImageAnimated = props.isImageAnimated;
if (isImageAnimated === void 0) {
isImageAnimated = true;
}
let riveComponent = props.riveComponent;
const styles = useStyles();
const colors = isThemeDark(useTheme()) ? ["#0f101100", "#0f101166"] : ["#0f101100", "#0f10111a"];
if (riveComponent == null) {
if (imageUrl == null) {
imageUrl = "";
}
riveComponent = <GuildPowerupsImage imageUrl={imageUrl} isAnimated={isImageAnimated} />;
}
return <GuildPowerupsCard containerStyle={[styles.container, style]} style={styles.card} status={status} onPress={onPress}>
<View style={styles.imageContainer}>
{riveComponent}
<Module4611 colors={colors} style={styles.gradient} />
</View>
<View style={styles.contentContainer}>
<View style={styles.headerContainer}>
<Text variant="heading-md/bold">{title}</Text>
<Text variant="text-sm/medium">{description}</Text>
</View>
<GuildPowerupsCardFooter {...props2} status={status} />
</View>
{badge === "new" && <TextBadge text={intl.string(t.y2b7CA)} style={styles.badge} />}
{badge === "beta" && <TextBadge text={intl.string(t.oW0eUd)} color={BadgeColors.BRAND} style={styles.badge} />}
</GuildPowerupsCard>;
};
@@ -0,0 +1,38 @@
// Metro module 11660 (f11661).
import { View } from "react-native";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import GuildPowerupsSectionHeader from "./GuildPowerupsSectionHeader";
import { intl } from "../../../../intl/index.native";
import GuildPowerups_messages from "../GuildPowerups.messages";
import GuildPowerupsSinglePerkCard from "./GuildPowerupsSinglePerkCard";
import GuildPowerupsMultiPerkCard from "./GuildPowerupsMultiPerkCard";
import GuildPowerupsGameServerCard from "./GuildPowerupsGameServerCard";
const useStyles = createStyles({
container: {
flexDirection: "column",
gap: Module712.space.PX_16
}
});
export default function GuildPowerupPerksSection(props) {
const { guildId, listings } = props;
const styles = useStyles();
return <>
<GuildPowerupsSectionHeader title={intl.string(GuildPowerups_messages.TV3Vm8)} description={intl.string(GuildPowerups_messages.STx9hp)} />
<View style={styles.container}>
{listings.map((a0, index) => {
const type = a0.type;
if (type === "singlePerk") {
return <GuildPowerupsSinglePerkCard key={a0.powerup.skuId} guildId={guildId} powerup={a0.powerup} badge={a0.badge} />;
}
if (type === "multiPerk") {
return <GuildPowerupsMultiPerkCard key={`${a0.group}-${index}`} guildId={guildId} listing={a0} />;
}
if (type === "gameServer") {
return <GuildPowerupsGameServerCard key={`game-server-${index}`} guildId={guildId} />;
}
return null;
})}
</View>
</>;
};
@@ -0,0 +1,157 @@
// Metro module 15186 (f15187).
import { useEffect, useCallback } from "react";
import { View, StyleSheet } from "react-native";
import GuildBoostingProgressBarPersistedStore from "../../../guild_boosting/GuildBoostingProgressBarPersistedStore";
import GuildStore from "../../../../stores/GuildStore";
import Module712 from "../../../../_bundle/Module712";
import ReanimatedRexport, { useSharedValue, cancelAnimation, useAnimatedStyle } from "../../../reanimated/ReanimatedRexport";
import Module4611 from "../../../../_bundle/Module4611";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import { useStateFromStores } from "../../../../_bundle/defaultAreStatesEqual";
import useTotalPossibleBoostCount from "../hooks/useTotalPossibleBoostCount";
import { updateGuildPremiumSubscriptionCount } from "../../../guild_boosting/GuildBoostingProgressBarActionCreators";
import { withTiming } from "../../../../design/animation/reanimated/timing/timing";
import openGuildPowerupsModal from "./utils/openGuildPowerupsModal";
import AnalyticsLocation from "../../../app_analytics/AnalyticsLocation";
import { intl } from "../../../../intl/index.native";
import GuildPowerups_messages from "../GuildPowerups.messages";
import { PressableScale } from "../../../../design/components/experimental/native";
import { Text } from "../../../../design/components/Text/native/Text";
import { ChevronSmallRightIcon } from "../../../../design/components/Icon/native/redesign/generated/ChevronSmallRightIcon";
const r1 = 2 * Module712.space.PX_4;
const _excluded = ["rgba(255, 115, 250, 0.4)", "rgba(255, 115, 250, 0.1)"];
const AnimatedComponent = ReanimatedRexport.createAnimatedComponent(Module4611);
const useStyles = createStyles({
container: {
paddingVertical: Module712.space.PX_4,
paddingHorizontal: Module712.space.PX_16
},
track: {
height: 30,
borderRadius: Module712.radii.round,
backgroundColor: Module712.colors.BACKGROUND_MOD_NORMAL,
justifyContent: "center"
},
fillContainer: {
...StyleSheet.absoluteFillObject,
padding: 2
},
fill: {
height: "100%",
minWidth: 26,
borderRadius: Module712.radii.round,
borderWidth: 1,
borderColor: "rgba(255, 115, 250, 0.2)",
overflow: "hidden"
},
fillShadow: {
shadowColor: "rgba(0, 0, 0, 0.14)",
shadowOffset: {
width: 0,
height: 1
},
shadowOpacity: 1,
shadowRadius: 4,
elevation: 2
},
textContainer: {
flexDirection: "row",
justifyContent: "space-between",
alignItems: "center",
paddingHorizontal: Module712.space.PX_12
},
rightContent: {
flexDirection: "row",
alignItems: "center"
}
});
const __initData = {
code: "function GuildPowerupsProgressBarTsx1(){const{animatedFillPercent,animatedFillOpacity}=this.__closure;return{width:animatedFillPercent.get()+\"%\",opacity:animatedFillOpacity.get()};}"
};
export default function GuildPowerupsProgressBar(props) {
let stateFromStores, c21745_2, c21745_3, sharedValue, sharedValue2;
const guildId = props.guildId;
stateFromStores = void 0;
c21745_2 = void 0;
c21745_3 = void 0;
sharedValue = void 0;
sharedValue2 = void 0;
const styles = useStyles();
const stateFromStores2 = useStateFromStores([GuildStore], () => GuildStore.getGuild(guildId), [guildId]);
const totalPossibleBoostCount = useTotalPossibleBoostCount(stateFromStores2);
stateFromStores = useStateFromStores([GuildBoostingProgressBarPersistedStore], () => {
let r7 = GuildBoostingProgressBarPersistedStore.getCountForGuild(guildId);
if (r7 == null) {
r7 = 0;
}
return r7;
}, [guildId]);
let r14 = stateFromStores2?.premiumSubscriberCount;
if (r14 == null) {
r14 = 0;
}
c21745_2 = r14;
useEffect(() => {
if (stateFromStores !== c21745_2) {
updateGuildPremiumSubscriptionCount(guildId, c21745_2);
}
}, [guildId, stateFromStores, r14]);
const r46 = totalPossibleBoostCount > 0 ? Math.min(stateFromStores / totalPossibleBoostCount * 100, 100) : 0;
c21745_3 = r46;
sharedValue = useSharedValue(r46);
sharedValue2 = useSharedValue(r46 > 0 ? 1 : 0);
useEffect(() => {
sharedValue.set(withTiming(c21745_3, {
duration: 500
}));
sharedValue2.set(withTiming(c21745_3 > 0 ? 1 : 0, {
duration: 500
}));
return () => {
cancelAnimation(sharedValue);
cancelAnimation(sharedValue2);
};
}, [sharedValue, sharedValue2, r46]);
const O = () => ({
width: `${sharedValue.get()}%`,
opacity: sharedValue2.get()
});
O.__closure = {
animatedFillPercent: sharedValue,
animatedFillOpacity: sharedValue2
};
O.__workletHash = 6718232104000;
O.__initData = __initData;
const animatedStyle = useAnimatedStyle(O);
const callback = useCallback(() => {
openGuildPowerupsModal({
guildId,
analyticsLocation: AnalyticsLocation.GUILD_BOOSTING_SIDEBAR_DISPLAY
});
}, [guildId]);
const r82 = stateFromStores >= totalPossibleBoostCount ? intl.formatToPlainString(GuildPowerups_messages["Ehpq+7"], {
appliedBoostCount: stateFromStores
}) : intl.formatToPlainString(GuildPowerups_messages["/rbPDs"], {
appliedBoostCount: stateFromStores,
maxBoostCount: totalPossibleBoostCount
});
return <PressableScale accessibilityRole="button" accessibilityLabel={intl.string(GuildPowerups_messages.NI6Ihe)} onPress={callback} style={styles.container}>
<View style={styles.track}>
<View style={styles.fillContainer}>
<AnimatedComponent style={[styles.fill, styles.fillShadow, animatedStyle]} colors={_excluded} useAngle angle={270} />
</View>
<View style={styles.textContainer}>
<Text variant="text-xs/semibold" color="text-default">
{r14 >= totalPossibleBoostCount ? `${intl.string(GuildPowerups_messages.NI6Ihe)} 🎉` : intl.string(GuildPowerups_messages.NI6Ihe)}
</Text>
<View style={styles.rightContent}>
<Text variant="text-xs/semibold" color="text-default" style={{
opacity: 0.7
}}>{r82}</Text>
<ChevronSmallRightIcon size="sm" color={Module712.colors.TEXT_DEFAULT} />
</View>
</View>
</View>
</PressableScale>;
};
export const BOOST_PROGRESS_BAR_HEIGHT = r1 + 30;
@@ -0,0 +1,96 @@
// Metro module 11670 (f11671).
import { View } from "react-native";
import AccessibilityStore from "../../../a11y/AccessibilityStore";
import { jsx } from "react/jsx-runtime";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import useMaybeGetSortedBoosts, { useGetBoostUserConfig } from "../hooks/useMaybeGetSortedBoosts";
import { calendarFormat } from "../../../../utils/DateUtils";
import { getRelativeTimestamp } from "../../../notification_center/NotificationCenterUtils";
import { useStateFromStores } from "../../../../_bundle/Module589";
import { useProcessColorStringsArray, useIsRoleStyleAndRoleColorsEligibleForERC } from "../../enhanced_role_colors/native/EnhancedRoleColorUtils";
import { BoostGemIcon } from "../../../../design/components/Icon/native/redesign/generated/BoostGemIcon";
import { BoostTier1Icon } from "../../../../design/components/Icon/native/redesign/generated/BoostTier1Icon";
import { BoostGemSlashIcon } from "../../../../design/components/Icon/native/redesign/generated/BoostGemSlashIcon";
import { RoleDot } from "../../../../design/void/native";
import { Text } from "../../../../design/components/Text/native/Text";
import getBoostRowMessageText from "../utils/getBoostRowMessageText";
import { useExpiringBoostsEnabled } from "../experiments/ExpiringBoostsExperiment";
import { intl, t } from "../../../../intl/index.native";
let useStyles;
const GuildPowerupsRecentActivityRow = function GuildPowerupsRecentActivityRow(props) {
const { row, isExpiringBoostsEnabled } = props;
const { boost, phase, sortKey } = row;
const styles = useStyles();
const getBoostUserConfig = useGetBoostUserConfig(boost);
const { username, roleColor, roleColorStrings } = getBoostUserConfig;
const r9 = isExpiringBoostsEnabled ? calendarFormat(new Date(sortKey)) : getRelativeTimestamp(sortKey, true);
const stateFromStores = useStateFromStores([AccessibilityStore], () => AccessibilityStore.roleStyle);
const r21 = stateFromStores === "username" && roleColor != null ? {
color: roleColor
} : {};
const processColorStringsArray = useProcessColorStringsArray(roleColorStrings);
const isRoleStyleAndRoleColorsEligibleForERC = useIsRoleStyleAndRoleColorsEligibleForERC(boost.guildId, boost.userId, stateFromStores, processColorStringsArray);
const r61 = phase === "gave";
return <View style={styles.boostRowContainer}>
{jsx(r61 ? BoostGemIcon : phase === "expiring" ? BoostTier1Icon : BoostGemSlashIcon, r61 ? {
color: Module712.unsafe_rawColors.GUILD_BOOSTING_PINK,
size: "sm"
} : {
size: "sm"
})}
<View style={styles.boostMessage}>
{stateFromStores === "dot" && roleColor != null && <RoleDot size="small" color={roleColor} colors={roleColorStrings} />}
<Text variant="text-md/medium" color="interactive-text-active" lineClamp={1} style={[styles.username, r21]} gradientColors={isRoleStyleAndRoleColorsEligibleForERC ? processColorStringsArray : void 0}>{username}</Text>
<Text variant="text-md/medium" color="interactive-text-active">{" "}</Text>
<Text variant="text-md/medium" lineClamp={1} style={styles.messageText}>
{getBoostRowMessageText(row)}
</Text>
</View>
<Text variant="text-xs/semibold" style={styles.timestamp}>{r9}</Text>
</View>;
};
useStyles = createStyles({
sectionContainer: {
marginTop: Module712.space.PX_16,
paddingHorizontal: Module712.space.PX_16
},
boostContainer: {
gap: Module712.space.PX_12,
marginTop: Module712.space.PX_16
},
boostRowContainer: {
flexDirection: "row",
alignItems: "center",
gap: 8
},
boostMessage: {
flex: 1,
flexDirection: "row",
alignItems: "center"
},
username: {
maxWidth: 170,
flexShrink: 1
},
messageText: {
flexShrink: 0
},
timestamp: {
flexShrink: 0
}
});
export default function GuildPowerupsRecentActivitySection(props) {
const guildId = props.guildId;
const styles = useStyles();
const maybeGetSortedBoosts = useMaybeGetSortedBoosts(guildId, 10);
const expiringBoostsEnabled = useExpiringBoostsEnabled("GuildPowerupsRecentActivity");
return maybeGetSortedBoosts.length !== 0 ? <View style={styles.sectionContainer}>
<Text variant="heading-lg/semibold" color="text-subtle">
{intl.string(t.yM9Krm)}
</Text>
<View style={styles.boostContainer}>
{maybeGetSortedBoosts.map((maybeGetSortedBoost) => <GuildPowerupsRecentActivityRow key={`boost-${maybeGetSortedBoost.boost.id}`} row={maybeGetSortedBoost} isExpiringBoostsEnabled={expiringBoostsEnabled} />)}
</View>
</View> : null;
};
@@ -0,0 +1,17 @@
// Metro module 11643 (f11644).
import { View } from "react-native";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import { Text } from "../../../../design/components/Text/native/Text";
const useStyles = createStyles({
headerContainer: {
padding: Module712.space.PX_16
}
});
export default function GuildPowerupsSectionHeader(props) {
const { title, description } = props;
return <View style={useStyles().headerContainer}>
<Text variant="heading-lg/semibold" accessibilityRole="header">{title}</Text>
<Text variant="text-md/normal">{description}</Text>
</View>;
};
@@ -0,0 +1,17 @@
// Metro module 11661 (f11662).
import useGetGuildPowerupBannerImage from "../hooks/useGetGuildPowerupBannerImage";
import usePowerupActiveStatus from "../hooks/usePowerupActiveStatus";
import useGuildPowerupRollbackEnabled from "../hooks/useGuildPowerupRollbackEnabled";
import { useCalculatePowerupCardStatus } from "../utils/useCalculatePowerupCardStatus";
import useGuildPowerupOnShowMore from "./hooks/useGuildPowerupOnShowMore";
import GuildPowerupsPerkCard from "./GuildPowerupsPerkCard";
export default function GuildPowerupsSinglePerkCard(props) {
const { guildId, powerup, badge } = props;
let imageUrl = useGetGuildPowerupBannerImage(powerup, true);
const calculatePowerupCardStatus = useCalculatePowerupCardStatus(powerup, usePowerupActiveStatus(guildId, powerup), useGuildPowerupRollbackEnabled(guildId, powerup, "GuildPowerupsSinglePerkCard"));
const guildPowerupOnShowMore = useGuildPowerupOnShowMore(guildId, powerup);
if (imageUrl == null) {
imageUrl = "";
}
return <GuildPowerupsPerkCard title={powerup.title} description={powerup.description} cost={powerup.cost} imageUrl={imageUrl} status={calculatePowerupCardStatus} onPress={guildPowerupOnShowMore} badge={badge} />;
};
@@ -0,0 +1,47 @@
// Metro module 11651 (f11652).
import { View } from "react-native";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import useGuildPowerupsWarningConfig from "../hooks/useGuildPowerupsWarningConfig";
import { CircleErrorIcon } from "../../../../design/components/Icon/native/redesign/generated/CircleErrorIcon";
import { Text } from "../../../../design/components/Text/native/Text";
const useStyles = createStyles({
container: {
flexDirection: "row",
alignItems: "flex-start",
padding: Module712.space.PX_24,
backgroundColor: Module712.colors.BACKGROUND_FEEDBACK_WARNING,
borderWidth: 1,
borderColor: Module712.colors.STATUS_WARNING,
borderRadius: Module712.radii.lg,
gap: Module712.space.PX_8,
overflow: "hidden"
},
contentContainer: {
flex: 1,
gap: Module712.space.PX_4,
alignItems: "center"
},
warningText: {
marginTop: Module712.space.PX_4
},
text: {
textAlign: "center"
}
});
export default function GuildPowerupsWarning(props) {
const { guildId, powerupNames, warnings } = props;
const styles = useStyles();
const guildPowerupsWarningConfig = useGuildPowerupsWarningConfig(guildId, powerupNames);
const { shouldShow, title, description } = guildPowerupsWarningConfig;
return shouldShow ? <View style={styles.container}>
<View style={styles.contentContainer}>
<CircleErrorIcon color={Module712.colors.TEXT_FEEDBACK_WARNING} size="md" />
<Text variant="text-md/semibold" color="text-feedback-warning" style={styles.text}>{title}</Text>
<Text variant="text-sm/medium" style={styles.text}>{description}</Text>
{warnings == null ? void 0 : warnings.map((warning, index) => <Text key={`warning-${index}`} variant="text-sm/medium" color="text-feedback-warning" style={[styles.warningText, styles.text]}>
{warning}
</Text>)}
</View>
</View> : null;
};
@@ -0,0 +1,68 @@
// Metro module 15142 (f15143).
import { useCallback, useMemo } from "react";
import AccessibilityStore from "../../../a11y/AccessibilityStore";
import GuildPowerupsStore from "../GuildPowerupsStore";
import { GUILD_THEME_POWERUP_BOOST_PRICE } from "../constants/GuildPowerupsConstants";
import { ContentDismissActionType } from "../../../dismissible_content/DismissibleContentConstants";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import { useStateFromStores } from "../../../../_bundle/Module589";
import { GUILD_POWERUP_GUILD_THEME_SKU_ID } from "../../../../_bundle/Module4080";
import { getGuildPowerupBannerImage } from "../hooks/useGetGuildPowerupBannerImage";
import Module15143 from "../../../../_bundle/Module15143";
import useGuildPowerupsBoostCount from "../hooks/useGuildPowerupsBoostCount";
import { openApplyBoostModal } from "../../../../actions/native/BoostingActionCreators";
import { intl, t } from "../../../../intl/index.native";
import GuildPowerups_messages from "../GuildPowerups.messages";
import GuildPowerupsImage from "./GuildPowerupsImage";
import { useCoachmark } from "../../../../design/components/Coachmark/native/useCoachmark.native";
const useStyles = createStyles({
coachmarkImage: {
height: 120,
width: 260 - 2 * Module712.space.PX_16,
borderRadius: Module712.radii.md
}
});
export default function GuildThemeMemberCoachmark({ guildId, targetRef, markAsDismissed }) {
let stateFromStores, imageUrl, c21705_5, callback, callback2;
stateFromStores = void 0;
imageUrl = void 0;
c21705_5 = void 0;
callback = void 0;
callback2 = void 0;
const styles = useStyles();
const stateFromStores2 = useStateFromStores([GuildPowerupsStore], () => {
const stateForGuild = GuildPowerupsStore.getStateForGuild(guildId);
return stateForGuild == null ? void 0 : stateForGuild.allPowerups[GUILD_POWERUP_GUILD_THEME_SKU_ID];
}, [guildId]);
stateFromStores = useStateFromStores([AccessibilityStore], () => AccessibilityStore.useReducedMotion);
let r31 = getGuildPowerupBannerImage(stateFromStores2, stateFromStores, true);
if (r31 == null) {
r31 = Module15143;
}
imageUrl = r31;
const r15 = GUILD_THEME_POWERUP_BOOST_PRICE - useGuildPowerupsBoostCount(guildId).available;
c21705_5 = r15;
callback = useCallback(() => {
markAsDismissed(ContentDismissActionType.USER_DISMISS);
}, [markAsDismissed]);
callback2 = useCallback(() => {
markAsDismissed(ContentDismissActionType.TAKE_ACTION);
if (c21705_5 > 0) {
openApplyBoostModal(guildId);
}
}, [r15, guildId, markAsDismissed]);
useCoachmark(targetRef, useMemo(() => ({
title: intl.string(GuildPowerups_messages.RK6NbY),
description: intl.string(GuildPowerups_messages.xlAqGk),
visible: true,
position: "bottom",
offsetY: 8,
onDismiss: callback,
renderImgComponent: () => <GuildPowerupsImage imageUrl={imageUrl} isAnimated={!stateFromStores} style={styles.coachmarkImage} />,
buttonLabel: intl.string(t.oPAx73),
buttonVariant: "primary",
onButtonPress: callback2
}), [callback, callback2, imageUrl, styles.coachmarkImage, stateFromStores]));
return null;
};
@@ -0,0 +1,165 @@
// Metro module 16466 (f16467).
import { useState, useCallback } from "react";
import { Pressable, View } from "react-native";
import { DEFAULT_GRADIENT_ROLE_COLORS, GRADIENT_PRESETS } from "../constants/EnhancedRoleColorConstants";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import { extractColorStringsFromServerColors } from "../../enhanced_role_colors/EnhancedRoleColorUtils";
import { isNotNullish } from "../../../../utils/GlobalUtils";
import ActionSheetActionCreators from "../../../action_sheet/native/ActionSheetActionCreators";
import showCustomColorPickerActionSheet from "../../../color_picker/native/showCustomColorPickerActionSheet";
import { BottomSheet } from "../../../../design/components/Sheet/native/BottomSheet.native";
import { BottomSheetTitleHeader } from "../../../../design/components/Sheet/native/BottomSheetTitleHeader.native";
import { intl, t } from "../../../../intl/index.native";
import { Button } from "../../../../design/components/Button/native/Button.native";
import Module4611 from "../../../../_bundle/Module4611";
import { EyeDropperIcon } from "../../../../design/components/Icon/native/redesign/generated/EyeDropperIcon";
import { PressableOpacity } from "../../../../design/void/Pressables/native/Pressables";
import { int2hex } from "../../../../_bundle/int2hslRaw";
const useStyles = createStyles({
body: {
paddingVertical: Module712.space.PX_12,
paddingHorizontal: Module712.space.PX_12,
flexGrow: 1,
justifyContent: "center",
alignItems: "center",
gap: Module712.space.PX_16
},
gradientContainer: {
display: "flex",
flexDirection: "row",
justifyContent: "center",
alignItems: "center",
paddingHorizontal: Module712.space.PX_8
},
dropperContainer: {
left: Module712.space.PX_24,
right: Module712.space.PX_24,
position: "absolute",
display: "flex",
flexDirection: "row",
justifyContent: "space-between"
},
dropper: {
borderColor: "white",
tintColor: "white",
padding: Module712.space.PX_8,
borderRadius: Module712.radii.round,
borderWidth: 1
},
gradient: {
height: 50,
width: "100%",
borderRadius: Module712.radii.sm
},
optionContainer: {
display: "flex",
flexDirection: "row",
gap: Module712.space.PX_8,
flexWrap: "wrap",
alignItems: "center",
justifyContent: "center"
},
pressable: {
width: 80,
height: 50,
borderRadius: Module712.radii.sm,
overflow: "hidden",
padding: 2
},
selected: {
borderWidth: 2,
borderColor: Module712.colors.BACKGROUND_BRAND
},
option: {
flex: 1,
borderRadius: Module712.radii.sm
}
});
export default function RoleGradientPickerActionSheet(props) {
let callback;
let colors = props.colors;
const onSelect2 = props.onSelect;
callback = void 0;
const styles = useStyles();
if (!(colors != null && colors.secondary_color != null)) {
colors = DEFAULT_GRADIENT_ROLE_COLORS;
}
const [state, setState] = useState(colors);
const colors2 = Object.values(extractColorStringsFromServerColors(state)).filter(isNotNullish);
const callback2 = useCallback(() => {
onSelect2(state);
ActionSheetActionCreators.hideActionSheet();
}, [state, onSelect2]);
callback = useCallback((a0) => {
setState(a0);
}, []);
const callback3 = useCallback(() => {
let color = state?.primary_color;
if (color == null) {
color = 0;
}
showCustomColorPickerActionSheet({
color,
onSelect: (a0) => callback({
...state,
primary_color: a0
})
}, "stack");
}, [state, callback]);
const callback4 = useCallback(() => {
let color = state?.secondary_color;
if (color == null) {
color = 0;
}
showCustomColorPickerActionSheet({
color,
onSelect: (a0) => callback({
...state,
secondary_color: a0
})
}, "stack");
}, [state, callback]);
return <BottomSheet header={<BottomSheetTitleHeader title={intl.string(t.XpWmJz)} trailing={<Button variant="secondary" size="sm" text={intl.string(t["R3BPH+"])} onPress={callback2} />} />}>
<View style={styles.body}>
<View style={styles.gradientContainer}>
<Module4611 style={styles.gradient} colors={colors2} start={{
x: 0,
y: 0
}} end={{
x: 1,
y: 0
}} />
<View style={styles.dropperContainer}>
<Pressable style={styles.dropper} onPress={callback3} accessibilityLabel={intl.string(t.QPqIEx)} accessibilityRole="button">
<EyeDropperIcon color="white" size="sm" />
</Pressable>
<Pressable style={styles.dropper} onPress={callback4} accessibilityLabel={intl.string(t.fLMusI)} accessibilityRole="button">
<EyeDropperIcon color="white" size="sm" />
</Pressable>
</View>
</View>
<View style={styles.optionContainer}>
{GRADIENT_PRESETS.map((item) => {
const [primary_color, secondary_color] = item.colors;
return <PressableOpacity key={item.name} style={[styles.pressable, primary_color === state.primary_color && secondary_color === state.secondary_color && styles.selected]} onPress={() => callback({
...state,
primary_color,
secondary_color
})}>
<Module4611 style={styles.option} colors={[int2hex(primary_color), int2hex(secondary_color)]} start={{
x: 0,
y: 0
}} end={{
x: 1,
y: 0
}} />
</PressableOpacity>;
})}
</View>
<Button text={intl.string(t.yBZMsQ)} onPress={function onPress() {
setState(DEFAULT_GRADIENT_ROLE_COLORS);
}} />
</View>
</BottomSheet>;
};
@@ -0,0 +1,11 @@
// Metro module 11639 (f11640).
import Module712 from "../../../../../_bundle/Module712";
export default function useGuildPowerupColorConfig(a0) {
return a0 ? {
textColor: "text-default",
iconColor: Module712.colors.TEXT_DEFAULT
} : {
textColor: "text-muted",
iconColor: Module712.colors.TEXT_MUTED
};
};
@@ -0,0 +1,27 @@
// Metro module 11635 (f11636).
import { useCallback } from "react";
import { AnalyticsSections, GuildSettingsSections } from "../../../../../Constants";
import ActionSheetActionCreators from "../../../../action_sheet/native/ActionSheetActionCreators";
import { GUILD_POWERUPS_BOTTOM_SHEET_KEY } from "../utils/openGuildPowerupsBottomSheet";
import { GUILD_POWERUP_ROLE_COLOR_SKU_ID, GUILD_POWERUP_TAG_SKU_ID } from "../../../../../_bundle/Module4080";
import GuildSettingsActionCreators from "../../../../guild_settings/GuildSettingsActionCreators";
import { canUseMobileServerTagSettings } from "../../../../guild_settings/GuildSettingsServerTagUtils";
import Module38 from "../../../../../_bundle/Module38";
export default function useGuildPowerupConfigureCallback(a0, a1) {
return useCallback(() => {
ActionSheetActionCreators.hideActionSheet(GUILD_POWERUPS_BOTTOM_SHEET_KEY);
const skuId = a1.skuId;
if (GUILD_POWERUP_ROLE_COLOR_SKU_ID === skuId) {
GuildSettingsActionCreators.open(a0, GuildSettingsSections.ROLES, AnalyticsSections.GUILD_POWERUPS_OVERVIEW_CARD);
return void 0;
}
if (GUILD_POWERUP_TAG_SKU_ID === skuId) {
if (canUseMobileServerTagSettings(a0)) {
GuildSettingsActionCreators.open(a0, GuildSettingsSections.TAG, AnalyticsSections.GUILD_POWERUPS_OVERVIEW_CARD);
return void 0;
}
return void 0;
}
Module38(false, `Unsupported powerup SKU ID: ${a1.skuId}`);
}, [a0, a1.skuId]);
};
@@ -0,0 +1,89 @@
// Metro module 11625 (f11626).
import { useCallback } from "react";
import GuildStore from "../../../../../stores/GuildStore";
import GuildBoostSlotStore from "../../../../../stores/billing/GuildBoostSlotStore";
import { BoostPurchaseIntent, GuildPowerupType } from "../../constants/GuildPowerupsConstants";
import useGuildPowerupOnToggle from "../../hooks/useGuildPowerupOnToggle";
import { useStateFromStores } from "../../../../../_bundle/Module589";
import useAvailableBoostCountForPowerup from "../../hooks/useAvailableBoostCountForPowerup";
import useAnalyticsLocations from "../../../../app_analytics/useAnalyticsLocations";
import useGuildBoostPurchaseHandler from "../../../../guild_boosting/native/hooks/useGuildBoostPurchaseHandler";
import { getAvailableGuildBoostSlots } from "../../../../../utils/GuildBoostingUtils";
import ActionSheetActionCreators from "../../../../action_sheet/native/ActionSheetActionCreators";
import { GUILD_POWERUPS_BOTTOM_SHEET_KEY } from "../utils/openGuildPowerupsBottomSheet";
import { openTransferModal } from "../../../../../actions/native/BoostingActionCreators";
import { launchGuildBoostFlowOrAlert } from "../../../../guild_boosting/native/GuildBoostPurchasingUtils";
import ModalActionCreators from "../../../../../actions/ModalActionCreators";
import { PREMIUM_KEY } from "../../../../../components_native/premium/PremiumModal";
export default function useGuildPowerupOnActivate(a0, a1) {
let c19036_4, analyticsLocations, shouldUseMobileWebRedirectCheckout, handleMobileWebRedirectCheckout;
let c19036_0 = a0;
const guildPowerupOnToggle = useGuildPowerupOnToggle(a0, a1);
const { onToggle, isLoading, error } = guildPowerupOnToggle;
const stateFromStores = useStateFromStores([GuildStore], () => GuildStore.getGuild(c19036_0));
const availableBoostCountForPowerup = useAvailableBoostCountForPowerup(a0, a1);
c19036_4 = availableBoostCountForPowerup;
analyticsLocations = useAnalyticsLocations().analyticsLocations;
const guildBoostPurchaseHandler = useGuildBoostPurchaseHandler("guild_powerup_activation");
shouldUseMobileWebRedirectCheckout = guildBoostPurchaseHandler.shouldUseMobileWebRedirectCheckout;
handleMobileWebRedirectCheckout = guildBoostPurchaseHandler.handleMobileWebRedirectCheckout;
return {
onActivate: useCallback(() => {
if (stateFromStores != null) {
if (a1 != null) {
if (c19036_4 >= a1.cost) {
onToggle(true);
} else {
const r11 = a1.cost - c19036_4;
let c27121_0 = r11;
const availableGuildBoostSlots = getAvailableGuildBoostSlots(GuildBoostSlotStore.boostSlots);
const LEVEL = a1.type === GuildPowerupType.LEVEL ? BoostPurchaseIntent.LEVEL : BoostPurchaseIntent.PERK;
ActionSheetActionCreators.hideActionSheet(GUILD_POWERUPS_BOTTOM_SHEET_KEY);
if (availableGuildBoostSlots.length > 0) {
openTransferModal({
guildBoostSlots: availableGuildBoostSlots.slice(0, r11),
guildId: stateFromStores.id,
intent: LEVEL,
onResult: (a0) => {
if (a0) {
onToggle(true);
}
}
});
} else if (shouldUseMobileWebRedirectCheckout) {
handleMobileWebRedirectCheckout(analyticsLocations, stateFromStores.id);
} else {
launchGuildBoostFlowOrAlert({
source: {
page: "Guild Powerups",
section: "Powerup Activation"
},
analyticsLocations,
guildId: stateFromStores.id,
onBack: () => ModalActionCreators.popWithKey(PREMIUM_KEY),
onPaymentSuccess: () => {
const availableGuildBoostSlots = getAvailableGuildBoostSlots(GuildBoostSlotStore.boostSlots);
if (availableGuildBoostSlots.length >= c27121_0) {
openTransferModal({
guildBoostSlots: availableGuildBoostSlots.slice(0, a1.cost),
guildId: stateFromStores.id,
intent: LEVEL,
onResult: (a0) => {
if (a0) {
onToggle(true);
}
}
});
}
},
onPaymentDismiss: () => ModalActionCreators.popWithKey(PREMIUM_KEY)
});
}
}
}
}
}, [onToggle, a1, availableBoostCountForPowerup, stateFromStores, analyticsLocations, shouldUseMobileWebRedirectCheckout, handleMobileWebRedirectCheckout]),
isLoading,
error
};
};
@@ -0,0 +1,11 @@
// Metro module 11630 (f11631).
import { lazy, useCallback } from "react";
import { openAlert } from "../../../../../design/components/AlertModal/native/useAlertStore.native";
let Component = lazy(() => import("../GuildPowerupsDeactivateAlert"));
export default function useGuildPowerupOnShowDeactivate(a0, a1) {
const guildId = a0;
const powerup = a1;
return useCallback(() => {
openAlert("guild-powerups-deactivate-alert", <Component guildId={guildId} powerup={powerup} />);
}, [a0, a1]);
};
@@ -0,0 +1,15 @@
// Metro module 11658 (f11659).
import { useCallback } from "react";
import openGuildPowerupsBottomSheet from "../utils/openGuildPowerupsBottomSheet";
export default function useGuildPowerupOnShowMore(a0, a1) {
const guildId = a0;
const powerup = a1;
return useCallback(() => {
if (powerup != null) {
openGuildPowerupsBottomSheet({
guildId,
powerup
});
}
}, [a0, a1]);
};
@@ -0,0 +1,120 @@
// Metro module 15146 (f15147).
import { useCallback } from "react";
import GuildBoostSlotStore from "../../../../../stores/billing/GuildBoostSlotStore";
import { GuildPowerupType, BoostPurchaseIntent } from "../../constants/GuildPowerupsConstants";
import { AnalyticsObjects, AnalyticsObjectTypes } from "../../../../../Constants";
import useGuildBoostPurchaseHandler from "../../../../guild_boosting/native/hooks/useGuildBoostPurchaseHandler";
import useAnalyticsLocations from "../../../../app_analytics/useAnalyticsLocations";
import BillingActionCreators from "../../../../../actions/native/BillingActionCreators";
import { fetchGuildBoostSlots } from "../../../../../actions/BoostingActionCreators";
import { getAvailableGuildBoostSlots } from "../../../../../utils/GuildBoostingUtils";
import { openTransferModal } from "../../../../../actions/native/BoostingActionCreators";
import { launchGuildBoostFlowOrAlert } from "../../../../guild_boosting/native/GuildBoostPurchasingUtils";
function $mk116890($env) {
return () => {
const availableGuildBoostSlots = getAvailableGuildBoostSlots(GuildBoostSlotStore.boostSlots);
const length = availableGuildBoostSlots.length;
const r14 = $env.$parent;
const r8 = r14[2];
if (length >= r8) {
const r15 = $env;
openTransferModal({
guildBoostSlots: availableGuildBoostSlots.slice(0, r8),
guildId: r14[0],
intent: r15[0]
});
}
};
}
let env10746 = {};
export default function useGuildPowerupsBoostAction(a0, a1, a2, a3, a4) {
let env21708 = {
$parent: env10746
};
env21708[0] = a0;
env21708[1] = a1;
env21708[2] = a2;
env21708[3] = a4;
const guildBoostPurchaseHandler = useGuildBoostPurchaseHandler(a3);
const shouldUseMobileWebRedirectCheckout = guildBoostPurchaseHandler.shouldUseMobileWebRedirectCheckout;
env21708[4] = shouldUseMobileWebRedirectCheckout;
const handleMobileWebRedirectCheckout = guildBoostPurchaseHandler.handleMobileWebRedirectCheckout;
env21708[5] = handleMobileWebRedirectCheckout;
const analyticsLocations = useAnalyticsLocations().analyticsLocations;
env21708[6] = analyticsLocations;
return useCallback(async () => {
let c27953_0, c27953_1;
L28: {
L21: {
let env30848;
const r8 = env21708;
c27953_1 = r8;
const r9 = env30848 = {
$parent: r8
};
c27953_0 = r9;
env30848[0] = void 0;
env30848[1] = void 0;
if (env21708[1] == null) {
break L28;
}
if (env21708[2] <= 0) {
break L28;
}
if (GuildBoostSlotStore.hasFetched) {
env30848[0] = env21708[1].type === GuildPowerupType.PERK ? BoostPurchaseIntent.PERK : void 0;
env30848[1] = getAvailableGuildBoostSlots(GuildBoostSlotStore.boostSlots);
if (env30848[1].length >= env21708[2]) {
openTransferModal({
guildBoostSlots: env30848[1].slice(0, env21708[2]),
guildId: env21708[0],
intent: env30848[0]
});
break L28;
}
if (env21708[4]) {
(0, env21708[5])(env21708[6], env21708[0]);
break L28;
}
launchGuildBoostFlowOrAlert({
source: {
...env21708[3],
object: AnalyticsObjects.BUTTON_CTA,
objectType: AnalyticsObjectTypes.BUY
},
analyticsLocations: env21708[6],
guildId: env21708[0],
onPaymentSuccess: $mk116890(c27953_0)
});
break L28;
}
await Promise.all([BillingActionCreators.init(), fetchGuildBoostSlots()]);
env30848[0] = env21708[1].type === GuildPowerupType.PERK ? BoostPurchaseIntent.PERK : void 0;
env30848[1] = getAvailableGuildBoostSlots(GuildBoostSlotStore.boostSlots);
if (env30848[1].length >= env21708[2]) {
openTransferModal({
guildBoostSlots: env30848[1].slice(0, env21708[2]),
guildId: env21708[0],
intent: env30848[0]
});
break L21;
}
if (env21708[4]) {
(0, env21708[5])(env21708[6], env21708[0]);
break L21;
}
launchGuildBoostFlowOrAlert({
source: {
...env21708[3],
object: AnalyticsObjects.BUTTON_CTA,
objectType: AnalyticsObjectTypes.BUY
},
analyticsLocations: env21708[6],
guildId: env21708[0],
onPaymentSuccess: $mk116890(c27953_0)
});
}
return void 0;
}
}, [a1, a2, a0, a4, shouldUseMobileWebRedirectCheckout, handleMobileWebRedirectCheckout, analyticsLocations]);
};
@@ -0,0 +1,291 @@
// Metro module 15145 (f15146).
import { useMemo } from "react";
import AccessibilityStore from "../../../../a11y/AccessibilityStore";
import GuildStore from "../../../../../stores/GuildStore";
import { GUILD_TAG_BADGE_PACKS_WAVE_ONE_SKU_ID_SET, GUILD_TAG_BADGE_PACKS_WAVE_TWO_SKU_ID_SET, GuildPowerupType } from "../../constants/GuildPowerupsConstants";
import { AnalyticsPages, AnalyticsSections } from "../../../../../Constants";
import { ContentDismissActionType } from "../../../../dismissible_content/DismissibleContentConstants";
import { ThemeTypes } from "../../../../../_bundle/Module505";
import { createStyles } from "../../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../../_bundle/Module712";
import { useStateFromStores } from "../../../../../_bundle/Module589";
import useTheme from "../../../../../hooks/useTheme";
import useGuildPowerupsBoostCount from "../../hooks/useGuildPowerupsBoostCount";
import useHasAllocateBoostPermission from "../../hooks/useHasAllocateBoostPermission";
import { GuildPowerupNotificationPopoutType } from "../../constants/GuildPowerupsNotification";
import useGuildPowerupsBoostAction from "./useGuildPowerupsBoostAction";
import openGuildPowerupsModal from "../utils/openGuildPowerupsModal";
import GuildPowerupsBoostGem from "../GuildPowerupsBoostGem";
import { intl, t } from "../../../../../intl/index.native";
import GuildPowerups_messages from "../../GuildPowerups.messages";
import GuildPowerupsImage from "../GuildPowerupsImage";
import Module15147 from "../../../../../_bundle/Module15147";
import { getGuildPowerupBannerImage } from "../../hooks/useGetGuildPowerupBannerImage";
import { GUILD_POWERUP_TAG_SKU_ID, GUILD_POWERUP_GUILD_THEME_SKU_ID, VANITY_URL_POWERUP_SKU_ID, GUILD_POWERUP_MAX_FILE_SIZE_250_MB_SKU_ID } from "../../../../../_bundle/Module4080";
import Module15143 from "../../../../../_bundle/Module15143";
import Module15148 from "../../../../../_bundle/Module15148";
import Module15149 from "../../../../../_bundle/Module15149";
import Module11642 from "../../../../../_bundle/Module11642";
import Module15150 from "../../../../../_bundle/Module15150";
import { useCoachmark } from "../../../../../design/components/Coachmark/native/useCoachmark.native";
const useStyles = createStyles((a0) => ({
coachmarkImage: {
height: 120,
width: 260 - 2 * Module712.space.PX_16,
borderRadius: Module712.radii.md
},
coachmarkCover: {
resizeMode: "cover"
},
boostGemBackground: {
width: 50,
height: 50,
backgroundColor: a0 === ThemeTypes.LIGHT ? "#0000001A" : "#0000003D"
}
}));
export default function useGuildPowerupsCoachmark(a0, a1, a2) {
let styles, stateFromStores2, c21707_5, boostCount, c21707_7;
const guildId = a1;
const stateFromStores = useStateFromStores([GuildStore], () => GuildStore.getGuild(guildId)?.name, [a1]);
styles = useStyles(useTheme());
stateFromStores2 = useStateFromStores([AccessibilityStore], () => AccessibilityStore.useReducedMotion);
const available = useGuildPowerupsBoostCount(a1).available;
const hasAllocateBoostPermission = useHasAllocateBoostPermission(a1);
c21707_5 = hasAllocateBoostPermission;
const r18 = a2?.type === GuildPowerupNotificationPopoutType.BOOST_TO_UNLOCK ? a2.powerup : void 0;
boostCount = r18 != null ? r18.cost - available : 0;
const guildPowerupsBoostAction = useGuildPowerupsBoostAction(a1, r18, boostCount, "boost_to_unlock_coachmark", {
page: AnalyticsPages.GUILD_CHANNEL,
section: AnalyticsSections.GUILD_HEADER
});
c21707_7 = guildPowerupsBoostAction;
useCoachmark(a0, useMemo(() => {
const r5 = {
title: "",
description: "",
position: "bottom",
visible: false,
onDismiss: () => {}
};
if (a2 == null) {
return r5;
}
const handleButtonPress = function handleButtonPress() {
if (a2 != null) {
a2.markAsDismissed(ContentDismissActionType.TAKE_ACTION);
openGuildPowerupsModal({
guildId
});
}
};
const handleDismiss = function handleDismiss() {
if (a2 != null) {
a2.markAsDismissed(ContentDismissActionType.USER_DISMISS);
}
};
const type = a2.type;
if (GuildPowerupNotificationPopoutType.LEVEL_REACHED === type) {
return {
...r5,
visible: true,
renderImgComponent: () => <GuildPowerupsBoostGem style={styles.boostGemBackground} gemWidth={30} gemHeight={30} />,
title: intl.formatToPlainString(GuildPowerups_messages["Zg/m9K"], {
perkName: a2.powerup.title
}),
description: intl.formatToPlainString(GuildPowerups_messages["1EGXSK"], {
perkName: a2.powerup.title
}),
buttonLabel: intl.string(t.RzWDqY),
buttonVariant: "primary",
onButtonPress: handleButtonPress,
onDismiss: handleDismiss
};
}
if (GuildPowerupNotificationPopoutType.PERKS_AVAILABLE === type) {
return {
...r5,
visible: true,
renderImgComponent: () => <GuildPowerupsBoostGem style={styles.boostGemBackground} gemWidth={30} gemHeight={30} />,
title: intl.string(GuildPowerups_messages.QpQBPQ),
description: intl.string(GuildPowerups_messages["6hn0xF"]),
buttonLabel: intl.string(t.RzWDqY),
buttonVariant: "primary",
onButtonPress: handleButtonPress,
onDismiss: handleDismiss
};
}
let powerups, guildPowerupBannerImage, c27952_2, powerup;
if (GuildPowerupNotificationPopoutType.PERKS_PURCHASABLE === type) {
powerups = a2.powerups;
if (powerups.length === 0) {
return r5;
}
const description = powerups.length >= 3 ? intl.formatToPlainString(GuildPowerups_messages["6Sv+3M"], {
perk: powerups[0].title,
perk2: powerups[1].title,
perk3: powerups[2].title
}) : powerups.length === 2 ? intl.formatToPlainString(GuildPowerups_messages.wcQOqC, {
perks: `${powerups[0].title} & ${powerups[1].title}`
}) : intl.formatToPlainString(GuildPowerups_messages.ZF8NT6, {
perk: powerups[0].title
});
const r357 = {
...r5,
visible: true,
renderImgComponent: () => {
let imageUrl;
if (powerups.length > 1) {
imageUrl = Module15147;
} else {
imageUrl = getGuildPowerupBannerImage(powerups[0], stateFromStores2, true);
if (imageUrl == null) {
imageUrl = "";
}
}
return <GuildPowerupsImage imageUrl={imageUrl} isAnimated={powerups.length === 1} style={[styles.coachmarkImage, styles.coachmarkCover]} />;
}
};
let guildName = stateFromStores;
if (stateFromStores == null) {
guildName = "";
}
r357.title = intl.formatToPlainString(GuildPowerups_messages.LmpChE, {
guildName
});
r357.description = description;
r357.buttonLabel = intl.string(t.RzWDqY);
r357.buttonVariant = "primary";
r357.onButtonPress = handleButtonPress;
r357.onDismiss = handleDismiss;
return r357;
}
if (GuildPowerupNotificationPopoutType.NEW_PERK_AVAILABLE === type) {
const powerups2 = a2.powerups;
const r101 = powerups2.find((item) => item.skuId === GUILD_POWERUP_TAG_SKU_ID);
if (r101 != null) {
guildPowerupBannerImage = getGuildPowerupBannerImage(r101, stateFromStores2, true);
if (guildPowerupBannerImage != null) {
return {
...r5,
visible: true,
renderImgComponent: () => <GuildPowerupsImage imageUrl={guildPowerupBannerImage} isAnimated={!stateFromStores2} style={styles.coachmarkImage} />,
title: intl.string(GuildPowerups_messages.GcEkAP),
description: intl.string(GuildPowerups_messages.yo0g7X),
buttonLabel: intl.string(t.RzWDqY),
buttonVariant: "primary",
onButtonPress: handleButtonPress,
onDismiss: handleDismiss
};
}
}
const r110 = powerups2.find((item) => item.skuId === GUILD_POWERUP_GUILD_THEME_SKU_ID);
c27952_2 = r110;
if (r110 != null) {
return {
...r5,
visible: true,
renderImgComponent: () => {
let imageUrl = getGuildPowerupBannerImage(c27952_2, stateFromStores2, true);
if (imageUrl == null) {
imageUrl = Module15143;
}
return <GuildPowerupsImage imageUrl={imageUrl} isAnimated={!stateFromStores2} style={[styles.coachmarkImage, styles.coachmarkCover]} />;
},
title: r110.title,
description: typeof r110.description === "string" ? r110.description : "",
buttonLabel: intl.string(t.RzWDqY),
buttonVariant: "primary",
onButtonPress: handleButtonPress,
onDismiss: handleDismiss
};
}
if (powerups2.find((item) => item.skuId === VANITY_URL_POWERUP_SKU_ID) != null) {
return {
...r5,
visible: true,
renderImgComponent: () => <GuildPowerupsImage imageUrl={Module15148} style={styles.coachmarkImage} />,
title: intl.string(GuildPowerups_messages.Ygpx4Q),
description: intl.string(GuildPowerups_messages.mmNkUA),
buttonLabel: intl.string(t.RzWDqY),
buttonVariant: "primary",
onButtonPress: handleButtonPress,
onDismiss: handleDismiss
};
}
if (powerups2.find((item) => GUILD_TAG_BADGE_PACKS_WAVE_TWO_SKU_ID_SET.has(item.skuId)) != null) {
return {
...r5,
visible: true,
renderImgComponent: () => <GuildPowerupsImage imageUrl={Module15149} style={styles.coachmarkImage} />,
title: intl.string(GuildPowerups_messages["kA2c+n"]),
description: intl.string(GuildPowerups_messages.TUilLj),
buttonLabel: intl.string(t.RzWDqY),
buttonVariant: "primary",
onButtonPress: handleButtonPress,
onDismiss: handleDismiss
};
}
if (powerups2.find((item) => GUILD_TAG_BADGE_PACKS_WAVE_ONE_SKU_ID_SET.has(item.skuId)) != null) {
return {
...r5,
visible: true,
renderImgComponent: () => <GuildPowerupsImage imageUrl={Module11642} style={styles.coachmarkImage} />,
title: intl.string(GuildPowerups_messages["kA2c+n"]),
description: intl.string(GuildPowerups_messages.TUilLj),
buttonLabel: intl.string(t.RzWDqY),
buttonVariant: "primary",
onButtonPress: handleButtonPress,
onDismiss: handleDismiss
};
}
return powerups2.find((item) => item.skuId === GUILD_POWERUP_MAX_FILE_SIZE_250_MB_SKU_ID) != null ? {
...r5,
visible: true,
renderImgComponent: () => <GuildPowerupsImage imageUrl={Module15150} isAnimated={false} style={styles.coachmarkImage} />,
title: intl.string(GuildPowerups_messages.rp0Ff1),
description: intl.string(GuildPowerups_messages["3L/DZq"]),
buttonLabel: intl.string(t.RzWDqY),
buttonVariant: "primary",
onButtonPress: handleButtonPress,
onDismiss: handleDismiss
} : r5;
}
if (GuildPowerupNotificationPopoutType.BOOST_TO_UNLOCK === type) {
powerup = a2.powerup;
return {
...r5,
visible: true,
offsetY: 8,
renderImgComponent: () => {
let r28;
if (powerup.type === GuildPowerupType.LEVEL) {
r28 = <GuildPowerupsBoostGem style={styles.boostGemBackground} gemWidth={30} gemHeight={30} />;
} else {
let imageUrl = getGuildPowerupBannerImage(powerup, stateFromStores2, true);
if (imageUrl == null) {
imageUrl = "";
}
r28 = <GuildPowerupsImage imageUrl={imageUrl} isAnimated={!stateFromStores2} style={[styles.coachmarkImage, styles.coachmarkCover]} />;
}
return r28;
},
title: intl.string(GuildPowerups_messages.n37JhA),
description: intl.formatToPlainString(c21707_5 !== true && powerup.type !== GuildPowerupType.LEVEL ? GuildPowerups_messages["7MZ2tu"] : GuildPowerups_messages.Yr1ogl, {
boostCount,
perkName: powerup.title
}),
buttonLabel: intl.string(t.oPAx73),
buttonVariant: "primary",
onButtonPress: () => {
a2.markAsDismissed(ContentDismissActionType.TAKE_ACTION);
c21707_7();
},
onDismiss: handleDismiss
};
}
if (GuildPowerupNotificationPopoutType.GAME_SERVER_HOSTING_AVAILABLE !== type && GuildPowerupNotificationPopoutType.GAME_SERVER_HOSTING_GUILD_ELIGIBLE !== type) {
GuildPowerupNotificationPopoutType.GAME_SERVER_HOSTING_ENABLED;
}
return r5;
}, [boostCount, hasAllocateBoostPermission, a1, stateFromStores, guildPowerupsBoostAction, a2, styles, stateFromStores2]));
};
@@ -0,0 +1,32 @@
// Metro module 11640 (f11641).
import { useMemo } from "react";
import GuildStore from "../../../../../stores/GuildStore";
import { useStateFromStores } from "../../../../../_bundle/Module589";
import { guildSupportsTags } from "../../../../guild_tag/GuildTagUtils";
import { intl } from "../../../../../intl/index.native";
import GuildPowerups_messages from "../../GuildPowerups.messages";
import Module11641 from "../../../../../_bundle/Module11641";
import Module11642 from "../../../../../_bundle/Module11642";
import { assertNever } from "../../../../../utils/GlobalUtils";
export default function usePowerupGroupConfig(c19049_0, a1) {
const stateFromStores = useStateFromStores([GuildStore], () => {
const guild = GuildStore.getGuild(c19049_0);
return guild != null && guildSupportsTags(guild);
});
return useMemo(() => {
if (a1.group === "guildTagsBadgePacks") {
return {
title: intl.string(GuildPowerups_messages.KC9HRW),
description: intl.string(GuildPowerups_messages.GJiSmP),
image: {
staticUrl: Module11641,
animatedUrl: Module11642
},
disabledReason: stateFromStores ? void 0 : intl.string(GuildPowerups_messages.lvk1Gc),
badge: void 0,
forceStaticImages: true
};
}
assertNever(a1.group);
}, [a1, stateFromStores]);
};
@@ -0,0 +1,43 @@
// Metro module 11603 (f11604).
import { useRef, useEffect } from "react";
import { ContentDismissActionType } from "../../../../dismissible_content/DismissibleContentConstants";
import useGuildPowerupRollbackModalConfig from "../../hooks/useGuildPowerupRollbackModalConfig";
import { useSelectedDismissibleContent } from "../../../../dismissible_content/hooks/useSelectedDismissibleContent";
import openGuildPowerupRollbackSheet, { GUILD_POWERUP_ROLLBACK_SHEET_KEY } from "../utils/openGuildPowerupRollbackSheet";
import ActionSheetActionCreators from "../../../../action_sheet/native/ActionSheetActionCreators";
export default function useShowGuildPowerupRollbackSheet(a0, a1, r7 = false) {
const guildPowerupRollbackModalConfig = useGuildPowerupRollbackModalConfig(a0, a1);
let shouldShow = guildPowerupRollbackModalConfig.shouldShow;
const modalConfig = guildPowerupRollbackModalConfig.modalConfig;
if (shouldShow) {
shouldShow = modalConfig != null;
}
if (shouldShow) {
shouldShow = !r7;
}
const r15 = [];
if (shouldShow) {
r15.push(modalConfig.dismissibleContent);
}
const [r26, r27] = useSelectedDismissibleContent(r15);
let c19025_1 = r26;
let c19025_2 = r27;
const ref = useRef(false);
useEffect(() => {
if (!(ref.current || modalConfig == null || modalConfig.primaryButtonText == null || c19025_1 !== modalConfig.dismissibleContent)) {
ref.current = true;
openGuildPowerupRollbackSheet({
header: modalConfig.header,
body: modalConfig.bodies.join("\n\n"),
ctaText: modalConfig.primaryButtonText,
onCtaPress: () => {
c19025_2(ContentDismissActionType.TAKE_ACTION);
ActionSheetActionCreators.hideActionSheet(GUILD_POWERUP_ROLLBACK_SHEET_KEY);
},
onDismiss: () => {
c19025_2(ContentDismissActionType.USER_DISMISS);
}
});
}
}, [r26, modalConfig, r27]);
};
@@ -0,0 +1,13 @@
// Metro module 11614 (f11615).
import Module8531, { Path } from "../../../../../_bundle/Module8531";
export default function BoostGem(props) {
const { width = 39, height = 66 } = props;
return <Module8531 width={width} height={height} viewBox="0 0 39 66" fill="none" style={props.style}>
<Path d="M19.3146 0L0 19.4029V46.6865L19.3146 65.9999L38.6293 46.5969V19.388L19.3146 0ZM28.972 42.6566L19.3146 52.3432L9.65732 42.6566V23.388L19.3146 13.6865L28.972 23.388V42.6566Z" fill="#FA6EF6" />
<Path d="M19.3145 0V13.6316L28.9718 23.2941L38.6291 19.3102L19.3145 0Z" fill="#FFADFB" />
<Path d="M9.65732 42.7056L0 46.7269L19.3146 65.9996V52.3419L9.65732 42.7056Z" fill="#E655D4" />
<Path d="M9.65723 23.3317V42.6835L19.3145 52.4118L28.9719 42.6835V23.3317L19.3145 13.5884L9.65723 23.3317Z" fill="#FFCFF9" />
<Path d="M28.9719 23.1273L9.74637 42.7058H9.65723V37.3827L26.3273 20.3823L28.9719 23.1273Z" fill="white" />
<Path d="M28.9717 31.0586V36.3917L16.1689 49.4997L13.52 46.6984L28.9717 31.0586Z" fill="white" />
</Module8531>;
};
@@ -0,0 +1,65 @@
// Metro module 12581 (f12582).
import Module8531, { Path } from "../../../../../_bundle/Module8531";
export default function BoostGemPixel(props) {
const { width = 24, height = 24 } = props;
return <Module8531 width={width} height={height} viewBox="0 0 24 24" fill="none" style={props.style}>
<Path d="M10.5 12H9V10.5H10.5V12Z" fill="#EFEFF1" />
<Path d="M12 10.5H10.5V9H12V10.5Z" fill="#EFEFF1" />
<Path d="M13.5 9H12V7.5H13.5V9Z" fill="#EFEFF1" />
<Path d="M12 4.5H10.5V6H9V7.5H7.5V4.5H9V3H10.5V1.5H12V4.5Z" fill="#EFEFF1" />
<Path d="M10.5 13.5H9V12H10.5V13.5Z" fill="#FCC0F4" />
<Path d="M12 12H10.5V10.5H12V12Z" fill="#FCC0F4" />
<Path d="M13.5 10.5H12V9H13.5V10.5Z" fill="#FCC0F4" />
<Path d="M15 9H13.5V7.5H15V9Z" fill="#FCC0F4" />
<Path d="M12 18H10.5V16.5H12V18Z" fill="#FD99E9" />
<Path d="M7.5 16.5H6V7.5H7.5V16.5Z" fill="#FD99E9" />
<Path d="M13.5 16.5H12V15H13.5V16.5Z" fill="#FD99E9" />
<Path d="M10.5 15H9V13.5H10.5V15Z" fill="#FD99E9" />
<Path d="M15 15H13.5V13.5H15V15Z" fill="#FD99E9" />
<Path d="M12 13.5H10.5V12H12V13.5Z" fill="#FD99E9" />
<Path d="M13.5 12H12V10.5H13.5V12Z" fill="#FD99E9" />
<Path d="M10.5 10.5H9V9H10.5V10.5Z" fill="#FD99E9" />
<Path d="M15 10.5H13.5V9H15V10.5Z" fill="#FD99E9" />
<Path d="M12 9H10.5V7.5H12V9Z" fill="#FD99E9" />
<Path d="M10.5 7.5H9V6H10.5V7.5Z" fill="#FD99E9" />
<Path d="M13.5 7.5H12V6H13.5V7.5Z" fill="#FD99E9" />
<Path d="M13.5 3H15V4.5H16.5V7.5H15V6H13.5V4.5H12V1.5H13.5V3Z" fill="#FD99E9" />
<Path d="M12 6H10.5V4.5H12V6Z" fill="#FD99E9" />
<Path d="M13.5 18V19.5H10.5V18H13.5Z" fill="#660066" />
<Path d="M10.5 18H9V16.5H10.5V18Z" fill="#660066" />
<Path d="M15 18H13.5V16.5H15V18Z" fill="#660066" />
<Path d="M18 18H16.5V16.5H18V18Z" fill="#660066" />
<Path d="M16.5 16.5H15V12H16.5V16.5Z" fill="#660066" />
<Path d="M13.5 22.5H12V19.5H13.5V18H15V16.5H16.5V19.5H15V21H13.5V22.5Z" fill="#B3269C" />
<Path d="M7.5 18H6V16.5H7.5V18Z" fill="#B3269C" />
<Path d="M9 16.5H7.5V7.5H9V16.5Z" fill="#B3269C" />
<Path d="M16.5 12H15V7.5H16.5V12Z" fill="#B3269C" />
<Path d="M18 7.5H16.5V6H18V7.5Z" fill="#B3269C" />
<Path d="M12 22.5H10.5V21H9V19.5H7.5V16.5H9V18H10.5V19.5H12V22.5Z" fill="#FF4CD2" />
<Path d="M13.5 18H12V16.5H13.5V18Z" fill="#FF4CD2" />
<Path d="M15 13.5H13.5V15H12V16.5H9V15H10.5V13.5H12V12H13.5V10.5H15V13.5Z" fill="#FF4CD2" />
<Path d="M15 16.5H13.5V15H15V16.5Z" fill="#FF4CD2" />
<Path d="M18 16.5H16.5V7.5H18V16.5Z" fill="#FF4CD2" />
<Path d="M10.5 9H9V7.5H10.5V9Z" fill="#FF4CD2" />
<Path d="M7.5 7.5H6V6H7.5V7.5Z" fill="#FF4CD2" />
<Path d="M12 7.5H10.5V6H12V7.5Z" fill="#FF4CD2" />
<Path d="M15 7.5H13.5V6H15V7.5Z" fill="#FF4CD2" />
<Path d="M13.5 6H12V4.5H13.5V6Z" fill="#FF4CD2" />
<Path d="M13.5 22.5V24H10.5V22.5H13.5Z" fill="black" />
<Path d="M10.5 22.5H9V21H10.5V22.5Z" fill="black" />
<Path d="M15 22.5H13.5V21H15V22.5Z" fill="black" />
<Path d="M9 21H7.5V19.5H9V21Z" fill="black" />
<Path d="M16.5 21H15V19.5H16.5V21Z" fill="black" />
<Path d="M7.5 19.5H6V18H7.5V19.5Z" fill="black" />
<Path d="M18 19.5H16.5V18H18V19.5Z" fill="black" />
<Path d="M6 18H4.5V6H6V18Z" fill="black" />
<Path d="M19.5 18H18V6H19.5V18Z" fill="black" />
<Path d="M7.5 6H6V4.5H7.5V6Z" fill="black" />
<Path d="M18 6H16.5V4.5H18V6Z" fill="black" />
<Path d="M9 4.5H7.5V3H9V4.5Z" fill="black" />
<Path d="M16.5 4.5H15V3H16.5V4.5Z" fill="black" />
<Path d="M10.5 3H9V1.5H10.5V3Z" fill="black" />
<Path d="M15 3H13.5V1.5H15V3Z" fill="black" />
<Path d="M13.5 1.5H10.5V0H13.5V1.5Z" fill="black" />
</Module8531>;
};
@@ -0,0 +1,7 @@
// Metro module 11606 (f11607).
import ActionSheetActionCreators from "../../../../action_sheet/native/ActionSheetActionCreators";
let c7922_3 = "GUILD_POWERUP_ROLLBACK_SHEET_KEY";
export default function openGuildPowerupRollbackSheet(a0) {
ActionSheetActionCreators.openLazy(import("../GuildPowerupRollbackSheet"), c7922_3, a0);
};
export const GUILD_POWERUP_ROLLBACK_SHEET_KEY = "GUILD_POWERUP_ROLLBACK_SHEET_KEY";
Loaded 100 of 33051 files, more files were not shown because too many files have changed in this diff. Show more