validate-store.js 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. /**
  2. * Copyright © Magento, Inc. All rights reserved.
  3. * See COPYING.txt for license details.
  4. */
  5. define([
  6. 'jquery',
  7. 'jquery/ui',
  8. 'mage/dataPost',
  9. 'mage/backend/validation',
  10. 'Magento_Ui/js/modal/confirm'
  11. ], function ($, jqueryUi, dataPost, validation, modalConfirm) {
  12. 'use strict';
  13. $.widget('mage.storeValidation', {
  14. /**
  15. * Validation creation
  16. * @protected
  17. */
  18. _create: function () {
  19. var form = this.element[0],
  20. validator = $.data(form, 'validator');
  21. if (validator && validator.settings) {
  22. validator.settings.submitHandler = this._saveHandler;
  23. validator.settings.confirmCallback = this._needConfirm;
  24. $.extend(validator.settings, this.options);
  25. $.data(form, 'validator', validator);
  26. }
  27. },
  28. /**
  29. * Check is it need to show confirmation popup
  30. *
  31. * @returns {Boolean}
  32. */
  33. _needConfirm: function () {
  34. return true;
  35. },
  36. /**
  37. * Save form with confirmation if needed
  38. *
  39. * @param {Object} form
  40. * @private
  41. */
  42. _saveHandler: function (form) {
  43. var formData = {},
  44. requestData = {},
  45. options = $.data(form, 'validator').settings;
  46. if ($(form).validation('isValid')) {
  47. $.each($(form).serializeArray(), function () {
  48. formData[this.name] = this.value || '';
  49. });
  50. requestData = {
  51. action: $(form).attr('action'),
  52. data: formData
  53. };
  54. if (options.confirmCallback.call(this)) {
  55. modalConfirm({
  56. title: $.mage.__('Warning message'),
  57. content: $.mage.__('This operation can take a long time'),
  58. actions: {
  59. /**
  60. * 'Confirm' action handler.
  61. */
  62. confirm: function () {
  63. $('body').trigger('processStart');
  64. dataPost().postData(requestData);
  65. }
  66. }
  67. });
  68. } else {
  69. dataPost().postData(requestData);
  70. }
  71. }
  72. }
  73. });
  74. return $.mage.storeValidation;
  75. });