2021-05-10 19:11:16 +02:00
|
|
|
import { CatalogPageEvent, CatalogPagesEvent, CatalogPurchaseEvent, CatalogPurchaseFailedEvent, CatalogPurchaseUnavailableEvent, CatalogSearchEvent, CatalogSoldOutEvent } from 'nitro-renderer';
|
2021-05-05 09:14:54 +02:00
|
|
|
import { FC, useCallback } from 'react';
|
2021-05-10 19:11:16 +02:00
|
|
|
import { CatalogPurchaseFailureEvent } from '../../events';
|
|
|
|
import { CatalogPurchasedEvent } from '../../events/catalog/CatalogPurchasedEvent';
|
|
|
|
import { CatalogPurchaseSoldOutEvent } from '../../events/catalog/CatalogPurchaseSoldOutEvent';
|
|
|
|
import { dispatchUiEvent } from '../../hooks/events/ui/ui-event';
|
2021-05-05 09:14:54 +02:00
|
|
|
import { CreateMessageHook } from '../../hooks/messages/message-event';
|
2021-04-22 05:26:30 +02:00
|
|
|
import { CatalogMessageHandlerProps } from './CatalogMessageHandler.types';
|
2021-05-05 09:14:54 +02:00
|
|
|
import { useCatalogContext } from './context/CatalogContext';
|
|
|
|
import { CatalogActions } from './reducers/CatalogReducer';
|
2021-04-22 05:26:30 +02:00
|
|
|
|
|
|
|
export const CatalogMessageHandler: FC<CatalogMessageHandlerProps> = props =>
|
|
|
|
{
|
2021-05-05 09:14:54 +02:00
|
|
|
const { dispatchCatalogState = null } = useCatalogContext();
|
|
|
|
|
|
|
|
const onCatalogPagesEvent = useCallback((event: CatalogPagesEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
dispatchCatalogState({
|
|
|
|
type: CatalogActions.SET_CATALOG_ROOT,
|
|
|
|
payload: {
|
|
|
|
root: parser.root
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}, [ dispatchCatalogState ]);
|
|
|
|
|
|
|
|
const onCatalogPageEvent = useCallback((event: CatalogPageEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
dispatchCatalogState({
|
|
|
|
type: CatalogActions.SET_CATALOG_PAGE_PARSER,
|
|
|
|
payload: {
|
|
|
|
pageParser: parser
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}, [ dispatchCatalogState ]);
|
|
|
|
|
2021-05-10 19:11:16 +02:00
|
|
|
const onCatalogPurchaseEvent = useCallback((event: CatalogPurchaseEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
dispatchUiEvent(new CatalogPurchasedEvent(parser.offer));
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
const onCatalogPurchaseFailedEvent = useCallback((event: CatalogPurchaseFailedEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
dispatchUiEvent(new CatalogPurchaseFailureEvent(parser.code));
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
const onCatalogPurchaseUnavailableEvent = useCallback((event: CatalogPurchaseUnavailableEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
const onCatalogSoldOutEvent = useCallback((event: CatalogSoldOutEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
dispatchUiEvent(new CatalogPurchaseSoldOutEvent());
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
const onCatalogSearchEvent = useCallback((event: CatalogSearchEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
dispatchCatalogState({
|
|
|
|
type: CatalogActions.SET_CATALOG_ACTIVE_OFFER,
|
|
|
|
payload: {
|
|
|
|
activeOffer: parser.offer
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}, [ dispatchCatalogState ]);
|
|
|
|
|
2021-05-05 09:14:54 +02:00
|
|
|
CreateMessageHook(CatalogPagesEvent, onCatalogPagesEvent);
|
|
|
|
CreateMessageHook(CatalogPageEvent, onCatalogPageEvent);
|
2021-05-10 19:11:16 +02:00
|
|
|
CreateMessageHook(CatalogPurchaseEvent, onCatalogPurchaseEvent);
|
|
|
|
CreateMessageHook(CatalogPurchaseFailedEvent, onCatalogPurchaseFailedEvent);
|
|
|
|
CreateMessageHook(CatalogPurchaseUnavailableEvent, onCatalogPurchaseUnavailableEvent);
|
|
|
|
CreateMessageHook(CatalogSoldOutEvent, onCatalogSoldOutEvent);
|
|
|
|
CreateMessageHook(CatalogSearchEvent, onCatalogSearchEvent);
|
2021-05-05 09:14:54 +02:00
|
|
|
|
|
|
|
return null;
|
2021-04-22 05:26:30 +02:00
|
|
|
}
|