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

78 lines
2.9 KiB
TypeScript
Raw Normal View History

2021-04-28 07:27:15 +02:00
import { FurnitureListAddOrUpdateEvent, FurnitureListEvent, FurnitureListInvalidateEvent, FurnitureListItemParser, FurnitureListRemovedEvent, FurniturePostItPlacedEvent } from 'nitro-renderer';
import { FC, useCallback } from 'react';
import { CreateMessageHook } from '../../hooks/messages/message-event';
2021-04-28 19:47:33 +02:00
import { useInventoryContext } from './context/InventoryContext';
2021-04-22 05:18:44 +02:00
import { InventoryMessageHandlerProps } from './InventoryMessageHandler.types';
2021-04-28 19:47:33 +02:00
import { InventoryFurnitureActions } from './reducers/InventoryFurnitureReducer';
import { mergeFragments } from './utils/FurnitureUtilities';
2021-04-22 05:18:44 +02:00
2021-04-28 07:27:15 +02:00
let furniMsgFragments: Map<number, FurnitureListItemParser>[] = null;
2021-04-22 05:18:44 +02:00
export const InventoryMessageHandler: FC<InventoryMessageHandlerProps> = props =>
{
2021-04-28 19:47:33 +02:00
const { dispatchFurnitureState = null } = useInventoryContext();
2021-04-28 07:27:15 +02:00
const onFurnitureListAddOrUpdateEvent = useCallback((event: FurnitureListAddOrUpdateEvent) =>
{
const parser = event.getParser();
2021-04-28 19:47:33 +02:00
dispatchFurnitureState({
type: InventoryFurnitureActions.ADD_OR_UPDATE_FURNITURE,
payload: {
parsers: parser.items
}
});
}, [ dispatchFurnitureState ]);
2021-04-28 07:27:15 +02:00
const onFurnitureListEvent = useCallback((event: FurnitureListEvent) =>
{
const parser = event.getParser();
if(!furniMsgFragments) furniMsgFragments = new Array(parser.totalFragments);
2021-04-28 19:47:33 +02:00
const fragment = mergeFragments(parser.fragment, parser.totalFragments, parser.fragmentNumber, furniMsgFragments);
2021-04-28 07:27:15 +02:00
2021-04-28 19:47:33 +02:00
if(!fragment) return;
2021-04-28 07:27:15 +02:00
2021-04-28 19:47:33 +02:00
dispatchFurnitureState({
type: InventoryFurnitureActions.PROCESS_FRAGMENT,
payload: { fragment }
});
}, [ dispatchFurnitureState ]);
2021-04-28 07:27:15 +02:00
const onFurnitureListInvalidateEvent = useCallback((event: FurnitureListInvalidateEvent) =>
{
2021-04-28 19:47:33 +02:00
dispatchFurnitureState({
type: InventoryFurnitureActions.SET_NEEDS_UPDATE,
payload: {
flag: true
}
});
}, [ dispatchFurnitureState ]);
2021-04-28 07:27:15 +02:00
const onFurnitureListRemovedEvent = useCallback((event: FurnitureListRemovedEvent) =>
{
const parser = event.getParser();
2021-04-28 19:47:33 +02:00
dispatchFurnitureState({
type: InventoryFurnitureActions.REMOVE_FURNITURE,
payload: {
itemId: parser.itemId
}
});
}, [ dispatchFurnitureState ]);
2021-04-28 07:27:15 +02:00
const onFurniturePostItPlacedEvent = useCallback((event: FurniturePostItPlacedEvent) =>
{
}, []);
CreateMessageHook(FurnitureListAddOrUpdateEvent, onFurnitureListAddOrUpdateEvent);
CreateMessageHook(FurnitureListEvent, onFurnitureListEvent);
CreateMessageHook(FurnitureListInvalidateEvent, onFurnitureListInvalidateEvent);
CreateMessageHook(FurnitureListRemovedEvent, onFurnitureListRemovedEvent);
CreateMessageHook(FurniturePostItPlacedEvent, onFurniturePostItPlacedEvent);
return null;
2021-04-22 05:18:44 +02:00
}