11'use client' ;
22
3- import { useMemo } from 'react' ;
3+ import { useEffect , useMemo , useState } from 'react' ;
44import CalendarHeatmap from 'react-calendar-heatmap' ;
55import 'react-calendar-heatmap/dist/styles.css' ;
6+ import { fetchDailyStats } from '@/services/heatmap/dailyStat.service' ;
67
78type HeatmapValue = {
89 date : string ;
910 count : number ;
1011} ;
1112
12- /** 이번 주 토요일 기준으로 endDate 맞추기 (GitHub 느낌) */
13+ /** 토요일 기준으로 endDate 설정 */
1314function endOfWeek ( date = new Date ( ) ) {
1415 const d = new Date ( date ) ;
1516 const diff = 6 - d . getDay ( ) ; // 0=Sun, 6=Sat
1617 d . setDate ( d . getDate ( ) + diff ) ;
1718 return d ;
1819}
1920
20- /** mock data: 최근 1년 */
21- function buildMockValues ( days = 366 ) : HeatmapValue [ ] {
22- const out : HeatmapValue [ ] = [ ] ;
23- const today = new Date ( ) ;
24-
25- for ( let i = days - 1 ; i >= 0 ; i -- ) {
26- const d = new Date ( today ) ;
27- d . setDate ( today . getDate ( ) - i ) ;
28-
29- const iso = d . toISOString ( ) . slice ( 0 , 10 ) ;
30-
31- const r = Math . random ( ) ;
32- const count =
33- r < 0.65 ? 0 : r < 0.85 ? 1 : r < 0.95 ? 2 : r < 0.985 ? 3 : 4 ;
34-
35- if ( count > 0 ) out . push ( { date : iso , count } ) ;
36- }
37-
38- return out ;
39- }
21+ type Props = {
22+ uid ?: string ;
23+ } ;
4024
41- export default function GrassHeatmap ( ) {
25+ export const GrassHeatmap = ( { uid } : Props ) => {
4226 const endDate = useMemo ( ( ) => endOfWeek ( new Date ( ) ) , [ ] ) ;
4327 const startDate = useMemo ( ( ) => {
4428 const d = new Date ( endDate ) ;
@@ -47,8 +31,19 @@ export default function GrassHeatmap() {
4731 return d ;
4832 } , [ endDate ] ) ;
4933
50- const values = useMemo ( ( ) => buildMockValues ( 366 ) , [ ] ) ;
34+ const [ values , setValues ] = useState < HeatmapValue [ ] > ( [ ] ) ;
35+ useEffect ( ( ) => {
36+ if ( ! uid ) return ;
5137
38+ ( async ( ) => {
39+ const stats = await fetchDailyStats ( uid ) ;
40+ const heatmapValues : HeatmapValue [ ] = stats . map ( ( s ) => ( {
41+ date : s . date ,
42+ count : s . total ,
43+ } ) ) ;
44+ setValues ( heatmapValues ) ;
45+ } ) ( ) ;
46+ } , [ uid ] ) ;
5247 return (
5348 < >
5449 { /* 가로 길어질 때 대비 */ }
@@ -87,4 +82,5 @@ export default function GrassHeatmap() {
8782 </ div >
8883 </ >
8984 ) ;
90- }
85+ } ;
86+ export default GrassHeatmap ;
0 commit comments