import React, { useEffect } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import PropTypes from 'prop-types'; import { LEDGER_TRANSPORT_TYPES, LEDGER_USB_VENDOR_ID, WEBHID_CONNECTED_STATUSES, } from '../../../../shared/constants/hardware-wallets'; import { PLATFORM_FIREFOX, ENVIRONMENT_TYPE_FULLSCREEN, } from '../../../../shared/constants/app'; import { setLedgerWebHidConnectedStatus, getLedgerWebHidConnectedStatus, } from '../../../ducks/app/app'; import Typography from '../../ui/typography/typography'; import Button from '../../ui/button'; import { useI18nContext } from '../../../hooks/useI18nContext'; import { COLORS, FONT_WEIGHT, TYPOGRAPHY, } from '../../../helpers/constants/design-system'; import Dialog from '../../ui/dialog'; import { getPlatform, getEnvironmentType, } from '../../../../app/scripts/lib/util'; import { getLedgerTransportType } from '../../../ducks/metamask/metamask'; const renderInstructionStep = (text, show = true, color = COLORS.PRIMARY3) => { return ( show && ( {text} ) ); }; export default function LedgerInstructionField({ showDataInstruction }) { const t = useI18nContext(); const dispatch = useDispatch(); const webHidConnectedStatus = useSelector(getLedgerWebHidConnectedStatus); const ledgerTransportType = useSelector(getLedgerTransportType); const environmentType = getEnvironmentType(); const environmentTypeIsFullScreen = environmentType === ENVIRONMENT_TYPE_FULLSCREEN; useEffect(() => { const initialConnectedDeviceCheck = async () => { if ( ledgerTransportType === LEDGER_TRANSPORT_TYPES.WEBHID && webHidConnectedStatus !== WEBHID_CONNECTED_STATUSES.CONNECTED ) { const devices = await window.navigator.hid.getDevices(); const webHidIsConnected = devices.some( (device) => device.vendorId === Number(LEDGER_USB_VENDOR_ID), ); dispatch( setLedgerWebHidConnectedStatus( webHidIsConnected ? WEBHID_CONNECTED_STATUSES.CONNECTED : WEBHID_CONNECTED_STATUSES.NOT_CONNECTED, ), ); } }; initialConnectedDeviceCheck(); }, [dispatch, ledgerTransportType, webHidConnectedStatus]); const usingLedgerLive = ledgerTransportType === LEDGER_TRANSPORT_TYPES.LIVE; const usingWebHID = ledgerTransportType === LEDGER_TRANSPORT_TYPES.WEBHID; const isFirefox = getPlatform() === PLATFORM_FIREFOX; return (
{renderInstructionStep(t('ledgerConnectionInstructionHeader'))} {renderInstructionStep( `- ${t('ledgerConnectionInstructionStepOne')}`, !isFirefox && usingLedgerLive, )} {renderInstructionStep( `- ${t('ledgerConnectionInstructionStepTwo')}`, !isFirefox && usingLedgerLive, )} {renderInstructionStep( `- ${t('ledgerConnectionInstructionStepThree')}`, )} {renderInstructionStep( `- ${t('ledgerConnectionInstructionStepFour')}`, showDataInstruction, )} {renderInstructionStep( , usingWebHID && webHidConnectedStatus === WEBHID_CONNECTED_STATUSES.NOT_CONNECTED, COLORS.SECONDARY1, )}
); } LedgerInstructionField.propTypes = { showDataInstruction: PropTypes.bool, };