interface AlphabetSection { letter: string; brands: CarBrand[]; } const carBrands: AlphabetSection[] = [ { letter: 'A', brands: [ { name: 'Audi', logo: require('../../../../../assets/audi.png') }, { name: 'Acura', logo: require('../../../../../assets/acura.png') } ] }, { letter: 'B', brands: [ { name: 'BMW', logo: require('../../../../../assets/bmw.png') }, { name: 'BYD', logo: require('../../../../../assets/byd.png') } ] }, { letter: 'C', brands: [ { name: 'Chevrolet', logo: require('../../../../../assets/chevrolet.png') }, { name: 'Cadillac', logo: require('../../../../../assets/cadillac.png') } ] }, { letter: 'F', brands: [ { name: 'Ford', logo: require('../../../../../assets/ford.png') }, { name: 'Fiat', logo: require('../../../../../assets/fiat.png') } ] }, { letter: 'G', brands: [{ name: 'Genesis', logo: require('../../../../../assets/genesis.png') }] }, { letter: 'H', brands: [ { name: 'Honda', logo: require('../../../../../assets/honda.png') }, { name: 'Hyundai', logo: require('../../../../../assets/hyundai.png') } ] }, { letter: 'J', brands: [{ name: 'Jaguar', logo: require('../../../../../assets/jaguar.png') }] }, { letter: 'K', brands: [{ name: 'Kia', logo: require('../../../../../assets/kia.png') }] }, { letter: 'M', brands: [ { name: 'Mercedes-Benz', logo: require('../../../../../assets/benz.png') }, { name: 'Mini', logo: require('../../../../../assets/mini.png') }, { name: 'Mazda', logo: require('../../../../../assets/mazda.png') } ] }, { letter: 'N', brands: [{ name: 'Nissan', logo: require('../../../../../assets/nissan.png') }] }, { letter: 'P', brands: [{ name: 'Porsche', logo: require('../../../../../assets/porsche.png') }] }, { letter: 'S', brands: [{ name: 'Subaru', logo: require('../../../../../assets/subaru.png') }] }, { letter: 'T', brands: [ { name: 'Tesla', logo: require('../../../../../assets/tesla.png') }, { name: 'Toyota', logo: require('../../../../../assets/toyota.png') } ] }, { letter: 'V', brands: [ { name: 'Volkswagen', logo: require('../../../../../assets/volkswagen.png') }, { name: 'Volvo', logo: require('../../../../../assets/volvo.png') } ] } ]; import React, { useEffect, useState } from 'react'; import { View, Text, Image, Pressable, StyleSheet, ScrollView } from 'react-native'; import { FlashList } from '@shopify/flash-list'; import { router } from 'expo-router'; import useVehicleStore from '../../../../../providers/vehicle_store'; import { PreviousPageBlackSvg } from '../../../../../component/global/SVG'; import { SafeAreaView } from 'react-native-safe-area-context'; import { chargeStationService } from '../../../../../service/chargeStationService'; const SetVehiclesOne = () => { const [carData, setCarData] = useState(); const [extractedCarNameAndImgUrl, setExtractedCarNameAndImgUrl] = useState(''); const [processedCarData, setProcessedCarData] = useState([]); const { vehicleBrand, vehicleModel, BrandID, ModelID, licensePlate, setVehicleBrand, setVehicleModel, setBrandID, setModelID, setLicensePlate } = useVehicleStore(); //this uses getCarBrand to create an array of object with 2 keys: name and img_url useEffect(() => { const fetchCarBrand = async () => { try { const response = await chargeStationService.fetchCarBrand(); if (response) { const processedData = await Promise.all( response.data.map(async (car) => ({ ...car, logo: await chargeStationService.getProcessedCarImageUrl(car.img_url) })) ); setProcessedCarData(processedData); } } catch (error) { console.log(error); } }; fetchCarBrand(); }, []); useEffect(() => { console.log('Zustand VehicleBrand', vehicleBrand); console.log('Zustand BrandID', BrandID); console.log('Zustand VehicleModel', vehicleModel); console.log('Zustand ModelID', ModelID); }, [processedCarData]); const renderBrandItem = ({ item: brand }: { item }) => ( { setVehicleBrand(brand.name); setBrandID(brand.id); router.push({ pathname: 'setVehiclesTwo', params: { brandId: brand.id.toString(), brandName: brand.name, carTypes: JSON.stringify(brand.car_types) } }); }} > {brand.name} ); const renderAlphabetSection = ({ item: section }: { item: AlphabetSection }) => ( {section.letter} {section.brands.map((brand) => renderBrandItem({ item: brand }))} ); return ( { if (router.canGoBack()) { router.back(); } else { router.replace('/accountMainPage'); } }} > 選擇品牌 { const letter = brand.name[0].toUpperCase(); const existingSection = acc.find((section) => section.letter === letter); if (existingSection) { existingSection.brands.push(brand); } else { acc.push({ letter, brands: [brand] }); } return acc; }, [] as AlphabetSection[])} renderItem={renderAlphabetSection} keyExtractor={(item) => item.letter} /> ); }; const styles = StyleSheet.create({ letterHeader: { backgroundColor: '#E3F2F8', padding: 10, marginVertical: 10 }, letterText: { color: '#02677D', fontSize: 14, fontWeight: 'bold' }, brandRow: { flexDirection: 'row', flexWrap: 'wrap' }, brandItem: { width: '33.33%', alignItems: 'center', padding: 10 }, logo: { width: 80, height: 80 }, brandName: { marginTop: 5, textAlign: 'center' } }); export default SetVehiclesOne;