2022-01-05 22:12:29 +01:00
|
|
|
import { ApproveNameMessageEvent, CatalogPageMessageEvent, CatalogPagesListEvent, CatalogPublishedMessageEvent, ClubGiftInfoEvent, GiftReceiverNotFoundEvent, GiftWrappingConfigurationEvent, HabboClubOffersMessageEvent, LimitedEditionSoldOutEvent, ProductOfferEvent, PurchaseErrorMessageEvent, PurchaseNotAllowedMessageEvent, PurchaseOKMessageEvent, SellablePetPalettesMessageEvent, UserSubscriptionEvent } from '@nitrots/nitro-renderer';
|
2021-08-25 23:20:32 +02:00
|
|
|
import { GuildMembershipsMessageEvent } from '@nitrots/nitro-renderer/src/nitro/communication/messages/incoming/user/GuildMembershipsMessageEvent';
|
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-09-14 21:34:13 +02:00
|
|
|
import { CatalogGiftReceiverNotFoundEvent } from '../../events/catalog/CatalogGiftReceiverNotFoundEvent';
|
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
|
|
|
|
2021-09-01 00:18:53 +02:00
|
|
|
const onCatalogPagesListEvent = useCallback((event: CatalogPagesListEvent) =>
|
2021-05-05 09:14:54 +02:00
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
dispatchCatalogState({
|
|
|
|
type: CatalogActions.SET_CATALOG_ROOT,
|
|
|
|
payload: {
|
|
|
|
root: parser.root
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}, [ dispatchCatalogState ]);
|
|
|
|
|
2021-09-01 00:18:53 +02:00
|
|
|
const onCatalogPageMessageEvent = useCallback((event: CatalogPageMessageEvent) =>
|
2021-05-05 09:14:54 +02:00
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
dispatchCatalogState({
|
|
|
|
type: CatalogActions.SET_CATALOG_PAGE_PARSER,
|
|
|
|
payload: {
|
|
|
|
pageParser: parser
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}, [ dispatchCatalogState ]);
|
|
|
|
|
2021-09-01 00:18:53 +02:00
|
|
|
const onPurchaseOKMessageEvent = useCallback((event: PurchaseOKMessageEvent) =>
|
2021-05-10 19:11:16 +02:00
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
dispatchUiEvent(new CatalogPurchasedEvent(parser.offer));
|
|
|
|
}, []);
|
|
|
|
|
2021-09-01 00:18:53 +02:00
|
|
|
const onPurchaseErrorMessageEvent = useCallback((event: PurchaseErrorMessageEvent) =>
|
2021-05-10 19:11:16 +02:00
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
dispatchUiEvent(new CatalogPurchaseFailureEvent(parser.code));
|
|
|
|
}, []);
|
|
|
|
|
2021-09-01 00:18:53 +02:00
|
|
|
const onPurchaseNotAllowedMessageEvent = useCallback((event: PurchaseNotAllowedMessageEvent) =>
|
2021-05-10 19:11:16 +02:00
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
}, []);
|
|
|
|
|
2021-09-01 00:18:53 +02:00
|
|
|
const onLimitedEditionSoldOutEvent = useCallback((event: LimitedEditionSoldOutEvent) =>
|
2021-05-10 19:11:16 +02:00
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
dispatchUiEvent(new CatalogPurchaseSoldOutEvent());
|
|
|
|
}, []);
|
|
|
|
|
2021-09-01 00:18:53 +02:00
|
|
|
const onProductOfferEvent = useCallback((event: ProductOfferEvent) =>
|
2021-05-10 19:11:16 +02:00
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
dispatchCatalogState({
|
|
|
|
type: CatalogActions.SET_CATALOG_ACTIVE_OFFER,
|
|
|
|
payload: {
|
|
|
|
activeOffer: parser.offer
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}, [ dispatchCatalogState ]);
|
|
|
|
|
2021-09-01 00:18:53 +02:00
|
|
|
const onSellablePetPalettesMessageEvent = useCallback((event: SellablePetPalettesMessageEvent) =>
|
2021-05-22 19:27:39 +02:00
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
const petPalette = new CatalogPetPalette(parser.productCode, parser.palettes.slice());
|
|
|
|
|
|
|
|
dispatchCatalogState({
|
|
|
|
type: CatalogActions.SET_PET_PALETTE,
|
|
|
|
payload: { petPalette }
|
|
|
|
});
|
|
|
|
}, [ dispatchCatalogState ]);
|
|
|
|
|
2021-09-01 00:18:53 +02:00
|
|
|
const onApproveNameMessageEvent = useCallback((event: ApproveNameMessageEvent) =>
|
2021-05-22 19:27:39 +02:00
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
dispatchUiEvent(new CatalogNameResultEvent(parser.result, parser.validationInfo));
|
|
|
|
}, []);
|
|
|
|
|
2021-09-14 21:34:13 +02:00
|
|
|
const onGiftReceiverNotFoundEvent = useCallback(() =>
|
|
|
|
{
|
|
|
|
dispatchUiEvent(new CatalogGiftReceiverNotFoundEvent());
|
|
|
|
}, []);
|
|
|
|
|
2021-09-01 00:18:53 +02:00
|
|
|
const onHabboClubOffersMessageEvent = useCallback((event: HabboClubOffersMessageEvent) =>
|
2021-05-24 07:28:37 +02:00
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
dispatchCatalogState({
|
|
|
|
type: CatalogActions.SET_CLUB_OFFERS,
|
|
|
|
payload: {
|
|
|
|
clubOffers: parser.offers
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}, [ dispatchCatalogState ]);
|
|
|
|
|
2021-09-01 00:18:53 +02:00
|
|
|
const onGuildMembershipsMessageEvent = useCallback((event: GuildMembershipsMessageEvent) =>
|
2021-06-21 11:54:29 +02:00
|
|
|
{
|
|
|
|
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 ]);
|
|
|
|
|
2021-09-01 00:18:53 +02:00
|
|
|
const onCatalogPublishedMessageEvent = useCallback((event: CatalogPublishedMessageEvent) =>
|
2021-06-12 04:53:56 +02:00
|
|
|
{
|
|
|
|
dispatchCatalogState({
|
|
|
|
type: CatalogActions.RESET_STATE,
|
|
|
|
payload: {}
|
|
|
|
});
|
|
|
|
}, [ dispatchCatalogState ]);
|
|
|
|
|
2021-09-01 00:18:53 +02:00
|
|
|
const onGiftWrappingConfigurationEvent = useCallback((event: GiftWrappingConfigurationEvent) =>
|
2021-07-17 19:11:47 +02:00
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
dispatchCatalogState({
|
|
|
|
type: CatalogActions.SET_GIFT_CONFIGURATION,
|
|
|
|
payload: {
|
|
|
|
giftConfiguration: parser
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}, [ dispatchCatalogState ]);
|
|
|
|
|
2022-01-05 22:12:29 +01:00
|
|
|
const onClubGiftInfoEvent = useCallback((event: ClubGiftInfoEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
|
|
|
if(!parser) return;
|
|
|
|
|
|
|
|
dispatchCatalogState({
|
|
|
|
type: CatalogActions.SET_CLUB_GIFTS,
|
|
|
|
payload: {
|
|
|
|
clubGifts: parser
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}, [dispatchCatalogState]);
|
|
|
|
|
2021-09-01 00:18:53 +02:00
|
|
|
CreateMessageHook(CatalogPagesListEvent, onCatalogPagesListEvent);
|
|
|
|
CreateMessageHook(CatalogPageMessageEvent, onCatalogPageMessageEvent);
|
|
|
|
CreateMessageHook(PurchaseOKMessageEvent, onPurchaseOKMessageEvent);
|
|
|
|
CreateMessageHook(PurchaseErrorMessageEvent, onPurchaseErrorMessageEvent);
|
|
|
|
CreateMessageHook(PurchaseNotAllowedMessageEvent, onPurchaseNotAllowedMessageEvent);
|
|
|
|
CreateMessageHook(LimitedEditionSoldOutEvent, onLimitedEditionSoldOutEvent);
|
|
|
|
CreateMessageHook(ProductOfferEvent, onProductOfferEvent);
|
|
|
|
CreateMessageHook(GuildMembershipsMessageEvent, onGuildMembershipsMessageEvent);
|
|
|
|
CreateMessageHook(SellablePetPalettesMessageEvent, onSellablePetPalettesMessageEvent);
|
|
|
|
CreateMessageHook(ApproveNameMessageEvent, onApproveNameMessageEvent);
|
2021-09-14 21:34:13 +02:00
|
|
|
CreateMessageHook(GiftReceiverNotFoundEvent, onGiftReceiverNotFoundEvent);
|
2021-09-01 00:18:53 +02:00
|
|
|
CreateMessageHook(HabboClubOffersMessageEvent, onHabboClubOffersMessageEvent);
|
2021-06-12 04:53:56 +02:00
|
|
|
CreateMessageHook(UserSubscriptionEvent, onUserSubscriptionEvent);
|
2021-09-01 00:18:53 +02:00
|
|
|
CreateMessageHook(CatalogPublishedMessageEvent, onCatalogPublishedMessageEvent);
|
|
|
|
CreateMessageHook(GiftWrappingConfigurationEvent, onGiftWrappingConfigurationEvent);
|
2022-01-05 22:12:29 +01:00
|
|
|
CreateMessageHook(ClubGiftInfoEvent, onClubGiftInfoEvent);
|
2021-05-05 09:14:54 +02:00
|
|
|
|
|
|
|
return null;
|
2021-04-22 05:26:30 +02:00
|
|
|
}
|