Files
discord-decomp/modules/voice_panel/native/header/VoicePanelAudioOutputActionSheet.tsx
T
2026-11-01 12:12:55 +02:00

144 lines
7.2 KiB
TypeScript

// Metro module 8858 (f8859).
import * as Module19 from "react";
import { useCallback, useMemo, useEffect } from "react";
import { ScrollView } from "react-native";
import GameConsoleStore from "../../../game_console/GameConsoleStore";
import AudioManagerStore_android from "../../../voice_calls/native/AudioManagerStore.android";
import ChannelStore from "../../../../stores/ChannelStore";
import SessionsStore from "../../../../stores/SessionsStore";
import { VOICE_PANEL_AUDIO_OUTPUT_ACTION_SHEET_KEY } from "./VoicePanelHeaderConstants";
import { PlatformTypes } from "../../../../Constants";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import ActionSheetActionCreators from "../../../action_sheet/native/ActionSheetActionCreators";
import { useStateFromStoresObject, useStateFromStores } from "../../../../_bundle/defaultAreStatesEqual";
import { setAudioOutputDevice } from "../../../voice_calls/native/AudioManagerActionCreator";
import { VoicePanelFormSection } from "../shared/FormComponents";
import { intl, t } from "../../../../intl/index.native";
import { TableRadioGroup } from "../../../../design/components/TableRow/native/TableRadioGroup.native";
import { TableRadioRow } from "../../../../design/components/TableRow/native/TableRadioRow.native";
import { TableRowIcon } from "../../../../design/components/TableRow/native/TableRowIcon.native";
import { audioDeviceToIconMap, getAudioDeviceToDisplayText } from "../../../voice_calls/native/CallsUtils";
import useGameConsoleAccounts from "../../../game_console/useGameConsoleAccounts";
import useVoiceStateForRemoteSession from "../../../game_console/hooks/useVoiceStateForRemoteSession";
import { onConnectToConsole } from "../../../video_calls/native/useOnConnectToConsole";
import { useIsDismissibleContentDismissed_UNSAFE, UNSAFE_markDismissibleContentAsDismissed } from "../../../dismissible_content/DismissibleContentUnsafeUtils";
import { DismissibleContent } from "../../../../_bundle/Module1358";
import getConsoleIcon from "../../../game_console/native/getConsoleIcon";
import { BottomSheet } from "../../../../design/components/Sheet/native/BottomSheet.native";
import { BottomSheetTitleHeader } from "../../../../design/components/Sheet/native/BottomSheetTitleHeader.native";
import NativeView from "../../../core/native/NativeView";
let useStyles, VoicePanelAudioConsoleSection;
const VoicePanelAudioPhoneOutputSection = function VoicePanelAudioPhoneOutputSection() {
let availableDevices, callback;
const styles = useStyles();
const stateFromStoresObject = useStateFromStoresObject([AudioManagerStore_android], () => ({
activeDevice: AudioManagerStore_android.getActiveAudioDevice(),
availableDevices: AudioManagerStore_android.getAudioDevices()
}));
const activeDevice = stateFromStoresObject.activeDevice;
availableDevices = stateFromStoresObject.availableDevices;
callback = useCallback((a0) => {
setAudioOutputDevice(a0);
ActionSheetActionCreators.hideActionSheet(VOICE_PANEL_AUDIO_OUTPUT_ACTION_SHEET_KEY);
}, []);
return availableDevices.length > 0 ? <VoicePanelFormSection style={styles.sectionContainer} title={intl.string(t.CxyS15)} hasIcons>
<TableRadioGroup value={activeDevice.deviceId} onChange={(c26300_0) => {
const r7 = availableDevices.find((availableDevice) => availableDevice.deviceId === c26300_0);
if (r7 != null) {
callback(r7);
}
}} hasIcons>
{availableDevices.map((availableDevice) => <TableRadioRow key={availableDevice.deviceId} value={availableDevice.deviceId} icon={<TableRowIcon source={audioDeviceToIconMap[availableDevice.simpleDeviceType]} />} label={getAudioDeviceToDisplayText(availableDevice)} subLabel={availableDevice.deviceName?.length > 0 ? availableDevice.deviceName : void 0} />)}
</TableRadioGroup>
</VoicePanelFormSection> : null;
};
VoicePanelAudioConsoleSection = function VoicePanelAudioConsoleSection(props) {
let stateFromStores2, c16832_5;
const channel = props.channel;
stateFromStores2 = void 0;
c16832_5 = void 0;
const styles = useStyles();
const gameConsoleAccounts = useGameConsoleAccounts();
let c16832_1 = gameConsoleAccounts;
let c16832_2 = useVoiceStateForRemoteSession();
const stateFromStores = useStateFromStores([GameConsoleStore], () => GameConsoleStore.getAwaitingRemoteSessionInfo());
stateFromStores2 = useStateFromStores([SessionsStore], () => {
let r7 = c16832_2?.sessionId;
if (r7 == null) {
r7 = "";
}
return SessionsStore.getSessionById(r7);
});
const memo = useMemo(() => {
let r3 = stateFromStores?.type;
if (r3 == null) {
r3 = stateFromStores2 == null ? void 0 : stateFromStores2.clientInfo?.os;
}
if (r3 == null) {
r3 = "";
}
return r3;
}, [stateFromStores, stateFromStores2]);
const callback2 = useCallback((c26301_0) => {
const r5 = c16832_1.find((item) => item.type === c26301_0);
if (r5 != null) {
onConnectToConsole(channel, r5);
ActionSheetActionCreators.hideActionSheet(VOICE_PANEL_AUDIO_OUTPUT_ACTION_SHEET_KEY);
} else {
ActionSheetActionCreators.hideActionSheet(VOICE_PANEL_AUDIO_OUTPUT_ACTION_SHEET_KEY);
}
}, [gameConsoleAccounts, channel]);
const r2 = !useIsDismissibleContentDismissed_UNSAFE(DismissibleContent.DONUT_MOBILE_NUX);
c16832_5 = r2;
useEffect(() => {
if (c16832_5 && c16832_1.length > 0) {
UNSAFE_markDismissibleContentAsDismissed(DismissibleContent.DONUT_MOBILE_NUX);
}
}, [gameConsoleAccounts, r2]);
return gameConsoleAccounts.length > 0 ? <VoicePanelFormSection title={intl.string(t.q22XnQ)} style={styles.sectionContainer} hasIcons>
<TableRadioGroup defaultValue={memo} onChange={callback2} hasIcons>
{gameConsoleAccounts.map((gameConsoleAccount) => {
const type = gameConsoleAccount.type;
const r6 = PlatformTypes.XBOX === type ? {
label: intl.string(t.Nfvo72),
variant: "xbox"
} : PlatformTypes.PLAYSTATION === type ? {
label: intl.string(t.fFl4jo),
variant: "playstation"
} : null;
return r6 != null && <TableRadioRow key={gameConsoleAccount.type} icon={<TableRowIcon source={getConsoleIcon(gameConsoleAccount.type)} variant={r6.variant} />} label={r6.label} value={gameConsoleAccount.type} />;
}).filter((item) => Boolean(item))}
</TableRadioGroup>
</VoicePanelFormSection> : null;
};
useStyles = createStyles({
sectionContainer: {
marginTop: 0,
marginBottom: 24
}
});
const r46 = Module19.memo(function VoicePanelAudioOutputActionSheet(props) {
const channelId = props.channelId;
let isConnectedToVoiceChannel = props.isConnectedToVoiceChannel;
const stateFromStores3 = useStateFromStores([ChannelStore], () => ChannelStore.getChannel(channelId));
let r20 = null;
if (stateFromStores3 != null) {
const props2 = {
header: <BottomSheetTitleHeader title={intl.string(t.iwxPM3)} />,
children: null
};
if (isConnectedToVoiceChannel) {
isConnectedToVoiceChannel = <VoicePanelAudioPhoneOutputSection />;
}
props2.children = <ScrollView>
<NativeView>
{isConnectedToVoiceChannel}
<VoicePanelAudioConsoleSection channel={stateFromStores3} />
</NativeView>
</ScrollView>;
r20 = <BottomSheet {...props2} />;
}
return r20;
});
export default r46;