scanner
parent
dada119106
commit
e424876089
4
App.js
4
App.js
|
@ -128,7 +128,9 @@ function App() {
|
|||
]);
|
||||
|
||||
const NfcRoute = () => <Nfc />;
|
||||
const SettingsRoute = () => <Settings />;
|
||||
const SettingsRoute = () => (
|
||||
<Settings setScannerSession={setScannerSession} />
|
||||
);
|
||||
|
||||
const renderScene = BottomNavigation.SceneMap({
|
||||
nfc: NfcRoute,
|
||||
|
|
|
@ -1,26 +1,23 @@
|
|||
import {useRef, useState} from 'react';
|
||||
import {useState} from 'react';
|
||||
import {Constants} from '../../utils';
|
||||
import {Button, HelperText, Text, TextInput} from 'react-native-paper';
|
||||
import {Button, HelperText, TextInput} from 'react-native-paper';
|
||||
import {View} from 'react-native';
|
||||
import EncryptedStorage from 'react-native-encrypted-storage';
|
||||
|
||||
export default function InitScanner({setScannerSession}) {
|
||||
const [viewMode, setViewMode] = useState(0);
|
||||
const [host, setHost] = useState('http://192.168.178.93:8080/v1/scanner');
|
||||
const [scannerName, setScannerName] = useState('');
|
||||
|
||||
const onAddScanner = () => {
|
||||
console.log(scannerName);
|
||||
|
||||
if (
|
||||
scannerName.length > Constants.GLOBALS.MIN_SCANNER_NAME_LENGTH &&
|
||||
scannerName.length < Constants.GLOBALS.MAX_SCANNER_NAME_LENGTH
|
||||
scannerName.length >= Constants.GLOBALS.MIN_SCANNER_NAME_LENGTH &&
|
||||
scannerName.length <= Constants.GLOBALS.MAX_SCANNER_NAME_LENGTH
|
||||
) {
|
||||
console.log('valid');
|
||||
|
||||
fetch(host, {
|
||||
method: 'POST',
|
||||
headers: {'Content-Type': 'application/json'},
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body: JSON.stringify({
|
||||
scannerName: scannerName,
|
||||
}),
|
||||
|
@ -33,8 +30,7 @@ export default function InitScanner({setScannerSession}) {
|
|||
return Promise.reject(res.status);
|
||||
})
|
||||
.then(async data => {
|
||||
console.log('data', data);
|
||||
|
||||
await EncryptedStorage.setItem('scanner_host', host);
|
||||
await EncryptedStorage.setItem('scanner_id', data.Id);
|
||||
setScannerSession(data.Session);
|
||||
})
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
import {useEffect, useState} from 'react';
|
||||
import {Text, View} from 'react-native';
|
||||
import EncryptedStorage from 'react-native-encrypted-storage';
|
||||
import NfcManager, {Ndef, NfcEvents} from 'react-native-nfc-manager';
|
||||
import {Button, Snackbar} from 'react-native-paper';
|
||||
import {Buffer} from 'buffer';
|
||||
|
||||
export default function Nfc() {
|
||||
const [hasNfc, setHasNFC] = useState(null);
|
||||
|
@ -22,24 +24,53 @@ export default function Nfc() {
|
|||
|
||||
checkIsSupported();
|
||||
|
||||
NfcManager.setEventListener(NfcEvents.DiscoverTag, tag => {
|
||||
console.log(
|
||||
'tag found',
|
||||
tag,
|
||||
Ndef.uri.decodePayload(tag.ndefMessage[0].payload),
|
||||
);
|
||||
NfcManager.setEventListener(NfcEvents.DiscoverTag, async tag => {
|
||||
const foundTag = Ndef.uri.decodePayload(tag.ndefMessage[0].payload);
|
||||
|
||||
setFoundNfcTag(Ndef.uri.decodePayload(tag.ndefMessage[0].payload));
|
||||
console.log('tag found', foundTag);
|
||||
|
||||
setFoundNfcTag(foundTag);
|
||||
setSnackbarVisible(true);
|
||||
|
||||
// fetch
|
||||
try {
|
||||
const scannerHost = await EncryptedStorage.getItem('scanner_host');
|
||||
const scannerSession = await EncryptedStorage.getItem(
|
||||
'scanner_session',
|
||||
);
|
||||
|
||||
setTimeout(() => {
|
||||
setSnackbarVisible(false);
|
||||
}, 2000);
|
||||
console.log('scanner host found', scannerHost, scannerSession);
|
||||
|
||||
fetch(scannerHost + '/scan', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'X-Authorization': scannerSession,
|
||||
},
|
||||
body: JSON.stringify({
|
||||
scanResult: Buffer.from(foundTag).toString('base64'),
|
||||
}),
|
||||
})
|
||||
.then(res => {
|
||||
if (res.status === 200) {
|
||||
setSnackbarMessage('Sent to dashboard');
|
||||
return res.text();
|
||||
}
|
||||
|
||||
setSnackbarMessage('Failed to send');
|
||||
|
||||
return Promise.reject(res.status);
|
||||
})
|
||||
.then(data => console.log('data', data))
|
||||
.catch(err => console.error(err));
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
});
|
||||
|
||||
setTimeout(() => {
|
||||
setSnackbarVisible(false);
|
||||
}, 2000);
|
||||
|
||||
return () => {
|
||||
NfcManager.setEventListener(NfcEvents.DiscoverTag, null);
|
||||
};
|
||||
|
|
|
@ -1,6 +1,65 @@
|
|||
import {Text, View} from 'react-native';
|
||||
import {Button} from 'react-native-paper';
|
||||
import EncryptedStorage from 'react-native-encrypted-storage';
|
||||
|
||||
export default function Settings({setScannerSession}) {
|
||||
const onSignOut = async () => {
|
||||
try {
|
||||
const scannerHost = await EncryptedStorage.getItem('scanner_host');
|
||||
const scannerSession = await EncryptedStorage.getItem('scanner_session');
|
||||
|
||||
await EncryptedStorage.removeItem('scanner_host');
|
||||
|
||||
console.log('after await ', scannerHost, scannerSession);
|
||||
|
||||
setScannerSession();
|
||||
|
||||
const response = await fetch(scannerHost, {
|
||||
method: 'DELETE',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'X-Authorization': scannerSession,
|
||||
},
|
||||
});
|
||||
|
||||
const result = await response.text();
|
||||
|
||||
console.log('result', result);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
|
||||
/*EncryptedStorage.getItem('scanner_host')
|
||||
.then(scannerHost => {
|
||||
console.log('scanner host', scannerHost);
|
||||
|
||||
fetch(scannerHost, {
|
||||
method: 'DELETE',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'X-Authorization': userSession,
|
||||
},
|
||||
})
|
||||
.then(res => {
|
||||
if (res.status === 200) {
|
||||
setSnackbarMessage('Sent to dashboard');
|
||||
return res.text();
|
||||
}
|
||||
|
||||
setSnackbarMessage('Failed to send');
|
||||
|
||||
return Promise.reject(res.status);
|
||||
})
|
||||
.then(data => {
|
||||
console.log('data', data);
|
||||
})
|
||||
.catch(err => {
|
||||
console.error(err);
|
||||
});
|
||||
})
|
||||
.catch(err => console.error(err));*/
|
||||
};
|
||||
|
||||
export default function Settings() {
|
||||
return (
|
||||
<View
|
||||
style={{
|
||||
|
@ -9,6 +68,9 @@ export default function Settings() {
|
|||
alignItems: 'center',
|
||||
}}>
|
||||
<Text style={{color: '#fff'}}>Settings</Text>
|
||||
<Button mode="contained" onPress={() => onSignOut()}>
|
||||
Sign out
|
||||
</Button>
|
||||
</View>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
"@react-native-community/masked-view": "^0.1.11",
|
||||
"@react-navigation/bottom-tabs": "^6.5.7",
|
||||
"@react-navigation/native": "^6.1.6",
|
||||
"buffer": "^6.0.3",
|
||||
"react": "18.2.0",
|
||||
"react-native": "0.71.8",
|
||||
"react-native-encrypted-storage": "^4.0.3",
|
||||
|
@ -5952,6 +5953,29 @@
|
|||
"readable-stream": "^3.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/bl/node_modules/buffer": {
|
||||
"version": "5.7.1",
|
||||
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
|
||||
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/feross"
|
||||
},
|
||||
{
|
||||
"type": "patreon",
|
||||
"url": "https://www.patreon.com/feross"
|
||||
},
|
||||
{
|
||||
"type": "consulting",
|
||||
"url": "https://feross.org/support"
|
||||
}
|
||||
],
|
||||
"dependencies": {
|
||||
"base64-js": "^1.3.1",
|
||||
"ieee754": "^1.1.13"
|
||||
}
|
||||
},
|
||||
"node_modules/bplist-creator": {
|
||||
"version": "0.1.0",
|
||||
"resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.1.0.tgz",
|
||||
|
@ -6027,9 +6051,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/buffer": {
|
||||
"version": "5.7.1",
|
||||
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
|
||||
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
|
||||
"version": "6.0.3",
|
||||
"resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
|
||||
"integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
|
@ -6046,7 +6070,7 @@
|
|||
],
|
||||
"dependencies": {
|
||||
"base64-js": "^1.3.1",
|
||||
"ieee754": "^1.1.13"
|
||||
"ieee754": "^1.2.1"
|
||||
}
|
||||
},
|
||||
"node_modules/buffer-from": {
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
"@react-native-community/masked-view": "^0.1.11",
|
||||
"@react-navigation/bottom-tabs": "^6.5.7",
|
||||
"@react-navigation/native": "^6.1.6",
|
||||
"buffer": "^6.0.3",
|
||||
"react": "18.2.0",
|
||||
"react-native": "0.71.8",
|
||||
"react-native-encrypted-storage": "^4.0.3",
|
||||
|
|
5
utils.js
5
utils.js
|
@ -46,10 +46,7 @@ export function UseScannerSession() {
|
|||
await EncryptedStorage.removeItem('scanner_session');
|
||||
} else {
|
||||
console.log('here2');
|
||||
await EncryptedStorage.setItem(
|
||||
'scanner_session',
|
||||
JSON.stringify(scannerSession),
|
||||
);
|
||||
await EncryptedStorage.setItem('scanner_session', scannerSession);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue