1
1
mirror of https://github.com/theoludwig/p61-project.git synced 2024-07-17 07:00:12 +02:00
p61-project/presentation/react/components/HabitsMainPage/HabitCard.tsx

90 lines
2.0 KiB
TypeScript
Raw Normal View History

2024-03-24 23:41:23 +01:00
import FontAwesome6 from "@expo/vector-icons/FontAwesome6"
import { useRouter } from "expo-router"
import { View } from "react-native"
import { List, Text } from "react-native-paper"
2024-03-24 23:41:23 +01:00
import type { GoalProgress } from "@/domain/entities/Goal"
import type { Habit } from "@/domain/entities/Habit"
import { getColorRGBAFromHex } from "@/utils/colors"
2024-03-24 23:41:23 +01:00
export interface HabitCardProps {
habit: Habit
goalProgress: GoalProgress
2024-03-24 23:41:23 +01:00
}
export const HabitCard: React.FC<HabitCardProps> = (props) => {
const { habit, goalProgress } = props
2024-03-24 23:41:23 +01:00
const router = useRouter()
const habitColor = getColorRGBAFromHex({
hexColor: habit.color,
opacity: 0.4,
})
return (
<List.Item
onPress={() => {
router.push({
pathname: "/application/habits/[habitId]/",
params: {
habitId: habit.id,
},
})
}}
title={habit.name}
style={[
{
paddingVertical: 20,
paddingHorizontal: 10,
marginVertical: 10,
borderRadius: 10,
backgroundColor: habitColor,
},
]}
contentStyle={[
{
paddingLeft: 12,
},
]}
titleStyle={[
{
fontSize: 18,
},
]}
left={() => {
return (
<FontAwesome6
size={24}
name={habit.icon}
style={[
{
width: 30,
},
]}
/>
)
}}
right={() => {
if (goalProgress.isNumeric()) {
return (
<View>
<Text>
{goalProgress.progress.toLocaleString()} /{" "}
{goalProgress.goal.target.value.toLocaleString()}{" "}
{goalProgress.goal.target.unit}
</Text>
</View>
)
}
return (
<View>
<Text>{goalProgress.isCompleted() ? "true" : "false"}</Text>
</View>
)
}}
2024-03-24 23:41:23 +01:00
/>
)
}