| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- import { useEffect, useState } from 'react';
- import React from 'react';
- import { View, Text, StyleSheet, Pressable, FlatList } from 'react-native';
- import { FlashList } from '@shopify/flash-list';
- import useSignUpStore from '../../../../../providers/signup_form_store';
- import { ICarSeries } from '../../../../../types/car';
- type CarBrandSeriesMap = {
- [brand: string]: ICarSeries[];
- };
- //hard-coded mock data
- const vehicles: CarBrandSeriesMap = {
- 'Brand A': [
- {
- imgUrl: 'logo1',
- name: 'Brand A - Series 1',
- id: 'Brand A - Series 1'
- },
- {
- imgUrl: 'logo2',
- name: 'Brand A - Series 2',
- id: 'Brand A - Series 2'
- },
- {
- imgUrl: 'logo3',
- name: 'Brand A - Series 3',
- id: 'Brand A - Series 3'
- },
- {
- imgUrl: 'logo4',
- name: 'Brand A - Series 4',
- id: 'Brand A - Series 4'
- }
- ],
- 'Brand B': [
- {
- imgUrl: 'logo1',
- name: 'Brand B - Series 1',
- id: 'Brand B - Series 1'
- },
- {
- imgUrl: 'logo2',
- name: 'Brand B - Series 2',
- id: 'Brand B - Series 2'
- },
- {
- imgUrl: 'logo3',
- name: 'Brand B - Series 3',
- id: 'Brand B - Series 3'
- },
- {
- imgUrl: 'logo4',
- name: 'Brand B - Series 4',
- id: 'Brand B - Series 4'
- }
- ],
- 'Brand C': [
- {
- imgUrl: 'logo1',
- name: 'Brand C - Series 1',
- id: 'Brand C - Series 1'
- },
- {
- imgUrl: 'logo2',
- name: 'Brand C - Series 2',
- id: 'Brand C - Series 2'
- },
- {
- imgUrl: 'logo3',
- name: 'Brand C - Series 3',
- id: 'Brand C - Series 3'
- },
- {
- imgUrl: 'logo4',
- name: 'Brand C - Series 4',
- id: 'Brand C - Series 4'
- }
- ]
- };
- type ChooseCarSeriesProps = {
- goToChooseCarBrandPage: () => void;
- goToChooseCarModelPage: () => void;
- };
- const ChooseCarSeries: React.FC<ChooseCarSeriesProps> = ({
- goToChooseCarBrandPage,
- goToChooseCarModelPage
- }) => {
- const { signUpFormData, setSignUpFormData } = useSignUpStore();
- const handleSelectSeries = (brand: string) => {
- setSignUpFormData({
- ...signUpFormData,
- selectedCarSeries: brand
- });
- goToChooseCarModelPage();
- };
- return (
- <View style={styles.mainContainer}>
- <View style={styles.titleContainer}>
- <Text style={{ fontSize: 24, fontWeight: '300' }}>
- 選擇車系
- </Text>
- </View>
- <View style={styles.paginationContainer}>
- <Pressable onPress={goToChooseCarBrandPage}>
- <Text style={{ color: '#888888' }}>{`< 上一步`}</Text>
- </Pressable>
- </View>
- <View style={styles.bottomContainer}>
- <FlashList
- data={vehicles[signUpFormData.selectedCarBrand]}
- estimatedItemSize={20}
- renderItem={({ item }) => (
- <Pressable
- onPress={() => handleSelectSeries(item.name)}
- >
- <View style={styles.listContainer}>
- <View style={styles.logoContainer}>
- <Text
- style={{
- fontSize: 24,
- fontWeight: '200'
- }}
- >
- {'logo'}
- </Text>
- </View>
- <View style={styles.itemContainer}>
- <Text style={styles.item}>{item.name}</Text>
- </View>
- </View>
- </Pressable>
- )}
- />
- </View>
- </View>
- );
- };
- const styles = StyleSheet.create({
- mainContainer: {
- flex: 1,
- flexDirection: 'column',
- backgroundColor: '#FFFFFF'
- },
- titleContainer: {
- flex: 1,
- alignItems: 'center',
- justifyContent: 'center'
- },
- paginationContainer: {
- flex: 0.3,
- paddingLeft: '6%',
- paddingBottom: '5%'
- },
- bottomContainer: {
- flex: 7
- },
- listContainer: {
- flex: 0.5,
- flexDirection: 'row',
- alignItems: 'center',
- paddingVertical: 15
- },
- logoContainer: {
- flex: 2,
- alignItems: 'center'
- },
- itemContainer: {
- flex: 8
- },
- item: {
- paddingLeft: '6%',
- fontSize: 24,
- fontWeight: '200'
- }
- });
- export default ChooseCarSeries;
|