declare var jQuery: any; declare var acfw_edit_coupon: any; declare var vex: any; const $: any = jQuery; let exludeCouponShown = false; /** * Add upsell events script. * * @since 1.0.0 */ export default function upsell_events() { $('#usage_limit_coupon_data').on('change', '#reset_usage_limit_period', upsell_advance_usage_limits); $( `#usage_restriction_coupon_data .acfw_exclude_coupons_field, #usage_restriction_coupon_data .acfw_allowed_customers_field, #usage_restriction_coupon_data .acfw_allowed_coupons_field, #usage_restriction_coupon_data .acfw_product_attributes_field, #usage_restriction_coupon_data .acfw_exclude_product_attributes_field, #usage_restriction_coupon_data .acfw_disallowed_emails_field, #usage_restriction_coupon_data .acfw_disallowed_customers_field` ).on('click change focus', 'input,select', upsell_exclude_coupons_restriction); $('#acfw-auto-apply-coupon').on('change', '#acfw_auto_apply_coupon_field', upsell_auto_apply); $('#acfw-virtual-coupon').on('change', '#acfw_enable_virtual_coupons', upsell_virtual_coupons); $('#acfw_url_coupon').on('change', '#acfw_defer_apply_url_coupon', upsell_defer_apply_url_coupon); $('#acfw_cart_conditions').on('change', '.condition-types', cart_condition_select_notice); $('#woocommerce-coupon-data').on('change acfw_load', '#discount_type', hideGeneralUpsellOnBogo); $('#woocommerce-coupon-data').on('change acfw_load', '#discount_type', displayCashbackUpsellModal); $('#woocommerce-coupon-data').on('focusin', '#discount_type', cacheCurrentDiscountType); $('#acfw_bogo_deals').on('change acfw_load', 'select#bogo-deals-type', toggle_bogo_auto_add_products_field); $('#acfw_bogo_deals').on('change', "input[name='acfw_bogo_auto_add_products']", upsell_bogo_auto_add_get_products); $('#acfw_bogo_deals').on('change acfw_load', 'select#bogo-deals-type', toggle_bogo_discount_order); $('#acfw_bogo_deals').on('change', 'select[name="acfw_bogo_discount_order"]', upsell_bogo_discount_order); $('#acfw_scheduler').on( 'change', ".acfw-daytime-schedules-section .acfw-section-toggle input[type='checkbox']", upsell_day_time_schedules ); $('body').on('change acfw_load', 'input#individual_use', toggleAllowedCouponsField); $('#woocommerce-coupon-data #discount_type').trigger('acfw_load'); initExcludeCouponField(); initAllowedCouponsField(); initProductAttributeFields(); } export function affiliate_discount_upsell_events() { $('#woocommerce-coupon-data').on('click change focus', '#acfw_affiliate_discount', upsell_affiliate_discount); } function initExcludeCouponField() { const $excludeField = $('p.acfw_exclude_coupons_field'); $excludeField.insertAfter('p.form-field.individual_use_field'); } /** * Usage limits upsell vex dialog. * * @since 1.1 */ function upsell_advance_usage_limits() { if (!acfw_edit_coupon.upsell) return; const { usage_limits } = acfw_edit_coupon.upsell; vex.dialog.alert({ unsafeMessage: `
${usage_limits}
`, }); // @ts-ignore $(this).val('none'); } /** * Usage restriction for exclude coupons upsell vex dialog. * * @since 1.1 */ function upsell_exclude_coupons_restriction() { // prevent duplicate dialogs showing up. if (exludeCouponShown) return; exludeCouponShown = true; if (!acfw_edit_coupon.upsell) return; const { usage_restriction } = acfw_edit_coupon.upsell; vex.dialog.alert({ unsafeMessage: `
${usage_restriction}
`, afterClose: () => (exludeCouponShown = false), }); // @ts-ignore $(this).val('').blur(); } /** * Auto apply upsell vex dialog. * * @since 1.1 */ function upsell_auto_apply() { if (!acfw_edit_coupon.upsell) return; const { auto_apply } = acfw_edit_coupon.upsell; vex.dialog.alert({ unsafeMessage: `
${auto_apply}
`, }); // @ts-ignore $(this).prop('checked', false); } /** * Virtual coupons upsell vex dialog. * * @since 4.3 */ function upsell_virtual_coupons() { if (!acfw_edit_coupon.upsell) return; const { virtual_coupons } = acfw_edit_coupon.upsell; vex.dialog.alert({ unsafeMessage: `
${virtual_coupons}
`, }); // @ts-ignore $(this).prop('checked', false); } /** * Defer apply URL coupon upsell vex dialog. * * @since 4.6.9 */ function upsell_defer_apply_url_coupon() { if (!acfw_edit_coupon.upsell) return; const { defer_apply_url_coupon } = acfw_edit_coupon.upsell; vex.dialog.alert({ unsafeMessage: `
${defer_apply_url_coupon}
`, }); // @ts-ignore $(this).prop('checked', false); } /** * Affiliate discount upsell vex dialog for AffiliateWP integration. * * @since 4.7.0 */ function upsell_affiliate_discount(e: JQuery.ClickEvent) { // Use separate affiliate_discount_upsell data, not the standard upsell data const { affiliate_discount_upsell } = acfw_edit_coupon; if (!affiliate_discount_upsell) { return; } vex.dialog.alert({ unsafeMessage: `
${affiliate_discount_upsell}
`, }); } /** * Display did you know notice below cart condition selector when premium option is selected. * * @since 1.6 */ function cart_condition_select_notice() { // @ts-ignore const $select = $(this); const $moduleBlock = $select.closest('#acfw_cart_conditions'); const $formBlock = $select.closest('.add-condition-form'); const premiumConditions: string[] = $moduleBlock.data('premium-conditions'); const $noticeHolder = $moduleBlock.find('.acfw-dyk-notice-holder'); let $noticeBlock = $formBlock.find('.acfw-dyk-notice'); if (!$noticeBlock.length) { $formBlock.append($noticeHolder.html()); $noticeBlock = $formBlock.find('.acfw-dyk-notice'); } if ($.inArray($select.val(), premiumConditions) >= 0) { $noticeBlock.show(); } else { $noticeBlock.hide(); } } /** * Hide did you know notice upsell under general tab when BOGO discount type is selected. * * @since 3.0 */ function hideGeneralUpsellOnBogo() { // @ts-ignore const type = $(this).val(); if ('acfw_bogo' === type) { $('p.acfw-dyk-notice-general').hide(); } else { $('p.acfw-dyk-notice-general').show(); } } /** * Cache current discount type. * * @since 4.5.6 */ function cacheCurrentDiscountType() { // @ts-ignore $(this).data('cachedval', $(this).val()); } /** * Display cashback upsell modal. * * @since 4.5.6 */ function displayCashbackUpsellModal() { // @ts-ignore const type = $(this).val(); if (!acfw_edit_coupon.upsell) return; const { cashback_coupon } = acfw_edit_coupon.upsell; if ('acfw_percentage_cashback' === type || 'acfw_fixed_cashback' === type) { vex.dialog.alert({ unsafeMessage: `
${cashback_coupon}
`, }); // @ts-ignore $(this).val($(this).data('cachedval') ?? 'percent'); } } /** * Toggle BOGO auto add products field. * * @since 4.1 */ function toggle_bogo_auto_add_products_field() { // @ts-ignore const $this = $(this); const $module = $this.closest('#acfw_bogo_deals'); const $field = $module.find('.bogo-auto-add-products-field'); const $input = $field.find("input[type='checkbox']"); const applyType = $this.val(); if (applyType === 'specific-products') { $input.prop('disabled', false); $field.addClass('show'); } else { $input.prop('disabled', false); $field.removeClass('show'); } } /** * Upsell BOGO auto add get products feature. * * @since 4.1 */ function upsell_bogo_auto_add_get_products() { // @ts-ignore const $this = $(this); $this.prop('checked', false); if (!acfw_edit_coupon.upsell) return; const { bogo_auto_add_get_products } = acfw_edit_coupon.upsell; vex.dialog.alert({ unsafeMessage: `
${bogo_auto_add_get_products}
`, }); // @ts-ignore $(this).val('none'); } /** * Toggle BOGO discount order feature. * * @since 4.6.9 */ function toggle_bogo_discount_order() { // @ts-ignore const $this = $(this); const $module = $this.closest('#acfw_bogo_deals'); const $field = $module.find('.bogo-discount-order-field'); const $input = $field.find('select'); const applyType = $this.val(); if (applyType === 'specific-products') { $input.prop('disabled', false); $field.addClass('show'); } else { $input.prop('disabled', false); $field.removeClass('show'); } } /** * Upsell BOGO auto add get products feature. * * @since 4.6.9 */ function upsell_bogo_discount_order() { // @ts-ignore const $this = $(this); $this.val('none'); if (!acfw_edit_coupon.upsell) return; const { bogo_discount_order } = acfw_edit_coupon.upsell; vex.dialog.alert({ unsafeMessage: `
${bogo_discount_order}
`, }); // @ts-ignore $(this).val('none'); } /** * Display upsell for day time schedules when section checkbox is checked. * * @since 4.5 */ function upsell_day_time_schedules() { // @ts-ignore const $checkbox = $(this); if (!acfw_edit_coupon.upsell) return; const { day_time_schedules } = acfw_edit_coupon.upsell; vex.dialog.alert({ unsafeMessage: `
${day_time_schedules}
`, }); $checkbox.prop('checked', false).trigger('acfw_load'); } /** * Display upsell for allowed coupons. * * @since 4.6.1 */ function initAllowedCouponsField() { const $allowedCouponsField = $('p.acfw_allowed_coupons_field'); $allowedCouponsField.insertAfter('p.form-field.individual_use_field'); $allowedCouponsField.addClass('hidden'); } /** * Handling toggle for allowed coupons field. * * @since 4.6.1 */ function toggleAllowedCouponsField() { // @ts-ignore const $individualUse = $(this); const $wrapper = $('.acfw_allowed_coupons_field'); const $field = $wrapper.find('select'); if ($individualUse.is(':checked')) { $field.prop('disabled', false); $wrapper.show(); } else { $field.prop('disabled', true); $wrapper.hide(); } } /** * Display upsell for product attributes. * * @since 4.6.4 */ function initProductAttributeFields() { const $productAttributesField = jQuery('p.acfw_product_attributes_field'); const $excludeProductAttributesField = jQuery('p.acfw_exclude_product_attributes_field'); const $parentOfExcludeCategoriesLabel = jQuery('label[for="exclude_product_categories"]').closest( 'div.options_group' ); const $wrapper = jQuery('
'); $wrapper.append($productAttributesField); $wrapper.append($excludeProductAttributesField); $wrapper.insertAfter($parentOfExcludeCategoriesLabel); }