EverydayTech Platform - Developer Reference
Complete Source Code Documentation - All Applications
Loading...
Searching...
No Matches
SalesPulse.tsx
Go to the documentation of this file.
1"use client";
2import React, { useEffect, useState } from "react";
3
4interface SalesPulseProps {
5 value?: number;
6}
7
8export default function SalesPulse({ value }: SalesPulseProps) {
9 const [pulseValue, setPulseValue] = useState<number>(value || 0);
10 const [loading, setLoading] = useState(!value);
11
12 useEffect(() => {
13 if (value !== undefined) {
14 setPulseValue(value);
15 setLoading(false);
16 }
17 }, [value]);
18
19 useEffect(() => {
20 // If no value provided, refresh with random data every 30 seconds
21 if (value === undefined) {
22 const interval = setInterval(() => {
23 setPulseValue(Math.floor(Math.random() * 5000) + 1000);
24 }, 30000);
25
26 return () => clearInterval(interval);
27 }
28 }, [value]);
29
30 return (
31 <div className="card" role="status" aria-live="polite">
32 <div className="flex items-center justify-between mb-2">
33 <div className="text-sm font-semibold">Sales pulse</div>
34 <div className="text-xs text-muted">Live widget</div>
35 </div>
36 <div className="h-48 rounded-md bg-surface border border-border flex items-center justify-center">
37 {loading ? (
38 <div className="text-muted">Loading...</div>
39 ) : (
40 <div className="text-3xl font-extrabold" aria-atomic="true">
41 ${pulseValue?.toLocaleString()}
42 </div>
43 )}
44 </div>
45 </div>
46 );
47}