frontend: fix messy deletion timer hooks at the mood details page
Parents:
12289791 file(s) changed
- frontend/app/entry/[id].tsx +25 -26
frontend/app/entry/[id].tsx
@@ -23,6 +23,27 @@ const deleteMoodEntry = useDeleteMoodEntry();
23 23 const [minutesLeft, setMinutesLeft] = useState(0);
24 24 const [canDelete, setCanDelete] = useState(false);
25 25
26 + useEffect(() => {
27 + const updateTimer = () => {
28 + const moment = new Date(entry?.moment);
29 + const createdAt = new Date(entry?.moment);
30 + const msSinceCreation = Date.now() - createdAt.getTime();
31 + const deletionWindowMs = 5 * 60 * 1000;
32 +
33 + const newCanDelete = msSinceCreation < deletionWindowMs;
34 + const newMinutesLeft = Math.max(0, Math.ceil((deletionWindowMs - msSinceCreation) / 60000));
35 +
36 + setCanDelete(newCanDelete);
37 + setMinutesLeft(newMinutesLeft);
38 + };
39 +
40 + updateTimer(); // Set initial values
41 +
42 + const interval = setInterval(updateTimer, 1000);
43 +
44 + return () => clearInterval(interval);
45 + }, [entry?.moment]);
46 +
26 47 if (isLoading) {
27 48 return (
28 49 <View style={styles.centered}>
@@ -46,28 +67,6 @@ const moment = new Date(entry.moment);
46 67 const moodDef = getMood(entry.selectedMood.toLowerCase());
47 68 const badge = getTimeBadge(moment);
48 69
49 - useEffect(() => {
50 - const updateTimer = () => {
51 - const moment = new Date(entry.moment);
52 - const createdAt = new Date(entry.moment);
53 - const msSinceCreation = Date.now() - createdAt.getTime();
54 - const deletionWindowMs = 5 * 60 * 1000;
55 -
56 - const newCanDelete = msSinceCreation < deletionWindowMs;
57 - const newMinutesLeft = Math.max(0, Math.ceil((deletionWindowMs - msSinceCreation) / 60000));
58 -
59 - setCanDelete(newCanDelete);
60 - setMinutesLeft(newMinutesLeft);
61 - };
62 -
63 - updateTimer(); // Set initial values
64 -
65 - const interval = setInterval(updateTimer, 1000);
66 -
67 - return () => clearInterval(interval);
68 - }, [entry.moment]);
69 -
70 -
71 70 const handleDelete = async () => {
72 71 await deleteMoodEntry.mutateAsync(String(entry.id));
73 72
@@ -113,11 +112,11 @@ {/* Core levels */}
113 112 <Section>
114 113 <SectionHeader title="NÃveis" variant="subtle" />
115 114 {[
116 - { label: 'Energia', value: entry.energyLevel },
117 - { label: 'Estresse', value: entry.stressLevel },
118 - { label: 'Ansiedade', value: entry.anxietyLevel },
115 + { id: 'energy', label: 'Energia', value: entry.energyLevel },
116 + { id: 'stress', label: 'Estresse', value: entry.stressLevel },
117 + { id: 'anxiety', label: 'Ansiedade', value: entry.anxietyLevel },
119 118 ].map((item, index, arr) => (
120 - <Card style={{ padding: Spacing.cardGap }}>
119 + <Card key={item.id} style={{ padding: Spacing.cardGap }}>
121 120 <View key={item.label}>
122 121 <View style={styles.componentRow}>
123 122 <Text style={styles.componentLabel}>{item.label}</Text>