| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- interface CarModel {
- name: string;
- year: number;
- id: string;
- }
- import React, { useEffect, useState } from 'react';
- import { View, Text, Image, Pressable, StyleSheet, ScrollView } from 'react-native';
- import { FlashList } from '@shopify/flash-list';
- import { router, useLocalSearchParams } from 'expo-router';
- import { SafeAreaView } from 'react-native-safe-area-context';
- import { useNavigation } from '@react-navigation/native';
- import { set } from 'date-fns';
- import useVehicleStore from '../../providers/vehicle_store';
- import { PreviousPageBlackSvg } from '../../component/global/SVG';
- interface CarType {
- id: number;
- name: string;
- }
- const RegisterChooseVehiclesTwo = () => {
- const { brandId, brandName, carTypes } = useLocalSearchParams<{
- brandId: string;
- brandName: string;
- carTypes: string;
- }>();
- const [parsedCarTypes, setParsedCarTypes] = useState<CarType[]>([]);
- useEffect(() => {
- if (carTypes) {
- const parsed = JSON.parse(carTypes);
- setParsedCarTypes(parsed);
- }
- }, [carTypes]);
- const {
- vehicleBrand,
- vehicleModel,
- BrandID,
- ModelID,
- licensePlate,
- setVehicleBrand,
- setVehicleModel,
- setBrandID,
- setModelID,
- setLicensePlate
- } = useVehicleStore();
- const logoPath = `../../../../../assets/${vehicleBrand.toLowerCase()}.png`;
- const [carModels, setCarModels] = useState<CarModel[]>([]);
- const navigation = useNavigation();
- // const brandLogos = {
- // audi: require('../../../../../assets/audi.png'),
- // acura: require('../../../../../assets/acura.png'),
- // bmw: require('../../../../../assets/bmw.png'),
- // byd: require('../../../../../assets/byd.png'),
- // chevrolet: require('../../../../../assets/chevrolet.png'),
- // cadillac: require('../../../../../assets/cadillac.png'),
- // ford: require('../../../../../assets/ford.png'),
- // fiat: require('../../../../../assets/fiat.png'),
- // genesis: require('../../../../../assets/genesis.png'),
- // honda: require('../../../../../assets/honda.png'),
- // hyundai: require('../../../../../assets/hyundai.png'),
- // jaguar: require('../../../../../assets/jaguar.png'),
- // kia: require('../../../../../assets/kia.png'),
- // 'mercedes-benz': require('../../../../../assets/benz.png'),
- // mini: require('../../../../../assets/mini.png'),
- // mazda: require('../../../../../assets/mazda.png'),
- // nissan: require('../../../../../assets/nissan.png'),
- // porsche: require('../../../../../assets/porsche.png'),
- // subaru: require('../../../../../assets/subaru.png'),
- // tesla: require('../../../../../assets/tesla.png'),
- // toyota: require('../../../../../assets/toyota.png'),
- // volkswagen: require('../../../../../assets/volkswagen.png'),
- // volvo: require('../../../../../assets/volvo.png'),
- // default: require('../../../../../assets/bmw.png') // Make sure to add a default logo
- // };
- // const getBrandLogo = (brand: string) => {
- // const logoKey = brand.toLowerCase().replace(/\s+/g, '-');
- // return brandLogos[logoKey] || brandLogos.default;
- // };
- const renderModelItem = ({ item: model }: { item: CarModel }) => (
- <>
- <Pressable
- className="flex-1 items-center justify-center py-6"
- onPress={() => {
- setVehicleModel(model.name);
- setModelID(model.id);
- navigation.pop(2);
- }}
- >
- <Text style={styles.modelYear} className="pb-1">
- {model.year}
- </Text>
- <Text style={styles.modelName}>{model.name}</Text>
- </Pressable>
- <View className="border-t mx-4 border-[#CCCCCC]" />
- </>
- );
- return (
- <SafeAreaView className="flex-1 bg-white" edges={['top', 'right', 'left']}>
- <ScrollView showsVerticalScrollIndicator={false} className="flex-1 mx-[5%]">
- <View style={{ marginTop: 25 }}>
- <Pressable
- className="self-start"
- onPress={() => {
- if (router.canGoBack()) {
- router.back();
- } else {
- router.replace('/accountMainPage');
- }
- }}
- >
- <PreviousPageBlackSvg />
- </Pressable>
- <Text
- style={{
- fontSize: 30,
- marginTop: 25,
- marginBottom: 10
- }}
- >
- 選擇車輛型號
- </Text>
- <View className="flex flex-row items-center space-x-8">
- {/* <Image source={getBrandLogo(vehicleBrand)} className="w-20 h-20 " resizeMode="contain" /> */}
- <Text className="text-4xl italic tracking-wider">{vehicleBrand}</Text>
- </View>
- </View>
- <View className="flex-1">
- <FlashList
- data={parsedCarTypes}
- renderItem={renderModelItem}
- keyExtractor={(item) => item.name}
- numColumns={1}
- />
- </View>
- </ScrollView>
- </SafeAreaView>
- );
- };
- const styles = StyleSheet.create({
- modelItem: {
- flex: 1,
- height: 100,
- justifyContent: 'center',
- alignItems: 'center',
- backgroundColor: '#F0F0F0',
- margin: 5,
- borderRadius: 10
- },
- modelName: {
- fontSize: 16,
- fontWeight: 'bold'
- },
- modelYear: {
- fontSize: 14,
- color: '#666'
- }
- });
- export default RegisterChooseVehiclesTwo;
|