nitro-react/src/views/toolbar/ToolbarView.tsx

87 lines
4.0 KiB
TypeScript
Raw Normal View History

2021-04-14 23:47:12 +02:00
import { UserInfoEvent } from 'nitro-renderer/src/nitro/communication/messages/incoming/user/data/UserInfoEvent';
import { UserInfoDataParser } from 'nitro-renderer/src/nitro/communication/messages/parser/user/data/UserInfoDataParser';
2021-04-22 04:53:34 +02:00
import { MouseEvent, useCallback, useState } from 'react';
2021-04-22 05:26:30 +02:00
import { CatalogEvent, InventoryEvent, NavigatorEvent } from '../../events';
2021-04-19 18:34:31 +02:00
import { dispatchUiEvent } from '../../hooks/events/ui/ui-event';
2021-04-22 04:53:34 +02:00
import { CreateMessageHook } from '../../hooks/messages/message-event';
2021-04-14 23:47:12 +02:00
import { AvatarImageView } from '../avatar-image/AvatarImageView';
2021-04-19 18:34:31 +02:00
import { ToolbarViewItems, ToolbarViewProps } from './ToolbarView.types';
2021-04-14 20:24:24 +02:00
export function ToolbarView(props: ToolbarViewProps): JSX.Element
{
2021-04-19 18:34:31 +02:00
const { isInRoom } = props;
2021-04-14 21:12:16 +02:00
2021-04-14 23:47:12 +02:00
const [ userInfo, setUserInfo ] = useState<UserInfoDataParser>(null);
2021-04-14 21:12:16 +02:00
const unseenInventoryCount = 0;
const unseenFriendListCount = 0;
const unseenAchievementsCount = 0;
2021-04-22 04:06:02 +02:00
const onUserInfoEvent = useCallback((event: UserInfoEvent) =>
2021-04-14 23:47:12 +02:00
{
const parser = event.getParser();
setUserInfo(parser.userInfo);
2021-04-22 04:06:02 +02:00
}, []);
2021-04-14 23:47:12 +02:00
2021-04-19 18:34:31 +02:00
function handleToolbarItemClick(event: MouseEvent, item: string): void
{
event.preventDefault();
switch(item)
{
case ToolbarViewItems.NAVIGATOR_ITEM:
dispatchUiEvent(new NavigatorEvent(NavigatorEvent.TOGGLE_NAVIGATOR));
return;
2021-04-22 05:18:44 +02:00
case ToolbarViewItems.INVENTORY_ITEM:
dispatchUiEvent(new InventoryEvent(InventoryEvent.TOGGLE_INVENTORY));
return;
2021-04-22 05:26:30 +02:00
case ToolbarViewItems.CATALOG_ITEM:
dispatchUiEvent(new CatalogEvent(CatalogEvent.TOGGLE_CATALOG));
return;
2021-04-19 18:34:31 +02:00
}
}
2021-04-22 04:06:02 +02:00
CreateMessageHook(UserInfoEvent, onUserInfoEvent);
2021-04-14 23:47:12 +02:00
2021-04-14 20:24:24 +02:00
return (
2021-04-21 05:36:39 +02:00
<>
2021-04-22 08:45:47 +02:00
<div className="d-flex flex-column bg-primary rounded shadow border border-black p-0 h-100">
<ul className="flex-grow-1 list-group p-1">
2021-04-14 21:12:16 +02:00
{ isInRoom && (
<li className="list-group-item">
<i className="icon icon-hotelview icon-nitro-light"></i>
</li>) }
{ !isInRoom && (
<li className="list-group-item">
<i className="icon icon-house"></i>
</li>) }
2021-04-19 18:34:31 +02:00
<li className="list-group-item" onClick={ event => handleToolbarItemClick(event, ToolbarViewItems.NAVIGATOR_ITEM) }>
2021-04-14 21:12:16 +02:00
<i className="icon icon-rooms"></i>
</li>
2021-04-22 05:26:30 +02:00
<li className="list-group-item" onClick={ event => handleToolbarItemClick(event, ToolbarViewItems.CATALOG_ITEM) }>
2021-04-14 21:12:16 +02:00
<i className="icon icon-catalog"></i>
</li>
2021-04-22 05:18:44 +02:00
<li className="list-group-item" onClick={ event => handleToolbarItemClick(event, ToolbarViewItems.INVENTORY_ITEM) }>
2021-04-14 21:12:16 +02:00
<i className="icon icon-inventory"></i>
{ (unseenInventoryCount > 0) && (
<div className="position-absolute bg-danger px-1 py-0 rounded shadow count">{ unseenInventoryCount }</div>) }
</li>
<li className="list-group-item">
<i className="icon icon-friendall"></i>
{ (unseenFriendListCount > 0) && (
<div className="position-absolute bg-danger px-1 py-0 rounded shadow count">{ unseenFriendListCount }</div>) }
</li>
2021-04-22 08:45:47 +02:00
</ul>
<ul className="list-group p-1">
<li className="position-relative list-group-item">
2021-04-14 23:47:12 +02:00
{ userInfo && <AvatarImageView figure={ userInfo.figure } direction={ 2 } headOnly={ true } /> }
2021-04-14 21:12:16 +02:00
{ (unseenAchievementsCount > 0) && (
<div className="position-absolute bg-danger px-1 py-0 rounded shadow count">{ unseenAchievementsCount }</div>) }
</li>
</ul>
</div>
2021-04-21 05:36:39 +02:00
</>
2021-04-14 20:24:24 +02:00
);
}