feat: implement multiple saved addresses with modal selector in checkout

- Add AddressController with full CRUD API for saved addresses
- Implement address management UI in My Account > Addresses
- Add modal-based address selector in checkout (Tokopedia-style)
- Hide checkout forms when saved address is selected
- Add search functionality in address modal
- Auto-select default addresses on page load
- Fix variable products to show 'Select Options' instead of 'Add to Cart'
- Add admin toggle for multiple addresses feature
- Clean up debug logs and fix TypeScript errors
This commit is contained in:
Dwindi Ramadhana
2025-12-26 01:16:11 +07:00
parent 9ac09582d2
commit 100f9cce55
27 changed files with 2492 additions and 205 deletions

View File

@@ -12,6 +12,7 @@ import { formatMoney, getStoreCurrency } from '@/lib/currency';
interface CustomerSettings {
auto_register_members: boolean;
multiple_addresses_enabled: boolean;
vip_min_spent: number;
vip_min_orders: number;
vip_timeframe: 'all' | '30' | '90' | '365';
@@ -22,6 +23,7 @@ interface CustomerSettings {
export default function CustomersSettings() {
const [settings, setSettings] = useState<CustomerSettings>({
auto_register_members: false,
multiple_addresses_enabled: true,
vip_min_spent: 1000,
vip_min_orders: 10,
vip_timeframe: 'all',
@@ -119,13 +121,23 @@ export default function CustomersSettings() {
title={__('General')}
description={__('General customer settings')}
>
<ToggleField
id="auto_register_members"
label={__('Auto-register customers as site members')}
description={__('Automatically create WordPress user accounts for new customers when orders are created. Customers will receive login credentials via email and can track their orders.')}
checked={settings.auto_register_members}
onCheckedChange={(checked) => setSettings({ ...settings, auto_register_members: checked })}
/>
<div className="space-y-6">
<ToggleField
id="auto_register_members"
label={__('Auto-register customers as site members')}
description={__('Automatically create WordPress user accounts for new customers when orders are created. Customers will receive login credentials via email and can track their orders.')}
checked={settings.auto_register_members}
onCheckedChange={(checked) => setSettings({ ...settings, auto_register_members: checked })}
/>
<ToggleField
id="multiple_addresses_enabled"
label={__('Enable multiple saved addresses')}
description={__('Allow customers to save multiple billing and shipping addresses in their account. Customers can select from saved addresses during checkout for faster ordering.')}
checked={settings.multiple_addresses_enabled}
onCheckedChange={(checked) => setSettings({ ...settings, multiple_addresses_enabled: checked })}
/>
</div>
</SettingsCard>
<SettingsCard