123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- /**
- * @api
- */
- define([
- 'uiElement',
- 'underscore',
- 'mage/url'
- ], function (uiElement, _, url) {
- 'use strict';
- var provider = uiElement();
- return function (itemId) {
- var model = {
- id: 'message-' + itemId,
- itemId: itemId,
- observables: {},
- additionalOptions: [],
- submitParams: [
- 'recipient',
- 'sender',
- 'message'
- ],
- /**
- * Initialize.
- */
- initialize: function () {
- var message = false;
- this.getObservable('alreadyAdded')(false);
- if (this.itemId == 'orderLevel') { //eslint-disable-line eqeqeq
- message = window.giftOptionsConfig.giftMessage.hasOwnProperty(this.itemId) ?
- window.giftOptionsConfig.giftMessage[this.itemId] :
- null;
- } else {
- message =
- window.giftOptionsConfig.giftMessage.hasOwnProperty('itemLevel') &&
- window.giftOptionsConfig.giftMessage.itemLevel.hasOwnProperty(this.itemId) ?
- window.giftOptionsConfig.giftMessage.itemLevel[this.itemId].message :
- null;
- }
- if (_.isObject(message)) {
- this.getObservable('recipient')(message.recipient);
- this.getObservable('sender')(message.sender);
- this.getObservable('message')(message.message);
- this.getObservable('alreadyAdded')(true);
- }
- },
- /**
- * @param {String} key
- * @return {*}
- */
- getObservable: function (key) {
- this.initObservable(this.id, key);
- return provider[this.getUniqueKey(this.id, key)];
- },
- /**
- * @param {String} node
- * @param {String} key
- */
- initObservable: function (node, key) {
- if (node && !this.observables.hasOwnProperty(node)) {
- this.observables[node] = [];
- }
- if (key && this.observables[node].indexOf(key) === -1) {
- this.observables[node].push(key);
- provider.observe(this.getUniqueKey(node, key));
- }
- },
- /**
- * @param {String} node
- * @param {String} key
- * @return {String}
- */
- getUniqueKey: function (node, key) {
- return node + '-' + key;
- },
- /**
- * @param {String} key
- * @return {null}
- */
- getConfigValue: function (key) {
- return window.giftOptionsConfig.hasOwnProperty(key) ?
- window.giftOptionsConfig[key]
- : null;
- },
- /**
- * Reset.
- */
- reset: function () {
- this.getObservable('isClear')(true);
- },
- /**
- * @return {Array}
- */
- getAfterSubmitCallbacks: function () {
- var callbacks = [];
- callbacks.push(this.afterSubmit);
- _.each(this.additionalOptions, function (option) {
- if (_.isFunction(option.afterSubmit)) {
- callbacks.push(option.afterSubmit);
- }
- });
- return callbacks;
- },
- /**
- * After submit.
- */
- afterSubmit: function () {
- window.location.href = url.build('checkout/cart/updatePost') +
- '?form_key=' + window.checkoutConfig.formKey +
- '&cart[]';
- },
- /**
- * @param {Boolean} remove
- * @return {Object}
- */
- getSubmitParams: function (remove) {
- var params = {},
- self = this;
- _.each(this.submitParams, function (key) {
- var observable = provider[self.getUniqueKey(self.id, key)];
- if (_.isFunction(observable)) {
- params[key] = remove ? null : observable();
- }
- });
- if (this.additionalOptions.length) {
- params['extension_attributes'] = {};
- }
- _.each(this.additionalOptions, function (option) {
- if (_.isFunction(option.getSubmitParams)) {
- params['extension_attributes'] = _.extend(
- params['extension_attributes'],
- option.getSubmitParams(remove)
- );
- }
- });
- return params;
- },
- /**
- * Check if gift message can be displayed
- *
- * @returns {Boolean}
- */
- isGiftMessageAvailable: function () {
- var isGloballyAvailable,
- giftMessageConfig,
- itemConfig;
- // itemId represent gift message level: 'orderLevel' constant or cart item ID
- if (this.itemId === 'orderLevel') {
- return this.getConfigValue('isOrderLevelGiftOptionsEnabled');
- }
- // gift message product configuration must override system configuration
- isGloballyAvailable = this.getConfigValue('isItemLevelGiftOptionsEnabled');
- giftMessageConfig = window.giftOptionsConfig.giftMessage;
- itemConfig = giftMessageConfig.hasOwnProperty('itemLevel') &&
- giftMessageConfig.itemLevel.hasOwnProperty(this.itemId) ?
- giftMessageConfig.itemLevel[this.itemId] :
- {};
- return itemConfig.hasOwnProperty('is_available') ? itemConfig['is_available'] : isGloballyAvailable;
- }
- };
- model.initialize();
- return model;
- };
- });
|