1
- import React , { useEffect , useState } from 'react' ;
1
+ import React , { useEffect , useMemo , useState } from 'react' ;
2
2
import classNames from 'classnames' ;
3
3
import SbEditable from 'storyblok-react' ;
4
4
5
5
import CountdownPie from './CountdownPie' ;
6
6
import UseCountdown from '../../hooks/useCountdown' ;
7
7
8
+ const generateClassName = ( key ) =>
9
+ `${ key } -${ Math . floor ( Math . random ( ) * 100000 , 5 ) } ` ;
10
+
8
11
const getDescriptorString = ( descriptor , time ) => {
9
12
return time !== 1 ? `${ descriptor } s` : descriptor ;
10
13
} ;
@@ -17,6 +20,10 @@ const Countdown = ({ blok }) => {
17
20
const [ days , hours , minutes , seconds ] = UseCountdown ( countdownDate ) || [ ] ;
18
21
const displayHours = hasDays ? hours : convertDaysToHours ( days ) + hours ;
19
22
const displayHourPieRange = hasDays ? 24 : hourPieRange ;
23
+ const daysClassName = useMemo ( ( ) => generateClassName ( 'days' ) , [ ] ) ;
24
+ const hoursClassName = useMemo ( ( ) => generateClassName ( 'hours' ) , [ ] ) ;
25
+ const minutesClassName = useMemo ( ( ) => generateClassName ( 'minutes' ) , [ ] ) ;
26
+ const secondsClassName = useMemo ( ( ) => generateClassName ( 'seconds' ) , [ ] ) ;
20
27
21
28
useEffect ( ( ) => {
22
29
if ( ! countdownDate ) {
@@ -41,6 +48,11 @@ const Countdown = ({ blok }) => {
41
48
* the date prop returns in the following format: "2023-11-21 23:56"
42
49
* we have convert it to be usable for the js Date object
43
50
*/
51
+ console . log ( date ) ;
52
+ console . log ( daysClassName ) ;
53
+ console . log ( hoursClassName ) ;
54
+ console . log ( minutesClassName ) ;
55
+ console . log ( secondsClassName ) ;
44
56
const dateArray = date . split ( ' ' ) ;
45
57
46
58
setCountdownDate ( new Date ( `${ dateArray [ 0 ] } T${ dateArray [ 1 ] } ` ) ) ;
@@ -57,18 +69,18 @@ const Countdown = ({ blok }) => {
57
69
} ) }
58
70
>
59
71
{ days > 0 && hasDays && (
60
- < CountdownPie className = "pie-days" descriptor = "days" percent = { 0 } >
72
+ < CountdownPie className = { daysClassName } descriptor = "days" percent = { 0 } >
61
73
0
62
74
</ CountdownPie >
63
75
) }
64
- < CountdownPie clasName = "pie-hours" descriptor = "hours" percent = { 0 } >
76
+ < CountdownPie className = { hoursClassName } descriptor = "hours" percent = { 0 } >
65
77
0
66
78
</ CountdownPie >
67
- < CountdownPie clasName = "pie-minutes" descriptor = "minutes" percent = { 0 } >
79
+ < CountdownPie className = { minutesClassName } descriptor = "minutes" percent = { 0 } >
68
80
0
69
81
</ CountdownPie >
70
82
< CountdownPie
71
- className = "pie-seconds"
83
+ className = { secondsClassName }
72
84
descriptor = "seconds"
73
85
percent = { 0 }
74
86
>
@@ -85,29 +97,29 @@ const Countdown = ({ blok }) => {
85
97
>
86
98
{ days > 0 && hasDays && (
87
99
< CountdownPie
88
- className = "pie-days"
100
+ className = { daysClassName }
89
101
descriptor = { getDescriptorString ( 'day' , days ) }
90
102
percent = { ( days / 29 ) * 100 }
91
103
>
92
104
{ days }
93
105
</ CountdownPie >
94
106
) }
95
107
< CountdownPie
96
- className = "pie-hours"
108
+ className = { hoursClassName }
97
109
descriptor = { getDescriptorString ( 'hour' , displayHours ) }
98
110
percent = { ( displayHours / displayHourPieRange ) * 100 }
99
111
>
100
112
{ displayHours }
101
113
</ CountdownPie >
102
114
< CountdownPie
103
- className = "pie-minutes"
115
+ className = { minutesClassName }
104
116
descriptor = { getDescriptorString ( 'minute' , minutes ) }
105
117
percent = { ( minutes / 60 ) * 100 }
106
118
>
107
119
{ minutes }
108
120
</ CountdownPie >
109
121
< CountdownPie
110
- className = "pie-seconds"
122
+ className = { secondsClassName }
111
123
descriptor = { getDescriptorString ( 'second' , seconds ) }
112
124
percent = { ( seconds / 60 ) * 100 }
113
125
>
0 commit comments