// Metro module 15200 (f15201). import { useMemo, useRef, useState, useEffect } from "react"; import ChannelRTCStore from "../calls/ChannelRTCStore"; import VoiceStateRecord from "../../records/VoiceStateRecord"; import AuthenticationStore from "../../stores/AuthenticationStore"; import ChannelStore from "../../stores/ChannelStore"; import GuildMemberStore from "../../stores/GuildMemberStore"; import RTCConnectionDesyncStore from "../../stores/RTCConnectionDesyncStore"; import RTCConnectionStore from "../../stores/RTCConnectionStore"; import UserStore from "../../stores/UserStore"; import VoiceStateStore from "../../stores/VoiceStateStore"; import { sortedIndexBy } from "../../_bundle/Module12"; import { useStateFromStores, useStateFromStoresArray } from "../../_bundle/Module589"; import { isNotNullish } from "../../utils/GlobalUtils"; import { sortKey } from "../calls/ChannelRTCParticipants"; function $mk95679($env) { return () => { const r3 = $env[0]; const r1 = $env.$parent; return r3 === r1[10].getChannelId() ? r1[9].getDesyncedParticipants() : null; }; } let env10790 = {}; export function useEnsureSyncedChannelVoiceStates(c21755_0, a1) { let stateFromStoresArray, stateFromStoresArray2, stateFromStores2, memo; let c21755_1 = a1; const stateFromStores = useStateFromStores([RTCConnectionDesyncStore, RTCConnectionStore], () => c21755_0 === RTCConnectionStore.getChannelId() ? RTCConnectionDesyncStore.getDesyncedVoiceStates() : null); stateFromStoresArray = useStateFromStoresArray([ChannelRTCStore], () => c21755_0 == null ? [] : [...ChannelRTCStore.getGuildRingingUsers(c21755_0)]); stateFromStoresArray2 = useStateFromStoresArray([UserStore], () => stateFromStoresArray.map((item) => UserStore.getUser(item)).filter(isNotNullish)); stateFromStores2 = useStateFromStores([ChannelStore], () => ChannelStore.getBasicChannel(c21755_0)); memo = useMemo(() => stateFromStoresArray2.map((item) => ({ voiceState: new VoiceStateRecord(item.id), user: item, member: stateFromStores2?.guild_id != null ? GuildMemberStore.getMember(stateFromStores2?.guild_id, item.id) : null, nick: item.globalName, comparator: item.globalName, _isPlaceholder: false })), [stateFromStoresArray2, stateFromStores2?.guild_id]); return useMemo(() => (function syncChannelVoiceStates(a0, a1, a2) { if (!(a0 != null && a0.length !== 0) && a2.length === 0) { return a1; } const r26 = []; let c30853_0 = r26; const set = new Set(); let c30853_1 = set; for (const item of a1) { r26.push(item); set.add(item.user.id); } if (a0 != null) { a0.forEach((item) => { c30853_0.splice(sortedIndexBy(c30853_0, item, (a0) => a0.comparator), 0, item); }); } if (a2.length > 0) { a2.forEach((item) => { if (!c30853_1.has(item.user.id)) { c30853_0.splice(sortedIndexBy(c30853_0, item, (a0) => a0.comparator), 0, item); } }); } return r26; })(stateFromStores, c21755_1, memo), [stateFromStores, a1, memo]); } export function useDesyncedChannelParticipants(a0) { let env21754; const r1 = env21754 = { $parent: env10790 }; env21754[0] = a0; return useStateFromStores([RTCConnectionDesyncStore, RTCConnectionStore], $mk95679(r1)); } export function useEnsureSyncedChannelParticipants(a0, a1) { let env21757; const r3 = env21757 = { $parent: env10790 }; env21757[0] = a0; const stateFromStores3 = useStateFromStores([RTCConnectionDesyncStore, RTCConnectionStore], $mk95679(r3)); return useMemo(() => { let r10 = a1; if (stateFromStores3 != null) { const length = stateFromStores3.length; r10 = a1; if (length !== 0) { const r12 = [...a1]; let c27962_0 = r12; stateFromStores3.forEach((item) => { c27962_0.splice(sortedIndexBy(c27962_0, item, (a0) => sortKey(a0)), 0, item); }); r10 = r12; } } return r10; }, [stateFromStores3, a1]); } export function useIsRTCDisconnectedUIVisible(a0, c21758_1) { let stateFromStores4, ref, stateFromStores5, stateFromStores6; const stateFromStores7 = useStateFromStores([AuthenticationStore], () => AuthenticationStore.getId() === c21758_1); stateFromStores4 = useStateFromStores([RTCConnectionStore], () => RTCConnectionStore.getChannelId()); ref = useRef(null); const [state, setState] = useState(false); const [state2, setState2] = useState(false); stateFromStores5 = useStateFromStores([RTCConnectionStore, VoiceStateStore], () => c21758_1 != null && a0 != null && RTCConnectionStore.getChannelId() === a0 && VoiceStateStore.isInChannel(a0, c21758_1) != null && RTCConnectionStore.isUserConnected(c21758_1)); stateFromStores6 = useStateFromStores([RTCConnectionStore, VoiceStateStore], () => c21758_1 != null && a0 != null && RTCConnectionStore.getChannelId() === a0 && VoiceStateStore.isInChannel(a0, c21758_1) != null && !RTCConnectionStore.isUserConnected(c21758_1)); useEffect(() => { if (stateFromStores5) { setState2(true); } }, [stateFromStores5]); useEffect(() => { if (stateFromStores4 !== a0) { setState2(false); } }, [a0, stateFromStores4]); useEffect(() => { if (stateFromStores6 && ref.current == null) { ref.current = setTimeout(() => { ref.current = null; setState(true); }, 250); } else { clearTimeout(ref.current); ref.current = null; setState(false); } return () => { clearTimeout(ref.current); ref.current = null; }; }, [stateFromStores6]); return (stateFromStores7 ? !stateFromStores7 : state2) && state; }