Skip to content

Commit 6daec4e

Browse files
feat(TS): Converted existing pages to TypeScript
1 parent bbdb172 commit 6daec4e

11 files changed

+479
-395
lines changed

src/components/Scanner/scanner.js src/components/Scanner/scanner.tsx

+69-47
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,26 @@
1-
import React, { Component, useState } from "react";
2-
import Quagga from "quagga";
1+
import React, { Component } from "react";
2+
import Quagga from "@ericblade/quagga2";
33

4-
class Scanner extends Component {
5-
state = {
4+
interface ScannerProps {
5+
onDetected: (result: any) => void;
6+
setScanning: (scanning: boolean) => void;
7+
}
8+
9+
interface ScannerState {
10+
facingMode: string;
11+
isHidden: boolean;
12+
}
13+
14+
class Scanner extends Component<ScannerProps, ScannerState> {
15+
state: ScannerState = {
616
facingMode: "environment",
17+
isHidden: false,
718
};
819

920
handleClick = () => {
10-
if (this.state.facingMode === "environment") {
11-
this.setState({ facingMode: "user" });
12-
} else {
13-
this.setState({ facingMode: "environment" });
14-
}
21+
const { facingMode } = this.state;
22+
const newFacingMode = facingMode === "environment" ? "user" : "environment";
23+
this.setState({ facingMode: newFacingMode });
1524

1625
Quagga.init(
1726
{
@@ -21,8 +30,7 @@ class Scanner extends Component {
2130
width: window.innerWidth * window.devicePixelRatio,
2231
height: window.innerHeight * window.devicePixelRatio,
2332
aspectRatio: { ideal: window.innerHeight / window.innerWidth },
24-
facingMode: this.state.facingMode,
25-
focusMode: "continuous",
33+
facingMode: newFacingMode,
2634
},
2735
},
2836
locator: {
@@ -40,7 +48,7 @@ class Scanner extends Component {
4048
},
4149
locate: true,
4250
},
43-
function (err) {
51+
(err: any) => {
4452
if (err) {
4553
return console.log(err);
4654
}
@@ -49,43 +57,43 @@ class Scanner extends Component {
4957
);
5058
};
5159

52-
componentDidMount = () => {
53-
console.log(this.state.facingMode);
60+
componentDidMount() {
61+
const { facingMode } = this.state;
62+
console.log(facingMode);
5463
this.handleClick();
5564
Quagga.onDetected(this._onDetected);
56-
};
65+
}
5766

58-
componentWillUnmount = () => {
67+
componentWillUnmount() {
5968
Quagga.offDetected(this._onDetected);
60-
};
69+
}
6170

62-
_onDetected = (result) => {
63-
this.props.onDetected(result);
71+
_onDetected = (result: any) => {
72+
const { onDetected } = this.props;
73+
onDetected(result);
6474
Quagga.stop();
6575
};
6676

67-
state = {
68-
isHidden: false,
69-
};
70-
7177
_onClose = () => {
72-
this.setState({
73-
isHidden: !this.state.isHidden,
74-
});
75-
this.props.setScanning(false);
78+
const { isHidden } = this.state;
79+
this.setState({ isHidden: !isHidden });
80+
const { setScanning } = this.props;
81+
setScanning(false);
7682
Quagga.stop();
7783
};
7884

7985
render() {
80-
const vid = {
86+
const { isHidden } = this.state;
87+
88+
const vid: React.CSSProperties = {
8189
position: "fixed",
82-
zIndex: "999",
83-
left: "0px",
84-
top: "0px",
90+
zIndex: 999,
91+
left: 0,
92+
top: 0,
8593
};
8694

8795
return (
88-
!this.state.isHidden && (
96+
!isHidden && (
8997
<>
9098
<div id="controls">
9199
<span id="close">
@@ -115,19 +123,33 @@ class Scanner extends Component {
115123
}
116124
}
117125

118-
class Result extends Component {
119-
render() {
120-
const result = this.props.result;
126+
interface ResultProps {
127+
result: any;
128+
}
121129

130+
class Result extends Component<ResultProps> {
131+
render() {
132+
const { result } = this.props;
122133
if (!result) {
123134
return null;
124135
}
125136
return result.codeResult.code;
126137
}
127138
}
128139

129-
class Scan extends React.Component {
130-
state = {
140+
interface ScanProps {
141+
onDetected: (barcode: string) => void;
142+
handleSubmit: (barcode: string, obj: object) => void;
143+
}
144+
145+
interface ScanState {
146+
scanning: boolean;
147+
results: any[];
148+
codeResult: string;
149+
}
150+
151+
class Scan extends React.Component<ScanProps, ScanState> {
152+
state: ScanState = {
131153
scanning: false,
132154
results: [],
133155
codeResult: "",
@@ -137,19 +159,19 @@ class Scan extends React.Component {
137159
this.setState({ scanning: true });
138160
};
139161

140-
_onDetected = (result) => {
141-
this.setState({
142-
results: this.state.results.concat([result]),
143-
codeResult: result.codeResult.code,
144-
});
145-
this.setState({ scanning: !this.state.scanning });
146-
let barcode = result.codeResult.code;
147-
this.props.onDetected(barcode);
162+
_onDetected = (result: any) => {
163+
const { onDetected, handleSubmit } = this.props;
164+
const { results } = this.state;
165+
const newResults = [...results, result];
166+
const codeResult = result.codeResult.code;
167+
this.setState({ results: newResults, codeResult, scanning: false });
168+
onDetected(codeResult);
148169
Quagga.stop();
149-
this.props.handleSubmit(barcode, {});
170+
handleSubmit(codeResult, {});
150171
};
151172

152173
render() {
174+
const { scanning } = this.state;
153175
return (
154176
<>
155177
<button
@@ -161,7 +183,7 @@ class Scan extends React.Component {
161183
>
162184
<span className="icon-barcode" />
163185
</button>
164-
{this.state.scanning ? (
186+
{scanning ? (
165187
<Scanner
166188
onDetected={this._onDetected}
167189
setScanning={(scanning) => this.setState({ scanning })}

0 commit comments

Comments
 (0)