/* * Copyright (c) 2015 Nordic Semiconductor ASA * * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause */ import React, { type FC, useMemo } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { Toggle } from '../../../Toggle/Toggle'; import classNames from '../../../utils/classNames'; import { getAutoReselect, setAutoReselect } from '../../deviceAutoSelectSlice'; import { displayedDeviceName } from '../../deviceInfo/deviceInfo'; import { type Device as DeviceProps, getDevices, selectedDevice, } from '../../deviceSlice'; import { AnimatedItem, AnimatedList } from './AnimatedList'; import BrokenDevice from './BrokenDevice'; import Device from './Device'; import VirtualDevices from './VirtualDevices'; import './device-list.scss'; const NoDevicesConnected = () => (
Connect a{' '} Nordic development kit {' '} to your computer.
); const NoSupportedDevicesConnected = () => (
No supported devices connected
); const showAllDevices = () => true; const sorted = (devices: DeviceProps[]) => [...devices].sort((a, b) => { if (!!a.favorite !== !!b.favorite) { return a.favorite ? -1 : 1; } return displayedDeviceName(a) < displayedDeviceName(b) ? -1 : 1; }); interface Props { doSelectDevice: (device: DeviceProps, autoReselected: boolean) => void; doSelectVirtualDevice: (device: string) => void; isVisible: boolean; deviceFilter?: (device: DeviceProps) => boolean; virtualDevices?: string[]; } const DeviceList: FC = ({ isVisible, doSelectDevice, doSelectVirtualDevice, deviceFilter = showAllDevices, virtualDevices = [], }) => { const dispatch = useDispatch(); const autoReconnect = useSelector(getAutoReselect); const devices = useSelector(getDevices); const currentDevice = useSelector(selectedDevice); const sortedDevices = useMemo( () => sorted([...devices.values()]), [devices], ); const filteredDevices = useMemo( () => sortedDevices.filter(deviceFilter), [deviceFilter, sortedDevices], ); const canUseAutoReconnect = (!!currentDevice && !!currentDevice?.serialNumber) || !currentDevice; return (
{ dispatch(setAutoReselect(value)); }} />
{sortedDevices.length === 0 && } {sortedDevices.length > 0 && filteredDevices.length === 0 ? ( ) : ( {filteredDevices.map(device => ( {device.traits.broken ? ( ) : ( )} ))} )}
{virtualDevices.length > 0 && ( )}
); }; export default DeviceList;