UNPKG

react-native-urovo-scanner

Version:

React Native package for Urovo Scanner SDK integration - Official SDK implementation

182 lines (181 loc) 5.83 kB
/** * Hook para manejar la configuración del scanner Urovo * Proporciona funciones para obtener y actualizar la configuración usando el SDK oficial */ import { useState, useEffect, useCallback } from 'react'; import { urovoScanner } from './UrovoScanner'; export const useScannerConfiguration = () => { const [config, setConfig] = useState(null); const [constants, setConstants] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const loadConfiguration = useCallback(async () => { try { setLoading(true); setError(null); const [configData, constantsData] = await Promise.all([ urovoScanner.getConfiguration(), urovoScanner.getPropertyConstants(), ]); setConfig(configData); setConstants(constantsData); } catch (err) { const errorMessage = err instanceof Error ? err.message : 'Error desconocido'; setError(errorMessage); console.error('Error cargando configuración:', err); } finally { setLoading(false); } }, []); const updateParameter = useCallback(async (propertyId, value) => { if (!config || !constants) { setError('Configuración no cargada'); return false; } try { setError(null); const success = await urovoScanner.setConfiguration(propertyId, value); if (success) { // Actualizar configuración local const propertyName = getPropertyName(propertyId, constants); setConfig(prev => (prev ? { ...prev, [propertyName]: value } : null)); } return success; } catch (err) { const errorMessage = err instanceof Error ? err.message : 'Error actualizando configuración'; setError(errorMessage); console.error('Error actualizando configuración:', err); return false; } }, [config, constants]); const updateParameterString = useCallback(async (propertyId, value) => { if (!config || !constants) { setError('Configuración no cargada'); return false; } try { setError(null); const success = await urovoScanner.setConfigurationString(propertyId, value); if (success) { // Actualizar configuración local para parámetros string const propertyName = getPropertyName(propertyId, constants); setConfig(prev => (prev ? { ...prev, [propertyName]: value } : null)); } return success; } catch (err) { const errorMessage = err instanceof Error ? err.message : 'Error actualizando configuración'; setError(errorMessage); console.error('Error actualizando configuración string:', err); return false; } }, [config, constants]); const refreshConfiguration = useCallback(async () => { await loadConfiguration(); }, [loadConfiguration]); useEffect(() => { loadConfiguration(); }, [loadConfiguration]); return { config, constants, loading, error, updateParameter, updateParameterString, refreshConfiguration, }; }; // Función auxiliar para mapear PropertyID a nombres de propiedades const getPropertyName = (propertyId, constants) => { const propertyMap = { [constants.QRCODE_ENABLE]: 'qrCode', [constants.CODE128_ENABLE]: 'code128', [constants.CODE39_ENABLE]: 'code39', [constants.EAN13_ENABLE]: 'ean13', [constants.EAN8_ENABLE]: 'ean8', [constants.UPCA_ENABLE]: 'upca', [constants.UPCE_ENABLE]: 'upce', [constants.DATAMATRIX_ENABLE]: 'dataMatrix', [constants.PDF417_ENABLE]: 'pdf417', [constants.AZTEC_ENABLE]: 'aztec', [constants.WEDGE_KEYBOARD_ENABLE]: 'keyboardWedge', [constants.SEND_GOOD_READ_BEEP_ENABLE]: 'beepEnabled', [constants.SEND_GOOD_READ_VIBRATE_ENABLE]: 'vibrateEnabled', }; return propertyMap[propertyId] || 'qrCode'; }; // Tipos de configuración predefinidos para facilitar el uso export const ConfigurationPresets = { // Configuración básica para códigos QR únicamente QR_ONLY: { qrCode: 1, code128: 0, code39: 0, ean13: 0, ean8: 0, upca: 0, upce: 0, dataMatrix: 0, pdf417: 0, aztec: 0, beepEnabled: 1, vibrateEnabled: 1, keyboardWedge: 0, }, // Configuración para códigos de barras comunes STANDARD_BARCODES: { qrCode: 1, code128: 1, code39: 1, ean13: 1, ean8: 1, upca: 1, upce: 1, dataMatrix: 0, pdf417: 0, aztec: 0, beepEnabled: 1, vibrateEnabled: 1, keyboardWedge: 0, }, // Configuración completa (todos los tipos habilitados) ALL_ENABLED: { qrCode: 1, code128: 1, code39: 1, ean13: 1, ean8: 1, upca: 1, upce: 1, dataMatrix: 1, pdf417: 1, aztec: 1, beepEnabled: 1, vibrateEnabled: 1, keyboardWedge: 1, }, // Configuración silenciosa SILENT_MODE: { qrCode: 1, code128: 1, code39: 1, ean13: 1, ean8: 1, upca: 1, upce: 1, dataMatrix: 1, pdf417: 1, aztec: 1, beepEnabled: 0, vibrateEnabled: 0, keyboardWedge: 0, }, };