|
1 | | -import React, { useState, useEffect, useContext } from 'react'; |
2 | | -import { View, StyleSheet, FlatList, Alert, ScrollView } from 'react-native'; |
3 | | -import { Button, Text, Card, ActivityIndicator, Appbar, FAB, Title, Paragraph, Avatar } from 'react-native-paper'; |
| 1 | +import { useContext, useEffect, useState } from 'react'; |
| 2 | +import { Alert, FlatList, StyleSheet, Text, View } from 'react-native'; |
| 3 | +import { ActivityIndicator, Card, FAB, Paragraph, Title } from 'react-native-paper'; |
| 4 | +import { getGroupExpenses, getGroupMembers, getOptimizedSettlements } from '../api/groups'; |
4 | 5 | import { AuthContext } from '../context/AuthContext'; |
5 | | -import { getGroupMembers, getGroupExpenses, getOptimizedSettlements } from '../api/groups'; |
6 | 6 |
|
7 | 7 | const GroupDetailsScreen = ({ route, navigation }) => { |
8 | 8 | const { groupId, groupName, groupIcon } = route.params; |
@@ -75,10 +75,6 @@ const GroupDetailsScreen = ({ route, navigation }) => { |
75 | 75 | ); |
76 | 76 | }; |
77 | 77 |
|
78 | | - const renderMember = ({ item }) => ( |
79 | | - <Paragraph style={styles.memberText}>• {item.user.name}</Paragraph> |
80 | | - ); |
81 | | - |
82 | 78 | const renderSettlementSummary = () => { |
83 | 79 | const userOwes = settlements.filter(s => s.fromUserId === user._id); |
84 | 80 | const userIsOwed = settlements.filter(s => s.toUserId === user._id); |
@@ -116,42 +112,44 @@ const GroupDetailsScreen = ({ route, navigation }) => { |
116 | 112 | ); |
117 | 113 | } |
118 | 114 |
|
| 115 | + const renderHeader = () => ( |
| 116 | + <> |
| 117 | + <Card style={styles.card}> |
| 118 | + <Card.Content> |
| 119 | + <Title>Settlement Summary</Title> |
| 120 | + {renderSettlementSummary()} |
| 121 | + </Card.Content> |
| 122 | + </Card> |
| 123 | + |
| 124 | + <Card style={styles.card}> |
| 125 | + <Card.Content> |
| 126 | + <Title>Members</Title> |
| 127 | + {members.map((item) => ( |
| 128 | + <Paragraph key={item.userId} style={styles.memberText}>• {item.user.name}</Paragraph> |
| 129 | + ))} |
| 130 | + </Card.Content> |
| 131 | + </Card> |
| 132 | + |
| 133 | + <Title style={styles.expensesTitle}>Expenses</Title> |
| 134 | + </> |
| 135 | + ); |
| 136 | + |
119 | 137 | return ( |
120 | 138 | <View style={styles.container}> |
121 | | - <Appbar.Header> |
122 | | - <Appbar.BackAction onPress={() => navigation.goBack()} /> |
123 | | - <Avatar.Text size={36} label={groupIcon || groupName.charAt(0)} style={{marginLeft: 8}} /> |
124 | | - <Appbar.Content title={groupName} titleStyle={{marginLeft: 8}}/> |
125 | | - </Appbar.Header> |
126 | | - |
127 | | - <ScrollView style={styles.contentContainer}> |
128 | | - <Card style={styles.card}> |
129 | | - <Card.Content> |
130 | | - <Title>Settlement Summary</Title> |
131 | | - {renderSettlementSummary()} |
132 | | - </Card.Content> |
133 | | - </Card> |
134 | | - |
135 | | - <Card style={styles.card}> |
136 | | - <Card.Content> |
137 | | - <Title>Members</Title> |
138 | | - <FlatList |
139 | | - data={members} |
140 | | - renderItem={renderMember} |
141 | | - keyExtractor={(item) => item.userId} |
142 | | - /> |
143 | | - </Card.Content> |
144 | | - </Card> |
145 | | - |
146 | | - <Title style={styles.expensesTitle}>Expenses</Title> |
147 | | - <FlatList |
148 | | - data={expenses} |
149 | | - renderItem={renderExpense} |
150 | | - keyExtractor={(item) => item._id} |
151 | | - ListEmptyComponent={<Text>No expenses recorded yet.</Text>} |
152 | | - contentContainerStyle={{ paddingBottom: 80 }} // To avoid FAB overlap |
153 | | - /> |
154 | | - </ScrollView> |
| 139 | + <FlatList |
| 140 | + style={styles.contentContainer} |
| 141 | + data={expenses} |
| 142 | + renderItem={renderExpense} |
| 143 | + keyExtractor={(item) => item._id} |
| 144 | + ListHeaderComponent={renderHeader} |
| 145 | + ListEmptyComponent={ |
| 146 | + <View> |
| 147 | + {renderHeader()} |
| 148 | + <Text>No expenses recorded yet.</Text> |
| 149 | + </View> |
| 150 | + } |
| 151 | + contentContainerStyle={{ paddingBottom: 80 }} // To avoid FAB overlap |
| 152 | + /> |
155 | 153 |
|
156 | 154 | <FAB |
157 | 155 | style={styles.fab} |
|
0 commit comments