feat: migrate shipping to form-level and integrate flags.json as single source of truth
Shipping Migration: - Move shipping configuration from product-level to form-level - Add form shipping tab in form settings (no_shipping, flat_rate, free_shipping) - Update FlatRate to register at form level instead of product level - Update checkout logic to read from form settings - Support percentage-based flat rate calculation - Simplify shipping method IDs (flat_rate, free_shipping) Currency Flags Integration: - Add formipay_get_all_currency_flags() to read from admin/assets/json/flags.json - Remove hardcoded CURRENCY_FLAGS emoji map from VariationField.js - Create CurrencyFlag component to render base64 flag images - Localize currency_flags to window.formipayProductDetails - Update shipping info display in admin order details Benefits: - Form-level shipping prevents multiplying shipping costs per product - Single source of truth for currency flags (flags.json) - Better support for future cart system - Consistent with e-commerce standards
This commit is contained in:
@@ -653,6 +653,7 @@ class Render {
|
||||
wp_enqueue_script( 'choices', FORMIPAY_URL . 'vendor/ChoicesJS/choices.min.js', [], FORMIPAY_VERSION, true );
|
||||
wp_enqueue_script( 'formipay-popup', FORMIPAY_URL . 'public/assets/js/popup-action.js', ['jquery', 'choices'], FORMIPAY_VERSION, true);
|
||||
wp_enqueue_script( 'formipay-form', FORMIPAY_URL . 'public/assets/js/form-action.js', ['jquery', 'choices'], FORMIPAY_VERSION, true);
|
||||
wp_enqueue_script( 'formipay-checkout-shipping', FORMIPAY_URL . 'public/assets/js/checkout-shipping.js', ['jquery', 'formipay-form'], FORMIPAY_VERSION, true);
|
||||
// Localize data for all forms
|
||||
$form_data = [
|
||||
'ajax_url' => admin_url('admin-ajax.php'),
|
||||
@@ -661,6 +662,16 @@ class Render {
|
||||
'forms' => $this->get_form_data()
|
||||
];
|
||||
wp_localize_script('formipay-form', 'formipay_form', $form_data);
|
||||
|
||||
// Localize shipping labels for checkout
|
||||
$shipping_data = [
|
||||
'labels' => [
|
||||
'country' => __('Shipping Country', 'formipay'),
|
||||
'selectCountry' => __('Select your country', 'formipay'),
|
||||
'shippingMethod' => __('Shipping Method', 'formipay'),
|
||||
]
|
||||
];
|
||||
wp_localize_script('formipay-checkout-shipping', 'formipay_shipping', $shipping_data);
|
||||
|
||||
}
|
||||
|
||||
@@ -766,6 +777,11 @@ class Render {
|
||||
$allowed_currency_pack = $this->resolve_allowed_currencies($post_id);
|
||||
$currency_code = $allowed_currency_pack['default_code'];
|
||||
$currency_cfg = $this->resolve_currency_config($currency_code);
|
||||
|
||||
// Get form shipping settings
|
||||
$form_settings = get_post_meta($post_id, 'formipay_form_settings', true);
|
||||
$shipping_enabled = $form_settings['shipping_enabled'] ?? 'no_shipping';
|
||||
|
||||
$form_data[$post_id] = [
|
||||
'form_id' => $post_id,
|
||||
'currency' => formipay_post_currency($post_id),
|
||||
@@ -789,13 +805,14 @@ class Render {
|
||||
'button_text' => formipay_get_post_meta($post_id, 'button_text'),
|
||||
'button_processing_text' => formipay_get_post_meta($post_id, 'button_processing_text'),
|
||||
'isPopup' => formipay_isPopup($post_id),
|
||||
'trigger_selector' => formipay_get_post_meta($post_id, 'popup_click_selector') ?
|
||||
formipay_get_post_meta($post_id, 'popup_trigger_selector') :
|
||||
'trigger_selector' => formipay_get_post_meta($post_id, 'popup_click_selector') ?
|
||||
formipay_get_post_meta($post_id, 'popup_trigger_selector') :
|
||||
'.formipay-open-popup-button',
|
||||
'modal_selector' => '#formipay-popup-' . $post_id,
|
||||
'static_products' => array_filter(array_map('absint', explode(',', (string) formipay_get_post_meta($post_id, 'static_products')))),
|
||||
'static_items' => json_decode((string) formipay_get_post_meta($post_id, 'static_items'), true) ?: [],
|
||||
'currency_code' => (function($c){ $p = explode(':::', (string)$c); return $p[0] ?? 'IDR'; })(formipay_post_currency($post_id)),
|
||||
'shipping_enabled' => $shipping_enabled, // Form-level shipping setting
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user