Files
CHOMPStation2/tgui/packages/tgui-panel/settings/SettingsStatPanel.tsx
CHOMPStation2StaffMirrorBot c1a87d7299 [MIRROR] Statpanel styles (#9325)
Co-authored-by: ShadowLarkens <shadowlarkens@gmail.com>
2024-10-27 01:23:55 +02:00

85 lines
2.5 KiB
TypeScript

import { toFixed } from 'common/math';
import { capitalize } from 'common/string';
import { useDispatch, useSelector } from 'tgui/backend';
import {
Button,
LabeledList,
NoticeBox,
Section,
Slider,
Stack,
} from 'tgui/components';
import { updateSettings } from './actions';
import { selectSettings } from './selectors';
const TabsViews = ['default', 'classic', 'scrollable'];
const LinkedToChat = () => (
<NoticeBox color="red">Unlink Stat Panel from chat!</NoticeBox>
);
export function SettingsStatPanel(props) {
const { statLinked, statFontSize, statTabsStyle } =
useSelector(selectSettings);
const dispatch = useDispatch();
return (
<Section fill>
<Stack fill vertical>
<Stack.Item>
<LabeledList>
<LabeledList.Item label="Tabs" verticalAlign="middle">
{TabsViews.map((view) => (
<Button
key={view}
color="transparent"
selected={statTabsStyle === view}
onClick={() =>
dispatch(updateSettings({ statTabsStyle: view }))
}
>
{capitalize(view)}
</Button>
))}
</LabeledList.Item>
<LabeledList.Item label="Font size">
<Stack.Item grow>
{statLinked ? (
<LinkedToChat />
) : (
<Slider
width="100%"
step={1}
stepPixelSize={20}
minValue={8}
maxValue={32}
value={statFontSize}
unit="px"
format={(value) => toFixed(value)}
onChange={(e, value) =>
dispatch(updateSettings({ statFontSize: value }))
}
/>
)}
</Stack.Item>
</LabeledList.Item>
</LabeledList>
</Stack.Item>
<Stack.Divider mt={2.5} />
<Stack.Item textAlign="center">
<Button
fluid
icon={statLinked ? 'unlink' : 'link'}
color={statLinked ? 'bad' : 'good'}
onClick={() =>
dispatch(updateSettings({ statLinked: !statLinked }))
}
>
{statLinked ? 'Unlink from chat' : 'Link to chat'}
</Button>
</Stack.Item>
</Stack>
</Section>
);
}