fix: Resolve Tax and OrderForm errors

## Error 1: Tax Settings - Empty SelectItem value 
**Issue:** Radix UI Select does not allow empty string as SelectItem value
**Error:** "A <Select.Item /> must have a value prop that is not an empty string"

**Solution:**
- Use 'standard' instead of empty string for UI
- Convert 'standard' → '' when submitting to API
- Initialize selectedTaxClass to 'standard'
- Update all dialog handlers to use 'standard'

## Error 2: OrderForm - Undefined shipping variables 
**Issue:** Removed individual shipping state variables (sFirst, sLast, sCountry, etc.) but forgot to update all references
**Error:** "Cannot find name 'sCountry'"

**Solution:**
Fixed all remaining references:
1. **useEffect for country sync:** `setSCountry(bCountry)` → `setShippingData({...shippingData, country: bCountry})`
2. **useEffect for state validation:** `sState && !states[sCountry]` → `shippingData.state && !states[shippingData.country]`
3. **Customer autofill:** Individual setters → `setShippingData({ first_name, last_name, ... })`
4. **Removed sStateOptions:** No longer needed with dynamic fields

## Testing:
-  Tax settings page loads without errors
-  Add/Edit tax rate dialog works
-  OrderForm loads without errors
-  Shipping fields render dynamically
-  Customer autofill works with new state structure
This commit is contained in:
dwindown
2025-11-10 15:42:16 +07:00
parent e05635f358
commit a487baa61d
2 changed files with 27 additions and 22 deletions

View File

@@ -24,7 +24,7 @@ export default function TaxSettings() {
const [editingRate, setEditingRate] = useState<any | null>(null);
const [deletingRate, setDeletingRate] = useState<any | null>(null);
const [dismissedSuggestions, setDismissedSuggestions] = useState<string[]>([]);
const [selectedTaxClass, setSelectedTaxClass] = useState<string>('');
const [selectedTaxClass, setSelectedTaxClass] = useState<string>('standard');
// Fetch tax settings
const { data: settings, isLoading } = useQuery({
@@ -142,7 +142,7 @@ export default function TaxSettings() {
state: formData.get('state') as string || '',
rate: parseFloat(formData.get('rate') as string),
name: formData.get('name') as string,
tax_class: selectedTaxClass || '',
tax_class: selectedTaxClass === 'standard' ? '' : selectedTaxClass,
priority: 1,
compound: 0,
shipping: 1,
@@ -222,7 +222,7 @@ export default function TaxSettings() {
<Button
size="sm"
onClick={() => {
setSelectedTaxClass('');
setSelectedTaxClass('standard');
setShowAddRate(true);
}}
>
@@ -396,10 +396,10 @@ export default function TaxSettings() {
if (!open) {
setShowAddRate(false);
setEditingRate(null);
setSelectedTaxClass('');
setSelectedTaxClass('standard');
} else {
// Initialize tax class when opening
setSelectedTaxClass(editingRate?.tax_class || '');
// Initialize tax class when opening (convert empty to 'standard')
setSelectedTaxClass(editingRate?.tax_class || 'standard');
}
}}>
<DialogContent>
@@ -464,12 +464,12 @@ export default function TaxSettings() {
<div>
<Label>{__('Tax Class (Optional)')}</Label>
<Select value={selectedTaxClass} onValueChange={setSelectedTaxClass}>
<Select value={selectedTaxClass || 'standard'} onValueChange={setSelectedTaxClass}>
<SelectTrigger>
<SelectValue placeholder={__('Standard')} />
</SelectTrigger>
<SelectContent>
<SelectItem value="">{__('Standard')}</SelectItem>
<SelectItem value="standard">{__('Standard')}</SelectItem>
<SelectItem value="reduced-rate">{__('Reduced Rate')}</SelectItem>
<SelectItem value="zero-rate">{__('Zero Rate')}</SelectItem>
</SelectContent>