
--- client/views/pages/main/Main_guardian.jsx
+++ client/views/pages/main/Main_guardian.jsx
... | ... | @@ -48,33 +48,25 @@ |
48 | 48 |
|
49 | 49 |
//검색 |
50 | 50 |
const searching = () => { |
51 |
- if (CommonUtil.isEmpty(state.loginUser) == false |
|
52 |
- && state.loginUser['authority'] == 'ROLE_GUARDIAN' & isMySenior) { |
|
53 |
- senior['senior_id'] = mySenior; |
|
54 |
- setSenior({ ...senior }); |
|
55 |
- seniorSelectOne(); |
|
56 |
- } else if (state['seniorList'] != null && state['seniorList'].length > 0) { |
|
57 |
- setSenior(state['seniorList'][0]); |
|
58 |
- } |
|
59 |
- if (CommonUtil.isEmpty(state.loginUser) == false |
|
60 |
- && state.loginUser['authority'] == 'ROLE_SENIOR') { |
|
61 |
- setSenior({ ...senior }); |
|
62 |
- seniorSelectOne(); |
|
63 |
- } |
|
64 | 51 |
|
65 |
- seniorMedicationSelectList(senior); |
|
66 |
- seniorTemperatureSelectListByDay(senior); |
|
67 |
- visitRecordSelectList(senior); |
|
52 |
+ if (CommonUtil.isEmpty(seniorSearch['senior_id']) == false) { |
|
53 |
+ seniorSelectOne(); |
|
54 |
+ seniorMedicationSelectList(); |
|
55 |
+ seniorTemperatureSelectListByDay(); |
|
56 |
+ visitRecordSelectList(); |
|
57 |
+ } else { |
|
58 |
+ return; |
|
59 |
+ } |
|
68 | 60 |
} |
69 |
- |
|
70 |
- const [mySenior, setMySenior] = React.useState(); |
|
71 |
- const [isMySenior, setIsMySenior] = React.useState(false); |
|
72 |
- React.useEffect(() => { |
|
73 |
- searching(); |
|
74 |
- }, [mySenior, isMySenior]) |
|
75 | 61 |
|
76 | 62 |
//시니어 정보 |
77 | 63 |
const [senior, setSenior] = React.useState({ |
64 |
+ 'user_id': null, |
|
65 |
+ 'user_name': null, |
|
66 |
+ 'senior_id':null, |
|
67 |
+ }); |
|
68 |
+ |
|
69 |
+ const [seniorSearch, setSeniorSearch] = React.useState({ |
|
78 | 70 |
'user_id': state.loginUser['authority'] == 'ROLE_SENIOR' ? state.loginUser['user_id'] : null, |
79 | 71 |
'user_name': state.loginUser['authority'] == 'ROLE_SENIOR' ? state.loginUser['user_name'] : null, |
80 | 72 |
'senior_id': state.loginUser['authority'] == 'ROLE_SENIOR' ? state.loginUser['user_id'] : null, |
... | ... | @@ -87,7 +79,7 @@ |
87 | 79 |
headers: { |
88 | 80 |
'Content-Type': 'application/json; charset=UTF-8' |
89 | 81 |
}, |
90 |
- body: JSON.stringify(senior), |
|
82 |
+ body: JSON.stringify(seniorSearch), |
|
91 | 83 |
}).then((response) => response.json()).then((data) => { |
92 | 84 |
console.log("seniorSelectOne data : ", data); |
93 | 85 |
setSenior(data); |
... | ... | @@ -97,18 +89,18 @@ |
97 | 89 |
}; |
98 | 90 |
|
99 | 91 |
const handleChangeSelect = (e) => { |
100 |
- setMySenior(e.target.value); |
|
101 |
- setIsMySenior(true); |
|
92 |
+ console.log('handleChangeSelect : ', e.target.value); |
|
93 |
+ setSeniorSearch(e.target.value); |
|
102 | 94 |
}; |
103 | 95 |
|
104 | 96 |
const SelectBox = () => { |
105 | 97 |
if (CommonUtil.isEmpty(state.loginUser) == false |
106 |
- && state.loginUser['authority'] == 'ROLE_GUARDIAN' && state['seniorList'].length > 1) { |
|
98 |
+ && state.loginUser['authority'] == 'ROLE_GUARDIAN' && state['seniorList'].length > 1) { |
|
107 | 99 |
return ( |
108 |
- <select className="margin-bottom2" onChange={handleChangeSelect} value={mySenior}> |
|
100 |
+ <select className="margin-bottom2" onChange={handleChangeSelect}> |
|
109 | 101 |
{state['seniorList'].map((item, idx) => { |
110 | 102 |
return ( |
111 |
- <option key={idx} value={item['senior_id']}>{item['user_name']}</option> |
|
103 |
+ <option key={idx} value={item}>{item['user_name']}</option> |
|
112 | 104 |
) |
113 | 105 |
})} |
114 | 106 |
</select> |
... | ... | @@ -121,16 +113,16 @@ |
121 | 113 |
const [seniorMedicationList, setSeniorMedicationList] = React.useState([]); |
122 | 114 |
const [showMedicationTimeCode, setShowMedicationTimeCode] = React.useState({}); |
123 | 115 |
//특정 대상자의 실제 복약 정보 목록 조회 |
124 |
- const seniorMedicationSelectList = (seniorNum) => { |
|
116 |
+ const seniorMedicationSelectList = () => { |
|
125 | 117 |
fetch("/user/seniorMedicationSelectList.json", { |
126 | 118 |
method: "POST", |
127 | 119 |
headers: { |
128 | 120 |
'Content-Type': 'application/json; charset=UTF-8' |
129 | 121 |
}, |
130 |
- body: JSON.stringify(seniorNum), |
|
122 |
+ body: JSON.stringify(seniorSearch), |
|
131 | 123 |
}).then((response) => response.json()).then((data) => { |
132 | 124 |
setSeniorMedicationList(data); |
133 |
- seniorMedicationSelectListByDay(data, seniorNum); |
|
125 |
+ seniorMedicationSelectListByDay(data); |
|
134 | 126 |
}).catch((error) => { |
135 | 127 |
console.log('seniorMedicationSelectList() /user/seniorMedicationSelectList.json error : ', error); |
136 | 128 |
}); |
... | ... | @@ -140,13 +132,13 @@ |
140 | 132 |
const [seniorMedicationListByDay, setSeniorMedicationListByDay] = React.useState([]); |
141 | 133 |
const [stackChartData, setStackChartData] = React.useState([]); |
142 | 134 |
//특정 대상자의 일별, 복약시간별 복약 목록 조회 |
143 |
- const seniorMedicationSelectListByDay = (seniorMedicationList, seniorNum) => { |
|
135 |
+ const seniorMedicationSelectListByDay = (seniorMedicationList) => { |
|
144 | 136 |
fetch("/user/seniorMedicationSelectListByDay.json", { |
145 | 137 |
method: "POST", |
146 | 138 |
headers: { |
147 | 139 |
'Content-Type': 'application/json; charset=UTF-8' |
148 | 140 |
}, |
149 |
- body: JSON.stringify(seniorNum), |
|
141 |
+ body: JSON.stringify(seniorSearch), |
|
150 | 142 |
}).then((response) => response.json()).then((data) => { |
151 | 143 |
setSeniorMedicationListByDay(data); |
152 | 144 |
let showMedicationTimeCode = {}; |
... | ... | @@ -184,13 +176,13 @@ |
184 | 176 |
const [seniorTemperatureListByDay, setSeniorTemperatureListByDay] = React.useState([]); |
185 | 177 |
const [stackTemperatureData, setStackTemperatureData] = React.useState([]); |
186 | 178 |
//특정 대상자의 일별, 시간별 온도 목록 조회 |
187 |
- const seniorTemperatureSelectListByDay = (seniorNum) => { |
|
179 |
+ const seniorTemperatureSelectListByDay = () => { |
|
188 | 180 |
fetch("/user/seniorTemperatureSelectListByDay.json", { |
189 | 181 |
method: "POST", |
190 | 182 |
headers: { |
191 | 183 |
'Content-Type': 'application/json; charset=UTF-8' |
192 | 184 |
}, |
193 |
- body: JSON.stringify(seniorNum), |
|
185 |
+ body: JSON.stringify(seniorSearch), |
|
194 | 186 |
}).then((response) => response.json()).then((data) => { |
195 | 187 |
setSeniorTemperatureListByDay(data); |
196 | 188 |
if (CommonUtil.isEmpty(data) == false) { |
... | ... | @@ -214,13 +206,13 @@ |
214 | 206 |
//방문 기록 정보 |
215 | 207 |
const [visitRecordList, setVisitRecordList] = React.useState({}); |
216 | 208 |
//방문 기록 목록 조회 |
217 |
- const visitRecordSelectList = (seniorNum) => { |
|
209 |
+ const visitRecordSelectList = () => { |
|
218 | 210 |
fetch("/welfare/visitRecordSelectList.json", { |
219 | 211 |
method: "POST", |
220 | 212 |
headers: { |
221 | 213 |
'Content-Type': 'application/json; charset=UTF-8' |
222 | 214 |
}, |
223 |
- body: JSON.stringify(seniorNum), |
|
215 |
+ body: JSON.stringify(seniorSearch), |
|
224 | 216 |
}).then((response) => response.json()).then((data) => { |
225 | 217 |
console.log("방문 기록 목록 조회 결과(건수) : ", data); |
226 | 218 |
setVisitRecordList(data['visitRecordList']); |
... | ... | @@ -229,14 +221,39 @@ |
229 | 221 |
}); |
230 | 222 |
} |
231 | 223 |
|
224 |
+ // React.useEffect(() => { |
|
225 |
+ // searching(); |
|
226 |
+ // }, []); |
|
227 |
+ |
|
232 | 228 |
React.useEffect(() => { |
233 | 229 |
searching(); |
234 |
- }, []); |
|
230 |
+ }, [seniorSearch]); |
|
231 |
+ |
|
232 |
+ React.useEffect(() => { |
|
233 |
+ if (CommonUtil.isEmpty(state['seniorList']) == false) { |
|
234 |
+ setSeniorSearch(state['seniorList'][0]); |
|
235 |
+ } else { |
|
236 |
+ return; |
|
237 |
+ } |
|
238 |
+ }, [state['seniorList']]) |
|
235 | 239 |
|
236 | 240 |
return ( |
237 | 241 |
<> |
238 | 242 |
<main className="pink"> |
239 |
- <SelectBox /> |
|
243 |
+ |
|
244 |
+ { |
|
245 |
+ CommonUtil.isEmpty(state.loginUser) == false |
|
246 |
+ && state.loginUser['authority'] == 'ROLE_GUARDIAN' && state['seniorList'].length > 1 ? |
|
247 |
+ <select className="margin-bottom2" onChange={handleChangeSelect}> |
|
248 |
+ {state['seniorList'].map((item, idx) => { |
|
249 |
+ return ( |
|
250 |
+ <option key={idx} value={item}>{item['user_name']}</option> |
|
251 |
+ ) |
|
252 |
+ })} |
|
253 |
+ </select> |
|
254 |
+ : null |
|
255 |
+ } |
|
256 |
+ |
|
240 | 257 |
<div className="flex-start main-guardian"><img src={Senior} alt="" /> |
241 | 258 |
<Title title={`${senior['user_name']} 어르신`} explanation={"방문, 복약, 온도, 배터리 현황을 확인하세요."} /> |
242 | 259 |
</div> |
+++ client/views/pages/main/Main_guardian.jsx_back_230615
... | ... | @@ -0,0 +1,248 @@ |
1 | +import React, { useEffect } from "react"; | |
2 | +import { useNavigate, useLocation } from "react-router"; | |
3 | +import { useSelector } from "react-redux"; | |
4 | + | |
5 | +import Title from "../../component/Title.jsx"; | |
6 | +import Table from "../../component/Table.jsx"; | |
7 | +import Calendar from "../../component/Calendar.jsx"; | |
8 | +import TitleSmall from "../../component/TitleSmall.jsx"; | |
9 | +import DateDay from "../../component/DateDay.jsx"; | |
10 | +import DateMonth from "../../component/DateMonth.jsx"; | |
11 | +import Chart6 from "../../component/chart/Chart6.jsx"; | |
12 | +import ClearIcon from '@mui/icons-material/Clear'; | |
13 | +import CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline'; | |
14 | +import ErrorIcon from '@mui/icons-material/Error'; | |
15 | +import Senior from '../../../resources/files/images/senior.png'; | |
16 | +import battery from '../../../resources/files/images/battery.png'; | |
17 | +import zeropercent from '../../../resources/files/images/zeropercent.png'; | |
18 | +import pullpercent from '../../../resources/files/images/pullpercent.png'; | |
19 | +import twentypercent from '../../../resources/files/images/twentypercent.png'; | |
20 | +import fortypercent from '../../../resources/files/images/fortypercent.png'; | |
21 | +import eightytypercent from '../../../resources/files/images/eightypercent.png'; | |
22 | +import sixtytypercent from '../../../resources/files/images/sixtypercent.png'; | |
23 | +import calendar from '../../../resources/files/images/calendar.png'; | |
24 | +import temperature from '../../../resources/files/images/temperature.png'; | |
25 | +import medicine from '../../../resources/files/images/medicine.png'; | |
26 | +import calendarBig from '../../../resources/files/images/calendarBig.png'; | |
27 | +import mornon from '../../../resources/files/images/mornon.png'; | |
28 | +import mornoff from '../../../resources/files/images/mornoff.png'; | |
29 | +import lunchon from '../../../resources/files/images/lunchon.png'; | |
30 | +import lunchoff from '../../../resources/files/images/lunchoff.png'; | |
31 | +import dinneron from '../../../resources/files/images/dinneron.png'; | |
32 | +import dinneroff from '../../../resources/files/images/dinneroff.png'; | |
33 | +import percent_m_0 from '../../../resources/files/images/percent_m_0.png'; | |
34 | +import percent_m_20 from '../../../resources/files/images/percent_m_20.png'; | |
35 | +import percent_m_40 from '../../../resources/files/images/percent_m_40.png'; | |
36 | +import percent_m_60 from '../../../resources/files/images/percent_m_60.png'; | |
37 | +import percent_m_80 from '../../../resources/files/images/percent_m_80.png'; | |
38 | +import percent_m_100 from '../../../resources/files/images/percent_m_100.png'; | |
39 | + | |
40 | +import CommonUtil from "../../../resources/js/CommonUtil.js"; | |
41 | + | |
42 | +export default function Main_guardian() { | |
43 | + const navigate = useNavigate(); | |
44 | + const location = useLocation(); | |
45 | + | |
46 | + //전역 변수 저장 객체 | |
47 | + const state = useSelector((state) => { return state }); | |
48 | + | |
49 | + //검색 | |
50 | + const searching = () => { | |
51 | + if (CommonUtil.isEmpty(state.loginUser) == false) { | |
52 | + if (state.loginUser['authority'] == 'ROLE_GUARDIAN') { | |
53 | + if (isMySenior) { | |
54 | + senior['senior_id'] = mySenior; | |
55 | + setSenior({ ...senior }); | |
56 | + seniorSelectOne(); | |
57 | + } else if (state['seniorList'] != null && state['seniorList'].length > 0) { | |
58 | + setSenior(state['seniorList'][0]); | |
59 | + } | |
60 | + } else if (state.loginUser['authority'] == 'ROLE_SENIOR') { | |
61 | + setSenior({ ...senior }); | |
62 | + seniorSelectOne(); | |
63 | + } | |
64 | + } | |
65 | + | |
66 | + seniorMedicationSelectList(senior); | |
67 | + seniorTemperatureSelectListByDay(senior); | |
68 | + visitRecordSelectList(senior); | |
69 | + } | |
70 | + | |
71 | + const [mySenior, setMySenior] = React.useState(null); | |
72 | + const [isMySenior, setIsMySenior] = React.useState(false); | |
73 | + React.useEffect(() => { | |
74 | + searching(); | |
75 | + }, [mySenior, isMySenior, state['seniorList']]) | |
76 | + | |
77 | + //시니어 정보 | |
78 | + const [senior, setSenior] = React.useState({ | |
79 | + 'user_id': state.loginUser['authority'] == 'ROLE_SENIOR' ? state.loginUser['user_id'] : null, | |
80 | + 'user_name': state.loginUser['authority'] == 'ROLE_SENIOR' ? state.loginUser['user_name'] : null, | |
81 | + 'senior_id': state.loginUser['authority'] == 'ROLE_SENIOR' ? state.loginUser['user_id'] : null, | |
82 | + }); | |
83 | + | |
84 | + //시니어 상세 조회 | |
85 | + const seniorSelectOne = () => { | |
86 | + fetch("/user/seniorSelectOne.json", { | |
87 | + method: "POST", | |
88 | + headers: { | |
89 | + 'Content-Type': 'application/json; charset=UTF-8' | |
90 | + }, | |
91 | + body: JSON.stringify(senior), | |
92 | + }).then((response) => response.json()).then((data) => { | |
93 | + console.log("seniorSelectOne data : ", data); | |
94 | + setSenior(data); | |
95 | + }).catch((error) => { | |
96 | + console.log('seniorSelectOne() /user/seniorSelectOne.json error : ', error); | |
97 | + }); | |
98 | + }; | |
99 | + | |
100 | + const handleChangeSelect = (e) => { | |
101 | + setMySenior(e.target.value); | |
102 | + setIsMySenior(true); | |
103 | + }; | |
104 | + | |
105 | + const SelectBox = () => { | |
106 | + if (CommonUtil.isEmpty(state.loginUser) == false | |
107 | + && state.loginUser['authority'] == 'ROLE_GUARDIAN' && state['seniorList'].length > 1) { | |
108 | + return ( | |
109 | + <select className="margin-bottom2" onChange={handleChangeSelect} value={mySenior}> | |
110 | + {state['seniorList'].map((item, idx) => { | |
111 | + return ( | |
112 | + <option key={idx} value={item['senior_id']}>{item['user_name']}</option> | |
113 | + ) | |
114 | + })} | |
115 | + </select> | |
116 | + ) | |
117 | + } | |
118 | + } | |
119 | + | |
120 | + | |
121 | + //특정 대상자의 실제 복약 정보 | |
122 | + const [seniorMedicationList, setSeniorMedicationList] = React.useState([]); | |
123 | + const [showMedicationTimeCode, setShowMedicationTimeCode] = React.useState({}); | |
124 | + //특정 대상자의 실제 복약 정보 목록 조회 | |
125 | + const seniorMedicationSelectList = (seniorNum) => { | |
126 | + fetch("/user/seniorMedicationSelectList.json", { | |
127 | + method: "POST", | |
128 | + headers: { | |
129 | + 'Content-Type': 'application/json; charset=UTF-8' | |
130 | + }, | |
131 | + body: JSON.stringify(seniorNum), | |
132 | + }).then((response) => response.json()).then((data) => { | |
133 | + setSeniorMedicationList(data); | |
134 | + seniorMedicationSelectListByDay(data, seniorNum); | |
135 | + }).catch((error) => { | |
136 | + console.log('seniorMedicationSelectList() /user/seniorMedicationSelectList.json error : ', error); | |
137 | + }); | |
138 | + }; | |
139 | + | |
140 | + //특정 대상자의 일별, 복약시간별 복약 목록 | |
141 | + const [seniorMedicationListByDay, setSeniorMedicationListByDay] = React.useState([]); | |
142 | + const [stackChartData, setStackChartData] = React.useState([]); | |
143 | + //특정 대상자의 일별, 복약시간별 복약 목록 조회 | |
144 | + const seniorMedicationSelectListByDay = (seniorMedicationList, seniorNum) => { | |
145 | + fetch("/user/seniorMedicationSelectListByDay.json", { | |
146 | + method: "POST", | |
147 | + headers: { | |
148 | + 'Content-Type': 'application/json; charset=UTF-8' | |
149 | + }, | |
150 | + body: JSON.stringify(seniorNum), | |
151 | + }).then((response) => response.json()).then((data) => { | |
152 | + setSeniorMedicationListByDay(data); | |
153 | + let showMedicationTimeCode = {}; | |
154 | + for (let i = 0; i < seniorMedicationList.length; i++) { | |
155 | + showMedicationTimeCode[seniorMedicationList[i]] = true; | |
156 | + } | |
157 | + setShowMedicationTimeCode(showMedicationTimeCode); | |
158 | + if (CommonUtil.isEmpty(data) == false) { | |
159 | + let _stackChartData = []; | |
160 | + for (let i = 0; i < data.length; i++) { | |
161 | + let sum = 0; // 실제 복약량 | |
162 | + let counter = 0; // 복약해야하는 양 | |
163 | + for (let j = 0; j < data[i]['medication_time_code_list'].length; j++) { | |
164 | + if (CommonUtil.isEmpty(showMedicationTimeCode[data[i]['medication_time_code_list'][j]]) == false) { | |
165 | + counter++; | |
166 | + if (i > 0) { | |
167 | + sum += data[i]['medication_time_code_count_list'][j]; | |
168 | + } | |
169 | + } else { | |
170 | + continue; | |
171 | + } | |
172 | + } | |
173 | + _stackChartData.push({ "xName": data[i]['medication_default_date'], "sum": sum, "total": counter }) | |
174 | + } | |
175 | + setStackChartData(_stackChartData); | |
176 | + } | |
177 | + }).catch((error) => { | |
178 | + console.log('seniorMedicationSelectListByDay() /user/seniorMedicationSelectListByDay.json error : ', error); | |
179 | + }); | |
180 | + }; | |
181 | + | |
182 | + const seniorTemperatureList = ['02:00', '10:00', '14:00', '23:00'] | |
183 | + | |
184 | + //특정 대상자의 일별, 시간별 온도 목록 | |
185 | + const [seniorTemperatureListByDay, setSeniorTemperatureListByDay] = React.useState([]); | |
186 | + const [stackTemperatureData, setStackTemperatureData] = React.useState([]); | |
187 | + //특정 대상자의 일별, 시간별 온도 목록 조회 | |
188 | + const seniorTemperatureSelectListByDay = (seniorNum) => { | |
189 | + fetch("/user/seniorTemperatureSelectListByDay.json", { | |
190 | + method: "POST", | |
191 | + headers: { | |
192 | + 'Content-Type': 'application/json; charset=UTF-8' | |
193 | + }, | |
194 | + body: JSON.stringify(seniorNum), | |
195 | + }).then((response) => response.json()).then((data) => { | |
196 | + setSeniorTemperatureListByDay(data); | |
197 | + if (CommonUtil.isEmpty(data) == false) { | |
198 | + let _stackTemperatureData = []; | |
199 | + let chartData = {}; | |
200 | + for (let i = 0; i < data.length; i++) { | |
201 | + chartData = { | |
202 | + xName: data[i]['temperature_date'], | |
203 | + }; | |
204 | + chartData['temperature'] = data[i]['temperature_data']; | |
205 | + chartData['time'] = data[i]['temperature_time']; | |
206 | + _stackTemperatureData.push(chartData); | |
207 | + } | |
208 | + setStackTemperatureData(_stackTemperatureData); | |
209 | + } | |
210 | + }).catch((error) => { | |
211 | + console.log('seniorTemperatureSelectListByDay() /user/seniorTemperatureSelectListByDay.json error : ', error); | |
212 | + }); | |
213 | + }; | |
214 | + | |
215 | + //방문 기록 정보 | |
216 | + const [visitRecordList, setVisitRecordList] = React.useState({}); | |
217 | + //방문 기록 목록 조회 | |
218 | + const visitRecordSelectList = (seniorNum) => { | |
219 | + fetch("/welfare/visitRecordSelectList.json", { | |
220 | + method: "POST", | |
221 | + headers: { | |
222 | + 'Content-Type': 'application/json; charset=UTF-8' | |
223 | + }, | |
224 | + body: JSON.stringify(seniorNum), | |
225 | + }).then((response) => response.json()).then((data) => { | |
226 | + console.log("방문 기록 목록 조회 결과(건수) : ", data); | |
227 | + setVisitRecordList(data['visitRecordList']); | |
228 | + }).catch((error) => { | |
229 | + console.log('visitRecordSelectList() /user/visitRecordSelectList.json error : ', error); | |
230 | + }); | |
231 | + } | |
232 | + | |
233 | + // React.useEffect(() => { | |
234 | + // searching(); | |
235 | + // }, []); | |
236 | + | |
237 | + return ( | |
238 | + <> | |
239 | + <main className="pink"> | |
240 | + <SelectBox /> | |
241 | + <div className="flex-start main-guardian"><img src={Senior} alt="" /> | |
242 | + <Title title={`${senior['user_name']} 어르신`} explanation={"방문, 복약, 온도, 배터리 현황을 확인하세요."} /> | |
243 | + </div> | |
244 | + <Calendar data={{ senior: senior, medication: stackChartData, temperature: stackTemperatureData, visitRecordList: visitRecordList }} /> | |
245 | + </main> | |
246 | + </> | |
247 | + ); | |
248 | +}(No newline at end of file) |
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?