fpt-attribute.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. /**
  2. * Copyright © Magento, Inc. All rights reserved.
  3. * See COPYING.txt for license details.
  4. */
  5. /* global RegionUpdater */
  6. define([
  7. 'jquery',
  8. 'mage/template',
  9. 'jquery/ui',
  10. 'mage/adminhtml/form'
  11. ], function ($, mageTemplate) {
  12. 'use strict';
  13. $.widget('mage.fptAttribute', {
  14. /** @inheritdoc */
  15. _create: function () {
  16. var widget = this;
  17. this.rowTmpl = mageTemplate(this.element.find('[data-role="row-template"]').html());
  18. this._initOptionItem();
  19. if ($(this.options.bundlePriceType).val() === '0') {
  20. this.element.hide();
  21. }
  22. $.each(this.options.itemsData, function () {
  23. widget.addItem(this);
  24. });
  25. },
  26. /**
  27. * @private
  28. */
  29. _initOptionItem: function () {
  30. var widget = this,
  31. isOriginalRequired = $(widget.element).hasClass('required');
  32. this._on({
  33. /**
  34. * Add new tax item.
  35. *
  36. * @param {jQuery.Event} event
  37. */
  38. 'click [data-action=add-fpt-item]': function (event) {
  39. this.addItem(event);
  40. },
  41. /**
  42. * Delete tax item.
  43. *
  44. * @param {jQuery.Event} event
  45. */
  46. 'click [data-action=delete-fpt-item]': function (event) {
  47. var parent = $(event.target).closest('[data-role="fpt-item-row"]');
  48. parent.find('[data-role="delete-fpt-item"]').val(1);
  49. parent.addClass('ignore-validate').hide();
  50. },
  51. /**
  52. * Change tax item country/state.
  53. *
  54. * @param {jQuery.Event} event
  55. * @param {Object} data
  56. */
  57. 'change [data-role="select-country"]': function (event, data) {
  58. var currentElement = event.target || event.srcElement || event.currentTarget,
  59. parentElement = $(currentElement).closest('[data-role="fpt-item-row"]'),
  60. updater;
  61. data = data || {};
  62. updater = new RegionUpdater(
  63. parentElement.find('[data-role="select-country"]').attr('id'), null,
  64. parentElement.find('[data-role="select-state"]').attr('id'),
  65. widget.options.region, 'disable', true
  66. );
  67. updater.update();
  68. //set selected state value if set
  69. if (data.state) {
  70. parentElement.find('[data-role="select-state"]').val(data.state);
  71. }
  72. if (!isOriginalRequired && $(widget.element).hasClass('required')) {
  73. $(widget.element).removeClass('required');
  74. }
  75. }
  76. });
  77. $(this.options.bundlePriceType).on('change', function (event) {
  78. var attributeItems = widget.element.find('[data-role="delete-fpt-item"]');
  79. if ($(event.target).val() === '0') {
  80. widget.element.hide();
  81. attributeItems.each(function () {
  82. $(this).val(1);
  83. });
  84. } else {
  85. widget.element.show();
  86. attributeItems.each(function () {
  87. if ($(this).closest('[data-role="fpt-item-row"]').is(':visible')) {
  88. $(this).val(0);
  89. }
  90. });
  91. }
  92. });
  93. },
  94. /**
  95. * Add custom option.
  96. *
  97. * @param {jQuery.Event} event
  98. */
  99. addItem: function (event) {
  100. var data = {},
  101. currentElement = event.target || event.srcElement || event.currentTarget,
  102. tmpl;
  103. if (typeof currentElement !== 'undefined') {
  104. data['website_id'] = 0;
  105. } else {
  106. data = event;
  107. }
  108. data.index = this.element.find('[data-role="fpt-item-row"]').length;
  109. tmpl = this.rowTmpl({
  110. data: data
  111. });
  112. $(tmpl).appendTo(this.element.find('[data-role="fpt-item-container"]'));
  113. //set selected website_id value if set
  114. if (data['website_id']) {
  115. this.element.find('[data-role="select-website"][id$="_' + data.index + '_website"]')
  116. .val(data['website_id']);
  117. }
  118. //set selected country value if set
  119. if (data.country) {
  120. this.element.find('[data-role="select-country"][id$="_' + data.index + '_country"]')
  121. .val(data.country).trigger('change', data);
  122. }
  123. }
  124. });
  125. return $.mage.fptAttribute;
  126. });