nitro-react/src/views/catalog/CatalogMessageHandler.tsx

177 lines
6.5 KiB
TypeScript
Raw Normal View History

2021-07-17 19:11:47 +02:00
import { CatalogApproveNameResultEvent, CatalogClubEvent, CatalogGiftConfigurationEvent, CatalogGroupsEvent, CatalogPageEvent, CatalogPagesEvent, CatalogPurchaseEvent, CatalogPurchaseFailedEvent, CatalogPurchaseUnavailableEvent, CatalogSearchEvent, CatalogSoldOutEvent, CatalogUpdatedEvent, SellablePetPalettesEvent, UserSubscriptionEvent } from 'nitro-renderer';
2021-05-05 09:14:54 +02:00
import { FC, useCallback } from 'react';
2021-05-22 19:27:39 +02:00
import { CatalogNameResultEvent, CatalogPurchaseFailureEvent } from '../../events';
2021-05-10 19:11:16 +02:00
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-06-23 06:03:56 +02:00
import { CatalogPetPalette } from './common/CatalogPetPalette';
import { SubscriptionInfo } from './common/SubscriptionInfo';
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-11 21:10:01 +02:00
const { catalogState = null, dispatchCatalogState = null } = useCatalogContext();
2021-05-05 09:14:54 +02:00
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-22 19:27:39 +02:00
const onSellablePetPalettesEvent = useCallback((event: SellablePetPalettesEvent) =>
{
const parser = event.getParser();
const petPalette = new CatalogPetPalette(parser.productCode, parser.palettes.slice());
dispatchCatalogState({
type: CatalogActions.SET_PET_PALETTE,
payload: { petPalette }
});
}, [ dispatchCatalogState ]);
const onCatalogApproveNameResultEvent = useCallback((event: CatalogApproveNameResultEvent) =>
{
const parser = event.getParser();
dispatchUiEvent(new CatalogNameResultEvent(parser.result, parser.validationInfo));
}, []);
2021-05-24 07:28:37 +02:00
const onCatalogClubEvent = useCallback((event: CatalogClubEvent) =>
{
const parser = event.getParser();
dispatchCatalogState({
type: CatalogActions.SET_CLUB_OFFERS,
payload: {
clubOffers: parser.offers
}
});
}, [ dispatchCatalogState ]);
2021-06-21 11:54:29 +02:00
const onCatalogGroupsEvent = useCallback((event: CatalogGroupsEvent) =>
{
const parser = event.getParser();
dispatchCatalogState({
type: CatalogActions.SET_GROUPS,
payload: {
groups: parser.groups
}
});
}, [ dispatchCatalogState ]);
2021-06-12 04:53:56 +02:00
const onUserSubscriptionEvent = useCallback((event: UserSubscriptionEvent) =>
{
const parser = event.getParser();
dispatchCatalogState({
type: CatalogActions.SET_SUBSCRIPTION_INFO,
payload: {
subscriptionInfo: new SubscriptionInfo(
2021-07-24 10:04:27 +02:00
Math.max(0, parser.daysToPeriodEnd),
Math.max(0, parser.periodsSubscribedAhead),
2021-06-12 04:53:56 +02:00
parser.isVip,
parser.pastClubDays,
2021-07-24 10:04:27 +02:00
parser.pastVipDays
2021-06-12 04:53:56 +02:00
)
}
});
}, [ dispatchCatalogState ]);
const onCatalogUpdatedEvent = useCallback((event: CatalogUpdatedEvent) =>
{
dispatchCatalogState({
type: CatalogActions.RESET_STATE,
payload: {}
});
}, [ dispatchCatalogState ]);
2021-07-17 19:11:47 +02:00
const onCatalogGiftConfigurationEvent = useCallback((event: CatalogGiftConfigurationEvent) =>
{
const parser = event.getParser();
dispatchCatalogState({
type: CatalogActions.SET_GIFT_CONFIGURATION,
payload: {
giftConfiguration: parser
}
});
}, [ 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-06-21 11:54:29 +02:00
CreateMessageHook(CatalogGroupsEvent, onCatalogGroupsEvent);
2021-05-22 19:27:39 +02:00
CreateMessageHook(SellablePetPalettesEvent, onSellablePetPalettesEvent);
CreateMessageHook(CatalogApproveNameResultEvent, onCatalogApproveNameResultEvent);
2021-05-24 07:28:37 +02:00
CreateMessageHook(CatalogClubEvent, onCatalogClubEvent);
2021-06-12 04:53:56 +02:00
CreateMessageHook(UserSubscriptionEvent, onUserSubscriptionEvent);
CreateMessageHook(CatalogUpdatedEvent, onCatalogUpdatedEvent);
2021-07-17 19:11:47 +02:00
CreateMessageHook(CatalogGiftConfigurationEvent, onCatalogGiftConfigurationEvent);
2021-05-05 09:14:54 +02:00
return null;
2021-04-22 05:26:30 +02:00
}