forked from Nova-reward/Nova-Rewards
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathuseAnalytics.js
More file actions
32 lines (28 loc) · 935 Bytes
/
Copy pathuseAnalytics.js
File metadata and controls
32 lines (28 loc) · 935 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import { useState, useEffect, useCallback } from 'react';
import { fetchAnalytics } from '../lib/analyticsApi';
/**
* Fetches all analytics data for the given date range.
* Re-fetches automatically when `range` changes.
*
* @param {'7d'|'30d'|'90d'} range
* @returns {{ data: object|null, loading: boolean, error: string|null, refetch: () => void }}
*/
export function useAnalytics(range) {
const [data, setData] = useState(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
const load = useCallback(async () => {
setLoading(true);
setError(null);
try {
const result = await fetchAnalytics(range);
setData(result);
} catch (err) {
setError(err?.message || 'Failed to load analytics');
} finally {
setLoading(false);
}
}, [range]);
useEffect(() => { load(); }, [load]);
return { data, loading, error, refetch: load };
}