import { useCallback, useEffect } from 'react'; import { links } from '../../config.json'; import { formatDate, hasExpired } from '../../shared/account-expiry'; import { messages } from '../../shared/gettext'; import { useAppContext } from '../context'; import { useHistory } from '../lib/history'; import { useSelector } from '../redux/store'; import { AccountContainer, AccountOutOfTime, AccountRow, AccountRowLabel, AccountRows, AccountRowValue, DeviceRowValue, StyledDeviceNameRow, } from './AccountStyles'; import AccountTokenLabel from './AccountTokenLabel'; import * as AppButton from './AppButton'; import { AriaDescribed, AriaDescription, AriaDescriptionGroup } from './AriaGroup'; import DeviceInfoButton from './DeviceInfoButton'; import { BackAction } from './KeyboardNavigation'; import { Footer, Layout, SettingsContainer } from './Layout'; import { NavigationBar, NavigationItems, TitleBarItem } from './NavigationBar'; import { RedeemVoucherButton } from './RedeemVoucher'; import SettingsHeader, { HeaderTitle } from './SettingsHeader'; export default function Account() { const history = useHistory(); const isOffline = useSelector((state) => state.connection.isBlocked); const { updateAccountData, openLinkWithAuth, logout } = useAppContext(); const onBuyMore = useCallback(async () => { await openLinkWithAuth(links.purchase); }, []); useEffect(() => { updateAccountData(); }, []); // Hack needed because if we just call `logout` directly in `onClick` // then it is run with the wrong `this`. const doLogout = useCallback(async () => { await logout(); }, [logout]); return ( { // TRANSLATORS: Title label in navigation bar messages.pgettext('account-view', 'Account') } {messages.pgettext('account-view', 'Account')} {messages.pgettext('device-management', 'Device name')} {messages.pgettext('account-view', 'Account number')} {messages.pgettext('account-view', 'Paid until')} ); } function DeviceNameRow() { const deviceName = useSelector((state) => state.account.deviceName); return ( {deviceName} ); } function AccountNumberRow() { const accountToken = useSelector((state) => state.account.accountToken); return ; } function AccountExpiryRow() { const accountExpiry = useSelector((state) => state.account.expiry); const expiryLocale = useSelector((state) => state.userInterface.locale); return ; } function FormattedAccountExpiry(props: { expiry?: string; locale: string }) { if (props.expiry) { if (hasExpired(props.expiry)) { return ( {messages.pgettext('account-view', 'OUT OF TIME')} ); } else { return {formatDate(props.expiry, props.locale)}; } } else { return ( {messages.pgettext('account-view', 'Currently unavailable')} ); } }