{"version":3,"file":"js/8643-2a8a600350a0f2d75467.chunk.js","mappings":"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","sources":["webpack://Dansapp/./app/javascript/features/utils/listeners.js","webpack://Dansapp/./app/javascript/features/payment_form/models/form.js","webpack://Dansapp/./app/javascript/features/payment_form/models/order.js","webpack://Dansapp/./app/javascript/features/calendar/processors/load_public_calendar.js","webpack://Dansapp/./app/javascript/features/calendar/controllers/klasses_controller.js","webpack://Dansapp/./app/javascript/features/calendar/processors/load_remote_products.js","webpack://Dansapp/./app/javascript/features/calendar/processors/load_remote_role.js","webpack://Dansapp/./app/javascript/src/waiting_icon.js"],"sourcesContent":["export const listenerByQuerySelector = (selector, eventType, handler) => {\n document.body.addEventListener(eventType, (event) => {\n const targetElement = event.target.closest(selector);\n\n if (targetElement) handler(event, targetElement);\n });\n};\n","import { Order } from './order';\nimport { OrderRule } from './order_rule';\n\nexport class Form {\n constructor(id) {\n this.form = document.getElementById(id);\n }\n\n submit() {\n this.form.submit();\n }\n\n remove(product) {\n product.removeFromForm(this.form);\n product.resolveLocalStorage(this.form);\n product.showInList();\n product.setOrdered(false);\n\n this.updateCounter();\n this.buildSummaryTable();\n }\n\n createOrUpdateHiddenInput(name, value, productId) {\n const existingInput = this.form.querySelector(`input[type=\"hidden\"][name=\"${name}\"][data-product-id=\"${productId}\"]`);\n\n if (existingInput) {\n existingInput.value = value;\n } else {\n let input = document.createElement('input');\n\n input.setAttribute('type', 'hidden');\n input.setAttribute('name', name);\n input.setAttribute('value', value);\n input.setAttribute('data-product-id', productId);\n\n this.form.appendChild(input);\n }\n }\n\n products() {\n return document.getElementById('ordered_products').value.split(',').filter(Boolean);\n }\n\n addProduct(productId) {\n let productIds = this.products();\n\n if (productIds.indexOf(productId) > -1) return;\n\n productIds.push(productId);\n const products = Array.from(new Set(productIds));\n\n document.getElementById('ordered_products').value = products.join(',');\n }\n\n showCheckoutButton() {\n document.getElementById('btn-continue').classList.remove('d-none');\n }\n\n updateCounter() {\n const quantity = new Order(this).orderedQuantity();\n\n document.getElementById('footer-cart-counter').innerText = quantity;\n }\n\n emptySummary() {\n document.querySelectorAll('.summary-table tbody tr').forEach((tr) => tr.remove());\n }\n\n buildSummaryTable() {\n this.emptySummary();\n\n for (const productId of this.products()) {\n this.addToSummary(productId);\n }\n }\n\n addToSummary(productId) {\n const trialDate = document.querySelector(`input[type=hidden][name*='order_rule_trial_lesson_attributes'][name*='[date_time]'][data-product-id='${productId}']`);\n const quantity = new OrderRule({ productId }).orderedQuantity();\n\n let productName = document.querySelector(`button[data-product-id='${productId}']`).dataset.productName;\n\n if (trialDate?.value) productName = `${productName} (Trial class)`;\n\n document.querySelector('.summary-table tbody').insertAdjacentHTML(\n 'afterbegin',\n ` \\\n ${quantity}x \\\n ${productName} \\\n \\\n `\n );\n }\n}\n","import { OrderRule } from './order_rule';\nimport { Purchaser } from './person/purchaser';\nimport { Parent } from './person/parent';\n\nexport class Order {\n constructor(form) {\n this.purchaser = new Purchaser({});\n this.parent = new Parent({});\n this.form = form;\n }\n\n orderedQuantity() {\n const products = this.form.products();\n\n return products.reduce((sum, productId) => {\n const orderRule = new OrderRule({ productId });\n\n return sum + orderRule.orderedQuantity();\n }, 0);\n }\n\n purchaserComplete() {\n return this.purchaser.validate({}).error == null;\n }\n}\n","import { WaitingIcon } from 'src/waiting_icon';\n\nexport const loadPublicCalendar = (startDate) => {\n let waitingIcon = new WaitingIcon();\n waitingIcon.setById('div-klasses');\n\n const calendarId = document.getElementById('btn-this-date').dataset.calendarId;\n const url = `/calendar/undefined/${calendarId}/remote_klasses?start_date=${startDate}`;\n\n Rails.ajax({ url, type: 'GET', dataType: 'json' });\n};\n","import { listenerByQuerySelector } from '../../utils/listeners';\nimport {\n loadPublicCalendar,\n loadRemoteProducts,\n loadRemoteRole\n} from '../processors';\nimport { Partner, Purchaser } from 'features/payment_form/models';\n\nexport default class KlassesController {\n constructor() {\n this.startDate = null;\n }\n\n initialize() {\n this.initializePage();\n this.setupEventListeners();\n }\n\n initializePage() {\n if (!document.getElementById('div-klasses')) return;\n\n if (!this.startDate) this.startDate = document.getElementById('btn-this-date').dataset.startDate;\n\n loadPublicCalendar(this.startDate);\n\n new Purchaser({ student: false });\n new Partner({ student: false });\n }\n\n setupEventListeners() {\n listenerByQuerySelector('.load-week', 'click', (_event, element) => {\n loadPublicCalendar(element.dataset.startDate);\n });\n\n listenerByQuerySelector('.modal-remote-products', 'click', (_event, element) => {\n const klassId = element.dataset.klassId;\n const calendarId = element.dataset.calendarId;\n const danceschoolName = element.dataset.danceschoolName;\n const role = element.dataset.role;\n\n loadRemoteProducts(danceschoolName, calendarId, klassId, role);\n });\n\n listenerByQuerySelector('.modal-remote-role', 'click', (_event, element) => {\n const klassId = element.dataset.klassId;\n const calendarId = element.dataset.calendarId;\n const danceschoolName = element.dataset.danceschoolName;\n\n loadRemoteRole(danceschoolName, calendarId, klassId);\n });\n }\n}\n","export const loadRemoteProducts = (danceschoolName, calendarId, klassId, role) => {\n const url = `/calendar/${danceschoolName}/${calendarId}/klasses/${klassId}/products?role=${role}`;\n\n Rails.ajax({ url, type: 'GET', dataType: 'json' });\n};\n","export const loadRemoteRole = (danceschoolName, calendarId, klassId) => {\n const url = `/calendar/${danceschoolName}/${calendarId}/klasses/${klassId}/roles`;\n\n Rails.ajax({ url, type: 'GET', dataType: 'json' });\n};\n","export class WaitingIcon {\n html() {\n return '
' +\n '' +\n '
';\n }\n\n setById(id) {\n document.getElementById(id).innerHTML = this.html();\n }\n}\n\n"],"names":["listenerByQuerySelector","selector","eventType","handler","document","body","addEventListener","event","targetElement","target","closest","Form","id","this","form","getElementById","_proto","prototype","submit","remove","product","removeFromForm","resolveLocalStorage","showInList","setOrdered","updateCounter","buildSummaryTable","createOrUpdateHiddenInput","name","value","productId","existingInput","querySelector","input","createElement","setAttribute","appendChild","products","split","filter","Boolean","addProduct","productIds","indexOf","push","Array","from","Set","join","showCheckoutButton","classList","quantity","Order","orderedQuantity","innerText","emptySummary","querySelectorAll","forEach","tr","_step","_iterator","_createForOfIteratorHelperLoose","done","addToSummary","trialDate","OrderRule","productName","dataset","insertAdjacentHTML","purchaser","Purchaser","parent","Parent","reduce","sum","purchaserComplete","validate","error","loadPublicCalendar","startDate","WaitingIcon","setById","url","calendarId","Rails","ajax","type","dataType","KlassesController","initialize","initializePage","setupEventListeners","student","Partner","_event","element","klassId","danceschoolName","role","loadRemoteProducts","loadRemoteRole","html","innerHTML"],"sourceRoot":""}