import { CreateLinkEvent } from '@nitrots/nitro-renderer'; import { FC, useCallback, useMemo, useState } from 'react'; import { FaChartBar, FaCog, FaSignOutAlt } from 'react-icons/fa'; import { ClearRememberLogin, GetConfigurationValue, GetRememberLogin, localizeWithFallback, LocalizeText } from '../../api'; import { Column, LayoutCurrencyIcon } from '../../common'; import { usePurse } from '../../hooks'; import { CurrencyView } from './views/CurrencyView'; import { SeasonalView } from './views/SeasonalView'; export const PurseView: FC<{}> = props => { const { purse = null, hcDisabled = false } = usePurse(); const [ settingsMenuOpen, setSettingsMenuOpen ] = useState(false); const openSettingsSection = useCallback((section: string) => { CreateLinkEvent('user-settings/show/' + section); setSettingsMenuOpen(false); }, []); const displayedCurrencies = useMemo(() => GetConfigurationValue('system.currency.types', []), []); const currencyDisplayNumberShort = useMemo(() => GetConfigurationValue('currency.display.number.short', false), []); const currencyTypes = useMemo(() => { if (!purse || !purse.activityPoints || !purse.activityPoints.size) return []; const types = Array.from(purse.activityPoints.keys()).filter(type => (displayedCurrencies.indexOf(type) >= 0)); types.sort((a, b) => { if (a === 0) return -1; if (b === 0) return 1; if (a === 5) return -1; if (b === 5) return 1; return a - b; }); return types; }, [ displayedCurrencies, purse ]); const hasDiamonds = currencyTypes.indexOf(5) >= 0; const hasDuckets = currencyTypes.indexOf(0) >= 0; const otherCurrencies = currencyTypes.filter(type => (type !== 0 && type !== 5)); const joinLabel = useMemo(() => localizeWithFallback('purse.join', 'Join'), []); const earningsLabel = useMemo(() => localizeWithFallback('earnings.title', 'Earnings'), []); const helpLabel = useMemo(() => localizeWithFallback('help.button.name', 'Help'), []); const openClub = useCallback((event: React.MouseEvent) => { event.stopPropagation(); CreateLinkEvent('habboUI/open/hccenter'); }, []); const openEarnings = useCallback((event: React.MouseEvent) => { event.stopPropagation(); CreateLinkEvent('habboUI/open/vault'); }, []); const handleLogout = useCallback(async (event: React.MouseEvent) => { event.stopPropagation(); const logoutUrl = GetConfigurationValue('login.logout.endpoint', '/api/auth/logout'); const ssoTicket = (window.NitroConfig?.['sso.ticket'] as string) ?? ''; const rememberToken = GetRememberLogin()?.token || ''; try { await fetch(logoutUrl, { method: 'POST', credentials: 'include', keepalive: true, headers: { 'Content-Type': 'application/json', 'Accept': 'application/json', 'X-Requested-With': 'NitroPurseLogout' }, body: JSON.stringify({ ssoTicket, rememberToken }) }); } catch { /* best-effort — proceed with local logout regardless */ } ClearRememberLogin(); if(window.NitroConfig) window.NitroConfig['sso.ticket'] = ''; window.location.reload(); }, []); if (!purse) return null; return (
{ hasDiamonds && } { hasDuckets && }
{ !hcDisabled && }
{ settingsMenuOpen &&
} { otherCurrencies.length > 0 &&
{ otherCurrencies.map(type => ) }
}
); };