Эх сурвалжийг харах

fix: debounce price estimation requests to prevent infinite loop and server flooding

unknown 2 сар өмнө
parent
commit
481109c90b

+ 7 - 4
src/components/ModelUploadSection.vue

@@ -427,7 +427,9 @@ onMounted(async () => {
   } catch (e) { console.error("Failed to load initial data:", e); }
 });
 
-watch([() => files.value.map(f => f.quantity), selectedMaterial, modelLink], async () => {
+import { useDebounceFn } from "@vueuse/core";
+
+const updatePriceEstimate = useDebounceFn(async () => {
   if ((files.value.length > 0) && selectedMaterial.value) {
     try {
       const res = await getPriceEstimate({
@@ -435,17 +437,18 @@ watch([() => files.value.map(f => f.quantity), selectedMaterial, modelLink], asy
         file_sizes: files.value.map(f => f.size),
         file_quantities: files.value.map(f => f.quantity),
       });
-      // Assign individual prices to files for local quantity multiplication
       if (res.file_prices && Array.isArray(res.file_prices)) {
         files.value.forEach((f, i) => {
           f.basePrice = res.file_prices[i];
         });
         estimateMetadata.value = res.metadata;
-        // Force reactivity update
-        files.value = [...files.value];
       }
     } catch { /* silent */ }
   }
+}, 500);
+
+watch([() => files.value.map(f => f.quantity), selectedMaterial, modelLink], () => {
+  updatePriceEstimate();
 }, { deep: true });
 
 const isFormValid = computed(() =>