|
1 |
| -import React, {Component} from 'react'; |
| 1 | +import React, {Component,useEffect,useState} from 'react'; |
2 | 2 | import QRCode from "qrcode.react";
|
3 | 3 |
|
4 |
| - |
5 |
| - |
6 |
| -export default class DisplayQRCode extends Component { |
7 |
| - constructor(props){ |
8 |
| - super(props); |
9 |
| - this.onWindowResize=this.onWindowResize.bind(this); |
| 4 | +const styles={ |
| 5 | + container:{ |
| 6 | + display:"flex", |
| 7 | + flexDirection:"column", |
| 8 | + justifyContent:"flex-start", |
| 9 | + alignItems:"center", |
| 10 | + }, |
| 11 | + qrCodeContainer:{ |
| 12 | + padding:5, |
| 13 | + display:"flex", |
| 14 | + width:"100%", |
| 15 | + flexDirection:"column", |
| 16 | + justifyContent:"flex-start", |
| 17 | + alignItems:"center" |
| 18 | + }, |
| 19 | + label:{ |
| 20 | + marginTop:10, |
| 21 | + fontSize: 22, |
| 22 | + color: "#4880ED", |
| 23 | + fontWeight: 300 |
10 | 24 | }
|
11 |
| - componentDidMount() { |
12 |
| - window.addEventListener("resize", this.onWindowResize); |
13 |
| - } |
14 |
| - onWindowResize(){ |
15 |
| - |
16 |
| - this.forceUpdate(); |
17 |
| - } |
18 |
| - componentWillUnmount() { |
19 |
| - window.removeEventListener("resize", this.onWindowResize); |
20 |
| - } |
21 |
| - getStyles(){ |
22 |
| - var styles={ |
23 |
| - screen512:null, |
24 |
| - biggerThan512:function(){ |
25 |
| - if(!this.screen512){ |
26 |
| - this.screen512=window.matchMedia(`(min-width: 512px)`) |
27 |
| - } |
28 |
| - return this.screen512.matches; |
29 |
| - }, |
30 |
| - container:{ |
31 |
| - display:"flex", |
32 |
| - flexDirection:"column", |
33 |
| - justifyContent:"flex-start", |
34 |
| - alignItems:"center", |
35 |
| - }, |
36 |
| - qrCodeContainer:{ |
37 |
| - padding:5, |
38 |
| - display:"flex", |
39 |
| - width:"100%", |
40 |
| - flexDirection:"column", |
41 |
| - justifyContent:"flex-start", |
42 |
| - alignItems:"center" |
43 |
| - }, |
44 |
| - label:{ |
45 |
| - marginTop:10, |
46 |
| - fontSize: 22, |
47 |
| - color: "#4880ED", |
48 |
| - fontWeight: 300, |
49 |
| - |
50 |
| - } |
51 |
| - }; |
52 |
| - return styles; |
53 |
| - |
54 |
| - |
55 |
| - } |
56 |
| - |
57 |
| - |
58 |
| - |
59 |
| - render(){ |
60 |
| - var styles=this.getStyles(); |
61 |
| - var {code,size,level}=this.props; |
62 |
| - |
63 |
| - if(!size){ |
64 |
| - var w = window.innerWidth-50; |
65 |
| - var h = window.innerHeight-50; |
66 |
| - if(w<h){ |
67 |
| - size=w; |
68 |
| - } |
69 |
| - else{ |
70 |
| - size=h; |
71 |
| - } |
72 |
| - if(size>400){ |
73 |
| - size=400; |
74 |
| - } |
75 |
| - } |
76 |
| - else{ |
77 |
| - size=parseInt(size); |
78 |
| - } |
79 |
| - if(!level){ |
80 |
| - level="H"; |
81 |
| - } |
82 |
| - if(!code){ |
83 |
| - code=""; |
84 |
| - } |
85 |
| - return( |
86 |
| - <div style={styles.container}> |
87 |
| - <div style={styles.qrCodeContainer}> |
88 |
| - <QRCode |
| 25 | +}; |
| 26 | +function computeDefaultSize(){ |
| 27 | + console.log(window.innerWidth-50); |
| 28 | + console.log(window.innerHeight-50); |
| 29 | + let size = Math.min(window.innerWidth-50,window.innerHeight-50); |
| 30 | + return Math.max(size,400); |
| 31 | +} |
| 32 | + |
| 33 | +export default ({label="",code="",level='H',size=0})=>{ |
| 34 | + const [defaultSize,setDefaultSize]=useState(computeDefaultSize()); |
| 35 | + useEffect(() => { |
| 36 | + function onWindowResize(){ |
| 37 | + setDefaultSize(computeDefaultSize()); |
| 38 | + } |
| 39 | + window.addEventListener("resize", onWindowResize); |
| 40 | + return ()=>{ |
| 41 | + window.removeEventListener("resize", onWindowResize); |
| 42 | + } |
| 43 | + }); |
| 44 | + return( |
| 45 | + <div style={styles.container}> |
| 46 | + <div style={styles.qrCodeContainer}> |
| 47 | + <QRCode |
89 | 48 | value={code}
|
90 | 49 | level={level}
|
91 |
| - size={size} |
| 50 | + size={size?size:defaultSize} |
92 | 51 | />
|
93 |
| - </div> |
94 |
| - <div style={styles.label}>{this.props.label}</div> |
95 |
| - </div> |
96 |
| - ); |
| 52 | + </div> |
| 53 | + <div style={styles.label}>{label}</div> |
| 54 | + </div> |
| 55 | + ); |
| 56 | +}; |
97 | 57 |
|
98 |
| - } |
99 |
| - } |
0 commit comments