diff --git a/src/views/inventory/InventoryMessageHandler.tsx b/src/views/inventory/InventoryMessageHandler.tsx index 0d77e797..4098fc25 100644 --- a/src/views/inventory/InventoryMessageHandler.tsx +++ b/src/views/inventory/InventoryMessageHandler.tsx @@ -1,16 +1,21 @@ -import { FurnitureListAddOrUpdateEvent, FurnitureListEvent, FurnitureListInvalidateEvent, FurnitureListItemParser, FurnitureListRemovedEvent, FurniturePostItPlacedEvent } from 'nitro-renderer'; +import { BadgesEvent, BotAddedToInventoryEvent, BotInventoryMessageEvent, BotRemovedFromInventoryEvent, FurnitureListAddOrUpdateEvent, FurnitureListEvent, FurnitureListInvalidateEvent, FurnitureListItemParser, FurnitureListRemovedEvent, FurniturePostItPlacedEvent, PetAddedToInventoryEvent, PetData, PetInventoryEvent, PetRemovedFromInventory } from 'nitro-renderer'; import { FC, useCallback } from 'react'; import { CreateMessageHook } from '../../hooks/messages/message-event'; import { useInventoryContext } from './context/InventoryContext'; import { InventoryMessageHandlerProps } from './InventoryMessageHandler.types'; +import { InventoryBadgeActions } from './reducers/InventoryBadgeReducer'; +import { InventoryBotActions } from './reducers/InventoryBotReducer'; import { InventoryFurnitureActions } from './reducers/InventoryFurnitureReducer'; -import { mergeFragments } from './utils/FurnitureUtilities'; +import { InventoryPetActions } from './reducers/InventoryPetReducer'; +import { mergeFurniFragments } from './utils/FurnitureUtilities'; +import { mergePetFragments } from './utils/PetUtilities'; let furniMsgFragments: Map[] = null; +let petMsgFragments: Map[] = null; export const InventoryMessageHandler: FC = props => { - const { dispatchFurnitureState = null } = useInventoryContext(); + const { dispatchFurnitureState = null, dispatchBotState = null, dispatchPetState = null, dispatchBadgeState = null } = useInventoryContext(); const onFurnitureListAddOrUpdateEvent = useCallback((event: FurnitureListAddOrUpdateEvent) => { @@ -30,7 +35,7 @@ export const InventoryMessageHandler: FC = props = if(!furniMsgFragments) furniMsgFragments = new Array(parser.totalFragments); - const fragment = mergeFragments(parser.fragment, parser.totalFragments, parser.fragmentNumber, furniMsgFragments); + const fragment = mergeFurniFragments(parser.fragment, parser.totalFragments, parser.fragmentNumber, furniMsgFragments); if(!fragment) return; @@ -44,7 +49,7 @@ export const InventoryMessageHandler: FC = props = { dispatchFurnitureState({ type: InventoryFurnitureActions.SET_NEEDS_UPDATE, - payload: { + payload: { flag: true } }); @@ -56,7 +61,7 @@ export const InventoryMessageHandler: FC = props = dispatchFurnitureState({ type: InventoryFurnitureActions.REMOVE_FURNITURE, - payload: { + payload: { itemId: parser.itemId } }); @@ -67,11 +72,107 @@ export const InventoryMessageHandler: FC = props = }, []); + const onBotInventoryMessageEvent = useCallback((event: BotInventoryMessageEvent) => + { + const parser = event.getParser(); + + const fragment = Array.from(parser.items.values()); + + dispatchBotState({ + type: InventoryBotActions.PROCESS_FRAGMENT, + payload: { fragment } + }); + }, [ dispatchBotState ]); + + const onBotAddedToInventoryEvent = useCallback((event: BotAddedToInventoryEvent) => + { + const parser = event.getParser(); + + dispatchBotState({ + type: InventoryBotActions.ADD_BOT, + payload: { + botData: parser.item + } + }); + }, [ dispatchBotState ]); + + const onBotRemovedFromInventoryEvent = useCallback((event: BotRemovedFromInventoryEvent) => + { + const parser = event.getParser(); + + dispatchBotState({ + type: InventoryBotActions.REMOVE_BOT, + payload: { + botId: parser.itemId + } + }); + }, [ dispatchBotState ]); + + const onPetInventoryEvent = useCallback((event: PetInventoryEvent) => + { + const parser = event.getParser(); + + if(!petMsgFragments) petMsgFragments = new Array(parser.totalFragments); + + const fragment = mergePetFragments(parser.fragment, parser.totalFragments, parser.fragmentNumber, petMsgFragments); + + if(!fragment) return; + + dispatchPetState({ + type: InventoryPetActions.PROCESS_FRAGMENT, + payload: { fragment } + }); + }, [dispatchPetState ]); + + const onPetAddedToInventoryEvent = useCallback((event: PetAddedToInventoryEvent) => + { + const parser = event.getParser(); + + dispatchPetState({ + type: InventoryPetActions.ADD_PET, + payload: { + petData: parser.pet + } + }); + }, [ dispatchPetState ]); + + const onPetRemovedFromInventory = useCallback((event: PetRemovedFromInventory) => + { + const parser = event.getParser(); + + dispatchPetState({ + type: InventoryPetActions.REMOVE_PET, + payload: { + petId: parser.petId + } + }); + }, [ dispatchPetState ]); + + const onBadgesEvent = useCallback((event: BadgesEvent) => + { + const parser = event.getParser(); + + dispatchBadgeState({ + type: InventoryBadgeActions.SET_BADGES, + payload: { + badgeCodes: parser.getAllBadgeCodes(), + activeBadgeCodes: parser.getActiveBadgeCodes() + } + }); + }, [ dispatchBadgeState ]); + CreateMessageHook(FurnitureListAddOrUpdateEvent, onFurnitureListAddOrUpdateEvent); CreateMessageHook(FurnitureListEvent, onFurnitureListEvent); CreateMessageHook(FurnitureListInvalidateEvent, onFurnitureListInvalidateEvent); CreateMessageHook(FurnitureListRemovedEvent, onFurnitureListRemovedEvent); CreateMessageHook(FurniturePostItPlacedEvent, onFurniturePostItPlacedEvent); + CreateMessageHook(BotInventoryMessageEvent, onBotInventoryMessageEvent); + CreateMessageHook(BotRemovedFromInventoryEvent, onBotRemovedFromInventoryEvent); + CreateMessageHook(BotAddedToInventoryEvent, onBotAddedToInventoryEvent); + CreateMessageHook(PetInventoryEvent, onPetInventoryEvent); + CreateMessageHook(PetRemovedFromInventory, onPetRemovedFromInventory); + CreateMessageHook(PetAddedToInventoryEvent, onPetAddedToInventoryEvent); + CreateMessageHook(BadgesEvent, onBadgesEvent); return null; } diff --git a/src/views/inventory/InventoryView.tsx b/src/views/inventory/InventoryView.tsx index 3d8de3ca..5c75460e 100644 --- a/src/views/inventory/InventoryView.tsx +++ b/src/views/inventory/InventoryView.tsx @@ -11,7 +11,7 @@ import { LocalizeText } from '../../utils/LocalizeText'; import { InventoryContextProvider } from './context/InventoryContext'; import { InventoryMessageHandler } from './InventoryMessageHandler'; import { InventoryTabs, InventoryViewProps } from './InventoryView.types'; -import { initialInventoryBadge, inventoryBadgeReducer } from './reducers/InventortBadgeReducer'; +import { initialInventoryBadge, inventoryBadgeReducer } from './reducers/InventoryBadgeReducer'; import { initialInventoryBot, inventoryBotReducer } from './reducers/InventoryBotReducer'; import { initialInventoryFurniture, inventoryFurnitureReducer } from './reducers/InventoryFurnitureReducer'; import { initialInventoryPet, inventoryPetReducer } from './reducers/InventoryPetReducer'; diff --git a/src/views/inventory/context/InventoryContext.types.ts b/src/views/inventory/context/InventoryContext.types.ts index 7053c201..546f2b75 100644 --- a/src/views/inventory/context/InventoryContext.types.ts +++ b/src/views/inventory/context/InventoryContext.types.ts @@ -1,5 +1,5 @@ import { Dispatch, ProviderProps } from 'react'; -import { IInventoryBadgeAction, IInventoryBadgeState } from '../reducers/InventortBadgeReducer'; +import { IInventoryBadgeAction, IInventoryBadgeState } from '../reducers/InventoryBadgeReducer'; import { IInventoryBotAction, IInventoryBotState } from '../reducers/InventoryBotReducer'; import { IInventoryFurnitureAction, IInventoryFurnitureState } from '../reducers/InventoryFurnitureReducer'; import { IInventoryPetAction, IInventoryPetState } from '../reducers/InventoryPetReducer'; diff --git a/src/views/inventory/views/InventoryViews.scss b/src/views/inventory/views/InventoryViews.scss index b4525abe..448ac0c5 100644 --- a/src/views/inventory/views/InventoryViews.scss +++ b/src/views/inventory/views/InventoryViews.scss @@ -1 +1,4 @@ +@import './badge/InventoryBadgeView'; +@import './bot/InventoryBotView'; @import './furniture/InventoryFurnitureView'; +@import './pet/InventoryPetView';