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,50 @@
// Metro module 13107 (f13108).
import { Endpoints } from "../../Constants";
import Dispatcher from "../../Dispatcher";
import { HTTP } from "../../_bundle/sendRequest";
export async function fetchGuildForPopout(guildId) {
let c27410_4 = 0;
let c30613_0, c30613_1;
L10: {
try {
c30613_0 = guildId;
c30613_1 = void 0;
Dispatcher.dispatch({
type: "GUILD_POPOUT_FETCH_START",
guildId
});
c27410_4 = 1;
c30613_1 = await HTTP.get({
url: Endpoints.GUILD_PREVIEW(guildId),
oldFormErrors: true,
rejectWithError: true
});
Dispatcher.dispatch({
type: "GUILD_POPOUT_FETCH_SUCCESS",
guildId: c30613_0,
guild: c30613_1.body
});
c27410_4 = 0;
} catch ($e) {
let r8 = $e;
if (c27410_4 !== 0) {
while (true) {
try {
c27410_4 = 0;
Dispatcher.dispatch({
type: "GUILD_POPOUT_FETCH_FAILURE",
guildId: c30613_0
});
break L10;
} catch ($e) {
r8 = $e;
if (c27410_4 === 0) {
break;
}
}
}
}
throw r8;
}
}
}
@@ -0,0 +1,55 @@
// Metro module 13106 (f13107).
import AuthenticationStore from "../../stores/AuthenticationStore";
import { makeDiscoverableGuild } from "../../utils/GuildDiscoveryUtils";
import Module589 from "../../_bundle/Module589";
import Dispatcher from "../../Dispatcher";
let c9063_3 = {
UNSET: "unset",
FETCHING: "fetching",
FAILED: "failed",
SUCCEEDED: "succeeded"
};
let c9063_4 = {
guilds: {}
};
class GuildPopoutStore extends Module589.Store {
static displayName = "GuildPopoutStore";
initialize() {
this.waitFor(AuthenticationStore);
}
isFetchingGuild(a0) {
const r6 = c9063_4.guilds[a0];
return r6 != null && r6.fetchState === c9063_3.FETCHING;
}
getGuild(a0) {
const r5 = c9063_4.guilds[a0];
return r5 != null ? r5.guild : null;
}
hasFetchFailed(a0) {
const r6 = c9063_4.guilds[a0];
return r6 != null && r6.fetchState === c9063_3.FAILED;
}
}
const guildPopoutStore = new GuildPopoutStore(Dispatcher, {
GUILD_POPOUT_FETCH_START: function handleFetchStart({ guildId }) {
c9063_4.guilds[guildId] = {
...c9063_4.guilds[guildId],
fetchState: c9063_3.FETCHING
};
},
GUILD_POPOUT_FETCH_SUCCESS: function handleFetchSuccess(a0) {
const guildId = a0.guildId;
c9063_4.guilds[guildId] = {
...c9063_4.guilds[guildId],
guild: makeDiscoverableGuild(a0.guild),
fetchState: c9063_3.SUCCEEDED
};
},
GUILD_POPOUT_FETCH_FAILURE: function handleFetchFailure({ guildId }) {
c9063_4.guilds[guildId] = {
...c9063_4.guilds[guildId],
fetchState: c9063_3.FAILED
};
}
});
export default guildPopoutStore;
@@ -0,0 +1,158 @@
// Metro module 8283 (f8284).
import UserGuildJoinRequestStore from "../guild_member_verification/UserGuildJoinRequestStore";
import GuildMemberStore from "../../stores/GuildMemberStore";
import GuildProfileStore, { GuildProfileFetchStatus } from "./GuildProfileStore";
import { AnalyticEvents, Endpoints } from "../../Constants";
import Dispatcher from "../../Dispatcher";
import { HTTP, rejectWithMigratedError } from "../../_bundle/sendRequest";
import { buildGuildProfileFromServer, buildGuildProfileUpdateForServer, buildTopGamesFromServer } from "./GuildProfileBuilders";
import { APIError } from "../../errors/index";
import AnalyticsUtils from "../../utils/AnalyticsUtils";
export function getGuildProfile(a0, a1) {
let r31, r34;
const guildId = a0;
let r3 = arguments[2];
if (r3 === void 0) {
r3 = {};
}
let respectBackoff = r3.respectBackoff;
if (respectBackoff === void 0) {
respectBackoff = false;
}
if (a0 == null) {
return Promise.resolve(null);
}
const fetchStatus = GuildProfileStore.getFetchStatus(a0);
const FETCHING = GuildProfileFetchStatus.FETCHING;
let r8 = GuildProfileStore.getLastSyncTimestamp(a0);
const profile = GuildProfileStore.getProfile(a0);
const r21 = Date.now();
if (r8 == null) {
r8 = 0;
}
const r22 = r21 - r8;
const nextFetchAllowedAt = GuildProfileStore.getNextFetchAllowedAt(a0);
if (respectBackoff && (nextFetchAllowedAt != null && Date.now() < nextFetchAllowedAt)) {
r31 = Promise.resolve(profile);
} else if (fetchStatus === FETCHING && !a1) {
r31 = Promise.resolve(null);
} else {
if (profile != null && (!(r22 > 60000) && !a1)) {
r34 = Promise.resolve(profile);
} else {
Dispatcher.dispatch({
type: "GUILD_PROFILE_FETCH",
guildId: a0
});
r34 = HTTP.get({
url: Endpoints.GUILD_PROFILE(a0),
rejectWithError: rejectWithMigratedError()
}).then((result) => {
const profile = buildGuildProfileFromServer(result.body);
Dispatcher.dispatch({
type: "GUILD_PROFILE_FETCH_SUCCESS",
guildId,
profile
});
return profile;
}).catch((a0) => {
Dispatcher.dispatch({
type: "GUILD_PROFILE_FETCH_FAILURE",
guildId,
error: new APIError(a0)
});
return null;
});
}
r31 = r34;
}
return r31;
}
export function saveGuildProfile(a0, a1) {
let r38;
const guildId2 = a0;
if (GuildProfileStore.getIsUpdating(a0)) {
r38 = Promise.resolve(null);
} else {
Dispatcher.dispatch({
type: "GUILD_PROFILE_UPDATE",
guildId: a0,
updates: a1
});
r38 = HTTP.patch({
url: Endpoints.GUILD_PROFILE(a0),
body: buildGuildProfileUpdateForServer(a1),
rejectWithError: rejectWithMigratedError()
}).then((result) => {
const profile = buildGuildProfileFromServer(result.body);
Dispatcher.dispatch({
type: "GUILD_PROFILE_UPDATE_SUCCESS",
guildId: guildId2,
profile
});
return profile;
}).catch((a0) => {
Dispatcher.dispatch({
type: "GUILD_PROFILE_UPDATE_FAILURE",
guildId: guildId2,
error: new APIError(a0)
});
return null;
});
}
return r38;
}
export function setGuildProfileVisibility(a0, a1) {
let r35;
const guildId3 = a0;
if (GuildProfileStore.getIsUpdating(a0)) {
r35 = Promise.resolve(null);
} else {
Dispatcher.dispatch({
type: "GUILD_PROFILE_UPDATE_VISIBILITY",
guildId: a0,
visibility: a1
});
r35 = HTTP.put({
url: Endpoints.GUILD_PROFILE_VISIBILITY(a0),
body: {
visibility: a1
},
rejectWithError: rejectWithMigratedError()
}).then((result) => {
const visibility = result.body.visibility;
Dispatcher.dispatch({
type: "GUILD_PROFILE_UPDATE_VISIBILITY_SUCCESS",
guildId: guildId3,
visibility
});
return visibility;
}).catch((a0) => {
const aPIError = new APIError(a0);
Dispatcher.dispatch({
type: "GUILD_PROFILE_UPDATE_VISIBILITY_FAILURE",
guildId: guildId3,
error: aPIError
});
throw aPIError;
});
}
return r35;
}
export async function fetchGuildTopGames(c26171_0) {
let c26171_2;
c26171_2 = void 0;
let c29936_0 = await HTTP.get({
url: Endpoints.GUILD_TOP_GAMES(c26171_0),
rejectWithError: rejectWithMigratedError()
});
return buildTopGamesFromServer(c29936_0.body.top_games);
}
export function trackGuildProfileViewed(a0, a1) {
AnalyticsUtils.track(AnalyticEvents.GUILD_PROFILE_VIEWED, {
guild_id: a0,
location_stack: a1,
is_member: GuildMemberStore.getSelfMember(a0) != null,
has_join_request: UserGuildJoinRequestStore.getRequest(a0) != null
});
}
@@ -0,0 +1,215 @@
// Metro module 5184 (f5185).
import { EmojiDisambiguations } from "../emojis/EmojiStore";
import UnicodeEmojis from "../emojis/UnicodeEmojis";
import { MAX_TRAITS } from "../../_bundle/Module5185";
import { isNotNullish } from "../../utils/GlobalUtils";
import { GuildProfileVisibility } from "./GuildProfileTypes";
let c3131_5, buildGuildProfileTraitsFromServer, buildGuildProfileFromServer;
const getEmoji = function getEmoji({ guildId, emojiId, emojiName }) {
const r5 = EmojiDisambiguations.get(guildId);
return emojiId == null ? emojiName == null ? null : emojiId != null ? r5 != null ? r5.getById(emojiId) : null : emojiName != null ? UnicodeEmojis.getByName(emojiName) : null : emojiId != null ? r5 != null ? r5.getById(emojiId) : null : emojiName != null ? UnicodeEmojis.getByName(emojiName) : null;
};
buildGuildProfileTraitsFromServer = function buildGuildProfileTraitsFromServer(id, traits) {
const r34 = new Array(MAX_TRAITS).fill(c3131_5);
for (const item of traits) {
if (!(item.position < 0 || item.position >= MAX_TRAITS)) {
const position = item.position;
let emoji = getEmoji({
guildId: id,
emojiId: item.emoji_id,
emojiName: item.emoji_name
});
if (emoji == null) {
emoji = void 0;
}
r34[position] = {
label: item.label,
emoji
};
}
}
return r34;
};
buildGuildProfileFromServer = function buildGuildProfileFromServer(a0) {
let description = a0.description;
if (description == null) {
description = "";
}
const brand_color_primary = a0.brand_color_primary;
const brandColorPrimary = brand_color_primary == null ? null : brand_color_primary !== "" ? brand_color_primary : null;
const id = a0.id;
let traits = a0.traits;
if (traits == null) {
traits = [];
}
const r3 = {
id: a0.id,
name: a0.name,
description,
icon: a0.icon_hash,
customBanner: a0.custom_banner_hash,
onlineCount: a0.online_count,
memberCount: a0.member_count,
brandColorPrimary,
visibility: a0.visibility,
traits: buildGuildProfileTraitsFromServer(id, traits),
gameApplicationIds: null,
gameActivity: null,
games: null,
features: null,
tag: null,
badge: null,
badgeColorPrimary: null,
badgeColorSecondary: null,
badgeHash: null,
premiumSubscriberCount: null,
premiumTier: null
};
let game_application_ids = a0.game_application_ids;
if (game_application_ids == null) {
game_application_ids = [];
}
r3.gameApplicationIds = game_application_ids;
const game_activity = a0.game_activity;
r3.gameActivity = game_activity == null ? {} : Object.entries(game_activity).reduce((acc, item) => {
const [r13, r14] = item;
acc[r13] = {
level: r14.activity_level,
score: r14.activity_score
};
return acc;
}, {});
r3.games = a0.games;
let features = a0.features;
if (features == null) {
features = [];
}
r3.features = features;
r3.tag = a0.tag;
r3.badge = a0.badge;
r3.badgeColorPrimary = a0.badge_color_primary;
r3.badgeColorSecondary = a0.badge_color_secondary;
r3.badgeHash = a0.badge_hash;
r3.premiumSubscriberCount = a0.premium_subscription_count;
r3.premiumTier = a0.premium_tier;
return r3;
};
c3131_5 = {
label: ""
};
export { buildGuildProfileFromServer };
export function buildGuildProfileUpdateForServer(a0) {
const r2 = {};
if (a0.name != null) {
r2.name = a0.name;
}
if (a0.description != null) {
r2.description = a0.description;
}
if (a0.icon !== void 0) {
r2.icon = a0.icon;
}
if (a0.customBanner !== void 0) {
r2.custom_banner = a0.customBanner;
}
if (a0.visibility != null) {
r2.visibility = a0.visibility;
}
if (a0.brandColorPrimary !== void 0) {
r2.brand_color_primary = a0.brandColorPrimary;
}
if (a0.traits != null) {
r2.traits = a0.traits.map((trait, index) => {
const r9 = trait?.label == null;
const r10 = r9 ? null : trait.label.length <= 0 ? null : {
label: trait.label,
position: index,
emoji_id: trait.emoji?.id,
emoji_name: trait.emoji?.name,
emoji_animated: trait.emoji?.animated
};
return r10;
}).filter(isNotNullish);
}
if (a0.gameApplicationIds != null) {
r2.game_application_ids = a0.gameApplicationIds;
}
if (a0.tag !== void 0) {
r2.tag = a0.tag;
}
if (a0.badge !== void 0) {
r2.badge = a0.badge;
}
if (a0.badgeColorPrimary !== void 0) {
r2.badge_color_primary = a0.badgeColorPrimary;
}
if (a0.badgeColorSecondary !== void 0) {
r2.badge_color_secondary = a0.badgeColorSecondary;
}
return r2;
}
export function buildTopGamesFromServer(a0) {
return a0.reduce((acc, item) => {
acc[item.game_application_id] = {
level: item.activity_level,
score: item.activity_score
};
return acc;
}, {});
}
export function buildGuildProfileFromInvite(a0) {
const { guild, profile } = a0;
let r3 = profile != null ? buildGuildProfileFromServer(profile) : null;
if (r3 == null) {
const r11 = guild == null;
let r12 = null;
if (!r11) {
let description = guild.description;
if (description == null) {
description = "";
}
let approximate_presence_count = guild.approximate_presence_count;
if (approximate_presence_count == null) {
approximate_presence_count = a0.approximate_presence_count;
}
if (approximate_presence_count == null) {
approximate_presence_count = 0;
}
let approximate_member_count = guild.approximate_member_count;
if (approximate_member_count == null) {
approximate_member_count = a0.approximate_member_count;
}
if (approximate_member_count == null) {
approximate_member_count = 0;
}
let features = guild.features;
if (features == null) {
features = [];
}
r12 = {
id: guild.id,
name: guild.name,
description,
icon: guild.icon,
customBanner: guild.banner,
onlineCount: approximate_presence_count,
memberCount: approximate_member_count,
visibility: GuildProfileVisibility.NOT_SPECIFIED,
traits: [],
gameApplicationIds: [],
gameActivity: {},
features,
brandColorPrimary: null,
tag: null,
badge: null,
badgeHash: null,
badgeColorPrimary: null,
badgeColorSecondary: null,
premiumSubscriberCount: guild.premium_subscription_count,
premiumTier: guild.premium_tier
};
}
r3 = r12;
}
return r3;
}
@@ -0,0 +1,47 @@
// Metro module 8454 (f8455).
const r16 = {
BOULDER: "Boulder",
CASCADE: "Cascade",
THUNDER: "Thunder",
SOUL: "Soul",
MARSH: "Marsh",
VOLCANO: "Volcano",
EARTH: "Earth",
ZEPHYR: "Zephyr",
RISING: "Rising"
};
const r28 = [{
name: r16.SOUL,
color: "#ff1c90"
}, {
name: r16.VOLCANO,
color: "#e81d1e"
}, {
name: r16.MARSH,
color: "#e86e1d"
}, {
name: r16.THUNDER,
color: "#e8c02f"
}, {
name: r16.RISING,
color: "#71368a"
}, {
name: r16.ZEPHYR,
color: "#029FFC"
}, {
name: r16.CASCADE,
color: "#4fe2ca"
}, {
name: r16.EARTH,
color: "#406601"
}, {
name: r16.BOULDER,
color: "#272727"
}];
const r45 = ["363445589247131668", "700136079562375258", "1402418696126992445", "1402418491272986635", "1158877933042143272", "1402418703554842694", "1402418714716143646", "356875221078245376", "356875988589740042", "356877880938070016", "1402418487745581248", "1402418717781921935", "542075586886107149", "762434991303950386", "1402418436809953330", "356876590342340608", "1260340082150346932", "1253061774555611238", "1167674267748540516", "359509007423242240", "1257819671114289184", "1402418103702524046", "357607478105604096", "1137125502985961543", "1402418594532298837", "356875762940379136", "1121201675240210523", "1205090671527071784", "357607133254254632", "1402418075726254102", "363409643973771264", "359509387670192128", "1402418239342120960", "742897755160313986", "1215361187684946010", "1247227126416146462", "1402418440685486130", "1402418344912752671", "1402418571715543120", "1256912167685587034", "1402418078813523999", "356954277803065354", "1402418648332898466", "356879032584896512", "506950362461110273", "1113966530531704943", "356944273133928458", "363447565905166336", "363413743335374859", "356942674672091136", "426526722322726912", "1402418586244612216", "905961880789590076", "356888453796986880", "398632010442211348", "1402418082366095493", "1124351715618074634", "356888577310851072", "787443973538971748", "1197827812623650866", "1124349969906815007", "356875890958925834", "356889262362329098", "425778010222886912", "428055627030331402", "1224418065295478955", "1263691812338536570", "372438022647578634", "1129504162200166401", "1238113262969557002", "443159611479031808", "615752773690064908", "1182713227491147776", "358421669603311616", "1174041358995042375", "385538724592746496", "1124358970618953818", "428054228511227914", "1402417933225033759", "1234262945350025246", "363430548028522496", "359509332490059776", "358420454764969994", "1124353632758939688", "363413834301571072", "1162076274622222346", "359509759642042378", "477152881196269569", "449806905901056012", "1402418087793528862", "940810636273795162", "359510095811444736", "1245451463736692857", "356887282982191114", "1124351876033425529", "363411421553360896", "1162151882039504916", "1067554911358832721", "1140238527980916757", "359801269008859136", "1272842103910699040", "1276737795012165766"];
const map = new Map(r45.map((item, index, a2) => [item, a2.length - index]));
export { r16 as BannerPalettePresets };
export { r28 as BANNER_PALETTE_PRESETS };
export const INVALID_ACCESS_ERROR_CODE = 50001;
export { r45 as HOISTED_SEARCH_GAME_IDS };
export { map as HOISTED_SEARCH_GAME_IDS_BY_PRIORITY };
@@ -0,0 +1,19 @@
// Metro module 11952 (f11953).
import { createApexExperiment } from "../experiments/apex/index";
const apexExperiment = createApexExperiment({
name: "2026-07-server-tag-game-profiles-mobile",
kind: "user",
defaultConfig: {
enabled: false
},
variations: {
1: {
enabled: true
}
}
});
export function useGuildProfileGameProfilesExperiment(a0) {
return apexExperiment.useConfig({
location: a0.location
});
}
+314
View File
@@ -0,0 +1,314 @@
// Metro module 8281 (f8282).
import { ChannelTypes } from "../../Constants";
import Backoff from "../../_bundle/Backoff";
import { buildGuildProfileFromServer } from "./GuildProfileBuilders";
import Module589 from "../../_bundle/Module589";
import Dispatcher from "../../Dispatcher";
let c5276_4, c5276_5, c5276_6, c5276_7;
const handleUpdateStart = function handleUpdateStart({ guildId }) {
const r6 = c5276_5.get(guildId);
if (r6 == null) {
c5276_5.set(guildId, {
...c5276_7,
isUpdating: true
});
} else {
c5276_5.set(guildId, {
...r6,
isUpdating: true
});
}
};
const handleUpdateFailure = function handleUpdateFailure({ guildId, error }) {
const r7 = c5276_5.get(guildId);
if (r7 == null) {
c5276_5.set(guildId, {
...c5276_7,
error
});
} else {
c5276_5.set(guildId, {
...r7,
error,
isUpdating: false
});
}
};
const handleInviteResolveOrCreate = function handleInviteResolveOrCreate(a0) {
const profile = a0.invite.profile;
if (profile != null) {
const r9 = c5276_5.get(profile.id);
const profile2 = buildGuildProfileFromServer(profile);
if (r9 == null) {
c5276_5.set(profile.id, {
...c5276_7,
profile: profile2,
lastSyncTimestamp: Date.now(),
fetchStatus: c5276_4.FETCHED
});
} else {
c5276_5.set(profile.id, {
...r9,
profile: profile2,
lastSyncTimestamp: Date.now(),
fetchStatus: c5276_4.FETCHED
});
}
}
};
c5276_4 = {
NOT_FETCHED: "NOT_FETCHED",
FETCHING: "FETCHING",
FETCHED: "FETCHED"
};
c5276_5 = new Map();
c5276_6 = new Map();
c5276_7 = {
profile: null,
lastSyncTimestamp: null,
fetchStatus: c5276_4.NOT_FETCHED,
isUpdating: false,
error: null,
nextFetchAllowedAt: null
};
class GuildProfileStore extends Module589.Store {
static displayName = "GuildProfileStore";
getProfile(a0) {
const r1 = a0 == null;
let r2 = null;
if (!r1) {
let r9 = c5276_5.get(a0)?.profile;
if (r9 == null) {
r9 = null;
}
r2 = r9;
}
return r2;
}
getFetchStatus(a0) {
let NOT_FETCHED;
if (a0 == null) {
NOT_FETCHED = c5276_4.NOT_FETCHED;
} else {
NOT_FETCHED = c5276_5.get(a0)?.fetchStatus;
if (NOT_FETCHED == null) {
NOT_FETCHED = c5276_4.NOT_FETCHED;
}
}
return NOT_FETCHED;
}
getLastSyncTimestamp(a0) {
const r1 = a0 == null;
let r2 = null;
if (!r1) {
let r9 = c5276_5.get(a0)?.lastSyncTimestamp;
if (r9 == null) {
r9 = null;
}
r2 = r9;
}
return r2;
}
getNextFetchAllowedAt(a0) {
const r1 = a0 == null;
let r2 = null;
if (!r1) {
let r9 = c5276_5.get(a0)?.nextFetchAllowedAt;
if (r9 == null) {
r9 = null;
}
r2 = r9;
}
return r2;
}
getIsUpdating(a0) {
let r2 = a0 != null;
if (r2) {
let r8 = c5276_5.get(a0)?.isUpdating;
if (r8 == null) {
r8 = false;
}
r2 = r8;
}
return r2;
}
getErrorCode(a0) {
const r2 = a0 == null;
let r3 = null;
if (!r2) {
const r8 = c5276_5.get(a0);
let r10 = r8 == null ? void 0 : r8.error?.code;
if (r10 == null) {
r10 = null;
}
r3 = r10;
}
return r3;
}
}
const guildProfileStore = new GuildProfileStore(Dispatcher, {
GUILD_PROFILE_FETCH: function handleFetchStart({ guildId }) {
const r6 = c5276_5.get(guildId);
if (r6 == null) {
c5276_5.set(guildId, {
...c5276_7,
fetchStatus: c5276_4.FETCHING
});
} else {
c5276_5.set(guildId, {
...r6,
fetchStatus: c5276_4.FETCHING
});
}
},
GUILD_PROFILE_FETCH_SUCCESS: function handleFetchSuccess({ guildId, profile }) {
const r3 = c5276_6.get(guildId);
if (r3 != null) {
r3.succeed();
}
c5276_6.delete(guildId);
const r7 = c5276_5.get(guildId);
if (r7 == null) {
c5276_5.set(guildId, {
...c5276_7,
profile,
lastSyncTimestamp: Date.now(),
fetchStatus: c5276_4.FETCHED
});
} else {
c5276_5.set(guildId, {
...r7,
profile,
lastSyncTimestamp: Date.now(),
fetchStatus: c5276_4.FETCHED,
error: null,
nextFetchAllowedAt: null
});
}
},
GUILD_PROFILE_FETCH_FAILURE: function handleFetchFailure({ guildId, error }) {
let r5 = c5276_6.get(guildId);
if (r5 == null) {
const backoff = new Backoff(5000, 300000);
c5276_6.set(guildId, backoff);
r5 = backoff;
}
const r25 = r5.fail();
const nextFetchAllowedAt = Date.now() + r25;
const r11 = c5276_5.get(guildId);
if (r11 == null) {
c5276_5.set(guildId, {
...c5276_7,
error,
fetchStatus: c5276_4.FETCHED,
nextFetchAllowedAt
});
} else {
c5276_5.set(guildId, {
...r11,
error,
fetchStatus: c5276_4.FETCHED,
nextFetchAllowedAt
});
}
},
GUILD_PROFILE_UPDATE: handleUpdateStart,
GUILD_PROFILE_UPDATE_SUCCESS: function handleUpdateSuccess({ guildId, profile }) {
const r7 = c5276_5.get(guildId);
if (r7 == null) {
c5276_5.set(guildId, {
...c5276_7,
profile
});
} else {
c5276_5.set(guildId, {
...r7,
profile,
isUpdating: false
});
}
},
GUILD_PROFILE_UPDATE_FAILURE: handleUpdateFailure,
MEMBER_VERIFICATION_FORM_UPDATE: function handleMemberVerificationFormFetch({ form, guildId }) {
const profile = form?.profile;
if (profile != null) {
const r9 = c5276_5.get(guildId);
if (r9 == null) {
c5276_5.set(guildId, {
...c5276_7,
profile,
lastSyncTimestamp: Date.now(),
fetchStatus: c5276_4.FETCHED
});
} else {
c5276_5.set(guildId, {
...r9,
profile,
lastSyncTimestamp: Date.now(),
fetchStatus: c5276_4.FETCHED
});
}
}
},
INVITE_RESOLVE_SUCCESS: handleInviteResolveOrCreate,
INSTANT_INVITE_CREATE_SUCCESS: handleInviteResolveOrCreate,
CHANNEL_CREATE: function handleCreateChannel({ channel }) {
if (channel.type === ChannelTypes.GUILD_ANNOUNCEMENT && channel.guild_id != null) {
c5276_5.delete(channel.guild_id);
c5276_6.delete(channel.guild_id);
}
},
GUILD_SETTINGS_SET_WIDGET: function handleSetWidget({ guildId, enabled }) {
if (guildId != null && enabled) {
c5276_5.delete(guildId);
c5276_6.delete(guildId);
}
},
GUILD_UPDATE: function handleGuildUpdate({ guild }) {
const r6 = c5276_5.get(guild.id);
if (r6 != null && r6.profile != null) {
let icon = guild.icon;
if (icon == null) {
icon = null;
}
let description = guild.description;
if (description == null) {
description = "";
}
let discovery_splash = guild.discovery_splash;
if (discovery_splash == null) {
discovery_splash = null;
}
c5276_5.set(guild.id, {
...r6,
profile: {
...r6.profile,
name: guild.name,
icon,
description,
customBanner: discovery_splash
}
});
return void 0;
}
return false;
},
GUILD_PROFILE_UPDATE_VISIBILITY: handleUpdateStart,
GUILD_PROFILE_UPDATE_VISIBILITY_SUCCESS: function handleUpdateVisibilitySuccess({ guildId, visibility }) {
const r7 = c5276_5.get(guildId);
const profile = r7?.profile;
if (r7 != null && profile != null) {
c5276_5.set(guildId, {
...r7,
isUpdating: false,
profile: {
...profile,
visibility
}
});
}
},
GUILD_PROFILE_UPDATE_VISIBILITY_FAILURE: handleUpdateFailure
});
export default guildProfileStore;
export { c5276_4 as GuildProfileFetchStatus };
@@ -0,0 +1,3 @@
// Metro module 5186 (f5187).
import * as _Module5187 from "../../_bundle/Module5187";
export const GuildProfileVisibility = _Module5187.GuildProfileVisibility;
@@ -0,0 +1,24 @@
// Metro module 6022 (f6023).
import { createChannelRecordFromInvite } from "../../records/ChannelRecord";
import { GuildFeatures } from "../../Constants";
import { fromInviteGuild } from "../../utils/GuildRecordUtils";
export function getEstablishedDate(a0, a1) {
if (a0 != null && a0 !== "") {
const date = new Date(a0);
return date instanceof Date ? isNaN(date.getTime()) ? null : date.toLocaleDateString(a1, {
year: "numeric",
month: "short"
}) : null;
}
return null;
}
export function guildInviteCanEmbedProfile(a0) {
if (a0.guild == null) {
return false;
}
if (fromInviteGuild(a0.guild).features.has(GuildFeatures.HUB)) {
return false;
}
const r20 = a0?.channel != null ? createChannelRecordFromInvite(a0.channel) : null;
return !(r20 == null ? void 0 : r20.isGuildVoiceOrThread());
}
@@ -0,0 +1,26 @@
// Metro module 8282 (f8283).
import { useCallback } from "react";
import GuildProfileStore from "../GuildProfileStore";
import { useStateFromStores } from "../../../_bundle/Module589";
import { getGuildProfile } from "../GuildProfileActionCreators";
export function useGuildProfile(a0) {
const stateFromStores = useStateFromStores([GuildProfileStore], () => GuildProfileStore.getProfile(a0));
const stateFromStores2 = useStateFromStores([GuildProfileStore], () => GuildProfileStore.getFetchStatus(a0));
return {
guildProfile: stateFromStores,
fetchGuildProfile: useCallback(async function(c26170_0) {
let c26170_2;
let c29935_0;
c26170_2 = void 0;
c29935_0 = void 0;
if (c26170_0 !== void 0) {
c29935_0 = c26170_0;
} else {
c29935_0 = false;
}
await void 0;
return await getGuildProfile(a0, c29935_0);
}, [a0]),
fetchStatus: stateFromStores2
};
}
@@ -0,0 +1,190 @@
// Metro module 10983 (f10984).
import { useMemo } from "react";
import AuthenticationStore from "../../../stores/AuthenticationStore";
import GuildMemberStore from "../../../stores/GuildMemberStore";
import GuildStore from "../../../stores/GuildStore";
import InviteStore from "../../../stores/InviteStore";
import UserStore from "../../../stores/UserStore";
import { GuildFeatures, InviteStates } from "../../../Constants";
import { useStateFromStores, useStateFromStoresObject } from "../../../_bundle/Module589";
import { hasFlag } from "../../../_bundle/Module1384";
import { GuildInviteFlags } from "../../../_bundle/Module6709";
import usePendingFolderGuildIds, { getPendingFolderGuildIds } from "../../guilds_bar/usePendingFolderGuildIds";
import { guildSupportsTags } from "../../guild_tag/GuildTagUtils";
import { GuildProfileVisibility } from "../GuildProfileTypes";
let c7398_11 = {
IS_MEMBER: 0,
0: "IS_MEMBER",
ADOPT_TAG: 1,
1: "ADOPT_TAG",
HAS_APPLICATION: 2,
2: "HAS_APPLICATION",
APPLY_TO_JOIN: 3,
3: "APPLY_TO_JOIN",
LURK_DISCOVERABLE: 4,
4: "LURK_DISCOVERABLE",
JOIN_VIA_INVITE: 5,
5: "JOIN_VIA_INVITE",
ACCEPT_ROLES: 6,
6: "ACCEPT_ROLES"
};
let c7398_12 = {
INVITE: "INVITE"
};
export default function useGuildProfileCTA(a0, a1, a2) {
let stateFromStores2, stateFromStores3, stateFromStores4, validInviteKey, isBypassInvite, inviteRoles, c18428_12;
const { id, features } = a0;
const stateFromStores = useStateFromStores([AuthenticationStore], () => AuthenticationStore.getId());
stateFromStores2 = useStateFromStores([GuildStore], () => GuildStore.getGuild(id));
stateFromStores3 = useStateFromStores([UserStore], () => UserStore.getUser(stateFromStores), [stateFromStores]);
stateFromStores4 = useStateFromStores([GuildMemberStore], () => (id != null ? GuildMemberStore.getMember(id, stateFromStores) : null)?.joinedAt != null, [id, stateFromStores]);
const stateFromStoresObject = useStateFromStoresObject([InviteStore], () => {
let r20;
let validInviteKey2 = a2;
if (validInviteKey2 == null) {
validInviteKey2 = InviteStore.getInviteKeyForGuildId(id);
}
const r12 = validInviteKey2 != null ? InviteStore.getInvite(validInviteKey2) : null;
if (r12 != null && (r12.state !== InviteStates.BANNED && r12.state !== InviteStates.EXPIRED)) {
let flags = r12.flags;
if (flags == null) {
flags = 0;
}
r20 = {
validInviteKey: validInviteKey2,
isBypassInvite: hasFlag(flags, GuildInviteFlags.IS_APPLICATION_BYPASS),
inviteRoles: r12.roles
};
} else {
r20 = {
validInviteKey: null,
isBypassInvite: false,
inviteRoles: null
};
}
return r20;
}, [id, a2]);
validInviteKey = stateFromStoresObject.validInviteKey;
isBypassInvite = stateFromStoresObject.isBypassInvite;
inviteRoles = stateFromStoresObject.inviteRoles;
const pendingFolderGuildIds = usePendingFolderGuildIds();
c18428_12 = pendingFolderGuildIds;
return {
guildId: id,
ctaType: useMemo(() => {
let HAS_APPLICATION;
if (stateFromStores4) {
if (a1 === c7398_12.INVITE && inviteRoles != null && inviteRoles.length > 0 && stateFromStores3 != null) {
const member = GuildMemberStore.getMember(id, stateFromStores3.id);
const r69 = Set;
let r71 = member?.roles;
if (r71 == null) {
r71 = [];
}
let c26896_0 = new r69(r71);
if (inviteRoles.some((inviteRole) => !c26896_0.has(inviteRole.id))) {
return c7398_11.ACCEPT_ROLES;
}
}
const primaryGuild = stateFromStores3?.primaryGuild;
const r86 = primaryGuild?.identityGuildId === id && primaryGuild?.identityEnabled === true;
return a1 !== c7398_12.INVITE && (a0.tag != null && (!r86 && (stateFromStores2 != null && guildSupportsTags(stateFromStores2)))) ? c7398_11.ADOPT_TAG : c7398_11.IS_MEMBER;
}
L22: {
if (c18428_12.includes(id)) {
HAS_APPLICATION = c7398_11.HAS_APPLICATION;
} else {
const r20 = features == null ? void 0 : features.includes(GuildFeatures.MEMBER_VERIFICATION_GATE_ENABLED);
L12: {
if (r20 && (features == null ? void 0 : features.includes(GuildFeatures.MEMBER_VERIFICATION_MANUAL_APPROVAL))) {
if (validInviteKey == null && a0.visibility !== GuildProfileVisibility.PUBLIC_WITH_RECRUITMENT) {
break L12;
}
if (!isBypassInvite) {
HAS_APPLICATION = c7398_11.APPLY_TO_JOIN;
break L22;
}
}
}
HAS_APPLICATION = validInviteKey != null ? c7398_11.JOIN_VIA_INVITE : (features == null ? void 0 : features.includes(GuildFeatures.DISCOVERABLE)) ? c7398_11.LURK_DISCOVERABLE : null;
}
}
return HAS_APPLICATION;
}, [stateFromStores4, pendingFolderGuildIds, id, features, validInviteKey, a0.visibility, a0.tag, isBypassInvite, a1, stateFromStores2, inviteRoles, stateFromStores3]),
validInviteKey
};
};
export { c7398_11 as CTATypes };
export { c7398_12 as GuildProfileCTAContext };
export function getGuildProfileCTAType(a0, a1) {
let HAS_APPLICATION;
const { id: id2, features: features2 } = a0;
const id3 = AuthenticationStore.getId();
const user = UserStore.getUser(id3);
const joinedAt = (id2 != null ? GuildMemberStore.getMember(id2, id3) : null)?.joinedAt;
let r29 = a1;
const r30 = joinedAt != null;
if (a1 == null) {
r29 = InviteStore.getInviteKeyForGuildId(id2);
}
const r33 = r29 != null ? InviteStore.getInvite(r29) : null;
const r5 = r33 == null;
let r36 = false;
let r37 = null;
if (!r5) {
const state = r33.state;
const BANNED = InviteStates.BANNED;
r36 = false;
r37 = null;
if (state !== BANNED) {
const state2 = r33.state;
const EXPIRED = InviteStates.EXPIRED;
r36 = false;
r37 = null;
if (state2 !== EXPIRED) {
let flags = r33.flags;
if (flags == null) {
flags = 0;
}
r36 = hasFlag(flags, GuildInviteFlags.IS_APPLICATION_BYPASS);
r37 = r29;
}
}
}
const pendingFolderGuildIds = getPendingFolderGuildIds();
if (r30) {
if (r33?.roles != null && r33.roles.length > 0 && user != null) {
const member = GuildMemberStore.getMember(id2, user.id);
const r91 = Set;
let r93 = member?.roles;
if (r93 == null) {
r93 = [];
}
let c18429_0 = new r91(r93);
if (r33.roles.some((role) => !c18429_0.has(role.id))) {
return c7398_11.ACCEPT_ROLES;
}
}
return c7398_11.IS_MEMBER;
}
L36: {
if (pendingFolderGuildIds.includes(id2)) {
HAS_APPLICATION = c7398_11.HAS_APPLICATION;
} else {
const r57 = features2 == null ? void 0 : features2.includes(GuildFeatures.MEMBER_VERIFICATION_GATE_ENABLED);
L26: {
if (r57 && (features2 == null ? void 0 : features2.includes(GuildFeatures.MEMBER_VERIFICATION_MANUAL_APPROVAL))) {
if (r37 == null && a0.visibility !== GuildProfileVisibility.PUBLIC_WITH_RECRUITMENT) {
break L26;
}
if (!r36) {
HAS_APPLICATION = c7398_11.APPLY_TO_JOIN;
break L36;
}
}
}
HAS_APPLICATION = r37 != null ? c7398_11.JOIN_VIA_INVITE : (features2 == null ? void 0 : features2.includes(GuildFeatures.DISCOVERABLE)) ? c7398_11.LURK_DISCOVERABLE : null;
}
}
return HAS_APPLICATION;
}
@@ -0,0 +1,120 @@
// Metro module 11951 (f11952).
import { useMemo } from "react";
import "../../games/GameRecord";
import GameStore from "../../games/GameStore";
import AuthenticationStore from "../../../stores/AuthenticationStore";
import { useStateFromStores, useStateFromStoresArray } from "../../../_bundle/Module589";
import { useGames } from "../../games/hooks/useGame";
function $mk88474($env) {
return () => {
const r1 = $env;
const r7 = r1[0].gameApplicationIds.map($mk108552(r1));
const r9 = $env.$parent;
return r7.filter((0, r9[0])(r9[1][6]).isNotNullish);
};
}
function $mk108551($env) {
return () => {
let r21;
const map = new Map();
const r26 = $env[0];
if (r26 == null) {
return map;
}
let r27 = r26[Symbol.iterator]();
const next = r27.next;
const r3 = $env.$parent;
while (true) {
const r9 = r27 === void 0 ? void 0 : (r21 = next.call(r27)).done ? r27 = void 0 : r21.value;
if (r27 === void 0) {
return map;
}
try {
map.set(r9.id, new r3[3](r9));
} catch (r36) {
if (r27 !== void 0 && typeof r27.return === "function") {
try {
r27.return();
} catch {}
}
throw r36;
}
}
};
}
function $mk108552($env) {
return (a0) => {
let r6 = $env.$parent[4].getGame(a0);
if (r6 == null) {
r6 = $env[1].get(a0);
}
return r6;
};
}
let $mk88473 = function() {
return () => AuthenticationStore.isAuthenticated();
};
let env8195 = {};
export default function useGuildProfileGames(a0) {
let env19285;
const gameActivity = a0.gameActivity;
const r4 = env19285 = {
$parent: env8195
};
env19285[0] = a0;
env19285[1] = void 0;
const games = a0.games;
const stateFromStores = useStateFromStores([AuthenticationStore], $mk88473());
const r20 = games != null && !stateFromStores ? [] : a0.gameApplicationIds;
let env19286;
useGames(r20);
const r22 = env19286 = {
$parent: env8195
};
env19286[0] = games;
env19285[1] = useMemo($mk108551(r22), [games]);
const stateFromStoresArray = useStateFromStoresArray([GameStore], $mk88474(r4));
const memo = useMemo(() => {
const gameActivity2 = gameActivity;
return [...stateFromStoresArray].sort((a, b) => {
let r4 = gameActivity2[a.id]?.score;
if (r4 == null) {
r4 = 0;
}
let r5 = gameActivity2[b.id]?.score;
if (r5 == null) {
r5 = 0;
}
return r4 !== r5 ? r5 - r4 : 0;
});
}, [stateFromStoresArray, gameActivity]);
return {
gamesToDisplay: useMemo(() => memo.slice(0, 5), [memo]),
lastGameToDisplay: useMemo(() => {
let r3 = memo[5];
if (r3 == null) {
r3 = null;
}
return r3;
}, [memo]),
remainingGames: useMemo(() => memo.slice(5), [memo])
};
};
export function useAllGuildProfileGames(a0) {
let env19282;
const r2 = env19282 = {
$parent: env8195
};
env19282[0] = a0;
const games = a0.games;
const stateFromStores = useStateFromStores([AuthenticationStore], $mk88473());
const r18 = games != null && !stateFromStores ? [] : a0.gameApplicationIds;
let env19283;
useGames(r18);
const r20 = env19283 = {
$parent: env8195
};
env19283[0] = games;
env19282[1] = useMemo($mk108551(r20), [games]);
return useStateFromStoresArray([GameStore], $mk88474(r2));
}
@@ -0,0 +1,50 @@
// Metro module 8458 (f8459).
import _slicedToArray from "../../../_bundle/_slicedToArray";
import AccessibilityStore from "../../a11y/AccessibilityStore";
import AvatarUtils from "../../../utils/AvatarUtils";
import useAvatarColor, { maybeFetchColors, useColorStore } from "../../avatar/useAvatarColor";
import tinycolor from "../../../_bundle/tinycolor";
export function useProfilePrimaryColor(a0, a1) {
let r22 = useAvatarColor(a0 != null ? a0.brandColorPrimary == null ? AvatarUtils.getGuildIconURL({
id: a0.id,
icon: a0.icon,
size: 64
}) : null : null, a1);
if (a0?.brandColorPrimary != null) {
r22 = a0.brandColorPrimary;
}
return r22;
}
export function getProfilePrimaryColor(a0) {
if (a0 == null) {
return null;
}
if (a0.brandColorPrimary != null) {
return a0.brandColorPrimary;
}
const guildIconURL = AvatarUtils.getGuildIconURL({
id: a0.id,
icon: a0.icon,
size: 64
});
if (guildIconURL == null) {
return null;
}
maybeFetchColors(guildIconURL);
const r28 = useColorStore.getState().palette[guildIconURL];
const r29 = r28 == null ? void 0 : r28[0];
if (r29 != null) {
const r31 = _slicedToArray(r29, 3);
const r39 = tinycolor({
r: r31[0],
g: r31[1],
b: r31[2]
}).toHsl();
return tinycolor({
h: r39.h,
s: r39.s * (AccessibilityStore.desaturateUserColors ? AccessibilityStore.saturation : 1),
l: r39.l
}).toHexString();
}
return null;
}
@@ -0,0 +1,80 @@
// Metro module 11947 (f11948).
import { useCallback } from "react";
import { Image as Image2, View } from "react-native";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import AvatarUtils from "../../../../utils/AvatarUtils";
import { ClanGameplayActivity } from "../../../../_bundle/Module11948";
import { PressableHighlight } from "../../../../design/void/Pressables/native/Pressables";
import { FireIcon } from "../../../../design/components/Icon/native/redesign/generated/FireIcon";
const useStyles = createStyles({
gameIcon: {
width: 32,
height: 32
},
gameIconImage: {
width: 32,
height: 32,
borderRadius: Module712.radii.xs,
borderWidth: 1,
borderStyle: "solid",
borderColor: Module712.colors.BORDER_STRONG
},
gameIconMask: {
position: "absolute",
top: -4,
right: -4,
display: "flex",
justifyContent: "center",
alignItems: "center",
padding: 2,
width: 18,
height: 18,
backgroundColor: Module712.colors.BACKGROUND_BASE_LOWER,
borderRadius: Module712.radii.sm
},
fireIcon: {
marginTop: -1,
width: 14,
height: 14
}
});
export default function GameIcon(props) {
let r62;
const { style, game, activityLevel, onPress } = props;
const styles = useStyles();
const iconURL = game.getIconURL(24);
const source = iconURL != null ? AvatarUtils.makeSource(iconURL) : null;
const callback = useCallback(() => {
if (onPress != null) {
onPress(game);
}
}, [game, onPress]);
const level = activityLevel?.level;
const HIGH = ClanGameplayActivity.HIGH;
const r41 = source == null;
let r42 = null;
if (!r41) {
let r43 = level === HIGH;
if (onPress != null) {
const r75 = [<Image2 style={styles.gameIconImage} source={source} />, ,];
if (r43) {
r43 = <View style={styles.gameIconMask}>
<FireIcon style={styles.fireIcon} color={Module712.unsafe_rawColors.ORANGE_260} />
</View>;
}
r75[1] = r43;
r62 = <PressableHighlight style={[style, styles.gameIcon]} onPress={callback}>{r75}</PressableHighlight>;
} else {
r62 = <View style={[style, styles.gameIcon]}>
<Image2 style={styles.gameIconImage} source={source} />
{r43 ? <View style={styles.gameIconMask}>
<FireIcon style={styles.fireIcon} color={Module712.unsafe_rawColors.ORANGE_330} />
</View> : r43}
</View>;
}
r42 = r62;
}
return r42;
};
export { useStyles };
@@ -0,0 +1,158 @@
// Metro module 8453 (f8454).
import { useState, useRef, useMemo, useCallback, useEffect } from "react";
import { ActivityIndicator, View } from "react-native";
import LurkingStore from "../../../lurker_mode/LurkingStore";
import GuildProfileStore, { GuildProfileFetchStatus } from "../../GuildProfileStore";
import { INVALID_ACCESS_ERROR_CODE } from "../../GuildProfileConstants";
import { VerticalGradient } from "../../../../Constants";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import useWindowDimensions_native from "../../../screen/useWindowDimensions.native";
import useTheme from "../../../../hooks/useTheme";
import { useGuildProfile } from "../../hooks/useGuildProfile";
import { useStateFromStores } from "../../../../_bundle/Module589";
import { useToken } from "../../../../design/tokens/native/useToken";
import { useBottomSheetRef } from "../../../../design/components/Sheet/native/useBottomSheetRef";
import useAnalyticsLocations from "../../../app_analytics/useAnalyticsLocations";
import AnalyticsLocation from "../../../app_analytics/AnalyticsLocation";
import { useMobileLurkerServerPreview } from "../../../lurker_mode/experiments/MobileLurkerServerPreviewExperiment";
import { trackGuildProfileViewed } from "../../GuildProfileActionCreators";
import RestrictedGuildProfileView from "./RestrictedGuildProfileView";
import { Button } from "../../../../design/components/Button/native/Button.native";
import { intl, t } from "../../../../intl/index.native";
import GuildProfileLoadingError from "./GuildProfileLoadingError";
import GuildProfileView from "./GuildProfileView";
import GuildProfileCTA from "./GuildProfileCTA";
import Module689 from "../../../../_bundle/Module689";
import { BottomSheet } from "../../../../design/components/Sheet/native/BottomSheet.native";
import Module4611 from "../../../../_bundle/Module4611";
import { BottomSheetScrollView } from "../../../../_bundle/Module5245";
import { ActionSheetHeaderBar } from "../../../../design/components/Sheet/native/ActionSheetHeaderBar.native";
const useStyles = createStyles({
loadingContainer: {
paddingTop: 40
},
footerContainer: {
paddingHorizontal: 16,
paddingVertical: 40
},
scrollView: {
backgroundColor: Module712.colors.BACKGROUND_BASE_LOW
}
});
export default function GuildProfileActionSheet(props) {
let r135, r136, callback, callback2, memo;
let analyticsLocations, token;
const { guildId, context, inviteKey } = props;
analyticsLocations = void 0;
token = void 0;
const styles = useStyles();
const theme = useTheme();
const guildProfile2 = useGuildProfile(guildId);
const { guildProfile, fetchGuildProfile, fetchStatus } = guildProfile2;
const stateFromStores = useStateFromStores([GuildProfileStore], () => GuildProfileStore.getErrorCode(guildId));
const token2 = useToken(Module712.colors.INTERACTIVE_TEXT_HOVER, theme);
const bottomSheetRef3 = useBottomSheetRef();
const { bottomSheetRef: bottomSheetRef2, bottomSheetClose } = bottomSheetRef3;
analyticsLocations = useAnalyticsLocations(AnalyticsLocation.GUILD_PROFILE).analyticsLocations;
token = useToken(Module712.colors.BACKGROUND_BASE_LOW);
let r74 = useStateFromStores([LurkingStore], () => guildId != null && LurkingStore.isLurking(guildId), [guildId]);
const enabled2 = useMobileLurkerServerPreview("GuildProfileActionSheet").enabled;
if (r74) {
r74 = enabled2;
}
let enabled, c16602_1, bottomSheetRef, height, state, setState, state2, setState2, ref;
L11: {
const r4 = guildProfile != null;
enabled = r74;
c16602_1 = r4;
bottomSheetRef = bottomSheetRef2;
height = void 0;
state = void 0;
setState = void 0;
state2 = void 0;
setState2 = void 0;
ref = void 0;
height = useWindowDimensions_native().height;
[state, setState] = useState(null);
[state2, setState2] = useState(null);
ref = useRef(false);
memo = useMemo(() => {
if (enabled) {
return state != null && state2 != null ? Math.round(Math.min(0.95 * height, Math.max(0.65 * height, state + state2))) : Math.round(0.65 * height);
}
}, [enabled, state, state2, height]);
callback = useCallback((a0) => {
let r1 = enabled;
if (enabled) {
r1 = c16602_1;
}
if (r1) {
setState(a0.nativeEvent.layout.height);
}
}, [enabled, r4]);
callback2 = useCallback((a0) => {
if (enabled) {
setState2(a0.nativeEvent.layout.height);
}
}, [enabled]);
useEffect(() => {
let r2 = enabled;
if (enabled) {
r2 = state != null;
}
if (r2) {
r2 = state2 != null;
}
if (r2 && !ref.current) {
ref.current = true;
requestAnimationFrame(() => {
const current = bottomSheetRef.current;
if (current != null) {
current.snapToIndex(0);
}
});
}
}, [enabled, state, state2, bottomSheetRef]);
useEffect(() => {
trackGuildProfileViewed(guildId, analyticsLocations);
}, [guildId, analyticsLocations]);
const callback3 = useCallback(() => {
fetchGuildProfile(true);
}, [fetchGuildProfile]);
useEffect(() => {
fetchGuildProfile();
}, [fetchGuildProfile]);
if (fetchStatus !== GuildProfileFetchStatus.NOT_FETCHED && fetchStatus !== GuildProfileFetchStatus.FETCHING) {
if (guildProfile == null && stateFromStores === INVALID_ACCESS_ERROR_CODE) {
r136 = <RestrictedGuildProfileView />;
r135 = <Button size="lg" text={intl.string(t.cpT0Cq)} onPress={bottomSheetClose} />;
break L11;
}
if (guildProfile == null) {
r136 = <GuildProfileLoadingError onRetry={callback3} />;
r135 = <Button size="lg" text={intl.string(t.cpT0Cq)} onPress={bottomSheetClose} />;
break L11;
}
const r131 = <GuildProfileView guildProfile={guildProfile} isLurkerServerPreview={enabled} />;
r135 = <GuildProfileCTA profile={guildProfile} context={context} inviteKey={inviteKey} isLurkerServerPreview={enabled} />;
r136 = r131;
} else {
r136 = <View style={styles.loadingContainer}>
<ActivityIndicator animating size="large" />
</View>;
r135 = null;
}
}
return <BottomSheet ref={bottomSheetRef} scrollable handleDisabled startHeight={memo} footer={<Module4611 start={VerticalGradient.START} end={{
x: 0,
y: 0.5
}} style={styles.footerContainer} colors={useMemo(() => [Module689(token).alpha(0).hex(), token], [token])} onLayout={enabled ? callback2 : void 0}>{r135}</Module4611>}>
<BottomSheetScrollView style={styles.scrollView}>
{enabled ? <View onLayout={callback}>{r136}</View> : r136}
</BottomSheetScrollView>
<ActionSheetHeaderBar variant="floating" tabStyle={{
backgroundColor: token2
}} onPress={bottomSheetClose} />
</BottomSheet>;
};
@@ -0,0 +1,106 @@
// Metro module 11956 (f11957).
import { useCallback, useMemo } from "react";
import { AnalyticsObjects, JoinGuildSources } from "../../../../Constants";
import { ProfileCustomizationScrollPositions } from "../../../user_settings/UserSettingsConstants";
import useGuildProfileCTA, { CTATypes } from "../../hooks/useGuildProfileCTA";
import useOpenProfileSettings from "../../../profile_customization/useOpenProfileSettings";
import ActionSheetActionCreators from "../../../action_sheet/native/ActionSheetActionCreators";
import { transitionToGuild } from "../../../routing/transitionToGuild.native";
import InstantInviteActionCreators from "../../../../actions/InstantInviteActionCreators";
import useGetJoinRequestGuild from "../../../guild_member_verification/hooks/useGetJoinRequestGuild";
import { GuildJoinRequestApplicationStatuses } from "../../../guild_member_verification/MemberVerificationTypes";
import { openMemberVerificationPendingAlert, openMemberVerificationRejectedAlert, openMemberVerificationIncompleteAlert } from "../../../guild_member_verification/native/MemberVerificationAlertActionCreators";
import { GuildProfileVisibility } from "../../GuildProfileTypes";
import { openMemberVerificationModal } from "../../../guild_member_verification/MemberVerificationModalActionCreators";
import { startLurking } from "../../../../utils/GuildDiscoveryUtils";
import LurkerServerPreviewJoinButton from "../../../lurker_mode/native/LurkerServerPreviewJoinButton";
import { Button } from "../../../../design/components/Button/native/Button.native";
import { intl, t } from "../../../../intl/index.native";
export default function GuildProfileCTA(props) {
let callback, c19290_5;
const { profile, context, inviteKey, isLurkerServerPreview = false } = props;
callback = void 0;
c19290_5 = void 0;
const guildProfileCTA = useGuildProfileCTA(profile, context, inviteKey);
const { guildId, validInviteKey, ctaType } = guildProfileCTA;
let c19290_3 = useOpenProfileSettings({
scrollPosition: ProfileCustomizationScrollPositions.GUILD_TAG
});
const callback2 = useCallback(() => {
ActionSheetActionCreators.hideActionSheet(`GuildProfileActionSheet:${guildId}`);
transitionToGuild(guildId);
}, [guildId]);
callback = useCallback(() => {
if (validInviteKey != null) {
ActionSheetActionCreators.hideActionSheet(`GuildProfileActionSheet:${guildId}`);
InstantInviteActionCreators.acceptInviteAndTransitionToInviteChannel({
inviteKey: validInviteKey,
context: {
location: "guild_profile"
}
});
}
}, [guildId, validInviteKey]);
const getJoinRequestGuild = useGetJoinRequestGuild(guildId);
c19290_5 = getJoinRequestGuild;
const callback3 = useCallback(() => {
const applicationStatus = c19290_5?.applicationStatus;
if (GuildJoinRequestApplicationStatuses.SUBMITTED === applicationStatus) {
openMemberVerificationPendingAlert(guildId);
} else if (GuildJoinRequestApplicationStatuses.REJECTED === applicationStatus) {
openMemberVerificationRejectedAlert({
guildId,
canWithdraw: true
});
} else if (GuildJoinRequestApplicationStatuses.STARTED === applicationStatus) {
openMemberVerificationIncompleteAlert(guildId);
}
}, [guildId, getJoinRequestGuild?.applicationStatus]);
const callback4 = useCallback(() => {
ActionSheetActionCreators.hideActionSheet(`GuildProfileActionSheet:${guildId}`);
if (profile.visibility !== GuildProfileVisibility.PUBLIC_WITH_RECRUITMENT && validInviteKey != null) {
callback();
} else {
openMemberVerificationModal(guildId);
}
}, [guildId, callback, profile.visibility, validInviteKey]);
const callback5 = useCallback(() => {
ActionSheetActionCreators.hideActionSheet(`GuildProfileActionSheet:${guildId}`);
startLurking(guildId, {
object: AnalyticsObjects.GUILD_PROFILE
});
}, [guildId]);
const memo = useMemo(() => ({
grow: true,
size: "lg",
variant: "active"
}), []);
if (isLurkerServerPreview) {
return <LurkerServerPreviewJoinButton guildId={guildId} joinSource={JoinGuildSources.GUILD_PROFILE_LURKER} />;
}
if (CTATypes.IS_MEMBER === ctaType) {
return <Button {...memo} onPress={callback2} text={intl.string(t.KLOhbO)} />;
}
if (CTATypes.ADOPT_TAG === ctaType) {
return <Button {...memo} onPress={function handleGoToTagSettings() {
ActionSheetActionCreators.hideActionSheet(`GuildProfileActionSheet:${guildId}`);
c19290_3();
}} text={intl.string(t.cQDYRu)} />;
}
if (CTATypes.HAS_APPLICATION === ctaType) {
return <Button {...memo} onPress={callback3} text={intl.string(t["4yfIDk"])} />;
}
if (CTATypes.APPLY_TO_JOIN === ctaType) {
return <Button {...memo} onPress={callback4} text={intl.string(t["7XdMW2"])} />;
}
if (CTATypes.LURK_DISCOVERABLE === ctaType) {
return <Button {...memo} onPress={callback5} text={intl.string(t.XpeFYr)} />;
}
if (CTATypes.JOIN_VIA_INVITE === ctaType) {
return <Button {...memo} onPress={callback} text={intl.string(t.XpeFYr)} />;
}
if (CTATypes.ACCEPT_ROLES === ctaType) {
return <Button {...memo} onPress={callback} text={intl.string(t.MMlhsr)} />;
}
return null;
};
@@ -0,0 +1,131 @@
// Metro module 8474 (f8475).
import { useCallback, useMemo } from "react";
import { View } from "react-native";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import useOpenGameProfileModal from "../../../game_profile/hooks/useOpenGameProfileModal";
import { GameProfileSources } from "../../../game_profile/GameProfileAnalyticUtils";
import GameIcon from "./GameIcon";
import { Text } from "../../../../design/components/Text/native/Text";
import useGuildProfileGames from "../../hooks/useGuildProfileGames";
import { useGuildProfileGameProfilesExperiment } from "../../GuildProfileGameProfilesExperiment.native";
import ToastActionCreators from "../../../toast/native/ToastActionCreators";
import ActionSheetActionCreators from "../../../action_sheet/native/ActionSheetActionCreators";
import { PressableHighlight } from "../../../../design/void/Pressables/native/Pressables";
let useStyles, FavoriteGame, GuildProfileGamesContent;
const ClickableGameIcon = function ClickableGameIcon(props) {
const { style, game, activityLevel } = props;
let enabled2 = props.enabled;
const onPressFallback = props.onPressFallback;
const openGameProfileModal = useOpenGameProfileModal({
gameId: game.id,
source: GameProfileSources.GuildProfileGames,
trackEntryPointImpression: enabled2
});
let c16606_2 = openGameProfileModal;
if (enabled2) {
enabled2 = openGameProfileModal != null;
}
let c16606_3 = enabled2;
const callback2 = useCallback(() => {
if (c16606_3) {
c16606_2();
} else if (onPressFallback != null) {
onPressFallback(game);
}
}, [enabled2, openGameProfileModal, onPressFallback, game]);
return <GameIcon style={style} game={game} activityLevel={activityLevel} onPress={enabled2 ? callback2 : onPressFallback != null ? callback2 : void 0} />;
};
FavoriteGame = function FavoriteGame(props) {
const { game: game2, activityLevel, clickable } = props;
return <View style={useStyles().favoriteGame}>
<ClickableGameIcon game={game2} activityLevel={activityLevel} enabled={clickable} />
<Text variant="text-sm/medium" color="text-subtle">{game2.name}</Text>
</View>;
};
GuildProfileGamesContent = function GuildProfileGamesContent(props) {
let callback;
const { profile, gamesToDisplay, lastGameToDisplay, remainingGames } = props;
callback = void 0;
const styles = useStyles();
const gameActivity = profile.gameActivity;
const enabled = useGuildProfileGameProfilesExperiment({
location: "guild_profile_games"
}).enabled;
const r26 = (lastGameToDisplay == null ? void 0 : lastGameToDisplay.getIconURL(24)) != null;
let c16607_6 = r26;
const memo = useMemo(() => lastGameToDisplay == null ? null : c16607_6 ? remainingGames.length === 0 ? <ClickableGameIcon game={lastGameToDisplay} activityLevel={gameActivity[lastGameToDisplay.id]} enabled={enabled} /> : <View style={styles.lastItem}>
<GameIcon style={styles.lastItemImage} game={lastGameToDisplay} activityLevel={gameActivity[lastGameToDisplay.id]} />
<View style={styles.lastItemOverlay} />
<View style={styles.lastItemText}>
<Text variant="text-xs/medium" color="text-overlay-light">
{`+${remainingGames.length}`}
</Text>
</View>
</View> : null, [lastGameToDisplay, r26, remainingGames, gameActivity, styles, enabled]);
callback = useCallback((a0) => {
ToastActionCreators.open({
key: `profile-game-${a0.id}`,
content: a0.name
});
}, []);
const r36 = remainingGames.length > 0;
const callback2 = useCallback(() => {
ActionSheetActionCreators.openLazy(import("./GuildProfileGamesActionSheet"), "GuildProfileGamesActionSheet{profile.id}", {
profile
}, "stack");
}, [profile]);
return gamesToDisplay.length === 1 ? <View style={styles.container}>
<FavoriteGame game={gamesToDisplay[0]} activityLevel={gameActivity[gamesToDisplay[0].id]} clickable={enabled} />
</View> : r36 ? <PressableHighlight style={styles.container} onPress={callback2}>
{gamesToDisplay.map((item) => <GameIcon key={item.id} game={item} activityLevel={gameActivity[item.id]} />)}
{memo}
</PressableHighlight> : <View style={styles.container}>
{gamesToDisplay.map((item) => <ClickableGameIcon key={item.id} game={item} activityLevel={gameActivity[item.id]} enabled={enabled} onPressFallback={callback} />)}
{memo}
</View>;
};
useStyles = createStyles({
container: {
display: "flex",
flexDirection: "row",
gap: 8
},
favoriteGame: {
display: "flex",
flexDirection: "row",
alignItems: "center",
gap: 8
},
lastItem: {
position: "relative",
width: 32,
height: 32
},
lastItemOverlay: {
position: "absolute",
top: 0,
left: 0,
right: 0,
bottom: 0,
backgroundColor: Module712.colors.BACKGROUND_SCRIM,
borderRadius: Module712.radii.xs
},
lastItemImage: {
position: "absolute"
},
lastItemText: {
display: "flex",
justifyContent: "center",
alignItems: "center",
width: 32,
height: 32
}
});
export default function GuildProfileGames(props) {
const profile2 = props.profile;
const guildProfileGames = useGuildProfileGames(profile2);
const { gamesToDisplay, lastGameToDisplay: lastGameToDisplay2, remainingGames: remainingGames2 } = guildProfileGames;
return gamesToDisplay == null ? null : gamesToDisplay.length !== 0 ? <GuildProfileGamesContent profile={profile2} gamesToDisplay={gamesToDisplay} lastGameToDisplay={lastGameToDisplay2} remainingGames={remainingGames2} /> : null;
};
export { useStyles };
@@ -0,0 +1,63 @@
// Metro module 11953 (f11954).
import { useCallback } from "react";
import { View } from "react-native";
import useOpenGameProfileModal from "../../../game_profile/hooks/useOpenGameProfileModal";
import { GameProfileSources } from "../../../game_profile/GameProfileAnalyticUtils";
import { TableRow } from "../../../../design/components/TableRow/native/TableRow.native";
import GameIcon from "./GameIcon";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import { useAllGuildProfileGames } from "../../hooks/useGuildProfileGames";
import { useGuildProfileGameProfilesExperiment } from "../../GuildProfileGameProfilesExperiment.native";
import { useBottomSheetRef } from "../../../../design/components/Sheet/native/useBottomSheetRef";
import { intl, t } from "../../../../intl/index.native";
import ActionSheetActionCreators from "../../../action_sheet/native/ActionSheetActionCreators";
import { BottomSheet } from "../../../../design/components/Sheet/native/BottomSheet.native";
import { BottomSheetScrollView } from "../../../../_bundle/Module5245";
import { TableRowGroup } from "../../../../design/components/TableRow/native/TableRowGroup.native";
let useStyles;
const GuildProfileGameRow = function GuildProfileGameRow(props) {
const { game, activityLevel } = props;
let clickable = props.clickable;
const openGameProfileModal = useOpenGameProfileModal({
gameId: game.id,
source: GameProfileSources.GuildProfileGames,
trackEntryPointImpression: clickable
});
let c19287_0 = openGameProfileModal;
if (clickable) {
clickable = openGameProfileModal != null;
}
return <TableRow icon={<GameIcon game={game} activityLevel={activityLevel} />} label={game.name} arrow={clickable} onPress={clickable ? () => c19287_0() : void 0} />;
};
useStyles = createStyles({
container: {
padding: 16,
paddingBottom: 48
}
});
export default function GuildProfileGamesActionSheet(props) {
const profile = props.profile;
const styles = useStyles();
const { id, gameActivity } = profile;
const allGuildProfileGames = useAllGuildProfileGames(profile);
const enabled = useGuildProfileGameProfilesExperiment({
location: "guild_profile_games_action_sheet"
}).enabled;
const bottomSheetRef = useBottomSheetRef().bottomSheetRef;
const title = intl.format(t.vuAVo7, {
serverName: profile.name
}).toString();
return <BottomSheet ref={bottomSheetRef} scrollable onDismiss={useCallback(() => {
ActionSheetActionCreators.openLazy(import("./GuildProfileActionSheet"), `GuildProfileActionSheet:${id}`, {
guildId: id
});
}, [id])} startHeight={300}>
<BottomSheetScrollView>
<View style={styles.container}>
<TableRowGroup title={title} hasIcons>
{allGuildProfileGames.map((allGuildProfileGame) => <GuildProfileGameRow key={allGuildProfileGame.id} game={allGuildProfileGame} activityLevel={gameActivity[allGuildProfileGame.id]} clickable={enabled} />)}
</TableRowGroup>
</View>
</BottomSheetScrollView>
</BottomSheet>;
};
@@ -0,0 +1,152 @@
// Metro module 8460 (f8461).
import { useCallback } from "react";
import { View } from "react-native";
import LocaleStore from "../../../user_settings/LocaleStore";
import AuthenticationStore from "../../../../stores/AuthenticationStore";
import GuildMemberStore from "../../../../stores/GuildMemberStore";
import { getBadgeTooltip } from "../../../guild_badge/GuildBadgeConstants";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import { useStateFromStores } from "../../../../_bundle/Module589";
import { getEstablishedDate } from "../../GuildProfileUtils";
import SnowflakeUtils from "../../../../utils/SnowflakeUtils";
import { fromGuildProfile } from "../../../../utils/GuildRecordUtils";
import { getGuildTraits } from "../../../guild_badge/GuildTraits";
import { getBadgeCategory } from "../../../guild_badge/BadgeCategory";
import ToastActionCreators from "../../../toast/native/ToastActionCreators";
import ActionSheetActionCreators from "../../../action_sheet/native/ActionSheetActionCreators";
import { transitionToGuild } from "../../../routing/transitionToGuild.native";
import GuildIcon, { GuildIconSizes } from "../../../guild/native/GuildIcon";
import { Text } from "../../../../design/components/Text/native/Text";
import { PressableHighlight } from "../../../../design/void/Pressables/native/Pressables";
import GuildBadgeV2 from "../../../guild/native/GuildBadgeV2";
import { intl, t } from "../../../../intl/index.native";
const useStyles = createStyles({
header: {
paddingHorizontal: 16,
marginTop: -32,
display: "flex",
flexDirection: "column",
gap: 0
},
avatarBackground: {
width: 86,
height: 86,
borderRadius: 28.666666666666668,
backgroundColor: Module712.colors.BACKGROUND_BASE_LOW,
display: "flex",
justifyContent: "center",
alignItems: "center",
overflow: "hidden"
},
members: {
display: "flex",
flexDirection: "row",
gap: 8
},
memberCount: {
display: "flex",
flexDirection: "row",
alignItems: "center",
gap: 4
},
dot: {
width: 8,
height: 8,
borderRadius: 4,
backgroundColor: Module712.colors.TEXT_STATUS_OFFLINE
},
dotOnline: {
width: 8,
height: 8,
borderRadius: 4,
backgroundColor: Module712.colors.TEXT_STATUS_ONLINE
},
established: {
display: "flex"
},
nameRow: {
marginTop: 4,
display: "flex",
flexDirection: "row",
alignItems: "center"
},
guildName: {
flexShrink: 1
},
guildIcon: {
marginLeft: 8,
height: 24,
width: 24
}
});
export default function GuildProfileHeader(props) {
let id, stateFromStores;
const { profile, guildIconSource } = props;
id = void 0;
stateFromStores = void 0;
const styles = useStyles();
const stateFromStores2 = useStateFromStores([LocaleStore], () => LocaleStore.locale);
const establishedDate = getEstablishedDate(SnowflakeUtils.extractTimestamp(profile.id), stateFromStores2);
const guild = fromGuildProfile(profile);
const callback = useCallback(() => {
const guildTraits = getGuildTraits(fromGuildProfile(profile));
const badgeTooltip = getBadgeTooltip(getBadgeCategory(guildTraits), guildTraits.visibility);
const tooltipTitle = badgeTooltip.tooltipTitle;
let tooltipSubtitle = badgeTooltip.tooltipSubtitle;
if (!(tooltipTitle == null && tooltipSubtitle == null)) {
if (tooltipSubtitle == null) {
tooltipSubtitle = tooltipTitle;
}
ToastActionCreators.open({
key: "guild-badge-tooltip",
content: tooltipSubtitle
});
}
}, [profile]);
id = profile.id;
stateFromStores = useStateFromStores([GuildMemberStore, AuthenticationStore], () => GuildMemberStore.getMember(id, AuthenticationStore.getId())?.joinedAt != null, [id]);
const callback2 = useCallback(() => {
if (stateFromStores) {
ActionSheetActionCreators.hideActionSheet(`GuildProfileActionSheet:${id}`);
transitionToGuild(id);
}
}, [id, stateFromStores]);
return <View style={styles.header}>
<View style={styles.avatarBackground}>
<GuildIcon icon={guildIconSource} size={GuildIconSizes.XXLARGE} animate value={profile.name} selected={false} />
</View>
<View style={styles.nameRow}>
<Text onPress={stateFromStores ? callback2 : void 0} style={styles.guildName} accessibilityRole="header" variant="heading-xl/semibold" color="mobile-text-heading-primary" lineClamp={1}>{profile.name}</Text>
<PressableHighlight onPress={callback}>
<GuildBadgeV2 guild={guild} style={styles.guildIcon} />
</PressableHighlight>
</View>
<View style={styles.members}>
<View style={styles.memberCount}>
<View style={styles.dotOnline} />
<Text variant="text-md/medium" color="text-default">
{intl.format(t["LC+S+m"], {
membersOnline: profile.onlineCount
})}
</Text>
</View>
<View style={styles.memberCount}>
<View style={styles.dot} />
<Text variant="text-md/medium" color="text-default">
{intl.format(t.zRl6XR, {
count: profile.memberCount
})}
</Text>
</View>
</View>
<View style={styles.established}>
<Text variant="text-md/medium" color="text-muted">
{intl.format(t.zb2Q56, {
createdAtDate: establishedDate
})}
</Text>
</View>
</View>;
};
export { useStyles };
@@ -0,0 +1,36 @@
// Metro module 11955 (f11956).
import { View } from "react-native";
import { useStyles, DiagonalGradient, getBackgroundForProfile } from "./GuildProfileView";
import useTheme from "../../../../hooks/useTheme";
import { useToken } from "../../../../design/tokens/native/useToken";
import Module712 from "../../../../_bundle/Module712";
import Module4611 from "../../../../_bundle/Module4611";
import { WarningIcon } from "../../../../design/components/Icon/native/redesign/generated/WarningIcon";
import { Text } from "../../../../design/components/Text/native/Text";
import { intl, t } from "../../../../intl/index.native";
import { PressableOpacity } from "../../../../design/void/Pressables/native/Pressables";
export default function GuildProfileLoadingError(props) {
const onRetry = props.onRetry;
const styles = useStyles();
return <View style={styles.container}>
<Module4611 style={styles.colorBanner} start={DiagonalGradient.START} end={DiagonalGradient.END} colors={getBackgroundForProfile(useTheme(), useToken(Module712.colors.BACKGROUND_BASE_LOWEST))} />
<View style={styles.header}>
<View style={styles.avatarBackground}>
<View style={styles.avatarBackground}>
<WarningIcon size="lg" color={Module712.colors.TEXT_FEEDBACK_WARNING} />
</View>
</View>
</View>
<View style={styles.body}>
<Text variant="heading-lg/semibold" color="mobile-text-heading-primary">
{intl.string(t.DmIUGK)}
</Text>
<PressableOpacity style={styles.error} onPress={onRetry} accessibilityRole="button" accessibilityLabel={intl.string(t.s1fAEw)}>
<WarningIcon size="sm" color={Module712.colors.TEXT_FEEDBACK_WARNING} />
<Text variant="text-sm/normal" color="text-feedback-warning">
{intl.string(t.tmGHjc)}
</Text>
</PressableOpacity>
</View>
</View>;
};
@@ -0,0 +1,62 @@
// Metro module 11954 (f11955).
import { useMemo } from "react";
import { View } from "react-native";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import AvatarUtils from "../../../../utils/AvatarUtils";
import EmojiUtils from "../../../../utils/EmojiUtils";
import Emoji from "../../../emojis/native/Emoji";
import { Text } from "../../../../design/components/Text/native/Text";
let useStyles, GuildProfileTraitView;
const TraitEmoji = function TraitEmoji(props) {
const emoji = props.emoji;
const styles = useStyles();
if (emoji == null) {
return null;
}
return <Emoji src={emoji.id != null ? AvatarUtils.getEmojiURL({
id: emoji.id,
animated: emoji.animated,
size: 16
}) : void 0} name={EmojiUtils.isCustomEmoji(emoji) ? emoji.name : emoji.surrogates} fastImageStyle={styles.emojiImage} />;
};
GuildProfileTraitView = function GuildProfileTraitView(props) {
const trait = props.trait;
return <View style={useStyles().trait}>
<TraitEmoji emoji={trait.emoji} />
<Text variant="text-sm/medium" color="text-default">{trait.label}</Text>
</View>;
};
useStyles = createStyles({
container: {
display: "flex",
flexDirection: "row",
flexWrap: "wrap",
gap: 8
},
trait: {
display: "flex",
flexDirection: "row",
gap: 4,
alignItems: "center",
paddingHorizontal: 8,
paddingVertical: 4,
borderRadius: Module712.radii.lg,
borderWidth: 1,
borderStyle: "solid",
borderColor: Module712.colors.BORDER_SUBTLE
},
emojiImage: {
width: 16,
height: 16
}
});
export default function GuildProfileTraits(props) {
const profile = props.profile;
return <View style={useStyles().container}>
{useMemo(() => profile.traits.map((trait, index) => ({
key: `trait-${index}`,
...trait
})).filter((item) => item.label.length > 0), [profile]).map((item) => <GuildProfileTraitView key={item.key} trait={item} />)}
</View>;
};
@@ -0,0 +1,156 @@
// Metro module 8456 (f8457).
import { useMemo } from "react";
import { Image as Image2, View } from "react-native";
import GuildStore from "../../../../stores/GuildStore";
import { GuildFeatures } from "../../../../Constants";
import { isThemeDark } from "../../../../design/utils/shared/themes";
import { brightenColor, darkenColor } from "../../../../_bundle/Module3901";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import { useStateFromStores } from "../../../../_bundle/Module589";
import { fromGuildProfile } from "../../../../utils/GuildRecordUtils";
import useWindowDimensions_native from "../../../screen/useWindowDimensions.native";
import AvatarUtils from "../../../../utils/AvatarUtils";
import getDevicePixelRatio_web from "../../../../utils/getDevicePixelRatio.web";
import useTheme from "../../../../hooks/useTheme";
import { useToken } from "../../../../design/tokens/native/useToken";
import { useProfilePrimaryColor } from "../GuildProfileUtils";
import Module4611 from "../../../../_bundle/Module4611";
import { Card } from "../../../../design/components/Card/native/Card.native";
import { Text } from "../../../../design/components/Text/native/Text";
import { intl, t } from "../../../../intl/index.native";
import ServerPreviewPill from "../../../lurker_mode/native/ServerPreviewPill";
import GuildProfileHeader from "./GuildProfileHeader";
import GuildProfileGames from "./GuildProfileGames";
import GuildProfileTraits from "./GuildProfileTraits";
let useStyles, c5416_12, GuildProfileGradient, JoinForFullAccessCard;
const GuildProfileBackground = function GuildProfileBackground(props) {
const guildProfile = props.guildProfile;
const stateFromStores = useStateFromStores([GuildStore], () => {
let r7 = GuildStore.getGuild(guildProfile.id);
if (r7 == null) {
r7 = fromGuildProfile(guildProfile);
}
return r7.features.has(GuildFeatures.DISCOVERABLE);
});
const width = useWindowDimensions_native().width;
const styles = useStyles();
if (stateFromStores && guildProfile.customBanner != null) {
return <Image2 style={styles.imageBanner} source={AvatarUtils.getGuildDiscoverySplashSource({
id: guildProfile.id,
splash: guildProfile.customBanner,
size: getDevicePixelRatio_web() * width
})} />;
}
return <GuildProfileGradient guildProfile={guildProfile} />;
};
GuildProfileGradient = function GuildProfileGradient(props) {
const guildProfile3 = props.guildProfile;
const styles = useStyles();
const theme = useTheme();
const profilePrimaryColor = useProfilePrimaryColor(guildProfile3, useToken(Module712.colors.BACKGROUND_BASE_LOWEST));
return <Module4611 style={styles.colorBanner} start={c5416_12.START} end={c5416_12.END} colors={[profilePrimaryColor, isThemeDark(theme) ? brightenColor(profilePrimaryColor, 0.8) : darkenColor(profilePrimaryColor, 0.8)]} />;
};
JoinForFullAccessCard = function JoinForFullAccessCard() {
return <Card variant="secondary" border="none" style={useStyles().joinForFullAccessCard}>
<Text variant="text-md/semibold" color="text-default">
{intl.string(t.us0bE8)}
</Text>
<Text variant="text-sm/normal" color="text-muted">
{intl.string(t.fTtTTp)}
</Text>
</Card>;
};
useStyles = createStyles({
container: {
backgroundColor: Module712.colors.BACKGROUND_BASE_LOW
},
colorBanner: {
height: 140,
width: "100%"
},
imageBanner: {
height: 140,
width: "100%",
objectFit: "cover"
},
body: {
marginTop: 12,
paddingHorizontal: 16,
gap: 16
},
error: {
display: "flex",
flexDirection: "row",
alignItems: "center",
gap: 8
},
buttonContainer: {
marginTop: 160
},
header: {
paddingHorizontal: 16,
marginTop: -32,
display: "flex",
flexDirection: "column",
gap: 0
},
avatarBackground: {
width: 86,
height: 86,
borderRadius: 28.666666666666668,
backgroundColor: Module712.colors.BACKGROUND_BASE_LOW,
display: "flex",
justifyContent: "center",
alignItems: "center",
overflow: "hidden"
},
restrictedAcronym: {
fontSize: 24
},
joinForFullAccessCard: {
gap: 4
}
});
c5416_12 = Object.freeze({
START: {
x: 0,
y: 1
},
END: {
x: 1.5,
y: 0
}
});
export default function GuildProfileView(props) {
const { guildProfile: guildProfile2, isLurkerServerPreview = false } = props;
const styles = useStyles();
return <View style={styles.container}>
<GuildProfileBackground guildProfile={guildProfile2} />
{isLurkerServerPreview && <ServerPreviewPill />}
<GuildProfileHeader profile={guildProfile2} guildIconSource={useMemo(() => {
if (guildProfile2 == null) {
return null;
}
const guildIconSource = AvatarUtils.getGuildIconSource({
id: guildProfile2.id,
icon: guildProfile2.icon,
size: 96,
canAnimate: true
});
return typeof guildIconSource !== "number" ? guildIconSource.uri : null;
}, [guildProfile2])} />
<View style={styles.body}>
{guildProfile2.description != null && guildProfile2.description.length > 0 && <Text variant="text-md/medium" color="text-subtle">{guildProfile2.description}</Text>}
{isLurkerServerPreview ? <JoinForFullAccessCard /> : <>
<GuildProfileGames profile={guildProfile2} />
<GuildProfileTraits profile={guildProfile2} />
</>}
</View>
</View>;
};
export function getBackgroundForProfile(a0, a1) {
return [a1, isThemeDark(a0) ? brightenColor(a1, 0.8) : darkenColor(a1, 0.8)];
}
export { useStyles };
export { c5416_12 as DiagonalGradient };
@@ -0,0 +1,29 @@
// Metro module 8455 (f8456).
import { View } from "react-native";
import { useStyles, DiagonalGradient, getBackgroundForProfile } from "./GuildProfileView";
import useTheme from "../../../../hooks/useTheme";
import { useToken } from "../../../../design/tokens/native/useToken";
import Module712 from "../../../../_bundle/Module712";
import Module4611 from "../../../../_bundle/Module4611";
import GuildIcon, { GuildIconSizes } from "../../../guild/native/GuildIcon";
import { Text } from "../../../../design/components/Text/native/Text";
import { intl, t } from "../../../../intl/index.native";
export default function RestrictedGuildProfileView() {
const styles = useStyles();
return <View style={styles.container}>
<Module4611 style={styles.colorBanner} start={DiagonalGradient.START} end={DiagonalGradient.END} colors={getBackgroundForProfile(useTheme(), useToken(Module712.colors.BACKGROUND_BASE_LOWEST))} />
<View style={styles.header}>
<View style={styles.avatarBackground}>
<GuildIcon size={GuildIconSizes.XXLARGE} value="?" selected={false} textStyle={styles.restrictedAcronym} />
</View>
</View>
<View style={styles.body}>
<Text variant="heading-lg/semibold" color="mobile-text-heading-primary">
{intl.string(t.wZmueu)}
</Text>
<Text variant="text-md/medium" color="text-subtle">
{intl.string(t["8mfCqY"])}
</Text>
</View>
</View>;
};