File: /home/lgooir/public_html/wp-content/themes/woodmart/inc/admin/assets/js/conditions.js
/* global woodmartConfig, woodmartAdminModule */
(function($) {
// Condition query select2.
function conditionQuerySelect2($field) {
$field.select2({
ajax : {
url : woodmartConfig.ajaxUrl,
data : function(params) {
return {
action : 'wd_conditions_query',
security : woodmartConfig.get_new_template_nonce,
query_type: $field.attr('data-query-type'),
search : params.term
};
},
method : 'POST',
dataType: 'json'
},
theme : 'xts',
dropdownAutoWidth: false,
width : 'resolve'
});
}
function conditionQueryFieldInit( conditionType, $querySelect ) {
if ($querySelect.data('select2')) {
$querySelect.val('');
$querySelect.select2('destroy');
}
var $conditionQueryFieldTitle = $querySelect.parents('.xts-controls-wrapper').find('.xts-condition-query').first();
var $dependencFields = $querySelect.parents('.xts-table-controls').find('[data-dependency]');
$dependencFields.each(function( key, field ) {
var $field = $(field);
var $select = $field.find('select');
var dependency = $field.data('dependency').split(';').filter(function( val ) {
return val.length > 0;
});
$showField = false;
for (var i = 0; i < dependency.length; i++) {
var dep = dependency[i];
var parts = dep.split(':');
var key = parts[0];
var compare = parts[1];
var value = parts[2].split(',').filter(function( val ) {
return val.length > 0;
});
if ( 'type' === key && 'all' !== conditionType ) {
$showField = 'equals' === compare ? value.includes( conditionType ) : ! value.includes( conditionType );
}
// This field will appear if at least one dependency returns a value of true.
if ( $showField ) {
break;
}
}
if ( $showField ) {
$field.removeClass('xts-hidden');
if ( $field.hasClass('xts-condition-query') ) {
$select.attr('data-query-type', conditionType);
conditionQuerySelect2($select);
}
} else {
$field.addClass('xts-hidden');
if ( $select.data('select2') ) {
$select.removeAttr('data-query-type', conditionType);
$select.val('');
$select.select2('destroy');
}
}
});
// Show or hide Condition query field title.
var showTitle = false;
$('select.xts-condition-type').each((key, type) => {
if ( 'all' !== $(type).val() ) {
showTitle = true;
}
});
if ( showTitle ) {
$conditionQueryFieldTitle.removeClass('xts-hidden');
} else {
$conditionQueryFieldTitle.addClass('xts-hidden');
}
}
function validate() {
let isValid = true;
let $conditions = $('.xts-conditions-control');
let $conditionRows = $conditions.find('.xts-controls-wrapper > .xts-table-controls:not(.xts-table-heading)');
if ( 0 === $conditionRows.length ) {
woodmartAdminModule.woodmartAdmin.addNotice($conditions, 'warning', woodmartConfig.no_discount_condition);
isValid = false;
}
return isValid;
}
$('#post:has(.xts-options)').on('submit', function(e){
if ( ! validate() ) {
e.preventDefault();
}
});
$(document)
.ready( function() {
$('.xts-condition-query:not(.xts-hidden) select.xts-condition-query').each((key, field) => {
var $querySelect = $( field );
var conditionType = $querySelect.parents('.xts-table-controls').find('select.xts-condition-type').val();
conditionQueryFieldInit( conditionType, $querySelect );
});
})
.on('change', 'select.xts-condition-type', function() {
var $this = $(this);
var conditionType = $this.val();
var $querySelect = $this.parents('.xts-table-controls').find('select.xts-condition-query');
conditionQueryFieldInit( conditionType, $querySelect );
});
$(document).on('xts_select_with_table_control_row_removed', function( e, $control ) {
if ( ! $control.hasClass('xts-conditions-control') ) {
return;
}
var $conditionQueryFieldTitle = $control.find('.xts-controls-wrapper .xts-condition-query').first();
var showTitle = false;
$control.find('.xts-controls-wrapper select.xts-condition-type').each((key, type) => {
if ( 'all' !== $(type).val() ) {
showTitle = true;
}
});
if ( ! showTitle ) {
$conditionQueryFieldTitle.addClass('xts-hidden');
}
});
})(jQuery)