From eea32ec256878fd14ed471eb505fa3e0f56ecbe9 Mon Sep 17 00:00:00 2001 From: Xc165543337 <90028194+Xc165543337@users.noreply.github.com> Date: Thu, 4 Apr 2024 11:01:49 +0200 Subject: [PATCH 1/2] fix: retrieve habits error case --- app/application/habits/index.tsx | 45 +++++++++++++++++++++++++++++--- 1 file changed, 42 insertions(+), 3 deletions(-) diff --git a/app/application/habits/index.tsx b/app/application/habits/index.tsx index f1b5c5e..daeb46d 100644 --- a/app/application/habits/index.tsx +++ b/app/application/habits/index.tsx @@ -1,11 +1,15 @@ import { SafeAreaView } from "react-native-safe-area-context" -import { ActivityIndicator } from "react-native-paper" +import { ActivityIndicator, Button, Text } from "react-native-paper" import { HabitsHistory } from "@/presentation/react/components/HabitsHistory/HabitsHistory" import { useHabitsTracker } from "@/presentation/react/contexts/HabitsTracker" +import { useAuthentication } from "@/presentation/react/contexts/Authentication" const HabitsPage: React.FC = () => { - const { habitsTracker, retrieveHabitsTracker } = useHabitsTracker() + const { habitsTracker, retrieveHabitsTracker, habitsTrackerPresenter } = + useHabitsTracker() + + const { user } = useAuthentication() return ( <SafeAreaView @@ -14,12 +18,47 @@ const HabitsPage: React.FC = () => { flex: 1, alignItems: "center", justifyContent: - retrieveHabitsTracker.state === "loading" ? "center" : "flex-start", + retrieveHabitsTracker.state === "loading" || + retrieveHabitsTracker.state === "error" + ? "center" + : "flex-start", }, ]} > {retrieveHabitsTracker.state === "loading" ? ( <ActivityIndicator animating size="large" /> + ) : retrieveHabitsTracker.state === "error" ? ( + <> + <Text variant="titleLarge"> + Error: There was an issue while retrieving habits, please try again. + </Text> + <Button + mode="contained" + style={{ + marginTop: 16, + width: 150, + height: 40, + }} + onPress={async () => { + if (user === null) { + return + } + await habitsTrackerPresenter.retrieveHabitsTracker({ + userId: user.id, + }) + }} + > + <Text + style={{ + color: "white", + fontWeight: "bold", + fontSize: 16, + }} + > + Retry + </Text> + </Button> + </> ) : ( <HabitsHistory habitsTracker={habitsTracker} /> )} -- GitLab From 1dc3939d421079911c9d5a3906aee0806ac2a960 Mon Sep 17 00:00:00 2001 From: Xc165543337 <90028194+Xc165543337@users.noreply.github.com> Date: Thu, 4 Apr 2024 11:21:56 +0200 Subject: [PATCH 2/2] fix: suggestion for creating the first habit --- .../HabitsHistory/HabitsHistory.tsx | 52 +++++++++++++++++-- 1 file changed, 48 insertions(+), 4 deletions(-) diff --git a/presentation/react/components/HabitsHistory/HabitsHistory.tsx b/presentation/react/components/HabitsHistory/HabitsHistory.tsx index 33eef0b..952ff1d 100644 --- a/presentation/react/components/HabitsHistory/HabitsHistory.tsx +++ b/presentation/react/components/HabitsHistory/HabitsHistory.tsx @@ -1,6 +1,7 @@ -import { FlatList } from "react-native" -import { List } from "react-native-paper" -import { useState } from "react" +import { FlatList, View } from "react-native" +import { Button, List, Text } from "react-native-paper" +import { useMemo, useState } from "react" +import { useRouter } from "expo-router" import type { GoalFrequency } from "@/domain/entities/Goal" import { GOAL_FREQUENCIES } from "@/domain/entities/Goal" @@ -15,6 +16,14 @@ export interface HabitsHistoryProps { export const HabitsHistory: React.FC<HabitsHistoryProps> = (props) => { const { habitsTracker } = props + const router = useRouter() + + const habitsByFrequency = useMemo(() => { + return GOAL_FREQUENCIES.filter((frequency) => { + return habitsTracker.habitsHistory[frequency].length > 0 + }) + }, [habitsTracker]) + const [accordionExpanded, setAccordionExpanded] = useState<{ [key in GoalFrequency]: boolean }>({ @@ -23,6 +32,41 @@ export const HabitsHistory: React.FC<HabitsHistoryProps> = (props) => { monthly: true, }) + if (habitsByFrequency.length <= 0) { + return ( + <View + style={{ + flex: 1, + alignItems: "center", + justifyContent: "center", + }} + > + <Text variant="titleLarge">{"Let's begin by adding habits! 🤩"}</Text> + <Button + mode="contained" + style={{ + marginTop: 16, + width: 250, + height: 40, + }} + onPress={() => { + router.push("/application/habits/new") + }} + > + <Text + style={{ + color: "white", + fontWeight: "bold", + fontSize: 16, + }} + > + Create your first habit! 🚀 + </Text> + </Button> + </View> + ) + } + return ( <List.Section style={[ @@ -31,7 +75,7 @@ export const HabitsHistory: React.FC<HabitsHistoryProps> = (props) => { }, ]} > - {GOAL_FREQUENCIES.map((frequency) => { + {habitsByFrequency.map((frequency) => { return ( <List.Accordion expanded={accordionExpanded[frequency]} -- GitLab