mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 10:12:45 +00:00
Co-authored-by: Heroman3003 <31296024+Heroman3003@users.noreply.github.com> Co-authored-by: Selis <selis@xynolabs.com>
129 lines
3.9 KiB
JavaScript
129 lines
3.9 KiB
JavaScript
/**
|
|
* @file
|
|
* @copyright 2020 Aleksej Komarov
|
|
* @license MIT
|
|
*/
|
|
|
|
import { Button, Section, Stack } from 'tgui_ch/components'; // CHOMPEdit - tgui_ch
|
|
import { Pane } from 'tgui_ch/layouts'; // CHOMPEdit - tgui_ch
|
|
import { NowPlayingWidget, useAudio } from './audio';
|
|
import { ChatPanel, ChatTabs } from './chat';
|
|
import { useGame } from './game';
|
|
import { Notifications } from './Notifications';
|
|
import { PingIndicator } from './ping';
|
|
import { ReconnectButton } from './reconnect';
|
|
import { SettingsPanel, useSettings } from './settings';
|
|
|
|
export const Panel = (props, context) => {
|
|
// IE8-10: Needs special treatment due to missing Flex support
|
|
if (Byond.IS_LTE_IE10) {
|
|
return <HoboPanel />;
|
|
}
|
|
const audio = useAudio(context);
|
|
const settings = useSettings(context);
|
|
const game = useGame(context);
|
|
if (process.env.NODE_ENV !== 'production') {
|
|
const { useDebug, KitchenSink } = require('tgui_ch/debug'); // CHOMPEdit - tgui_ch
|
|
const debug = useDebug(context);
|
|
if (debug.kitchenSink) {
|
|
return <KitchenSink panel />;
|
|
}
|
|
}
|
|
return (
|
|
<Pane theme={settings.theme}>
|
|
<Stack fill vertical>
|
|
<Stack.Item>
|
|
<Section fitted>
|
|
<Stack mr={1} align="center">
|
|
<Stack.Item grow overflowX="auto">
|
|
<ChatTabs />
|
|
</Stack.Item>
|
|
<Stack.Item>
|
|
<PingIndicator />
|
|
</Stack.Item>
|
|
<Stack.Item>
|
|
<Button
|
|
color="grey"
|
|
selected={audio.visible}
|
|
icon="music"
|
|
tooltip="Music player"
|
|
tooltipPosition="bottom-start"
|
|
onClick={() => audio.toggle()}
|
|
/>
|
|
</Stack.Item>
|
|
<Stack.Item>
|
|
<Button
|
|
icon={settings.visible ? 'times' : 'cog'}
|
|
selected={settings.visible}
|
|
tooltip={
|
|
settings.visible ? 'Close settings' : 'Open settings'
|
|
}
|
|
tooltipPosition="bottom-start"
|
|
onClick={() => settings.toggle()}
|
|
/>
|
|
</Stack.Item>
|
|
</Stack>
|
|
</Section>
|
|
</Stack.Item>
|
|
{audio.visible && (
|
|
<Stack.Item>
|
|
<Section>
|
|
<NowPlayingWidget />
|
|
</Section>
|
|
</Stack.Item>
|
|
)}
|
|
{settings.visible && (
|
|
<Stack.Item>
|
|
<SettingsPanel />
|
|
</Stack.Item>
|
|
)}
|
|
<Stack.Item grow>
|
|
<Section fill fitted position="relative">
|
|
<Pane.Content scrollable>
|
|
<ChatPanel lineHeight={settings.lineHeight} />
|
|
</Pane.Content>
|
|
<Notifications>
|
|
{game.connectionLostAt && (
|
|
<Notifications.Item rightSlot={<ReconnectButton />}>
|
|
You are either AFK, experiencing lag or the connection has
|
|
closed.
|
|
</Notifications.Item>
|
|
)}
|
|
{game.roundRestartedAt && (
|
|
<Notifications.Item>
|
|
The connection has been closed because the server is
|
|
restarting. Please wait while you automatically reconnect.
|
|
</Notifications.Item>
|
|
)}
|
|
</Notifications>
|
|
</Section>
|
|
</Stack.Item>
|
|
</Stack>
|
|
</Pane>
|
|
);
|
|
};
|
|
|
|
const HoboPanel = (props, context) => {
|
|
const settings = useSettings(context);
|
|
return (
|
|
<Pane theme={settings.theme}>
|
|
<Pane.Content scrollable>
|
|
<Button
|
|
style={{
|
|
position: 'fixed',
|
|
top: '1em',
|
|
right: '2em',
|
|
'z-index': 1000,
|
|
}}
|
|
selected={settings.visible}
|
|
onClick={() => settings.toggle()}>
|
|
Settings
|
|
</Button>
|
|
{(settings.visible && <SettingsPanel />) || (
|
|
<ChatPanel lineHeight={settings.lineHeight} />
|
|
)}
|
|
</Pane.Content>
|
|
</Pane>
|
|
);
|
|
};
|