## Issues Fixed:
### 1. Shipping rates not recalculating when address changes ✅
**Problem:**
- Change province → Rates stay the same
- Query was cached incorrectly
**Root Cause:**
Query key only tracked country, state, postcode:
```ts
queryKey: [..., shippingData.country, shippingData.state, shippingData.postcode]
```
But Rajaongkir and other plugins also need:
- City (different rates per city)
- Address (for some plugins)
**Solution:**
```ts
queryKey: [
...,
shippingData.country,
shippingData.state,
shippingData.city, // Added
shippingData.postcode,
shippingData.address_1 // Added
],
staleTime: 0, // Always refetch when key changes
```
### 2. First rate auto-selected but dropdown shows placeholder ✅
**Problem:**
- Rates calculated → First rate used in total
- But dropdown shows "Select shipping"
- Confusing UX
**Solution:**
Added useEffect to auto-select first rate:
```ts
useEffect(() => {
if (shippingRates?.methods?.length > 0) {
const firstRateId = shippingRates.methods[0].id;
const currentExists = shippingRates.methods.some(m => m.id === shippingMethod);
// Auto-select if no selection or current not in new rates
if (!shippingMethod || !currentExists) {
setShippingMethod(firstRateId);
}
}
}, [shippingRates?.methods]);
```
## Benefits:
- ✅ Change province → Rates recalculate immediately
- ✅ First rate auto-selected in dropdown
- ✅ Selection cleared if no rates available
- ✅ Selection preserved if still valid after recalculation
## Testing:
1. Select Jakarta → Shows JNE rates
2. Change to Bali → Rates recalculate, first auto-selected
3. Change to remote area → Different rates, first auto-selected
4. Dropdown always shows current selection