nitro-react/src/views/inventory/InventoryView.tsx

64 lines
2.6 KiB
TypeScript
Raw Normal View History

2021-04-22 07:29:42 +02:00
import React, { FC, useCallback, useEffect, useState } from 'react';
2021-04-22 05:18:44 +02:00
import { InventoryEvent } from '../../events';
import { DraggableWindow } from '../../hooks/draggable-window/DraggableWindow';
import { useUiEvent } from '../../hooks/events/ui/ui-event';
import { LocalizeText } from '../../utils/LocalizeText';
import { InventoryMessageHandler } from './InventoryMessageHandler';
2021-04-22 07:53:01 +02:00
import { IInventoryContext, InventoryTabs, InventoryViewProps } from './InventoryView.types';
import { InventoryTabsContentView } from './tabs-content/InventoryTabsContentView';
import { InventoryTabsSelectorView } from './tabs-selector/InventoryTabsSelectorView';
2021-04-22 07:29:42 +02:00
export const InventoryContext = React.createContext<IInventoryContext>(null);
2021-04-22 05:18:44 +02:00
export const InventoryView: FC<InventoryViewProps> = props =>
{
2021-04-22 07:29:42 +02:00
const [ isVisible, setIsVisible ] = useState(false);
const [ currentTab, setCurrentTab ] = useState<string>(null);
2021-04-22 07:53:01 +02:00
const [ tabs, setTabs ] = useState<string[]>([
InventoryTabs.FURNITURE, InventoryTabs.BOTS, InventoryTabs.PETS, InventoryTabs.PETS
]);
2021-04-22 07:29:42 +02:00
useEffect(() => {
setCurrentTab(tabs[0]);
}, [ tabs ]);
2021-04-22 05:18:44 +02:00
const onInventoryEvent = useCallback((event: InventoryEvent) =>
{
switch(event.type)
{
case InventoryEvent.SHOW_INVENTORY:
setIsVisible(true);
return;
case InventoryEvent.TOGGLE_INVENTORY:
setIsVisible(value => !value);
return;
}
}, []);
useUiEvent(InventoryEvent.SHOW_INVENTORY, onInventoryEvent);
useUiEvent(InventoryEvent.TOGGLE_INVENTORY, onInventoryEvent);
function hideInventory(): void
{
setIsVisible(false);
}
return (
2021-04-22 07:29:42 +02:00
<InventoryContext.Provider value={{ currentTab: currentTab, onSetCurrentTab: setCurrentTab }}>
2021-04-22 05:18:44 +02:00
<InventoryMessageHandler />
{ isVisible && <DraggableWindow handle=".drag-handler">
<div className="nitro-inventory d-flex flex-column bg-primary border border-black shadow rounded">
<div className="drag-handler d-flex justify-content-between align-items-center px-3 pt-3">
<div className="h6 m-0">{ LocalizeText('inventory.title') }</div>
<button type="button" className="close" onClick={ hideInventory }>
<i className="fas fa-times"></i>
</button>
</div>
2021-04-22 07:53:01 +02:00
<InventoryTabsSelectorView tabs={ tabs } />
<InventoryTabsContentView />
2021-04-22 05:18:44 +02:00
</div>
</DraggableWindow> }
2021-04-22 07:29:42 +02:00
</InventoryContext.Provider>
2021-04-22 05:18:44 +02:00
);
}