import React from 'react'; import _ from 'lodash'; import { getTheme } from '../state/selectors/theme'; import electron from 'electron'; import { useSelector } from 'react-redux'; import { StateType } from '../state/reducer'; import { SessionIcon, SessionIconSize, SessionIconType } from './session/icon'; const { shell } = electron; import { SessionWrapperModal } from '../components/session/SessionWrapperModal'; import { Snode } from '../session/onions'; import ip2country from 'ip2country'; import countryLookup from 'country-code-lookup'; import { useTheme } from 'styled-components'; export type OnionPathModalType = { onConfirm?: () => void; onClose?: () => void; confirmText?: string; cancelText?: string; title?: string; }; export type StatusLightType = { glowStartDelay: number; glowDuration: number; color?: string; }; const OnionPathModalInner = (props: any) => { const onionNodes = useSelector((state: StateType) => state.onionPaths.snodePath); const onionPath = onionNodes.path; // including the device and destination in calculation const glowDuration = onionPath.length + 2; const nodes = [ { label: window.i18n('device'), }, ...onionNodes.path, , { label: window.i18n('destination'), }, ]; return (
{nodes.map((snode: Snode | any, index: number) => { return ( <> ); })}
); }; export type OnionNodeStatusLightType = { snode: Snode; label?: string; glowStartDelay: number; glowDuration: number; }; /** * Component containing a coloured status light and an adjacent country label. * @param props * @returns */ export const OnionNodeStatusLight = (props: OnionNodeStatusLightType): JSX.Element => { const { snode, label, glowStartDelay, glowDuration } = props; const theme = useTheme(); let labelText = label ? label : countryLookup.byIso(ip2country(snode.ip))?.country; if (!labelText) { labelText = window.i18n('unknownCountry'); } return (
{labelText ? ( <>
{labelText}
) : null}
); }; /** * An icon with a pulsating glow emission. */ export const StatusLight = (props: StatusLightType) => { const { glowStartDelay, glowDuration, color } = props; const theme = useSelector(getTheme); return ( <> ); }; export const OnionPathModal = (props: OnionPathModalType) => { const onConfirm = () => { shell.openExternal('https://getsession.org/faq/#onion-routing'); }; return ( ); };