From 25caadde958a7d365138000009b3c1bb15a54744 Mon Sep 17 00:00:00 2001 From: AutonetSellCar Deploy Date: Tue, 13 Jan 2026 00:19:08 +0900 Subject: [PATCH] feat: Use carmodooApi for PromoPreference to share data with Request Vehicle - Changed from carsApi to carmodooApi for maker/model data - Now shares same data source as vehicle-request page - Added CarmodooMaker and CarmodooModel types Co-Authored-By: Claude Opus 4.5 --- frontend/src/components/PromoPreference.tsx | 73 +++++++++++---------- 1 file changed, 40 insertions(+), 33 deletions(-) diff --git a/frontend/src/components/PromoPreference.tsx b/frontend/src/components/PromoPreference.tsx index 15399cc..77e3324 100644 --- a/frontend/src/components/PromoPreference.tsx +++ b/frontend/src/components/PromoPreference.tsx @@ -2,10 +2,9 @@ import { useState, useEffect } from 'react'; import Link from 'next/link'; -import { carsApi, authApi } from '@/lib/api'; +import { carmodooApi, authApi, CarmodooMaker, CarmodooModel } from '@/lib/api'; import { useAuthStore } from '@/lib/store'; import { useTranslation, useLanguageStore, translateCarName } from '@/lib/i18n'; -import { CarMaker, CarModel } from '@/types'; export default function PromoPreference() { const { t } = useTranslation(); @@ -13,10 +12,12 @@ export default function PromoPreference() { const { user, token } = useAuthStore(); const isLoggedIn = !!token && !!user; - const [makers, setMakers] = useState([]); - const [models, setModels] = useState([]); - const [selectedMaker, setSelectedMaker] = useState(''); - const [selectedModel, setSelectedModel] = useState(''); + const [makers, setMakers] = useState([]); + const [models, setModels] = useState([]); + const [selectedMakerCode, setSelectedMakerCode] = useState(''); + const [selectedMakerName, setSelectedMakerName] = useState(''); + const [selectedModelCode, setSelectedModelCode] = useState(''); + const [selectedModelName, setSelectedModelName] = useState(''); const [emailEnabled, setEmailEnabled] = useState(false); const [loading, setLoading] = useState(false); const [saved, setSaved] = useState(false); @@ -26,7 +27,7 @@ export default function PromoPreference() { useEffect(() => { const loadMakers = async () => { try { - const data = await carsApi.getMakers(); + const data = await carmodooApi.getMakers(); setMakers(data); } catch (error) { console.error('Failed to load makers:', error); @@ -42,16 +43,19 @@ export default function PromoPreference() { try { const pref = await authApi.getPromoPreference(); if (pref.promo_preferred_maker) { - setSelectedMaker(pref.promo_preferred_maker); - // Load models for selected maker + // Find maker by name and set code const maker = makers.find(m => m.name === pref.promo_preferred_maker); if (maker) { - const modelsData = await carsApi.getModels(maker.id); + setSelectedMakerCode(maker.code); + setSelectedMakerName(maker.name); + // Load models for selected maker + const modelsData = await carmodooApi.getModels(maker.code); setModels(modelsData); } } if (pref.promo_preferred_model) { - setSelectedModel(pref.promo_preferred_model); + setSelectedModelName(pref.promo_preferred_model); + // Find model code from loaded models or set it later } setEmailEnabled(pref.promo_email_enabled); } catch (error) { @@ -64,38 +68,41 @@ export default function PromoPreference() { }, [isLoggedIn, makers]); // Load models when maker changes - const handleMakerChange = async (makerName: string) => { + const handleMakerChange = async (makerCode: string) => { if (!isLoggedIn) { setShowLoginPrompt(true); return; } setShowLoginPrompt(false); - setSelectedMaker(makerName); - setSelectedModel(''); + setSelectedMakerCode(makerCode); + setSelectedModelCode(''); + setSelectedModelName(''); setSaved(false); - if (makerName) { - const maker = makers.find(m => m.name === makerName); - if (maker) { - try { - const data = await carsApi.getModels(maker.id); - setModels(data); - } catch (error) { - console.error('Failed to load models:', error); - } + const maker = makers.find(m => m.code === makerCode); + setSelectedMakerName(maker?.name || ''); + + if (makerCode) { + try { + const data = await carmodooApi.getModels(makerCode); + setModels(data); + } catch (error) { + console.error('Failed to load models:', error); } } else { setModels([]); } }; - const handleModelChange = (modelName: string) => { + const handleModelChange = (modelCode: string) => { if (!isLoggedIn) { setShowLoginPrompt(true); return; } setShowLoginPrompt(false); - setSelectedModel(modelName); + setSelectedModelCode(modelCode); + const model = models.find(m => m.code === modelCode); + setSelectedModelName(model?.name || ''); setSaved(false); }; @@ -117,8 +124,8 @@ export default function PromoPreference() { setLoading(true); try { await authApi.updatePromoPreference({ - promo_preferred_maker: selectedMaker || undefined, - promo_preferred_model: selectedModel || undefined, + promo_preferred_maker: selectedMakerName || undefined, + promo_preferred_model: selectedModelName || undefined, promo_email_enabled: emailEnabled, }); setSaved(true); @@ -143,27 +150,27 @@ export default function PromoPreference() {