nitro-react/src/views/purse/PurseMessageHandler.tsx
2021-08-25 16:20:32 -05:00

65 lines
2.3 KiB
TypeScript

import { ActivityPointNotificationMessageEvent, UserCreditsEvent, UserCurrencyEvent, UserSubscriptionEvent, UserSubscriptionParser } from '@nitrots/nitro-renderer';
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 =>
{
const { purse = null } = usePurseContext();
const onUserCreditsEvent = useCallback((event: UserCreditsEvent) =>
{
const parser = event.getParser();
purse.credits = parseFloat(parser.credits);
purse.notify();
}, [ purse ]);
const onUserCurrencyEvent = useCallback((event: UserCurrencyEvent) =>
{
const parser = event.getParser();
purse.activityPoints = parser.currencies;
purse.notify();
}, [ purse ]);
const onUserCurrencyUpdateEvent = useCallback((event: ActivityPointNotificationMessageEvent) =>
{
const parser = event.getParser();
purse.activityPoints.set(parser.type, parser.amount);
purse.notify();
}, [ purse ]);
const onUserSubscriptionEvent = useCallback((event: UserSubscriptionEvent) =>
{
const parser = event.getParser();
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 ]);
CreateMessageHook(UserCreditsEvent, onUserCreditsEvent);
CreateMessageHook(UserCurrencyEvent, onUserCurrencyEvent);
CreateMessageHook(ActivityPointNotificationMessageEvent, onUserCurrencyUpdateEvent);
CreateMessageHook(UserSubscriptionEvent, onUserSubscriptionEvent);
return null;
}