From e68fe6075e5210ee09cf29698286f71f0313bb68 Mon Sep 17 00:00:00 2001 From: Maxime RICHARD Date: Mon, 20 May 2024 15:35:49 +0200 Subject: [PATCH] feat: stats v1 --- presentation/react/components/Stats/Stats.tsx | 167 ++++++++++++++---- 1 file changed, 133 insertions(+), 34 deletions(-) diff --git a/presentation/react/components/Stats/Stats.tsx b/presentation/react/components/Stats/Stats.tsx index 4593790..3cbd071 100644 --- a/presentation/react/components/Stats/Stats.tsx +++ b/presentation/react/components/Stats/Stats.tsx @@ -1,9 +1,9 @@ -import { SafeAreaView } from "react-native-safe-area-context" import { Card, Text } from "react-native-paper" import CircularProgress from "react-native-circular-progress-indicator" -import { ScrollView } from "react-native" -import { Calendar } from "react-native-calendars" +import { Agenda } from "react-native-calendars" +import { useState } from "react" +import { getNowDate, getISODate } from "@/utils/dates" import type { HabitsTracker } from "@/domain/entities/HabitsTracker" export interface StatsProps { @@ -13,23 +13,107 @@ export interface StatsProps { export const Stats: React.FC = (props) => { const { habitsTracker } = props - const habitsHistory = habitsTracker.getAllHabitsHistory() - return ( - - - + const today = getNowDate() + const todayISO = getISODate(today) - {habitsHistory.map((element) => { - if (element.habit.goal.frequency === "daily") { - return ( - - + const [selectedDate, setSelectedDate] = useState(today) + const selectedDateISO = getISODate(selectedDate) + + const habitsHistory = habitsTracker.getAllHabitsHistory() + + let goalDays = 0 + let totalGoalDays = 0 + const dailyHabits = habitsHistory.filter((el) => { + return ( + el.habit.goal.frequency === "daily" && el.habit.startDate <= selectedDate + ) + }) + let displayDaily = true + if (dailyHabits.length === 0) { + displayDaily = false + } else { + for (const el of dailyHabits) { + totalGoalDays++ + if ( + el.getProgressesByDate(selectedDate)[0]?.goalProgress.isCompleted() ?? + false + ) { + goalDays++ + } + } + } + + let goalWeek = 0 + let totalGoalWeek = 0 + const weeklyHabits = habitsHistory.filter((el) => { + return ( + el.habit.goal.frequency === "weekly" && el.habit.startDate <= selectedDate + ) + }) + + let displayWeekly = true + if (weeklyHabits.length === 0) { + displayWeekly = false + } else { + for (const el of weeklyHabits) { + totalGoalWeek++ + if ( + el.getProgressesByDate(selectedDate)[0]?.goalProgress.isCompleted() ?? + false + ) { + goalWeek++ + } + } + } + + let goalMonth = 0 + let totalGoalMonth = 0 + const monthlyHabits = habitsHistory.filter((el) => { + return ( + el.habit.goal.frequency === "monthly" && + el.habit.startDate <= selectedDate + ) + }) + + let displayMonthly = true + if (monthlyHabits.length === 0) { + displayMonthly = false + } else { + for (const el of monthlyHabits) { + totalGoalMonth++ + if ( + el.getProgressesByDate(selectedDate)[0]?.goalProgress.isCompleted() ?? + false + ) { + goalMonth++ + } + } + } + + return ( + { + setSelectedDate(new Date(date.dateString)) + }} + markedDates={{ + [todayISO]: { marked: true, today: true }, + }} + maxDate={todayISO} + selected={selectedDateISO} + renderList={() => { + return ( + <> + {displayDaily ? ( + + - nbDays Sucess dans la semaine + {goalDays} but réussi dans la journée sur {totalGoalDays} = (props) => { /> - ) - } - if (element.habit.goal.frequency === "weekly") { - return ( - - + ) : null} + {displayWeekly ? ( + + - nbDays Sucess dans le mois + + {goalWeek} but réussi dans la semaine sur {totalGoalWeek} + + - ) - } - if (element.habit.goal.frequency === "monthly") { - return ( - + ) : null} + {displayMonthly ? ( + - nbDays Sucess dans le mois + + {goalMonth} but réussi dans le mois sur {totalGoalMonth} + + - ) - } - return null - })} - - + ) : null} + + ) + }} + /> ) }