import {User} from '../../../user'; import {AccountSettingsPanel} from '../account-settings-panel'; import {Trans} from '@common/i18n/trans'; import {AccountSettingsId} from '@common/auth/ui/account-settings/account-settings-sidenav'; import { ActiveSession, useUserSessions, } from '@common/auth/ui/account-settings/sessions-panel/requests/use-user-sessions'; import {ComputerIcon} from '@common/icons/material/Computer'; import {SmartphoneIcon} from '@common/icons/material/Smartphone'; import {TabletIcon} from '@common/icons/material/Tablet'; import {FormattedRelativeTime} from '@common/i18n/formatted-relative-time'; import {SvgIconProps} from '@common/icons/svg-icon'; import {Fragment, ReactNode} from 'react'; import {ProgressCircle} from '@common/ui/progress/progress-circle'; import {useLogoutOtherSessions} from '@common/auth/ui/account-settings/sessions-panel/requests/use-logout-other-sessions'; import {usePasswordConfirmedAction} from '@common/auth/ui/confirm-password/use-password-confirmed-action'; import {Button} from '@common/ui/buttons/button'; import {toast} from '@common/ui/toast/toast'; import {message} from '@common/i18n/message'; interface Props { user: User; } export function SessionsPanel({user}: Props) { const {data, isLoading} = useUserSessions(); const logoutOther = useLogoutOtherSessions(); const {withConfirmedPassword, isLoading: checkingPasswordStatus} = usePasswordConfirmedAction({needsPassword: true}); const sessionList = (
{data?.sessions?.map(session => ( ))}
); return ( } >

{isLoading ? (
) : ( sessionList )}
); } interface SessionItemProps { session: ActiveSession; } function SessionItem({session}: SessionItemProps) { return (
{session.platform} -{' '} {session.browser}
{session.city}, {session.country}
-
); } interface DeviceIconProps { device: ActiveSession['device_type']; size: SvgIconProps['size']; } function DeviceIcon({device, size}: DeviceIconProps) { switch (device) { case 'mobile': return ; case 'tablet': return ; default: return ; } } interface LastActiveProps { session: ActiveSession; } function LastActive({session}: LastActiveProps) { if (session.is_current_device) { return ( ); } return ; } interface IpAddressProps { session: ActiveSession; } function IpAddress({session}: IpAddressProps) { if (session.ip_address) { return {session.ip_address}; } else if (session.token) { return ; } return ; } interface ValueOrUnknownProps { children: ReactNode; } function ValueOrUnknown({children}: ValueOrUnknownProps) { return children ? ( {children} ) : ( ); }