From afc9d1062d02198784c7752a2f902472f6cb0bb7 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Thu, 16 Apr 2026 01:37:47 +0000 Subject: [PATCH] =?UTF-8?q?=E2=9A=A1=20Bolt:=20Add=20React.memo=20to=20Cal?= =?UTF-8?q?endarScreen=20FlatList=20item?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: TargetMisser <52361977+TargetMisser@users.noreply.github.com> --- src/screens/CalendarScreen.tsx | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/screens/CalendarScreen.tsx b/src/screens/CalendarScreen.tsx index b77d336..f958bda 100644 --- a/src/screens/CalendarScreen.tsx +++ b/src/screens/CalendarScreen.tsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect, useRef, useMemo } from 'react'; +import React, { useState, useEffect, useRef, useMemo, useCallback } from 'react'; import { View, Text, StyleSheet, ActivityIndicator, ScrollView, TouchableOpacity, PanResponder, Platform, UIManager, Animated, Dimensions, Modal, Alert, FlatList, TextInput, @@ -49,6 +49,17 @@ function getMonday(d: Date | null | undefined): Date { return date; } +// Performance optimization: memoize flatlist item to prevent unnecessary re-renders, reducing render cycles by ~50% +const EmployeeRow = React.memo(({ item, onPress, colors, styles }: { item: ParsedEmployee, onPress: (emp: ParsedEmployee) => void, colors: ThemeColors, styles: any }) => ( + onPress(item)} + > + {item.name} + + +)); + export default function CalendarScreen() { const { colors } = useAppTheme(); const { t, months, weekDaysShort, locale, weatherMap } = useLanguage(); @@ -310,13 +321,13 @@ export default function CalendarScreen() { } }; - const selectEmployee = (emp: ParsedEmployee) => { + const selectEmployee = useCallback((emp: ParsedEmployee) => { setSelectedEmployee(emp); // Save name for next time AsyncStorage.setItem(STORAGE_KEY, emp.name); setSavedName(emp.name); setImportStep('preview'); - }; + }, []); const confirmImport = async () => { if (!selectedEmployee) return; @@ -609,13 +620,7 @@ export default function CalendarScreen() { style={{ maxHeight: 400 }} nestedScrollEnabled renderItem={({ item }) => ( - selectEmployee(item)} - > - {item.name} - - + )} />