{"version":3,"sources":["widgets/module/change-subscription/units/main.es6.js"],"names":["create","local","bus","units","userTags","container","list","find","template","currentSubscription","subscriptionSku","selectUnit","el","selected","sku","dataset","plan","getPlanName","length","hasClass","some","unit","includes","emit","toggleClass","removeProp","removeAttr","end","amount","prop","attr","getPlanAmount","split","pop","filter","shift","existSkuInTags","tags","tag","getSkuFromTags","map","decorateUnits","quantity","render","innerHTML","dom","append","packages","on","currency","removeClass","res","skuPartials","domain","project","store","threepack","discount","priceType","forEach","i","vatConverter","convert","taxData","Math","round","price","currentPlan","start","silentMode","saveClass","async","parallel","mall","subscriptions","get","next","me","id","domains","api","intercept","stop","restoreClass","empty","templates","tpl","sync"],"mappings":"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","file":"widgets/module/change-subscription/units/main.js","sourceRoot":"/source/","sourcesContent":["/*\r\n * Публикует события:\r\n * package.selected to purchase\r\n * packages.received to change-subscription\r\n * command.purchase.promo-header.show\r\n *\r\n * Слушает события:\r\n * event.application.purchase.start\r\n * event.application.purchase.stop\r\n * event.purchase.credits.deficit\r\n */\r\n\r\nimport bus from 'bus'\r\nimport async from 'async'\r\nimport domains from 'modules/domains'\r\nimport templates from 'modules/templates'\r\nimport dom from 'modules/env/dom'\r\nimport curry from 'modules/utils/curry'\r\nimport config from 'config'\r\nimport mall from 'repositories/credits/mall'\r\nimport me from 'modules/me';\r\nimport tags from 'repositories/users/tags';\r\nimport vatConverter from 'modules/purchase/vat-converter';\r\n\r\nlet local = bus.create('changeSubscription'),\r\n units,\r\n userTags = [];\r\n\r\nexport function create(container) {\r\n var list = container.find('.packages'),\r\n template,\r\n currentSubscription,\r\n subscriptionSku;\r\n\r\n function selectUnit(el) {\r\n let selected = '';\r\n const sku = el[0].dataset.sku;\r\n const plan = getPlanName(sku);\r\n\r\n if (!el.length) {\r\n el = list.find('[data-sku]:last');\r\n if (!el.length){\r\n return;\r\n }\r\n } else if(el.hasClass('active')){\r\n return;\r\n }\r\n\r\n units.some(function (unit) {\r\n const sku = unit.sku;\r\n if (sku.includes(plan)) {\r\n selected = unit;\r\n return true;\r\n }\r\n });\r\n\r\n local.emit('package.selected', selected);\r\n\r\n list\r\n .find('.package.active')\r\n .toggleClass('active', false)\r\n .find('input[type=\"radio\"]')\r\n .removeProp('checked')\r\n .removeAttr('checked')\r\n .end()\r\n .end()\r\n .find(`.creditpack${selected.amount}`)\r\n .toggleClass('active', true)\r\n .find('input[type=\"radio\"]')\r\n .prop('attr', true)\r\n .attr('checked', 'checked');\r\n }\r\n\r\n /**\r\n * Получаем количество кредитов из sku пакета\r\n */\r\n const getPlanAmount = (plan) => plan.split('membershippack').pop()\r\n\r\n /**\r\n * Получаем название пакета, содержащееся в sku\r\n */\r\n const getPlanName = (sku) => sku.split('.').filter(el => el.includes('membershippack')).shift()\r\n\r\n /**\r\n * Проверим, есть ли в тэгах данные sku\r\n */\r\n const existSkuInTags = (tags) => !!tags.filter(tag => tag.includes('sku:')).length\r\n\r\n\r\n /**\r\n * Получаем название пакета, содержащееся в sku\r\n */\r\n const getSkuFromTags = (tags) => {\r\n return tags.filter(tag => tag.includes('sku:')).map(tag => tag.split('sku:').pop())[0]\r\n }\r\n\r\n /**\r\n * Визуальное отображение пакетов для смены подписки\r\n */\r\n function decorateUnits() {\r\n const quantity = getPlanAmount(currentSubscription.plan);\r\n selectUnit(list.find(`.creditpack${quantity} [type=\"radio\"]`));\r\n list.toggleClass('loading', false);\r\n }\r\n\r\n /**\r\n * Отрисовка пакетов для смены подписки.\r\n */\r\n const render = () => {\r\n list[0].innerHTML = '';\r\n \r\n dom.append(list, template.render({ packages: units }), () => {\r\n container\r\n .find('.package')\r\n .on('click', function () {\r\n selectUnit(list.find(this).find('[type=\"radio\"]'));\r\n })\r\n .end()\r\n .toggleClass('currency-euro', units[0].currency === 'eur');\r\n\r\n decorateUnits();\r\n container.removeClass('loading');\r\n });\r\n }\r\n\r\n const create = (res) => {\r\n units = res.packages;\r\n userTags = res.tags || [];\r\n\r\n const sku = existSkuInTags(userTags)? getSkuFromTags(userTags) : subscriptionSku;\r\n const skuPartials = sku.split('.');\r\n\r\n if (skuPartials.length) {\r\n if (skuPartials.length === 6) {\r\n const [domain, currency, project, store, plan, threepack, discount,] = skuPartials;\r\n\r\n currentSubscription = { domain, currency, project, store, plan, threepack, discount };\r\n }\r\n\r\n if (skuPartials.length === 7) {\r\n const [domain, currency, project, store, priceType, plan, threepack, discount,] = skuPartials;\r\n\r\n currentSubscription = { domain, currency, project, store, priceType, plan, threepack, discount };\r\n }\r\n }\r\n\r\n units.forEach((unit, i) => {\r\n units[i] = vatConverter.convert(units[i]);\r\n units[i].taxData = null;\r\n\r\n units[i]['per-credit'] = Math.round(units[i].price / unit.amount * 100);\r\n });\r\n\r\n bus.emit('command.purchase.vat.price.update', units);\r\n bus.emit('command.purchase.vat.currency.update', units[0].currency);\r\n\r\n units.some(unit => {\r\n unit.currentPlan = '';\r\n if (existSkuInTags(userTags)) {\r\n return unit.currentPlan = getSkuFromTags(userTags) == unit.sku;\r\n } else {\r\n return unit.currentPlan = getPlanName(unit.sku) === currentSubscription.plan;\r\n }\r\n });\r\n\r\n render();\r\n }\r\n\r\n const start = ({ currentSubscription, silentMode, store }) => {\r\n if (silentMode) {\r\n return;\r\n }\r\n\r\n subscriptionSku = currentSubscription && currentSubscription.sku;\r\n list.saveClass();\r\n container.saveClass();\r\n\r\n async.parallel({\r\n packages: curry(mall.subscriptions.get, { store }),\r\n tags: (next) => tags.list(me.id, curry(next, null))\r\n }, domains.api.intercept(create));\r\n }\r\n\r\n function stop() {\r\n list.restoreClass().empty();\r\n container.restoreClass();\r\n }\r\n\r\n templates.get('plans-list', domains.templates.intercept(function (tpl) {\r\n template = tpl;\r\n }));\r\n\r\n bus\r\n .sync('event.application.change-subscription.start', start)\r\n .sync('event.application.change-subscription.stop', stop);\r\n};\r\n"]}