1
- import { useState , useEffect } from 'react' ;
2
- import { Layout , Alert , Row , Statistic , Col , Card } from 'antd' ;
3
- import Marquee from 'react-fast-marquee' ;
1
+ import { useState , useEffect } from 'react' ;
2
+ import { Layout } from 'antd' ;
4
3
5
4
import TopMenu from './TopMenu.jsx' ;
6
5
import LeftMenu from './LeftMenu.jsx' ;
6
+ import DashboardAlert from '../../../components/dashboard/DashboardAlert' ;
7
+ import ParkingStatistics from '../../../components/dashboard/ParkingStatistics' ;
7
8
8
9
import '../../css/DashboardMenu.css' ;
9
10
10
11
const { Header } = Layout ;
11
12
12
13
const Dashboard = ( ) => {
13
- const [ parkingStatistics , setParkingStatistics ] = useState ( {
14
- usagePercentage : 0 ,
15
- unusedPercentage : 0 ,
16
- freeSpaces : 0 ,
17
- occupiedSpaces : 0
18
- } ) ;
14
+ const [ parkingStatistics , setParkingStatistics ] = useState ( {
15
+ usagePercentage : 0 ,
16
+ unusedPercentage : 0 ,
17
+ freeSpaces : 0 ,
18
+ occupiedSpaces : 0
19
+ } ) ;
19
20
20
- useEffect ( ( ) => {
21
- fetchParkingStatistics ( ) ;
22
- } , [ ] ) ;
21
+ useEffect ( ( ) => {
22
+ fetchParkingStatistics ( ) ;
23
+ } , [ ] ) ;
23
24
24
- const fetchParkingStatistics = async ( ) => {
25
- try {
26
- const response = await fetch ( `${ import . meta. env . VITE_APP_API_URL } /parking-space/state` ) ;
27
- const data = await response . json ( ) ;
28
- const parkingSpaces = data . parkingSpaces ;
29
-
30
- let occupiedCount = 0 ;
31
- let availableCount = 0 ;
32
-
33
- parkingSpaces . forEach ( space => {
34
- if ( space . state === 'Ocupado' ) {
35
- occupiedCount ++ ;
36
- } else if ( space . state === 'Disponible' ) {
37
- availableCount ++ ;
38
- }
39
- } ) ;
40
-
41
- const totalSpaces = occupiedCount + availableCount ;
42
-
43
- const usagePercentage = ( ( occupiedCount / totalSpaces ) * 100 ) . toFixed ( 2 ) ;
44
- const unusedPercentage = ( ( availableCount / totalSpaces ) * 100 ) . toFixed ( 2 ) ;
45
-
46
- setParkingStatistics ( {
47
- usagePercentage : isNaN ( usagePercentage ) ? 0 : usagePercentage ,
48
- unusedPercentage : isNaN ( unusedPercentage ) ? 0 : unusedPercentage ,
49
- freeSpaces : availableCount ,
50
- occupiedSpaces : occupiedCount
51
- } ) ;
52
- } catch ( error ) {
53
- console . error ( 'Error al obtener las estadísticas del parqueo:' , error ) ;
25
+ const fetchParkingStatistics = async ( ) => {
26
+ try {
27
+ const response = await fetch ( `${ import . meta. env . VITE_APP_API_URL } /parking-space/state` ) ;
28
+ const data = await response . json ( ) ;
29
+ const parkingSpaces = data . parkingSpaces ;
30
+
31
+ let occupiedCount = 0 ;
32
+ let availableCount = 0 ;
33
+
34
+ parkingSpaces . forEach ( space => {
35
+ if ( space . state === 'Ocupado' ) {
36
+ occupiedCount ++ ;
37
+ } else if ( space . state === 'Disponible' ) {
38
+ availableCount ++ ;
54
39
}
55
- } ;
40
+ } ) ;
41
+
42
+ const totalSpaces = occupiedCount + availableCount ;
43
+
44
+ const usagePercentage = ( ( occupiedCount / totalSpaces ) * 100 ) . toFixed ( 2 ) ;
45
+ const unusedPercentage = ( ( availableCount / totalSpaces ) * 100 ) . toFixed ( 2 ) ;
46
+
47
+ setParkingStatistics ( {
48
+ usagePercentage : isNaN ( usagePercentage ) ? 0 : usagePercentage ,
49
+ unusedPercentage : isNaN ( unusedPercentage ) ? 0 : unusedPercentage ,
50
+ freeSpaces : availableCount ,
51
+ occupiedSpaces : occupiedCount
52
+ } ) ;
53
+ } catch ( error ) {
54
+ console . error ( 'Error al obtener las estadísticas del parqueo:' , error ) ;
55
+ }
56
+ } ;
56
57
57
- return (
58
- < Layout >
59
- < Header className = 'home-header-dashboard' >
60
- < TopMenu />
61
- </ Header >
62
- < Layout >
63
- < Layout . Sider >
64
- < LeftMenu />
65
- </ Layout . Sider >
66
- < Layout . Content className = 'layout-content-dashboard' >
67
- < img src = 'https://i.postimg.cc/Y2X76XNq/logo-card.png' className = 'logo-dashboard' />
68
- < Alert
69
- banner
70
- type = "info"
71
- className = 'alert-layout'
72
- message = {
73
- < Marquee pauseOnHover gradient = { false } >
74
- Bienvenido a Easy Park - Restaurante y Pastelería Florencia © { new Date ( ) . getFullYear ( ) }
75
- </ Marquee >
76
- }
77
- />
78
- < div className = "top-right-container" >
79
- < Row gutter = { 20 } >
80
- < Col span = { 40 } >
81
- < Card bordered = { false } >
82
- < Statistic
83
- title = "Porcentaje de parqueo disponible"
84
- value = { parkingStatistics . unusedPercentage }
85
- valueStyle = { {
86
- color : '#3f8600' ,
87
- } }
88
- style = { { marginBottom : 20 , marginTop : 20 } }
89
- suffix = "%"
90
- />
91
- < Statistic
92
- title = "Porcentaje de parqueo ocupado"
93
- value = { parkingStatistics . usagePercentage }
94
- valueStyle = { {
95
- color : '#cf1322' ,
96
- } }
97
- suffix = "%"
98
- style = { { marginBottom : 20 , marginTop : 20 } }
99
- />
100
- </ Card >
101
- </ Col >
102
- </ Row >
103
- </ div >
104
- < div className = "bottom-right-container" >
105
- < Row gutter = { 20 } >
106
- < Col span = { 40 } >
107
- < Card bordered = { false } >
108
- < Statistic
109
- title = "Espacios de parqueo libres"
110
- value = { parkingStatistics . freeSpaces }
111
- valueStyle = { {
112
- color : '#3f8600' ,
113
- } }
114
- style = { { marginBottom : 20 , marginTop : 20 } }
115
- />
116
- < Statistic
117
- title = "Espacios de parqueo ocupados"
118
- value = { parkingStatistics . occupiedSpaces }
119
- valueStyle = { {
120
- color : '#cf1322' ,
121
- } }
122
- style = { { marginBottom : 20 , marginTop : 20 } }
123
- />
124
- </ Card >
125
- </ Col >
126
- </ Row >
127
- </ div >
128
- </ Layout . Content >
129
- </ Layout >
130
- </ Layout >
131
- )
132
- }
58
+ return (
59
+ < Layout >
60
+ < Header className = 'home-header-dashboard' >
61
+ < TopMenu />
62
+ </ Header >
63
+ < Layout >
64
+ < Layout . Sider >
65
+ < LeftMenu />
66
+ </ Layout . Sider >
67
+ < Layout . Content className = 'layout-content-dashboard' >
68
+ < img src = 'https://i.postimg.cc/Y2X76XNq/logo-card.png' className = 'logo-dashboard' alt = 'Logo' />
69
+ < DashboardAlert />
70
+ < ParkingStatistics parkingStatistics = { parkingStatistics } />
71
+ </ Layout . Content >
72
+ </ Layout >
73
+ </ Layout >
74
+ ) ;
75
+ } ;
133
76
134
- export default Dashboard ;
77
+ export default Dashboard ;
0 commit comments