Skip to content

Commit 843d8b9

Browse files
author
Patricio Vargas
committed
using react context
1 parent fe31261 commit 843d8b9

File tree

7 files changed

+44
-31
lines changed

7 files changed

+44
-31
lines changed

src/App.js

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,33 +3,32 @@ import './App.css';
33
import Scan from './containers/Scan';
44
import Write from './containers/Write';
55
import { useState } from 'react';
6+
import { ActionsContext } from './contexts/context';
67

78
function App() {
8-
const [isScan, setScan] = useState(false);
9-
const [isWrite, setWrite] = useState(false);
109

11-
const onHandleScan = () =>{
12-
setScan(true);
13-
setWrite(false)
14-
}
10+
const [actions, setActions] = useState(null);
11+
const {scan, write} = actions || {};
12+
13+
const actionsValue = {actions,setActions};
1514

16-
const onHandleWrite = () =>{
17-
setScan(false);
18-
setWrite(true)
15+
const onHandleAction = (actions) =>{
16+
setActions({...actions});
1917
}
2018

2119
return (
22-
<div className="App">
23-
<img src={nfc} className="App-logo" alt="logo" />
24-
<h1>NFC Tool</h1>
25-
<div className="App-container">
26-
<button onClick={onHandleScan} className="App-button">Scan</button>
27-
<button onClick={onHandleWrite} className="App-button">Write</button>
20+
<div className="App">
21+
<img src={nfc} className="App-logo" alt="logo" />
22+
<h1>NFC Tool</h1>
23+
<div className="App-container">
24+
<button onClick={()=>onHandleAction({scan: 'scanning', write: null})} className="App-button">Scan</button>
25+
<button onClick={()=>onHandleAction({scan: null, write: 'writing'})} className="App-button">Write</button>
26+
</div>
27+
<ActionsContext.Provider value={actionsValue}>
28+
{scan && <Scan/>}
29+
{write && <Write/>}
30+
</ActionsContext.Provider>
2831
</div>
29-
{isScan && <Scan/>}
30-
{isWrite && <Write/>}
31-
32-
</div>
3332
);
3433
}
3534

src/components/Scanner/Scanner.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
.scanner {
22
position: absolute;
33
z-index: 1;
4-
top: calc(50vh - 150px);
4+
top: calc(50vh - 175px);
55
border-radius: 15px;
66
background-color: #fff;
77
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.2);

src/components/Scanner/Scanner.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1-
import React from 'react';
1+
import React, { useContext } from 'react';
22
import './Scanner.css'
33
import Spinner from '../../spinner.gif';
4+
import { ActionsContext } from '../../contexts/context';
45

56
const Scanner = ({status}) => {
7+
const { actions, setActions} = useContext(ActionsContext);
68
return (
79
<div className="scanner">
8-
<p className="scanner-exit">X</p>
10+
<p className="scanner-exit" onClick={()=>setActions({...actions, scan: null})}>X</p>
911
<div className="scanner-container">
1012
<img src={Spinner} alt="spinning log" className="scanner-image"/>
1113
<p className="scanner-text">
File renamed without changes.

src/containers/Scan.js

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1-
import React, { useCallback, useEffect, useState } from 'react';
1+
import React, { useCallback, useContext, useEffect, useState } from 'react';
22
import Scanner from '../components/Scanner/Scanner';
3+
import { ActionsContext } from '../contexts/context';
34

45
const Scan = () => {
5-
const [status, setStatus] = useState('scanning');
6+
// const [status, setStatus] = useState('scanning');
67
const [message, setMessage] = useState('');
78
const [serialNumber, setSerialNumber] = useState('');
9+
const { actions, setActions} = useContext(ActionsContext);
810

911
const scan = useCallback(async() => {
1012
if ('NDEFReader' in window) {
@@ -20,14 +22,17 @@ const Scan = () => {
2022
ndef.onreading = event => {
2123
console.log("NDEF message read.");
2224
onReading(event);
23-
setStatus('scanned');
25+
setActions({
26+
scan: 'scanned',
27+
write: null
28+
});
2429
};
2530

2631
} catch(error){
2732
console.log(`Error! Scan failed to start: ${error}.`);
2833
};
2934
}
30-
},[]);
35+
},[setActions]);
3136

3237
const onReading = ({message, serialNumber}) => {
3338
setSerialNumber(serialNumber);
@@ -50,15 +55,14 @@ const Scan = () => {
5055
scan();
5156
}, [scan]);
5257

53-
5458
return(
5559
<>
56-
{status === 'scanned' ?
60+
{actions.scan === 'scanned' ?
5761
<div>
5862
<p>Serial Number: {serialNumber}</p>
5963
<p>Message: {message}</p>
6064
</div>
61-
: <Scanner status={status}></Scanner> }
65+
: <Scanner status={actions.scan}></Scanner> }
6266
</>
6367
);
6468
};

src/containers/Write.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import React, { useCallback, useEffect } from 'react';
22

33
const Write = () => {
4-
54
const onWrite = useCallback(async() => {
65
try {
76
const ndef = new window.NDEFReader();
@@ -17,7 +16,7 @@ const Write = () => {
1716
}, [onWrite])
1817

1918
return (
20-
"Write"
19+
<></>
2120
);
2221
};
2322

src/contexts/context.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { createContext } from "react";
2+
3+
export const ActionsContext = createContext(
4+
{
5+
scan: null,
6+
write: null,
7+
setActions:()=>{}
8+
}
9+
);

0 commit comments

Comments
 (0)