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,187 @@
// Metro module 8279 (f8280).
import GuildStore from "../../stores/GuildStore";
import GuildOnboardingPromptsStore from "./GuildOnboardingPromptsStore";
import { NUM_DEFAULT_CHATTABLE_CHANNELS_MIN } from "./GuildOnboardingPromptsConstants";
import { GuildFeatures, GuildSettingsSections, Permissions } from "../../Constants";
import { fetchOnboardingPrompts } from "./GuildOnboardingPromptsActionCreators";
import { isChattableChannelId, getMinimumSetOfDefaultChannelIds } from "./GuildOnboardingUtils";
import { filter, invert, deserialize, has } from "../../_bundle/HighLow";
import AlertActionCreators from "../../actions/AlertActionCreators";
import { intl, t } from "../../intl/index.native";
function $mk115278($env) {
return function getAllOnboardingChannelIds(a0) {
const defaultChannelIds = GuildOnboardingPromptsStore.getDefaultChannelIds(a0);
if (!GuildOnboardingPromptsStore.isAdvancedMode(a0)) {
return defaultChannelIds;
}
const onboardingPromptsForOnboarding = GuildOnboardingPromptsStore.getOnboardingPromptsForOnboarding(a0);
const r4 = [];
for (const item of onboardingPromptsForOnboarding) {
if (item.required) {
for (const option of item.options) {
if (option.channelIds != null) {
r4.push.apply(r4, [...option.channelIds]);
}
}
}
}
return [...new Set([...defaultChannelIds, ...r4])];
};
}
function $mk115279($env) {
return (a0) => {
let r6 = a0 !== $env[1];
if (r6) {
r6 = isChattableChannelId(a0);
}
return r6;
};
}
let env5274 = {};
const isChattableChannelThresholdMetAfterChannelChange = async function isChattableChannelThresholdMetAfterChannelChange(c26168_0, c26168_1, c26168_2) {
let r95, r159;
let c26168_3, c26168_4;
L41: {
L40: {
L39: {
L35: {
L31: {
L26: {
L22: {
L18: {
let env29933;
const r9 = env5274;
c26168_4 = r9;
const r10 = env29933 = {
$parent: r9
};
c26168_3 = r10;
env29933[0] = c26168_0;
env29933[1] = c26168_1;
env29933[2] = c26168_2;
env29933[3] = void 0;
env29933[4] = void 0;
env29933[5] = void 0;
const guild = GuildStore.getGuild(c26168_0);
if (guild == null) {
break L41;
}
if (guild == null) {
break L40;
}
const features = guild.features;
if (features == null ? void 0 : features.has(GuildFeatures.GUILD_ONBOARDING)) {
if (GuildOnboardingPromptsStore.shouldFetchPrompts(c26168_0)) {
await fetchOnboardingPrompts(c26168_0);
const r111 = env29933[0];
env29933[3] = $mk115278(env5274)(r111);
if (env29933[3].includes(env29933[1])) {
if (!env29933[2].removingChat && !env29933[2].removingView) {
break L35;
}
env29933[4] = GuildOnboardingPromptsStore.getDefaultChannelIds(env29933[0]);
const r142 = GuildOnboardingPromptsStore.isAdvancedMode(env29933[0]) ? GuildOnboardingPromptsStore.getOnboardingPromptsForOnboarding(env29933[0]) : [];
const r143 = c26168_3;
env29933[5] = r142;
r159 = getMinimumSetOfDefaultChannelIds(env29933[0], env29933[4], env29933[5], $mk115279(r143)).length < NUM_DEFAULT_CHATTABLE_CHANNELS_MIN;
break L39;
}
break L31;
}
const r54 = env29933[0];
env29933[3] = $mk115278(env5274)(r54);
if (env29933[3].includes(env29933[1])) {
if (!env29933[2].removingChat && !env29933[2].removingView) {
break L22;
}
env29933[4] = GuildOnboardingPromptsStore.getDefaultChannelIds(env29933[0]);
const r85 = GuildOnboardingPromptsStore.isAdvancedMode(env29933[0]) ? GuildOnboardingPromptsStore.getOnboardingPromptsForOnboarding(env29933[0]) : [];
const r86 = c26168_3;
env29933[5] = r85;
r95 = getMinimumSetOfDefaultChannelIds(env29933[0], env29933[4], env29933[5], $mk115279(r86)).length < NUM_DEFAULT_CHATTABLE_CHANNELS_MIN;
break L26;
}
break L18;
}
break L40;
}
return true;
}
return true;
}
return !r95;
}
return true;
}
return true;
}
return !r159;
}
return true;
}
return true;
};
GuildSettingsSections;
export async function isDefaultChannelThresholdMetAfterDelete(c26167_0, c26167_1) {
let r26;
L11: {
r26 = c26167_0 == null;
if (r26) {
break L11;
}
return await isChattableChannelThresholdMetAfterChannelChange(c26167_0, c26167_1, {
removingView: true,
removingChat: true
});
}
return r26;
}
export async function checkChattableChannelThresholdMetAfterChannelPermissionDeny(c26169_0, c26169_1, c26169_2) {
let r117;
let c29934_0;
L37: {
L34: {
L33: {
L24: {
c29934_0 = void 0;
const guildId = c26169_0.getGuildId();
if (guildId == null) {
break L37;
}
const r21 = c26169_2 != null ? filter(c26169_1, invert(c26169_2)) : c26169_1;
const r38 = c26169_0.permissionOverwrites[guildId];
const r57 = r38 != null ? filter(r38.deny, invert(r38.allow)) : deserialize(0);
const r69 = has(r21, Permissions.VIEW_CHANNEL);
const r72 = {
removingView: r69 && !importAll(dependencyMap[7]).has(r57, Permissions.VIEW_CHANNEL),
removingChat: false
};
const isForumLikeChannel = c26169_0.isForumLikeChannel();
const r77 = importAll(dependencyMap[7]);
if (isForumLikeChannel) {
r72.removingChat = r77.has(r21, Permissions.SEND_MESSAGES_IN_THREADS) && !importAll(dependencyMap[7]).has(r57, Permissions.SEND_MESSAGES_IN_THREADS);
} else {
r72.removingChat = r77.has(r21, Permissions.SEND_MESSAGES) && !importAll(dependencyMap[7]).has(r57, Permissions.SEND_MESSAGES);
}
if (!r72.removingChat && !r72.removingView) {
break L24;
}
c29934_0 = GuildOnboardingPromptsStore.isAdvancedMode(guildId);
r117 = !!await isChattableChannelThresholdMetAfterChannelChange(guildId, c26169_0.id, r72);
if (r117) {
break L34;
}
AlertActionCreators.show({
title: intl.string(t.ut7sq0),
body: c29934_0 ? intl.format(t.w9Oz5K, {}) : intl.format(t["5sm9rH"], {})
});
break L33;
}
return true;
}
return 0;
}
return r117;
}
return true;
}
@@ -0,0 +1,19 @@
// Metro module 5117 (f5118).
import GatedChannelStore from "../channel/GatedChannelStore";
import ChannelStore from "../../stores/ChannelStore";
import { ChannelTypesSets, Permissions } from "../../Constants";
import { combine } from "../../_bundle/HighLow";
import { useStateFromStores } from "../../_bundle/Module589";
import { canEveryoneRole } from "../../utils/PermissionUtils";
export function useCanChannelBeDefault(c14654_0, c14654_1) {
return useStateFromStores([GatedChannelStore, ChannelStore], () => {
const channel = ChannelStore.getChannel(c14654_1);
const r15 = channel != null && ChannelTypesSets.GUILD_VOCAL.has(channel.type) ? combine(Permissions.VIEW_CHANNEL, Permissions.CONNECT) : Permissions.VIEW_CHANNEL;
return GatedChannelStore.isChannelGated(c14654_0, c14654_1) || canEveryoneRole(r15, channel);
});
}
export function canChannelBeDefault(a0, a1) {
const channel = ChannelStore.getChannel(a1);
const r5 = channel != null && ChannelTypesSets.GUILD_VOCAL.has(channel.type) ? combine(Permissions.VIEW_CHANNEL, Permissions.CONNECT) : Permissions.VIEW_CHANNEL;
return GatedChannelStore.isChannelGated(a0, a1) || canEveryoneRole(r5, ChannelStore.getChannel(a1));
}
@@ -0,0 +1,221 @@
// Metro module 5120 (f5121).
import ImpersonateStore from "../impersonate/ImpersonateStore";
import ChannelStore from "../../stores/ChannelStore";
import GuildMemberStore from "../../stores/GuildMemberStore";
import UserStore from "../../stores/UserStore";
import GuildOnboardingPromptsStore from "./GuildOnboardingPromptsStore";
import { AnalyticEvents, AnalyticsPages, Endpoints } from "../../Constants";
import { GuildMemberFlags } from "../guild_member/GuildMemberConstants";
import { ReadStateTypes } from "../read_states/ReadStateConstants";
import { HTTP } from "../../_bundle/sendRequest";
import Dispatcher from "../../Dispatcher";
import SentryUtils_native from "../../utils/SentryUtils.native";
import { updateImpersonatedRoles, updateImpersonatedChannels, updateImpersonatedData } from "../impersonate/ImpersonateActionCreators";
import Module12 from "../../_bundle/Module12";
import { getSelectedRoleIds, getSelectedChannelIds, getChannelCoverageForOnboarding, getProviderConnectionState, getApplicationConnectionState } from "./GuildOnboardingUtils";
import { isNotNullish } from "../../utils/GlobalUtils";
import { getFlattenedChannels } from "./useFlattenedChannels";
import AnalyticsUtils from "../../utils/AnalyticsUtils";
import { collectGuildAnalyticsMetadata } from "../app_analytics/AppAnalyticsUtils";
import { ackGuildFeature } from "../../actions/ReadStateActionCreators";
import SnowflakeUtils from "../../utils/SnowflakeUtils";
import { setFlag } from "../../_bundle/Module1384";
import { bulkOptInChannels } from "../opt_in_channels/OptInChannelsActionCreators";
import { updateGuildSelfMember } from "../guild_member/GuildMemberActionCreators";
const _updateOnboardingResponses = function _updateOnboardingResponses(a0) {
let c14657_2, c14657_3;
const guildId = a0;
let r2 = arguments[1];
if (r2 === void 0) {
r2 = false;
}
c14657_2 = void 0;
c14657_3 = void 0;
if (ImpersonateStore.isFullServerPreview(a0)) {
return void 0;
}
const r7 = r2 ? GuildOnboardingPromptsStore.getOnboardingPromptsForOnboarding(a0) : GuildOnboardingPromptsStore.getOnboardingPrompts(a0);
const onboardingResponses = GuildOnboardingPromptsStore.getOnboardingResponses(a0);
const r13 = r7.map((item) => item.options.filter((option) => onboardingResponses.includes(option.id))).flat();
const onboarding_prompts_seen = {};
c14657_2 = onboarding_prompts_seen;
const onboarding_responses_seen = {};
c14657_3 = onboarding_responses_seen;
r7.forEach((item) => {
c14657_2[item.id] = Date.now();
item.options.forEach(({ id }) => {
const r7 = Date.now();
c14657_3[id] = r7;
return r7;
});
});
return r2 ? HTTP.post({
url: Endpoints.GUILD_ONBOARDING_RESPONSES(a0),
body: {
onboarding_responses: r13.map((item) => item.id),
onboarding_prompts_seen,
onboarding_responses_seen
},
rejectWithError: true
}).then((result) => {
if (result.body != null) {
Dispatcher.dispatch({
type: "GUILD_ONBOARDING_UPDATE_RESPONSES_SUCCESS",
guildId,
options: result.body.onboarding_responses,
prompts_seen: result.body.onboarding_prompts_seen,
options_seen: result.body.onboarding_responses_seen
});
}
}).catch((error) => SentryUtils_native.captureException(error)) : HTTP.put({
url: Endpoints.GUILD_ONBOARDING_RESPONSES(a0),
body: {
onboarding_responses: r13.map((item) => item.id),
onboarding_prompts_seen,
onboarding_responses_seen
},
rejectWithError: false
}).then((result) => {
if (result.body != null) {
Dispatcher.dispatch({
type: "GUILD_ONBOARDING_UPDATE_RESPONSES_SUCCESS",
guildId,
options: result.body.onboarding_responses,
prompts_seen: result.body.onboarding_prompts_seen,
options_seen: result.body.onboarding_responses_seen
});
}
}).catch((error) => {
SentryUtils_native.captureException(new Error(`Failed to update onboarding responses for guild ${guildId}: ${error.statusCode}`, {
cause: error
}));
});
};
const r40 = {
selectOption: (a0, a1, a2, a3) => {
const onboardingPrompt = GuildOnboardingPromptsStore.getOnboardingPrompt(a1);
if (onboardingPrompt != null) {
Dispatcher.dispatch({
type: "GUILD_ONBOARDING_SELECT_OPTION",
guildId: a0,
promptId: a1,
optionId: a2,
selected: a3,
removedOptionIds: onboardingPrompt.singleSelect ? Module12.without(Module12.map(onboardingPrompt.options, "id"), a2) : []
});
}
},
updateOnboardingResponses: Module12.debounce(_updateOnboardingResponses, 1000),
updateRolesLocal: function updateRolesLocal(a0, a1, a2) {
let r13 = GuildMemberStore.getSelfMember(a0)?.roles;
if (r13 == null) {
r13 = [];
}
if (ImpersonateStore.isViewingRoles(a0)) {
updateImpersonatedRoles(a0, Module12.difference(Module12.union(r13, a1), a2));
} else if (a1.length > 0 || a2.length > 0) {
Dispatcher.dispatch({
type: "GUILD_MEMBER_UPDATE_LOCAL",
guildId: a0,
roles: Module12.difference(Module12.union(r13, a1), a2),
addedRoleIds: a1,
removedRoleIds: a2
});
}
},
completeOnboarding: (a0, a1) => {
const r24 = a1.length > 0 ? a1[a1.length - 1] : null;
const selectedOptions = GuildOnboardingPromptsStore.getSelectedOptions(a0);
const selectedRoleIds = getSelectedRoleIds(selectedOptions);
const selectedChannelIds = getSelectedChannelIds(selectedOptions);
const r47 = GuildOnboardingPromptsStore.getEnabled(a0) ? GuildOnboardingPromptsStore.getDefaultChannelIds(a0) : [];
const [r23, r22] = getChannelCoverageForOnboarding(a0, a1, r47);
const r54 = [...selectedChannelIds, ...r47];
const r66 = r54.map((item) => ChannelStore.getChannel(item)).filter(isNotNullish);
const length = getFlattenedChannels(a0, new Set(r54), r66, true).length;
const r21 = r24 == null ? [] : r24.options.map((option) => option.id);
let c14658_0 = r21;
const connections = GuildOnboardingPromptsStore.getConnections(a0);
const providerConnectionState = getProviderConnectionState(connections);
const applicationConnectionState = getApplicationConnectionState(connections);
AnalyticsUtils.track(AnalyticEvents.GUILD_ONBOARDING_STEP_COMPLETED, {
...collectGuildAnalyticsMetadata(a0),
step: a1.length - 1,
options_selected: r24 == null ? 0 : selectedOptions.filter((selectedOption) => c14658_0.includes(selectedOption.id)).length,
skipped: r21.length > 0,
back: false,
in_onboarding: true,
is_final_step: true,
roles_granted: selectedRoleIds.size,
channels_granted: length,
guild_onboarding_covered_channel_ids: r23.map((item) => item.id),
guild_onboarding_uncovered_channel_ids: r22.map((item) => item.id),
provider_connections_connected: providerConnectionState.connected,
provider_connections_not_connected: providerConnectionState.notConnected,
application_connections_connected: applicationConnectionState.connected,
application_connections_not_connected: applicationConnectionState.notConnected
});
ackGuildFeature(a0, ReadStateTypes.GUILD_ONBOARDING_QUESTION, SnowflakeUtils.fromTimestamp(Date.now()));
_updateOnboardingResponses(a0, true);
if (ImpersonateStore.isFullServerPreview(a0)) {
updateImpersonatedChannels(a0, r54, []);
updateImpersonatedData(a0, {
optInEnabled: true
});
updateImpersonatedRoles(a0, Array.from(selectedRoleIds));
const currentUser = UserStore.getCurrentUser();
if (currentUser != null) {
let r164 = GuildMemberStore.getMember(a0, currentUser.id)?.flags;
if (r164 == null) {
r164 = 0;
}
updateImpersonatedData(a0, {
memberOptions: {
flags: setFlag(r164, GuildMemberFlags.COMPLETED_ONBOARDING, true)
}
});
}
}
},
onboardExistingMember: (a0, a1) => {
const set = new Set(a1);
let c14659_0 = set;
(GuildOnboardingPromptsStore.getEnabled(a0) ? GuildOnboardingPromptsStore.getDefaultChannelIds(a0) : []).forEach((item) => c14659_0.add(item));
if (set.size > 0) {
bulkOptInChannels(a0, Array.from(set), true, {
page: AnalyticsPages.GUILD_ONBOARDING
});
}
},
finishOnboarding: (a0) => {
Dispatcher.dispatch({
type: "GUILD_ONBOARDING_COMPLETE",
guildId: a0
});
},
setUserOnboardingStep: (a0, a1) => {
Dispatcher.dispatch({
type: "GUILD_ONBOARDING_SET_STEP",
guildId: a0,
step: a1
});
},
resetOnboarding: async (c14660_0) => {
let flags;
L15: {
const currentUser = UserStore.getCurrentUser();
if (currentUser != null) {
flags = GuildMemberStore.getMember(c14660_0, currentUser.id)?.flags;
if (flags == null) {
flags = 0;
}
await updateGuildSelfMember(c14660_0, {
flags: setFlag(flags, GuildMemberFlags.COMPLETED_ONBOARDING, false)
});
break L15;
}
return void 0;
}
}
};
export default r40;
@@ -0,0 +1,126 @@
// Metro module 5114 (f5115).
import AuthenticationStore from "../../stores/AuthenticationStore";
import GuildMemberStore from "../../stores/GuildMemberStore";
import GuildStore from "../../stores/GuildStore";
import GuildOnboardingPromptsStore from "./GuildOnboardingPromptsStore";
import { serverApiResponseToClientState } from "./GuildOnboardingPromptsConstants";
import { AnalyticEvents, Endpoints, GuildFeatures } from "../../Constants";
import { GuildMemberFlags } from "../guild_member/GuildMemberConstants";
import AnalyticsUtils from "../../utils/AnalyticsUtils";
import { collectGuildAnalyticsMetadata } from "../app_analytics/AppAnalyticsUtils";
import Dispatcher from "../../Dispatcher";
import { HTTP } from "../../_bundle/sendRequest";
import * as _Module1384 from "../../_bundle/Module1384";
let startOnboarding, step, _trackOnboardingDirectJoin;
const fetchOnboardingPrompts = function fetchOnboardingPrompts(guildId5) {
const guildId = guildId5;
Dispatcher.dispatch({
type: "GUILD_ONBOARDING_PROMPTS_FETCH_START",
guildId: guildId5
});
return HTTP.get({
url: Endpoints.GUILD_ONBOARDING(guildId5),
rejectWithError: false
}).then(({ body }) => {
const r5 = serverApiResponseToClientState(body);
let c25349_0 = r5;
return Dispatcher.dispatch({
type: "GUILD_ONBOARDING_PROMPTS_FETCH_SUCCESS",
guildId,
...r5
}).then(() => c25349_0.prompts);
}, (a0) => {
Dispatcher.dispatch({
type: "GUILD_ONBOARDING_PROMPTS_FETCH_FAILURE",
guildId
});
return a0;
});
};
startOnboarding = function startOnboarding(a0) {
Dispatcher.dispatch({
type: "GUILD_ONBOARDING_START",
guildId: a0
});
};
_trackOnboardingDirectJoin = function _trackOnboardingDirectJoin(a0) {
AnalyticsUtils.track(AnalyticEvents.GUILD_ONBOARDING_STEP_VIEWED, {
...collectGuildAnalyticsMetadata(a0),
step,
required: true
});
AnalyticsUtils.track(AnalyticEvents.GUILD_ONBOARDING_STEP_COMPLETED, {
...collectGuildAnalyticsMetadata(a0),
step,
skipped: false,
is_final_step: true,
in_onboarding: true
});
};
step = -2;
export function loadOnboardingPrompts(a0) {
AnalyticsUtils.track(AnalyticEvents.GUILD_ONBOARDING_LOADED, {
...collectGuildAnalyticsMetadata(a0),
has_new_prompts: false,
number_of_prompts: 0
});
}
export { fetchOnboardingPrompts };
export async function maybeFetchOnboardingPrompts(c25350_0) {
let r48, r72, r112;
let flags, c25350_2, c25350_3;
L32: {
L29: {
L22: {
let env29462;
c25350_3 = void 0;
const r13 = env29462 = {};
c25350_2 = r13;
env29462[0] = c25350_0;
env29462[1] = void 0;
env29462[2] = void 0;
flags = GuildMemberStore.getMember(c25350_0, AuthenticationStore.getId())?.flags;
if (flags == null) {
flags = 0;
}
const hasFlag = _Module1384.hasFlag(flags, GuildMemberFlags.COMPLETED_ONBOARDING);
env29462[1] = hasFlag;
const guild = GuildStore.getGuild(c25350_0);
if (guild != null && guild.features.has(GuildFeatures.GUILD_ONBOARDING)) {
const shouldFetchPrompts = GuildOnboardingPromptsStore.shouldFetchPrompts(c25350_0);
const onboardingPrompts = GuildOnboardingPromptsStore.getOnboardingPrompts(c25350_0);
if (!shouldFetchPrompts && onboardingPrompts.length > 0) {
if (onboardingPrompts.every((onboardingPrompt) => !onboardingPrompt.inOnboarding)) {
_trackOnboardingDirectJoin(c25350_0);
r72 = Promise.resolve();
break L22;
}
if (!hasFlag) {
startOnboarding(c25350_0);
}
r72 = Promise.resolve();
break L22;
}
env29462[2] = await fetchOnboardingPrompts(c25350_0);
if (Array.isArray(env29462[2]) && env29462[2].every((item) => !item.inOnboarding)) {
(0, _trackOnboardingDirectJoin)(env29462[0]);
r112 = Promise.resolve();
break L29;
}
if (!env29462[1]) {
(0, startOnboarding)(env29462[0]);
}
r112 = env29462[2];
break L29;
}
r48 = Promise.resolve();
break L32;
}
return r72;
}
return r112;
}
return r48;
}
export { startOnboarding };
export const CONNECTIONS_STEP = -3;
@@ -0,0 +1,251 @@
// Metro module 5116 (f5117).
import _objectWithoutProperties from "../../_bundle/_objectWithoutProperties";
import { PlatformTypes } from "../../Constants";
import isUndefinedOrNull from "../../_bundle/isUndefinedOrNull";
import { intl, t } from "../../intl/index.native";
import { isNullOrEmpty } from "../../utils/StringUtils";
let _excluded, _excluded2, c3079_7, c3079_8, c3079_10, c3079_11, validateOnboardingConnection;
const serverPromptToClientPrompt = function serverPromptToClientPrompt(a0) {
return {
id: a0.id,
options: a0.options.map((option) => {
let description = option.description;
if (description == null) {
description = "";
}
return {
id: option.id,
channelIds: option.channel_ids,
roleIds: option.role_ids,
emoji: option.emoji,
title: option.title,
description
};
}),
title: a0.title,
singleSelect: a0.single_select,
disabled: a0.disabled,
required: a0.required,
inOnboarding: a0.in_onboarding,
type: a0.type
};
};
validateOnboardingConnection = function validateOnboardingConnection(a0) {
const r3 = [];
const connection_type = a0.connection_type;
if (c3079_8.APPLICATION === connection_type) {
if (isNullOrEmpty(a0.application_id)) {
r3.push("Application ID is required for application connections");
}
if (!isNullOrEmpty(a0.provider_id)) {
r3.push("Platform ID not allowed for application connections");
}
} else {
if (c3079_8.PROVIDER_CONNECTED_ACCOUNT !== connection_type) {
a0.connection_type;
r3.push("Invalid connection type");
return r3;
}
if (isNullOrEmpty(a0.provider_id)) {
r3.push("Platform ID is required for platform connections");
} else if (!c3079_11.includes(a0.provider_id)) {
r3.push("Invalid platform ID");
}
if (!isNullOrEmpty(a0.application_id)) {
r3.push("Application ID not allowed for platform connections");
}
}
if (a0.description != null && a0.description.length > 100) {
r3.push("Description must be 100 characters or less");
}
return r3;
};
_excluded = ["id"];
_excluded2 = ["id"];
const r33 = {
CUSTOMIZE: 0,
0: "CUSTOMIZE",
BROWSE: 1,
1: "BROWSE"
};
c3079_7 = {
MULTIPLE_CHOICE: 0,
0: "MULTIPLE_CHOICE",
DROPDOWN: 1,
1: "DROPDOWN"
};
const r39 = {
ONBOARDING_DEFAULT: 0,
0: "ONBOARDING_DEFAULT",
ONBOARDING_ADVANCED: 1,
1: "ONBOARDING_ADVANCED"
};
c3079_8 = {
APPLICATION: 0,
0: "APPLICATION",
PROVIDER_CONNECTED_ACCOUNT: 1,
1: "PROVIDER_CONNECTED_ACCOUNT"
};
c3079_10 = new Set([PlatformTypes.PLAYSTATION_STAGING, PlatformTypes.CONTACTS, PlatformTypes.DOMAIN, PlatformTypes.TWITTER_LEGACY, PlatformTypes.MASTODON, PlatformTypes.INSTAGRAM, PlatformTypes.LEAGUE_OF_LEGENDS, PlatformTypes.SKYPE]);
c3079_11 = Object.values(PlatformTypes).filter((item) => !c3079_10.has(item));
export const MAX_PROMPT_TITLE_LENGTH = 100;
export const MAX_PROMPT_OPTION_TITLE_LENGTH = 50;
export const MAX_PROMPT_OPTION_DESCRIPTION_LENGTH = 100;
export const MAX_NUM_PROMPTS = 15;
export const MULTIPLE_CHOICE_MAX_NUM_OPTIONS = 12;
export const DROPDOWN_MAX_NUM_OPTIONS = 50;
export const MAX_DEFAULT_CHANNEL_IDS = 25;
export const MAX_NUMBER_OF_ONBOARDING_CONNECTIONS = 10;
export const MAX_CONNECTION_DESCRIPTION_LENGTH = 100;
export const MAX_NUMBER_OF_ONBOARDING_PROMPTS_IN_ONBOARDING = 4;
export const NUM_DEFAULT_CHATTABLE_CHANNELS_MIN = 1;
export const ONBOARDING_PROMPT_TYPE_SWITCH_THRESHOLD = 13;
export { r33 as GuildOnboardingTab };
export { c3079_7 as OnboardingPromptType };
export { r39 as GuildOnboardingMode };
export { c3079_8 as OnboardingConnectionType };
export function isDefaultPrompt(a0) {
if (a0.options.length > 0) {
return false;
}
const r4 = {
id: String(Date.now()),
title: intl.string(t.vY91C9),
options: [],
singleSelect: false,
required: false,
inOnboarding: true,
type: c3079_7.MULTIPLE_CHOICE
};
r4.id;
const rest = _objectWithoutProperties(r4, _excluded);
a0.id;
return isUndefinedOrNull(rest, _objectWithoutProperties(a0, _excluded2));
}
export function getDefaultPrompt() {
return {
id: String(Date.now()),
title: intl.string(t.vY91C9),
options: [],
singleSelect: false,
required: false,
inOnboarding: true,
type: c3079_7.MULTIPLE_CHOICE
};
}
export function getEmptyPrompt(a0) {
return {
id: String(Date.now()),
title: "",
options: [],
singleSelect: false,
required: false,
inOnboarding: a0,
type: c3079_7.MULTIPLE_CHOICE
};
}
export function clientPromptToServerPrompt(a0) {
return {
id: a0.id,
options: a0.options.map((option) => ({
id: option.id,
channel_ids: option.channelIds,
role_ids: option.roleIds,
emoji: option.emoji,
emoji_id: option.emoji?.id,
emoji_name: option.emoji?.name,
emoji_animated: option.emoji?.animated,
title: option.title,
description: option.description
})),
title: a0.title,
single_select: a0.singleSelect,
disabled: a0.disabled,
required: a0.required,
in_onboarding: a0.inOnboarding,
type: a0.type
};
}
export { serverPromptToClientPrompt };
export function serverApiResponseToClientState(a0) {
const r1 = {
prompts: a0.prompts.map(serverPromptToClientPrompt),
defaultChannelIds: a0.default_channel_ids,
responses: null,
mode: null,
enabled: null,
onboardingPromptsSeen: null,
onboardingResponsesSeen: null,
belowRequirements: null,
connections: null,
additionalConnections: null
};
let responses = a0.responses;
if (responses == null) {
responses = [];
}
r1.responses = responses;
r1.mode = a0.mode;
r1.enabled = a0.enabled;
let onboarding_prompts_seen = a0.onboarding_prompts_seen;
if (onboarding_prompts_seen == null) {
onboarding_prompts_seen = {};
}
r1.onboardingPromptsSeen = onboarding_prompts_seen;
let onboarding_responses_seen = a0.onboarding_responses_seen;
if (onboarding_responses_seen == null) {
onboarding_responses_seen = {};
}
r1.onboardingResponsesSeen = onboarding_responses_seen;
r1.belowRequirements = a0.below_requirements;
let connections = a0.connections;
if (connections == null) {
connections = [];
}
r1.connections = connections;
let additional_connections = a0.additional_connections;
if (additional_connections == null) {
additional_connections = [];
}
r1.additionalConnections = additional_connections;
return r1;
}
export function isEmojiEmpty(a0) {
return a0 == null || a0.id == null && a0.name == null;
}
export { c3079_10 as EXCLUDED_ONBOARDING_PLATFORM_TYPES };
export function getConnectionIdentifier(a0) {
return a0.connection_type === c3079_8.APPLICATION ? `app:${a0.application_id}` : `provider:${a0.provider_id}`;
}
export function parseConnectionIdentifier(a0) {
const [r7, applicationId] = a0.split(":");
return r7 === "app" && (applicationId !== void 0 && applicationId !== "") ? {
type: c3079_8.APPLICATION,
applicationId
} : r7 === "provider" ? applicationId !== void 0 ? applicationId !== "" ? {
type: c3079_8.PROVIDER_CONNECTED_ACCOUNT,
providerId: applicationId
} : null : null : null;
}
export { validateOnboardingConnection };
export function validateOnboardingConnections(a0) {
let c14653_2;
const r0 = [];
let c14653_0 = r0;
let c14653_1 = new Set();
const _loop = function _loop(c25351_0) {
const r9 = validateOnboardingConnection(c14653_2);
c14653_0.push.apply(c14653_0, [...r9.map((item) => `Connection ${c25351_0 + 1}: ${item}`)]);
const r29 = c14653_2.connection_type === c3079_8.APPLICATION ? `app:${c14653_2.application_id}` : `provider:${c14653_2.provider_id}`;
if (c14653_1.has(r29)) {
c14653_0.push("Duplicate connection configuration");
}
c14653_1.add(r29);
};
for (const item of a0.entries()) {
let r35;
[r35, c14653_2] = item;
_loop(r35);
}
return r0;
}
@@ -0,0 +1,457 @@
// Metro module 5115 (f5116).
import ImpersonateStore from "../impersonate/ImpersonateStore";
import ChannelStore from "../../stores/ChannelStore";
import GuildOnboardingStore, { GuildOnboardingStatus } from "./GuildOnboardingStore";
import { GuildOnboardingMode } from "./GuildOnboardingPromptsConstants";
import { canChannelBeDefault } from "./DefaultChannelUtils";
import Module12 from "../../_bundle/Module12";
import Module589 from "../../_bundle/Module589";
import Durations from "../../utils/Durations";
import SnowflakeUtils from "../../utils/SnowflakeUtils";
import Dispatcher from "../../Dispatcher";
function $mk75435($env) {
return (a0) => {
let length2;
const r9 = $env;
const r11 = r9[0];
const r13 = r9[1];
const options = [];
const length = a0.options.length;
let r0 = 0;
const r3 = 0 < length;
let r4 = false;
let hasNewAnswers = false;
if (r3) {
do {
const r15 = a0.options[r0];
const isUnseen = r13[r15.id] == null;
const r1 = r0;
const r23 = isUnseen ? true : r4;
options.push({
...r15,
isUnseen
});
r0 = r1 + 1;
length2 = a0.options.length;
r4 = r23;
hasNewAnswers = r4;
} while (r0 < length2);
}
return {
...a0,
options,
hasNewAnswers,
isNew: r11[a0.id] == null
};
};
}
function $mk75436($env) {
return (a0) => {
const r1 = $env;
const r4 = r1[1];
if (!r4.includes(a0) && $env.$parent[9][r1[0]][a0]) {
r1[2][a0] = true;
} else if (r4.includes(a0) && $env.$parent[9][r1[0]][a0] === false) {
r1[2][a0] = false;
}
};
}
function $mk75437($env) {
return (a0) => {
const r5 = $env[2];
return r5[a0] == null || r5[a0] === true;
};
}
function $mk75438($env) {
return (a0) => {
const r1 = $env;
if (!(r1[2][a0] !== true || r1[1].includes(a0))) {
r1[3].push(a0);
}
};
}
let c3078_9, c3078_10, c3078_12, c3078_13, c3078_14, c3078_15, c3078_16;
let env3078 = {};
const handleUpdate = function handleUpdate({ guildId: guildId3, updates }) {
let onboardingPromptsSeen = updates.onboardingPromptsSeen;
if (onboardingPromptsSeen == null) {
onboardingPromptsSeen = env3078[8][guildId3]?.onboardingPromptsSeen;
}
if (onboardingPromptsSeen == null) {
onboardingPromptsSeen = {};
}
let onboardingResponsesSeen = updates.onboardingResponsesSeen;
if (onboardingResponsesSeen == null) {
onboardingResponsesSeen = env3078[8][guildId3]?.onboardingResponsesSeen;
}
if (onboardingResponsesSeen == null) {
onboardingResponsesSeen = {};
}
let prompts = updates.prompts;
if (prompts == null) {
prompts = env3078[8][guildId3]?.prompts;
}
if (prompts == null) {
prompts = [];
}
let env14642;
const r22 = env14642 = {};
env14642[0] = onboardingPromptsSeen;
env14642[1] = onboardingResponsesSeen;
const prompts2 = prompts.map($mk75435(r22));
const r26 = env3078[8];
r26[guildId3] = {
...r26[guildId3],
...updates,
prompts: prompts2
};
};
env3078[8] = {};
c3078_9 = {};
c3078_10 = {};
env3078[11] = false;
c3078_12 = [];
c3078_13 = [];
c3078_14 = [];
c3078_15 = [];
class GuildOnboardingPromptsStore extends Module589.Store {
static displayName = "GuildOnboardingPromptsStore";
constructor() {
super(...arguments);
}
initialize() {
this.waitFor(ChannelStore, GuildOnboardingStore, ImpersonateStore);
}
getOnboardingPromptsForOnboarding(a0) {
let r6 = env3078[8][a0]?.onboardingPrompts;
if (r6 == null) {
r6 = c3078_12;
}
return r6;
}
getOnboardingPrompts(a0) {
let r6 = env3078[8][a0]?.prompts;
if (r6 == null) {
r6 = c3078_12;
}
return r6;
}
getOnboardingResponses(a0) {
let r11;
if (ImpersonateStore.isFullServerPreview(a0)) {
const r5 = Array;
let r14 = ImpersonateStore.getOnboardingResponses(a0);
if (r14 == null) {
r14 = c3078_13;
}
r11 = r5.from(r14);
} else {
r11 = env3078[8][a0]?.responses;
if (r11 == null) {
r11 = c3078_13;
}
}
return r11;
}
getSelectedOptions(a0) {
const onboardingResponses = this.getOnboardingResponses(a0);
return this.getOnboardingPrompts(a0).map((item) => item.options).flat().filter((item) => onboardingResponses.includes(item.id));
}
getOnboardingResponsesForPrompt(a0, c14644_0) {
const r10 = env3078[8][a0];
if (r10 == null) {
return c3078_13;
}
const r13 = r10.prompts.find((prompt) => prompt.id === c14644_0);
return r13 == null ? c3078_13 : Module12.intersection(r13.options.map((option) => option.id), this.getOnboardingResponses(a0));
}
getEnabledOnboardingPrompts(a0) {
let r10;
L13: {
const r5 = env3078[8][a0];
if (ImpersonateStore.isFullServerPreview(a0)) {
let r12 = r5?.prompts;
if (r12 == null) {
r12 = c3078_12;
}
r10 = r12;
} else {
if (r5 != null && r5.enabled) {
let prompts = r5.prompts;
if (prompts == null) {
prompts = c3078_12;
}
r10 = prompts;
break L13;
}
r10 = c3078_12;
}
}
return r10;
}
getDefaultChannelIds(a0) {
let r6 = env3078[8][a0]?.defaultChannelIds;
if (r6 == null) {
r6 = c3078_14;
}
return r6;
}
getEnabled(a0) {
let r9;
const isFullServerPreview = ImpersonateStore.isFullServerPreview(a0);
const r8 = env3078[8][a0];
if (isFullServerPreview) {
r9 = r8 != null;
} else {
r9 = r8?.enabled;
if (r9 == null) {
r9 = false;
}
}
return r9;
}
getOnboardingPrompt(c14645_0) {
return Object.values(env3078[8]).map((item) => item.prompts).flat().find((item) => item.id === c14645_0);
}
isLoading() {
return env3078[11];
}
shouldFetchPrompts(a0, r3 = Durations.Millis.HOUR) {
if (env3078[11]) {
return false;
}
const r12 = c3078_10[a0];
return r12 == null || Date.now() - r12 > r3;
}
getPendingResponseOptions(a0) {
return c3078_9[a0];
}
ackIdForGuild(a0) {
const enabledOnboardingPrompts = this.getEnabledOnboardingPrompts(a0);
const id = "0";
enabledOnboardingPrompts.forEach((enabledOnboardingPrompt) => {
enabledOnboardingPrompt.options.forEach((option) => {
if (SnowflakeUtils.compare(option.id, id) > 0) {
id = option.id;
}
});
if (SnowflakeUtils.compare(enabledOnboardingPrompt.id, id) > 0) {
id = enabledOnboardingPrompt.id;
}
});
return id;
}
lastFetchedAt(a0) {
return c3078_10[a0];
}
isAdvancedMode(a0) {
return a0 != null && env3078[8][a0]?.mode === GuildOnboardingMode.ONBOARDING_ADVANCED;
}
getConnections(a0) {
let r6 = env3078[8][a0]?.connections;
if (r6 == null) {
r6 = c3078_15;
}
return r6;
}
getOnboardingConnections(a0) {
let r12;
const r10 = env3078[8][a0];
if (r10 == null) {
return c3078_15;
}
let additionalConnections = r10.additionalConnections;
if (additionalConnections == null) {
additionalConnections = [];
}
if (additionalConnections.length === 0) {
let connections2 = r10.connections;
if (connections2 == null) {
connections2 = c3078_15;
}
r12 = connections2;
} else {
let connections = r10.connections;
if (connections == null) {
connections = [];
}
r12 = [...connections, ...additionalConnections];
}
return r12;
}
}
c3078_16 = GuildOnboardingPromptsStore;
const r92 = new GuildOnboardingPromptsStore(Dispatcher, {
CONNECTION_OPEN: function handleConnectionOpen() {
env3078[11] = false;
env3078[8] = {};
},
GUILD_DELETE: function handleGuildDelete({ guild }) {
delete env3078[8][guild.id];
delete c3078_9[guild.id];
delete c3078_10[guild.id];
},
GUILD_ONBOARDING_PROMPTS_FETCH_START: function handleStart() {
env3078[11] = true;
},
GUILD_ONBOARDING_PROMPTS_FETCH_SUCCESS: function handleSuccess(a0) {
let env14648;
const { guildId, prompts, defaultChannelIds, enabled, responses, onboardingPromptsSeen, onboardingResponsesSeen, mode, belowRequirements } = a0;
let connections = a0.connections;
let additionalConnections = a0.additionalConnections;
env3078[11] = false;
const r1 = GuildOnboardingStore.getOnboardingStatus(guildId) === GuildOnboardingStatus.READY;
const r24 = env14648 = {};
env14648[0] = onboardingPromptsSeen;
env14648[1] = onboardingResponsesSeen;
const prompts2 = prompts.map($mk75435(r24));
const r28 = env3078[8];
const r29 = {
enabled,
mode,
belowRequirements,
prompts: prompts2,
onboardingPrompts: prompts2.filter((item) => item.inOnboarding),
defaultChannelIds: defaultChannelIds.filter((defaultChannelId) => canChannelBeDefault(guildId, defaultChannelId)),
responses: r1 ? [] : responses,
onboardingPromptsSeen,
onboardingResponsesSeen,
connections: null,
additionalConnections: null
};
if (connections == null) {
connections = [];
}
r29.connections = connections;
if (additionalConnections == null) {
additionalConnections = [];
}
r29.additionalConnections = additionalConnections;
r28[guildId] = r29;
if (!r1) {
let env14649;
const r38 = env14649 = {
$parent: env3078
};
env14649[0] = guildId;
env14649[1] = responses;
if (c3078_9[guildId] != null) {
const r41 = {};
env14649[2] = r41;
Object.keys(c3078_9[guildId]).forEach($mk75436(r38));
c3078_9[guildId] = r41;
const responses2 = responses.filter($mk75437(r38));
env14649[3] = responses2;
Object.keys(r41).forEach($mk75438(r38));
const r59 = env3078[8];
r59[guildId] = {
...r59[guildId],
responses: responses2
};
}
}
c3078_10[guildId] = Date.now();
},
GUILD_ONBOARDING_PROMPTS_FETCH_FAILURE: function handleFailure() {
env3078[11] = false;
},
GUILD_ONBOARDING_SELECT_OPTION: function handleOptionSelect({ guildId: guildId2, optionId, selected, removedOptionIds }) {
let r19 = !!ImpersonateStore.isFullServerPreview(guildId2);
if (!r19) {
let r3 = env3078[8][guildId2] != null;
if (r3) {
if (removedOptionIds != null && removedOptionIds.length > 0) {
Module12.pullAll(env3078[8][guildId2].responses, removedOptionIds);
}
if (selected) {
env3078[8][guildId2].responses.push(optionId);
} else {
Module12.pull(env3078[8][guildId2].responses, optionId);
}
if (c3078_9[guildId2] == null) {
c3078_9[guildId2] = {};
}
c3078_9[guildId2][optionId] = selected;
if (removedOptionIds != null) {
removedOptionIds.forEach((removedOptionId) => {
c3078_9[guildId2][removedOptionId] = false;
return false;
});
}
c3078_9[guildId2] = {
...c3078_9[guildId2]
};
r3 = true;
}
r19 = r3;
}
return r19;
},
GUILD_ONBOARDING_UPDATE_RESPONSES_SUCCESS: function handleUpdateResponsesSuccess({ guildId: guildId3, options, prompts_seen, options_seen }) {
let env14651;
const r16 = env14651 = {
$parent: env3078
};
env14651[0] = guildId3;
env14651[1] = options;
env14651[2] = void 0;
env14651[3] = void 0;
if (c3078_9[guildId3] != null) {
const r10 = {};
env14651[2] = r10;
Object.keys(c3078_9[guildId3]).forEach($mk75436(r16));
c3078_9[guildId3] = r10;
const responses = options.filter($mk75437(r16));
env14651[3] = responses;
Object.keys(r10).forEach($mk75438(r16));
const r31 = env3078[8];
r31[guildId3] = {
...r31[guildId3],
responses
};
}
const r35 = env3078[8][guildId3];
if (r35 == null) {
return false;
}
let env14652;
const prompts = r35.prompts;
const r37 = env14652 = {};
env14652[0] = prompts_seen;
env14652[1] = options_seen;
const prompts2 = prompts.map($mk75435(r37));
env3078[8][guildId3] = {
...r35,
prompts: prompts2,
onboardingPrompts: prompts2.filter((item) => item.inOnboarding),
onboardingPromptsSeen: prompts_seen,
onboardingResponsesSeen: options_seen
};
},
GUILD_ONBOARDING_PROMPTS_LOCAL_UPDATE: handleUpdate,
GUILD_SETTINGS_ONBOARDING_PROMPTS_SAVE_SUCCESS: handleUpdate,
GUILD_SETTINGS_DEFAULT_CHANNELS_SAVE_SUCCESS: function handleUpdateDefaultChannels({ guildId: guildId3, channelIds }) {
const r2 = env3078[8];
r2[guildId3] = {
...r2[guildId3],
defaultChannelIds: channelIds
};
},
GUILD_SETTINGS_ONBOARDING_CONNECTIONS_SAVE_SUCCESS: function handleUpdateConnections({ guildId: guildId3, connections }) {
if (env3078[8][guildId3] == null) {
return false;
}
const r10 = env3078[8];
r10[guildId3] = {
...r10[guildId3],
connections
};
},
GUILD_SETTINGS_ONBOARDING_SET_MODE: function handleSetMode({ guildId: guildId3, mode }) {
const r6 = env3078[8][guildId3];
if (r6 != null) {
r6.mode = mode;
}
}
});
export default r92;
@@ -0,0 +1,74 @@
// Metro module 5111 (f5112).
import { ME } from "../../Constants";
import Module589 from "../../_bundle/Module589";
import { isFavoritesGuildId } from "../favorites/FavoritesUtils";
import Dispatcher from "../../Dispatcher";
let c3076_3 = {
STARTED: "started",
READY: "ready",
COMPLETED: "completed",
NOT_APPLICABLE: "not_applicable"
};
let c3076_4 = {};
let c3076_5 = {};
class GuildOnboardingStore extends Module589.Store {
static displayName = "GuildOnboardingStore";
shouldShowOnboarding(a0) {
let r0 = a0 !== ME && !isFavoritesGuildId(a0);
if (r0) {
const r13 = c3076_4[a0];
r0 = !!(r13 != null && [c3076_3.STARTED, c3076_3.READY].includes(r13));
}
return r0;
}
getOnboardingStatus(a0) {
return c3076_4[a0];
}
resetOnboardingStatus(a0) {
c3076_4[a0] = c3076_3.STARTED;
c3076_5[a0] = "cover";
}
getCurrentOnboardingStep(a0) {
let r4 = c3076_5[a0];
if (r4 == null) {
r4 = "cover";
}
return r4;
}
}
const guildOnboardingStore = new GuildOnboardingStore(Dispatcher, {
LOGOUT: function handleReset() {
c3076_4 = {};
c3076_5 = {};
},
GUILD_DELETE: function handleDelete({ guild }) {
delete c3076_4[guild.id];
delete c3076_5[guild.id];
},
GUILD_ONBOARDING_START: function handleOnboardingStart(a0) {
c3076_4[a0.guildId] = c3076_3.STARTED;
},
GUILD_ONBOARDING_PROMPTS_FETCH_SUCCESS: function handlePromptsFetchSuccess({ guildId, enabled }) {
if (c3076_4[guildId] !== c3076_3.STARTED) {
return false;
}
c3076_4[guildId] = enabled ? c3076_3.READY : c3076_3.NOT_APPLICABLE;
},
GUILD_ONBOARDING_PROMPTS_FETCH_FAILURE: function handlePromptsFetchFailure(a0) {
c3076_4[a0.guildId] = c3076_3.NOT_APPLICABLE;
},
GUILD_ONBOARDING_COMPLETE: function handleCompleteOnboarding(a0) {
c3076_4[a0.guildId] = c3076_3.COMPLETED;
},
GUILD_ONBOARDING_SET_STEP: function handleOnboardingStep(a0) {
c3076_5[a0.guildId] = a0.step;
},
CONNECTION_OPEN: function handleResetOnboardingStep() {
c3076_5 = {};
}
});
export default guildOnboardingStore;
export { c3076_3 as GuildOnboardingStatus };
export function isOnboarding(a0) {
return a0 != null && [c3076_3.STARTED, c3076_3.READY].includes(a0);
}
@@ -0,0 +1,311 @@
// Metro module 5122 (f5123).
import ChannelStore from "../../stores/ChannelStore";
import ConnectedAccountsStore from "../../stores/ConnectedAccountsStore";
import GuildChannelStore, { GUILD_SELECTABLE_CHANNELS_KEY } from "../../stores/GuildChannelStore";
import GuildStore from "../../stores/GuildStore";
import PermissionStore from "../../stores/PermissionStore";
import { OnboardingConnectionType } from "./GuildOnboardingPromptsConstants";
import { Permissions, GuildFeatures } from "../../Constants";
import { GuildMemberFlags } from "../guild_member/GuildMemberConstants";
import { useStateFromStores } from "../../_bundle/Module589";
import { hasFlag } from "../../_bundle/Module1384";
import isRoleRequired from "../channel/isRoleRequired";
import { canChannelBeDefault } from "./DefaultChannelUtils";
import { canEveryoneRole } from "../../utils/PermissionUtils";
import { isNotNullish } from "../../utils/GlobalUtils";
import shallowEqual from "../../_bundle/shallowEqual";
import { isNullOrEmpty } from "../../utils/StringUtils";
import * as _AuthorizedAppsStore from "../oauth2/AuthorizedAppsStore";
function $mk75475($env) {
return (a0) => {
a0.options.forEach($mk104153($env));
};
}
function $mk75476($env) {
return (a0) => $env[0].add(a0);
}
function $mk75478($env) {
return (a0) => {
const r5 = $env[0];
return r5.has(a0.id) || a0.parent_id != null && r5.has(a0.parent_id);
};
}
function $mk75479($env) {
return (a0) => {
const r5 = $env[0];
return !(r5.has(a0.id) || a0.parent_id != null && r5.has(a0.parent_id));
};
}
function $mk104153($env) {
return (a0) => {
if (a0 != null) {
const channelIds = a0.channelIds;
if (channelIds != null) {
channelIds.forEach($mk114659($env));
}
}
};
}
function $mk114659($env) {
return (a0) => {
$env[0].add(a0);
};
}
let getFlattenedDefaultChannels, areStatesEqual, c3084_14;
let $mk75477 = function() {
return (a0) => {
const isCategory = a0.isCategory();
return (isCategory ? !isCategory : !a0.isThread()) && !isRoleRequired(a0);
};
};
let env3084 = {};
export function isChattableChannel(a0) {
return a0 != null && (!!canChannelBeDefault(a0.guild_id, a0.id) && (a0.isForumChannel() ? canEveryoneRole(Permissions.SEND_MESSAGES_IN_THREADS, a0) : canEveryoneRole(Permissions.SEND_MESSAGES, a0)));
}
getFlattenedDefaultChannels = function getFlattenedDefaultChannels(a0, a1, r9 = (a0) => a0, r7 = () => true) {
const r29 = GuildChannelStore.getChannels(a0)[GUILD_SELECTABLE_CHANNELS_KEY];
const r30 = [];
for (const item of r29) {
const channel = item.channel;
if (canChannelBeDefault(channel.guild_id, channel.id)) {
if (!(a1.includes(channel.id) && !channel.isCategory())) {
if (channel.isThread()) {
continue;
}
if (channel.parent_id == null) {
continue;
}
if (!a1.includes(channel.parent_id)) {
continue;
}
}
const r60 = r9(channel);
if (r7(r60)) {
r30.push(r60);
}
}
}
return r30;
};
areStatesEqual = function areStatesEqual(a0, a1) {
return a0[0].length === a1[0].length && a0[1].length === a1[1].length && (shallowEqual(a0[0], a1[0]) && shallowEqual(a0[1], a1[1]));
};
const date = new Date(1682488800000);
c3084_14 = date;
export { date as ONBOARDING_EPOCH };
export function useGuildOnboardingSettingsAvailable(c14662_0) {
return useStateFromStores([GuildStore, PermissionStore], () => {
const guild = GuildStore.getGuild(c14662_0);
let r14 = !!(guild == null ? void 0 : guild.features.has(GuildFeatures.COMMUNITY));
const r19 = PermissionStore.can(Permissions.MANAGE_GUILD, guild);
const r22 = PermissionStore.can(Permissions.MANAGE_ROLES, guild);
if (r14) {
r14 = r19;
}
if (r14) {
r14 = r22;
}
return r14;
});
}
export function isGuildOnboardingSettingsAvailable(a0) {
const guild = GuildStore.getGuild(a0);
let r13 = !!(guild == null ? void 0 : guild.features.has(GuildFeatures.COMMUNITY));
const r18 = PermissionStore.can(Permissions.MANAGE_GUILD, guild);
const r21 = PermissionStore.can(Permissions.MANAGE_ROLES, guild);
if (r13) {
r13 = r18;
}
if (r13) {
r13 = r21;
}
return r13;
}
export function isBlockedByOnboarding(a0, a1) {
if (a0 != null && a0.features.has(GuildFeatures.GUILD_ONBOARDING)) {
if (a1 != null && a1.joinedAt != null) {
if (new Date(a1.joinedAt) < c3084_14) {
return false;
}
let flags = a1.flags;
if (flags == null) {
flags = 0;
}
return hasFlag(flags, GuildMemberFlags.STARTED_ONBOARDING) && !hasFlag(flags, GuildMemberFlags.COMPLETED_ONBOARDING);
}
return false;
}
return false;
}
export function showRulesInOnboarding(a0, a1) {
const r2 = a0 != null && a0.features.has(GuildFeatures.MEMBER_VERIFICATION_MANUAL_APPROVAL) && a0.features.has(GuildFeatures.MEMBER_VERIFICATION_GATE_ENABLED);
return r2 ? !r2 : a1 != null;
}
export function getChannelCoverageForOnboarding(a0, a1, a2) {
let env14663;
const r15 = GuildChannelStore.getChannels(a0)[GUILD_SELECTABLE_CHANNELS_KEY].map((item) => item.channel);
const r16 = env14663 = {
$parent: env3084
};
env14663[0] = void 0;
env14663[0] = new Set();
a1.forEach($mk75475(r16));
a2.forEach($mk75476(r16));
const r29 = r15.filter($mk75477());
return [r29.filter($mk75478(r16)), r29.filter($mk75479(r16))];
}
export function useChannelCoverageForOnboarding(c14664_0, a1, a2) {
let env14665;
const r22 = useStateFromStores([GuildChannelStore], () => GuildChannelStore.getChannels(c14664_0))[GUILD_SELECTABLE_CHANNELS_KEY].map((item) => item.channel);
const r23 = env14665 = {
$parent: env3084
};
env14665[0] = void 0;
env14665[0] = new Set();
a1.forEach($mk75475(r23));
a2.forEach($mk75476(r23));
const r37 = r22.filter($mk75477());
return [r37.filter($mk75478(r23)), r37.filter($mk75479(r23))];
}
export function isChattableChannelId(a0) {
const channel = ChannelStore.getChannel(a0);
return channel != null && (!!canChannelBeDefault(channel.guild_id, channel.id) && (channel.isForumChannel() ? canEveryoneRole(Permissions.SEND_MESSAGES_IN_THREADS, channel) : canEveryoneRole(Permissions.SEND_MESSAGES, channel)));
}
export function useIsChattableChannel(c14666_0) {
return useStateFromStores([ChannelStore], () => {
const channel = ChannelStore.getChannel(c14666_0);
return isNotNullish(channel) && (channel != null && (!!canChannelBeDefault(channel.guild_id, channel.id) && (channel.isForumChannel() ? canEveryoneRole(Permissions.SEND_MESSAGES_IN_THREADS, channel) : canEveryoneRole(Permissions.SEND_MESSAGES, channel))));
});
}
export function getMinimumSetOfDefaultChannelIds(a0, a1, a2) {
let c14667_1, c14667_2;
let c14667_0 = a0;
let r7 = arguments[3];
if (r7 === void 0) {
r7 = () => true;
}
c14667_1 = r7;
c14667_2 = void 0;
const flattenedDefaultChannels = getFlattenedDefaultChannels(a0, a1, (a0) => a0.id, r7);
c14667_2 = flattenedDefaultChannels;
a2.forEach((item) => {
if (item.required) {
let r7 = item.options[0]?.channelIds;
if (r7 == null) {
r7 = [];
}
const r11 = item.options.reduce((acc, option) => {
if (option.channelIds == null) {
return [];
}
let r13 = acc;
const flattenedDefaultChannels = getFlattenedDefaultChannels(c14667_0, option.channelIds, (a0) => a0.id, (a0) => c14667_1(a0) && !c14667_2.includes(a0));
if (flattenedDefaultChannels.length < acc.length) {
r13 = flattenedDefaultChannels;
}
return r13;
}, getFlattenedDefaultChannels(c14667_0, r7, (a0) => a0.id));
c14667_2.push.apply(c14667_2, [...r11]);
}
});
return flattenedDefaultChannels;
}
export function getChattableDefaultChannels(a0, a1) {
const flattenedDefaultChannels = getFlattenedDefaultChannels(a0, a1);
const r25 = GuildChannelStore.getChannels(a0)[GUILD_SELECTABLE_CHANNELS_KEY];
const r26 = {};
for (const item of r25) {
r26[item.channel.id] = item;
}
return [(function filterChattableChannels(a0, c25355_0) {
return a0.filter((item) => {
const channel = c25355_0[item]?.channel;
return channel != null && (!!canChannelBeDefault(channel.guild_id, channel.id) && (channel.isForumChannel() ? canEveryoneRole(Permissions.SEND_MESSAGES_IN_THREADS, channel) : canEveryoneRole(Permissions.SEND_MESSAGES, channel)));
});
})(flattenedDefaultChannels.map((flattenedDefaultChannel) => flattenedDefaultChannel.id), r26), flattenedDefaultChannels];
}
export function useChattableDefaultChannels(a0, a1) {
return useStateFromStores([GuildChannelStore], () => {
const channels = GuildChannelStore.getChannels(a0);
const r28 = [];
const r29 = [];
const r5 = {};
for (const item of channels[GUILD_SELECTABLE_CHANNELS_KEY]) {
let r44 = canChannelBeDefault(item.channel.guild_id, item.channel.id);
if (r44) {
let r49 = a1.has(item.channel.id) && !item.channel.isCategory();
if (!r49) {
const isThread = item.channel.isThread();
r49 = (isThread ? !isThread : item.channel.parent_id != null) && a1.has(item.channel.parent_id);
}
r44 = r49;
}
if (r44) {
r5[item.channel.id] = item;
r28.push(item.channel);
if (isChattableChannel(item.channel)) {
r29.push(item.channel.id);
}
}
}
return [r29, r28];
}, [a0, a1], areStatesEqual);
}
export function getSelectedRoleIds(a0) {
return new Set(a0.map((item) => item.roleIds).flat().filter(isNotNullish));
}
export function getSelectedChannelIds(a0) {
return new Set(a0.map((item) => item.channelIds).flat().filter(isNotNullish));
}
export function getProviderConnectionState(a0) {
let c14669_0, c14669_1;
const r4 = a0.filter((item) => item.connection_type === OnboardingConnectionType.PROVIDER_CONNECTED_ACCOUNT && Boolean(item.provider_id));
const connected = [];
c14669_0 = connected;
const notConnected = [];
c14669_1 = notConnected;
r4.forEach((item) => {
L5: {
const provider_id = item.provider_id;
if (!isNullOrEmpty(provider_id)) {
const account = ConnectedAccountsStore.getAccount(null, provider_id);
if (account != null && !account.revoked) {
c14669_0.push(provider_id);
break L5;
}
c14669_1.push(provider_id);
}
}
});
return {
connected,
notConnected
};
}
export function getApplicationConnectionState(a0) {
let c14670_0, c14670_1, default2, FetchState;
const r8 = a0.filter((item) => item.connection_type === OnboardingConnectionType.APPLICATION && Boolean(item.application_id));
const connected = [];
c14670_0 = connected;
const notConnected = [];
c14670_1 = notConnected;
default2 = _AuthorizedAppsStore.default;
FetchState = _AuthorizedAppsStore.FetchState;
r8.forEach((item) => {
L5: {
const application_id = item.application_id;
if (!isNullOrEmpty(application_id)) {
const newestTokenForApplication = default2.getNewestTokenForApplication(application_id);
if (default2.getFetchStateForApplication(application_id) === FetchState.FETCHED && newestTokenForApplication != null) {
c14670_0.push(application_id);
break L5;
}
c14670_1.push(application_id);
}
}
});
return {
connected,
notConnected
};
}
@@ -0,0 +1,15 @@
// Metro module 5118 (f5119).
export default function replaceFlagIconAndFlagColor(a0, a1, c14655_1) {
let c14655_2;
let c14655_0 = a0;
a0.assets[0].p = a1;
const r10 = a0.layers.findIndex((layer) => layer.nm === "flag");
c14655_2 = r10;
a0.layers[r10].shapes[0].it.forEach((a0, index) => {
const layers = c14655_0.layers;
if (layers[c14655_2].shapes[0].it[index].ty === "gr" && c14655_0.layers[c14655_2].shapes[0].it[index].it.findIndex((item) => item.ty === "fl") >= 0) {
c14655_0.layers[c14655_2].shapes[0].it[index].it[1].c.k = [...c14655_1.map((item) => item / 256), 1];
}
});
return a0;
};
@@ -0,0 +1,143 @@
// Metro module 5110 (f5111).
import { NativeModules } from "react-native";
import SelectedGuildStore from "../../stores/SelectedGuildStore";
import GuildOnboardingStore from "./GuildOnboardingStore";
import { GUILD_ONBOARDING_MODAL_KEY } from "./native/GuildOnboardingConstants";
import { Routes, GuildFeatures } from "../../Constants";
import * as _Module5113 from "../../_bundle/Module5113";
import ActionSheetActionCreators from "../action_sheet/native/ActionSheetActionCreators";
import ModalActionCreators from "../../actions/ModalActionCreators";
import { waitForGuild } from "../../actions/GuildActionCreators";
import { maybeFetchOnboardingPrompts } from "./GuildOnboardingPromptsActionCreators";
import AvatarUtils from "../../utils/AvatarUtils";
import getDevicePixelRatio_native from "../../utils/getDevicePixelRatio.native";
import LandingAssetUtils from "./LandingAssetUtils";
import { waitForOnboardingCompletion } from "./doGuildOnboardingHelpers";
import GuildOnboardingActionCreators from "./GuildOnboardingActionCreators";
import { transitionTo } from "../routing/router_utils";
function $mk114654($env) {
return function fetchLandingAsset() {
return $env[14].apply(this, arguments);
};
}
let openAndWaitForOnboarding, c3075_11, c3075_12;
let env3075 = {};
const getBaseAnimationData = function getBaseAnimationData() {
return JSON.parse(JSON.stringify(_Module5113));
};
env3075[14] = function _fetchLandingAsset() {
const r8 = async (c25348_0) => {
let r105, r113;
let c25348_3 = 0;
let c29461_0, c29461_1, c29461_2;
try {
c29461_0 = void 0;
c29461_1 = void 0;
c29461_2 = void 0;
const guildIconSource = AvatarUtils.getGuildIconSource({
id: c25348_0.id,
icon: c25348_0.icon,
canAnimate: false,
size: 96 / getDevicePixelRatio_native()
});
c29461_0 = guildIconSource;
c25348_3 = 1;
c29461_1 = await NativeModules.ImageManager.getAvatarBase64(guildIconSource);
c29461_2 = await NativeModules.ImageManager.getDominantColors(c29461_0);
r105 = LandingAssetUtils((0, getBaseAnimationData)(), `data:image/png;base64,${c29461_1}`, c29461_2[0]);
c25348_3 = 0;
} catch ($e) {
let r30 = $e;
if (c25348_3 !== 0) {
while (true) {
try {
c25348_3 = 0;
r113 = (0, getBaseAnimationData)();
} catch ($e) {
r30 = $e;
if (c25348_3 === 0) {
break;
}
continue;
}
return r113;
}
}
throw r30;
}
return r105;
};
env3075[14] = r8;
return r8.apply(this, arguments);
};
openAndWaitForOnboarding = function openAndWaitForOnboarding(a0) {
const guildId = a0;
waitForOnboardingCompletion(a0).then(() => {
const r4 = c3075_11[a0];
if (r4 != null) {
r4();
}
delete c3075_11[a0];
GuildOnboardingActionCreators.finishOnboarding(a0);
});
return new Promise((resolve) => {
if (c3075_11[guildId] == null) {
c3075_11[guildId] = resolve;
}
ModalActionCreators.pushLazy(import("./native/GuildOnboardingModal"), {
guildId,
backShouldLeaveGuild: true,
onFinish: () => {},
landingAnimation: c3075_12[guildId],
isFirstOpen: true
}, GUILD_ONBOARDING_MODAL_KEY).then(() => {
if (SelectedGuildStore.getGuildId() !== guildId) {
transitionTo(Routes.CHANNEL(guildId));
}
});
});
};
c3075_11 = {};
c3075_12 = {};
export default async function doGuildOnboarding(c25347_0) {
let c25347_1, c25347_2, c25347_3, c25347_4;
L15: {
L22: {
let env29460;
const r9 = env3075;
c25347_3 = r9;
const r32 = env29460 = {
$parent: r9
};
c25347_4 = r32;
env29460[0] = void 0;
env29460[0] = c25347_0.guildId;
env29460[1] = void 0;
await void 0;
ActionSheetActionCreators.hideActionSheet();
ModalActionCreators.popAll();
env29460[1] = await waitForGuild(env29460[0]);
if (env29460[1].features.has(GuildFeatures.GUILD_ONBOARDING) && env29460[1].features.has(GuildFeatures.COMMUNITY)) {
await maybeFetchOnboardingPrompts(env29460[0]);
if (!GuildOnboardingStore.shouldShowOnboarding(env29460[0])) {
break L15;
}
c25347_2 = c3075_12;
c25347_1 = env29460[0];
const r128 = env29460[1];
c25347_2[c25347_1] = await $mk114654(env3075)(r128);
await (0, openAndWaitForOnboarding)(env29460[1].id);
break L22;
}
break L15;
}
return void 0;
}
};
export { openAndWaitForOnboarding };
export function discardOnboardingPromise(a0) {
delete c3075_11[a0];
}
export function isOnboardingActiveForGuild(a0) {
return c3075_11[a0] != null;
}
@@ -0,0 +1,23 @@
// Metro module 5119 (f5120).
import GuildMemberStore from "../../stores/GuildMemberStore";
import { GuildMemberFlags } from "../guild_member/GuildMemberConstants";
import * as _Module1384 from "../../_bundle/Module1384";
import GuildOnboardingActionCreators from "./GuildOnboardingActionCreators";
export function waitForOnboardingCompletion(c14656_0) {
return new Promise((c25352_0) => {
GuildMemberStore.addConditionalChangeListener(() => {
let r15 = GuildMemberStore.getSelfMember(c14656_0)?.flags;
if (r15 == null) {
r15 = 0;
}
const hasFlag = _Module1384.hasFlag(r15, GuildMemberFlags.COMPLETED_ONBOARDING);
let r19 = !hasFlag;
if (hasFlag) {
GuildOnboardingActionCreators.finishOnboarding(c14656_0);
c25352_0();
r19 = false;
}
return r19;
});
});
}
@@ -0,0 +1,11 @@
// Metro module 5532 (f5533).
import { PlatformTypes } from "../../Constants";
import { intl, t } from "../../intl/index.native";
export default function getDefaultProviderDescription(a0) {
if (PlatformTypes.TWITCH === a0) {
return intl.string(t["D/wRWb"]);
}
if (PlatformTypes.YOUTUBE === a0) {
return intl.string(t.TC0upt);
}
};
@@ -0,0 +1,50 @@
// Metro module 5514 (f5515).
import { useEffect, useCallback } from "react";
import ApplicationStore from "../../applications/ApplicationStore";
import { AnalyticEvents } from "../../../Constants";
import { useStateFromStores } from "../../../_bundle/Module589";
import useAnalyticsLocations from "../../app_analytics/useAnalyticsLocations";
import { fetchApplication } from "../../applications/ApplicationActionCreators";
import { intl, t } from "../../../intl/index.native";
import useStartAuthorize from "../../application_account_linking/native/useStartAuthorize";
import GameIcon, { GameIconSizes } from "../../game_detection/native/GameIcon";
import AnalyticsUtils from "../../../utils/AnalyticsUtils";
import { collectGuildAnalyticsMetadata } from "../../app_analytics/AppAnalyticsUtils";
import ConnectionCardView from "./ConnectionCardView";
export default function ApplicationConnectionCard(props) {
let analyticsLocations, startAuthorization;
const { connection, guildId, location: location2 } = props;
analyticsLocations = void 0;
startAuthorization = void 0;
const stateFromStores = useStateFromStores([ApplicationStore], () => connection.application_id != null ? ApplicationStore.getApplication(connection.application_id) : null, [connection.application_id]);
analyticsLocations = useAnalyticsLocations(location2).analyticsLocations;
useEffect(() => {
if (!(stateFromStores != null || connection.application_id == null || ApplicationStore.isFetchingApplication(connection.application_id) || ApplicationStore.didFetchingApplicationFail(connection.application_id))) {
fetchApplication(connection.application_id).catch(() => {});
}
}, [stateFromStores, connection.application_id]);
let displayName = stateFromStores?.name;
if (displayName == null) {
displayName = intl.string(t.cgPbaZ);
}
const startAuthorize = useStartAuthorize(stateFromStores);
const { hasAlreadyLinked, canStartAuthorization } = startAuthorize;
startAuthorization = startAuthorize.startAuthorization;
return <ConnectionCardView displayName={displayName} description={connection.description} icon={<GameIcon game={stateFromStores} size={GameIconSizes.SMALL} />} isLoading={!startAuthorize.fetched} isConnected={hasAlreadyLinked} canConnect={canStartAuthorization} onConnect={useCallback(() => {
const GUILD_ONBOARDING_CONNECTION_CLICKED = AnalyticEvents.GUILD_ONBOARDING_CONNECTION_CLICKED;
const r14 = {
...collectGuildAnalyticsMetadata(guildId),
connection_type: "application"
};
let application_id = connection.application_id;
if (application_id == null) {
application_id = void 0;
}
r14.application_id = application_id;
r14.location = location2;
AnalyticsUtils.track(GUILD_ONBOARDING_CONNECTION_CLICKED, r14);
startAuthorization({
analyticsLocations
});
}, [startAuthorization, guildId, connection.application_id, location2, analyticsLocations])} />;
};
@@ -0,0 +1,68 @@
// Metro module 9992 (f9993).
import { useState, useEffect } from "react";
import { View } from "react-native";
import GuildStore from "../../../stores/GuildStore";
import { GuildOnboardingTab } from "../GuildOnboardingPromptsConstants";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import Module712 from "../../../_bundle/Module712";
import { useStateFromStores } from "../../../_bundle/defaultAreStatesEqual";
import useGuildOnboardingAvailable from "../useGuildOnboardingAvailable";
import { useSegmentedControlState } from "../../../design/components/SegmentedControl/native/SegmentedControlState.native";
import { intl, t } from "../../../intl/index.native";
import { SegmentedControl } from "../../../design/components/SegmentedControl/native/SegmentedControl.native";
import CustomizeCommunity from "./CustomizeCommunity";
import ChannelBrowser from "../../opt_in_channels/native/ChannelBrowser";
import ModalStackNavigator from "../../main_tabs_v2/native/utils/ModalStackNavigator";
let useStyles;
const ChannelsAndRolesScreen = function ChannelsAndRolesScreen(props) {
let c17594_1, state, setState, segmentedControlState;
const guildId = props.guildId;
let defaultTab2 = props.defaultTab;
c17594_1 = void 0;
state = void 0;
setState = void 0;
segmentedControlState = void 0;
const styles = useStyles();
const guildOnboardingAvailable = useGuildOnboardingAvailable(useStateFromStores([GuildStore], () => GuildStore.getGuild(guildId)));
c17594_1 = guildOnboardingAvailable;
if (defaultTab2 == null) {
defaultTab2 = guildOnboardingAvailable ? GuildOnboardingTab.CUSTOMIZE : GuildOnboardingTab.BROWSE;
}
[state, setState] = useState(defaultTab2);
segmentedControlState = useSegmentedControlState({
pageWidth: 0,
defaultIndex: state,
onSetActiveIndex: setState,
items: [intl.string(t.F1VixV), intl.string(t.MWmtj8)].map((item) => ({
id: item,
label: item,
page: null
}))
});
useEffect(() => {
if (!(c17594_1 || state !== GuildOnboardingTab.CUSTOMIZE)) {
setState(GuildOnboardingTab.BROWSE);
segmentedControlState.setActiveIndex(GuildOnboardingTab.BROWSE, false);
}
}, [guildOnboardingAvailable, state, segmentedControlState]);
return <View style={styles.screen}>
{guildOnboardingAvailable ? <View style={styles.tabBar}>
<SegmentedControl state={segmentedControlState} />
</View> : null}
{state === GuildOnboardingTab.CUSTOMIZE ? <CustomizeCommunity setTab={setState} guildId={guildId} /> : <ChannelBrowser guildId={guildId} />}
</View>;
};
useStyles = createStyles({
screen: {
flex: 1,
backgroundColor: Module712.colors.BACKGROUND_BASE_LOW
},
tabBar: {
paddingHorizontal: Module712.space.PX_12,
paddingTop: Module712.space.PX_16
}
});
export default function ChannelsAndRolesModal(props) {
const { guildId: guildId2, defaultTab } = props;
return <ModalStackNavigator screenKey="channelAndRolesModal" title={useGuildOnboardingAvailable(useStateFromStores([GuildStore], () => GuildStore.getGuild(guildId2))) ? intl.string(t.h9mGOP) : intl.string(t.et6wav)} render={() => <ChannelsAndRolesScreen guildId={guildId2} defaultTab={defaultTab} />} />;
};
@@ -0,0 +1,16 @@
// Metro module 5513 (f5514).
import { OnboardingConnectionType } from "../GuildOnboardingPromptsConstants";
import ApplicationConnectionCard from "./ApplicationConnectionCard";
import ProviderConnectionCard from "./ProviderConnectionCard";
export default function ConnectionCard(props) {
const { connection, guildId, location: location2 } = props;
const connection_type = connection.connection_type;
if (OnboardingConnectionType.APPLICATION === connection_type) {
return <ApplicationConnectionCard connection={connection} guildId={guildId} location={location2} />;
}
if (OnboardingConnectionType.PROVIDER_CONNECTED_ACCOUNT === connection_type) {
return <ProviderConnectionCard connection={connection} guildId={guildId} location={location2} />;
}
connection.connection_type;
return null;
};
@@ -0,0 +1,61 @@
// Metro module 5530 (f5531).
import { ActivityIndicator, 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 { intl, t } from "../../../intl/index.native";
import { CircleCheckIcon } from "../../../design/components/Icon/native/redesign/generated/CircleCheckIcon";
import { Button } from "../../../design/components/Button/native/Button.native";
const useStyles = createStyles({
card: {
backgroundColor: Module712.colors.BACKGROUND_SURFACE_HIGH,
borderRadius: Module712.radii.md,
borderWidth: 1,
borderColor: Module712.colors.BORDER_SUBTLE,
padding: Module712.space.PX_16,
marginBottom: Module712.space.PX_12,
flexDirection: "row",
alignItems: "center",
justifyContent: "space-between"
},
leftContent: {
flexDirection: "row",
alignItems: "center",
flex: 1,
marginRight: Module712.space.PX_12
},
icon: {
width: 32,
height: 32,
marginRight: Module712.space.PX_12,
justifyContent: "center",
alignItems: "center"
},
textContent: {
flex: 1
},
connectedStatus: {
flexDirection: "row",
alignItems: "center",
gap: Module712.space.PX_8
}
});
export default function ConnectionCardView(props) {
const { displayName, description, icon, isLoading, isConnected, canConnect, onConnect } = props;
const styles = useStyles();
return <View style={styles.card}>
<View style={styles.leftContent}>
<View style={styles.icon}>{icon}</View>
<View style={styles.textContent}>
<Text variant="text-md/medium" color="text-strong">{displayName}</Text>
{description != null && description.length > 0 && <Text variant="text-sm/normal" color="text-subtle">{description}</Text>}
</View>
</View>
{isLoading ? <ActivityIndicator size="small" /> : isConnected ? <View style={styles.connectedStatus}>
<Text variant="text-sm/medium" color="text-feedback-positive">
{intl.string(t["LV+CXH"])}
</Text>
<CircleCheckIcon size="sm" color="status-positive" />
</View> : <Button variant="primary" size="sm" onPress={onConnect} text={intl.string(t.S0W8Z5)} disabled={!canConnect} />}
</View>;
};
@@ -0,0 +1,446 @@
// Metro module 9994 (f9995).
import { useMemo, useCallback, useEffect } from "react";
import { Image as Image2, ScrollView, View } from "react-native";
import EmojiStore from "../../emojis/EmojiStore";
import GuildStore from "../../../stores/GuildStore";
import ReadStateStore from "../../../stores/ReadStateStore";
import SelectedGuildStore from "../../../stores/SelectedGuildStore";
import GuildOnboardingPromptsStore from "../GuildOnboardingPromptsStore";
import { GuildOnboardingTab, OnboardingPromptType } from "../GuildOnboardingPromptsConstants";
import { Fonts } from "../../../Constants";
import { EMOJI_URL_BASE_SIZE } from "../../emojis/EmojiConstants";
import { ReadStateTypes } from "../../read_states/ReadStateConstants";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import Module712 from "../../../_bundle/Module712";
import TextStyles from "../../rebrand/native/TextStyles";
import * as _themes from "../../../design/utils/shared/themes";
import useTheme from "../../../hooks/useTheme";
import { useStateFromStores, useStateFromStoresArray } from "../../../_bundle/Module589";
import Module9995 from "../../../_bundle/Module9995";
import Module9996 from "../../../_bundle/Module9996";
import { LegacyText, TextBadge, BadgeColors } from "../../../design/void/native";
import { intl, t } from "../../../intl/index.native";
import { Text, Heading } from "../../../design/components/Text/native/Text";
import { getSelectedRoleIds, getSelectedChannelIds } from "../GuildOnboardingUtils";
import usePromptHelpText from "../usePromptHelpText";
import ConnectionCard from "./ConnectionCard";
import AnalyticsLocation from "../../app_analytics/AnalyticsLocation";
import useSafeAreaInsets_native from "../../safe_area/useSafeAreaInsets.native";
import useSortedOnboardingPrompts from "../useSortedOnboardingPrompts";
import { fetchOnboardingPrompts } from "../GuildOnboardingPromptsActionCreators";
import { ackGuildFeature } from "../../../actions/ReadStateActionCreators";
import GuildOnboardingActionCreators from "../GuildOnboardingActionCreators";
import Emoji from "../../emojis/native/Emoji";
import AvatarUtils from "../../../utils/AvatarUtils";
import { isNotNullish } from "../../../utils/GlobalUtils";
import { useToken } from "../../../design/tokens/native/useToken";
import * as _ReanimatedRexport from "../../reanimated/ReanimatedRexport";
import ReanimatedRexport, { useAnimatedStyle } from "../../reanimated/ReanimatedRexport";
import * as _timing from "../../../design/animation/reanimated/timing/timing";
import useBatchUpdateSelectOption from "../useBatchUpdateSelectOption";
import ActionSheetActionCreators from "../../action_sheet/native/ActionSheetActionCreators";
import { PressableHighlight } from "../../../design/void/Pressables/native/Pressables";
import Module5505 from "../../../_bundle/Module5505";
import GuildOnboardingPromptOptionButton from "./GuildOnboardingPromptOptionButton";
let useStyles, PromptTitle, PromptHelpText, ConnectionsPrompt, DropdownOption, __initData, DropdownPrompt, __initData2, MultipleChoicePrompt;
const EmptyCustomizeCommunity = function EmptyCustomizeCommunity(props) {
const setTab = props.setTab;
const styles = useStyles();
const isThemeDark = _themes.isThemeDark(useTheme());
const stateFromStores = useStateFromStores([SelectedGuildStore], () => SelectedGuildStore.getGuildId());
return <View style={styles.emptyContainer}>
<Image2 style={styles.emptyContainerImage} source={isThemeDark ? Module9995 : Module9996} />
<LegacyText style={styles.emptyContainerHeader}>
{intl.string(t.leKHQz)}
</LegacyText>
<Text variant="text-sm/medium" color="text-subtle">
{intl.format(t["jH+ktB"], {
onBrowseChannels: function onBrowseChannels() {
if (stateFromStores != null) {
setTab(GuildOnboardingTab.BROWSE);
}
}
})}
</Text>
</View>;
};
PromptTitle = function PromptTitle(props) {
const item = props.item;
return <View style={useStyles().titleContainer}>
<Heading variant="text-md/semibold" color="mobile-text-heading-primary">
{item.title}
{item.required ? <Text variant="text-md/bold" color="text-feedback-critical">
{" "}
*
</Text> : null}
</Heading>
</View>;
};
PromptHelpText = function PromptHelpText(props) {
let c17598_2;
const { guildId, prompt: prompt3, selectedOptionIds } = props;
c17598_2 = void 0;
const styles = useStyles();
const stateFromStores3 = useStateFromStores([GuildStore], () => GuildStore.getGuild(guildId));
const r1 = prompt3 == null;
let r14 = void 0;
if (!r1) {
const options = prompt3.options;
r14 = options == null ? void 0 : options.filter((option) => selectedOptionIds.includes(option.id));
}
c17598_2 = r14;
const promptHelpText = usePromptHelpText({
guild: stateFromStores3,
prompt: prompt3,
selectedRoleIds: useMemo(() => c17598_2 != null ? getSelectedRoleIds(c17598_2) : new Set(), [r14]),
selectedChannelIds: useMemo(() => c17598_2 != null ? getSelectedChannelIds(c17598_2) : new Set(), [r14]),
itemHook: function itemHook(a0, a1) {
return <Text key={a1} variant="text-xs/medium" color="mobile-text-heading-primary">
{a0}
</Text>;
}
});
const { helpText, helpTextAdditional } = promptHelpText;
return helpText === "" ? helpTextAdditional !== "" ? <Text style={styles.helpText} variant="text-xs/medium" color="text-default">
{helpText}
{" "}
{helpTextAdditional}
</Text> : null : <Text style={styles.helpText} variant="text-xs/medium" color="text-default">
{helpText}
{" "}
{helpTextAdditional}
</Text>;
};
ConnectionsPrompt = function ConnectionsPrompt(props) {
const guildId2 = props.guildId;
const styles = useStyles();
const stateFromStores3 = useStateFromStores([GuildOnboardingPromptsStore], () => GuildOnboardingPromptsStore.getConnections(guildId2));
return stateFromStores3.length !== 0 ? <View style={styles.connectionsPromptContainer}>
<Text style={styles.connectionsTitle} variant="text-md/semibold" color="mobile-text-heading-primary">
{intl.string(t.eDVMrA)}
</Text>
<Text variant="text-xs/medium" color="text-muted">
{intl.string(t.BozOXu)}
</Text>
<View style={styles.connectionsContainer}>
{stateFromStores3.map((item, index) => <ConnectionCard key={index} connection={item} guildId={guildId2} location={AnalyticsLocation.CHANNELS_AND_ROLES} />)}
</View>
</View> : null;
};
DropdownOption = function DropdownOption(props) {
const option = props.option;
const styles = useStyles();
const stateFromStores3 = useStateFromStores([EmojiStore], () => option.emoji?.id != null ? EmojiStore.getUsableCustomEmojiById(option.emoji?.id) : null);
let r27 = option.emoji?.id != null || option.emoji?.name != null;
if (r27) {
const src = stateFromStores3 != null ? AvatarUtils.getEmojiURL({
id: stateFromStores3.id,
animated: stateFromStores3.animated,
size: EMOJI_URL_BASE_SIZE
}) : void 0;
let name = option.emoji?.name;
if (name == null) {
name = "";
}
r27 = <View style={styles.emojiContainer}>
<Emoji textEmojiStyle={styles.optionTextEmoji} fastImageStyle={styles.optionImageEmoji} src={src} name={name} />
</View>;
}
return <View style={styles.dropdownPill}>
{r27}
<Text variant="text-md/semibold">{option.title}</Text>
</View>;
};
DropdownPrompt = function DropdownPrompt(props) {
let token, handleSelectOption;
const { guildId: guildId3, prompt } = props;
token = void 0;
handleSelectOption = void 0;
const styles = useStyles();
const isNew = prompt.isNew;
const stateFromStoresArray = useStateFromStoresArray([GuildOnboardingPromptsStore], () => GuildOnboardingPromptsStore.getOnboardingResponsesForPrompt(guildId3, prompt.id));
const r16 = stateFromStoresArray.map((c26588_0) => prompt.options.find((option) => option.id === c26588_0)).filter(isNotNullish);
token = useToken(Module712.colors.BACKGROUND_BRAND);
const c = function c() {
const concat = HermesInternal.concat;
return {
borderColor: _ReanimatedRexport.withSequence(_timing.withTiming(isNew ? concat.call("", token, "FF") : concat.call("", token, "00"), {
duration: 1,
easing: _ReanimatedRexport.Easing.in(_ReanimatedRexport.Easing.ease)
}), _ReanimatedRexport.withDelay(500, _timing.withTiming(`${token}00`, {
duration: 300,
easing: _ReanimatedRexport.Easing.out(_ReanimatedRexport.Easing.ease)
})))
};
};
c.__closure = {
isNew,
brandColor: token,
withSequence: _ReanimatedRexport.withSequence,
withTiming: _timing.withTiming,
Easing: _ReanimatedRexport.Easing,
withDelay: _ReanimatedRexport.withDelay
};
c.__workletHash = 16609373875235;
c.__initData = __initData;
const animatedStyle = useAnimatedStyle(c);
handleSelectOption = useBatchUpdateSelectOption(guildId3).handleSelectOption;
const callback = useCallback(() => {
ActionSheetActionCreators.openLazy(import("./DropdownOptionsActionSheet"), "DropdownOptions", {
guildId: guildId3,
promptId: prompt.id,
onSelect: function onSelect(a0, a1) {
let r5 = a1;
if (!((a1 ? !a1 : prompt.required) && stateFromStoresArray.length === 1)) {
if (a1 == null) {
r5 = false;
}
handleSelectOption(prompt, a0, r5);
}
},
canBeNew: !prompt.isNew,
returnToCustomize: true
});
}, [guildId3, prompt, handleSelectOption, stateFromStoresArray.length]);
return <ReanimatedRexport.View style={[styles.promptContainer, animatedStyle]}>
{prompt.isNew && <TextBadge color={BadgeColors.BRAND} text={intl.string(t.y2b7CA)} style={styles.badge} textStyle={styles.badgeText} />}
<PromptTitle item={prompt} />
<PressableHighlight style={styles.dropdownContainer} onPress={callback}>
{r16.length === 0 && <Text style={styles.emptyDropdownText} variant="text-sm/normal" color="text-muted">
{intl.string(t.GmSvdA)}
</Text>}
{r16.map((item) => <DropdownOption key={item.id} option={item} />)}
<View style={styles.dropdownIconContainer}>
<Image2 style={styles.dropdownIcon} source={Module5505} />
</View>
</PressableHighlight>
<PromptHelpText guildId={guildId3} prompt={prompt} selectedOptionIds={stateFromStoresArray} />
</ReanimatedRexport.View>;
};
MultipleChoicePrompt = function MultipleChoicePrompt(props) {
let handleSelectOption2, token2;
const { guildId: guildId4, prompt: prompt2 } = props;
handleSelectOption2 = void 0;
token2 = void 0;
const styles = useStyles();
const isNew2 = prompt2.isNew;
const stateFromStoresArray2 = useStateFromStoresArray([GuildOnboardingPromptsStore], () => GuildOnboardingPromptsStore.getOnboardingResponsesForPrompt(guildId4, prompt2.id));
handleSelectOption2 = useBatchUpdateSelectOption(guildId4).handleSelectOption;
token2 = useToken(Module712.colors.BACKGROUND_BRAND);
const r38 = function() {
const concat = HermesInternal.concat;
return {
borderColor: _ReanimatedRexport.withSequence(_timing.withTiming(isNew2 ? concat.call("", token2, "FF") : concat.call("", token2, "00"), {
duration: 1,
easing: _ReanimatedRexport.Easing.in(_ReanimatedRexport.Easing.ease)
}), _ReanimatedRexport.withDelay(500, _timing.withTiming(`${token2}00`, {
duration: 300,
easing: _ReanimatedRexport.Easing.out(_ReanimatedRexport.Easing.ease)
})))
};
};
r38.__closure = {
isNew: isNew2,
brandColor: token2,
withSequence: _ReanimatedRexport.withSequence,
withTiming: _timing.withTiming,
Easing: _ReanimatedRexport.Easing,
withDelay: _ReanimatedRexport.withDelay
};
r38.__workletHash = 12802766002208;
r38.__initData = __initData2;
return <ReanimatedRexport.View style={[styles.promptContainer, useAnimatedStyle(r38)]}>
{prompt2.isNew && <TextBadge color={BadgeColors.BRAND} text={intl.string(t.y2b7CA)} style={styles.badge} textStyle={styles.badgeText} />}
<PromptTitle item={prompt2} />
{prompt2.options.map((a0) => {
return <GuildOnboardingPromptOptionButton key={a0.id} guildId={guildId4} option={a0} selected={stateFromStoresArray2.includes(a0.id)} onSelect={(event) => {
let r5 = event;
if (!((event ? !event : prompt2.required) && stateFromStoresArray2.length === 1)) {
if (event == null) {
r5 = false;
}
handleSelectOption2(prompt2, a0, r5);
}
}} suppressMemberCount canBeNew={!prompt2.isNew} />;
})}
<PromptHelpText guildId={guildId4} prompt={prompt2} selectedOptionIds={stateFromStoresArray2} />
</ReanimatedRexport.View>;
};
useStyles = createStyles({
container: {
paddingHorizontal: Module712.space.PX_16
},
sheetTitle: {
marginTop: Module712.space.PX_16
},
promptContainer: {
position: "relative",
backgroundColor: Module712.colors.BACKGROUND_SURFACE_HIGH,
marginTop: Module712.space.PX_12,
padding: Module712.space.PX_12,
borderRadius: Module712.radii.md,
borderWidth: 2,
borderStyle: "solid"
},
titleContainer: {
flexDirection: "row",
alignItems: "center",
marginBottom: Module712.space.PX_12
},
badge: {
position: "absolute",
top: -6,
right: -6
},
badgeText: {
fontWeight: "bold"
},
dropdownContainer: {
borderRadius: Module712.radii.lg,
backgroundColor: Module712.colors.BACKGROUND_BASE_LOWEST,
padding: Module712.space.PX_8,
paddingRight: Module712.space.PX_32,
minHeight: 48,
marginBottom: Module712.space.PX_12,
display: "flex",
flexDirection: "row",
flexWrap: "wrap",
alignItems: "center",
position: "relative"
},
emptyDropdownText: {
marginVertical: Module712.space.PX_12,
marginLeft: Module712.space.PX_4
},
dropdownPill: {
borderRadius: Module712.radii.sm,
backgroundColor: Module712.colors.BACKGROUND_BASE_LOW,
padding: 6,
marginRight: Module712.space.PX_8,
marginTop: Module712.space.PX_8,
display: "flex",
flexDirection: "row",
alignItems: "center"
},
emojiContainer: {
display: "flex",
alignItems: "center"
},
dropdownIconContainer: {
position: "absolute",
right: Module712.space.PX_4,
top: Module712.space.PX_12
},
dropdownIcon: {
height: 32,
width: 32
},
optionTextEmoji: {
fontSize: 18,
lineHeight: 22,
marginRight: 6
},
optionImageEmoji: {
height: 22,
width: 22,
marginRight: 6
},
helpText: {
marginTop: Module712.space.PX_4
},
sectionSeparator: {
marginTop: Module712.space.PX_24,
marginBottom: Module712.space.PX_16,
height: 1,
backgroundColor: Module712.colors.BORDER_SUBTLE
},
emptyContainer: {
height: 400,
display: "flex",
alignItems: "center",
justifyContent: "center"
},
emptyContainerImage: {
width: 120,
height: 80,
marginBottom: Module712.space.PX_16
},
emptyContainerHeader: {
...TextStyles(Fonts.DISPLAY_SEMIBOLD, Module712.colors.MOBILE_TEXT_HEADING_PRIMARY, 18),
marginBottom: Module712.space.PX_4
},
connectionsContainer: {
marginTop: Module712.space.PX_12
},
connectionsPromptContainer: {
marginTop: Module712.space.PX_12
},
connectionsTitle: {
marginBottom: Module712.space.PX_4
}
});
__initData = {
code: "function CustomizeCommunityTsx1(){const{isNew,brandColor,withSequence,withTiming,Easing,withDelay}=this.__closure;const rawBorderColor=isNew?brandColor+\"FF\":brandColor+\"00\";const borderColor=withSequence(withTiming(rawBorderColor,{duration:1,easing:Easing.in(Easing.ease)}),withDelay(500,withTiming(brandColor+\"00\",{duration:300,easing:Easing.out(Easing.ease)})));return{borderColor:borderColor};}"
};
__initData2 = {
code: "function CustomizeCommunityTsx2(){const{isNew,brandColor,withSequence,withTiming,Easing,withDelay}=this.__closure;const rawBorderColor=isNew?brandColor+\"FF\":brandColor+\"00\";const borderColor=withSequence(withTiming(rawBorderColor,{duration:1,easing:Easing.in(Easing.ease)}),withDelay(500,withTiming(brandColor+\"00\",{duration:300,easing:Easing.out(Easing.ease)})));return{borderColor:borderColor};}"
};
export default function CustomizeCommunity(props) {
const { guildId: guildId5, setTab: setTab2 } = props;
const styles = useStyles();
const bottom = useSafeAreaInsets_native().bottom;
const stateFromStores2 = useStateFromStores([ReadStateStore], () => ReadStateStore.hasUnread(guildId5, ReadStateTypes.GUILD_ONBOARDING_QUESTION));
const stateFromStores3 = useStateFromStores([GuildStore], () => GuildStore.getGuild(guildId5)?.latestOnboardingQuestionId);
const sortedOnboardingPrompts = useSortedOnboardingPrompts(guildId5);
const { onboardingPromptsRaw, newOnboardingPrompts, onboardingPromptsWithNewAnswers, newAnswersCount, onboardingPrompts } = sortedOnboardingPrompts;
useEffect(() => {
if (guildId5 != null && (GuildOnboardingPromptsStore.shouldFetchPrompts(guildId5) || stateFromStores2)) {
fetchOnboardingPrompts(guildId5);
}
}, [guildId5, stateFromStores2, stateFromStores3]);
useEffect(() => {
if (guildId5 != null) {
return () => {
ackGuildFeature(guildId5, ReadStateTypes.GUILD_ONBOARDING_QUESTION, GuildOnboardingPromptsStore.ackIdForGuild(guildId5));
GuildOnboardingActionCreators.updateOnboardingResponses(guildId5);
};
}
}, [guildId5]);
const callback = useCallback((a0) => {
const type = a0.type;
if (OnboardingPromptType.MULTIPLE_CHOICE === type) {
return <MultipleChoicePrompt key={a0.id} guildId={guildId5} prompt={a0} />;
}
if (OnboardingPromptType.DROPDOWN === type) {
return <DropdownPrompt key={a0.id} guildId={guildId5} prompt={a0} />;
}
}, [guildId5]);
return onboardingPromptsRaw.length === 0 ? <ScrollView style={styles.container} contentContainerStyle={{
paddingBottom: bottom + Module712.space.PX_16
}}>
<EmptyCustomizeCommunity setTab={setTab2} />
</ScrollView> : <ScrollView style={styles.container} contentContainerStyle={{
paddingBottom: bottom + Module712.space.PX_16
}}>
{(newOnboardingPrompts.length > 0 || onboardingPromptsWithNewAnswers.length > 0) && <>
<Text style={styles.sheetTitle} variant="text-md/medium" color="mobile-text-heading-primary">
{intl.format(t.iB5Gqe, {
count: newOnboardingPrompts.length + newAnswersCount
})}
</Text>
{newOnboardingPrompts.map(callback)}
{onboardingPromptsWithNewAnswers.map(callback)}
<View style={styles.sectionSeparator} />
</>}
{onboardingPrompts.length > 0 && <>
<Text style={styles.sheetTitle} variant="text-md/medium" color="mobile-text-heading-primary">
{intl.string(t.BGkaer)}
</Text>
<Text variant="text-xs/medium" color="text-muted">
{intl.string(t.r6Vm8T)}
</Text>
{onboardingPrompts.map(callback)}
</>}
<ConnectionsPrompt guildId={guildId5} />
</ScrollView>;
};
@@ -0,0 +1,115 @@
// Metro module 5211 (f5212).
import { useCallback } from "react";
import { View } from "react-native";
import EmojiStore from "../../emojis/EmojiStore";
import GuildOnboardingPromptsStore from "../GuildOnboardingPromptsStore";
import { EMOJI_URL_BASE_SIZE } from "../../emojis/EmojiConstants";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import { useStateFromStores, useStateFromStoresArray } from "../../../_bundle/defaultAreStatesEqual";
import Emoji from "../../emojis/native/Emoji";
import AvatarUtils from "../../../utils/AvatarUtils";
import { TextBadge, BadgeColors, CardSection } from "../../../design/void/native";
import { intl, t } from "../../../intl/index.native";
import { Text } from "../../../design/components/Text/native/Text";
import FormCheckboxRow from "../../../design/void/Form/native/FormCheckboxRow";
import useSafeAreaInsets_native from "../../safe_area/useSafeAreaInsets.native";
import ActionSheetActionCreators from "../../action_sheet/native/ActionSheetActionCreators";
import { BottomSheetTitleHeader } from "../../../design/components/Sheet/native/BottomSheetTitleHeader.native";
import { BottomSheet } from "../../../design/components/Sheet/native/BottomSheet.native";
import { BottomSheetScrollView } from "../../../_bundle/Module5245";
import { Button } from "../../../design/components/Button/native/Button.native";
let useStyles;
const DropdownOptionRow = function DropdownOptionRow(props) {
let leading;
let c14759_2;
const { option, responses, onSelect, canBeNew: canBeNew2 } = props;
c14759_2 = void 0;
const styles = useStyles();
const stateFromStores = useStateFromStores([EmojiStore], () => option.emoji?.id != null ? EmojiStore.getUsableCustomEmojiById(option.emoji?.id) : null);
const selected = responses.includes(option.id);
c14759_2 = selected;
const callback = useCallback(() => {
onSelect(option, !c14759_2);
}, [onSelect, option, selected]);
const id = option.emoji?.id;
L13: {
if (id == null) {
const r40 = option.emoji?.name != null;
leading = null;
if (!r40) {
break L13;
}
}
const src = stateFromStores != null ? AvatarUtils.getEmojiURL({
id: stateFromStores.id,
animated: stateFromStores.animated,
size: EMOJI_URL_BASE_SIZE
}) : void 0;
let name = option.emoji?.name;
if (name == null) {
name = "";
}
leading = <View style={{
display: "flex",
alignItems: "center"
}}>
<Emoji textEmojiStyle={styles.optionTextEmoji} fastImageStyle={styles.optionImageEmoji} src={src} name={name} />
</View>;
}
const trailing = canBeNew2 ? option.isUnseen ? <TextBadge color={BadgeColors.BRAND} text={intl.string(t.y2b7CA)} textStyle={styles.newBadge} /> : null : null;
return <FormCheckboxRow label={<View style={styles.labelRow}>
<Text variant="text-md/normal">{option.title}</Text>
{trailing}
</View>} selected={selected} leading={leading} trailing={trailing} onPress={callback} />;
};
useStyles = createStyles({
optionTextEmoji: {
fontSize: 24,
lineHeight: 24,
paddingTop: 5
},
optionImageEmoji: {
height: 24,
width: 24
},
newBadge: {
fontWeight: "bold"
},
labelRow: {
display: "flex",
flexDirection: "row",
justifyContent: "space-between",
alignItems: "center"
},
closeButtonWrapper: {
marginTop: 16,
marginHorizontal: 16
}
});
export default function DropdownOptionsActionSheet(props) {
let stateFromStoresArray;
const { guildId, promptId, canBeNew, onSelect: onSelect2 } = props;
stateFromStoresArray = void 0;
const styles = useStyles();
const bottom = useSafeAreaInsets_native().bottom;
const stateFromStores = useStateFromStores([GuildOnboardingPromptsStore], () => GuildOnboardingPromptsStore.getOnboardingPrompt(promptId));
stateFromStoresArray = useStateFromStoresArray([GuildOnboardingPromptsStore], () => GuildOnboardingPromptsStore.getOnboardingResponsesForPrompt(guildId, promptId));
const callback = useCallback(() => {
ActionSheetActionCreators.hideActionSheet();
}, []);
if (stateFromStores == null) {
return null;
}
return <BottomSheet scrollable header={<BottomSheetTitleHeader title={intl.string(t.E2ICbC)} />}>
<BottomSheetScrollView contentContainerStyle={{
paddingBottom: bottom
}}>
<CardSection accessibilityRole="radiogroup" accessibilityLabel={intl.string(t.E2ICbC)}>
{stateFromStores.options.map((a0) => <DropdownOptionRow key={a0.id} option={a0} responses={stateFromStoresArray} onSelect={onSelect2} canBeNew={Boolean(canBeNew)} />)}
</CardSection>
<View style={styles.closeButtonWrapper}>
<Button onPress={callback} text={intl.string(t.cpT0Cq)} grow />
</View>
</BottomSheetScrollView>
</BottomSheet>;
};
@@ -0,0 +1,299 @@
// Metro module 5536 (f5537).
import { useMemo, useLayoutEffect, useRef, useEffect } from "react";
import { View, StyleSheet } from "react-native";
import AccessibilityStore from "../../a11y/AccessibilityStore";
import GuildRoleStore from "../../../stores/GuildRoleStore";
import GuildStore from "../../../stores/GuildStore";
import UserStore from "../../../stores/UserStore";
import GuildOnboardingPromptsStore from "../GuildOnboardingPromptsStore";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import Module712 from "../../../_bundle/Module712";
import { useNavigation } from "../../../design/components/Navigator/native/useNavigation.native";
import { useStateFromStores, useStateFromStoresArray } from "../../../_bundle/Module589";
import useGuildRoleMemberCounts from "../../guild_role_subscriptions/useGuildRoleMemberCounts";
import { useThemeContext } from "../../../_bundle/Module3901";
import { useProfileThemeValues } from "../../user_profile/useProfileThemeValues.native";
import AvatarUtils from "../../../utils/AvatarUtils";
import getDevicePixelRatio_native from "../../../utils/getDevicePixelRatio.native";
import { isNotNullish } from "../../../utils/GlobalUtils";
import { useIsScreenReaderEnabled } from "../../a11y/native/useIsScreenReaderEnabled.native";
import * as _ReanimatedRexport from "../../reanimated/ReanimatedRexport";
import ReanimatedRexport, { useAnimatedStyle } from "../../reanimated/ReanimatedRexport";
import * as _timing from "../../../design/animation/reanimated/timing/timing";
import FastImage from "../../../components_native/common/FastImage";
import { SafeAreaPaddingView } from "../../../components_native/common/SafeAreaView";
import { Text } from "../../../design/components/Text/native/Text";
import { intl, t } from "../../../intl/index.native";
import { Avatar, AvatarSizes } from "../../../design/void/native";
import { RoleItem } from "../../user_profile/native/UserProfileRolesCard";
import GuildIcon, { GuildIconSizes } from "../../guild/native/GuildIcon";
import Module3771 from "../../../_bundle/Module3771";
import Module5569 from "../../../_bundle/Module5569";
import { Button } from "../../../design/components/Button/native/Button.native";
const ANIMATION_DURATION = 400;
const useStyles = createStyles({
screen: {
flex: 1,
position: "relative"
},
container: {
backgroundColor: "rgba(0, 0, 0, 0.5)",
paddingHorizontal: 24,
display: "flex",
justifyContent: "center",
flexGrow: 1
},
containerWithoutSplash: {
backgroundColor: Module712.colors.BACKGROUND_BASE_LOWEST
},
backgroundImage: {
position: "absolute",
width: "100%",
height: "100%"
},
title: {},
subtitle: {
marginTop: 16
},
card: {
marginTop: 24,
padding: 16,
paddingBottom: 32,
borderRadius: Module712.radii.sm,
backgroundColor: Module712.colors.BACKGROUND_SURFACE_HIGH
},
username: {
marginTop: 16
},
rolesHeader: {
marginTop: 8
},
roles: {
marginTop: 12,
display: "flex",
flexDirection: "row",
flexWrap: "wrap"
},
role: {
marginRight: 8
},
roleOverflow: {
paddingHorizontal: 8,
height: 28,
borderRadius: Module712.radii.xs,
display: "flex",
justifyContent: "center",
borderWidth: StyleSheet.hairlineWidth,
borderColor: Module712.colors.BORDER_SUBTLE
},
animation: {
marginTop: 24,
borderColor: Module712.colors.BORDER_SUBTLE,
borderWidth: 2,
borderRadius: Module712.radii.sm,
padding: 12,
display: "flex",
flexDirection: "row",
alignItems: "center"
},
wave: {
transform: [{
translateX: 24
}, {
rotate: "5deg"
}]
},
animationText: {
flexGrow: 1,
marginLeft: 8
},
getStartedButton: {
marginTop: 24
}
});
const __initData = {
code: "function GuildOnboardingCompletedTsx1(){const{withSequence,withTiming,withDelay,ANIMATION_DURATION,Easing,useReducedMotion}=this.__closure;const opacity=withSequence(withTiming(0,{duration:0}),withDelay(ANIMATION_DURATION,withTiming(0.5,{duration:ANIMATION_DURATION})),withTiming(1,{duration:ANIMATION_DURATION,easing:Easing.out(Easing.ease)}));const scale=withSequence(withTiming(1,{duration:0}),withDelay(ANIMATION_DURATION,withTiming(1.5,{duration:ANIMATION_DURATION,easing:Easing.out(Easing.ease)})),withTiming(1,{duration:useReducedMotion?1:ANIMATION_DURATION,easing:Easing.out(Easing.ease)}));const rawRotation=withSequence(withTiming('0deg',{duration:0}),withDelay(ANIMATION_DURATION,withTiming('-2deg',{duration:ANIMATION_DURATION})),withTiming('-5deg',{duration:ANIMATION_DURATION}));return{opacity:opacity,transform:[{rotate:rawRotation},{scale:scale}]};}"
};
export default function GuildOnboardingCompleted(props) {
let stateFromStores, c14909_6, stateFromStoresArray, c14909_8, allSelectedRoleIds, isScreenReaderEnabled, ref, stateFromStores2;
const { guildId, prompts, completeOnboarding, onClose } = props;
stateFromStores = void 0;
c14909_6 = void 0;
stateFromStoresArray = void 0;
c14909_8 = void 0;
allSelectedRoleIds = void 0;
isScreenReaderEnabled = void 0;
ref = void 0;
stateFromStores2 = void 0;
const styles = useStyles();
const navigation = useNavigation();
const stateFromStores3 = useStateFromStores([UserStore], () => UserStore.getCurrentUser());
stateFromStores = useStateFromStores([GuildStore], () => GuildStore.getGuild(guildId));
const guildRoleMemberCounts = useGuildRoleMemberCounts(guildId);
c14909_6 = guildRoleMemberCounts;
const r28 = {
backgroundColor: useProfileThemeValues(useThemeContext().theme)?.rolePillBackgroundColor
};
const uri = stateFromStores != null ? AvatarUtils.getGuildSplashURL({
id: stateFromStores.id,
splash: stateFromStores.splash,
size: 400 * getDevicePixelRatio_native()
}) : null;
stateFromStoresArray = useStateFromStoresArray([GuildOnboardingPromptsStore], () => GuildOnboardingPromptsStore.getOnboardingResponses(guildId), [guildId]);
const r85 = prompts.map((prompt) => prompt.options).flat().filter((item) => stateFromStoresArray.includes(item.id));
c14909_8 = r85;
const memo = useMemo(() => {
const allSelectedRoleIds2 = c14909_8.map((item) => item.roleIds).flat().filter(isNotNullish);
const r23 = c14909_6 != null;
let numSharedRoleMembers = 0;
if (r23) {
const r26 = allSelectedRoleIds2.length > 0;
numSharedRoleMembers = 0;
if (r26) {
const r28 = Math;
numSharedRoleMembers = r28.max.apply(r28, [...allSelectedRoleIds2.map((item) => {
let r5 = c14909_6[item];
if (r5 == null) {
r5 = 0;
}
return r5;
})]);
}
}
return {
numSharedRoleMembers,
allSelectedRoleIds: allSelectedRoleIds2
};
}, [guildRoleMemberCounts, r85]);
const numSharedRoleMembers = memo.numSharedRoleMembers;
allSelectedRoleIds = memo.allSelectedRoleIds;
const stateFromStoresArray2 = useStateFromStoresArray([GuildRoleStore], () => GuildRoleStore.getManyRoles(guildId, allSelectedRoleIds), [allSelectedRoleIds, guildId]);
useLayoutEffect(() => {
navigation.setOptions({
headerLeft: () => null
});
}, [navigation]);
isScreenReaderEnabled = useIsScreenReaderEnabled();
ref = useRef(false);
useEffect(() => {
if (isScreenReaderEnabled) {
if (!ref.current) {
ref.current = true;
completeOnboarding();
}
return void 0;
}
let c25491_0 = setTimeout(() => {
if (!ref.current) {
ref.current = true;
completeOnboarding();
}
onClose();
}, 3600);
return () => clearTimeout(c25491_0);
}, [completeOnboarding, onClose, isScreenReaderEnabled]);
stateFromStores2 = useStateFromStores([AccessibilityStore], () => AccessibilityStore.useReducedMotion);
const k = function k() {
const opacity = _ReanimatedRexport.withSequence(_timing.withTiming(0, {
duration: 0
}), _ReanimatedRexport.withDelay(ANIMATION_DURATION, _timing.withTiming(0.5, {
duration: ANIMATION_DURATION
})), _timing.withTiming(1, {
duration: ANIMATION_DURATION,
easing: _ReanimatedRexport.Easing.out(_ReanimatedRexport.Easing.ease)
}));
const scale = _ReanimatedRexport.withSequence(_timing.withTiming(1, {
duration: 0
}), _ReanimatedRexport.withDelay(ANIMATION_DURATION, _timing.withTiming(1.5, {
duration: ANIMATION_DURATION,
easing: _ReanimatedRexport.Easing.out(_ReanimatedRexport.Easing.ease)
})), _timing.withTiming(1, {
duration: stateFromStores2 ? 1 : ANIMATION_DURATION,
easing: _ReanimatedRexport.Easing.out(_ReanimatedRexport.Easing.ease)
}));
return {
opacity,
transform: [{
rotate: _ReanimatedRexport.withSequence(_timing.withTiming("0deg", {
duration: 0
}), _ReanimatedRexport.withDelay(ANIMATION_DURATION, _timing.withTiming("-2deg", {
duration: ANIMATION_DURATION
})), _timing.withTiming("-5deg", {
duration: ANIMATION_DURATION
}))
}, {
scale
}]
};
};
k.__closure = {
withSequence: _ReanimatedRexport.withSequence,
withTiming: _timing.withTiming,
withDelay: _ReanimatedRexport.withDelay,
ANIMATION_DURATION,
Easing: _ReanimatedRexport.Easing,
useReducedMotion: stateFromStores2
};
k.__workletHash = 8282245217026;
k.__initData = __initData;
const animatedStyle = useAnimatedStyle(k);
if (stateFromStores3 != null && stateFromStores != null) {
const r142 = stateFromStoresArray2.length - 3;
const r155 = [uri != null ? <FastImage source={{
uri
}} style={styles.backgroundImage} /> : null, ,];
const style = [styles.container, uri == null ? styles.containerWithoutSplash : null];
const r169 = uri == null;
let color = "text-overlay-light";
const r179 = [<Text style={styles.title} accessibilityRole="header" variant="heading-xxl/extrabold" color={r169 ? "mobile-text-heading-primary" : "text-overlay-light"}>
{intl.string(t.PFWIYe)}
</Text>, , , ,];
if (uri == null) {
color = "text-muted";
}
r179[1] = <Text style={styles.subtitle} accessibilityRole="header" variant="text-md/medium" color={color}>
{intl.string(t.og4NNr)}
</Text>;
r179[2] = <View style={styles.card}>
<Avatar size={AvatarSizes.XXLARGE} user={stateFromStores3} guildId={guildId} animate={false} />
<Text style={styles.username} variant="heading-xl/semibold" color="mobile-text-heading-primary">{stateFromStores3.username}</Text>
{numSharedRoleMembers > 0 ? <Text style={styles.rolesHeader} variant="text-sm/normal" color="text-muted">
{intl.format(t.l1Jc1n, {
numSharedRoleMembers
})}
</Text> : null}
<View style={styles.roles}>
{stateFromStoresArray2.slice(0, 3).map((item) => <View key={item.id} style={styles.role}>
<RoleItem role={item} guildId={stateFromStores.id} disableInteraction />
</View>)}
{0 < r142 ? <View style={[styles.roleOverflow, r28]}>
<Text variant="heading-deprecated-12/semibold" color="mobile-text-heading-primary">
{`+${r142}`}
</Text>
</View> : null}
</View>
<ReanimatedRexport.View style={[styles.animation, animatedStyle]}>
<GuildIcon guild={stateFromStores} size={GuildIconSizes.LARGE} />
<View style={styles.animationText}>
<Text variant="text-sm/medium" color="mobile-text-heading-primary">
{intl.format(t.FXREhf, {
guildName: stateFromStores.name
})}
</Text>
<Text variant="text-xs/normal" color="text-muted">
{`${Module3771().format("LL")}`}
</Text>
</View>
<FastImage source={Module5569} style={styles.wave} />
</ReanimatedRexport.View>
</View>;
r179[3] = isScreenReaderEnabled ? <View style={styles.getStartedButton}>
<Button variant="primary" size="md" grow text={intl.string(t.LhlgY9)} onPress={onClose} />
</View> : null;
r155[1] = <SafeAreaPaddingView bottom style={style}>
<View>{r179}</View>
</SafeAreaPaddingView>;
return <View style={styles.screen}>{r155}</View>;
}
return null;
};
@@ -0,0 +1,208 @@
// Metro module 5512 (f5513).
import { useRef, useEffect, useCallback } from "react";
import { ScrollView, View } from "react-native";
import MemberVerificationFormStore from "../../guild_member_verification/MemberVerificationFormStore";
import AuthorizedAppsStore from "../../oauth2/AuthorizedAppsStore";
import ConnectedAccountsStore from "../../../stores/ConnectedAccountsStore";
import GuildStore from "../../../stores/GuildStore";
import GuildOnboardingPromptsStore from "../GuildOnboardingPromptsStore";
import { OnboardingConnectionType } from "../GuildOnboardingPromptsConstants";
import { GuildOnboardingModalStates } from "./GuildOnboardingConstants";
import { AnalyticEvents } from "../../../Constants";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import { NAV_BAR_HEIGHT } from "../../../design/components/Navigator/native/NavigatorConstants.native";
import Module712 from "../../../_bundle/Module712";
import { useNavigation } from "../../../design/components/Navigator/native/useNavigation.native";
import useSafeAreaInsets_native from "../../safe_area/useSafeAreaInsets.native";
import { useStateFromStores, useStateFromStoresArray } from "../../../_bundle/Module589";
import { getProviderConnectionState, getApplicationConnectionState, showRulesInOnboarding } from "../GuildOnboardingUtils";
import AnalyticsUtils from "../../../utils/AnalyticsUtils";
import { collectGuildAnalyticsMetadata } from "../../app_analytics/AppAnalyticsUtils";
import { CONNECTIONS_STEP } from "../GuildOnboardingPromptsActionCreators";
import { SafeAreaPaddingView } from "../../../components_native/common/SafeAreaView";
import { Text } from "../../../design/components/Text/native/Text";
import { intl, t } from "../../../intl/index.native";
import ConnectionCard from "./ConnectionCard";
import AnalyticsLocation from "../../app_analytics/AnalyticsLocation";
import { Button } from "../../../design/components/Button/native/Button.native";
const useStyles = createStyles({
flex: {
flex: 1
},
container: {
display: "flex",
flex: 1,
flexGrow: 1,
marginTop: NAV_BAR_HEIGHT,
marginBottom: Module712.space.PX_16,
backgroundColor: Module712.colors.BACKGROUND_BASE_LOWER
},
scrollContainer: {
display: "flex",
flexGrow: 1,
paddingHorizontal: Module712.space.PX_16,
paddingTop: Module712.space.PX_16,
backgroundColor: Module712.colors.BACKGROUND_BASE_LOWER
},
header: {
marginBottom: Module712.space.PX_24
},
title: {
marginBottom: Module712.space.PX_8
},
description: {
marginTop: Module712.space.PX_8
},
connectionsList: {
marginTop: Module712.space.PX_8
},
footer: {
display: "flex",
flexDirection: "column",
justifyContent: "flex-end",
alignItems: "center",
bottom: 0,
paddingBottom: Module712.space.PX_8,
position: "absolute",
width: "100%",
backgroundColor: Module712.colors.BACKGROUND_BASE_LOWER
},
footerContent: {
width: "100%",
paddingHorizontal: Module712.space.PX_16
}
});
export default function GuildOnboardingConnectionPrompt(props) {
let props2;
let stateFromStoresArray, stateFromStores2, stateFromStores3, stateFromStores4, stateFromStores5;
const { guildId, onComplete, isLastStep } = props;
stateFromStoresArray = void 0;
stateFromStores2 = void 0;
stateFromStores3 = void 0;
stateFromStores4 = void 0;
stateFromStores5 = void 0;
const styles = useStyles();
const navigation = useNavigation();
const bottom = useSafeAreaInsets_native().bottom;
const paddingBottom = 64 + bottom + Module712.space.PX_8;
const ref = useRef(false);
const stateFromStores = useStateFromStores([GuildOnboardingPromptsStore], () => GuildOnboardingPromptsStore.getOnboardingConnections(guildId));
stateFromStoresArray = useStateFromStoresArray([GuildOnboardingPromptsStore], () => GuildOnboardingPromptsStore.getOnboardingPromptsForOnboarding(guildId));
stateFromStores2 = useStateFromStores([GuildStore], () => GuildStore.getGuild(guildId));
stateFromStores3 = useStateFromStores([MemberVerificationFormStore], () => MemberVerificationFormStore.getRulesPrompt(guildId));
stateFromStores4 = useStateFromStores([GuildOnboardingPromptsStore], () => GuildOnboardingPromptsStore.isLoading());
stateFromStores5 = useStateFromStores([AuthorizedAppsStore, ConnectedAccountsStore], () => {
for (const stateFromStore of stateFromStores) {
L11: {
const r26 = stateFromStore;
const connection_type = stateFromStore.connection_type;
if (OnboardingConnectionType.APPLICATION === connection_type) {
if (AuthorizedAppsStore.getNewestTokenForApplication(r26.application_id) != null) {
break L11;
}
continue;
}
if (OnboardingConnectionType.PROVIDER_CONNECTED_ACCOUNT !== connection_type) {
r26.connection_type;
continue;
}
if (r26.provider_id == null) {
continue;
}
const account = ConnectedAccountsStore.getAccount(null, r26.provider_id);
if (account == null) {
continue;
}
if (account.revoked) {
continue;
}
return true;
}
return true;
}
return false;
}, [stateFromStores]);
useEffect(() => {
if (!stateFromStores4 && stateFromStores.length !== 0 && !ref.current) {
const providerConnectionState = getProviderConnectionState(stateFromStores);
const applicationConnectionState = getApplicationConnectionState(stateFromStores);
AnalyticsUtils.track(AnalyticEvents.GUILD_ONBOARDING_STEP_VIEWED, {
...collectGuildAnalyticsMetadata(guildId),
step: CONNECTIONS_STEP,
required: false,
provider_connections_connected: providerConnectionState.connected,
provider_connections_not_connected: providerConnectionState.notConnected,
application_connections_connected: applicationConnectionState.connected,
application_connections_not_connected: applicationConnectionState.notConnected
});
ref.current = true;
}
}, [guildId, stateFromStores4, stateFromStores]);
const callback = useCallback(() => {
const providerConnectionState = getProviderConnectionState(stateFromStores);
const applicationConnectionState = getApplicationConnectionState(stateFromStores);
AnalyticsUtils.track(AnalyticEvents.GUILD_ONBOARDING_STEP_COMPLETED, {
...collectGuildAnalyticsMetadata(guildId),
step: CONNECTIONS_STEP,
skipped: !stateFromStores5,
back: false,
options_selected: 0,
in_onboarding: true,
is_final_step: isLastStep,
provider_connections_connected: providerConnectionState.connected,
provider_connections_not_connected: providerConnectionState.notConnected,
application_connections_connected: applicationConnectionState.connected,
application_connections_not_connected: applicationConnectionState.notConnected
});
if (stateFromStoresArray.length > 0) {
navigation.push(GuildOnboardingModalStates.PROMPT, {
currentPrompt: 0
});
} else if (showRulesInOnboarding(stateFromStores2, stateFromStores3)) {
navigation.push(GuildOnboardingModalStates.RULES);
} else {
onComplete();
}
}, [stateFromStoresArray.length, stateFromStores2, stateFromStores3, navigation, onComplete, stateFromStores, stateFromStores5, isLastStep, guildId]);
const r92 = {
top: true,
style: [styles.flex, styles.container],
children: null
};
if (stateFromStores4) {
r92.children = <View style={[styles.flex, {
justifyContent: "center",
alignItems: "center"
}]}>
<Text variant="text-md/normal" color="text-muted">
{intl.string(t.ZTNur7)}
</Text>
</View>;
props2 = r92;
} else {
r92.children = <View style={styles.flex}>
<ScrollView contentContainerStyle={[styles.scrollContainer, {
paddingBottom
}]}>
<View style={styles.header}>
<Text style={styles.title} accessibilityRole="header" variant="heading-xl/semibold" color="mobile-text-heading-primary">
{intl.string(t.eDVMrA)}
</Text>
<Text style={styles.description} variant="text-md/normal" color="text-muted">
{intl.string(t.BozOXu)}
</Text>
</View>
<View style={styles.connectionsList}>
{stateFromStores.map((stateFromStore, index) => <ConnectionCard key={index} connection={stateFromStore} guildId={guildId} location={AnalyticsLocation.GUILD_ONBOARDING} />)}
</View>
</ScrollView>
<View style={[styles.footer, styles.footerContent, {
paddingBottom: bottom
}]}>
<Button variant={stateFromStores5 ? "primary" : isLastStep ? "primary" : "secondary"} size="md" text={isLastStep ? `${intl.string(t["8SuVoE"])} 🎉` : stateFromStores5 ? intl.string(t.PDTjLN) : intl.string(t["5Wxrcd"])} onPress={callback} grow />
</View>
</View>;
props2 = r92;
}
return <SafeAreaPaddingView {...props2} />;
};
@@ -0,0 +1,11 @@
// Metro module 5112 (f5113).
const r8 = {
COVER: "cover",
PROMPT: "prompt",
CONNECTIONS: "connections",
COMPLETED: "completed",
RULES: "rules"
};
export const GUILD_ONBOARDING_MODAL_KEY = "GUILD_ONBOARDING_MODAL_KEY";
export const CHANNELS_AND_ROLES_MODAL_KEY = "CHANNELS_AND_ROLES_MODAL_KEY";
export { r8 as GuildOnboardingModalStates };
@@ -0,0 +1,79 @@
// Metro module 16190 (f16191).
import GuildMemberStore from "../../../stores/GuildMemberStore";
import GuildStore from "../../../stores/GuildStore";
import SelectedGuildStore from "../../../stores/SelectedGuildStore";
import { GuildFeatures } from "../../../Constants";
import { GuildMemberFlags } from "../../guild_member/GuildMemberConstants";
import AutomaticLifecycleManager from "../../../lib/AutomaticLifecycleManager";
import doGuildOnboarding_native, { discardOnboardingPromise } from "../doGuildOnboarding.native";
import { hasFlag } from "../../../_bundle/Module1384";
let c11608_8 = null;
let c11608_9 = null;
class GuildOnboardingManager extends AutomaticLifecycleManager {
actions = {
CHANNEL_SELECT: (a0) => this.handleChannelSelect(a0),
GUILD_DELETE: (a0) => this.handleGuildDelete(a0),
POST_CONNECTION_OPEN: () => this.handleConnectionOpen()
};
handleConnectionOpen = () => {
let r2 = c11608_8;
if (r2 == null) {
r2 = SelectedGuildStore.getGuildId();
}
if (r2 == null) {
r2 = null;
}
c11608_8 = r2;
if (r2 != null) {
this._openOnboardingIfIncomplete(c11608_8);
}
};
handleChannelSelect = (a0) => {
let guildId = a0.guildId;
let channelId = a0.channelId;
if (!(c11608_8 === guildId && c11608_9 === channelId)) {
if (channelId == null) {
channelId = null;
}
c11608_9 = channelId;
if (guildId == null) {
guildId = null;
}
c11608_8 = guildId;
if (guildId != null) {
this._openOnboardingIfIncomplete(c11608_8);
}
}
};
handleGuildDelete = (a0) => {
discardOnboardingPromise(a0.guild.id);
};
_openOnboardingIfIncomplete = (a0) => {
const guild = GuildStore.getGuild(a0);
if (guild != null && guild.features.has(GuildFeatures.GUILD_ONBOARDING)) {
const selfMember = GuildMemberStore.getSelfMember(a0);
let r19 = selfMember != null;
if (r19) {
let flags = selfMember.flags;
if (flags == null) {
flags = 0;
}
r19 = !hasFlag(flags, GuildMemberFlags.COMPLETED_ONBOARDING);
}
if (r19) {
let flags2 = selfMember.flags;
if (flags2 == null) {
flags2 = 0;
}
r19 = hasFlag(flags2, GuildMemberFlags.STARTED_ONBOARDING);
}
if (r19) {
doGuildOnboarding_native({
guildId: a0
});
}
}
};
}
const guildOnboardingManager = new GuildOnboardingManager();
export default guildOnboardingManager;
@@ -0,0 +1,115 @@
// Metro module 5137 (f5138).
import { useCallback, useEffect, useMemo } from "react";
import MemberVerificationFormStore from "../../guild_member_verification/MemberVerificationFormStore";
import ChannelStore from "../../../stores/ChannelStore";
import GuildStore from "../../../stores/GuildStore";
import SelectedChannelStore from "../../../stores/SelectedChannelStore";
import GuildOnboardingPromptsStore from "../GuildOnboardingPromptsStore";
import { GuildOnboardingModalStates } from "./GuildOnboardingConstants";
import { GuildFeatures, Routes } from "../../../Constants";
import { transitionTo } from "../../routing/router_utils";
import GuildOnboardingPrompts from "./GuildOnboardingPrompts";
import { getHeaderCloseButton } from "../../../design/components/Navigator/native/NavigatorHeader.native";
import GuildOnboardingConnectionPrompt from "./GuildOnboardingConnectionPrompt";
import { showRulesInOnboarding } from "../GuildOnboardingUtils";
import GuildOnboardingCompleted from "./GuildOnboardingCompleted";
import { RulesPrompt } from "./GuildOnboardingPrompt";
import { useStateFromStores, useStateFromStoresArray } from "../../../_bundle/Module589";
import GuildOnboardingActionCreators from "../GuildOnboardingActionCreators";
import MemberVerificationActionCreators from "../../guild_member_verification/MemberVerificationActionCreators";
import { Navigator } from "../../../design/components/Navigator/native/Navigator.native";
import { intl, t } from "../../../intl/index.native";
let headerRight;
const headerTitle = function headerTitle() {
return null;
};
headerRight = function headerRight() {
return null;
};
export default function GuildOnboardingModal(props) {
let stateFromStoresArray, callback, callback2;
const { guildId, onFinish, onClose: onClose2, landingAnimation, isFirstOpen, backShouldLeaveGuild } = props;
stateFromStoresArray = void 0;
callback = void 0;
callback2 = void 0;
const stateFromStores = useStateFromStores([GuildStore], () => {
const guild2 = GuildStore.getGuild(guildId);
return guild2 != null && (guild2.features.has(GuildFeatures.MEMBER_VERIFICATION_GATE_ENABLED) && !guild2.features.has(GuildFeatures.MEMBER_VERIFICATION_MANUAL_APPROVAL));
});
stateFromStoresArray = useStateFromStoresArray([GuildOnboardingPromptsStore], () => GuildOnboardingPromptsStore.getOnboardingPromptsForOnboarding(guildId));
const stateFromStores2 = useStateFromStores([GuildOnboardingPromptsStore], () => GuildOnboardingPromptsStore.getOnboardingConnections(guildId));
callback = useCallback((a0, a1, a2) => {
GuildOnboardingActionCreators.selectOption(guildId, a0, a1, a2);
}, [guildId]);
callback2 = useCallback(() => {
GuildOnboardingActionCreators.completeOnboarding(guildId, stateFromStoresArray);
}, [guildId, stateFromStoresArray]);
useEffect(() => {
if (stateFromStores) {
MemberVerificationActionCreators.fetchVerificationForm(guildId);
}
}, [guildId, stateFromStores]);
return <Navigator screens={useMemo(() => {
const guildId2 = guildId;
const stateFromStoresArray2 = stateFromStoresArray;
const callback3 = callback;
const callback4 = callback2;
const onFinish2 = onFinish;
const onClose3 = onClose2;
const landingAnimation2 = landingAnimation;
const isFirstOpen2 = isFirstOpen;
const backShouldLeaveGuild2 = backShouldLeaveGuild;
const guild = GuildStore.getGuild(guildId);
const rulesPrompt = MemberVerificationFormStore.getRulesPrompt(guildId);
const r19 = {};
r19[GuildOnboardingModalStates.PROMPT] = {
fullscreen: true,
headerTitle,
headerRight,
render: (a0) => {
let currentPromptIdx = a0?.currentPrompt;
if (currentPromptIdx == null) {
currentPromptIdx = 0;
}
return <GuildOnboardingPrompts guildId={guildId2} currentPromptIdx={currentPromptIdx} prompts={stateFromStoresArray2} selectOption={callback3} onClose={onClose3} landingAnimation={landingAnimation2} isFirstOpen={isFirstOpen2} backShouldLeaveGuild={backShouldLeaveGuild2} />;
}
};
r19[GuildOnboardingModalStates.CONNECTIONS] = {
fullscreen: true,
headerTitle,
headerRight,
headerLeft: getHeaderCloseButton(() => {
if (backShouldLeaveGuild2) {
const channel = ChannelStore.getChannel(SelectedChannelStore.getLastSelectedChannelId());
if (channel != null && channel.guild_id !== guildId2) {
transitionTo(Routes.CHANNEL(channel.guild_id, channel.id));
} else {
transitionTo(Routes.ME, {
navigationReplace: true
});
}
onClose3();
} else {
onClose3();
}
}),
render: () => <GuildOnboardingConnectionPrompt guildId={guildId2} isLastStep={stateFromStoresArray2.length === 0 && !showRulesInOnboarding(guild, rulesPrompt)} onComplete={callback4} />
};
r19[GuildOnboardingModalStates.COMPLETED] = {
fullscreen: true,
headerTitle,
headerRight,
render: () => <GuildOnboardingCompleted guildId={guildId2} prompts={stateFromStoresArray2} completeOnboarding={callback4} onClose={() => {
onClose3();
onFinish2();
}} />
};
r19[GuildOnboardingModalStates.RULES] = {
fullscreen: true,
headerTitle,
headerRight,
render: () => <RulesPrompt guildId={guildId2} onClose={onClose3} />
};
return r19;
}, [guildId, stateFromStoresArray, stateFromStores2, callback, callback2, onFinish, onClose2, landingAnimation, isFirstOpen, backShouldLeaveGuild])} initialRouteName={isFirstOpen && stateFromStores2.length > 0 ? GuildOnboardingModalStates.CONNECTIONS : GuildOnboardingModalStates.PROMPT} headerBackTitle={intl.string(t["13/7kX"])} />;
};
@@ -0,0 +1,372 @@
// Metro module 5179 (f5180).
import { useMemo, useState, useCallback } from "react";
import { FlatList, Image as Image2, ScrollView, View } from "react-native";
import EmojiStore from "../../emojis/EmojiStore";
import MemberVerificationFormStore from "../../guild_member_verification/MemberVerificationFormStore";
import GuildStore from "../../../stores/GuildStore";
import GuildOnboardingPromptsStore from "../GuildOnboardingPromptsStore";
import { GuildOnboardingModalStates } from "./GuildOnboardingConstants";
import { EMOJI_URL_BASE_SIZE } from "../../emojis/EmojiConstants";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import { NAV_BAR_HEIGHT } from "../../../design/components/Navigator/native/NavigatorConstants.native";
import Module712 from "../../../_bundle/Module712";
import { useNavigation } from "../../../design/components/Navigator/native/useNavigation.native";
import { useStateFromStores, useStateFromStoresArray } from "../../../_bundle/Module589";
import useSafeAreaInsets_native from "../../safe_area/useSafeAreaInsets.native";
import { useToken } from "../../../design/tokens/native/useToken";
import Module689 from "../../../_bundle/Module689";
import { SafeAreaPaddingView } from "../../../components_native/common/SafeAreaView";
import TermsFieldList from "../../guild_member_verification/native/components/form_fields/TermsFieldList";
import { Text } from "../../../design/components/Text/native/Text";
import { intl, t } from "../../../intl/index.native";
import { Button } from "../../../design/components/Button/native/Button.native";
import MemberVerificationActionCreators from "../../guild_member_verification/MemberVerificationActionCreators";
import Module4611 from "../../../_bundle/Module4611";
import { VerticalGradient } from "../../../ConstantsIOS";
import { getSelectedRoleIds, getSelectedChannelIds } from "../GuildOnboardingUtils";
import usePromptHelpText from "../usePromptHelpText";
import GuildOnboardingPromptOptionButton from "./GuildOnboardingPromptOptionButton";
import Emoji from "../../emojis/native/Emoji";
import AvatarUtils from "../../../utils/AvatarUtils";
import ActionSheetActionCreators from "../../action_sheet/native/ActionSheetActionCreators";
import { PressableHighlight } from "../../../design/void/Pressables/native/Pressables";
import Module5505 from "../../../_bundle/Module5505";
let useStyles, PromptFooter, formattedNameHighlight, DropdownOption;
const PromptHeader = function PromptHeader(props) {
const { currentPrompt: currentPrompt3, numberOfPrompts, currentPromptIndex } = props;
const styles = useStyles();
return <>
<View style={styles.promptHeader}>
<Text style={styles.countText} variant="text-sm/medium" color="text-muted">
{intl.format(t.isV0NW, {
currentQuestion: currentPromptIndex + 1,
questionCount: numberOfPrompts
})}
</Text>
{currentPrompt3?.required ? <>
<View style={styles.requiredSeparator} />
<Text variant="text-sm/medium" color="text-brand">
{intl.string(t.Ur8Vrt)}
</Text>
</> : null}
</View>
<Text style={styles.title} accessibilityRole="header" variant="heading-xl/semibold" color="mobile-text-heading-primary">{currentPrompt3.title}</Text>
</>;
};
PromptFooter = function PromptFooter(props) {
let c14713_2;
const { guildId, currentPrompt: currentPrompt3, selectedOptionIds, handleOnPress, lastPrompt } = props;
c14713_2 = void 0;
const styles = useStyles();
const stateFromStores4 = useStateFromStores([GuildStore], () => GuildStore.getGuild(guildId));
const r2 = selectedOptionIds.length === 0 && !currentPrompt3?.required;
const text = lastPrompt ? `${intl.string(t["8SuVoE"])} 🎉` : r2 ? intl.string(t["5Wxrcd"]) : intl.string(t.PDTjLN);
const disabled = selectedOptionIds.length === 0 && currentPrompt3?.required;
const r55 = currentPrompt3 == null;
let r19 = void 0;
if (!r55) {
const options = currentPrompt3.options;
r19 = options == null ? void 0 : options.filter((option) => selectedOptionIds.includes(option.id));
}
c14713_2 = r19;
const promptHelpText = usePromptHelpText({
guild: stateFromStores4,
prompt: currentPrompt3,
selectedRoleIds: useMemo(() => c14713_2 != null ? getSelectedRoleIds(c14713_2) : new Set(), [r19]),
selectedChannelIds: useMemo(() => c14713_2 != null ? getSelectedChannelIds(c14713_2) : new Set(), [r19]),
itemHook: formattedNameHighlight
});
const { helpText, helpTextAdditional } = promptHelpText;
const token = useToken(Module712.colors.BACKGROUND_BASE_LOWER);
return <View style={styles.footer}>
<Module4611 style={[styles.scrollContainerGradient]} start={VerticalGradient.START} end={VerticalGradient.END} colors={[Module689(token).alpha(0).hex(), Module689(token).alpha(1).hex()]} pointerEvents="none" />
<View style={styles.footerContent}>
{disabled ? <Text style={styles.helpText} variant="text-xs/medium" color="text-default">
{intl.string(t.dA1dSf)}
</Text> : null}
{helpText === "" ? helpTextAdditional !== "" ? <Text style={styles.helpText} variant="text-xs/medium" color="text-default">
{helpText}
{" "}
{helpTextAdditional}
</Text> : null : <Text style={styles.helpText} variant="text-xs/medium" color="text-default">
{helpText}
{" "}
{helpTextAdditional}
</Text>}
<Button variant={r2 ? lastPrompt ? "primary" : "secondary" : "primary"} size="md" grow text={text} onPress={handleOnPress} disabled={disabled} />
</View>
</View>;
};
formattedNameHighlight = function formattedNameHighlight(a0, a1) {
return <Text key={a1} variant="text-xs/medium" color="mobile-text-heading-primary">
{a0}
</Text>;
};
DropdownOption = function DropdownOption(props) {
const option = props.option;
const styles = useStyles();
const stateFromStores4 = useStateFromStores([EmojiStore], () => option.emoji?.id != null ? EmojiStore.getUsableCustomEmojiById(option.emoji?.id) : null);
const src = stateFromStores4 != null ? AvatarUtils.getEmojiURL({
id: stateFromStores4.id,
animated: stateFromStores4.animated,
size: EMOJI_URL_BASE_SIZE
}) : void 0;
let name = option.emoji?.name;
if (name == null) {
name = "";
}
return <View style={styles.dropdownPill}>
<View style={styles.emojiContainer}>
<Emoji textEmojiStyle={styles.optionTextEmoji} fastImageStyle={styles.optionImageEmoji} src={src} name={name} />
</View>
<Text variant="text-md/semibold">{option.title}</Text>
</View>;
};
useStyles = createStyles({
flex: {
flex: 1
},
container: {
display: "flex",
flex: 1,
flexGrow: 1,
marginTop: NAV_BAR_HEIGHT,
marginBottom: 16,
backgroundColor: Module712.colors.BACKGROUND_BASE_LOWER
},
scrollContainer: {
display: "flex",
flexGrow: 1,
justifyContent: "center",
paddingHorizontal: 16,
paddingTop: 0,
backgroundColor: Module712.colors.BACKGROUND_BASE_LOWER
},
scrollContainerGradient: {
position: "absolute",
height: 48,
width: "100%",
left: 0,
top: -48
},
promptHeader: {
display: "flex",
flexDirection: "row",
alignItems: "center",
marginBottom: 8
},
requiredSeparator: {
flexShrink: 0,
marginHorizontal: 8,
color: Module712.colors.BORDER_SUBTLE,
backgroundColor: Module712.colors.BORDER_SUBTLE,
width: 4,
height: 4,
borderRadius: Module712.radii.xs
},
countText: {},
title: {
marginBottom: 32
},
helpText: {
marginTop: 8,
marginBottom: 8,
textAlign: "center"
},
footer: {
display: "flex",
flexDirection: "column",
justifyContent: "flex-end",
alignItems: "center",
bottom: 0,
paddingBottom: 8,
position: "absolute",
width: "100%",
backgroundColor: Module712.colors.BACKGROUND_BASE_LOWER
},
footerText: {
paddingHorizontal: 16,
paddingBottom: 8,
paddingTop: 8
},
footerContent: {
width: "100%",
paddingHorizontal: 16
},
optionTextEmoji: {
fontSize: 18,
lineHeight: 22,
marginRight: 6
},
optionImageEmoji: {
height: 22,
width: 22,
marginRight: 6
},
emojiContainer: {
display: "flex",
alignItems: "center"
},
dropdownContainer: {
borderRadius: Module712.radii.sm,
backgroundColor: Module712.colors.BACKGROUND_BASE_LOWEST,
padding: 8,
paddingRight: 32,
minHeight: 48,
display: "flex",
flexDirection: "row",
flexWrap: "wrap",
alignItems: "center",
position: "relative"
},
emptyDropdownText: {
marginTop: 16
},
dropdownPill: {
borderRadius: Module712.radii.sm,
backgroundColor: Module712.colors.BACKGROUND_BASE_LOW,
padding: 6,
marginRight: 8,
marginTop: 8,
display: "flex",
flexDirection: "row",
alignItems: "center"
},
dropdownIconContainer: {
position: "absolute",
right: 4,
top: 8
},
dropdownIcon: {
height: 32,
width: 32
}
});
export function RulesPrompt(props) {
let stateFromStores2, stateFromStores3, setState;
const guildId2 = props.guildId;
stateFromStores2 = void 0;
stateFromStores3 = void 0;
setState = void 0;
const styles = useStyles();
const navigation = useNavigation();
const stateFromStores = useStateFromStores([MemberVerificationFormStore], () => MemberVerificationFormStore.getRulesPrompt(guildId2));
stateFromStores2 = useStateFromStores([GuildStore], () => GuildStore.getGuild(guildId2)?.rulesChannelId);
const bottom = useSafeAreaInsets_native().bottom;
const r44 = 64 + bottom;
stateFromStores3 = useStateFromStores([MemberVerificationFormStore], () => MemberVerificationFormStore.get(guildId2));
let state;
[state, setState] = useState(false);
const token = useToken(Module712.colors.BACKGROUND_BASE_LOWER);
const colors = [Module689(token).alpha(0).hex(), Module689(token).alpha(1).hex()];
let r82 = null;
if (stateFromStores != null) {
const paddingBottom = r44 + 8;
r82 = <SafeAreaPaddingView top style={[styles.flex, styles.container]}>
<View style={styles.flex}>
<FlatList contentContainerStyle={[styles.scrollContainer, {
paddingBottom
}]} data={[0]} renderItem={() => <TermsFieldList rules={stateFromStores.values} rulesChannelId={stateFromStores2} />} onEndReached={() => setState(true)} />
<View style={[styles.footer, styles.footerContent, {
paddingBottom: bottom
}]}>
<Text style={styles.footerText} variant="text-xs/medium">
{state ? intl.string(t.arAe3I) : intl.string(t.D0CVAc)}
</Text>
<Button variant="primary" size="md" grow disabled={!state} text={intl.string(t["0KL0ot"])} onPress={function onPress() {
if (stateFromStores != null && stateFromStores3 != null) {
MemberVerificationActionCreators.submitVerificationForm(guildId2, {
...stateFromStores3,
formFields: [{
...stateFromStores,
response: true
}]
});
navigation.push(GuildOnboardingModalStates.COMPLETED);
}
}} />
</View>
</View>
<Module4611 style={[styles.scrollContainerGradient, {
bottom: paddingBottom
}]} start={VerticalGradient.START} end={VerticalGradient.END} colors={colors} pointerEvents="none" />
</SafeAreaPaddingView>;
}
return r82;
}
export function MultipleChoicePrompt(props) {
const { guildId: guildId3, currentPrompt, lastPrompt, currentPromptIndex, numberOfPrompts, selectOption, handleOnPress } = props;
const styles = useStyles();
const bottom = useSafeAreaInsets_native().bottom;
const stateFromStoresArray = useStateFromStoresArray([GuildOnboardingPromptsStore], () => currentPrompt != null ? GuildOnboardingPromptsStore.getOnboardingResponsesForPrompt(guildId3, currentPrompt.id) : [], [guildId3, currentPrompt]);
return <>
<ScrollView contentContainerStyle={[styles.scrollContainer, {
paddingBottom: 64 + bottom + 48 + 48,
position: "relative"
}]}>
<PromptHeader currentPrompt={currentPrompt} numberOfPrompts={numberOfPrompts} currentPromptIndex={currentPromptIndex} />
<View>
{currentPrompt.options.map((a0) => {
let selected = stateFromStoresArray.includes(a0.id);
if (selected == null) {
selected = false;
}
return <GuildOnboardingPromptOptionButton key={a0.id} option={a0} guildId={guildId3} onSelect={(event) => {
let r4 = event;
const id = currentPrompt.id;
const id2 = a0.id;
if (event == null) {
r4 = false;
}
return selectOption(id, id2, r4);
}} selected={selected} />;
})}
</View>
</ScrollView>
<PromptFooter guildId={guildId3} currentPrompt={currentPrompt} selectedOptionIds={stateFromStoresArray} handleOnPress={handleOnPress} lastPrompt={lastPrompt} />
</>;
}
export function DropdownPrompt(props) {
const { guildId: guildId4, currentPrompt: currentPrompt2, lastPrompt, currentPromptIndex, numberOfPrompts, selectOption: selectOption2, handleOnPress } = props;
const styles = useStyles();
const bottom = useSafeAreaInsets_native().bottom;
const stateFromStoresArray2 = useStateFromStoresArray([GuildOnboardingPromptsStore], () => currentPrompt2 != null ? GuildOnboardingPromptsStore.getOnboardingResponsesForPrompt(guildId4, currentPrompt2.id) : [], [guildId4, currentPrompt2]);
const r3 = currentPrompt2 == null;
let r24 = void 0;
if (!r3) {
const options = currentPrompt2.options;
r24 = options == null ? void 0 : options.filter((option) => stateFromStoresArray2.includes(option.id));
}
return <>
<ScrollView contentContainerStyle={[styles.scrollContainer, {
paddingBottom: 64 + bottom + 48 + 48,
position: "relative"
}]}>
<PromptHeader currentPrompt={currentPrompt2} numberOfPrompts={numberOfPrompts} currentPromptIndex={currentPromptIndex} />
<View>
<PressableHighlight style={styles.dropdownContainer} onPress={useCallback(() => {
ActionSheetActionCreators.openLazy(import("./DropdownOptionsActionSheet"), "DropdownOptions", {
guildId: guildId4,
promptId: currentPrompt2.id,
onSelect: (a0, a1) => {
let r4 = a1;
const id = currentPrompt2.id;
const id2 = a0.id;
if (a1 == null) {
r4 = false;
}
return selectOption2(id, id2, r4);
}
});
}, [guildId4, currentPrompt2.id, selectOption2])}>
{r24.length === 0 && <Text style={styles.emptyDropdownText} variant="text-sm/normal" color="text-muted">No answers selected.</Text>}
{r24.map((item) => <DropdownOption key={item.id} option={item} />)}
<View style={styles.dropdownIconContainer}>
<Image2 style={styles.dropdownIcon} source={Module5505} />
</View>
</PressableHighlight>
</View>
</ScrollView>
<PromptFooter guildId={guildId4} currentPrompt={currentPrompt2} selectedOptionIds={stateFromStoresArray2} handleOnPress={handleOnPress} lastPrompt={lastPrompt} />
</>;
}
@@ -0,0 +1,358 @@
// Metro module 5202 (f5203).
import { useState, useRef, useEffect, useMemo } from "react";
import { View } from "react-native";
import AccessibilityStore from "../../a11y/AccessibilityStore";
import EmojiStore from "../../emojis/EmojiStore";
import { EMOJI_URL_BASE_SIZE } from "../../emojis/EmojiConstants";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import Module712 from "../../../_bundle/Module712";
import { useStateFromStores } from "../../../_bundle/Module589";
import * as _ReanimatedRexport from "../../reanimated/ReanimatedRexport";
import ReanimatedRexport, { useAnimatedStyle, useSharedValue } from "../../reanimated/ReanimatedRexport";
import * as _timing from "../../../design/animation/reanimated/timing/timing";
import * as _spring from "../../../design/animation/reanimated/spring/spring";
import useGuildRoleMemberCounts from "../../guild_role_subscriptions/useGuildRoleMemberCounts";
import { AccessibilityAnnouncer } from "../../../_bundle/Module3902";
import { intl, t } from "../../../intl/index.native";
import { useToken } from "../../../design/tokens/native/useToken";
import { useCheckboxA11yNative } from "../../../_bundle/Module3907";
import { PressableOpacity } from "../../../design/void/Pressables/native/Pressables";
import Emoji from "../../emojis/native/Emoji";
import AvatarUtils from "../../../utils/AvatarUtils";
import { Text } from "../../../design/components/Text/native/Text";
import { CheckmarkSmallIcon } from "../../../design/components/Icon/native/redesign/generated/CheckmarkSmallIcon";
import { TextBadge, BadgeColors } from "../../../design/void/native";
const useStyles = createStyles({
container: {
borderRadius: Module712.radii.md,
borderWidth: 2,
borderStyle: "solid",
marginBottom: 8
},
optionButton: {
paddingVertical: 12,
paddingHorizontal: 16,
display: "flex",
flexDirection: "row",
alignItems: "center"
},
optionTextEmoji: {
fontSize: 24,
lineHeight: 24,
marginRight: 12,
paddingTop: 5
},
optionImageEmoji: {
height: 24,
width: 24,
marginRight: 12
},
optionText: {
flexShrink: 1
},
checkIcon: {
position: "absolute",
top: -6,
right: -6,
width: 20,
height: 20,
backgroundColor: Module712.colors.BACKGROUND_BRAND,
borderRadius: 10,
display: "flex",
alignItems: "center",
justifyContent: "center"
},
newBadgeWrapper: {
position: "absolute",
top: -6,
right: -6
},
newBadge: {
fontWeight: "bold"
},
roleCount: {
position: "absolute",
top: -6,
right: 24,
paddingVertical: 2,
paddingHorizontal: 6,
backgroundColor: Module712.colors.BACKGROUND_BRAND,
borderRadius: 10,
display: "flex",
alignItems: "center",
justifyContent: "center"
}
});
const __initData = {
code: "function GuildOnboardingPromptOptionButtonTsx1(){const{selected,withTiming,Easing,useReducedMotion,withSequence,withSpring}=this.__closure;const rawOpacity=selected?1:0;const opacity=withTiming(rawOpacity,{duration:150,easing:Easing.out(Easing.ease)});const rawScale=selected?1:0.7;const scale=useReducedMotion?rawScale:withSequence(withSpring(rawScale*1.2,{stiffness:80,damping:6,mass:0.3}),withSpring(rawScale,{stiffness:80,damping:6,mass:0.3}));return{opacity:opacity,transform:[{scale:scale}]};}"
};
const __initData2 = {
code: "function GuildOnboardingPromptOptionButtonTsx2(){const{showMemberCount,withDelay,withTiming,Easing,useReducedMotion}=this.__closure;const rawOpacity=showMemberCount?1:0;const opacity=withDelay(showMemberCount?400:0,withTiming(rawOpacity,{duration:150,easing:Easing.out(Easing.ease)}));const rawTranslate=showMemberCount?0:16;const translateX=useReducedMotion?rawTranslate:withDelay(showMemberCount?400:0,withTiming(rawTranslate,{duration:200,easing:Easing.out(Easing.ease)}));return{opacity:opacity,transform:[{translateX:translateX}]};}"
};
const __initData3 = {
code: "function GuildOnboardingPromptOptionButtonTsx3(){const{useReducedMotion,Easing,withTiming,selected,selectedBorderColor,isNew,unselectedBrandBorderColor,unselectedBorderColor,selectedBackgroundColor}=this.__closure;const timing=useReducedMotion?{duration:0}:{duration:200,easing:Easing.out(Easing.ease)};return{borderColor:withTiming(selected?selectedBorderColor:isNew?unselectedBrandBorderColor:unselectedBorderColor,timing),backgroundColor:withTiming(selected?selectedBackgroundColor:'transparent',timing)};}"
};
const __initData4 = {
code: "function GuildOnboardingPromptOptionButtonTsx4(){const{useReducedMotion,scale}=this.__closure;return useReducedMotion?{}:{transform:[{scale:scale.get()}]};}"
};
export default function PromptOptionButton(props) {
let stateFromStores, c14756_5, memberCount, state, setState, ref, ref2, sharedValue, isUnseen, c14756_13, token, token2, token3, token4;
const { guildId, option, selected, onSelect, suppressMemberCount } = props;
let canBeNew = props.canBeNew;
stateFromStores = void 0;
c14756_5 = void 0;
memberCount = void 0;
state = void 0;
setState = void 0;
ref = void 0;
ref2 = void 0;
sharedValue = void 0;
isUnseen = void 0;
c14756_13 = void 0;
token = void 0;
token2 = void 0;
token3 = void 0;
token4 = void 0;
const styles = useStyles();
const stateFromStores2 = useStateFromStores([EmojiStore], () => (option == null ? void 0 : option.emoji?.id) != null ? EmojiStore.getUsableCustomEmojiById(option == null ? void 0 : option.emoji?.id) : null);
stateFromStores = useStateFromStores([AccessibilityStore], () => AccessibilityStore.useReducedMotion);
const R = function R() {
const opacity = _timing.withTiming(selected ? 1 : 0, {
duration: 150,
easing: _ReanimatedRexport.Easing.out(_ReanimatedRexport.Easing.ease)
});
const r22 = selected ? 1 : 0.7;
return {
opacity,
transform: [{
scale: stateFromStores ? r22 : _ReanimatedRexport.withSequence(_spring.withSpring(1.2 * r22, {
stiffness: 80,
damping: 6,
mass: 0.3
}), _spring.withSpring(r22, {
stiffness: 80,
damping: 6,
mass: 0.3
}))
}]
};
};
R.__closure = {
selected,
withTiming: _timing.withTiming,
Easing: _ReanimatedRexport.Easing,
useReducedMotion: stateFromStores,
withSequence: _ReanimatedRexport.withSequence,
withSpring: _spring.withSpring
};
R.__workletHash = 8281627194581;
R.__initData = __initData;
const animatedStyle = useAnimatedStyle(R);
const guildRoleMemberCounts = useGuildRoleMemberCounts(guildId);
c14756_5 = guildRoleMemberCounts;
const r3 = guildRoleMemberCounts == null;
let r28 = 0;
if (!r3) {
const r71 = option.roleIds == null;
r28 = 0;
if (!r71) {
const r73 = Math;
r28 = r73.max.apply(r73, [...option.roleIds.map((roleId) => c14756_5[roleId])]);
}
}
memberCount = r28;
[state, setState] = useState(false);
ref = useRef(null);
useEffect(() => {
if (state) {
ref.current = setTimeout(() => {
setState(false);
ref.current = null;
}, 3000);
return () => {
if (ref.current != null) {
clearTimeout(ref.current);
}
};
}
}, [state]);
ref2 = useRef(false);
useEffect(() => {
if (state && (!ref2.current && memberCount > 0)) {
AccessibilityAnnouncer.announce(intl.formatToPlainString(t.iyXfAn, {
memberCount
}), "polite");
ref2.current = true;
} else if (!state) {
ref2.current = false;
}
}, [state, memberCount]);
const G = function G() {
const opacity = _ReanimatedRexport.withDelay(state ? 400 : 0, _timing.withTiming(state ? 1 : 0, {
duration: 150,
easing: _ReanimatedRexport.Easing.out(_ReanimatedRexport.Easing.ease)
}));
const r28 = state ? 0 : 16;
return {
opacity,
transform: [{
translateX: stateFromStores ? r28 : _ReanimatedRexport.withDelay(state ? 400 : 0, _timing.withTiming(r28, {
duration: 200,
easing: _ReanimatedRexport.Easing.out(_ReanimatedRexport.Easing.ease)
}))
}]
};
};
G.__closure = {
showMemberCount: state,
withDelay: _ReanimatedRexport.withDelay,
withTiming: _timing.withTiming,
Easing: _ReanimatedRexport.Easing,
useReducedMotion: stateFromStores
};
G.__workletHash = 9518487706997;
G.__initData = __initData2;
const animatedStyle2 = useAnimatedStyle(G);
sharedValue = useSharedValue(1);
isUnseen = canBeNew ? option.isUnseen : canBeNew;
const r127 = (option == null ? void 0 : option.emoji?.id) != null || (option == null ? void 0 : option.emoji?.name) != null;
c14756_13 = r127;
const memo = useMemo(() => {
if (c14756_13) {
let r30 = option.emoji?.name;
if (r30 == null) {
r30 = "";
}
const emojiName = r30.replace(/^:|:$/g, "");
return option.description != null && option.description.length > 0 ? intl.formatToPlainString(t.nSzqkg, {
emojiName,
title: option.title,
description: option.description
}) : intl.formatToPlainString(t.rBPpAN, {
emojiName,
title: option.title
});
}
return option.description != null && option.description.length > 0 ? intl.formatToPlainString(t.U4lDOC, {
title: option.title,
description: option.description
}) : option.title;
}, [r127, option.emoji?.name, option.title, option.description]);
token = useToken(Module712.colors.BACKGROUND_BRAND);
token2 = useToken(Module712.colors.BORDER_SUBTLE);
token3 = useToken(Module712.colors.BORDER_STRONG);
token4 = useToken(Module712.colors.BACKGROUND_BASE_LOWEST);
const H = function H() {
const r5 = stateFromStores ? {
duration: 0
} : {
duration: 200,
easing: _ReanimatedRexport.Easing.out(_ReanimatedRexport.Easing.ease)
};
return {
borderColor: _timing.withTiming(selected ? token3 : isUnseen ? token : token2, r5),
backgroundColor: _timing.withTiming(selected ? token4 : "transparent", r5)
};
};
H.__closure = {
useReducedMotion: stateFromStores,
Easing: _ReanimatedRexport.Easing,
withTiming: _timing.withTiming,
selected,
selectedBorderColor: token3,
isNew: isUnseen,
unselectedBrandBorderColor: token,
unselectedBorderColor: token2,
selectedBackgroundColor: token4
};
H.__workletHash = 17180171486485;
H.__initData = __initData3;
const animatedStyle3 = useAnimatedStyle(H);
const q = function q() {
return stateFromStores ? {} : {
transform: [{
scale: sharedValue.get()
}]
};
};
q.__closure = {
useReducedMotion: stateFromStores,
scale: sharedValue
};
q.__workletHash = 319662489785;
q.__initData = __initData4;
const animatedStyle4 = useAnimatedStyle(q);
const checkboxA11yNative = useCheckboxA11yNative({
checked: selected
});
const props2 = {
activeOpacity: 0.6,
style: [styles.optionButton],
onPress: function onPress() {
onSelect(!selected);
if (!suppressMemberCount) {
setState(!selected);
}
},
onPressIn: function onPressIn() {
sharedValue.set(_ReanimatedRexport.withSequence(_timing.withTiming(1, {
duration: 0
}), _timing.withTiming(1.02, {
duration: 200,
easing: _ReanimatedRexport.Easing.out(_ReanimatedRexport.Easing.ease)
})));
},
onPressOut: function onPressOut() {
sharedValue.set(_timing.withTiming(1, {
duration: 100,
easing: _ReanimatedRexport.Easing.out(_ReanimatedRexport.Easing.ease)
}));
},
accessibilityRole: checkboxA11yNative.accessibilityRole,
accessibilityState: checkboxA11yNative.accessibilityState,
accessibilityLabel: memo,
children: null
};
let r217 = (option == null ? void 0 : option.emoji?.id) != null || (option == null ? void 0 : option.emoji?.name) != null;
if (r217) {
const src = stateFromStores2 != null ? AvatarUtils.getEmojiURL({
id: stateFromStores2.id,
animated: stateFromStores2.animated,
size: EMOJI_URL_BASE_SIZE
}) : void 0;
let name = option == null ? void 0 : option.emoji?.name;
if (name == null) {
name = "";
}
r217 = <View style={{
display: "flex",
alignItems: "center"
}}>
<Emoji textEmojiStyle={styles.optionTextEmoji} fastImageStyle={styles.optionImageEmoji} src={src} name={name} />
</View>;
}
props2.children = [r217, <View style={styles.optionText}>
<Text variant="text-md/semibold" color="mobile-text-heading-primary">{option.title}</Text>
{option.description != null && option.description.length > 0 && <Text variant="text-xs/medium" color="text-default">{option.description}</Text>}
</View>];
const r266 = [<PressableOpacity {...props2} />, memberCount > 0 ? <ReanimatedRexport.View accessible={false} importantForAccessibility="no-hide-descendants" accessibilityElementsHidden style={[styles.roleCount, animatedStyle2]}>
<Text variant="text-xs/semibold" color="text-overlay-light">
{intl.format(t.EgKsZA, {
memberCount
})}
</Text>
</ReanimatedRexport.View> : null, <ReanimatedRexport.View style={[styles.checkIcon, animatedStyle]}>
<CheckmarkSmallIcon size="xs" color={Module712.colors.WHITE} />
</ReanimatedRexport.View>, ,];
if (canBeNew) {
canBeNew = !selected;
}
if (canBeNew) {
canBeNew = option.isUnseen;
}
if (canBeNew) {
canBeNew = <TextBadge color={BadgeColors.BRAND} text={intl.string(t.y2b7CA)} style={styles.newBadgeWrapper} textStyle={styles.newBadge} />;
}
r266[3] = canBeNew;
return <ReanimatedRexport.View style={[animatedStyle4, animatedStyle3, styles.container]}>{r266}</ReanimatedRexport.View>;
};
@@ -0,0 +1,502 @@
// Metro module 5139 (f5140).
import _slicedToArray from "../../../_bundle/_slicedToArray";
import { useCallback, useState, useEffect, useLayoutEffect } from "react";
import { StyleSheet, View } from "react-native";
import AccessibilityStore from "../../a11y/AccessibilityStore";
import MemberVerificationFormStore from "../../guild_member_verification/MemberVerificationFormStore";
import ChannelStore from "../../../stores/ChannelStore";
import GuildStore from "../../../stores/GuildStore";
import SelectedChannelStore from "../../../stores/SelectedChannelStore";
import GuildOnboardingPromptsStore from "../GuildOnboardingPromptsStore";
import { OnboardingPromptType } from "../GuildOnboardingPromptsConstants";
import { GuildOnboardingModalStates } from "./GuildOnboardingConstants";
import { AnalyticEvents, MarketingURLs, Routes } from "../../../Constants";
import { transitionTo } from "../../routing/router_utils";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import { NAV_BAR_HEIGHT } from "../../../design/components/Navigator/native/NavigatorConstants.native";
import Module712 from "../../../_bundle/Module712";
import { getPaletteForAvatar } from "../../../utils/ImageUtils";
import { rgbToHex, hexWithOpacity } from "../../../utils/ColorUtils";
import FastImage from "../../../components_native/common/FastImage";
import Module4611 from "../../../_bundle/Module4611";
import { VerticalGradient } from "../../../ConstantsIOS";
import { useStateFromStores, useStateFromStoresArray } from "../../../_bundle/Module589";
import useSafeAreaInsets_native from "../../safe_area/useSafeAreaInsets.native";
import { useNavigation } from "../../../design/components/Navigator/native/useNavigation.native";
import * as _ReanimatedRexport from "../../reanimated/ReanimatedRexport";
import ReanimatedRexport, { useSharedValue, useAnimatedStyle } from "../../reanimated/ReanimatedRexport";
import GuildOnboardingActionCreators from "../GuildOnboardingActionCreators";
import { showRulesInOnboarding } from "../GuildOnboardingUtils";
import AvatarUtils from "../../../utils/AvatarUtils";
import getDevicePixelRatio_native from "../../../utils/getDevicePixelRatio.native";
import AnalyticsUtils from "../../../utils/AnalyticsUtils";
import { collectGuildAnalyticsMetadata } from "../../app_analytics/AppAnalyticsUtils";
import * as _timing from "../../../design/animation/reanimated/timing/timing";
import { getHeaderCloseButton, getHeaderBackButton } from "../../../design/components/Navigator/native/NavigatorHeader.native";
import { SafeAreaPaddingView } from "../../../components_native/common/SafeAreaView";
import { MultipleChoicePrompt, DropdownPrompt } from "./GuildOnboardingPrompt";
import { assertNever } from "../../../utils/GlobalUtils";
import LottieAnimationView from "../../../components_native/common/LottieAnimationView";
import { Text } from "../../../design/components/Text/native/Text";
import { t, intl } from "../../../intl/index.native";
let useStyles, BackgroundImageGradient, __initData, __initData2, __initData3, __initData4, __initData5;
let _getBackgroundGradientColor = function _getBackgroundGradientColor() {
const r8 = async (c25362_0) => {
let c25362_2;
c25362_2 = void 0;
let c29467_0 = await getPaletteForAvatar(c25362_0);
let c29467_1 = (0, _slicedToArray)(c29467_0[0], 3);
let c29467_2 = c29467_1[0];
let c29467_3 = c29467_1[1];
let c29467_4 = c29467_1[2];
return rgbToHex(c29467_2, c29467_3, c29467_4);
};
_getBackgroundGradientColor = r8;
return r8.apply(this, arguments);
};
BackgroundImageGradient = function BackgroundImageGradient(props) {
const { splashUrl, color } = props;
const styles = useStyles();
return <>
<FastImage source={{
uri: splashUrl
}} style={[styles.backgroundImage]} resizeMode="cover" />
<Module4611 style={styles.backgroundColorGradient} start={VerticalGradient.START} end={VerticalGradient.END} colors={[hexWithOpacity(color, 0.16), color]} />
</>;
};
useStyles = createStyles({
flex: {
flex: 1
},
container: {
display: "flex",
flex: 1,
flexGrow: 1,
marginTop: NAV_BAR_HEIGHT,
marginBottom: Module712.space.PX_16,
backgroundColor: Module712.colors.BACKGROUND_BASE_LOWER
},
subtitle: {
marginBottom: Module712.space.PX_16,
opacity: 0.8
},
onboardingTitle: {
textAlign: "center"
},
onboardingPolicy: {
position: "absolute",
paddingHorizontal: Module712.space.PX_16,
display: "flex",
justifyContent: "center",
width: "100%",
marginBottom: Module712.space.PX_16
},
onboardingPolicyText: {
textAlign: "center"
},
landingOverlay: {
position: "absolute",
width: "100%",
height: "100%",
display: "flex",
justifyContent: "center"
},
artWrapper: {
height: 350,
position: "relative",
display: "flex",
flexDirection: "row",
alignItems: "center",
justifyContent: "center"
},
landingBody: {
alignItems: "center",
marginTop: -24,
paddingHorizontal: Module712.space.PX_16
},
backgroundImage: {
position: "absolute",
height: "50%",
width: "100%",
top: 0
},
backgroundColorGradient: {
position: "absolute",
height: "100%",
width: "100%",
top: 0
},
darkColorGradient: {
position: "absolute",
height: "100%",
width: "100%",
top: 0
}
});
__initData = {
code: "function GuildOnboardingPromptsTsx1(){const{showPrompts,withTiming,Easing,useReducedMotion}=this.__closure;const rawOpacity=showPrompts.get()?0:1;const opacity=withTiming(rawOpacity,{duration:300,easing:Easing.out(Easing.ease)});const rawTranslateY=!useReducedMotion&&showPrompts.get()?-80:0;const translateY=withTiming(rawTranslateY,{duration:300,easing:Easing.out(Easing.ease)});return{opacity:opacity,transform:[{translateY:translateY}]};}"
};
__initData2 = {
code: "function GuildOnboardingPromptsTsx2(){const{showPrompts,withDelay,withTiming,Easing,useReducedMotion}=this.__closure;const rawOpacity=showPrompts.get()?0:1;const opacity=withDelay(200,withTiming(rawOpacity,{duration:300,easing:Easing.out(Easing.ease)}));const rawTranslateY=!useReducedMotion&&showPrompts.get()?-80:0;const translateY=withDelay(200,withTiming(rawTranslateY,{duration:300,easing:Easing.out(Easing.ease)}));return{opacity:opacity,transform:[{translateY:translateY}]};}"
};
__initData3 = {
code: "function GuildOnboardingPromptsTsx3(){const{showPrompts,withDelay,withTiming,Easing}=this.__closure;const rawOpacity=showPrompts.get()?0:1;const opacity=withDelay(200,withTiming(rawOpacity,{duration:300,easing:Easing.out(Easing.ease)}));return{opacity:opacity};}"
};
__initData4 = {
code: "function GuildOnboardingPromptsTsx4(){const{showPrompts,withDelay,withTiming,Easing}=this.__closure;const rawOpacity=showPrompts.get()?0:1;const opacity=withDelay(200,withTiming(rawOpacity,{duration:300,easing:Easing.out(Easing.ease)}));return{opacity:opacity};}"
};
__initData5 = {
code: "function GuildOnboardingPromptsTsx5(){const{showPrompts,withDelay,withTiming,Easing,useReducedMotion}=this.__closure;const rawOpacity=showPrompts.get()?1:0;const opacity=withDelay(600,withTiming(rawOpacity,{duration:300,easing:Easing.out(Easing.ease)}));const rawTranslateY=!useReducedMotion&&!showPrompts.get()?80:0;const translateY=withDelay(600,withTiming(rawTranslateY,{duration:300,easing:Easing.out(Easing.ease)}));return{opacity:opacity,transform:[{translateY:translateY}]};}"
};
export default function GuildOnboardingPrompt(props) {
let stateFromStores2, c14698_7, c14698_8, navigation, skipped, c14698_11, sharedValue, callback, stateFromStores3, stateFromStoresArray, required, c14698_17, setState, guildSplashURL, required2;
const { guildId, currentPromptIdx, prompts, selectOption, onClose, landingAnimation } = props;
let isFirstOpen = props.isFirstOpen;
const backShouldLeaveGuild = props.backShouldLeaveGuild;
stateFromStores2 = void 0;
c14698_7 = void 0;
c14698_8 = void 0;
navigation = void 0;
skipped = void 0;
c14698_11 = void 0;
sharedValue = void 0;
callback = void 0;
stateFromStores3 = void 0;
stateFromStoresArray = void 0;
required = void 0;
c14698_17 = void 0;
setState = void 0;
guildSplashURL = void 0;
required2 = void 0;
const styles = useStyles();
const stateFromStores = useStateFromStores([MemberVerificationFormStore], () => MemberVerificationFormStore.getRulesPrompt(guildId));
stateFromStores2 = useStateFromStores([AccessibilityStore], () => AccessibilityStore.useReducedMotion);
const bottom = useSafeAreaInsets_native().bottom;
const r5 = useStateFromStores([GuildOnboardingPromptsStore], () => GuildOnboardingPromptsStore.getOnboardingConnections(guildId)).length > 0;
c14698_7 = r5;
if (isFirstOpen) {
isFirstOpen = currentPromptIdx === 0;
}
if (isFirstOpen) {
isFirstOpen = !r5;
}
c14698_8 = isFirstOpen;
navigation = useNavigation();
skipped = prompts.length > 0;
const currentPrompt = prompts[currentPromptIdx];
c14698_11 = currentPrompt;
sharedValue = useSharedValue(!isFirstOpen);
callback = useCallback(() => {
GuildOnboardingActionCreators.completeOnboarding(guildId, prompts);
}, [guildId, prompts]);
stateFromStores3 = useStateFromStores([GuildStore], () => GuildStore.getGuild(guildId));
stateFromStoresArray = useStateFromStoresArray([GuildOnboardingPromptsStore], () => c14698_11 != null ? GuildOnboardingPromptsStore.getOnboardingResponsesForPrompt(guildId, c14698_11.id) : [], [guildId, currentPrompt]);
required = stateFromStoresArray.length === 0 && currentPrompt?.required;
const lastPrompt = currentPromptIdx + 1 >= prompts.length && !showRulesInOnboarding(stateFromStores3, stateFromStores);
c14698_17 = lastPrompt;
let color;
[color, setState] = useState(Module712.unsafe_rawColors.PRIMARY_800);
guildSplashURL = stateFromStores3 != null ? AvatarUtils.getGuildSplashURL({
id: stateFromStores3.id,
splash: stateFromStores3.splash,
size: 400 * getDevicePixelRatio_native()
}) : null;
useEffect(() => {
if (guildSplashURL != null) {
(function getBackgroundGradientColor() {
return _getBackgroundGradientColor.apply(this, arguments);
})(guildSplashURL).then((result) => {
setState(result);
});
}
}, [guildSplashURL]);
useEffect(() => {
if (c14698_8) {
AnalyticsUtils.track(AnalyticEvents.GUILD_ONBOARDING_STEP_VIEWED, {
...collectGuildAnalyticsMetadata(guildId),
step: -1,
required: true
});
AnalyticsUtils.track(AnalyticEvents.GUILD_ONBOARDING_STEP_COMPLETED, {
...collectGuildAnalyticsMetadata(guildId),
step: -1,
skipped,
is_final_step: false,
in_onboarding: true
});
}
}, [guildId, skipped, stateFromStores, isFirstOpen]);
useEffect(() => {
if (c14698_8) {
setTimeout(() => {
if (skipped) {
sharedValue.set(true);
return void 0;
}
onClose();
callback();
}, 2000);
}
}, [sharedValue, isFirstOpen, skipped, r5, onClose, callback, guildId]);
useEffect(() => {
if (!(c14698_8 || skipped)) {
onClose();
}
}, [isFirstOpen, skipped, onClose]);
required2 = skipped ? prompts[0].required : skipped;
useEffect(() => {
if (currentPromptIdx === 0) {
AnalyticsUtils.track(AnalyticEvents.GUILD_ONBOARDING_STEP_VIEWED, {
...collectGuildAnalyticsMetadata(guildId),
step: 0,
required: required2
});
}
}, [guildId, required2, currentPromptIdx]);
const ot = function ot() {
return {
opacity: _timing.withTiming(sharedValue.get() ? 0 : 1, {
duration: 300,
easing: _ReanimatedRexport.Easing.out(_ReanimatedRexport.Easing.ease)
}),
transform: [{
translateY: _timing.withTiming(stateFromStores2 ? 0 : sharedValue.get() ? -80 : 0, {
duration: 300,
easing: _ReanimatedRexport.Easing.out(_ReanimatedRexport.Easing.ease)
})
}]
};
};
ot.__closure = {
showPrompts: sharedValue,
withTiming: _timing.withTiming,
Easing: _ReanimatedRexport.Easing,
useReducedMotion: stateFromStores2
};
ot.__workletHash = 6820086589932;
ot.__initData = __initData;
const animatedStyle = useAnimatedStyle(ot);
const st = function st() {
return {
opacity: _ReanimatedRexport.withDelay(200, _timing.withTiming(sharedValue.get() ? 0 : 1, {
duration: 300,
easing: _ReanimatedRexport.Easing.out(_ReanimatedRexport.Easing.ease)
})),
transform: [{
translateY: _ReanimatedRexport.withDelay(200, _timing.withTiming(stateFromStores2 ? 0 : sharedValue.get() ? -80 : 0, {
duration: 300,
easing: _ReanimatedRexport.Easing.out(_ReanimatedRexport.Easing.ease)
}))
}]
};
};
st.__closure = {
showPrompts: sharedValue,
withDelay: _ReanimatedRexport.withDelay,
withTiming: _timing.withTiming,
Easing: _ReanimatedRexport.Easing,
useReducedMotion: stateFromStores2
};
st.__workletHash = 3034833873876;
st.__initData = __initData2;
const animatedStyle2 = useAnimatedStyle(st);
const rt = function rt() {
return {
opacity: _ReanimatedRexport.withDelay(200, _timing.withTiming(sharedValue.get() ? 0 : 1, {
duration: 300,
easing: _ReanimatedRexport.Easing.out(_ReanimatedRexport.Easing.ease)
}))
};
};
rt.__closure = {
showPrompts: sharedValue,
withDelay: _ReanimatedRexport.withDelay,
withTiming: _timing.withTiming,
Easing: _ReanimatedRexport.Easing
};
rt.__workletHash = 2795589385440;
rt.__initData = __initData3;
const animatedStyle3 = useAnimatedStyle(rt);
const lt = function lt() {
return {
opacity: _ReanimatedRexport.withDelay(200, _timing.withTiming(sharedValue.get() ? 0 : 1, {
duration: 300,
easing: _ReanimatedRexport.Easing.out(_ReanimatedRexport.Easing.ease)
}))
};
};
lt.__closure = {
showPrompts: sharedValue,
withDelay: _ReanimatedRexport.withDelay,
withTiming: _timing.withTiming,
Easing: _ReanimatedRexport.Easing
};
lt.__workletHash = 13481450530727;
lt.__initData = __initData4;
const animatedStyle4 = useAnimatedStyle(lt);
const ct = function ct() {
return {
opacity: _ReanimatedRexport.withDelay(600, _timing.withTiming(sharedValue.get() ? 1 : 0, {
duration: 300,
easing: _ReanimatedRexport.Easing.out(_ReanimatedRexport.Easing.ease)
})),
transform: [{
translateY: _ReanimatedRexport.withDelay(600, _timing.withTiming(stateFromStores2 ? 0 : sharedValue.get() ? 0 : 80, {
duration: 300,
easing: _ReanimatedRexport.Easing.out(_ReanimatedRexport.Easing.ease)
}))
}]
};
};
ct.__closure = {
showPrompts: sharedValue,
withDelay: _ReanimatedRexport.withDelay,
withTiming: _timing.withTiming,
Easing: _ReanimatedRexport.Easing,
useReducedMotion: stateFromStores2
};
ct.__workletHash = 14018549800735;
ct.__initData = __initData5;
const animatedStyle5 = useAnimatedStyle(ct);
useLayoutEffect(() => {
navigation.setOptions({
headerLeft: currentPromptIdx === 0 && !c14698_7 ? getHeaderCloseButton(() => {
AnalyticsUtils.track(AnalyticEvents.GUILD_ONBOARDING_STEP_COMPLETED, {
...collectGuildAnalyticsMetadata(guildId),
step: 0,
skipped: true,
back: false,
options_selected: 0,
in_onboarding: true,
is_final_step: false
});
if (backShouldLeaveGuild) {
const channel = ChannelStore.getChannel(SelectedChannelStore.getLastSelectedChannelId());
if (channel != null && channel.guild_id !== guildId) {
transitionTo(Routes.CHANNEL(channel.guild_id, channel.id));
} else {
transitionTo(Routes.ME, {
navigationReplace: true
});
}
onClose();
} else {
onClose();
}
}) : currentPromptIdx === 0 && c14698_7 ? getHeaderBackButton(() => {
AnalyticsUtils.track(AnalyticEvents.GUILD_ONBOARDING_STEP_COMPLETED, {
...collectGuildAnalyticsMetadata(guildId),
step: 0,
skipped: false,
back: true,
options_selected: stateFromStoresArray.length,
in_onboarding: true,
is_final_step: false
});
navigation.pop();
}, true) : getHeaderBackButton(() => {
AnalyticsUtils.track(AnalyticEvents.GUILD_ONBOARDING_STEP_COMPLETED, {
...collectGuildAnalyticsMetadata(guildId),
step: currentPromptIdx,
skipped: false,
back: true,
options_selected: stateFromStoresArray.length,
in_onboarding: true,
is_final_step: false
});
AnalyticsUtils.track(AnalyticEvents.GUILD_ONBOARDING_STEP_VIEWED, {
...collectGuildAnalyticsMetadata(guildId),
step: currentPromptIdx - 1,
required: prompts[currentPromptIdx - 1].required
});
navigation.pop();
}, true)
});
}, [navigation, currentPromptIdx, stateFromStoresArray, guildId, prompts, onClose, backShouldLeaveGuild, r5]);
let r241 = null;
if (skipped) {
const r242 = currentPrompt == null;
r241 = null;
if (!r242) {
const handleOnPress = function handleOnPress() {
if (!required) {
if (c14698_17) {
navigation.push(GuildOnboardingModalStates.COMPLETED);
} else {
AnalyticsUtils.track(AnalyticEvents.GUILD_ONBOARDING_STEP_COMPLETED, {
...collectGuildAnalyticsMetadata(guildId),
step: currentPromptIdx,
options_selected: stateFromStoresArray.length,
skipped: stateFromStoresArray.length === 0,
back: false,
in_onboarding: true,
is_final_step: false
});
if (currentPromptIdx < prompts.length - 1) {
AnalyticsUtils.track(AnalyticEvents.GUILD_ONBOARDING_STEP_VIEWED, {
...collectGuildAnalyticsMetadata(guildId),
step: currentPromptIdx + 1,
required: prompts[currentPromptIdx + 1].required
});
}
if (currentPromptIdx + 1 < prompts.length) {
navigation.push(GuildOnboardingModalStates.PROMPT, {
currentPrompt: currentPromptIdx + 1
});
} else if (showRulesInOnboarding(stateFromStores3, stateFromStores)) {
navigation.push(GuildOnboardingModalStates.RULES);
}
}
}
};
const type = currentPrompt.type;
if (OnboardingPromptType.MULTIPLE_CHOICE === type) {
r241 = <MultipleChoicePrompt guildId={guildId} currentPrompt={currentPrompt} lastPrompt={lastPrompt} currentPromptIndex={currentPromptIdx} numberOfPrompts={prompts.length} selectOption={selectOption} handleOnPress={handleOnPress} />;
} else if (OnboardingPromptType.DROPDOWN === type) {
r241 = <DropdownPrompt guildId={guildId} currentPrompt={currentPrompt} lastPrompt={lastPrompt} currentPromptIndex={currentPromptIdx} numberOfPrompts={prompts.length} selectOption={selectOption} handleOnPress={handleOnPress} />;
} else {
assertNever(currentPrompt.type);
r241 = void 0;
}
}
}
const r264 = [<SafeAreaPaddingView top bottom style={[styles.flex, styles.container]}>
<ReanimatedRexport.View style={[styles.flex, animatedStyle5]}>{r241}</ReanimatedRexport.View>
</SafeAreaPaddingView>, ,];
const r314 = [<ReanimatedRexport.View style={[styles.landingOverlay, animatedStyle4]}>
{guildSplashURL != null ? <BackgroundImageGradient splashUrl={guildSplashURL} color={color} /> : null}
<Module4611 style={styles.darkColorGradient} start={VerticalGradient.START} end={VerticalGradient.END} colors={[hexWithOpacity(Module712.unsafe_rawColors.PRIMARY_800, 0.5), Module712.unsafe_rawColors.PRIMARY_800]} />
</ReanimatedRexport.View>, <ReanimatedRexport.View style={[styles.artWrapper, animatedStyle]}>
<LottieAnimationView source={landingAnimation} autoPlay={!stateFromStores2} style={{
width: "100%"
}} />
</ReanimatedRexport.View>, ,];
const O2bQlD = t.O2bQlD;
let guildName = stateFromStores3?.name;
if (guildName == null) {
guildName = "";
}
r314[2] = <ReanimatedRexport.View style={[styles.landingBody, animatedStyle2]}>
<Text style={styles.subtitle} variant="text-md/semibold" color="text-overlay-light">
{intl.format(O2bQlD, {
guildName
})}
</Text>
<Text style={styles.onboardingTitle} accessibilityRole="header" variant="heading-xl/semibold" color="text-overlay-light">
{intl.string(t["Alcl/e"])}
</Text>
</ReanimatedRexport.View>;
r264[1] = <View style={StyleSheet.absoluteFill} pointerEvents="none">
<ReanimatedRexport.View style={[styles.flex, styles.landingOverlay]} pointerEvents="none">{r314}</ReanimatedRexport.View>
<ReanimatedRexport.View style={[styles.onboardingPolicy, animatedStyle3, {
bottom
}]} pointerEvents="auto">
<Text style={styles.onboardingPolicyText} variant="heading-sm/normal" color="text-default">
{intl.format(t.kI6UoD, {
privacyLink: MarketingURLs.PRIVACY
})}
</Text>
</ReanimatedRexport.View>
</View>;
return <View style={styles.flex}>{r264}</View>;
};
@@ -0,0 +1,59 @@
// Metro module 5531 (f5532).
import { useCallback, useMemo } from "react";
import { AnalyticEvents } from "../../../Constants";
import useTheme from "../../../hooks/useTheme";
import Platforms from "../../../lib/Platforms";
import { intl, t } from "../../../intl/index.native";
import getDefaultProviderDescription from "../getDefaultProviderDescription";
import { useStartProviderConnection } from "../../application_account_linking/native/useStartProviderConnection";
import AnalyticsUtils from "../../../utils/AnalyticsUtils";
import { collectGuildAnalyticsMetadata } from "../../app_analytics/AppAnalyticsUtils";
import { makeSource } from "../../../utils/AvatarUtils";
import * as _shared from "../../../design/shared";
import { Icon } from "../../../design/void/native";
import { LinkIcon } from "../../../design/components/Icon/native/redesign/generated/LinkIcon";
import ConnectionCardView from "./ConnectionCardView";
export default function ProviderConnectionCard(props) {
const { connection, guildId, location: location2 } = props;
const theme = useTheme();
let c14904_3 = theme;
let displayName = connection.provider_id != null ? Platforms.get(connection.provider_id)?.name : null;
if (displayName == null) {
displayName = intl.string(t.NzCoRx);
}
const description = connection.description != null && connection.description.length > 0 ? connection.description : getDefaultProviderDescription(connection.provider_id);
const startProviderConnection = useStartProviderConnection(connection.provider_id);
const { hasConnection, canConnect, startConnection, loading } = startProviderConnection;
const callback = useCallback(async () => {
const GUILD_ONBOARDING_CONNECTION_CLICKED = AnalyticEvents.GUILD_ONBOARDING_CONNECTION_CLICKED;
const r30 = {
...collectGuildAnalyticsMetadata(guildId),
connection_type: "provider"
};
const provider_id = connection.provider_id;
if (provider_id == null) {
provider_id = void 0;
}
r30.provider_id = provider_id;
r30.location = location2;
AnalyticsUtils.track(GUILD_ONBOARDING_CONNECTION_CLICKED, r30);
await startConnection("Guild Onboarding");
}, [startConnection, guildId, connection.provider_id, location2]);
return <ConnectionCardView displayName={displayName} description={description} icon={useMemo(() => {
if (connection.provider_id != null) {
const r25 = Platforms.get(connection.provider_id);
const r31 = r25?.icon != null;
let r32 = null;
if (r31) {
const isThemeDark = _shared.isThemeDark(c14904_3);
const icon = r25.icon;
r32 = isThemeDark ? icon.darkPNG : icon.lightPNG;
}
return <Icon source={makeSource(r32)} style={{
width: 32,
height: 32
}} disableColor />;
}
return <LinkIcon size="lg" color="text-subtle" />;
}, [connection.provider_id, theme])} isLoading={loading} isConnected={hasConnection} canConnect={canConnect} onConnect={callback} />;
};
@@ -0,0 +1,145 @@
// Metro module 9998 (f9999).
import { useEffect, useCallback } from "react";
import UserGuildSettingsStore from "../../stores/UserGuildSettingsStore";
import GuildOnboardingPromptsStore from "./GuildOnboardingPromptsStore";
import { ChannelNotificationSettingsFlags } from "../user_settings/UserSettingsConstants";
import Dispatcher from "../../Dispatcher";
import Module12 from "../../_bundle/Module12";
import { isNotNullish } from "../../utils/GlobalUtils";
import { hasNotSetUpChannelOptIn } from "../opt_in_channels/OptInOnboardingUtils";
import { useStateFromStores } from "../../_bundle/Module589";
import GuildOnboardingActionCreators from "./GuildOnboardingActionCreators";
import { setFlag } from "../../_bundle/Module1384";
let c6647_7 = {};
export default function useBatchUpdateSelectOption(a0) {
const guildId = a0;
const stateFromStores = useStateFromStores([GuildOnboardingPromptsStore], () => {
let r6 = GuildOnboardingPromptsStore.getPendingResponseOptions(guildId);
if (r6 == null) {
r6 = c6647_7;
}
return r6;
}, [a0]);
useEffect(() => {
Dispatcher.dispatch({
type: "CLEAR_PENDING_CHANNEL_AND_ROLE_UPDATES",
guildId
});
return () => {
Dispatcher.dispatch({
type: "CLEAR_PENDING_CHANNEL_AND_ROLE_UPDATES",
guildId
});
};
}, [a0]);
useEffect(() => {
if (stateFromStores != null && Object.keys(stateFromStores).length !== 0) {
GuildOnboardingActionCreators.updateOnboardingResponses(guildId);
}
}, [a0, stateFromStores]);
return {
handleSelectOption: useCallback((a0, a1, a2) => {
let r53, r58, r110, r115;
const onboardingResponses3 = GuildOnboardingPromptsStore.getOnboardingResponses(guildId);
const onboardingResponses = onboardingResponses3;
if (a0.singleSelect && a2) {
const r64 = a0.options.find((option) => onboardingResponses.includes(option.id));
let roleIds2 = a1.roleIds;
if (roleIds2 == null) {
roleIds2 = [];
}
let r70 = r64?.roleIds;
if (r70 == null) {
r70 = [];
}
const r71 = Module12.difference(roleIds2, r70);
let r76 = r64?.roleIds;
if (r76 == null) {
r76 = [];
}
let roleIds3 = a1.roleIds;
if (roleIds3 == null) {
roleIds3 = [];
}
r58 = Module12.difference(r76, roleIds3);
r53 = r71;
} else if (a2) {
let roleIds = a1.roleIds;
if (roleIds == null) {
roleIds = [];
}
r58 = [];
r53 = roleIds;
} else {
const r30 = a0.options.filter((option) => onboardingResponses.includes(option.id));
const r16 = r30.filter((item) => a1.id !== item.id);
const r42 = r30.map((item) => item.roleIds).flat().filter(isNotNullish);
const r52 = r16.map((item) => item.roleIds).flat().filter(isNotNullish);
r53 = [];
r58 = Module12.difference(r42, r52);
}
let c26591_0 = a1;
const onboardingResponses2 = onboardingResponses;
if (a0.singleSelect && a2) {
const r121 = a0.options.find((option) => onboardingResponses2.includes(option.id));
let channelIds2 = a1.channelIds;
if (channelIds2 == null) {
channelIds2 = [];
}
let r130 = r121?.channelIds;
if (r130 == null) {
r130 = [];
}
const r131 = Module12.difference(channelIds2, r130);
let r136 = r121?.channelIds;
if (r136 == null) {
r136 = [];
}
let channelIds3 = a1.channelIds;
if (channelIds3 == null) {
channelIds3 = [];
}
r115 = Module12.difference(r136, channelIds3);
r110 = r131;
} else if (a2) {
let channelIds = a1.channelIds;
if (channelIds == null) {
channelIds = [];
}
r115 = [];
r110 = channelIds;
} else {
const r83 = a0.options.filter((option) => onboardingResponses2.includes(option.id));
const r86 = r83.filter((item) => c26591_0.id !== item.id);
const r99 = r83.map((item) => item.channelIds).flat().filter(isNotNullish);
const r109 = r86.map((item) => item.channelIds).flat().filter(isNotNullish);
r110 = [];
r115 = Module12.difference(r99, r109);
}
if (hasNotSetUpChannelOptIn(guildId)) {
r110.push.apply(r110, [...GuildOnboardingPromptsStore.getDefaultChannelIds(guildId)]);
}
const overrides = {
...r110.reduce((acc, item) => {
acc[item] = {
flags: setFlag(UserGuildSettingsStore.getChannelIdFlags(guildId, item), ChannelNotificationSettingsFlags.OPT_IN_ENABLED, true)
};
return acc;
}, {}),
...r115.reduce((acc, item) => {
acc[item] = {
flags: setFlag(UserGuildSettingsStore.getChannelIdFlags(guildId, item), ChannelNotificationSettingsFlags.OPT_IN_ENABLED, false)
};
return acc;
}, {})
};
GuildOnboardingActionCreators.selectOption(guildId, a0.id, a1.id, a2);
Dispatcher.dispatch({
type: "USER_GUILD_SETTINGS_CHANNEL_UPDATE_BULK",
guildId,
overrides
});
GuildOnboardingActionCreators.updateRolesLocal(guildId, r53, r58);
}, [a0])
};
};
@@ -0,0 +1,54 @@
// Metro module 5125 (f5126).
import ChannelStore from "../../stores/ChannelStore";
import Module12 from "../../_bundle/Module12";
import { isNotNullish } from "../../utils/GlobalUtils";
import { useStateFromStoresArray } from "../../_bundle/Module589";
const getFlattenedChannels = function getFlattenedChannels(a0, c14672_0, a2) {
let c14672_4, c14672_5;
let r22 = arguments[3];
if (r22 === void 0) {
r22 = false;
}
let c14672_2 = r22;
c14672_4 = void 0;
c14672_5 = void 0;
let c14672_3 = Module12(ChannelStore.getMutableGuildChannelsForGuild(a0)).values().groupBy("parent_id").value();
const r60 = Module12(a2).map((item) => item.isCategory() ? item.id : item.parent_id).filter(isNotNullish).uniq().map((item) => ChannelStore.getChannel(item)).filter(isNotNullish).sortBy("position").value();
c14672_4 = new Set(r60.map((item) => item.id));
const r70 = a2.filter((item) => !(item.isCategory() || item.parent_id != null && c14672_4.has(item.parent_id)));
c14672_5 = r70;
const r75 = Module12.sortBy(r70, (a0) => {
const isGuildVocal = a0.isGuildVocal();
const position = a0.position;
return isGuildVocal ? position + 10000 : position;
});
c14672_5 = r75;
const _loop = function _loop(a0) {
let c25356_0 = a0;
if (!c14672_2) {
c14672_5.push(a0);
}
let r20 = c14672_0.has(a0.id) ? c14672_3[a0.id] : a2.filter((item) => item.parent_id === c25356_0.id);
if (r20 == null) {
r20 = [];
}
const r10 = Module12.sortBy(r20, (a0) => {
const isGuildVocal = a0.isGuildVocal();
const position = a0.position;
return isGuildVocal ? position + 10000 : position;
});
c14672_5.push.apply(c14672_5, [...r10]);
};
for (const item of r60) {
_loop(item);
}
return r75;
};
export { getFlattenedChannels };
export function useFlattenedChannels(c14673_0, c14673_1, r4 = false) {
let c14673_2 = r4;
return useStateFromStoresArray([ChannelStore], () => {
const r3 = Array;
return getFlattenedChannels(c14673_0, c14673_1, r3.from(c14673_1).map((item) => ChannelStore.getChannel(item)).filter(isNotNullish), c14673_2);
});
}
@@ -0,0 +1,31 @@
// Metro module 9993 (f9994).
import ImpersonateStore from "../impersonate/ImpersonateStore";
import { GuildFeatures } from "../../Constants";
import { useStateFromStores } from "../../_bundle/Module589";
export default function useGuildOnboardingAvailable(a0) {
return useStateFromStores([ImpersonateStore], () => {
if (a0?.id == null) {
return false;
}
let r9 = ImpersonateStore.isFullServerPreview(a0.id);
const isOnboardingEnabled = ImpersonateStore.isOnboardingEnabled(a0.id);
if (r9) {
r9 = isOnboardingEnabled;
}
return r9;
}) || (a0 == null ? void 0 : a0.features.has(GuildFeatures.GUILD_ONBOARDING_HAS_PROMPTS));
};
export function isGuildOnboardingAvailable(a0) {
if (a0 == null) {
return false;
}
let r7 = ImpersonateStore.isFullServerPreview(a0.id);
const isOnboardingEnabled = ImpersonateStore.isOnboardingEnabled(a0.id);
if (r7) {
r7 = isOnboardingEnabled;
}
if (!r7) {
r7 = a0.features.has(GuildFeatures.GUILD_ONBOARDING_HAS_PROMPTS);
}
return r7;
}
@@ -0,0 +1,92 @@
// Metro module 5201 (f5202).
import ChannelStore from "../../stores/ChannelStore";
import GuildRoleStore from "../../stores/GuildRoleStore";
import PermissionStore from "../../stores/PermissionStore";
import RelationshipStore from "../../stores/RelationshipStore";
import UserStore from "../../stores/UserStore";
import { Permissions } from "../../Constants";
import { intl, t } from "../../intl/index.native";
import { useStateFromStoresArray } from "../../_bundle/Module589";
import { computeChannelName } from "../channel/useChannelName";
export default function usePromptHelpText({ guild, prompt, selectedRoleIds, selectedChannelIds, itemHook }) {
let helpTextAdditional;
const id = guild?.id;
const stateFromStoresArray2 = useStateFromStoresArray([GuildRoleStore], () => id != null ? GuildRoleStore.getManyRoles(id, selectedRoleIds) : [], [id, selectedRoleIds]);
const stateFromStoresArray = useStateFromStoresArray([ChannelStore, UserStore, RelationshipStore, PermissionStore], () => Array.from(selectedChannelIds).map((item) => ChannelStore.getChannel(item)).filter((item) => item != null && PermissionStore.can(Permissions.VIEW_CHANNEL, item)).map((item) => computeChannelName(item, UserStore, RelationshipStore, true)));
const r40 = stateFromStoresArray2.map((item) => `@${item.name}`);
let helpText = prompt?.singleSelect ? "" : intl.string(t.JshhEl);
if (stateFromStoresArray.length === 0 && r40.length > 0) {
helpText = r40.length !== 0 ? intl.format(t.Kj5GIT, {
count: r40.length,
extraCount: Math.max(r40.length - 2, 0),
role1: r40[0],
role2: r40[1],
itemHook
}) : "";
helpTextAdditional = "";
} else {
const r56 = stateFromStoresArray.length > 0;
helpTextAdditional = "";
if (r56) {
const r59 = stateFromStoresArray.length !== 0 ? intl.format(t.Rj841R, {
count: stateFromStoresArray.length,
extraCount: Math.max(stateFromStoresArray.length - 2, 0),
channel1: stateFromStoresArray[0],
channel2: stateFromStoresArray[1],
itemHook
}) : "";
helpTextAdditional = r40.length > 0 ? r40.length !== 0 ? intl.format(t.cJZxWf, {
count: r40.length,
extraCount: Math.max(r40.length - 2, 0),
role1: r40[0],
role2: r40[1],
itemHook
}) : "" : "";
helpText = r59;
}
}
return {
helpText,
helpTextAdditional
};
};
export function useCustomizeCommunityPromptHelpText({ guild, prompt, selectedRoleIds: selectedRoleIds2, selectedChannelIds: selectedChannelIds2, itemHook }) {
const id2 = guild?.id;
const stateFromStoresArray = useStateFromStoresArray([GuildRoleStore], () => id2 != null ? GuildRoleStore.getManyRoles(id2, selectedRoleIds2) : [], [id2, selectedRoleIds2]);
const stateFromStoresArray2 = useStateFromStoresArray([ChannelStore, UserStore, RelationshipStore, PermissionStore], () => Array.from(selectedChannelIds2).map((item) => ChannelStore.getChannel(item)).filter((item) => item != null && PermissionStore.can(Permissions.VIEW_CHANNEL, item)).map((item) => computeChannelName(item, UserStore, RelationshipStore, true)));
const r39 = stateFromStoresArray.map((item) => `@${item.name}`);
let helpText = prompt?.singleSelect ? "" : intl.string(t.JshhEl);
if (stateFromStoresArray2.length === 0 && r39.length > 0) {
helpText = intl.format(t.vdtNYa, {
count: r39.length,
extraCount: Math.max(r39.length - 2, 0),
role1: r39[0],
role2: r39[1],
itemHook
});
} else if (stateFromStoresArray2.length > 0 && r39.length === 0) {
helpText = intl.format(t.ZKywGU, {
count: stateFromStoresArray2.length,
extraCount: Math.max(stateFromStoresArray2.length - 2, 0),
channel1: stateFromStoresArray2[0],
channel2: stateFromStoresArray2[1],
itemHook
});
} else if (stateFromStoresArray2.length > 0 && r39.length > 0) {
helpText = intl.format(t.WewRHM, {
channelCount: stateFromStoresArray2.length,
extraChannelCount: Math.max(stateFromStoresArray2.length - 2, 0),
channel1: stateFromStoresArray2[0],
channel2: stateFromStoresArray2[1],
itemHook,
roleCount: r39.length,
extraRoleCount: Math.max(r39.length - 2, 0),
role1: r39[0],
role2: r39[1]
});
}
return {
helpText,
helpTextAdditional: ""
};
}
@@ -0,0 +1,50 @@
// Metro module 9997 (f9998).
import { useMemo } from "react";
import GuildOnboardingPromptsStore from "./GuildOnboardingPromptsStore";
import { useStateFromStoresArray } from "../../_bundle/defaultAreStatesEqual";
export default function useSortedOnboardingPrompts(c17604_0) {
const stateFromStoresArray = useStateFromStoresArray([GuildOnboardingPromptsStore], () => GuildOnboardingPromptsStore.getEnabledOnboardingPrompts(c17604_0));
return useMemo(() => {
let r26, length;
const newOnboardingPrompts = [];
const onboardingPromptsWithNewAnswers = [];
const r8 = [];
const r7 = [];
const r4 = 0 < stateFromStoresArray.length;
let r0 = 0;
let r12 = 0;
let newAnswersCount = 0;
if (r4) {
do {
const r17 = stateFromStoresArray[r0];
const isNew = r17.isNew;
const r20 = r0;
const r21 = r12;
if (isNew) {
newOnboardingPrompts.push(r17);
r26 = r21;
} else if (r17.hasNewAnswers) {
onboardingPromptsWithNewAnswers.push(r17);
r26 = r21 + r17.options.filter((option) => option.isUnseen).length;
} else if (r17.inOnboarding) {
r7.push(r17);
r26 = r21;
} else {
r8.push(r17);
r26 = r21;
}
r0 = r20 + 1;
length = stateFromStoresArray.length;
r12 = r26;
newAnswersCount = r12;
} while (r0 < length);
}
return {
onboardingPromptsRaw: stateFromStoresArray,
newOnboardingPrompts,
onboardingPromptsWithNewAnswers,
newAnswersCount,
onboardingPrompts: r8.concat(r7)
};
}, [stateFromStoresArray]);
};