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')}
);
}
}