wc-product-export.js 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /*global ajaxurl, wc_product_export_params */
  2. ;(function ( $, window ) {
  3. /**
  4. * productExportForm handles the export process.
  5. */
  6. var productExportForm = function( $form ) {
  7. this.$form = $form;
  8. this.xhr = false;
  9. // Initial state.
  10. this.$form.find('.woocommerce-exporter-progress').val( 0 );
  11. // Methods.
  12. this.processStep = this.processStep.bind( this );
  13. // Events.
  14. $form.on( 'submit', { productExportForm: this }, this.onSubmit );
  15. };
  16. /**
  17. * Handle export form submission.
  18. */
  19. productExportForm.prototype.onSubmit = function( event ) {
  20. event.preventDefault();
  21. var currentDate = new Date(),
  22. day = currentDate.getDate(),
  23. month = currentDate.getMonth() + 1,
  24. year = currentDate.getFullYear(),
  25. timestamp = currentDate.getTime(),
  26. filename = 'wc-product-export-' + day + '-' + month + '-' + year + '-' + timestamp + '.csv';
  27. event.data.productExportForm.$form.addClass( 'woocommerce-exporter__exporting' );
  28. event.data.productExportForm.$form.find('.woocommerce-exporter-progress').val( 0 );
  29. event.data.productExportForm.$form.find('.woocommerce-exporter-button').prop( 'disabled', true );
  30. event.data.productExportForm.processStep( 1, $( this ).serialize(), '', filename );
  31. };
  32. /**
  33. * Process the current export step.
  34. */
  35. productExportForm.prototype.processStep = function( step, data, columns, filename ) {
  36. var $this = this,
  37. selected_columns = $( '.woocommerce-exporter-columns' ).val(),
  38. export_meta = $( '#woocommerce-exporter-meta:checked' ).length ? 1: 0,
  39. export_types = $( '.woocommerce-exporter-types' ).val();
  40. $.ajax( {
  41. type: 'POST',
  42. url: ajaxurl,
  43. data: {
  44. form : data,
  45. action : 'woocommerce_do_ajax_product_export',
  46. step : step,
  47. columns : columns,
  48. selected_columns : selected_columns,
  49. export_meta : export_meta,
  50. export_types : export_types,
  51. filename : filename,
  52. security : wc_product_export_params.export_nonce
  53. },
  54. dataType: 'json',
  55. success: function( response ) {
  56. if ( response.success ) {
  57. if ( 'done' === response.data.step ) {
  58. $this.$form.find('.woocommerce-exporter-progress').val( response.data.percentage );
  59. window.location = response.data.url;
  60. setTimeout( function() {
  61. $this.$form.removeClass( 'woocommerce-exporter__exporting' );
  62. $this.$form.find('.woocommerce-exporter-button').prop( 'disabled', false );
  63. }, 2000 );
  64. } else {
  65. $this.$form.find('.woocommerce-exporter-progress').val( response.data.percentage );
  66. $this.processStep( parseInt( response.data.step, 10 ), data, response.data.columns, filename );
  67. }
  68. }
  69. }
  70. } ).fail( function( response ) {
  71. window.console.log( response );
  72. } );
  73. };
  74. /**
  75. * Function to call productExportForm on jquery selector.
  76. */
  77. $.fn.wc_product_export_form = function() {
  78. new productExportForm( this );
  79. return this;
  80. };
  81. $( '.woocommerce-exporter' ).wc_product_export_form();
  82. })( jQuery, window );