From 34d0250f1771e707ed7d8d0df3da20802b9a00d5 Mon Sep 17 00:00:00 2001 From: Bill Date: Fri, 23 Apr 2021 21:03:34 -0400 Subject: [PATCH] Update inventory context --- src/views/inventory/InventoryView.tsx | 22 ++++++--------- src/views/inventory/InventoryView.types.ts | 6 ---- .../inventory/context/InventoryContext.tsx | 14 ++++++++++ .../context/InventoryContext.types.ts | 12 ++++++++ .../tabs-content/InventoryTabsContentView.tsx | 28 ++++++++++++++----- .../badges/InventoryTabBadgesView.tsx | 6 ++-- .../bots/InventoryTabBotsView.tsx | 6 ++-- .../furniture/InventoryTabFurnitureView.tsx | 6 ++-- .../pets/InventoryTabPetsView.tsx | 6 ++-- .../InventoryTabsSelectorView.tsx | 4 ++- .../tabs-selector/tab/InventoryTabView.tsx | 23 ++++++++------- 11 files changed, 83 insertions(+), 50 deletions(-) create mode 100644 src/views/inventory/context/InventoryContext.tsx create mode 100644 src/views/inventory/context/InventoryContext.types.ts diff --git a/src/views/inventory/InventoryView.tsx b/src/views/inventory/InventoryView.tsx index 6056da39..fcbc191c 100644 --- a/src/views/inventory/InventoryView.tsx +++ b/src/views/inventory/InventoryView.tsx @@ -1,28 +1,22 @@ import { RoomSessionEvent } from 'nitro-renderer'; -import { createContext, FC, useCallback, useEffect, useState } from 'react'; +import { FC, useCallback, useState } from 'react'; import { InventoryEvent } from '../../events'; import { DraggableWindow } from '../../hooks/draggable-window/DraggableWindow'; import { useRoomSessionManagerEvent } from '../../hooks/events/nitro/session/room-session-manager-event'; import { useUiEvent } from '../../hooks/events/ui/ui-event'; import { LocalizeText } from '../../utils/LocalizeText'; +import { InventoryContextProvider } from './context/InventoryContext'; import { InventoryMessageHandler } from './InventoryMessageHandler'; -import { IInventoryContext, InventoryTabs, InventoryViewProps } from './InventoryView.types'; +import { InventoryTabs, InventoryViewProps } from './InventoryView.types'; import { InventoryTabsContentView } from './tabs-content/InventoryTabsContentView'; import { InventoryTabsSelectorView } from './tabs-selector/InventoryTabsSelectorView'; -export const InventoryContext = createContext(null); - export const InventoryView: FC = props => { - const [ isVisible, setIsVisible ] = useState(false); - const [ currentTab, setCurrentTab ] = useState(null); - const [ tabs, setTabs ] = useState([ - InventoryTabs.FURNITURE, InventoryTabs.BOTS, InventoryTabs.PETS, InventoryTabs.BADGES - ]); + const tabs = [ InventoryTabs.FURNITURE, InventoryTabs.BOTS, InventoryTabs.PETS, InventoryTabs.BADGES ]; - useEffect(() => { - setCurrentTab(tabs[0]); - }, [ tabs ]); + const [ isVisible, setIsVisible ] = useState(false); + const [ currentTab, setCurrentTab ] = useState(tabs[0]); const onInventoryEvent = useCallback((event: InventoryEvent) => { @@ -62,7 +56,7 @@ export const InventoryView: FC = props => } return ( - + { isVisible &&
@@ -76,6 +70,6 @@ export const InventoryView: FC = props =>
} -
+ ); } diff --git a/src/views/inventory/InventoryView.types.ts b/src/views/inventory/InventoryView.types.ts index c2e69860..ea815348 100644 --- a/src/views/inventory/InventoryView.types.ts +++ b/src/views/inventory/InventoryView.types.ts @@ -1,12 +1,6 @@ export interface InventoryViewProps {} -export interface IInventoryContext -{ - currentTab: string; - onSetCurrentTab: (tab: string) => void; -} - export class InventoryTabs { public static readonly FURNITURE: string = 'inventory.furni'; diff --git a/src/views/inventory/context/InventoryContext.tsx b/src/views/inventory/context/InventoryContext.tsx new file mode 100644 index 00000000..3029af8f --- /dev/null +++ b/src/views/inventory/context/InventoryContext.tsx @@ -0,0 +1,14 @@ +import { createContext, FC, useContext } from 'react'; +import { IInventoryContext, InventoryContextProps } from './InventoryContext.types'; + +const InventoryContext = createContext({ + currentTab: null, + setCurrentTab: null +}); + +export const InventoryContextProvider: FC = props => +{ + return { props.children } +} + +export const useInventoryContext = () => useContext(InventoryContext); diff --git a/src/views/inventory/context/InventoryContext.types.ts b/src/views/inventory/context/InventoryContext.types.ts new file mode 100644 index 00000000..2c1e808e --- /dev/null +++ b/src/views/inventory/context/InventoryContext.types.ts @@ -0,0 +1,12 @@ +import { ProviderProps } from 'react'; + +export interface IInventoryContext +{ + currentTab: string; + setCurrentTab: (tab: string) => void; +} + +export interface InventoryContextProps extends ProviderProps +{ + +} diff --git a/src/views/inventory/tabs-content/InventoryTabsContentView.tsx b/src/views/inventory/tabs-content/InventoryTabsContentView.tsx index 9e59e408..cb17071c 100644 --- a/src/views/inventory/tabs-content/InventoryTabsContentView.tsx +++ b/src/views/inventory/tabs-content/InventoryTabsContentView.tsx @@ -1,5 +1,5 @@ -import { FC, useContext } from 'react'; -import { InventoryContext } from '../InventoryView'; +import { FC } from 'react'; +import { useInventoryContext } from '../context/InventoryContext'; import { InventoryTabs } from '../InventoryView.types'; import { InventoryTabBadgesView } from './badges/InventoryTabBadgesView'; import { InventoryTabBotsView } from './bots/InventoryTabBotsView'; @@ -9,14 +9,28 @@ import { InventoryTabPetsView } from './pets/InventoryTabPetsView'; export const InventoryTabsContentView: FC = props => { - const inventoryContext = useContext(InventoryContext); + const inventoryContext = useInventoryContext(); + + function renderCurrentTab(): JSX.Element + { + switch(inventoryContext.currentTab) + { + case InventoryTabs.FURNITURE: + return + case InventoryTabs.BOTS: + return + case InventoryTabs.PETS: + return + case InventoryTabs.BADGES: + return + } + + return null; + } return (
- { inventoryContext && inventoryContext.currentTab && inventoryContext.currentTab === InventoryTabs.FURNITURE && } - { inventoryContext && inventoryContext.currentTab && inventoryContext.currentTab === InventoryTabs.BOTS && } - { inventoryContext && inventoryContext.currentTab && inventoryContext.currentTab === InventoryTabs.PETS && } - { inventoryContext && inventoryContext.currentTab && inventoryContext.currentTab === InventoryTabs.BADGES && } + { inventoryContext && inventoryContext.currentTab && renderCurrentTab() }
); } diff --git a/src/views/inventory/tabs-content/badges/InventoryTabBadgesView.tsx b/src/views/inventory/tabs-content/badges/InventoryTabBadgesView.tsx index 04a7736b..7d2043fa 100644 --- a/src/views/inventory/tabs-content/badges/InventoryTabBadgesView.tsx +++ b/src/views/inventory/tabs-content/badges/InventoryTabBadgesView.tsx @@ -1,10 +1,10 @@ -import { FC, useContext } from 'react'; -import { InventoryContext } from '../../InventoryView'; +import { FC } from 'react'; +import { useInventoryContext } from '../../context/InventoryContext'; import { InventoryTabBadgesViewProps } from './InventoryTabBadgesView.types'; export const InventoryTabBadgesView: FC = props => { - const inventoryContext = useContext(InventoryContext); + const inventoryContext = useInventoryContext(); return ( <>Badges content diff --git a/src/views/inventory/tabs-content/bots/InventoryTabBotsView.tsx b/src/views/inventory/tabs-content/bots/InventoryTabBotsView.tsx index 9a4e867e..bf45307c 100644 --- a/src/views/inventory/tabs-content/bots/InventoryTabBotsView.tsx +++ b/src/views/inventory/tabs-content/bots/InventoryTabBotsView.tsx @@ -1,10 +1,10 @@ -import { FC, useContext } from 'react'; -import { InventoryContext } from '../../InventoryView'; +import { FC } from 'react'; +import { useInventoryContext } from '../../context/InventoryContext'; import { InventoryTabBotsViewProps } from './InventoryTabBotsView.types'; export const InventoryTabBotsView: FC = props => { - const inventoryContext = useContext(InventoryContext); + const inventoryContext = useInventoryContext(); return ( <>Bots content diff --git a/src/views/inventory/tabs-content/furniture/InventoryTabFurnitureView.tsx b/src/views/inventory/tabs-content/furniture/InventoryTabFurnitureView.tsx index 0b293cc3..f082fff9 100644 --- a/src/views/inventory/tabs-content/furniture/InventoryTabFurnitureView.tsx +++ b/src/views/inventory/tabs-content/furniture/InventoryTabFurnitureView.tsx @@ -1,10 +1,10 @@ -import { FC, useContext } from 'react'; -import { InventoryContext } from '../../InventoryView'; +import { FC } from 'react'; +import { useInventoryContext } from '../../context/InventoryContext'; import { InventoryTabFurnitureViewProps } from './InventoryTabFurnitureView.types'; export const InventoryTabFurnitureView: FC = props => { - const inventoryContext = useContext(InventoryContext); + const inventoryContext = useInventoryContext(); return ( <>Furniture content diff --git a/src/views/inventory/tabs-content/pets/InventoryTabPetsView.tsx b/src/views/inventory/tabs-content/pets/InventoryTabPetsView.tsx index 8247d1fa..3b91428b 100644 --- a/src/views/inventory/tabs-content/pets/InventoryTabPetsView.tsx +++ b/src/views/inventory/tabs-content/pets/InventoryTabPetsView.tsx @@ -1,10 +1,10 @@ -import { FC, useContext } from 'react'; -import { InventoryContext } from '../../InventoryView'; +import { FC } from 'react'; +import { useInventoryContext } from '../../context/InventoryContext'; import { InventoryTabPetsViewProps } from './InventoryTabPetsView.types'; export const InventoryTabPetsView: FC = props => { - const inventoryContext = useContext(InventoryContext); + const inventoryContext = useInventoryContext(); return ( <>Pets content diff --git a/src/views/inventory/tabs-selector/InventoryTabsSelectorView.tsx b/src/views/inventory/tabs-selector/InventoryTabsSelectorView.tsx index cb91f4e0..bb04ff7b 100644 --- a/src/views/inventory/tabs-selector/InventoryTabsSelectorView.tsx +++ b/src/views/inventory/tabs-selector/InventoryTabsSelectorView.tsx @@ -4,9 +4,11 @@ import { InventoryTabView } from './tab/InventoryTabView'; export const InventoryTabsSelectorView: FC = props => { + const { tabs = null } = props; + return (
- { props.tabs && + { tabs && tabs.length &&
{ props.tabs.map((tab, index) => { diff --git a/src/views/inventory/tabs-selector/tab/InventoryTabView.tsx b/src/views/inventory/tabs-selector/tab/InventoryTabView.tsx index 07f0255f..11cb248c 100644 --- a/src/views/inventory/tabs-selector/tab/InventoryTabView.tsx +++ b/src/views/inventory/tabs-selector/tab/InventoryTabView.tsx @@ -1,18 +1,21 @@ import classNames from 'classnames'; -import { FC, useContext } from 'react'; +import { FC, MouseEvent } from 'react'; import { LocalizeText } from '../../../../utils/LocalizeText'; -import { InventoryContext } from '../../InventoryView'; +import { useInventoryContext } from '../../context/InventoryContext'; import { InventoryTabViewProps } from './InventoryTabView.types'; export const InventoryTabView: FC = props => { - const inventoryContext = useContext(InventoryContext); + const { tab = null } = props; - return ( - - ); + const inventoryContext = useInventoryContext(); + + function selectTab(event: MouseEvent = null): void + { + inventoryContext.setCurrentTab(tab); + } + + if(!tab) return null; + + return ; }