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

57 lines
1.9 KiB
TypeScript
Raw Normal View History

2021-05-07 09:50:20 +02:00
import { UserCreditsEvent, UserCurrencyEvent, UserCurrencyUpdateEvent } from 'nitro-renderer';
import { FC, useCallback } from 'react';
import { CreateMessageHook } from '../../hooks/messages/message-event';
2021-06-23 06:03:56 +02:00
import { Currency } from './common/Currency';
2021-05-07 09:50:20 +02:00
import { usePurseContext } from './context/PurseContext';
import { PurseMessageHandlerProps } from './PurseMessageHandler.types';
import { PurseActions } from './reducers/PurseReducer';
export const PurseMessageHandler: FC<PurseMessageHandlerProps> = props =>
{
const { dispatchPurseState = null } = usePurseContext();
const onUserCreditsEvent = useCallback((event: UserCreditsEvent) =>
{
const parser = event.getParser();
dispatchPurseState({
type: PurseActions.SET_CURRENCY,
payload: {
currency: { type: -1, amount: parseFloat(parser.credits) }
}
});
}, [ dispatchPurseState ]);
const onUserCurrencyEvent = useCallback((event: UserCurrencyEvent) =>
{
const parser = event.getParser();
const currencies: Currency[] = [];
for(const [ key, value ] of parser.currencies.entries()) currencies.push({ type: key, amount: value });
dispatchPurseState({
type: PurseActions.SET_CURRENCIES,
payload: { currencies }
});
}, [ dispatchPurseState ]);
const onUserCurrencyUpdateEvent = useCallback((event: UserCurrencyUpdateEvent) =>
{
const parser = event.getParser();
dispatchPurseState({
type: PurseActions.SET_CURRENCY,
payload: {
currency: { type: parser.type, amount: parser.amount }
}
});
}, [ dispatchPurseState ]);
CreateMessageHook(UserCreditsEvent, onUserCreditsEvent);
CreateMessageHook(UserCurrencyEvent, onUserCurrencyEvent);
CreateMessageHook(UserCurrencyUpdateEvent, onUserCurrencyUpdateEvent);
return null;
}