Files
CHOMPStation2/tgui/packages/tgui-panel/chat/ChatTabs.jsx
2024-02-14 04:48:51 +01:00

73 lines
1.8 KiB
JavaScript

/**
* @file
* @copyright 2020 Aleksej Komarov
* @license MIT
*/
import { useDispatch, useSelector } from 'tgui/backend';
import { Box, Button, Flex, Tabs } from 'tgui/components';
import { openChatSettings } from '../settings/actions';
import { addChatPage, changeChatPage } from './actions';
import { selectChatPages, selectCurrentChatPage } from './selectors';
const UnreadCountWidget = ({ value }) => (
<Box
style={{
fontSize: '0.7em',
borderRadius: '0.25em',
width: '1.7em',
lineHeight: '1.55em',
backgroundColor: 'crimson',
color: '#fff',
}}
>
{Math.min(value, 99)}
</Box>
);
export const ChatTabs = (props) => {
const pages = useSelector(selectChatPages);
const currentPage = useSelector(selectCurrentChatPage);
const dispatch = useDispatch();
return (
<Flex align="center">
<Flex.Item>
<Tabs textAlign="center">
{pages.map((page) => (
<Tabs.Tab
key={page.id}
selected={page === currentPage}
rightSlot={
!page.hideUnreadCount &&
page.unreadCount > 0 && (
<UnreadCountWidget value={page.unreadCount} />
)
}
onClick={() =>
dispatch(
changeChatPage({
pageId: page.id,
}),
)
}
>
{page.name}
</Tabs.Tab>
))}
</Tabs>
</Flex.Item>
<Flex.Item ml={1}>
<Button
color="transparent"
icon="plus"
onClick={() => {
dispatch(addChatPage());
dispatch(openChatSettings());
}}
/>
</Flex.Item>
</Flex>
);
};