diff --git a/frontend/src/components/domain/unified-wizard/wizards/CustomerOrderWizard.tsx b/frontend/src/components/domain/unified-wizard/wizards/CustomerOrderWizard.tsx index a1ab0c7b..dc81cf57 100644 --- a/frontend/src/components/domain/unified-wizard/wizards/CustomerOrderWizard.tsx +++ b/frontend/src/components/domain/unified-wizard/wizards/CustomerOrderWizard.tsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect, useRef } from 'react'; +import React, { useState, useEffect } from 'react'; import { WizardStep, WizardStepProps } from '../../../ui/WizardModal/WizardModal'; import { AdvancedOptionsSection } from '../../../ui/AdvancedOptionsSection'; import Tooltip from '../../../ui/Tooltip/Tooltip'; @@ -526,8 +526,6 @@ const OrderItemsStep: React.FC = ({ data, onDataChange }) => { // Step 3: Delivery & Payment with ALL fields const DeliveryPaymentStep: React.FC = ({ data, onDataChange }) => { - const hasGeneratedOrderNumRef = useRef(false); - const [orderData, setOrderData] = useState({ // Required fields requestedDeliveryDate: data.requestedDeliveryDate || '', @@ -604,26 +602,6 @@ const DeliveryPaymentStep: React.FC = ({ data, onDataChange }) metadata: data.metadata || '', }); - // Auto-generate order number if not provided - // Only watches orderNumber field to avoid unnecessary re-renders - useEffect(() => { - // Only auto-generate order number if: - // 1. We haven't generated before - // 2. Order number is empty - if (!hasGeneratedOrderNumRef.current && !orderData.orderNumber) { - hasGeneratedOrderNumRef.current = true; - const orderNum = `ORD-${Date.now().toString().slice(-8)}`; - const newData = { ...orderData, orderNumber: orderNum }; - setOrderData(newData); - onDataChange({ ...data, ...newData }); - } - - // If user manually clears the order number, allow regeneration - if (hasGeneratedOrderNumRef.current && !orderData.orderNumber) { - hasGeneratedOrderNumRef.current = false; - } - }, [orderData.orderNumber]); // Only watch orderNumber - prevents unnecessary interference - // Update parent whenever order data changes const handleOrderDataChange = (newOrderData: any) => { setOrderData(newOrderData); @@ -660,17 +638,18 @@ const DeliveryPaymentStep: React.FC = ({ data, onDataChange })
handleOrderDataChange({ ...orderData, orderNumber: e.target.value })} - placeholder="ORD-12345678" - className="w-full px-3 py-2 border border-[var(--border-secondary)] rounded-lg focus:outline-none focus:ring-2 focus:ring-[var(--color-primary)] bg-[var(--bg-primary)] text-[var(--text-primary)]" + value={orderData.orderNumber || 'Auto-generated on save'} + readOnly + disabled + placeholder="Will be generated automatically" + className="w-full px-3 py-2 border border-[var(--border-secondary)] rounded-lg bg-[var(--bg-secondary)] text-[var(--text-tertiary)] cursor-not-allowed" />
diff --git a/frontend/src/components/domain/unified-wizard/wizards/InventoryWizard.tsx b/frontend/src/components/domain/unified-wizard/wizards/InventoryWizard.tsx index 1a37382a..e36b87ea 100644 --- a/frontend/src/components/domain/unified-wizard/wizards/InventoryWizard.tsx +++ b/frontend/src/components/domain/unified-wizard/wizards/InventoryWizard.tsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect, useRef } from 'react'; +import React, { useState } from 'react'; import { WizardStep, WizardStepProps } from '../../../ui/WizardModal/WizardModal'; import { AdvancedOptionsSection } from '../../../ui/AdvancedOptionsSection'; import Tooltip from '../../../ui/Tooltip/Tooltip'; @@ -11,8 +11,6 @@ interface WizardDataProps extends WizardStepProps { // Single comprehensive step with all fields const InventoryDetailsStep: React.FC = ({ data, onDataChange }) => { - const hasGeneratedSkuRef = useRef(false); - const [inventoryData, setInventoryData] = useState({ // Required fields name: data.name || '', @@ -80,27 +78,6 @@ const InventoryDetailsStep: React.FC = ({ data, onDataChange }) customFields: data.customFields || '', }); - // Auto-generate SKU from name if not provided - // Only watches SKU field to avoid interfering with typing in name field - useEffect(() => { - // Only auto-generate SKU if: - // 1. We haven't generated before - // 2. SKU is empty - // 3. Name has at least 3 characters (so we can take substring) - if (!hasGeneratedSkuRef.current && !inventoryData.sku && inventoryData.name && inventoryData.name.length >= 3) { - hasGeneratedSkuRef.current = true; - const sku = `SKU-${inventoryData.name.substring(0, 3).toUpperCase()}-${Date.now().toString().slice(-4)}`; - const newData = { ...inventoryData, sku }; - setInventoryData(newData); - onDataChange({ ...data, ...newData }); - } - - // If user manually clears the SKU, allow regeneration - if (hasGeneratedSkuRef.current && !inventoryData.sku) { - hasGeneratedSkuRef.current = false; - } - }, [inventoryData.sku]); // Only watch SKU, not name - prevents interference with typing - // Update parent whenever local state changes const handleDataChange = (newInventoryData: any) => { setInventoryData(newInventoryData); @@ -177,8 +154,8 @@ const InventoryDetailsStep: React.FC = ({ data, onDataChange })
@@ -186,7 +163,7 @@ const InventoryDetailsStep: React.FC = ({ data, onDataChange }) type="text" value={inventoryData.sku} onChange={(e) => handleDataChange({ ...inventoryData, sku: e.target.value })} - placeholder="SKU-XXX-1234" + placeholder="Leave empty for auto-generation" className="w-full px-3 py-2 border border-[var(--border-secondary)] rounded-lg focus:outline-none focus:ring-2 focus:ring-[var(--color-primary)] bg-[var(--bg-primary)] text-[var(--text-primary)]" />
diff --git a/frontend/src/components/domain/unified-wizard/wizards/QualityTemplateWizard.tsx b/frontend/src/components/domain/unified-wizard/wizards/QualityTemplateWizard.tsx index 40743c00..5b1c6c48 100644 --- a/frontend/src/components/domain/unified-wizard/wizards/QualityTemplateWizard.tsx +++ b/frontend/src/components/domain/unified-wizard/wizards/QualityTemplateWizard.tsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect, useRef } from 'react'; +import React, { useState } from 'react'; import { WizardStep, WizardStepProps } from '../../../ui/WizardModal/WizardModal'; import { AdvancedOptionsSection } from '../../../ui/AdvancedOptionsSection'; import Tooltip from '../../../ui/Tooltip/Tooltip'; @@ -11,8 +11,6 @@ interface WizardDataProps extends WizardStepProps { // Single comprehensive step with all fields const QualityTemplateDetailsStep: React.FC = ({ data, onDataChange }) => { - const hasGeneratedCodeRef = useRef(false); - const [templateData, setTemplateData] = useState({ // Required fields name: data.name || '', @@ -52,27 +50,6 @@ const QualityTemplateDetailsStep: React.FC = ({ data, onDataCha specificConditions: data.specificConditions || '', }); - // Auto-generate template code from name if not provided - // Only watches templateCode field to avoid interfering with typing in name field - useEffect(() => { - // Only auto-generate template code if: - // 1. We haven't generated before - // 2. Template code is empty - // 3. Name has at least 3 characters (so we can take substring) - if (!hasGeneratedCodeRef.current && !templateData.templateCode && templateData.name && templateData.name.length >= 3) { - hasGeneratedCodeRef.current = true; - const code = `TPL-${templateData.name.substring(0, 3).toUpperCase()}-${Date.now().toString().slice(-4)}`; - const newData = { ...templateData, templateCode: code }; - setTemplateData(newData); - onDataChange({ ...data, ...newData }); - } - - // If user manually clears the template code, allow regeneration - if (hasGeneratedCodeRef.current && !templateData.templateCode) { - hasGeneratedCodeRef.current = false; - } - }, [templateData.templateCode]); // Only watch templateCode, not name - prevents interference with typing - // Update parent whenever local state changes const handleDataChange = (newTemplateData: any) => { setTemplateData(newTemplateData); @@ -150,8 +127,8 @@ const QualityTemplateDetailsStep: React.FC = ({ data, onDataCha
@@ -159,7 +136,7 @@ const QualityTemplateDetailsStep: React.FC = ({ data, onDataCha type="text" value={templateData.templateCode} onChange={(e) => handleDataChange({ ...templateData, templateCode: e.target.value })} - placeholder="TPL-XXX-1234" + placeholder="Leave empty for auto-generation" className="w-full px-3 py-2 border border-[var(--border-secondary)] rounded-lg focus:outline-none focus:ring-2 focus:ring-[var(--color-primary)] bg-[var(--bg-primary)] text-[var(--text-primary)]" />