feat(beneficiaries): Use displayName in detail page header

- Add displayName field to Beneficiary type (computed: customName || name)
- Populate displayName in getAllBeneficiaries and getWellNuoBeneficiary API calls
- Update detail page header to use beneficiary.displayName
- Update MockDashboard to use displayName

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Sergei 2026-01-22 12:54:50 -08:00
parent c058ebe2c6
commit 9f0baea3fd
4 changed files with 10 additions and 2 deletions

View File

@ -403,7 +403,7 @@ export default function BeneficiaryDetailScreen() {
</View> </View>
)} )}
</TouchableOpacity> </TouchableOpacity>
<Text style={styles.headerTitle}>{beneficiary.customName || beneficiary.name}</Text> <Text style={styles.headerTitle}>{beneficiary.displayName}</Text>
</View> </View>
<BeneficiaryMenu <BeneficiaryMenu
@ -499,7 +499,7 @@ export default function BeneficiaryDetailScreen() {
/> />
} }
> >
<MockDashboard beneficiaryName={beneficiary.customName || beneficiary.name} /> <MockDashboard beneficiaryName={beneficiary.displayName} />
</ScrollView> </ScrollView>
)} )}
</View> </View>

View File

@ -65,6 +65,7 @@ export function BeneficiaryProvider({ children }: { children: React.ReactNode })
const newBeneficiary: Beneficiary = { const newBeneficiary: Beneficiary = {
id: Date.now(), // Use timestamp as unique ID id: Date.now(), // Use timestamp as unique ID
name: beneficiaryData.name.trim(), name: beneficiaryData.name.trim(),
displayName: beneficiaryData.name.trim(), // For UI display
address: beneficiaryData.address?.trim(), address: beneficiaryData.address?.trim(),
avatar: beneficiaryData.avatar, avatar: beneficiaryData.avatar,
status: 'offline', status: 'offline',

View File

@ -536,6 +536,7 @@ class ApiService {
{ {
id: 1, id: 1,
name: 'Julia Smith', name: 'Julia Smith',
displayName: 'Julia Smith',
status: 'online', status: 'online',
relationship: 'Mother', relationship: 'Mother',
last_activity: '2 min ago', last_activity: '2 min ago',
@ -550,6 +551,7 @@ class ApiService {
{ {
id: 2, id: 2,
name: 'Robert Johnson', name: 'Robert Johnson',
displayName: 'Robert Johnson',
status: 'offline', status: 'offline',
relationship: 'Father', relationship: 'Father',
last_activity: '1 hour ago', last_activity: '1 hour ago',
@ -583,6 +585,7 @@ class ApiService {
const beneficiary: Beneficiary = { const beneficiary: Beneficiary = {
id: deploymentId, id: deploymentId,
name: data.name, name: data.name,
displayName: data.name, // For UI display
avatar: getAvatarForBeneficiary(deploymentId), avatar: getAvatarForBeneficiary(deploymentId),
status: isRecent ? 'online' : 'offline', status: isRecent ? 'online' : 'offline',
address: data.address, address: data.address,
@ -674,6 +677,7 @@ class ApiService {
id: item.id, id: item.id,
name: item.name || item.email, name: item.name || item.email,
customName: item.customName || null, // User's custom name for this beneficiary customName: item.customName || null, // User's custom name for this beneficiary
displayName: item.customName || item.name || item.email, // For UI display
avatar: item.avatarUrl || undefined, // Use uploaded avatar from server avatar: item.avatarUrl || undefined, // Use uploaded avatar from server
status: 'offline' as const, status: 'offline' as const,
email: item.email, email: item.email,
@ -727,6 +731,7 @@ class ApiService {
id: data.id, id: data.id,
name: data.name || data.email, name: data.name || data.email,
customName: data.customName || null, // User's custom name for this beneficiary customName: data.customName || null, // User's custom name for this beneficiary
displayName: data.customName || data.name || data.email, // For UI display
avatar: data.avatarUrl || undefined, avatar: data.avatarUrl || undefined,
status: 'offline' as const, status: 'offline' as const,
email: data.email, email: data.email,
@ -823,6 +828,7 @@ class ApiService {
const beneficiary: Beneficiary = { const beneficiary: Beneficiary = {
id: result.beneficiary.id, id: result.beneficiary.id,
name: result.beneficiary.name || '', name: result.beneficiary.name || '',
displayName: result.beneficiary.name || '', // For UI display
status: 'offline' as const, status: 'offline' as const,
}; };

View File

@ -84,6 +84,7 @@ export interface Beneficiary {
id: number; id: number;
name: string; name: string;
customName?: string | null; // User's custom display name (e.g., "Mom", "Dad") customName?: string | null; // User's custom display name (e.g., "Mom", "Dad")
displayName: string; // Computed: customName || name (for UI display)
avatar?: string; avatar?: string;
device_id?: string; device_id?: string;
status: 'online' | 'offline'; status: 'online' | 'offline';