// SPDX-License-Identifier: MIT // Copyright (c) 2022 The Pybricks Authors import './dfuWindowsDriverInstallDialog.scss'; import { Card, Classes, DialogStep, Elevation, MultistepDialog, } from '@blueprintjs/core'; import React from 'react'; import { useDispatch } from 'react-redux'; import { Hub } from '../../components/hubPicker'; import { useHubPickerSelectedHub } from '../../components/hubPicker/hooks'; import { useSelector } from '../../reducers'; import { firmwareDfuWindowsDriverInstallDialogDialogHide } from './actions'; import { useI18n } from './i18n'; const dfuWindows1OpenDeviceManagerUrl = new URL( '@pybricks/images/dfu_windows_1_open_device_manager.png', import.meta.url, ); const dfuWindows2LargeHubOpenPropertiesUrl = new URL( '@pybricks/images/dfu_windows_2_large_hub_open_properties.png', import.meta.url, ); const dfuWindows2SmallHubOpenPropertiesUrl = new URL( '@pybricks/images/dfu_windows_2_small_hub_open_properties.png', import.meta.url, ); const dfuWindows3LargeHubPropertiesUrl = new URL( '@pybricks/images/dfu_windows_3_large_hub_properties.png', import.meta.url, ); const dfuWindows3SmallHubPropertiesUrl = new URL( '@pybricks/images/dfu_windows_3_small_hub_properties.png', import.meta.url, ); const dfuWindows4LargeHubUpdateDriverUrl = new URL( '@pybricks/images/dfu_windows_4_large_hub_update_driver.png', import.meta.url, ); const dfuWindows4SmallHubUpdateDriverUrl = new URL( '@pybricks/images/dfu_windows_4_small_hub_update_driver.png', import.meta.url, ); const dfuWindows5LargeHubUpdateDriverPickUrl = new URL( '@pybricks/images/dfu_windows_5_large_hub_update_driver_pick.png', import.meta.url, ); const dfuWindows5SmallHubUpdateDriverPickUrl = new URL( '@pybricks/images/dfu_windows_5_small_hub_update_driver_pick.png', import.meta.url, ); const dfuWindows6LargeHubUpdateDriverSelectTypeUrl = new URL( '@pybricks/images/dfu_windows_6_large_hub_update_driver_select_type.png', import.meta.url, ); const dfuWindows6SmallHubUpdateDriverSelectTypeUrl = new URL( '@pybricks/images/dfu_windows_6_small_hub_update_driver_select_type.png', import.meta.url, ); const dfuWindows7LargeHubUpdateDriverSelectDriverUrl = new URL( '@pybricks/images/dfu_windows_7_large_hub_update_driver_select_driver.png', import.meta.url, ); const dfuWindows7SmallHubUpdateDriverSelectDriverUrl = new URL( '@pybricks/images/dfu_windows_7_small_hub_update_driver_select_driver.png', import.meta.url, ); const dfuWindows8UpdateDriverWarningUrl = new URL( '@pybricks/images/dfu_windows_8_update_driver_warning.png', import.meta.url, ); const dfuWindows9LargeHubUpdateDriverDoneUrl = new URL( '@pybricks/images/dfu_windows_9_large_hub_update_driver_done.png', import.meta.url, ); const dfuWindows9SmallHubUpdateDriverDoneUrl = new URL( '@pybricks/images/dfu_windows_9_small_hub_update_driver_done.png', import.meta.url, ); // These names are hard-coded in the hub bootloader, so they don't get translated const dfuSmallHubUsbName = 'LEGO Technic Small Hub in DFU Mode'; const dfuLargeHubUsbName = 'LEGO Technic Large Hub in DFU Mode'; type ScreenshotProps = { url: URL; }; const Screenshot: React.VoidFunctionComponent = ({ url }) => { return ( Screenshot ); }; type HubTypeProps = { hub: Hub; }; const Step1: React.VoidFunctionComponent = () => { const i18n = useI18n(); return (

