Files
discord-decomp/modules/premium/referral_program/native/ReferralProgramShareActionSheet.tsx
T
2026-11-01 12:12:55 +02:00

279 lines
11 KiB
TypeScript

// Metro module 12475 (f12476).
import _slicedToArray from "../../../../_bundle/_slicedToArray";
import { useRef, useState, useMemo, useLayoutEffect, useCallback } from "react";
import { View } from "react-native";
import UserStore from "../../../../stores/UserStore";
import ReferralTrialStore from "../../ReferralTrialStore";
import { AnalyticEvents } from "../../../../Constants";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../_bundle/Module712";
import { useStateFromStores } from "../../../../_bundle/Module589";
import useDebounce from "../../../../hooks/useDebounce";
import Module38 from "../../../../_bundle/Module38";
import { isNotNullish } from "../../../../utils/GlobalUtils";
import makeUserListPillData from "../../../main_tabs_v2/native/shared_components/user_list/makeUserListPillData";
import { useReferralProgramEligibleUsers } from "../hooks/useReferralProgramEligibleUsers";
import { intl, t } from "../../../../intl/index.native";
import { AccessibilityAnnouncer } from "../../../../_bundle/Module3902";
import { buildReferralUserRow } from "./ReferralProgramShareActionSheetUtils";
import useAnalyticsLocations from "../../../app_analytics/useAnalyticsLocations";
import AnalyticsLocation from "../../../app_analytics/AnalyticsLocation";
import AnalyticsUtils from "../../../../utils/AnalyticsUtils";
import { createReferralTrials } from "../../ReferralTrialActionCreators";
import ActionSheetActionCreators from "../../../action_sheet/native/ActionSheetActionCreators";
import "../../../../_bundle/asyncRequire";
import { presentError } from "../../../toast/native/ToastUtils";
import { BottomSheetTitleHeader } from "../../../../design/components/Sheet/native/BottomSheetTitleHeader.native";
import { Text } from "../../../../design/components/Text/native/Text";
import FastImage from "../../../../components_native/common/FastImage";
import Module12480 from "../../../../_bundle/Module12480";
import Module12481 from "../../../../_bundle/Module12481";
import { useUserListActionsProps } from "../../../main_tabs_v2/native/shared_components/user_list/SearchableUserListActions";
import { ActivityIndicator } from "../../../../design/components/ActivityIndicator/native/ActivityIndicator.native";
import { Button } from "../../../../design/components/Button/native/Button.native";
import { BottomSheet } from "../../../../design/components/Sheet/native/BottomSheet.native";
import TagListInput_native from "../../../../design/components/TagListInput/native/TagListInput.native";
import { UsersFastList } from "../../../main_tabs_v2/native/shared_components/user_list/UsersFastList";
let useStyles;
let env8621 = {};
const mapToUser = function mapToUser(a0) {
return [a0, UserStore.getUser(a0)];
};
useStyles = createStyles({
searchBarContainer: {
paddingHorizontal: Module712.space.PX_16,
paddingBottom: Module712.space.PX_24
},
searchBarRowContainer: {
paddingTop: Module712.space.PX_8
},
header: {
height: Module712.space.PX_64
},
subtitle: {
textAlign: "center",
paddingHorizontal: Module712.space.PX_16,
paddingBottom: Module712.space.PX_8
},
centeredContainer: {
alignItems: "center"
},
errorImage: {
height: 200,
width: 180,
marginVertical: Module712.space.PX_16
},
emptyImage: {
height: 200,
width: 240,
marginTop: Module712.space.PX_16
},
footer: {
paddingHorizontal: Module712.space.PX_16,
paddingBottom: Module712.space.PX_48
}
});
export default function ReferralProgramShareActionSheet() {
let c19857_0;
let env19856 = {
$parent: env8621
};
const styles = useStyles();
const ref = useRef(null);
env19856[0] = ref;
const stateFromStores = useStateFromStores([ReferralTrialStore], () => ReferralTrialStore.getReferralsRemaining());
env19856[1] = stateFromStores;
const [state, onChangeText] = useState("");
const r49 = _slicedToArray(useState([]), 2);
const r30 = r49[0];
env19856[2] = r30;
env19856[3] = r49[1];
const debounce = useDebounce(state, 400);
const r56 = _slicedToArray(useState(false), 2);
let loading = r56[0];
env19856[4] = r56[1];
Module38(stateFromStores != null, "Referrals remaining should not be null");
const memo = useMemo(() => {
const r3 = Map;
const r5 = env19856[2];
return new r3(r5 == null ? void 0 : r5.map(mapToUser));
}, [r30]);
env19856[5] = memo;
const memo3 = useMemo(() => Array.from(env19856[5].values()).filter(isNotNullish).map(makeUserListPillData), [memo]);
env19856[6] = memo3;
useLayoutEffect(() => {
const current = env19856[0].current;
if (current != null) {
current.scrollToTop(false);
}
}, [state]);
const referralProgramEligibleUsers = useReferralProgramEligibleUsers({
searchQuery: debounce,
selectedUsers: memo,
limit: 15
});
const eligibleUsers = referralProgramEligibleUsers.eligibleUsers;
env19856[7] = eligibleUsers;
const fetchUsers = referralProgramEligibleUsers.fetchUsers;
env19856[8] = fetchUsers;
const isFetching = referralProgramEligibleUsers.isFetching;
env19856[9] = isFetching;
const hasError = referralProgramEligibleUsers.hasError;
env19856[10] = hasError;
const resendUsers = referralProgramEligibleUsers.resendUsers;
env19856[11] = resendUsers;
const memo4 = useMemo(() => env19856[2].filter((item) => !env19856[11].has(item)), [r30, resendUsers]);
env19856[12] = memo4;
const memo2 = useMemo(() => env19856[9] && !env19856[10] && env19856[7].length === 0, [isFetching, hasError, eligibleUsers]);
const r34 = intl.string(t.DXgoi2);
const callback2 = useCallback((c27293_0) => {
(0, env19856[3])((a0) => {
const indexOf = a0.indexOf;
const r9 = indexOf.call(a0, c27293_0.id);
const r10 = [...a0];
if (r9 === -1) {
r10.push(c27293_0.id);
} else {
r10.splice(r9, 1);
}
return r10;
});
}, []);
env19856[13] = callback2;
const callback = useCallback((a0) => {
const r7 = env19856[6][a0];
const user = UserStore.getUser(r7.id);
if (user != null) {
(0, env19856[13])(user);
AccessibilityAnnouncer.announce(intl.formatToPlainString(t.srlxB8, {
text: r7.text
}));
}
}, [callback2, memo3]);
const memo5 = useMemo(() => [env19856[7].length], [eligibleUsers]);
const callback3 = useCallback(() => ({
type: "section",
props: {
hideTitle: true
}
}), []);
const callback4 = useCallback((a0, a1) => buildReferralUserRow({
eligibleUsers: env19856[7],
row: a1,
selectedUserIds: env19856[2],
resendUsers: env19856[11],
referralsRemaining: env19856[1],
selectedNotResendUsers: env19856[12],
onSelectUser: env19856[13]
}), [eligibleUsers, callback2, r30, resendUsers, stateFromStores, memo4]);
const analyticsLocations = useAnalyticsLocations(AnalyticsLocation.PREMIUM_MARKETING_REFERALL_PROGRAM_SHARE_MODAL).analyticsLocations;
env19856[14] = analyticsLocations;
c19857_0 = void 0;
c19857_0 = async (c30521_0) => {
let c30521_1, c30521_2;
let c30521_3 = 0;
const r15 = void 0;
L10: {
try {
let env31656;
c30521_2 = r15;
const r31 = env31656 = {};
c30521_1 = r31;
env31656[0] = c30521_0;
env31656[1] = void 0;
c30521_3 = 1;
(0, env19856[4])(true);
AnalyticsUtils.track(AnalyticEvents.REFERRAL_PROGRAM_SHARE_CTA_CLICKED, {
location_stack: env19856[14]
});
env31656[1] = await createReferralTrials(c30521_0.map((item) => item.id));
(0, env19856[4])(false);
ActionSheetActionCreators.openLazy(import("./ReferralProgramShareConfirmationActionSheet"), "referral-program-share-action-sheet", {
selectedUsers: env31656[0],
trialCreationResult: env31656[1]
});
c30521_3 = 0;
} catch ($e) {
let r30 = $e;
if (c30521_3 !== 0) {
while (true) {
try {
c30521_3 = 0;
(0, env19856[4])(false);
presentError(intl.string(t.R0RpRX));
break L10;
} catch ($e) {
r30 = $e;
if (c30521_3 === 0) {
break;
}
}
}
}
throw r30;
}
}
};
env19856[15] = useCallback(function() {
return c19857_0.apply(this, arguments);
}, [analyticsLocations]);
const r144 = <View style={styles.header}>
<BottomSheetTitleHeader title={useMemo(() => env19856[1] === 0 ? intl.string(t.SY9tyI) : intl.string(t["2dVCLl"]), [stateFromStores])} />
<Text variant="text-xs/medium" color="text-default" lineClamp={2} style={styles.subtitle}>{r34}</Text>
</View>;
const header = hasError ? <View style={styles.centeredContainer}>
<FastImage source={{
uri: Module12480
}} resizeMode="contain" style={styles.errorImage} />
<Text variant="heading-xl/bold" style={styles.subtitle}>
{intl.string(t.a9HOKg)}
</Text>
<Text variant="text-md/medium" color="text-default" style={styles.subtitle}>
{intl.string(t.JjjeZb)}
</Text>
</View> : eligibleUsers.length === 0 && debounce.length > 0 ? <View style={styles.centeredContainer}>
<FastImage source={{
uri: Module12481
}} resizeMode="contain" style={styles.emptyImage} />
<Text variant="heading-xl/bold" style={styles.subtitle}>
{intl.string(t["PFp+aJ"])}
</Text>
<Text variant="text-md/medium" color="text-default" style={styles.subtitle}>
{intl.string(t.eBIGB4)}
</Text>
</View> : r144;
const userListActionsProps = useUserListActionsProps({
actions: [],
style: state.trim().length > 0 ? void 0 : styles.searchBarRowContainer
});
const { renderHeader, headerSize } = userListActionsProps;
const callback5 = useCallback((a0) => {
if (a0.nativeEvent.contentOffset.y + a0.nativeEvent.layoutMeasurement.height >= a0.nativeEvent.contentSize.height - 150) {
(0, env19856[8])();
}
}, [fetchUsers]);
const r254 = <ActivityIndicator />;
const props = {
size: "lg",
text: intl.string(t.ItpQxk),
onPress: () => {
(0, env19856[15])(Array.from(env19856[5].values()));
},
loading,
disabled: null
};
if (!loading) {
loading = r30.length === 0;
}
props.disabled = loading;
return <BottomSheet scrollable startExpanded header={header} footer={<View style={[styles.footer]}>
<Button {...props} />
</View>}>
<View style={styles.searchBarContainer}>
<TagListInput_native onChangeText={onChangeText} onRemove={callback} tags={memo3} placeholder={intl.string(t.Kd5RaI)} />
</View>
{memo2 ? r254 : null}
<UsersFastList ref={ref} inActionSheet sections={memo5} getItemProps={callback4} getSectionProps={callback3} renderListHeader={renderHeader} listHeaderSize={headerSize} insetEnd={80} onScroll={callback5} />
</BottomSheet>;
};