Skip to content

Commit 315d5df

Browse files
committed
allow multiple instances of the countdown clock
1 parent 24b7dcf commit 315d5df

File tree

1 file changed

+21
-9
lines changed

1 file changed

+21
-9
lines changed

src/components/giving-tuesday/Countdown.js

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
1-
import React, { useEffect, useState } from 'react';
1+
import React, { useEffect, useMemo, useState } from 'react';
22
import classNames from 'classnames';
33
import SbEditable from 'storyblok-react';
44

55
import CountdownPie from './CountdownPie';
66
import UseCountdown from '../../hooks/useCountdown';
77

8+
const generateClassName = (key) =>
9+
`${key}-${Math.floor(Math.random() * 100000, 5)}`;
10+
811
const getDescriptorString = (descriptor, time) => {
912
return time !== 1 ? `${descriptor}s` : descriptor;
1013
};
@@ -17,6 +20,10 @@ const Countdown = ({ blok }) => {
1720
const [days, hours, minutes, seconds] = UseCountdown(countdownDate) || [];
1821
const displayHours = hasDays ? hours : convertDaysToHours(days) + hours;
1922
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'), []);
2027

2128
useEffect(() => {
2229
if (!countdownDate) {
@@ -41,6 +48,11 @@ const Countdown = ({ blok }) => {
4148
* the date prop returns in the following format: "2023-11-21 23:56"
4249
* we have convert it to be usable for the js Date object
4350
*/
51+
console.log(date);
52+
console.log(daysClassName);
53+
console.log(hoursClassName);
54+
console.log(minutesClassName);
55+
console.log(secondsClassName);
4456
const dateArray = date.split(' ');
4557

4658
setCountdownDate(new Date(`${dateArray[0]}T${dateArray[1]}`));
@@ -57,18 +69,18 @@ const Countdown = ({ blok }) => {
5769
})}
5870
>
5971
{days > 0 && hasDays && (
60-
<CountdownPie className="pie-days" descriptor="days" percent={0}>
72+
<CountdownPie className={daysClassName} descriptor="days" percent={0}>
6173
0
6274
</CountdownPie>
6375
)}
64-
<CountdownPie clasName="pie-hours" descriptor="hours" percent={0}>
76+
<CountdownPie className={hoursClassName} descriptor="hours" percent={0}>
6577
0
6678
</CountdownPie>
67-
<CountdownPie clasName="pie-minutes" descriptor="minutes" percent={0}>
79+
<CountdownPie className={minutesClassName} descriptor="minutes" percent={0}>
6880
0
6981
</CountdownPie>
7082
<CountdownPie
71-
className="pie-seconds"
83+
className={secondsClassName}
7284
descriptor="seconds"
7385
percent={0}
7486
>
@@ -85,29 +97,29 @@ const Countdown = ({ blok }) => {
8597
>
8698
{days > 0 && hasDays && (
8799
<CountdownPie
88-
className="pie-days"
100+
className={daysClassName}
89101
descriptor={getDescriptorString('day', days)}
90102
percent={(days / 29) * 100}
91103
>
92104
{days}
93105
</CountdownPie>
94106
)}
95107
<CountdownPie
96-
className="pie-hours"
108+
className={hoursClassName}
97109
descriptor={getDescriptorString('hour', displayHours)}
98110
percent={(displayHours / displayHourPieRange) * 100}
99111
>
100112
{displayHours}
101113
</CountdownPie>
102114
<CountdownPie
103-
className="pie-minutes"
115+
className={minutesClassName}
104116
descriptor={getDescriptorString('minute', minutes)}
105117
percent={(minutes / 60) * 100}
106118
>
107119
{minutes}
108120
</CountdownPie>
109121
<CountdownPie
110-
className="pie-seconds"
122+
className={secondsClassName}
111123
descriptor={getDescriptorString('second', seconds)}
112124
percent={(seconds / 60) * 100}
113125
>

0 commit comments

Comments
 (0)