feat(orders): Dynamic shipping fields from checkout API
## Complete Rewrite of Shipping Implementation
### Backend (Already Done):
- ✅ `/checkout/fields` API endpoint
- ✅ Respects addon hide/show logic
- ✅ Handles digital-only products
- ✅ Returns field metadata (type, required, hidden, options, etc.)
### Frontend (New Implementation):
**Replaced hardcoded shipping fields with dynamic API-driven rendering**
#### Changes in OrderForm.tsx:
1. **Query checkout fields API:**
- Fetches fields based on cart items
- Enabled only when items exist
- Passes product IDs and quantities
2. **Dynamic state management:**
- Removed individual useState for each field (sFirst, sLast, sAddr1, etc.)
- Replaced with single `shippingData` object: `Record<string, any>`
- Cleaner, more flexible state management
3. **Dynamic field rendering:**
- Filters fields by fieldset === 'shipping' and !hidden
- Sorts by priority
- Renders based on field.type:
- `select` → Select with options
- `country` → SearchableSelect
- `textarea` → Textarea
- default → Input (text/email/tel)
- Respects required flag with visual indicator
- Auto-detects wide fields (address_1, address_2)
4. **Form submission:**
- Uses `shippingData` directly instead of individual fields
- Cleaner payload construction
### Benefits:
- ✅ Addons can add custom fields (e.g., subdistrict)
- ✅ Fields show/hide based on addon logic
- ✅ Required flags respected
- ✅ Digital products hide shipping correctly
- ✅ No hardcoding - fully extensible
- ✅ Maintains existing UX
### Testing:
- Test with physical products → shipping fields appear
- Test with digital products → shipping hidden
- Test with addons that add fields → custom fields render
- Test form submission → data sent correctly