import { BleError, BleErrorCode } from 'react-native-ble-plx'; export enum SFPToolboxErrorCode { Unknown = 1001, ParsingError = 1002, OperationCancelled = 1003, InsufficientPermissions = 1004, BluetoothNotAvailable = 1005, BlueManagerDestroyed = 1006, ChangeTimeWentWrong = 1007, ResetWentWrong = 1008, } type DeveloperErrorMessage = string; type UserFriendlyMessage = string; export interface SFPToolboxError { message: DeveloperErrorMessage; code: SFPToolboxErrorCode | BleErrorCode; } export type ErrorTranslations = { [key in SFPToolboxErrorCode | BleErrorCode]?: UserFriendlyMessage }; const CodeToErrorMessageMap = { [BleErrorCode.BluetoothUnsupported]: 'Este dispositivo no soporta bluetooth.', [BleErrorCode.BluetoothPoweredOff]: 'Debe tener el bluetooth encendido para poder vincular la sonda.', [BleErrorCode.BluetoothUnauthorized]: 'Debe otorgarle permisos de ubicación a la aplicación', [BleErrorCode.DeviceAlreadyConnected]: 'El dispositivo ya se encuentra conectado', [BleErrorCode.LocationServicesDisabled]: 'Los servicios de ubicación deben estar encendidos', [BleErrorCode.OperationTimedOut]: 'Se ha superado el tiempo limite de la operación en curso. Intente nuevamente', [BleErrorCode.DeviceDisconnected]: 'El dispositivo se encuentra desconectado', [BleErrorCode.ScanStartFailed]: 'No se pudo iniciar la operación por desconexión del dispositivo', [SFPToolboxErrorCode.InsufficientPermissions]: 'El sistema operativo no otorgó los permisos de ubicación requeridos', [SFPToolboxErrorCode.BlueManagerDestroyed]: 'No se pudo iniciar la operación por desconexión del controlador', [SFPToolboxErrorCode.ParsingError]: 'No se pudieron interpretar los datos recibidos por la sonda', [SFPToolboxErrorCode.Unknown]: 'Se produjo un error inesperado', [SFPToolboxErrorCode.ResetWentWrong]: 'Se produjo un error en la puesta a cero', }; export const userMessageOfError = ( error: SFPToolboxError, errorTranslations?: ErrorTranslations, ): UserFriendlyMessage => { const message = errorTranslations?.[error.code] ?? error.message; return message; }; export const createErrorFromCode = ( errorCode: SFPToolboxErrorCode | BleErrorCode, customMessage?: DeveloperErrorMessage, ) => ({ message: `Error ${errorCode}. ` + (customMessage ?? CodeToErrorMessageMap[errorCode] ?? ''), code: errorCode, }); export const createErrorFromBleError = (bleError: BleError): SFPToolboxError => { return { message: CodeToErrorMessageMap[bleError?.errorCode] ?? 'Ups, hubo un error', code: bleError.errorCode, }; };