import { FriendlyTime, HabboClubLevelEnum, UserCurrencyComposer, UserSubscriptionComposer } from 'nitro-renderer'; import { FC, useCallback, useEffect, useMemo, useState } from 'react'; import { GetConfiguration } from '../../api'; import { SendMessageHook } from '../../hooks/messages/message-event'; import { LocalizeText } from '../../utils/LocalizeText'; import { CurrencyIcon } from '../shared/currency-icon/CurrencyIcon'; import { IPurse } from './common/IPurse'; import { Purse } from './common/Purse'; import { PurseContextProvider } from './context/PurseContext'; import { PurseMessageHandler } from './PurseMessageHandler'; import { CurrencyView } from './views/currency/CurrencyView'; import { SeasonalView } from './views/seasonal/SeasonalView'; export let GLOBAL_PURSE: IPurse = null; export const PurseView: FC<{}> = props => { const [ purse, setPurse ] = useState(new Purse()); const [ updateId, setUpdateId ] = useState(-1); const displayedCurrencies = useMemo(() => { return GetConfiguration('system.currency.types', []); }, []); const getCurrencyElements = useCallback((offset: number, limit: number = -1, seasonal: boolean = false) => { if(!purse.activityPoints.size) return null; const types = Array.from(purse.activityPoints.keys()).filter(type => (displayedCurrencies.indexOf(type) >= 0)); let count = 0; while(count < offset) { types.shift(); count++; } count = 0; const elements: JSX.Element[] = []; for(const type of types) { if((limit > -1) && (count === limit)) break; if(seasonal) elements.push(); else elements.push(); count++; } return elements; }, [ purse, displayedCurrencies ]); const getClubText = useCallback(() => { const totalDays = ((purse.clubPeriods * 31) + purse.clubDays); const minutesUntilExpiration = purse.minutesUntilExpiration; if(purse.clubLevel === HabboClubLevelEnum.NO_CLUB) { return LocalizeText('purse.clubdays.zero.amount.text'); } else if((minutesUntilExpiration > -1) && (minutesUntilExpiration < (60 * 24))) { return FriendlyTime.shortFormat(minutesUntilExpiration * 60); } else { return FriendlyTime.shortFormat(totalDays * 86400); } }, [ purse ]); useEffect(() => { const purse = new Purse(); GLOBAL_PURSE = purse; purse.notifier = () => setUpdateId(prevValue => (prevValue + 1)); setPurse(purse); return () => (purse.notifier = null); }, []); useEffect(() => { if(!purse) return; SendMessageHook(new UserCurrencyComposer()); }, [ purse ]); useEffect(() => { SendMessageHook(new UserSubscriptionComposer('habbo_club')); const interval = setInterval(() => { SendMessageHook(new UserSubscriptionComposer('habbo_club')); }, 50000); return () => clearInterval(interval); }, [ purse ]); if(!purse) return null; return (
{ getCurrencyElements(0, 2) }
{ getClubText() }
{/*
*/}
{ getCurrencyElements(2, -1, true) }
); }