123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- /*browser:true*/
- /*global define*/
- define([
- 'jquery',
- 'uiComponent',
- 'Magento_Ui/js/modal/alert'
- ], function ($, Class, alert) {
- 'use strict';
- return Class.extend({
- defaults: {
- $selector: null,
- selector: 'edit_form',
- $container: null
- },
- /**
- * Set list of observable attributes
- * @returns {exports.initObservable}
- */
- initObservable: function () {
- var self = this;
- self.$selector = $('#' + self.selector);
- self.$container = $('#' + self.container);
- self.$selector.on(
- 'setVaultNotActive.' + self.getCode(),
- function () {
- self.$selector.off('submitOrder.' + self.getCode());
- }
- );
- self._super();
- self.initEventHandlers();
- return self;
- },
- /**
- * Get payment code
- * @returns {String}
- */
- getCode: function () {
- return this.code;
- },
- /**
- * Init event handlers
- */
- initEventHandlers: function () {
- $(this.$container).find('[name="payment[token_switcher]"]')
- .on('click', this.selectPaymentMethod.bind(this));
- },
- /**
- * Select current payment token
- */
- selectPaymentMethod: function () {
- this.disableEventListeners();
- this.enableEventListeners();
- },
- /**
- * Enable form event listeners
- */
- enableEventListeners: function () {
- this.$selector.on('submitOrder.' + this.getCode(), this.submitOrder.bind(this));
- },
- /**
- * Disable form event listeners
- */
- disableEventListeners: function () {
- this.$selector.off('submitOrder');
- },
- /**
- * Pre submit for order
- * @returns {Boolean}
- */
- submitOrder: function () {
- this.$selector.validate().form();
- this.$selector.trigger('afterValidate.beforeSubmit');
- $('body').trigger('processStop');
- // validate parent form
- if (this.$selector.validate().errorList.length) {
- return false;
- }
- this.getPaymentMethodNonce();
- },
- /**
- * Place order
- */
- placeOrder: function () {
- this.$selector.trigger('realOrder');
- },
- /**
- * Send request to get payment method nonce
- */
- getPaymentMethodNonce: function () {
- var self = this;
- $('body').trigger('processStart');
- $.getJSON(self.nonceUrl, {
- 'public_hash': self.publicHash
- }).done(function (response) {
- self.setPaymentDetails(response.paymentMethodNonce);
- self.placeOrder();
- }).fail(function (response) {
- var failed = JSON.parse(response.responseText);
- self.error(failed.message);
- }).always(function () {
- $('body').trigger('processStop');
- });
- },
- /**
- * Store payment details
- * @param {String} nonce
- */
- setPaymentDetails: function (nonce) {
- this.createPublicHashSelector();
- this.$selector.find('[name="payment[public_hash]"]').val(this.publicHash);
- this.$container.find('#' + this.getNonceSelectorName()).val(nonce);
- },
- /**
- * Creates public hash selector
- */
- createPublicHashSelector: function () {
- var $input;
- if (this.$container.find('#' + this.getNonceSelectorName()).size() === 0) {
- $input = $('<input>').attr(
- {
- type: 'hidden',
- id: this.getNonceSelectorName(),
- name: 'payment[payment_method_nonce]'
- }
- );
- $input.appendTo(this.$container);
- $input.prop('disabled', false);
- }
- },
- /**
- * Show alert message
- * @param {String} message
- */
- error: function (message) {
- alert({
- content: message
- });
- },
- /**
- * Get selector name for nonce input
- * @returns {String}
- */
- getNonceSelectorName: function () {
- return 'nonce_' + this.getCode();
- }
- });
- });
|