react-native-urovo-scanner
Version:
React Native package for Urovo Scanner SDK integration - Official SDK implementation
182 lines (181 loc) • 5.83 kB
JavaScript
/**
* 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,
},
};