nitro-react/src/views/purse/PurseMessageHandler.tsx

65 lines
2.3 KiB
TypeScript
Raw Normal View History

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