{"version":3,"sources":["webpack:///./app/javascript/controllers/pdp_controller.js","webpack:///./app/javascript/utils/address_api.js","webpack:///./app/javascript/utils/delivery_address.js","webpack:///./app/javascript/utils/popover_handler.js"],"names":["this","formTarget","addEventListener","submitBtnTarget","disabled","innerText","quantityTarget","value","event","detail","data","updateShoppingBagCounter","gtag","Turbolinks","visit","decreaseButtonTarget","e","preventDefault","mainImageTarget","querySelector","setAttribute","target","parentElement","href","variantID","dataset","variantId","thcPercentage","document","cbdPercentage","totalAvailable","parseInt","totalOnHand","totalInCart","variantIDTarget","priceTarget","variantPrice","presentationUnitTarget","variantPresentationUnit","increaseQuantityTarget","removeAttribute","quantity","PopoverHandler","showPopover","popoverOutofStockWrapperTarget","toggleAttribute","DeliveryAddress","inExclusionArea","popoverWrapperTarget","validForDeliver","AddressAPI","showInvalidAddressMsg","order","item_count","Controller","targets","addressAttributes","address","firstname","lastname","city","zipcode","phone","country_code","longitude","latitude","state","expireCookies","cookie","isDeliveryAddressValid","csrfTokenTag","csrfToken","content","instance","axios","create","headers","Promise","resolve","reject","method","url","then","valid_delivery_address","in_exclusion_area","saveAddress","location","toString","setCookies","place","coordinates","exclusionArea","deliveryAddressTarget","invalidAddressTitle","classList","remove","$","popover","title","trigger","template","clone","removeClass","saveInvalidShippingAddress","user_address","invalid_address","isCompleteAddress","street_number","isMissingStreetNumber","missingStreetNumberMessage","searchInput","match","RegExp","focus","setTimeout"],"mappings":"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","file":"js/10-63be379b6120d0e37f21.chunk.js","sourcesContent":["import { Controller } from '@hotwired/stimulus'\nimport { DeliveryAddress } from \"../utils/delivery_address\"\nimport { AddressAPI } from \"../utils/address_api\"\nimport { PopoverHandler } from \"../utils/popover_handler\"\nexport default class extends Controller {\n static targets = [\"quantity\",\n \"decreaseButton\",\n \"variantID\",\n \"selectedVariant\",\n \"mainImage\",\n \"popoverWrapper\",\n \"popoverOutofStockWrapper\",\n \"price\",\n \"increaseQuantity\",\n \"presentationUnit\",\n \"form\",\n \"submitBtn\"]\n\n connect () {\n let addedQuantity = 0;\n\n this.formTarget.addEventListener(\"ajax:before\", () => {\n this.submitBtnTarget.disabled = true\n this.submitBtnTarget.innerText = \"Adding...\"\n\n addedQuantity = this.quantityTarget.value;\n })\n\n this.formTarget.addEventListener(\"ajax:success\", (event) => {\n const [ data, _status, _xhr ] = event.detail\n this.submitBtnTarget.innerText = \"Add to Cart\"\n this.updateShoppingBagCounter(data)\n\n gtag('event', 'add_to_cart')\n Turbolinks.visit(\"/store/cart\")\n })\n }\n\n disconnect () {\n this.submitBtnTarget.disabled = false\n this.quantityTarget.value = 1\n this.decreaseButtonTarget.disabled = true\n }\n\n changeMainImage(e) {\n e.preventDefault()\n const mainImageElement = this.mainImageTarget.querySelector(\"img\")\n\n mainImageElement.setAttribute(\"src\", e.target.parentElement.href)\n }\n\n variantSelected(e) {\n e.preventDefault()\n const variantID = e.target.dataset.variantId\n const thcPercentage = document.querySelector(\"[data-property-thc-percentage]\")\n const cbdPercentage = document.querySelector(\"[data-property-cbd-percentage]\")\n const totalAvailable = parseInt(e.target.dataset.totalOnHand) - parseInt(e.target.dataset.totalInCart)\n\n\n this.variantIDTarget.value = variantID\n this.variantIDTarget.setAttribute(\"data-total-on-hand\", e.target.dataset.totalOnHand)\n this.variantIDTarget.setAttribute(\"data-total-in-cart\", e.target.dataset.totalInCart)\n this.priceTarget.innerText = e.target.dataset.variantPrice\n this.presentationUnitTarget.innerText = e.target.dataset.variantPresentationUnit\n\n if(thcPercentage) {thcPercentage.innerText = `THC: ${e.target.dataset.thcPercentage}` }\n if(cbdPercentage) {cbdPercentage.innerText = `CBD: ${e.target.dataset.cbdPercentage}` }\n\n if(totalAvailable == 0) {\n this.increaseQuantityTarget.setAttribute(\"disabled\", false)\n this.submitBtnTarget.setAttribute(\"disabled\", false)\n\n } else {\n this.increaseQuantityTarget.removeAttribute(\"disabled\", false)\n this.submitBtnTarget.removeAttribute(\"disabled\", false)\n }\n }\n\n updateQuantity(e) {\n let quantity = parseInt(this.quantityTarget.value)\n let totalAvailable = parseInt(this.variantIDTarget.dataset.totalOnHand) - parseInt(this.variantIDTarget.dataset.totalInCart)\n\n if(totalAvailable == 0) {\n PopoverHandler().showPopover(this.popoverOutofStockWrapperTarget)\n e.target.setAttribute(\"disabled\", \"disabled\")\n this.quantityTarget.value = 1\n return;\n }\n\n if(e.target.innerText == \"+\") {\n quantity += 1\n } else {\n quantity -= 1\n this.increaseQuantityTarget.removeAttribute(\"disabled\", false)\n }\n\n\n this.decreaseButtonTarget.toggleAttribute(\"disabled\", quantity <= 1)\n\n if(quantity < 1) { return }\n this.quantityTarget.value = quantity\n\n if(quantity == totalAvailable) {\n e.target.setAttribute(\"disabled\", \"disabled\")\n PopoverHandler().showPopover(this.popoverOutofStockWrapperTarget)\n }\n }\n\n showAddressPopover(e) {\n DeliveryAddress().showPopover();\n }\n\n invalidAddressPopover() {\n let inExclusionArea = this.popoverWrapperTarget.dataset.inExclusionArea == \"true\"\n if(this.popoverWrapperTarget.dataset.validForDeliver == \"false\") {\n AddressAPI().showInvalidAddressMsg(inExclusionArea, this.popoverWrapperTarget)\n }\n }\n\n outOfStockPopover() {\n let totalAvailable = parseInt(this.variantIDTarget.dataset.totalOnHand) - parseInt(this.variantIDTarget.dataset.totalInCart)\n\n if(totalAvailable == 0) { PopoverHandler().showPopover(this.popoverOutofStockWrapperTarget) }\n }\n\n updateShoppingBagCounter (data) {\n let cartBag = document.querySelector(\".shopping-bag-item-count\")\n cartBag.innerText = data.order.item_count\n }\n}\n","import axios from \"axios\"\n\nexport function AddressAPI() {\n function isDeliveryAddressValid(address) {\n const csrfTokenTag = document.querySelector('meta[name=csrf-token]');\n const csrfToken = csrfTokenTag ? csrfTokenTag.content : '';\n let instance = axios.create({ headers: { 'X-CSRF-Token': csrfToken } })\n\n return new Promise((resolve, reject) => {\n instance({\n method: \"post\",\n url: \"/deliverable_addresses\",\n data: addressAttributes(address)\n })\n .then(({ data }) => {\n if(!data.valid_delivery_address || data.in_exclusion_area) {\n reject(data)\n } else {\n resolve(data)\n }\n }).catch(() => { reject(false) })\n })\n }\n\n function saveAddress(address) {\n const csrfTokenTag = document.querySelector('meta[name=csrf-token]');\n const csrfToken = csrfTokenTag ? csrfTokenTag.content : '';\n let data = addressAttributes(address)\n data[\"save_as_default\"] = true\n\n let instance = axios.create({ headers: { 'X-CSRF-Token': csrfToken } })\n instance({\n url: \"/shipping_addresses\",\n method: \"post\",\n data: data\n }).then(() => {\n Turbolinks.visit(location.toString())\n })\n }\n\n function addressAttributes(address) {\n return {\n \"shipping_address\": {\n \"firstname\": address.firstname,\n \"lastname\": address.lastname,\n \"address1\": address.address,\n \"city\": address.city,\n \"zipcode\": address.zipcode,\n \"phone\": address.phone,\n \"country_code\": address.country_code,\n \"longitude\": address.longitude,\n \"latitude\": address.latitude\n\n },\n \"state\": address.state\n }\n }\n\n function missingStreetNumberMessage() {\n $(\"[data-invalid-address-wrapper]\")\n .popover(\n {\n title: \"Missing Street Number\",\n content: \"Psst! We need your street number in order to validate your address. Please try again\",\n trigger: \"manual\",\n template: '

',\n }\n )\n }\n \n function showInvalidAddressMsg(exclusionArea, deliveryAddressTarget) {\n let invalidAddressTitle = \"🌿 Fast Nationwide Shipping Available! 🌿\"\n\n deliveryAddressTarget.classList.remove(\"validating\")\n $(\"[data-target='address-search.invalidAddress']\").popover(\"dispose\")\n\n if(exclusionArea) {\n invalidAddressTitle = \"This is an exclusion area\"\n\n $(\"[data-invalid-address-wrapper]\")\n .popover(\n { \n title: invalidAddressTitle,\n content: \"
We’re unable to deliver to your address because it appears to be a public park, public school, publicly owned or leased land.
\",\n trigger: \"manual\",\n template: '

'\n }\n )\n }\n\n $(\"[data-invalid-address-wrapper]\")\n .popover(\n { \n title: invalidAddressTitle,\n content: function() {\n var clone= $($(this).data('popover-content')).clone(true).removeClass('popover-hide')\n return clone;\n },\n trigger: \"manual\",\n template: '

'\n }\n )\n\n $(\"[data-target='address-search.invalidAddress']\").popover(\"show\")\n }\n\n function setCookies(address, zipcode, place, state, coordinates) {\n document.cookie = `zipcode=${zipcode};Path=/`\n document.cookie = `city=${place};Path=/`\n document.cookie = `state=${state};Path=/`\n document.cookie = `temp_delivery_address=${address};Path=/`\n document.cookie = \"isValid=true;Path=/\"\n document.cookie = `longitude=${coordinates[0]};Path=/`\n document.cookie = `latitude=${coordinates[1]};Path=/`\n }\n\n function expireCookies() {\n document.cookie = \"temp_delivery_address=;expires=Thu, 01 Jan 1970 00:00:01 GMT\"\n document.cookie = \"isValid=;expires=Thu, 01 Jan 1970 00:00:01 GMT\"\n document.cookie = \"city=;expires=Thu, 01 Jan 1970 00:00:01 GMT\"\n document.cookie = \"zipcode=;expires=Thu, 01 Jan 1970 00:00:01 GMT\"\n document.cookie = \"state=;expires=Thu, 01 Jan 1970 00:00:01 GMT\"\n document.cookie = \"place=;expires=Thu, 01 Jan 1970 00:00:01 GMT\"\n document.cookie = \"longitude=;expires=Thu, 01 Jan 1970 00:00:01 GMT\"\n document.cookie = \"latitude=;expires=Thu, 01 Jan 1970 00:00:01 GMT\"\n }\n\n function saveInvalidShippingAddress(user_address, invalid_address) {\n const csrfTokenTag = document.querySelector('meta[name=csrf-token]');\n const csrfToken = csrfTokenTag ? csrfTokenTag.content : '';\n\n let instance = axios.create({ headers: { 'X-CSRF-Token': csrfToken } })\n instance({\n url: \"/invalid_shipping_addresses\",\n method: \"post\",\n data: { user_address: user_address, invalid_address: invalid_address }\n })\n }\n\n function isCompleteAddress(address) {\n return address.street_number && address.zipcode && address.city\n }\n\n function isMissingStreetNumber(address) {\n return !address.street_number && address.address && address.city\n }\n\n return {\n expireCookies,\n isDeliveryAddressValid,\n saveAddress,\n setCookies,\n showInvalidAddressMsg,\n saveInvalidShippingAddress,\n isCompleteAddress,\n isMissingStreetNumber,\n missingStreetNumberMessage\n }\n}\n","export function DeliveryAddress() {\n function showPopover() {\n let searchInput = document.querySelector(\".pac-target-input\")\n let deliveryAddress = document.cookie.match(new RegExp('(^| )temp_delivery_address=([^;]+)'))\n\n if(!deliveryAddress && searchInput.dataset.address == 'Find your address') {\n $('#deliver-to-wrapper').popover('show');\n searchInput.focus();\n }\n }\n\n return {\n showPopover,\n }\n}","export function PopoverHandler() {\n function showPopover(popover) {\n $(popover).popover(\"show\")\n\n setTimeout(() => {\n $(popover).popover(\"hide\")\n }, 2000)\n }\n\n return {\n showPopover,\n }\n}"],"sourceRoot":""}