diff --git a/src/renderer/entities/transaction/ui/QrCode/QrReader/QrReaderWrapper.tsx b/src/renderer/entities/transaction/ui/QrCode/QrReader/QrReaderWrapper.tsx index 4b54c5feba..7a2f8d8d18 100644 --- a/src/renderer/entities/transaction/ui/QrCode/QrReader/QrReaderWrapper.tsx +++ b/src/renderer/entities/transaction/ui/QrCode/QrReader/QrReaderWrapper.tsx @@ -3,8 +3,8 @@ import { useEffect, useState } from 'react'; import { type HexString } from '@/shared/core'; import { useI18n } from '@/shared/i18n'; import { ValidationErrors, cnTw } from '@/shared/lib/utils'; -import { Button, CaptionText, Countdown, FootnoteText, Select, Shimmering, SmallTitleText } from '@/shared/ui'; -import { type DropdownOption, type DropdownResult } from '@/shared/ui/types'; +import { Button, CaptionText, Countdown, FootnoteText, Shimmering, SmallTitleText } from '@/shared/ui'; +import { Select } from '@/shared/ui-kit'; import { CameraAccessErrors, CameraError, WhiteTextButtonStyle } from '../common/constants'; import { type ErrorObject, type Progress, QrError, type VideoInput } from '../common/types'; @@ -42,8 +42,8 @@ export const QrReaderWrapper = ({ className, onResult, countdown, validationErro const [progress, setProgress] = useState(); const [isSuccess, setIsSuccess] = useState(false); - const [activeCamera, setActiveCamera] = useState>(); - const [availableCameras, setAvailableCameras] = useState[]>([]); + const [activeCamera, setActiveCamera] = useState(); + const [availableCameras, setAvailableCameras] = useState[]>([]); useEffect(() => { if (validationError) { @@ -54,18 +54,16 @@ export const QrReaderWrapper = ({ className, onResult, countdown, validationErro const isCameraOn = !(error && CameraAccessErrors.includes(error)); const onCameraList = (cameras: VideoInput[]) => { - const formattedCameras = cameras.map((camera, index) => ({ - //eslint-disable-next-line i18next/no-literal-string - element: `${index + 1}. ${camera.label}`, + const formattedCameras = cameras.map((camera) => ({ + title: camera.label, value: camera.id, - id: camera.id, })); setAvailableCameras(formattedCameras); - if (formattedCameras.length > 1) { - // if multiple cameras are available we set first one as active - setActiveCamera(formattedCameras[0]); + const defaultCamera = formattedCameras.at(0); + if (defaultCamera) { + setActiveCamera(defaultCamera.value); setIsLoading(false); } }; @@ -113,7 +111,7 @@ export const QrReaderWrapper = ({ className, onResult, countdown, validationErro error === CameraError.INVALID_ERROR && 'blur-[13px]', className, ), - cameraId: activeCamera?.value, + cameraId: activeCamera, onStart: () => setIsLoading(false), onCameraList, onError, @@ -160,16 +158,20 @@ export const QrReaderWrapper = ({ className, onResult, countdown, validationErro )} -
- {availableCameras && availableCameras.length > 1 && ( +
+ {availableCameras.length > 1 && ( )}
diff --git a/src/renderer/features/wallets/DerivationsAddressModal/ui/DdKeyQrReader.tsx b/src/renderer/features/wallets/DerivationsAddressModal/ui/DdKeyQrReader.tsx index a2040e1f0d..a0ff38e75a 100644 --- a/src/renderer/features/wallets/DerivationsAddressModal/ui/DdKeyQrReader.tsx +++ b/src/renderer/features/wallets/DerivationsAddressModal/ui/DdKeyQrReader.tsx @@ -5,8 +5,8 @@ import { useState } from 'react'; import { CryptoType } from '@/shared/core'; import { useI18n } from '@/shared/i18n'; import { cnTw } from '@/shared/lib/utils'; -import { Button, CaptionText, FootnoteText, Icon, Loader, Select, SmallTitleText } from '@/shared/ui'; -import { type DropdownOption, type DropdownResult } from '@/shared/ui/types'; +import { Button, CaptionText, FootnoteText, Icon, Loader, SmallTitleText } from '@/shared/ui'; +import { Select } from '@/shared/ui-kit'; import { type DdAddressInfoDecoded, type DdSeedInfo, @@ -42,8 +42,9 @@ export const DdKeyQrReader = ({ size = 300, className, onGoBack, onResult }: Pro const { t } = useI18n(); const [cameraState, setCameraState] = useState(CameraState.LOADING); - const [activeCamera, setActiveCamera] = useState>(); - const [availableCameras, setAvailableCameras] = useState[]>([]); + + const [activeCamera, setActiveCamera] = useState(); + const [availableCameras, setAvailableCameras] = useState[]>([]); const [isScanComplete, setIsScanComplete] = useState(false); const [{ decoded, total }, setProgress] = useState({ decoded: 0, total: 0 }); @@ -59,17 +60,16 @@ export const DdKeyQrReader = ({ size = 300, className, onGoBack, onResult }: Pro ].includes(cameraState); const onCameraList = (cameras: VideoInput[]) => { - const formattedCameras = cameras.map((camera, index) => ({ - //eslint-disable-next-line i18next/no-literal-string - element: `${index + 1}. ${camera.label}`, + const formattedCameras = cameras.map((camera) => ({ + title: camera.label, value: camera.id, - id: camera.id, })); setAvailableCameras(formattedCameras); - if (formattedCameras.length > 0) { - setActiveCamera(formattedCameras[0]); + const defaultCamera = formattedCameras.at(0); + if (defaultCamera) { + setActiveCamera(defaultCamera.value); setCameraState(CameraState.ACTIVE); } }; @@ -222,10 +222,10 @@ export const DdKeyQrReader = ({ size = 300, className, onGoBack, onResult }: Pro {t('onboarding.vault.scanTitle')} setCameraState(CameraState.ACTIVE)} @@ -235,17 +235,23 @@ export const DdKeyQrReader = ({ size = 300, className, onGoBack, onResult }: Pro onError={onError} /> -
- {availableCameras && availableCameras.length > 1 && ( - + {availableCameras.map((camera, index) => ( + + {`${index + 1}. ${camera.title}`} + + ))} + + )} +
diff --git a/src/renderer/pages/Onboarding/Vault/KeyQrReader/KeyQrReader.tsx b/src/renderer/pages/Onboarding/Vault/KeyQrReader/KeyQrReader.tsx index a0d39cad38..2a97c0fad6 100644 --- a/src/renderer/pages/Onboarding/Vault/KeyQrReader/KeyQrReader.tsx +++ b/src/renderer/pages/Onboarding/Vault/KeyQrReader/KeyQrReader.tsx @@ -54,8 +54,9 @@ const KeyQrReader = ({ size = 300, className, onResult }: Props) => { setAvailableCameras(formattedCameras); - if (formattedCameras.length > 0) { - setActiveCamera(formattedCameras[0].value); + const defaultCamera = formattedCameras.at(0); + if (defaultCamera) { + setActiveCamera(defaultCamera.value); setCameraState(CameraState.ACTIVE); } };