diff --git a/frontend/lib/utils/buttonActions.ts b/frontend/lib/utils/buttonActions.ts index c039d55a..4d5915e9 100644 --- a/frontend/lib/utils/buttonActions.ts +++ b/frontend/lib/utils/buttonActions.ts @@ -4116,39 +4116,43 @@ export class ButtonActionExecutor { try { console.log("๐Ÿ›‘ [handleTrackingStop] ์œ„์น˜ ์ถ”์  ์ข…๋ฃŒ:", { config, context }); - // ์ถ”์  ์ค‘์ธ์ง€ ํ™•์ธ - if (!this.trackingIntervalId) { - toast.warning("์ง„ํ–‰ ์ค‘์ธ ์œ„์น˜ ์ถ”์ ์ด ์—†์Šต๋‹ˆ๋‹ค."); - return false; + // ์ถ”์  ์ค‘์ธ์ง€ ํ™•์ธ (์ƒˆ๋กœ๊ณ ์นจ ํ›„์—๋„ DB ์ƒํƒœ ๊ธฐ๋ฐ˜ ์ข…๋ฃŒ ๊ฐ€๋Šฅํ•˜๋„๋ก ์ˆ˜์ •) + const isTrackingActive = !!this.trackingIntervalId; + + if (!isTrackingActive) { + // ์ถ”์  ์ค‘์ด ์•„๋‹ˆ์–ด๋„ DB ์ƒํƒœ ๋ณ€๊ฒฝ์€ ์ง„ํ–‰ (์ƒˆ๋กœ๊ณ ์นจ ํ›„ ์ข…๋ฃŒ ์ง€์›) + console.log("โš ๏ธ [handleTrackingStop] trackingIntervalId ์—†์Œ - DB ์ƒํƒœ ๊ธฐ๋ฐ˜ ์ข…๋ฃŒ ์ง„ํ–‰"); + } else { + // ํƒ€์ด๋จธ ์ •๋ฆฌ (์ถ”์  ์ค‘์ธ ๊ฒฝ์šฐ์—๋งŒ) + clearInterval(this.trackingIntervalId); + this.trackingIntervalId = null; } - // ํƒ€์ด๋จธ ์ •๋ฆฌ - clearInterval(this.trackingIntervalId); - this.trackingIntervalId = null; - const tripId = this.currentTripId; - // ๋งˆ์ง€๋ง‰ ์œ„์น˜ ์ €์žฅ (trip_status๋ฅผ completed๋กœ) - const departure = - this.trackingContext?.formData?.[this.trackingConfig?.trackingDepartureField || "departure"] || null; - const arrival = this.trackingContext?.formData?.[this.trackingConfig?.trackingArrivalField || "arrival"] || null; - const departureName = this.trackingContext?.formData?.["departure_name"] || null; - const destinationName = this.trackingContext?.formData?.["destination_name"] || null; - const vehicleId = - this.trackingContext?.formData?.[this.trackingConfig?.trackingVehicleIdField || "vehicle_id"] || null; + // ๋งˆ์ง€๋ง‰ ์œ„์น˜ ์ €์žฅ (์ถ”์  ์ค‘์ด์—ˆ๋˜ ๊ฒฝ์šฐ์—๋งŒ) + if (isTrackingActive) { + const departure = + this.trackingContext?.formData?.[this.trackingConfig?.trackingDepartureField || "departure"] || null; + const arrival = this.trackingContext?.formData?.[this.trackingConfig?.trackingArrivalField || "arrival"] || null; + const departureName = this.trackingContext?.formData?.["departure_name"] || null; + const destinationName = this.trackingContext?.formData?.["destination_name"] || null; + const vehicleId = + this.trackingContext?.formData?.[this.trackingConfig?.trackingVehicleIdField || "vehicle_id"] || null; - await this.saveLocationToHistory( - tripId, - departure, - arrival, - departureName, - destinationName, - vehicleId, - "completed", - ); + await this.saveLocationToHistory( + tripId, + departure, + arrival, + departureName, + destinationName, + vehicleId, + "completed", + ); + } - // ๐Ÿ†• ๊ฑฐ๋ฆฌ/์‹œ๊ฐ„ ๊ณ„์‚ฐ ๋ฐ ์ €์žฅ - if (tripId) { + // ๐Ÿ†• ๊ฑฐ๋ฆฌ/์‹œ๊ฐ„ ๊ณ„์‚ฐ ๋ฐ ์ €์žฅ (์ถ”์  ์ค‘์ด์—ˆ๋˜ ๊ฒฝ์šฐ์—๋งŒ) + if (isTrackingActive && tripId) { try { const tripStats = await this.calculateTripStats(tripId); console.log("๐Ÿ“Š ์šดํ–‰ ํ†ต๊ณ„:", tripStats); @@ -4260,9 +4264,9 @@ export class ButtonActionExecutor { } } - // ์ƒํƒœ ๋ณ€๊ฒฝ (vehicles ํ…Œ์ด๋ธ” ๋“ฑ) - const effectiveConfig = config.trackingStatusOnStop ? config : this.trackingConfig; - const effectiveContext = context.userId ? context : this.trackingContext; + // ์ƒํƒœ ๋ณ€๊ฒฝ (vehicles ํ…Œ์ด๋ธ” ๋“ฑ) - ์ƒˆ๋กœ๊ณ ์นจ ํ›„์—๋„ ๋™์ž‘ํ•˜๋„๋ก config ์šฐ์„  ์‚ฌ์šฉ + const effectiveConfig = config.trackingStatusOnStop ? config : this.trackingConfig || config; + const effectiveContext = context.userId ? context : this.trackingContext || context; if (effectiveConfig?.trackingStatusOnStop && effectiveConfig?.trackingStatusField && effectiveContext) { try {