Files
discord-decomp/modules/favorites/native/AddFavoriteChannelModal.tsx
T
2026-11-01 12:12:55 +02:00

92 lines
4.4 KiB
TypeScript

// Metro module 11881 (f11882).
import { useEffect, useState, useCallback, useMemo } from "react";
import { View } from "react-native";
import { MAX_FAVORITES_ADD_CHANNEL_COUNT } from "../FavoritesConstants";
import { UserRowModes } from "../../main_tabs_v2/native/shared_components/user_list/UserRowConstants";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import Module712 from "../../../_bundle/Module712";
import { useFavoriteAdded } from "../FavoritesHooks";
import useFavoritesGuildChannelFilter from "../hooks/useFavoritesGuildChannelFilter";
import { trackFavoritesGuildAddModalOpened } from "../FavoritesAnalytics";
import { getOrResolveChannelIdFromDestinationId } from "../../share/formatResults";
import { isNotNullish } from "../../../utils/GlobalUtils";
import { addFavoriteChannels } from "../FavoritesActionCreators";
import useWindowDimensions_native from "../../screen/useWindowDimensions.native";
import { isAndroid } from "../../../utils/PlatformUtils";
import SearchableDestinationListHeader from "../../share/native/SearchableDestinationListHeader";
import { intl } from "../../../intl/index.native";
import FavoritesGuild_messages from "../intl/FavoritesGuild.messages";
import ThemedGradient from "../../client_themes/native/ThemedGradient";
import SearchableDestinationList from "../../share/native/SearchableDestinationList";
import { ModalFloatingAction } from "../../../design/components/Modal/native/ModalFloatingAction.native";
import { getFavoritesAddButtonLabel } from "../utils/getFavoritesAddButtonLabel";
import showSearchableDestinationListModal from "../../share/native/showSearchableDestinationListModal";
import ModalActionCreators from "../../../actions/ModalActionCreators";
let useStyles, c8147_12, closeAddFavoriteChannelModal;
const AddFavoriteChannelModal = function AddFavoriteChannelModal(props) {
let state, setState, height;
const { parentId, source } = props;
state = void 0;
setState = void 0;
height = void 0;
const styles = useStyles();
const notifyFavoriteAdded = useFavoriteAdded().notifyFavoriteAdded;
const favoritesGuildChannelFilter = useFavoritesGuildChannelFilter();
useEffect(() => {
trackFavoritesGuildAddModalOpened(source);
}, [source]);
[state, setState] = useState([]);
const length = state.length;
const callback2 = useCallback((a0) => {
setState(a0);
}, []);
const callback = useCallback(async () => {
let c27203_0, c27203_2;
c27203_2 = void 0;
let c30472_0 = (await Promise.all(state.map(getOrResolveChannelIdFromDestinationId))).filter(isNotNullish);
if (c30472_0.length > 0) {
(0, notifyFavoriteAdded)();
c27203_0 = parentId;
if (parentId == null) {
c27203_0 = null;
}
addFavoriteChannels(c30472_0, c27203_0, "modal");
}
(0, closeAddFavoriteChannelModal)();
}, [notifyFavoriteAdded, parentId, state]);
height = useWindowDimensions_native({
ignoreKeyboard: true
}).height;
return <View style={useMemo(() => ({
height: isAndroid() ? height : "100%"
}), [height])}>
<SearchableDestinationListHeader title={intl.string(FavoritesGuild_messages.Rp35U1)} onClose={closeAddFavoriteChannelModal} />
<View style={styles.container}>
<ThemedGradient absolute />
<SearchableDestinationList rowMode={UserRowModes.TOGGLE} initialSelectedDestinations={[]} onSelectedDestinationChange={callback2} channelFilter={favoritesGuildChannelFilter} insetEnd={0} disableGradient disableStickySections disableSelection={length >= MAX_FAVORITES_ADD_CHANNEL_COUNT} />
<ModalFloatingAction isVisible={length > 0} floatingBackgroundColor={styles.container.backgroundColor} text={getFavoritesAddButtonLabel(length)} onPress={callback} />
</View>
</View>;
};
closeAddFavoriteChannelModal = function closeAddFavoriteChannelModal() {
ModalActionCreators.popWithKey(c8147_12);
};
useStyles = createStyles({
container: {
flex: 1,
display: "flex",
backgroundColor: Module712.colors.MOBILE_ACTIONSHEET_BACKGROUND
}
});
c8147_12 = "add-favorite-channel-modal";
export const ADD_FAVORITE_CHANNEL_MODAL_KEY = "add-favorite-channel-modal";
export function openAddFavoriteChannelModal({ parentId: parentId2, source: source2 }) {
showSearchableDestinationListModal(Promise.resolve({
default: AddFavoriteChannelModal
}), {
parentId: parentId2,
source: source2
}, c8147_12);
}
export { closeAddFavoriteChannelModal };