2021-08-25 23:20:32 +02:00
|
|
|
import { ActivityPointNotificationMessageEvent, UserCreditsEvent, UserCurrencyEvent, UserSubscriptionEvent, UserSubscriptionParser } from '@nitrots/nitro-renderer';
|
2021-05-07 09:50:20 +02:00
|
|
|
import { FC, useCallback } from 'react';
|
|
|
|
import { CreateMessageHook } from '../../hooks/messages/message-event';
|
|
|
|
import { usePurseContext } from './context/PurseContext';
|
|
|
|
import { PurseMessageHandlerProps } from './PurseMessageHandler.types';
|
|
|
|
|
|
|
|
export const PurseMessageHandler: FC<PurseMessageHandlerProps> = props =>
|
|
|
|
{
|
2021-07-24 10:03:46 +02:00
|
|
|
const { purse = null } = usePurseContext();
|
2021-05-07 09:50:20 +02:00
|
|
|
|
|
|
|
const onUserCreditsEvent = useCallback((event: UserCreditsEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
2021-07-24 10:03:46 +02:00
|
|
|
purse.credits = parseFloat(parser.credits);
|
|
|
|
|
|
|
|
purse.notify();
|
|
|
|
}, [ purse ]);
|
2021-05-07 09:50:20 +02:00
|
|
|
|
|
|
|
const onUserCurrencyEvent = useCallback((event: UserCurrencyEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
2021-07-24 10:03:46 +02:00
|
|
|
purse.activityPoints = parser.currencies;
|
2021-05-07 09:50:20 +02:00
|
|
|
|
2021-07-24 10:03:46 +02:00
|
|
|
purse.notify();
|
|
|
|
}, [ purse ]);
|
2021-05-07 09:50:20 +02:00
|
|
|
|
2021-08-25 23:20:32 +02:00
|
|
|
const onUserCurrencyUpdateEvent = useCallback((event: ActivityPointNotificationMessageEvent) =>
|
2021-05-07 09:50:20 +02:00
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
2021-07-24 10:03:46 +02:00
|
|
|
purse.activityPoints.set(parser.type, parser.amount);
|
|
|
|
|
|
|
|
purse.notify();
|
|
|
|
}, [ purse ]);
|
2021-05-07 09:50:20 +02:00
|
|
|
|
2021-07-04 04:07:29 +02:00
|
|
|
const onUserSubscriptionEvent = useCallback((event: UserSubscriptionEvent) =>
|
|
|
|
{
|
|
|
|
const parser = event.getParser();
|
|
|
|
|
2021-07-24 10:03:46 +02:00
|
|
|
const productName = parser.productName;
|
|
|
|
|
|
|
|
if((productName !== 'club_habbo') && (productName !== 'habbo_club')) return;
|
|
|
|
|
|
|
|
purse.clubDays = Math.max(0, parser.daysToPeriodEnd);
|
|
|
|
purse.clubPeriods = Math.max(0, parser.periodsSubscribedAhead);
|
|
|
|
purse.isVip = parser.isVip;
|
|
|
|
purse.pastClubDays = parser.pastClubDays;
|
|
|
|
purse.pastVipDays = parser.pastVipDays;
|
|
|
|
purse.isExpiring = ((parser.responseType === UserSubscriptionParser.RESPONSE_TYPE_DISCOUNT_AVAILABLE) ? true : false);
|
|
|
|
purse.minutesUntilExpiration = parser.minutesUntilExpiration;
|
|
|
|
purse.minutesSinceLastModified = parser.minutesSinceLastModified;
|
|
|
|
|
|
|
|
purse.notify();
|
|
|
|
}, [ purse ]);
|
2021-07-04 04:07:29 +02:00
|
|
|
|
2021-05-07 09:50:20 +02:00
|
|
|
CreateMessageHook(UserCreditsEvent, onUserCreditsEvent);
|
|
|
|
CreateMessageHook(UserCurrencyEvent, onUserCurrencyEvent);
|
2021-08-25 23:20:32 +02:00
|
|
|
CreateMessageHook(ActivityPointNotificationMessageEvent, onUserCurrencyUpdateEvent);
|
2021-07-04 04:07:29 +02:00
|
|
|
CreateMessageHook(UserSubscriptionEvent, onUserSubscriptionEvent);
|
2021-05-07 09:50:20 +02:00
|
|
|
|
|
|
|
return null;
|
|
|
|
}
|