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
|
|
|
}
|