{i18n.translate('step.1.message', { startMenu: {i18n.translate('step.1.startMenu')}, deviceManager: ( {i18n.translate('step.1.deviceManager')} ), })}

); }; const Step2: React.VoidFunctionComponent = ({ hub }) => { const i18n = useI18n(); return (

{i18n.translate('step.2.message', { dfuUsbHubName: ( {hub === Hub.Essential ? dfuSmallHubUsbName : dfuLargeHubUsbName} ), otherDevices: {i18n.translate('step.2.otherDevices')}, properties: {i18n.translate('step.2.properties')}, })}

); }; const Step3: React.VoidFunctionComponent = ({ hub }) => { const i18n = useI18n(); return (

{i18n.translate('step.3.message', { properties: ( {i18n.translate('step.3.properties', { dfuUsbHubName: ( {hub === Hub.Essential ? dfuSmallHubUsbName : dfuLargeHubUsbName} ), })} ), updateDriver: {i18n.translate('step.3.updateDriver')}, })}

); }; const Step4: React.VoidFunctionComponent = ({ hub }) => { const i18n = useI18n(); return (

{i18n.translate('step.4.message', { updateDrivers: ( {i18n.translate('step.4.updateDrivers')} ), browse: {i18n.translate('step.4.browse')}, })}

); }; const Step5: React.VoidFunctionComponent = ({ hub }) => { const i18n = useI18n(); return (

{i18n.translate('step.5.message', { letMePick: {i18n.translate('step.5.letMePick')}, })}

); }; const Step6: React.VoidFunctionComponent = ({ hub }) => { const i18n = useI18n(); return (

{i18n.translate('step.6.message', { usbDevices: {i18n.translate('step.6.usbDevices')}, next: {i18n.translate('step.6.next')}, })}

); }; const Step7: React.VoidFunctionComponent = ({ hub }) => { const i18n = useI18n(); return (

{i18n.translate('step.7.message', { manufacturer: {i18n.translate('step.7.manufacturer')}, winUsbDevice: {i18n.translate('step.7.winUsbDevice')}, model: {i18n.translate('step.7.model')}, next: {i18n.translate('step.7.next')}, })}

); }; const Step8: React.VoidFunctionComponent = () => { const i18n = useI18n(); return (

{i18n.translate('step.8.message', { yes: {i18n.translate('step.8.yes')}, })}

); }; const Step9: React.VoidFunctionComponent = ({ hub }) => { const i18n = useI18n(); return (

{i18n.translate('step.9.message', { close: {i18n.translate('step.9.close')}, })}

); }; const DfuWindowsDriverInstallDialog: React.VoidFunctionComponent = () => { const [hub] = useHubPickerSelectedHub(); const { isOpen } = useSelector((s) => s.firmware.dfuWindowsDriverInstallDialog); const dispatch = useDispatch(); const i18n = useI18n(); return ( dispatch(firmwareDfuWindowsDriverInstallDialogDialogHide())} finalButtonProps={{ text: i18n.translate('doneButton.label'), onClick: () => dispatch(firmwareDfuWindowsDriverInstallDialogDialogHide()), }} > } nextButtonProps={{ text: i18n.translate('nextButton.label') }} /> } nextButtonProps={{ text: i18n.translate('nextButton.label') }} /> } nextButtonProps={{ text: i18n.translate('nextButton.label') }} /> } nextButtonProps={{ text: i18n.translate('nextButton.label') }} /> } nextButtonProps={{ text: i18n.translate('nextButton.label') }} /> } nextButtonProps={{ text: i18n.translate('nextButton.label') }} /> } nextButtonProps={{ text: i18n.translate('nextButton.label') }} /> } nextButtonProps={{ text: i18n.translate('nextButton.label') }} /> } nextButtonProps={{ text: i18n.translate('nextButton.label') }} /> ); }; export default DfuWindowsDriverInstallDialog;