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:
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user