1
- import React , { useState , useEffect } from "react" ;
2
- import { ChargePoint as OCPPChargePoint } from "../cp/ChargePoint" ;
1
+ import React , { useState , useEffect } from "react" ;
2
+ import { ChargePoint as OCPPChargePoint } from "../cp/ChargePoint" ;
3
3
import Connector from "./Connector.tsx" ;
4
- import { useLocation } from "react-router-dom" ;
5
4
import Logger from "./Logger.tsx" ;
6
5
import * as ocpp from "../cp/OcppTypes" ;
7
6
8
- const ChargePoint : React . FC = ( ) => {
9
- const [ cpStatus , setCpStatus ] = useState < string > ( ocpp . OCPPStatus . Unavailable ) ;
7
+ interface ChargePointProps {
8
+ cp : OCPPChargePoint ;
9
+ TagID : string ;
10
+ }
11
+
12
+ const ChargePoint : React . FC < ChargePointProps > = ( props ) => {
10
13
const [ cp , setCp ] = useState < OCPPChargePoint | null > ( null ) ;
14
+ const [ cpStatus , setCpStatus ] = useState < string > ( ocpp . OCPPStatus . Unavailable ) ;
11
15
const [ cpError , setCpError ] = useState < string > ( "" ) ;
12
-
13
- const search = useLocation ( ) . search ;
14
- const query = new URLSearchParams ( search ) ;
16
+ const [ logs , setLogs ] = useState < string [ ] > ( [ ] ) ;
15
17
16
18
useEffect ( ( ) => {
17
- const connectorNumber = parseInt (
18
- query . get ( "connectors" ) || localStorage . getItem ( "CONNECTORS" ) || "2"
19
- ) ;
20
- const wsURL = query . get ( "wsurl" ) || localStorage . getItem ( "WSURL" ) || "" ;
21
- const cpID = query . get ( "cpid" ) || localStorage . getItem ( "CPID" ) || "CP-001" ;
22
- const tagID = query . get ( "tag" ) || localStorage . getItem ( "TAG" ) || "DEADBEEF" ;
23
-
24
- localStorage . setItem ( "WSURL" , wsURL ) ;
25
- localStorage . setItem ( "CONNECTORS" , connectorNumber . toString ( ) ) ;
26
- localStorage . setItem ( "CPID" , cpID ) ;
27
- localStorage . setItem ( "TAG" , tagID ) ;
28
-
29
- const newCp = new OCPPChargePoint ( cpID , connectorNumber , wsURL ) ;
30
- newCp . statusChangeCallback = statusChangeCb ;
31
- newCp . loggingCallback = logMsg ;
32
- newCp . errorCallback = setCpError ;
33
- setCp ( newCp ) ;
34
- } , [ ] ) ;
19
+ console . log ( "ChargePointProps" , props ) ;
20
+ props . cp . statusChangeCallback = statusChangeCb ;
21
+ props . cp . loggingCallback = logMsg ;
22
+ props . cp . errorCallback = setCpError ;
23
+ setCp ( props . cp ) ;
24
+ } , [ props ] ) ;
35
25
36
26
const statusChangeCb = ( s : string ) => {
37
27
setCpStatus ( s ) ;
38
28
} ;
39
29
40
30
const logMsg = ( msg : string ) => {
41
31
console . log ( msg ) ;
32
+ setLogs ( ( prevLogs ) => [ ...prevLogs , msg ] ) ;
42
33
} ;
43
34
44
35
return (
45
36
< div className = "bg-white shadow-md rounded px-2 pt-2 pb-1 h-screen" >
46
- < SettingsView />
37
+ < SettingsView { ... props } />
47
38
< div className = "flex flex-col md:flex-row" >
48
- < ChargePointControls cp = { cp } cpStatus = { cpStatus } cpError = { cpError } />
39
+ < ChargePointControls cp = { cp } cpStatus = { cpStatus } cpError = { cpError } />
49
40
< div className = "flex-1" >
50
- < AuthView cp = { cp } cpStatus = { cpStatus } />
41
+ < AuthView cp = { cp } cpStatus = { cpStatus } tagID = { props . TagID } />
51
42
< div className = "flex flex-col md:flex-row mt-4" >
52
43
{ cp ?. connectors &&
53
44
Array . from ( Array ( cp . connectors . size ) . keys ( ) ) . map ( ( i ) => (
54
- < Connector key = { i + 1 } id = { i + 1 } cp = { cp } />
45
+ < Connector key = { i + 1 } id = { i + 1 } cp = { cp } />
55
46
) ) }
56
47
</ div >
57
48
</ div >
58
49
</ div >
59
- < Logger />
50
+ < Logger logs = { logs } />
60
51
</ div >
61
52
) ;
62
53
} ;
63
54
64
- const CPStatus : React . FC < { status : string } > = ( { status } ) => {
55
+ const CPStatus : React . FC < { status : string } > = ( { status} ) => {
65
56
const statusColor = ( s : string ) => {
66
57
switch ( s ) {
67
58
case ocpp . OCPPStatus . Unavailable :
@@ -87,19 +78,15 @@ const CPStatus: React.FC<{ status: string }> = ({ status }) => {
87
78
interface AuthViewProps {
88
79
cp : OCPPChargePoint | null ;
89
80
cpStatus : string ;
81
+ tagID : string ;
90
82
}
91
83
92
- const AuthView : React . FC < AuthViewProps > = ( { cp, cpStatus } ) => {
93
- const [ tagID , setTagID ] = useState < string > ( "" ) ;
94
-
95
- useEffect ( ( ) => {
96
- setTagID ( localStorage . getItem ( "TAG" ) || "" ) ;
97
- } , [ ] ) ;
84
+ const AuthView : React . FC < AuthViewProps > = ( props ) => {
85
+ const [ tagID , setTagID ] = useState < string > ( props . tagID ) ;
98
86
99
87
const handleAuthorize = ( ) => {
100
- if ( cp ) {
101
- const tagId = localStorage . getItem ( "TAG" ) || "DEADBEEF" ;
102
- cp . authorize ( tagId ) ;
88
+ if ( props . cp ) {
89
+ props . cp . authorize ( tagID ) ;
103
90
}
104
91
} ;
105
92
@@ -120,18 +107,18 @@ const AuthView: React.FC<AuthViewProps> = ({ cp, cpStatus }) => {
120
107
value = { tagID }
121
108
onChange = { ( e ) => setTagID ( e . target . value ) }
122
109
placeholder = "DEADBEEF"
123
- style = { { maxWidth : "20ch" } }
110
+ style = { { maxWidth : "20ch" } }
124
111
/>
125
112
< p className = "text-gray-600 text-xs italic mt-1" >
126
113
The ID of the simulated RFID tag
127
114
</ p >
128
115
</ div >
129
116
< button
130
117
onClick = { handleAuthorize }
131
- className = "bg-green-500 hover:bg-green-700 text-white font-bold py-2 px-4 rounded w-full
118
+ className = "bg-green-500 hover:bg-green-700 text-white font-bold py-2 px-4 rounded
132
119
disabled:bg-green-300
133
120
"
134
- disabled = { cpStatus !== ocpp . OCPPStatus . Available }
121
+ disabled = { props . cpStatus !== ocpp . OCPPStatus . Available }
135
122
>
136
123
Authorize
137
124
</ button >
@@ -146,10 +133,10 @@ interface ChargePointControlsProps {
146
133
}
147
134
148
135
const ChargePointControls : React . FC < ChargePointControlsProps > = ( {
149
- cp,
150
- cpStatus,
151
- cpError,
152
- } ) => {
136
+ cp,
137
+ cpStatus,
138
+ cpError,
139
+ } ) => {
153
140
const [ isHeartbeatEnabled , setIsHeartbeatEnabled ] = useState < boolean > ( false ) ;
154
141
155
142
const handleConnect = ( ) => {
@@ -182,7 +169,7 @@ const ChargePointControls: React.FC<ChargePointControlsProps> = ({
182
169
return (
183
170
< div className = "bg-gray-100 rounded p-4 mr-4" >
184
171
< div className = "bg-gray-100 rounded p-4 mr-4" >
185
- < CPStatus status = { cpStatus } />
172
+ < CPStatus status = { cpStatus } />
186
173
</ div >
187
174
< div >
188
175
{ cpError !== "" && (
@@ -236,22 +223,13 @@ const ChargePointControls: React.FC<ChargePointControlsProps> = ({
236
223
) ;
237
224
} ;
238
225
239
- const SettingsView : React . FC = ( ) => {
240
- const [ wsURL ] = useState < string > ( localStorage . getItem ( "WSURL" ) || "" ) ;
241
- const [ connectorNumber ] = useState < number > (
242
- parseInt ( localStorage . getItem ( "CONNECTORS" ) || "2" )
243
- ) ;
244
- const [ cpID ] = useState < string > ( localStorage . getItem ( "CPID" ) || "CP-001" ) ;
245
- const [ ocppVersion ] = useState < string > (
246
- localStorage . getItem ( "OCPP" ) || "OCPP-1.6J"
247
- ) ;
226
+ const SettingsView : React . FC < ChargePointProps > = ( props ) => {
248
227
return (
249
228
< div className = "mb-1 bg-gray-100 rounded p-2" >
250
229
< p className = "text-lg font-semibold" > settings</ p >
251
- < li > WSURL: { wsURL } </ li >
252
- < li > CONNECTORS: { connectorNumber } </ li >
253
- < li > CPID: { cpID } </ li >
254
- < li > OCPP: { ocppVersion } </ li >
230
+ < li > CPID: { props . cp . id } </ li >
231
+ < li > CONNECTORS: { props . cp . connectorNumber } </ li >
232
+ < li > WSURL: { props . cp . wsUrl } </ li >
255
233
</ div >
256
234
) ;
257
235
} ;
0 commit comments