woocommerce/assets/js/admin/wc-product-import.js

81 lines
2.3 KiB
JavaScript
Raw Normal View History

/*global ajaxurl, wc_product_import_params */
;(function ( $, window ) {
/**
2017-05-17 22:00:16 +00:00
* productImportForm handles the import process.
*/
var productImportForm = function( $form ) {
2017-05-23 18:46:46 +00:00
this.$form = $form;
this.xhr = false;
this.mapping = wc_product_import_params.mapping;
this.position = 0;
this.file = wc_product_import_params.file;
2017-05-23 14:05:32 +00:00
this.update_existing = wc_product_import_params.update_existing;
2017-05-23 18:46:46 +00:00
this.security = wc_product_import_params.import_nonce;
// Number of import successes/failures.
this.imported = 0;
2017-05-18 16:49:58 +00:00
this.failed = 0;
2017-05-23 14:05:32 +00:00
this.updated = 0;
this.skipped = 0;
// Initial state.
this.$form.find('.woocommerce-importer-progress').val( 0 );
this.run_import = this.run_import.bind( this );
2017-05-23 14:05:32 +00:00
// Start importing.
this.run_import();
};
/**
* Run the import in batches until finished.
*/
productImportForm.prototype.run_import = function() {
var $this = this;
$.ajax( {
type: 'POST',
url: ajaxurl,
data: {
2017-05-23 18:46:46 +00:00
action : 'woocommerce_do_ajax_product_import',
position : $this.position,
mapping : $this.mapping,
file : $this.file,
2017-05-23 14:05:32 +00:00
update_existing : $this.update_existing,
2017-05-23 18:46:46 +00:00
security : $this.security
},
dataType: 'json',
success: function( response ) {
if ( response.success ) {
2017-05-18 16:49:58 +00:00
$this.position = response.data.position;
$this.imported += response.data.imported;
2017-05-18 16:49:58 +00:00
$this.failed += response.data.failed;
2017-05-23 14:05:32 +00:00
$this.updated += response.data.updated;
$this.skipped += response.data.skipped;
$this.$form.find('.woocommerce-importer-progress').val( response.data.percentage );
if ( 'done' === response.data.position ) {
2017-05-23 14:05:32 +00:00
window.location = response.data.url + '&products-imported=' + parseInt( $this.imported, 10 ) + '&products-failed=' + parseInt( $this.failed, 10 ) + '&products-updated=' + parseInt( $this.updated, 10 ) + '&products-skipped=' + parseInt( $this.skipped, 10 );
} else {
$this.run_import();
}
}
}
} ).fail( function( response ) {
window.console.log( response );
} );
};
/**
* Function to call productImportForm on jQuery selector.
*/
$.fn.wc_product_importer = function() {
new productImportForm( this );
return this;
};
$( '.woocommerce-importer' ).wc_product_importer();
})( jQuery, window );