// Metro module 15794 (f15795). import _slicedToArray from "../../../_bundle/_slicedToArray"; import * as Module19 from "react"; import { useRef, useEffect, useCallback, useState, useMemo, useDeferredValue } from "react"; import { View } from "react-native"; import ActionSheetStore from "../../action_sheet/native/ActionSheetStore"; import ChannelListStore from "../../guild_sidebar/ChannelListStore"; import NavigationHistoryStore, { CHANNEL_PREFIX, GUILD_PREFIX, getIdFromHistoryItem } from "../../main_tabs_v2/native/NavigationHistoryStore"; import ActiveJoinedThreadsStore from "../../threads/ActiveJoinedThreadsStore"; import { isGuildSelectableChannelType, isGuildVocalChannelType } from "../../../records/ChannelRecord"; import AuthenticationStore from "../../../stores/AuthenticationStore"; import ChannelStore from "../../../stores/ChannelStore"; import DeveloperExperimentStore from "../../../stores/DeveloperExperimentStore"; import GuildReadStateStore from "../../../stores/GuildReadStateStore"; import GuildStore from "../../../stores/GuildStore"; import PrivateChannelReadStateStore from "../../../stores/PrivateChannelReadStateStore"; import ReadStateStore from "../../../stores/ReadStateStore"; import SortedGuildStore from "../../../stores/SortedGuildStore"; import UserGuildSettingsStore from "../../../stores/UserGuildSettingsStore"; import VoiceStateStore from "../../../stores/VoiceStateStore"; import { AnalyticEvents } from "../../../Constants"; import Module712 from "../../../_bundle/Module712"; import { createStyles } from "../../../design/components/Styles/native/createStyles"; import { PressableHighlight } from "../../../design/void/Pressables/native/Pressables"; import { Text } from "../../../design/components/Text/native/Text"; import { useStateFromStores, useStateFromStoresArray } from "../../../_bundle/Module589"; import * as _ReanimatedRexport from "../../reanimated/ReanimatedRexport"; import { useSharedValue, useAnimatedReaction } from "../../reanimated/ReanimatedRexport"; import { getBestActiveInput } from "../../../utils/native/ChatInputUtils"; import { SearchField } from "../../../design/components/TextField/native/SearchField.native"; import { intl, t } from "../../../intl/index.native"; import { FlashIcon } from "../../../design/components/Icon/native/redesign/generated/FlashIcon"; import { BellIcon } from "../../../design/components/Icon/native/redesign/generated/BellIcon"; import { StaffBadgeIcon } from "../../../design/components/Icon/native/redesign/generated/StaffBadgeIcon"; import { isAndroid } from "../../../utils/PlatformUtils"; import { navigateToDevTools } from "../../devtools/native/components/DevToolsNavigator"; import hideLaunchPad from "./hideLaunchPad"; import createAutocompleterResultForChannelId from "../../autocompleter/createAutocompleterResultForChannelId"; import { getSelectedGuildFromRoute, getSelectedChannelFromRoute } from "../../main_tabs_v2/helpers/NavigationRouteUtils.native"; import { getHasImportantUnread } from "../../read_states/ReadStateUtils"; import { AutocompleterResultTypes } from "../../autocompleter/index"; import useWindowDimensions_native from "../../screen/useWindowDimensions.native"; import useSafeAreaInsets_native from "../../safe_area/useSafeAreaInsets.native"; import Autocompleter from "../../autocompleter/Autocompleter"; import RouteManager from "../../routing/RouteManager"; import AnalyticsUtils from "../../../utils/AnalyticsUtils"; import LaunchPadUnreadServers from "./LaunchPadUnreadServers"; import { SearchResults, InitialResults } from "./LaunchPadSearchResults"; import DevToolsContent from "../../devtools/native/components/DevToolsContent"; import LaunchPadMembers from "./LaunchPadMembers"; import LaunchPadNotificationCenter from "./LaunchPadNotificationCenter"; import { $forInKeys } from "../../../_hermes/prelude"; let useStyles, TabHeader, c11290_31, __initData, __initData2, Component, createAndAppendChannel, unreads, c11290_37, __initData3, __initData4; const TabButton = function TabButton(props) { const { onPress: onPress2, icon: icon2, accessibilityLabel, selected, style } = props; const styles2 = useStyles(); return {icon2(selected ? Module712.colors.INTERACTIVE_TEXT_ACTIVE : Module712.colors.INTERACTIVE_TEXT_DEFAULT)} ; }; TabHeader = function TabHeader(props) { const text = props.text; return {text}; }; createAndAppendChannel = function createAndAppendChannel(a0, a1, a2) { if (!a1.has(a0)) { const autocompleterResultForChannelId = createAutocompleterResultForChannelId(a0); if (autocompleterResultForChannelId != null) { a2.push(autocompleterResultForChannelId); a1.add(a0); } } }; const md = Module712.radii.md; useStyles = createStyles({ wrapper: { flexGrow: 0, marginHorizontal: 16, marginBottom: 16, flexShrink: 1, borderRadius: 24, backgroundColor: Module712.colors.BACKGROUND_BASE_LOW, flexDirection: "column", justifyContent: "flex-start", alignItems: "stretch", overflow: "hidden" }, launchPadContent: { flex: -1, overflow: "hidden", borderBottomLeftRadius: 24, borderBottomRightRadius: 24 }, header: { paddingHorizontal: 16, paddingTop: 16, flexDirection: "row", flexShrink: 0, flexGrow: 0 }, subheader: { flexGrow: 1, flexShrink: 1, flexDirection: "row", alignItems: "center", alignSelf: "center", paddingStart: 8 }, tabs: { marginStart: 8, flexDirection: "row", flexShrink: 0, backgroundColor: Module712.colors.INPUT_BACKGROUND_DEFAULT, borderRadius: md, padding: 5, alignItems: "stretch", justifyContent: "center", gap: 5, borderWidth: 1, borderColor: Module712.colors.INPUT_BORDER_DEFAULT }, tab: { width: 32, height: 32, borderRadius: md - 5, alignItems: "center", justifyContent: "center" }, tabSelected: { backgroundColor: Module712.colors.BACKGROUND_BASE_LOW } }); c11290_31 = { SEARCH: 0, 0: "SEARCH", MEMBERS: 1, 1: "MEMBERS", NOTIFICATIONS: 2, 2: "NOTIFICATIONS", DEV_TOOLS: 3, 3: "DEV_TOOLS" }; __initData = { code: "function LaunchPadTsx1(){const{sharedState}=this.__closure;return sharedState.get();}" }; __initData2 = { code: "function LaunchPadTsx2(sharedState){const{keyboardShown,runOnJS,setFocused}=this.__closure;if(!keyboardShown.get()&&sharedState>0.75){runOnJS(setFocused)(true);}else if(keyboardShown.get()&&sharedState<=0){runOnJS(setFocused)(false);}}" }; Component = Module19.memo(function({ tab, setTab, updateQuery, sharedState, searchRef }) { let ref, sharedValue, ref2, callback, stateFromStores; ref = void 0; sharedValue = void 0; ref2 = void 0; callback = void 0; stateFromStores = void 0; const styles2 = useStyles(); const stateFromStores4 = useStateFromStores([DeveloperExperimentStore], () => DeveloperExperimentStore.isDeveloper); ref = useRef(false); sharedValue = useSharedValue(false); ref2 = useRef(tab); useEffect(() => { ref2.current = tab; }); callback = useCallback((a0, a1) => { L16: { if (a0 && ref2.current === c11290_31.SEARCH) { const bestActiveInput2 = getBestActiveInput(); ref.current = (bestActiveInput2 == null ? void 0 : bestActiveInput2.isFocused()) === true; if (searchRef.current == null) { break L16; } sharedValue.set(true); const current2 = searchRef.current; if (current2 == null) { break L16; } current2.focus(); } else if (!a0) { if (ref.current && !a1) { const bestActiveInput = getBestActiveInput(); if (bestActiveInput != null) { bestActiveInput.focus(); } } const current = searchRef.current; if (current != null) { current.blur(); } ref.current = false; sharedValue.set(false); } } }, [sharedValue, searchRef]); stateFromStores = useStateFromStores([ActionSheetStore], () => ActionSheetStore.isOpen()); useEffect(() => { callback(!stateFromStores, stateFromStores); }, [stateFromStores, callback]); useEffect(() => { if (tab === c11290_31.SEARCH && sharedState.get() === 1) { callback(true); } }, [tab, sharedState, callback]); const T = () => sharedState.get(); T.__closure = { sharedState }; T.__workletHash = 17067823098320; T.__initData = __initData; const r63 = function(a0) { if (!sharedValue.get() && a0 > 0.75) { _ReanimatedRexport.runOnJS(callback)(true); } else if (sharedValue.get() && a0 <= 0) { _ReanimatedRexport.runOnJS(callback)(false); } }; r63.__closure = { keyboardShown: sharedValue, runOnJS: _ReanimatedRexport.runOnJS, setFocused: callback }; r63.__workletHash = 3784684686013; r63.__initData = __initData2; useAnimatedReaction(T, r63); return {tab === c11290_31.SEARCH ? : tab === c11290_31.MEMBERS ? : tab === c11290_31.NOTIFICATIONS ? : } } accessibilityLabel={intl.string(t.JqV7IC)} onPress={() => { setTab(c11290_31.SEARCH); const current = searchRef.current; if (current != null) { current.focus(); } }} selected={tab === c11290_31.SEARCH} /> } accessibilityLabel={intl.string(t.HcoRu0)} onPress={() => { setTab(c11290_31.NOTIFICATIONS); const current = searchRef.current; if (current != null) { current.blur(); } }} selected={tab === c11290_31.NOTIFICATIONS} /> {stateFromStores4 ? } accessibilityLabel="Dev Tools" selected={tab === c11290_31.DEV_TOOLS} onPress={() => { if (isAndroid()) { navigateToDevTools(); hideLaunchPad(); } else { setTab(c11290_31.DEV_TOOLS); } const current = searchRef.current; if (current != null) { current.blur(); } }} /> : null} ; }); unreads = []; c11290_37 = [AutocompleterResultTypes.GUILD, AutocompleterResultTypes.TEXT_CHANNEL, AutocompleterResultTypes.GROUP_DM, AutocompleterResultTypes.VOICE_CHANNEL, AutocompleterResultTypes.USER]; __initData3 = { code: "function LaunchPadTsx3(){const{sharedState}=this.__closure;return sharedState.get()===0;}" }; __initData4 = { code: "function LaunchPadTsx4(hidden,prevHidden){const{runOnJS,clearQuery,cancelTimeout}=this.__closure;if(hidden===prevHidden)return;if(hidden&&hidden!==prevHidden){runOnJS(clearQuery)();}else if(!hidden&&hidden!==prevHidden){runOnJS(cancelTimeout)();}}" }; const r141 = Module19.memo(function LaunchPad(props) { let r250; let state, state2, setState2; let visible, setState3, setState4, state3; let c22455_0, visible2, selectedGuildFromRoute, selectedChannelFromRoute, state4, setState5, ref3, stateFromStores2, ref4, stateFromStoresArray, ref5, stateFromStoresArray2, stateFromStores3, ref6, memo, ref7, memo2; let styles, height, top, bottom; let callback2, ref8, sharedState2, ref9, callback3, callback4; const { visible: visible3, sharedState: sharedState3 } = props; state = void 0; state2 = void 0; setState2 = void 0; const styles2 = useStyles(); const [expandedHistory, setState] = useState(false); const callback5 = useCallback(() => setState((prevState) => !prevState), []); const ref10 = useRef(null); visible = visible3; setState3 = void 0; setState4 = void 0; state3 = void 0; let state5; [state5, setState3] = useState(""); let results; [results, setState4] = useState(unreads); state3 = _slicedToArray(useState(() => new Autocompleter((a0, a1) => { if (a1.trim().trim() === "") { setState4(unreads); } else { setState4(a0); } }, c11290_37, void 0, { frecencyBoosters: true })), 1)[0]; useEffect(() => () => state3.clean(), [state3]); useEffect(() => RouteManager.addRouteChangeListener(() => { const set = new Set([`user:${AuthenticationStore.getId()}`]); const selectedGuildFromRoute2 = getSelectedGuildFromRoute(); if (selectedGuildFromRoute2 != null) { set.add(`guild:${selectedGuildFromRoute2}`); } state3.setOptions({ blacklist: set }, true); }), [state3]); useEffect(() => { if (visible) { state3.resume(); } else { state3.pause(); } }, [visible, state3]); const callback6 = useCallback((a0) => { setState3(a0); state3.search(a0); }, [state3]); state = state5; const r5 = state.trim().length > 0; c22455_0 = r5; visible2 = visible; selectedGuildFromRoute = void 0; selectedChannelFromRoute = void 0; state4 = void 0; setState5 = void 0; ref3 = void 0; stateFromStores2 = void 0; ref4 = void 0; stateFromStoresArray = void 0; ref5 = void 0; stateFromStoresArray2 = void 0; stateFromStores3 = void 0; ref6 = void 0; memo = void 0; ref7 = void 0; memo2 = void 0; selectedGuildFromRoute = getSelectedGuildFromRoute(); selectedChannelFromRoute = getSelectedChannelFromRoute(); [state4, setState5] = useState(void 0); useEffect(() => { if (!visible2) { setState5(void 0); } }, [visible]); ref3 = useRef([]); stateFromStores2 = useStateFromStores([PrivateChannelReadStateStore], () => visible2 ? PrivateChannelReadStateStore.getUnreadPrivateChannelIds() : ref3.current); useEffect(() => { ref3.current = stateFromStores2; }); ref4 = useRef([]); stateFromStoresArray = useStateFromStoresArray([GuildReadStateStore, SortedGuildStore], () => { if (!visible2) { return ref4.current; } const r27 = []; const r4 = []; for (const item of SortedGuildStore.getFlattenedGuildIds()) { if (item !== selectedGuildFromRoute) { if (GuildReadStateStore.getMentionCount(item) > 0) { r27.push(item); } else if (GuildReadStateStore.hasUnread(item)) { r4.push(item); } } } r27.push.apply(r27, [...r4]); return r27; }, [visible, selectedGuildFromRoute]); useEffect(() => { ref4.current = stateFromStoresArray; }); ref5 = useRef([]); stateFromStoresArray2 = useStateFromStoresArray([ChannelListStore, VoiceStateStore, ReadStateStore, UserGuildSettingsStore, ActiveJoinedThreadsStore], () => { let r7 = state4; if (state4 == null) { r7 = selectedGuildFromRoute; } if (!c22455_0 && r7 != null) { if (!visible2) { return ref5.current; } const r35 = []; let c28158_0 = r35; const r6 = []; let c28158_1 = r6; const r4 = []; let c28158_2 = r4; const r5 = []; let c28158_3 = r5; for (const item of Object.values(ActiveJoinedThreadsStore.getActiveJoinedUnreadThreadsForGuild(r7))) { for (const key in item) { r6.push(key); } } ChannelListStore.getGuild(r7).guildChannels.forEachChannel((a0) => { L16: { const isGuildVocalChannelType2 = isGuildVocalChannelType(a0.type); if (!(!isGuildVocalChannelType2 && !isGuildSelectableChannelType(a0.type)) && !UserGuildSettingsStore.isChannelMuted(a0.guild_id, a0.id)) { if (a0.parent_id != null && UserGuildSettingsStore.isChannelMuted(a0.guild_id, a0.parent_id)) { break L16; } if (ReadStateStore.getMentionCount(a0.id) > 0) { c28158_0.push(a0.id); } else { if (!isGuildVocalChannelType2 && getHasImportantUnread(a0)) { c28158_1.push(a0.id); break L16; } if (isGuildVocalChannelType2) { const r48 = $forInKeys(VoiceStateStore.getVoiceStatesForChannel(a0.id)); let r1 = 0; const length = r48.length; if (r48 !== void 0) { const r50 = r1 < length ? r48[r1++] : void 0; if (r50 !== void 0) { c28158_3.push(a0.id); } } } else if (ReadStateStore.hasUnread(a0.id)) { c28158_2.push(a0.id); } } } } }, { ignoreRecents: true, withThreads: true }); r35.push.apply(r35, [...r6]); r35.push.apply(r35, [...r5]); r35.push.apply(r35, [...r4]); return r35; } return []; }, [r5, selectedGuildFromRoute, visible, state4]); useEffect(() => { ref5.current = stateFromStoresArray2; }); stateFromStores3 = useStateFromStores([NavigationHistoryStore], () => NavigationHistoryStore.getState().history); ref6 = useRef([]); memo = useMemo(() => { if (!c22455_0 && visible2) { const set = new Set(stateFromStoresArray); if (selectedGuildFromRoute != null) { set.add(selectedGuildFromRoute); } const r26 = []; const set2 = new Set(); let r0 = stateFromStores3.length - 1; while (0 <= r0) { const r18 = stateFromStores3[r0]; const r1 = r0; if (r18 == null) { break; } const r37 = r18.startsWith(CHANNEL_PREFIX) ? ChannelStore.getChannel(getIdFromHistoryItem(r18))?.guild_id : getIdFromHistoryItem(r18); if (!(r37 == null || set.has(r37) || set2.has(r37) || GuildStore.getGuild(r37) == null)) { set2.add(r37); r26.push(r37); } if (r26.length >= 20) { break; } r0 = r1 - 1; } return r26; } return ref6.current; }, [r5, visible, selectedGuildFromRoute, stateFromStoresArray, stateFromStores3]); useEffect(() => { ref6.current = memo; }); ref7 = useRef(void 0); memo2 = useMemo(() => { if (c22455_0) { return void 0; } if (visible2) { const r28 = (function getChannelHistory(a0, a1) { const r10 = a1 != null ? `${CHANNEL_PREFIX}${a1}` : void 0; const r19 = []; let r0 = a0.length - 1; while (0 <= r0) { const r21 = a0[r0]; const r1 = r0; if (r21 == null) { break; } L10: { if (!r21.startsWith(GUILD_PREFIX) && r21 !== r10) { const idFromHistoryItem = getIdFromHistoryItem(r21); const basicChannel = ChannelStore.getBasicChannel(idFromHistoryItem); if (basicChannel != null) { if (basicChannel.guild_id != null && GuildStore.getGuild(basicChannel.guild_id) == null) { break L10; } r19.push(idFromHistoryItem); if (r19.length >= 20) { break; } } } } r0 = r1 - 1; } return r19; })(stateFromStores3, selectedChannelFromRoute); const channelHistory = []; if (state4 == null) { const set = new Set(); for (const item of r28) { createAndAppendChannel(item, set, channelHistory); } } const unreads2 = []; const set2 = new Set(); if (stateFromStoresArray2.length > 0) { for (const item2 of stateFromStoresArray2) { createAndAppendChannel(item2, set2, unreads2); } } return channelHistory.length > 0 ? { channelHistory, unreads: unreads2 } : unreads2.length > 0 ? { channelHistory, unreads: unreads2 } : void 0; } return ref7.current; }, [r5, visible, stateFromStoresArray2, selectedChannelFromRoute, state4, stateFromStores3]); useEffect(() => { ref7.current = memo2; }); const deferredValue = useDeferredValue(memo2); [state2, setState2] = useState(false); const [tab2, setTab2] = useState(c11290_31.SEARCH); styles = void 0; height = void 0; top = void 0; bottom = void 0; styles = useStyles(); height = useWindowDimensions_native().height; const safeAreaInsets_native = useSafeAreaInsets_native(); top = safeAreaInsets_native.top; bottom = safeAreaInsets_native.bottom; const memo3 = useMemo(() => [styles.wrapper, { maxHeight: height - top - bottom - 16 }], [height, top, bottom, styles]); useEffect(() => { if (state.length > 0 && !state2) { AnalyticsUtils.track(AnalyticEvents.LAUNCHPAD_SEARCHED); setState2(true); } else if (state.length === 0) { setState2(false); } }, [state, setState2, state2]); callback2 = callback6; ref8 = ref10; sharedState2 = sharedState3; ref9 = void 0; callback3 = void 0; callback4 = void 0; ref9 = useRef(-1); callback3 = useCallback(() => { clearTimeout(ref9.current); ref9.current = setTimeout(() => { clearTimeout(ref9.current); callback2(""); const current = ref8.current; if (current != null) { current.setText(""); } }, 100); }, [callback2, ref8]); callback4 = useCallback(() => { clearTimeout(ref9.current); }, []); useEffect(() => () => clearTimeout(ref9.current), []); const l = () => sharedState2.get() === 0; l.__closure = { sharedState: sharedState2 }; l.__workletHash = 7315121230879; l.__initData = __initData3; const i = function i(a0, a1) { L8: { const r0 = a0 !== a1; if (r0) { if (a0 && r0) { _ReanimatedRexport.runOnJS(callback3)(); break L8; } if (!(a0 ? a0 : a0 === a1)) { _ReanimatedRexport.runOnJS(callback4)(); } } } }; i.__closure = { runOnJS: _ReanimatedRexport.runOnJS, clearQuery: callback3, cancelTimeout: callback4 }; i.__workletHash = 6379173436444; i.__initData = __initData4; useAnimatedReaction(l, i); const r224 = state.trim().length > 0; const r232 = [, state.trim().length === 0 && tab2 === c11290_31.SEARCH && , ,]; if (tab2 === c11290_31.SEARCH && r224) { if (results == null) { results = unreads; } r250 = ; } else if (tab2 === c11290_31.SEARCH) { let unreads2 = deferredValue?.unreads; if (unreads2 == null) { unreads2 = unreads; } let history2 = deferredValue?.channelHistory; if (history2 == null) { history2 = unreads; } r250 = ; } else { r250 = tab2 === c11290_31.DEV_TOOLS ? : tab2 === c11290_31.MEMBERS ? : ; } r232[2] = {r250}; return {r232}; }); export default r141;