113 lines
3.6 KiB
JavaScript
113 lines
3.6 KiB
JavaScript
/*global ajaxurl, wc_product_export_params */
|
|
;(function ( $, window ) {
|
|
/**
|
|
* productExportForm handles the export process.
|
|
*/
|
|
var productExportForm = function( $form ) {
|
|
this.$form = $form;
|
|
this.xhr = false;
|
|
|
|
// Initial state.
|
|
this.$form.find('.woocommerce-exporter-progress').val( 0 );
|
|
|
|
// Methods.
|
|
this.processStep = this.processStep.bind( this );
|
|
|
|
// Events.
|
|
$form.on( 'submit', { productExportForm: this }, this.onSubmit );
|
|
$form.find( '.woocommerce-exporter-types' ).on( 'change', { productExportForm: this }, this.exportTypeFields );
|
|
};
|
|
|
|
/**
|
|
* Handle export form submission.
|
|
*/
|
|
productExportForm.prototype.onSubmit = function( event ) {
|
|
event.preventDefault();
|
|
|
|
var currentDate = new Date(),
|
|
day = currentDate.getDate(),
|
|
month = currentDate.getMonth() + 1,
|
|
year = currentDate.getFullYear(),
|
|
timestamp = currentDate.getTime(),
|
|
filename = 'wc-product-export-' + day + '-' + month + '-' + year + '-' + timestamp + '.csv';
|
|
|
|
event.data.productExportForm.$form.addClass( 'woocommerce-exporter__exporting' );
|
|
event.data.productExportForm.$form.find('.woocommerce-exporter-progress').val( 0 );
|
|
event.data.productExportForm.$form.find('.woocommerce-exporter-button').prop( 'disabled', true );
|
|
event.data.productExportForm.processStep( 1, $( this ).serialize(), '', filename );
|
|
};
|
|
|
|
/**
|
|
* Process the current export step.
|
|
*/
|
|
productExportForm.prototype.processStep = function( step, data, columns, filename ) {
|
|
var $this = this,
|
|
selected_columns = $( '.woocommerce-exporter-columns' ).val(),
|
|
export_meta = $( '#woocommerce-exporter-meta:checked' ).length ? 1: 0,
|
|
export_types = $( '.woocommerce-exporter-types' ).val(),
|
|
export_category = $( '.woocommerce-exporter-category' ).val();
|
|
|
|
$.ajax( {
|
|
type: 'POST',
|
|
url: ajaxurl,
|
|
data: {
|
|
form : data,
|
|
action : 'woocommerce_do_ajax_product_export',
|
|
step : step,
|
|
columns : columns,
|
|
selected_columns : selected_columns,
|
|
export_meta : export_meta,
|
|
export_types : export_types,
|
|
export_category : export_category,
|
|
filename : filename,
|
|
security : wc_product_export_params.export_nonce
|
|
},
|
|
dataType: 'json',
|
|
success: function( response ) {
|
|
if ( response.success ) {
|
|
if ( 'done' === response.data.step ) {
|
|
$this.$form.find('.woocommerce-exporter-progress').val( response.data.percentage );
|
|
window.location = response.data.url;
|
|
setTimeout( function() {
|
|
$this.$form.removeClass( 'woocommerce-exporter__exporting' );
|
|
$this.$form.find('.woocommerce-exporter-button').prop( 'disabled', false );
|
|
}, 2000 );
|
|
} else {
|
|
$this.$form.find('.woocommerce-exporter-progress').val( response.data.percentage );
|
|
$this.processStep( parseInt( response.data.step, 10 ), data, response.data.columns, filename );
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
} ).fail( function( response ) {
|
|
window.console.log( response );
|
|
} );
|
|
};
|
|
|
|
/**
|
|
* Handle fields per export type.
|
|
*/
|
|
productExportForm.prototype.exportTypeFields = function() {
|
|
var exportCategory = $( '.woocommerce-exporter-category' );
|
|
|
|
if ( -1 !== $.inArray( 'variation', $( this ).val() ) ) {
|
|
exportCategory.closest( 'tr' ).hide();
|
|
exportCategory.val( '' ).trigger( 'change' ); // Reset WooSelect selected value.
|
|
} else {
|
|
exportCategory.closest( 'tr' ).show();
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Function to call productExportForm on jquery selector.
|
|
*/
|
|
$.fn.wc_product_export_form = function() {
|
|
new productExportForm( this );
|
|
return this;
|
|
};
|
|
|
|
$( '.woocommerce-exporter' ).wc_product_export_form();
|
|
|
|
})( jQuery, window );
|