{"version":3,"file":"js/store_v2-c78bbda7e0a52be874b9.js","mappings":"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","sources":["webpack://booqable/./webpack/shared/cookie_notice.js","webpack://booqable/./webpack/shared/image_focus.js","webpack://booqable/./webpack/shared/user_framework.js","webpack://booqable/./webpack/store/v2/application.js","webpack://booqable/./webpack/store/v2/globals.js","webpack://booqable/./webpack/shared/utils/get_fingerprint.js","webpack://booqable/./webpack/store/v2/redux/actions/locale.js","webpack://booqable/./webpack/store/v2/api.js","webpack://booqable/./webpack/shared/utils/cart.js","webpack://booqable/./webpack/store/v2/redux/actions/cart.js","webpack://booqable/./webpack/shared/utils/getBrandingColor.js","webpack://booqable/./webpack/store/v2/redux/actions/client.js","webpack://booqable/./webpack/store/v2/redux/actions/item.js","webpack://booqable/./webpack/store/v2/redux/actions/bundle.js","webpack://booqable/./webpack/store/v2/redux/actions/product_group.js","webpack://booqable/./webpack/store/v2/get_provider.js","webpack://booqable/./webpack/shared/utils/userFrameworkEvents.js","webpack://booqable/./webpack/store/v2/react/blocks/Period/styles.js","webpack://booqable/./webpack/store/v2/react/blocks/Period/index.js","webpack://booqable/./webpack/store/v2/react/scenes/cart/period.jsx","webpack://booqable/./webpack/store/v2/react/scenes/cart/line.jsx","webpack://booqable/./webpack/store/v2/react/components/delay.jsx","webpack://booqable/./webpack/shop-components/components/MiniCart/components/Logo.jsx","webpack://booqable/./webpack/shop-components/components/PoweredBy/index.jsx","webpack://booqable/./webpack/store/v2/react/scenes/cart/lines.jsx","webpack://booqable/./webpack/store/v2/react/components/product_price.jsx","webpack://booqable/./webpack/store/blocks/Services/styles.js","webpack://booqable/./webpack/store/blocks/Services/index.js","webpack://booqable/./webpack/store/components/Services/Service.jsx","webpack://booqable/./webpack/store/components/Services/index.jsx","webpack://booqable/./webpack/store/v2/react/scenes/cart/blocks/Overdue/index.js","webpack://booqable/./webpack/store/v2/react/scenes/cart/components/Overdue/index.jsx","webpack://booqable/./webpack/store/v2/react/scenes/cart/components/FloatingCart/index.jsx","webpack://booqable/./webpack/store/blocks/Modal/index.js","webpack://booqable/./webpack/store/components/Modal.jsx","webpack://booqable/./webpack/shared/utils/useLockScroll.js","webpack://booqable/./webpack/store/modules/cart/CartPicker/UserAddressesSelect.jsx","webpack://booqable/./webpack/store/modules/cart/CartPicker/DeliveryFulfillmentForm.jsx","webpack://booqable/./webpack/shared/utils/useCachedQuery.js","webpack://booqable/./webpack/store/modules/cart/CartPicker/requests.js","webpack://booqable/./webpack/store/modules/cart/CartPicker/Provider.jsx","webpack://booqable/./webpack/store/modules/cart/CartPicker/hooks.js","webpack://booqable/./webpack/shared/utils/useSearchParam.js","webpack://booqable/./webpack/store/modules/cart/CartPicker/FulfillmentType.jsx","webpack://booqable/./webpack/store/components/ReadOnlyModeDisabledComponent/index.jsx","webpack://booqable/./webpack/store/v2/redux/actions/availability.js","webpack://booqable/./webpack/store/modules/cart/CartPicker/Picker.jsx","webpack://booqable/./webpack/store/blocks/CartPicker/index.js","webpack://booqable/./webpack/store/blocks/CartPicker/styles.js","webpack://booqable/./webpack/store/modules/cart/CartPicker/Modal.jsx","webpack://booqable/./webpack/store/modules/cart/FloatingCart/components/CartPicker.jsx","webpack://booqable/./webpack/store/modules/cart/FloatingCart/components/Launcher.jsx","webpack://booqable/./webpack/store/v2/react/components/cart.jsx","webpack://booqable/./webpack/store/v2/react/blocks/Themed/index.js","webpack://booqable/./webpack/store/v2/react/blocks/Themed/styles.js","webpack://booqable/./webpack/ui/themes/public.js","webpack://booqable/./webpack/store/v2/react/components/Themed.jsx","webpack://booqable/./webpack/store/v2/react/scenes/cart.jsx","webpack://booqable/./webpack/store/v2/redux/selectors/item.js","webpack://booqable/./webpack/store/v2/react/id_finder.jsx","webpack://booqable/./webpack/store/v2/redux/actions/quickview.js","webpack://booqable/./webpack/store/v2/react/components/product.jsx","webpack://booqable/./webpack/store/v2/react/scenes/product_group.jsx","webpack://booqable/./webpack/store/v2/react/components/pagination.jsx","webpack://booqable/./webpack/store/v2/redux/actions/filter.js","webpack://booqable/./webpack/store/v2/react/components/product_search.jsx","webpack://booqable/./webpack/store/modules/product/blocks/CollectionList/styles.js","webpack://booqable/./webpack/store/modules/product/blocks/CollectionList/index.js","webpack://booqable/./webpack/store/v2/redux/actions/collection.js","webpack://booqable/./webpack/store/modules/product/components/CollectionList/index.jsx","webpack://booqable/./webpack/store/v2/react/components/product_list.jsx","webpack://booqable/./webpack/store/v2/react/scenes/product_list.jsx","webpack://booqable/./webpack/store/modules/product/blocks/ProductButton/styles.js","webpack://booqable/./webpack/store/modules/product/blocks/ProductButton/index.js","webpack://booqable/./webpack/store/modules/product/components/ProductButton/BundleItems.jsx","webpack://booqable/./webpack/store/modules/product/blocks/ProductAvailabilityCalendar/TimeTable/styles.js","webpack://booqable/./webpack/store/modules/product/blocks/ProductAvailabilityCalendar/TimeTable/index.js","webpack://booqable/./webpack/store/modules/product/components/ProductAvailabilityCalendar/TimeTable.jsx","webpack://booqable/./webpack/store/modules/product/blocks/ProductAvailabilityCalendar/styles.js","webpack://booqable/./webpack/store/modules/product/blocks/ProductAvailabilityCalendar/index.js","webpack://booqable/./webpack/store/modules/product/components/ProductAvailabilityCalendar/index.jsx","webpack://booqable/./webpack/store/v2/redux/selectors/product.js","webpack://booqable/./webpack/store/v2/redux/actions/line.js","webpack://booqable/./webpack/store/modules/product/components/ProductButton/index.jsx","webpack://booqable/./webpack/store/v2/react/scenes/product_button.jsx","webpack://booqable/./webpack/store/modules/product/blocks/ProductImage/styles.js","webpack://booqable/./webpack/store/modules/product/blocks/ProductImage/index.js","webpack://booqable/./webpack/store/modules/product/blocks/ImageMagnify/styles.js","webpack://booqable/./webpack/store/modules/product/blocks/ImageMagnify/index.js","webpack://booqable/./webpack/store/modules/product/components/ImageMagnify/ImageRenderer.jsx","webpack://booqable/./webpack/store/modules/product/components/ImageMagnify/index.jsx","webpack://booqable/./webpack/store/modules/product/blocks/ModalGallery/styles.js","webpack://booqable/./webpack/store/modules/product/blocks/ModalGallery/index.js","webpack://booqable/./webpack/store/modules/product/components/ModalGallery/index.jsx","webpack://booqable/./webpack/store/modules/product/components/ProductImage/index.jsx","webpack://booqable/./webpack/store/v2/react/components/product_detail.jsx","webpack://booqable/./webpack/store/v2/react/scenes/product_detail.jsx","webpack://booqable/./webpack/store/v2/react/scenes/quickview.jsx","webpack://booqable/./webpack/store/v2/react/scenes/product_search.jsx","webpack://booqable/./webpack/store/v2/react/components/separate_date_picker/Base.styles.jsx","webpack://booqable/./webpack/store/v2/react/components/separate_date_picker/Base.jsx","webpack://booqable/./webpack/store/v2/react/scenes/separate_date_picker.jsx","webpack://booqable/./webpack/store/v2/react/scenes/collection_list.jsx","webpack://booqable/./webpack/store/modules/product/components/SortingSelect/index.jsx","webpack://booqable/./webpack/store/modules/product/components/FilterSelect/index.jsx","webpack://booqable/./webpack/store/v2/react/scenes/filter_bar.jsx","webpack://booqable/./webpack/store/v2/react/scenes/sorting_select.jsx","webpack://booqable/./webpack/store/modules/cart/CartPicker/Inline.jsx","webpack://booqable/./webpack/store/v2/react/scenes/sidebar.jsx","webpack://booqable/./webpack/store/modules/cart/EmbeddableCart/Line.jsx","webpack://booqable/./webpack/store/modules/cart/EmbeddableCart/LineContainer.jsx","webpack://booqable/./webpack/store/modules/cart/EmbeddableCart/LinesContainer.jsx","webpack://booqable/./webpack/store/modules/cart/EmbeddableCart/Lines.jsx","webpack://booqable/./webpack/store/modules/cart/EmbeddableCart/Errors.jsx","webpack://booqable/./webpack/store/modules/cart/EmbeddableCart/Totals.jsx","webpack://booqable/./webpack/store/modules/cart/EmbeddableCart/Sidebar.jsx","webpack://booqable/./webpack/store/modules/cart/EmbeddableCart/Mobile/Line.jsx","webpack://booqable/./webpack/store/modules/cart/EmbeddableCart/Mobile/Lines.jsx","webpack://booqable/./webpack/store/modules/cart/EmbeddableCart/Mobile/index.jsx","webpack://booqable/./webpack/store/modules/cart/EmbeddableCart/index.jsx","webpack://booqable/./webpack/store/v2/react/scenes/embeddable_cart.jsx","webpack://booqable/./webpack/store/v2/react/scenes/embeddable_cart_lines.jsx","webpack://booqable/./webpack/store/v2/react/scenes/embeddable_cart_sidebar.jsx","webpack://booqable/./webpack/store/modules/cart/CartButton.jsx","webpack://booqable/./webpack/store/v2/react/components/cart_button.jsx","webpack://booqable/./webpack/store/v2/react/scenes/cart_button.jsx","webpack://booqable/./webpack/shop-components/components/ProductAvailability/styles.js","webpack://booqable/./webpack/shop-components/utils/withStore.js","webpack://booqable/./webpack/shop-components/utils/withTheme.js","webpack://booqable/./webpack/shop-components/utils/registerCustomElement.js","webpack://booqable/./webpack/shop-components/api/index.js","webpack://booqable/./webpack/shop-components/api/availability.js","webpack://booqable/./webpack/shop-components/redux/actions/availability.js","webpack://booqable/./webpack/shop-components/components/ProductAvailability/index.jsx","webpack://booqable/./webpack/shop-components/redux/actions/price.js","webpack://booqable/./webpack/shop-components/api/price.js","webpack://booqable/./webpack/shop-components/components/ProductPrice/Price.jsx","webpack://booqable/./webpack/shop-components/components/ProductPrice/Label.jsx","webpack://booqable/./webpack/shop-components/components/ProductVariationsSelect/styles.js","webpack://booqable/./webpack/shop-components/components/ProductVariationsSelect/index.jsx","webpack://booqable/./webpack/shop-components/components/ProductAvailabilityCalendar/index.jsx","webpack://booqable/./webpack/shop-components/components/ProductButton/styles.js","webpack://booqable/./webpack/shop-components/components/ProductButton/Button.jsx","webpack://booqable/./webpack/shop-components/api/items.js","webpack://booqable/./webpack/shop-components/redux/actions/item.js","webpack://booqable/./webpack/shop-components/components/ProductButton/index.jsx","webpack://booqable/./webpack/shop-components/components/DatePicker/styles.js","webpack://booqable/./webpack/shop-components/components/DatePicker/hooks.js","webpack://booqable/./webpack/shop-components/components/DatePicker/Button.jsx","webpack://booqable/./webpack/shop-components/components/DatePicker/styles-next.js","webpack://booqable/./webpack/shop-components/components/DatePicker/ButtonNext.jsx","webpack://booqable/./webpack/shop-components/components/DatePicker/index.jsx","webpack://booqable/./webpack/shop-components/components/DatePicker/Modal.jsx","webpack://booqable/./webpack/shop-components/components/MiniCart/styles/index.js","webpack://booqable/./webpack/shop-components/components/MiniCart/styles/Line.js","webpack://booqable/./webpack/shop-components/components/MiniCart/components/BundleItem.jsx","webpack://booqable/./webpack/shop-components/components/MiniCart/components/BundleContents.jsx","webpack://booqable/./webpack/shop-components/components/MiniCart/components/Line.jsx","webpack://booqable/./webpack/shop-components/components/MiniCart/components/Lines.jsx","webpack://booqable/./webpack/shop-components/components/MiniCart/styles/Period.js","webpack://booqable/./webpack/shop-components/components/MiniCart/components/Period.jsx","webpack://booqable/./webpack/shop-components/components/MiniCart/styles/Services.js","webpack://booqable/./webpack/shop-components/components/MiniCart/components/Service.jsx","webpack://booqable/./webpack/shop-components/components/MiniCart/components/Services.jsx","webpack://booqable/./webpack/shop-components/utils/useCart.js","webpack://booqable/./webpack/shop-components/components/MiniCart/index.jsx","webpack://booqable/./webpack/shop-components/components/ProductGallery/components/OptimizedImage/index.jsx","webpack://booqable/./webpack/shop-components/components/ProductGallery/styles.js","webpack://booqable/./webpack/shop-components/api/photo.js","webpack://booqable/./webpack/shop-components/redux/actions/photo.js","webpack://booqable/./webpack/shop-components/components/ProductGallery/index.jsx","webpack://booqable/./webpack/shop-components/components/BundleItems/styles.js","webpack://booqable/./webpack/shop-components/components/BundleItems/Item.jsx","webpack://booqable/./webpack/shop-components/components/BundleItems/index.jsx","webpack://booqable/./webpack/shop-components/components/CartLines/styles.js","webpack://booqable/./webpack/shop-components/components/CartLines/BundleContents/styles.js","webpack://booqable/./webpack/shop-components/components/CartLines/BundleContents/index.jsx","webpack://booqable/./webpack/shop-components/components/CartLines/Line.jsx","webpack://booqable/./webpack/shop-components/components/CartLines/LineSkeleton.jsx","webpack://booqable/./webpack/shop-components/components/CartLines/index.jsx","webpack://booqable/./webpack/shop-components/components/CartServices/styles.js","webpack://booqable/./webpack/shop-components/components/CartServices/Service.jsx","webpack://booqable/./webpack/shop-components/components/CartServices/index.jsx","webpack://booqable/./webpack/shop-components/components/CartTotals/styles.js","webpack://booqable/./webpack/shop-components/components/CartTotals/Errors.jsx","webpack://booqable/./webpack/shop-components/components/CartTotals/Buttons/styles.js","webpack://booqable/./webpack/shop-components/components/CartTotals/Buttons/Checkout.jsx","webpack://booqable/./webpack/shop-components/utils/navigation.js","webpack://booqable/./webpack/shop-components/components/CartTotals/Buttons/BackToStore.jsx","webpack://booqable/./webpack/shop-components/components/CartTotals/Discounts.jsx","webpack://booqable/./webpack/shop-components/components/CartTotals/index.jsx","webpack://booqable/./webpack/shop-components/components/MiniCartLauncher/styles.js","webpack://booqable/./webpack/shop-components/components/MiniCartLauncher/index.jsx","webpack://booqable/./webpack/shop-components/components/MiniCartButton/styles.js","webpack://booqable/./webpack/shop-components/components/MiniCartButton/index.jsx","webpack://booqable/./webpack/store/v2/react/initializer.js","webpack://booqable/./webpack/store/v2/redux/models.js","webpack://booqable/./webpack/store/v2/redux/reducers/client.js","webpack://booqable/./webpack/store/v2/redux/reducers/filter.js","webpack://booqable/./webpack/shop-components/redux/reducers/items.js","webpack://booqable/./webpack/store/v2/redux/reducers/index.js","webpack://booqable/./webpack/store/v2/redux/store.js","webpack://booqable/./webpack/ui/blocks/ActionGroup/styles.js","webpack://booqable/./webpack/ui/elements/Img.js"],"sourcesContent":["/* global Booqable, CookieConsent */\nconst CookieNotice = {\n // PUBLIC\n\n init (config, translations = { en: {} }) {\n CookieConsent.run(this._settings(config, translations))\n },\n\n showPreferencesModal () {\n CookieConsent.showPreferences()\n },\n\n servicesTable () {\n const services = []\n\n Booqable._apps.marketing.forEach(function (app) {\n if (services.find((service) => service.name === app.name)) {\n return\n }\n\n services.push({\n name: app.name,\n domain: app.domain,\n desc: app.description\n })\n })\n\n return services\n },\n\n // PRIVATE\n\n _services () {\n // These will be listed in the cookie consent modal\n // and the user can then choose to accept or deny\n // cookies on a per-app basis.\n return Booqable._apps.marketing.map(function (app) {\n if (!app.name) {\n return null\n }\n\n return { name: app.name, label: app.name }\n }).filter(function (app) { return app })\n .reduce(function (acc, app) { return { ...acc, [app.name]: app } }, {})\n },\n\n _refreshAppConsent (cookie) {\n // Every time the user changes his cookie preferences\n // we need to refresh the apps to reflect the new state.\n Booqable._apps.marketing.forEach(function (app) {\n if (cookie.services.tracking.includes(app.name)) {\n app.onConsent()\n } else {\n app.onDeny()\n }\n })\n },\n\n _settings (config, translations = { en: {} }) {\n const self = this\n const defaults = {\n hideFromBots: !navigator.webdriver,\n autoShow: false,\n categories: {\n necessary: {\n enabled: true,\n readOnly: true\n },\n tracking: {\n services: this._services()\n }\n },\n language: {\n default: 'en',\n translations\n },\n onConsent: function ({ cookie }) { self._refreshAppConsent(cookie) },\n onChange: function ({ cookie }) { self._refreshAppConsent(cookie) }\n }\n\n return Object.assign({}, defaults, config)\n }\n}\n\nif (window.CookieNotice === undefined) {\n window.CookieNotice = CookieNotice\n}\n","window.imageFocus = require('image-focus').FocusedImage\n","/* eslint-disable */\n\n// WARNING: This file needs to be written in Vanilla JS\n\nvar Booqable = {\n get location() {\n return window.location.pathname;\n },\n set origin(value) {\n localStorage.setItem('origin', value);\n },\n get origin() {\n return localStorage.getItem('origin');\n }\n}\n\nif (window.Booqable === undefined) {\n window.Booqable = Booqable;\n\n /////////////////////////////////////////////////\n // Delegate initializer\n /////////////////////////////////////////////////\n\n Booqable.init = function () {\n initBooqableComponents();\n };\n\n /////////////////////////////////////////////////\n // Set cart data\n /////////////////////////////////////////////////\n\n Booqable.setCartData = function (data) {\n Booqable.cartData = data;\n };\n\n /////////////////////////////////////////////////\n // Events\n /////////////////////////////////////////////////\n\n Booqable._events = {};\n\n Booqable.on = function (event, callback, context) {\n if (!Booqable._events.hasOwnProperty(event)) {\n Booqable._events[event] = [];\n }\n\n Booqable._events[event].push([callback, context]);\n };\n\n Booqable._trigger = function (event) {\n var args = Array.prototype.slice.call(arguments, 1);\n var callbacks = Booqable._events[event] || [];\n\n for (var i = 0; i < callbacks.length; i++) {\n var callback = callbacks[i][0];\n var context = callbacks[i][1] || Booqable;\n callback.apply(context, args);\n }\n };\n\n // Removes an event listener by filtering out the specified callback from the event's array.\n window.Booqable.off = function (event, callback) {\n if (!Booqable._events.hasOwnProperty(event)) {\n return;\n }\n\n Booqable._events[event] = Booqable._events[event].filter(function (listener) {\n return listener[0] !== callback;\n });\n };\n\n /////////////////////////////////////////////////\n // Script, tag & asset loading\n /////////////////////////////////////////////////\n\n Booqable.loadScript = function (src) {\n if (Booqable._isScriptLoaded(src)) { return; }\n\n var tag = document.createElement('script');\n tag.async = false;\n tag.src = src;\n\n document.getElementsByTagName('head')[0].appendChild(tag);\n };\n\n Booqable.unloadScript = function (src) {\n if (!Booqable._isScriptLoaded(src)) { return; }\n\n var tag = Booqable._findScript(src);\n\n document.getElementsByTagName('head')[0].removeChild(tag);\n };\n\n /////////////////////////////////////////////////\n // jQuery\n /////////////////////////////////////////////////\n Booqable.jQuery = function (callback) {\n Booqable.loadScript('https://code.jquery.com/jquery-3.3.1.min.js');\n\n Booqable._defer(function () { return window.$; }, callback);\n };\n\n /////////////////////////////////////////////////\n // Utilities\n /////////////////////////////////////////////////\n\n Booqable._isScriptLoaded = function (src) {\n return Booqable._findScript(src) ? true : false;\n };\n\n Booqable._findScript = function (src) {\n return document.querySelector('script[src=\"' + src + '\"]');\n }\n\n Booqable._once = function (func) {\n let didRun = false;\n\n if (typeof func != 'function') {\n throw new TypeError('Expected a function');\n }\n\n return function() {\n if (!didRun) {\n didRun = true;\n return func.apply(this, arguments);\n } else {\n func = undefined;\n }\n };\n };\n\n Booqable._defer = function (condition, method, attempt) {\n if (!attempt) {\n attempt = 1;\n }\n\n if (attempt === 200) {\n return;\n }\n\n if (condition()) {\n method();\n } else {\n setTimeout(function () { Booqable._defer(condition, method, attempt + 1) }, 50);\n }\n };\n\n Booqable._prependChild = function (parentElement, element) {\n parentElement.insertBefore(element, parentElement.firstChild);\n };\n\n /////////////////////////////////////////////////\n // App support\n /////////////////////////////////////////////////\n Booqable._apps = {\n marketing: [],\n essential: [],\n };\n\n Booqable._initApps = Booqable._once(function () {\n Object.entries(Booqable._apps).forEach(([_, apps]) => {\n apps.forEach((app) => {\n app.init()\n })\n })\n })\n\n Booqable._consentToAllApps = Booqable._once(function () {\n Object.entries(Booqable._apps).forEach(([_, apps]) => {\n apps.forEach((app) => {\n app.onConsent()\n })\n })\n })\n\n // Add app to a category.\n Booqable.registerApp = function (category, appConfig) {\n if (!Booqable._apps.hasOwnProperty(category)) {\n throw new Error('Invalid app category \\'' + category + \"'\");\n }\n\n // We expect apps to define their callbacks, but none\n // are required.\n // name -> name of the app (shown on the cookie notice preferences)\n // init() -> called on window load event\n // onConsent() -> called on window load and when user consents to cookies\n // onDeny() -> called when user denies cookies\n var defaultConfig = {\n name: null,\n init: function () {},\n onConsent: function () {},\n onDeny: function () {}\n }\n\n Booqable._apps[category].push(Object.assign({}, defaultConfig, appConfig));\n }\n\n /////////////////////////////////////////////////\n // Google Analytics\n /////////////////////////////////////////////////\n\n Booqable._gtag = function (type, event, data) {\n if (typeof window.gtag === 'function') {\n window.gtag(type, event, data);\n }\n }\n\n Booqable._prepare_gtag_event_data = function (data) {\n if (!data.value || !data.currency || !data.items || data.items.length == 0) {\n return null\n }\n\n return {\n value: data.value,\n currency: data.currency,\n items: data.items.map((item) => ({\n item_id: item.item_id,\n item_name: item.item_name,\n ...(item.quantity && { quantity: item.quantity }),\n price: item.price\n }))\n }\n }\n\n setupGoogleAnalytics = function (trackingId, defaultPageTracking = true, defaultEvents = false, options = {}) {\n if (!trackingId || trackingId == '') {\n return\n }\n\n if (typeof options !== 'object') {\n options = {}\n }\n\n options.linker = { accept_incoming: true }\n\n Booqable.loadScript('https://www.googletagmanager.com/gtag/js?id=' + trackingId);\n\n window.dataLayer = window.dataLayer || [];\n window.gtag = function () { dataLayer.push(arguments); }\n window.gtag('js', new Date());\n window.gtag('config', trackingId, options);\n\n if (defaultPageTracking) {\n Booqable._setupGoogleAnalyticsDefaultPageTracking(trackingId);\n }\n\n if (defaultEvents) {\n Booqable._setupGoogleAnalyticsDefaultEvents();\n }\n };\n\n Booqable.setupGoogleAnalytics = Booqable._once(setupGoogleAnalytics)\n\n _setupGoogleAnalyticsDefaultPageTracking = function (trackingId) {\n Booqable.on('viewCart', function () {\n Booqable._gtag('event', 'page_view', {\n page_title: 'Cart',\n send_to: trackingId\n });\n\n Booqable._gtag('event', 'view_cart', {\n 'currency': Booqable.cartData.currency,\n 'value': Booqable.cartData.grandTotalWithTax,\n 'items': Booqable.cartData.items\n });\n });\n\n Booqable.on('information', function () {\n Booqable._gtag('event', 'page_view', {\n page_title: 'Checkout Information',\n send_to: trackingId\n });\n });\n\n Booqable.on('payment', function () {\n Booqable._gtag('event', 'page_view', {\n page_title: 'Checkout Payment',\n send_to: trackingId\n });\n });\n\n Booqable.on('completed', function () {\n Booqable._gtag('event', 'page_view', {\n page_title: 'Checkout Completed',\n send_to: trackingId\n });\n });\n };\n\n Booqable._setupGoogleAnalyticsDefaultPageTracking = Booqable._once(_setupGoogleAnalyticsDefaultPageTracking)\n\n _setupGoogleAnalyticsDefaultEvents = function () {\n // Shop Events\n Booqable.on('viewProduct', function (data) {\n const event_data = Booqable._prepare_gtag_event_data(data)\n\n Booqable._gtag('event', 'view_item', event_data);\n });\n\n Booqable.on('addToCart', function (data) {\n const event_data = Booqable._prepare_gtag_event_data(data)\n\n Booqable._gtag('event', 'add_to_cart', event_data);\n });\n\n Booqable.on('removeFromCart', function (data) {\n const event_data = Booqable._prepare_gtag_event_data(data)\n\n Booqable._gtag('event', 'remove_from_cart', event_data);\n });\n\n // Checkout events\n Booqable.on('information', function () {\n // Regular event\n Booqable._gtag('event', 'Checkout', {\n 'event_category': 'Information',\n 'event_label': 'Information'\n });\n\n // Ecommerce event\n Booqable._gtag('event', 'begin_checkout', {\n 'currency': Booqable.cartData.currency,\n 'value': Booqable.cartData.grandTotalWithTax,\n 'coupon': Booqable.cartData.coupon,\n 'items': Booqable.cartData.items\n });\n });\n\n Booqable.on('payment', function () {\n // Regular event\n Booqable._gtag('event', 'Checkout', {\n 'event_category': 'Payment',\n 'event_label': 'Payment'\n });\n });\n\n Booqable.on('completed', function () {\n // Regular event\n Booqable._gtag('event', 'Checkout', {\n 'event_category': 'Completed',\n 'event_label': 'Completed'\n });\n\n // Ecommerce event\n Booqable._gtag('event', 'purchase', {\n \"transaction_id\": Booqable.cartData.cartId,\n \"value\": Booqable.cartData.grandTotalWithTax,\n \"currency\": Booqable.cartData.currency,\n \"tax\": Booqable.cartData.tax,\n \"items\": Booqable.cartData.items,\n \"coupon\": Booqable.cartData.coupon\n });\n });\n }\n\n Booqable._setupGoogleAnalyticsDefaultEvents = Booqable._once(_setupGoogleAnalyticsDefaultEvents)\n\n /////////////////////////////////////////////////\n // Facebook\n /////////////////////////////////////////////////\n\n Booqable._fbq = function (type, event, data) {\n if (typeof window.fbq === 'function') {\n window.fbq(type, event, data);\n }\n }\n\n Booqable._prepare_fbq_event_data = function (data) {\n const item = data.items[0]\n\n if (!data.currency || !item) {\n return null\n }\n\n return {\n contents: [{\n id: item.item_id,\n quantity: item.quantity\n }],\n content_name: item.item_name,\n currency: data.currency,\n value: item.price\n }\n }\n\n setupFacebook = function (fbId, defaultEvents = true) {\n if (!fbId || fbId == '') { return ; }\n\n (function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;\n n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;\n t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,\n document,'script','https://connect.facebook.net/en_US/fbevents.js'));\n\n fbq('init', fbId);\n\n if (defaultEvents) {\n Booqable._setupFacebookDefaultEvents();\n }\n };\n\n Booqable.setupFacebook = Booqable._once(setupFacebook)\n\n _setupFacebookDefaultEvents = function () {\n Booqable.on('information', function () {\n Booqable._fbq('track', 'InitiateCheckout', {\n value: Booqable.cartData.grandTotalWithTax,\n currency: Booqable.cartData.currency\n });\n });\n\n Booqable.on('payment', function () {\n Booqable._fbq('track', 'AddPaymentInfo');\n });\n\n Booqable.on('completed', function () {\n Booqable._fbq('track', 'Purchase', {\n value: Booqable.cartData.grandTotalWithTax,\n currency: Booqable.cartData.currency\n });\n });\n\n Booqable.on('page-change', function () {\n Booqable._fbq('track', 'PageView')\n });\n\n Booqable.on('viewProduct', function (data) {\n const event_data = Booqable._prepare_fbq_event_data(data)\n\n Booqable._fbq('track', 'ViewContent', event_data);\n });\n\n Booqable.on('addToCart', function (data) {\n const event_data = Booqable._prepare_fbq_event_data(data)\n\n Booqable._fbq('track', 'AddToCart', event_data);\n });\n\n Booqable.on('removeFromCart', function (data) {\n const event_data = Booqable._prepare_fbq_event_data(data)\n\n Booqable._fbq('trackCustom', 'RemoveFromCart', event_data);\n });\n };\n\n Booqable._setupFacebookDefaultEvents = Booqable._once(_setupFacebookDefaultEvents)\n\n /////////////////////////////////////////////////\n // Intercom\n /////////////////////////////////////////////////\n\n Booqable.setupIntercom = function (appId) {\n window.intercomSettings = {\n app_id: appId\n };\n\n (function(){var w=window;var ic=w.Intercom;if(typeof ic===\"function\"){ic('reattach_activator');\n ic('update',intercomSettings);}else{var d=document;var i=function(){i.c(arguments)};i.q=[];\n i.c=function(args){i.q.push(args)};w.Intercom=i;function l(){var s=d.createElement('script');\n s.type='text/javascript';s.async=true;s.src='https://widget.intercom.io/widget/frrez76q';\n var x=d.getElementsByTagName('script')[0];x.parentNode.insertBefore(s,x);}\n if(w.attachEvent){w.attachEvent('onload',l);}else{w.addEventListener('load',l,false);}\n Booqable._loadIntercom=l;}})()\n\n Booqable._once(Booqable._loadIntercom)();\n };\n\n /////////////////////////////////////////////////\n // Properties & Property updaters\n /////////////////////////////////////////////////\n\n Booqable.decorateLinkForTracking = function (link) {\n // https://developers.google.com/analytics/devguides/collection/gtagjs/cross-domain\n if (window.ga) {\n var trackers = window.ga.getAll && window.ga.getAll()\n var tracker = trackers && trackers[0]\n\n if (tracker && window.gaplugins && window.gaplugins.Linker) {\n var linker = new window.gaplugins.Linker(tracker)\n\n link = linker.decorate(link)\n }\n }\n\n return link\n }\n\n /////////////////////////////////////////////////\n // Button utilities\n /////////////////////////////////////////////////\n\n document.querySelectorAll('form').forEach((form) => {\n form.addEventListener('submit', function (e) {\n const button = e.submitter\n if (button?.classList.contains('button--with-loading') || button?.classList.contains('button--disable-on-submit')) {\n button.setAttribute('disabled', 'disabled')\n }\n })\n })\n}\n","require('./globals')\n\n// Initialize Redux\nwindow.booqableStore = require('./redux/store').default\n\nwindow.booqableGetStore = function () {\n return window.booqableStore\n}\n\n// Intialize App\nrequire('./react/initializer')\nrequire('shared/user_framework')\nrequire('shared/cookie_notice')\n","// Polyfills for older and crappy browsers\nimport 'core-js'\n\nimport elementDataset from 'element-dataset'\n\n// Localization\nimport 'shared/utils/i18n'\n\nimport Bluebird from 'bluebird'\nimport Model from './redux/models'\nimport accounting from 'accounting'\nimport cuid from 'cuid'\n\nelementDataset()\n\nwindow.Promise = Bluebird\nwindow.Model = Model\n\n// Booqable currently relies on accounting to be global\n// for setting correct currency settings\nwindow.accounting = accounting\nwindow.cuid = cuid\n\n// Bluebird config\nwindow.Promise.config({\n warnings: false\n})\n\nwindow.Promise.onPossiblyUnhandledRejection((error) => {\n if (error && error?.message !== 'requestError') {\n throw error\n }\n})\n","import Fingerprint2 from 'fingerprintjs2'\n\nconst fingerPrintOptions = {\n excludes: {\n fonts: true,\n screenResolution: true,\n availableScreenResolution: true\n }\n}\n\nexport default (callback) => {\n try {\n Fingerprint2.getV18(fingerPrintOptions, (fingerprint) => {\n callback(fingerprint)\n })\n } catch {\n // Something went wrong, return an undefined fingerprint\n callback(undefined)\n }\n}\n","import moment from 'shared/lib/moment'\n\nconst store = window.booqableStore\n\nexport default {\n\n set: (locale) => {\n const debug = false\n\n const setLocale = (locale) => {\n window.booqableOptions.locale = locale.split('-')[0]\n moment.locale(locale)\n }\n\n const loadLocale = (locale) => {\n return import('moment/locale/' + locale).then(() => {\n debug && console.log(' - Locale found and loaded', locale)\n\n setLocale(locale)\n store.dispatch({ type: 'LOCALE_SET', payload: { locale } })\n })\n }\n\n const tryLoadLocales = (locales, i = 0) => {\n if (locales[i]) {\n debug && console.log(' - Attempting to load locale', locales[i])\n\n loadLocale(locales[i]).catch(() => {\n debug && console.log(' - Locale not found', locales[i])\n\n tryLoadLocales(locales, i + 1)\n })\n } else {\n debug && console.log(' - Locales not found', locales)\n }\n }\n\n // Use en as default while we load the proper locale\n setLocale('en')\n\n const [language, substring] = locale.toLowerCase().split('-')\n const locales = []\n\n // Some of the locales that we construct from language and substring are not present\n // in the moment locale folder https://github.com/moment/moment/tree/develop/locale\n // An error will occur when we try to import those\n const notSupported = ['nb-no']\n\n if (substring && language !== substring) {\n const localeWithSubstring = [language, substring].join('-')\n\n if (!notSupported.includes(localeWithSubstring)) {\n locales.push(localeWithSubstring)\n }\n }\n\n locales.push(language)\n\n debug && console.log('Detected browser locale', locale)\n\n // No need to load the default locale\n if (locales.length === 0 || (locales.length === 1 && locales[0] === 'en')) {\n debug && console.log(' - Locale is default en. No need to load any locale')\n\n return\n }\n\n debug && console.log(' - Loading locales in order:', locales)\n\n tryLoadLocales(locales)\n }\n\n}\n","import API from 'shared/lib/api'\n\nAPI.prefix = window.booqableOptions.apiURL + '/api'\n\nexport default API\n","import moment from 'shared/lib/moment'\nimport OperatinRuleUtils from 'shared/utils/operating_rules'\n\nexport const isOverdue = (cart) => {\n // If there is no cart (yet) we return.\n if (!cart) return false\n\n if (!cart.starts_at) return false\n\n // We get the start date from the cart.\n const startsAt = moment(cart.starts_at)\n\n // Check if this time is selectable\n return !OperatinRuleUtils.isTimeSelectable(startsAt)\n}\n\nexport const getLocalCartId = () => {\n return window.booqableOptions?.cart?.id || localStorage.bqCartId\n}\n\nexport default {\n isOverdue\n}\n","import API from 'store/v2/api'\nimport Model from '../models'\nimport { getLocalCartId } from 'shared/utils/cart'\n\nModel.Cart.createAction('FETCH', (params) => {\n if (params == null) {\n params = {}\n }\n\n const cartId = getLocalCartId()\n const provider = window.booqableOptions.storeProvider\n const pathName = document.location.pathname\n\n if (provider) {\n params.provider = provider\n }\n\n if (pathName.startsWith('/preview') || pathName.startsWith('/shop/preview')) {\n params.previewing = true\n }\n\n if (cartId !== 'null') {\n params.id = cartId\n }\n\n return API.get('cart', { ...params, apiVersion: 1 })\n})\n\nModel.Cart.createAction('UPDATE', (params) => {\n if (params == null) {\n params = {}\n }\n\n params.id = getLocalCartId()\n\n return API.put('cart', { ...params, apiVersion: 1 })\n})\n\nModel.Cart.createAction('BOOK', (params) => {\n if (params == null) {\n params = {}\n }\n\n params.id = getLocalCartId()\n\n return API.createResource('cart/book', { ...params, apiVersion: 1 })\n})\n\nModel.Cart.createAction('CLEAR', () => {\n const params = {\n id: getLocalCartId()\n }\n\n return API.createResource('cart/clear', { ...params, apiVersion: 1 })\n})\n\nexport default Model.Cart.actions\n","import SettingUtils from 'shared/utils/settings'\n\nexport default function getBrandingColor () {\n const options = window.booqableOptions\n\n return options?.primaryColor?.length ? options.primaryColor : SettingUtils.get('store.brand_color')\n}\n","import cartActions from 'store/v2/redux/actions/cart'\nimport brandingUtils from 'ui/themes/utils'\nimport TimeUtils from 'shared/utils/time'\nimport Model from 'store/v2/redux/models'\nimport cartUtils from 'shared/utils/cart'\nimport OperatingRuleUtils from 'shared/utils/operating_rules'\nimport getBrandingColor from 'shared/utils/getBrandingColor'\n\nconst initializeDefaultTimes = (store) => {\n const defaultStartTime = TimeUtils.defaultStartTime()\n\n const defaultStopTime = TimeUtils.defaultStopTime({\n defaultStartTime\n })\n\n // If we don't use times and have a fixed start time\n // we use this as the first selectable date, it would\n // not pass validation anyway\n const state = store.getState()\n const startType = state.settings.get('orders.start_type')\n const useTimes = state.settings.get('store.period_type') === 'timeslot_fixed' ?\n true :\n state.settings.get('store.use_times')\n\n let firstTimeSelectable\n\n if (startType === 'fixed' && !useTimes) {\n firstTimeSelectable = defaultStartTime\n } else {\n firstTimeSelectable = OperatingRuleUtils.firstTimeSelectable()\n }\n\n store.dispatch({\n type: 'DEFAULT_TIMES_INITIALIZED',\n payload: {\n defaultStartTime,\n defaultStopTime,\n firstTimeSelectable\n }\n })\n}\n\nconst clientActions = {\n initialize () {\n const store = window.booqableGetStore()\n\n return cartActions.fetch({\n source: 'store',\n embeddable_cart_elements: window.booqableOptions?.embeddableCartElements,\n apiVersion: 1\n }).then(function (action) {\n store.dispatch({ type: 'SETTINGS_INITIALIZED', payload: { settings: action.payload.response.meta.settings } })\n\n // Operating rules\n Model.OperatingRule.hydrate({ operating_rules: action.payload.response.meta.operating_rules })\n\n // Locations\n Model.Location.hydrate({ locations: action.payload.response.meta.locations })\n\n // Overdue cart check\n clientActions.evaluateCartOverdue()\n\n // Get branding color from theme or from settings\n const brandingColor = getBrandingColor()\n\n brandingUtils.insertCSS(brandingColor)\n\n // Do this async to speed up initialization\n new Promise((resolve, _reject) => {\n initializeDefaultTimes(store) && resolve()\n })\n\n return store.dispatch({ type: 'TRANSLATIONS_INITIALIZED' })\n })\n },\n\n setFloatingCart () {\n const store = window.booqableGetStore()\n\n return store.dispatch({\n type: 'SET_FLOATING_CART',\n payload: {\n floatingCart: true\n }\n })\n },\n\n toggleCart (open) {\n const store = window.booqableGetStore()\n\n return store.dispatch({\n type: 'TOGGLE_CART',\n payload: {\n cartOpen: open\n }\n })\n },\n\n toggleModalPicker (open) {\n const store = window.booqableGetStore()\n\n // Legacy picker support\n store.dispatch({\n type: 'TOGGLE_PICKER',\n payload: {\n modalPickerOpen: open\n }\n })\n\n return store.dispatch({\n type: open ? 'CART_OPEN' : 'CART_CLOSE'\n })\n },\n\n setCartScroll (pixels) {\n const store = window.booqableGetStore()\n\n return store.dispatch({\n type: 'SET_CART_SCROLL',\n payload: {\n cartScroll: pixels\n }\n })\n },\n\n setCheckingOut () {\n const store = window.booqableGetStore()\n const state = store.getState()\n\n store.dispatch({\n type: 'SET_CHECKING_OUT'\n })\n\n const cartId = state.client.get('cartId')\n const cart = state.orm.carts.getById(cartId)\n\n let checkoutURL = cart?.checkout_url\n const booqableOptions = window.booqableOptions\n\n if (checkoutURL && booqableOptions.checkoutDomain) {\n // Make sure we enforce SSL\n const domain = checkoutURL.match(/(https|http):\\/\\/(.*)\\/checkout/)[2]\n\n checkoutURL = checkoutURL.replace(domain, booqableOptions.checkoutDomain)\n }\n\n const checkoutURLwithSearch = window.Booqable.decorateLinkForTracking(`${checkoutURL}${window.location.search}`)\n\n store.dispatch({\n type: 'SET_CHECKING_OUT',\n payload: false\n })\n\n window.location = checkoutURLwithSearch\n },\n\n setCartId (id) {\n const store = window.booqableGetStore()\n\n return store.dispatch({\n type: 'SET_CART_ID',\n payload: {\n cartId: id\n }\n })\n },\n\n evaluateCartOverdue () {\n const store = window.booqableGetStore()\n const state = store.getState()\n\n const cartId = state.client.get('cartId')\n const cart = state.orm.carts.getById(cartId)\n\n const overdue = cartUtils.isOverdue(cart)\n\n store.dispatch({ type: 'SET_CART_OVERDUE', payload: overdue })\n\n return overdue\n }\n}\n\nexport default clientActions\n","import Model from '../models'\nimport API from '../../api'\n\nModel.Item.actions.fetchAllOnPage = function (cartId) {\n let id\n\n let products = document.getElementsByClassName('booqable-product')\n\n const itemIds = []\n const specificIds = []\n\n for (const node of Array.from(products)) {\n ({ id } = node.dataset)\n itemIds.push(id)\n }\n\n products = document.getElementsByClassName('booqable-product-button')\n\n for (const node of Array.from(products)) {\n ({ id } = node.dataset)\n specificIds.push(id)\n }\n\n products = document.getElementsByClassName('booqable-product-detail')\n\n for (const node of Array.from(products)) {\n ({ id } = node.dataset)\n specificIds.push(id)\n }\n\n if (specificIds.length > 0) {\n Model.Bundle.actions.fetchAll({ ids: specificIds, cart_id: cartId, apiVersion: 3 })\n Model.ProductGroup.actions.fetchAll({ ids: specificIds, cart_id: cartId, apiVersion: 3, include: 'products' })\n }\n\n if (itemIds.length > 0) {\n Model.Item.actions.fetchAll({ ids: itemIds, cart_id: cartId, apiVersion: 3 })\n }\n}\n\nModel.Item.createAction('FETCH_ALL', (options) => {\n if (options == null) {\n options = {}\n }\n\n return API.post('items', options)\n})\n\nexport default Model.Item.actions\n","import Model from '../models'\nimport API from '../../api'\n\nModel.Bundle.createAction('FETCH_ALL', (options) => {\n if (options == null) {\n options = {}\n }\n\n return API.post('bundles', options)\n})\n\nModel.Bundle.createAction('CONFIGURATION_AVAILABILITY', (options) => {\n return API.get(`bundles/${options.id}/configuration`, options)\n})\n\nexport default Model.Bundle.actions\n","import Model from '../models'\nimport API from '../../api'\nimport { getLocalCartId } from 'shared/utils/cart'\n\nModel.ProductGroup.actions.fetchAllOnPage = function () {\n let id\n let products = document.getElementsByClassName('booqable-product')\n const productIds = []\n\n for (const node of Array.from(products)) {\n // Get product group id\n ({ id } = node.dataset)\n productIds.push(id)\n }\n\n products = document.getElementsByClassName('booqable-product-button')\n\n for (const node of Array.from(products)) {\n // Get product group id\n ({ id } = node.dataset)\n productIds.push(id)\n }\n\n products = document.getElementsByClassName('booqable-product-detail')\n\n for (const node of Array.from(products)) {\n // Get product group id\n ({ id } = node.dataset)\n productIds.push(id)\n }\n\n const cartId = getLocalCartId()\n\n return Model.ProductGroup.actions.fetchAll({ ids: productIds, cart_id: cartId })\n}\n\nModel.ProductGroup.createAction('FETCH_ALL', (options) => {\n if (options == null) {\n options = {}\n }\n\n return API.post('product_groups', options)\n})\n\nModel.ProductGroup.createAction('FETCH_SERVICES', (options) => {\n return API.post('product_groups/services', { ...options, apiVersion: 1 })\n})\n\nexport default Model.ProductGroup.actions\n","export default {\n isSquarespace: () => {\n const iterator = document.createNodeIterator(document.head, NodeFilter.SHOW_COMMENT, filterNone, false)\n let curNode = iterator.nextNode()\n\n while (curNode) {\n if (curNode.nodeValue === ' This is Squarespace. ') {\n return true\n }\n curNode = iterator.nextNode()\n }\n },\n isWix: () => {\n const metaNode = document.querySelector('meta[name=\"generator\"]')\n\n if (metaNode) {\n return metaNode.content === 'Wix.com Website Builder'\n }\n },\n isWeebly: () => {\n if (window._W) {\n return true\n }\n },\n isShopify: () => {\n if (window.Shopify) {\n return true\n }\n }\n}\n\nconst filterNone = () => {\n return NodeFilter.FILTER_ACCEPT\n}\n","import SettingUtils from 'shared/utils/settings'\n\nexport function triggerUserFrameworkBookEvent (productId, quantity) {\n const _store = window.store || window.booqableStore\n const state = _store && _store.getState()\n\n if (quantity === 0) {\n return\n }\n\n const settings = state.client || state.session\n const currencySettings = settings.get('currency')\n const currency = currencySettings.name || currencySettings.get('name')\n\n const line = state.orm.lines.filter((line) => {\n return line.item_id === productId\n }).first()\n const event = quantity > 0 ? 'addToCart' : 'removeFromCart'\n const data = {\n value: line.price_each_in_cents / 100,\n currency,\n items: [{\n item_id: line.product.id,\n item_name: line.product.name,\n quantity: Math.abs(quantity),\n price: line.price_each_in_cents / 100\n }]\n }\n\n window.Booqable._trigger(event, data)\n}\n\nexport function triggerUserFrameworkViewProductEvent (product) {\n const _store = window.store || window.booqableStore\n const state = _store && _store.getState()\n const settings = state.client || state.session\n\n const currencySettings = settings.get('currency')\n const currency = currencySettings.iso_code || currencySettings.get('iso_code')\n\n window.Booqable._trigger('viewProduct', {\n value: product.price_in_cents / 100,\n currency,\n items: [{\n item_id: product.id,\n item_name: product.name,\n quantity: 1,\n price: product.price_each_in_cents / 100\n }]\n })\n}\n\nexport function setUserFrameworkCartData () {\n const _store = window.store || window.booqableStore\n const state = _store && _store.getState()\n\n const cart = state.orm.carts.getById(state.client?.cartId) || state.orm.carts.first()\n const coupon = cart && cart.coupon_id && state.orm.coupons.getById(cart.coupon_id)\n const settings = state.client || state.session\n\n const currencySettings = settings.get('currency')\n const currency = currencySettings.name || currencySettings.get('name')\n\n if (cart) {\n const data = {\n cartId: cart.id,\n orderId: cart.order_id,\n deposit: cart.deposit_in_cents / 100,\n couponDiscount: cart.coupon_discount_in_cents / 100,\n toBePaid: cart.to_be_paid_in_cents / 100,\n totalDueLater: cart.total_due_later_in_cents / 100,\n grandtotal: cart.grand_total_in_cents / 100,\n grandTotalWithTax: cart.grand_total_with_tax_in_cents / 100,\n tax: cart.tax_values.map((taxValue) => taxValue.value_in_cents / 100)\n .reduce((prev, current) => prev + current, 0),\n coupon: coupon && coupon.identifier,\n items: cart.lines.map((line) => {\n line = typeof line === 'string' ? state.orm.lines.getById(line) : line\n\n return {\n item_id: line.item_id,\n item_name: line.title,\n quantity: line.quantity,\n price: line.price_each_in_cents / 100\n }\n }),\n currency: currency || 'USD'\n }\n\n window.Booqable.setCartData(data)\n }\n}\n\nexport function initShopTracking () {\n const Booqable = window.Booqable\n\n const googleAnalytics = SettingUtils.get('store.google_analytics_id')\n const facebookPixel = SettingUtils.get('store.facebook_pixel_id')\n\n if (googleAnalytics) {\n Booqable._setupGoogleAnalyticsDefaultEvents()\n }\n\n if (facebookPixel) {\n Booqable._setupFacebookDefaultEvents()\n }\n\n setUserFrameworkCartData()\n}\n","import styled from 'styled-components'\nimport { size } from 'ui/themes/utils'\n\nimport Icon from 'ui/blocks/Icon'\n\nexport const Period = styled.div`\n cursor: pointer;\n\n ${Icon} {\n font-size: 12px;\n margin: 0 ${size('margin', 'xs')};\n\n &:last-child {\n margin-right: 0;\n }\n }\n`\n\nexport const Details = styled.div`\n display: flex;\n flex-flow: row nowrap;\n\n justify-content: space-between;\n align-items: center;\n\n font-size: 14px;\n text-align: left;\n`\n\nexport const Detail = styled.div``\n\nexport const Location = styled.p`\n font-size: 13px !important;\n font-weight: 500 !important;\n\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n`\n\nexport const DateTime = styled.p`\n font-size: 12px !important;\n font-weight: 300 !important;\n\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n &:first-letter {\n text-transform: uppercase;\n }\n`\n\nexport const ChoosePeriod = styled.p`\n width: 100%;\n text-align: center;\n font-size: 14px !important;\n`\n\nconst DatesBase = styled.div`\n position: relative;\n\n display: flex;\n align-items: center;\n\n padding: ${size('padding', 'sm')} ${size('padding', 'md')} !important;\n`\n\nexport const WithDates = styled(DatesBase)`\n ${Details} {\n width: calc(100% - 12px - (1.5 * ${size('padding', 'md')}));\n }\n\n ${Icon} {\n &:last-child {\n position: absolute;\n\n top: 50%;\n right: ${size('padding', 'md')};\n\n transform: translateY(-50%);\n }\n }\n`\n\nexport const NoDates = styled(DatesBase)`\n ${Icon} {\n &:last-child {\n position: absolute;\n\n top: 50%;\n right: ${size('padding', 'md')};\n\n transform: translateY(-50%);\n }\n }\n`\n\nexport const Placeholder = styled.p`\n font-size: 14px !important;\n`\n","import {\n Period,\n Details,\n Detail,\n Location,\n DateTime,\n NoDates,\n WithDates,\n ChoosePeriod,\n Placeholder\n} from './styles'\n\nPeriod.Details = Details\nPeriod.Detail = Detail\nPeriod.Location = Location\nPeriod.DateTime = DateTime\nPeriod.NoDates = NoDates\nPeriod.WithDates = WithDates\nPeriod.ChoosePeriod = ChoosePeriod\nPeriod.Placeholder = Placeholder\n\nexport default Period\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Components\nimport BPeriod from '../../blocks/Period'\nimport Icon from 'ui/components/Icon'\n\n// Libraries\nimport { withTranslation } from 'shared/utils/withTranslation'\n\n// Shared\nimport Format from 'shared/utils/format'\nimport ClientActions from 'store/v2/redux/actions/client'\n\nexport class Period extends Component {\n static displayName = 'Period'\n\n static propTypes = {\n cart: PropTypes.any,\n hasDates: PropTypes.bool,\n useTimes: PropTypes.bool,\n timeFormat: PropTypes.any,\n locations: PropTypes.object,\n autoOpenedModal: PropTypes.bool,\n onAutoModal: PropTypes.func,\n open: PropTypes.bool,\n modalOpen: PropTypes.bool,\n togglePicker: PropTypes.func,\n t: PropTypes.func\n }\n\n componentDidUpdate = (prevProps) => {\n const { autoOpenedModal, onAutoModal, hasDates, open, modalOpen } = this.props\n\n if (!autoOpenedModal && !prevProps.open && open && !hasDates && !modalOpen) {\n onAutoModal(() => {\n this.props.togglePicker(true)\n })\n }\n }\n\n handleOpenModal = () => {\n this.props.togglePicker(true)\n }\n\n render () {\n const { cart, locations, useTimes, hasDates, t } = this.props\n const hasLocations = locations.size() > 1\n\n return (\n \n {hasDates ?\n (\n \n \n \n {hasLocations && (\n \n {cart && cart.start_location_id ? locations.getById(cart.start_location_id)?.name : null}\n \n )}\n \n {`${Format.date(\n cart ? cart.starts_at : undefined,\n 'date'\n )}${useTimes ?\n `, ${Format.date(\n cart ? cart.starts_at : undefined,\n this.props.timeFormat\n )}` :\n ''}`}\n \n \n \n \n {hasLocations && (\n \n {cart && cart.stop_location_id ? locations.getById(cart.stop_location_id)?.name : null}\n \n )}\n \n {`${Format.date(\n cart ? cart.stops_at : undefined,\n 'date'\n )}${useTimes ?\n `, ${Format.date(\n cart ? cart.stops_at : undefined,\n this.props.timeFormat\n )}` :\n ''}`}\n \n \n \n \n \n ) :\n (\n \n {t('user.store.select_a_period')}\n \n \n )}\n \n )\n }\n}\n\nconst mapStateToProps = (state, props) => {\n let timeFormat\n\n if (state.settings.get('dates.use_am_pm')) {\n timeFormat = 'hh:mm A'\n } else {\n timeFormat = 'HH:mm'\n }\n\n return {\n locale: state.client.locale,\n timeFormat,\n useTimes: state.settings.get('store.use_times'),\n open: state.client.cartOpen,\n modalOpen: state.client.modalPickerOpen\n }\n}\n\nconst mapDispatchToProps = (dispatch, props) => {\n return {\n togglePicker: ClientActions.toggleModalPicker\n }\n}\n\nconst reduxComponent = reduxConnect(mapStateToProps, mapDispatchToProps)(Period)\n\nexport default withTranslation('user')(reduxComponent)\n","// React\nimport React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport uiConnect from 'shared/redux/interface'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Shared\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport { triggerUserFrameworkBookEvent } from 'shared/utils/userFrameworkEvents'\nimport cartActions from 'store/v2/redux/actions/cart'\nimport Format from 'shared/utils/format'\n\nclass Line extends React.Component {\n static displayName = 'Line'\n\n static propTypes = {\n updateUI: PropTypes.func,\n line: PropTypes.any,\n useAvailability: PropTypes.bool,\n hasDates: PropTypes.any,\n decreaseQty: PropTypes.func,\n increaseQty: PropTypes.func,\n currency: PropTypes.any,\n showPrices: PropTypes.any,\n hideProductAvailabilityQuantities: PropTypes.bool,\n remove: PropTypes.func,\n ui: PropTypes.shape({\n quantity: PropTypes.number,\n deleting: PropTypes.bool\n }),\n style: PropTypes.shape({\n opacity: PropTypes.number,\n transform: PropTypes.string\n }),\n t: PropTypes.func\n }\n\n componentDidMount = () => {\n const { line, updateUI } = this.props\n\n updateUI({ quantity: line.quantity })\n }\n\n componentDidUpdate = (prevProps) => {\n const { line, updateUI } = this.props\n\n if (line && prevProps.line && line.quantity !== prevProps.line.quantity) {\n updateUI({ quantity: line.quantity })\n }\n }\n\n render () {\n const {\n style,\n line,\n currency,\n hasDates,\n useAvailability,\n hideProductAvailabilityQuantities,\n showPrices,\n decreaseQty,\n remove,\n increaseQty,\n ui,\n t\n } = this.props\n\n const available = line.available_quantity >= ui.quantity\n const statusClass = available ? 'bq-available' : 'bq-unavailable'\n const titleClass = useAvailability ? 'bq-small' : 'bq-large'\n\n if (line.product_type === 'service') return null\n\n return (\n \n {line?.photo_url && }\n {!line?.photo_url && (\n \n \n \n )}\n
\n
{line.title}
\n {hasDates && useAvailability && (\n \n {!hideProductAvailabilityQuantities && (\n \n \n {line.available_quantity}\n {' '}\n \n {t('user.store.available')}\n \n )}\n {hideProductAvailabilityQuantities &&\n t(available ? 'user.store.available' : 'user.store.unavailable')}\n \n )}\n
\n \n {ui.quantity}\n \n
\n
\n
\n {showPrices && !line.discountable && (\n

\n \n {t('user.store.not_discountable_hint')}\n

\n )}\n {showPrices && line.display_price_in_cents > 0 && (\n

{Format.money(line.display_price_in_cents, currency)}

\n )}\n
\n \n \n )\n }\n}\n\nconst uiToProps = {\n persist: true,\n state: {\n quantity: 0,\n deleting: false\n }\n}\n\nconst mapStateToProps = (state, props) => {\n return {\n currency: state.client.currency.toJS(),\n useAvailability: state.settings.get('store.use_availability') && props.line.tracking_type !== 'none',\n hideProductAvailabilityQuantities: state.settings.get('store.hide_product_availability_quantities'),\n showPrices: state.settings.get('store.use_prices')\n }\n}\n\nconst mapDispatchToProps = (_dispatch, props) => {\n const book = function (quantity) {\n if (quantity === 0) {\n props.updateUI({ deleting: true })\n }\n\n if (quantity === -1) {\n return\n }\n\n props.updateUI({ quantity })\n\n return cartActions\n .book({\n item_id: props.line.item_id,\n line_id: props.line.id,\n quantity,\n type: 'set',\n apiVersion: 1\n })\n .then(() => {\n const quantityChange = quantity - props.line.quantity\n\n triggerUserFrameworkBookEvent(props.line.item_id, quantityChange)\n })\n }\n\n return {\n increaseQty: () => {\n const newQuantity = props.ui.quantity + 1\n\n return book(newQuantity)\n },\n decreaseQty: () => {\n const newQuantity = props.ui.quantity - 1\n\n return book(newQuantity)\n },\n remove: () => book(0)\n }\n}\n\nexport default compose(\n withTranslation('user'),\n uiConnect('Line', uiToProps),\n reduxConnect(mapStateToProps, mapDispatchToProps)\n)(Line)\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nexport default class Delay extends React.Component {\n static displayName = 'Delay'\n\n static propTypes = {\n initial: PropTypes.number,\n children: PropTypes.any,\n value: PropTypes.number,\n period: PropTypes.number\n }\n\n constructor (props) {\n super(props)\n\n this.state = {\n value: this.props.initial\n }\n }\n\n static getDerivedStateFromProps (props, state) {\n return (props.value === state.value) ? null : { value: props.value }\n }\n\n componentDidMount = () => {\n const setProps = () => this.setState((prevState, props) => {\n const { value } = props\n\n // update state only if the value has changed\n return (prevState.value === value) ? null : { value }\n })\n\n return setTimeout(setProps, this.props.period)\n }\n\n render = () => {\n return this.props.children(this.state.value)\n }\n}\n","// React\nimport React from 'react'\nimport PropTypes from 'prop-types'\n\nconst Logo = ({ width = '52px', height = '28px' }) => (\n \n \n \n \n \n \n \n \n \n)\n\nLogo.propTypes = {\n width: PropTypes.string,\n height: PropTypes.string\n}\n\nexport default Logo\n","// React\nimport React from 'react'\nimport PropTypes from 'prop-types'\n\n// Hooks\nimport { useTranslation } from 'shared/utils/useTranslation'\n\n// Components\nimport Logo from 'shop-components/components/MiniCart/components/Logo'\n\n// Shared\nimport { featureEnabled, FeatureFlags } from 'shared/utils/features'\n\nexport const PoweredBy = ({ logoWidth }) => {\n const { t } = useTranslation('user')\n\n let title = t('user.powered_by_short')\n let href = 'https://booqable.com/?source=Shop&campaign=Cart'\n\n if (featureEnabled(FeatureFlags.EQUIPMENT_RENTAL_SOFTWARE_LINK)) {\n title = t('user.powered_by_equipment_rental_long')\n href = 'https://booqable.com/equipment-rental-software/?source=Shop&campaign=Cart'\n }\n\n return (\n \n \n {t('user.powered_by_short')}\n \n )\n}\n\nPoweredBy.propTypes = {\n logoWidth: PropTypes.string\n}\n","// React\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport Line from './line'\nimport Delay from 'store/v2/react/components/delay'\nimport { PoweredBy } from 'shop-components/components/PoweredBy'\n\n// Libraries\nimport { Motion, spring } from 'react-motion'\n\n// Shared\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport clientActions from 'store/v2/redux/actions/client'\nimport ReactCSSTransitionGroup from 'shared/lib/react_css_transition_group'\n\nconst easing = { stiffness: 150, damping: 15 }\n\nclass Lines extends React.Component {\n static displayName = 'Lines'\n\n static propTypes = {\n className: PropTypes.string,\n hasDates: PropTypes.bool,\n cannotCheckout: PropTypes.bool,\n lines: PropTypes.object,\n toggleCart: PropTypes.func,\n nonServiceCartLinesCount: PropTypes.number,\n showPoweredBy: PropTypes.bool,\n t: PropTypes.func\n }\n\n componentWillUnmount () {\n return clientActions.setCartScroll(0)\n }\n\n render () {\n const { lines, hasDates, cannotCheckout, className, toggleCart, nonServiceCartLinesCount, showPoweredBy, t } = this.props\n\n return (\n
\n \n {hasDates && cannotCheckout && (\n
\n \n {t('user.store.not_all_products_available')}\n
\n )}\n
\n {!!nonServiceCartLinesCount && (\n
    \n \n {lines.map((line, i) => (\n \n {(delayed) => (\n \n {(value) => (\n \n )}\n \n )}\n \n ))}\n \n
\n )}\n {!nonServiceCartLinesCount && (\n
\n {t('user.store.cart_empty')}\n \n
\n )}\n {!nonServiceCartLinesCount && showPoweredBy && (\n
\n \n
\n )}\n
\n )\n }\n}\n\nconst mapStateToProps = (state, props) => {\n const lines = state.orm.lines.getAll({ id: props.cart != null ? props.cart.lines : undefined })\n const nonServiceCartLinesCount = lines.pluck('product_type').filter((type) => type !== 'service').length\n const showPoweredBy = state.settings.get('store.show_powered_by')\n\n return {\n cartOpen: state.client.cartOpen,\n lines,\n nonServiceCartLinesCount,\n className: 'active',\n showPoweredBy\n }\n}\n\nexport default compose(withTranslation('user'), reduxConnect(mapStateToProps))(Lines)\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { withTranslation } from 'shared/utils/withTranslation'\n\nimport FormatUtils from 'shared/utils/format'\n\nexport class ProductPrice extends Component {\n static displayName = 'ProductPrice'\n\n static propTypes = {\n chargeLabel: PropTypes.string,\n priceInCents: PropTypes.number,\n currency: PropTypes.object,\n show: PropTypes.bool,\n productType: PropTypes.string,\n priceType: PropTypes.string,\n t: PropTypes.func\n }\n\n static defaultProps = {\n productType: 'rental'\n }\n\n render = () => {\n const { priceInCents, chargeLabel, productType, priceType, t } = this.props\n\n if (this.props.show) {\n return (\n \n {(priceType !== 'fixed' || productType !== 'rental') && (\n \n {(productType === 'rental' || productType === 'bundle') && chargeLabel}\n {productType === 'consumable' && {t('user.store.buy')}}\n \n )}\n \n {FormatUtils.money(priceInCents, this.props.currency)}\n \n \n )\n } else {\n return false\n }\n }\n}\n\nconst mapStateToProps = (state, props) => {\n const usePrices = state.settings.get('store.use_prices')\n const hasPrice = props.priceInCents != null && props.priceInCents >= 0\n\n return {\n currency: state.client.currency && state.client.currency.toJS(),\n show: usePrices && hasPrice\n }\n}\n\nconst mapDispatchToProps = (dispatch, props) => {\n return {}\n}\n\nconst reduxComponent = reduxConnect(mapStateToProps, mapDispatchToProps)(ProductPrice)\n\nexport default withTranslation('user')(reduxComponent)\n","import styled, { css } from 'styled-components'\nimport { fontSize, fontWeight, size } from 'ui/themes/utils'\n\nexport const Services = styled.div`\n &&& {\n max-height: 180px;\n overflow-y: auto;\n padding-top: 16px;\n\n /* So scroll bar lines up with products scroll bar */\n margin-right: -15px;\n padding-right: 15px;\n\n /* Shadows to indiciate scroll */\n background: linear-gradient(#ffffff 33%, rgba(255, 255, 255, 0)),\n linear-gradient(rgba(255, 255, 255, 0), #ffffff 66%) 0 100%,\n radial-gradient(farthest-side at 50% 0, rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0)),\n radial-gradient(farthest-side at 50% 100%, rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0)) 0 100%;\n background-color: #ffffff;\n background-repeat: no-repeat;\n background-attachment: local, local, scroll, scroll;\n background-size: 100% 30px, 100% 30px, 100% 10px, 100% 10px;\n }\n`\n\nexport const Service = styled.div`\n &&& {\n display: flex;\n justify-content: space-between;\n padding-top: 8px;\n\n ${({ disabled }) => disabled && css`\n opacity: 0.7;\n `}\n }\n`\n\nexport const Label = styled.span`\n &&& {\n font-size: ${fontSize('md')};\n font-weight: ${fontWeight('lighter')};\n\n margin-right: ${size('margin', 'xs')};\n }\n`\n","import { Services, Service, Label } from './styles'\n\nServices.Service = Service\nServices.Label = Label\n\nexport default Services\n","// React\nimport React, { useCallback, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Components\nimport ProductPrice from 'store/v2/react/components/product_price'\nimport Switch from 'ui/components/Switch'\nimport BServices from 'store/blocks/Services'\n\n// Shared\nimport { triggerUserFrameworkBookEvent } from 'shared/utils/userFrameworkEvents'\nimport CartActions from 'store/v2/redux/actions/cart'\nimport { Settings as SettingsUtils } from 'back_office/v2/utils/utils'\n\nconst Service = ({ index, line, service, inCart, hasPrice, toggleService }) => {\n const [loading, setLoading] = useState(false)\n const [checked, setChecked] = useState(inCart)\n\n const handleChangeService = useCallback(() => {\n const value = !checked\n\n setLoading(true)\n toggleService(value).then(() => {\n if (checked !== value) {\n setChecked(value)\n }\n }).catch((error) => {\n console.error(error)\n }).finally(() => {\n setLoading(false)\n })\n }, [checked])\n\n return (\n \n \n {service.name}\n {' '}\n {hasPrice && SettingsUtils.get('store.use_prices') && (\n \n (\n \n )\n \n )}\n \n \n \n )\n}\n\nService.displayName = 'Service'\n\nService.propTypes = {\n index: PropTypes.number,\n line: PropTypes.object,\n service: PropTypes.object,\n inCart: PropTypes.bool,\n hasPrice: PropTypes.bool,\n toggleService: PropTypes.func\n}\n\nconst mapStateToProps = (_state, props) => {\n const hasPrice =\n props.service?.price_in_cents >= 0 &&\n props.service?.price_in_cents !== null &&\n props.service?.price_type !== 'none' &&\n props.service?.price_type !== null\n\n return {\n line: props.lines\n .getAll({ item_id: props.service.id })\n .reverse()\n .first(),\n checked: props.inCart,\n hasPrice\n }\n}\n\nconst mapDispatchToProps = (_dispatch, props) => {\n const book = (quantity) => {\n return CartActions.book({\n item_id: props.service.id,\n quantity,\n type: 'set',\n apiVersion: 1\n }).then(() => {\n const quantityChange = quantity === 0 ? -1 : 1\n\n triggerUserFrameworkBookEvent(props.service.id, quantityChange)\n })\n }\n\n return {\n toggleService: (value) => {\n if (value) {\n return book(1)\n } else {\n return book(0)\n }\n }\n }\n}\n\nexport default reduxConnect(mapStateToProps, mapDispatchToProps)(Service)\n","// React\nimport React, { useCallback, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Components\nimport Service from './Service'\nimport BServices from 'store/blocks/Services'\n\n// Shared\nimport ProductGroupActions from 'store/v2/redux/actions/product_group'\n\nconst Services = ({ cart, lines, services, items, fetchServices }) => {\n useEffect(() => {\n if (cart) {\n fetchServices(cart.id)\n }\n }, [cart?.id, cart?.starts_at, cart?.stops_at])\n\n const isServiceInCart = useCallback(\n (serviceId) => {\n return items.includes(serviceId)\n },\n [items]\n )\n\n return (\n \n {services.map((service, index) => {\n const inCart = isServiceInCart(service.id)\n\n return \n })}\n \n )\n}\n\nServices.displayName = 'Services'\n\nServices.propTypes = {\n cart: PropTypes.object,\n lines: PropTypes.object,\n services: PropTypes.object,\n items: PropTypes.object,\n fetchServices: PropTypes.func\n}\n\nconst mapStateToProps = (state, props) => {\n const lines = state.orm.lines.getAll({ id: props.cart != null ? props.cart.lines : undefined })\n const items = lines.map((line) => line.item_id)\n const enabledServices = state.orm.product_groups.getAll({ product_type: 'service', show_in_store: true })\n const services =\n state.orm.products\n .getAll({ product_type: 'service', product_group_id: enabledServices.pluck('id') })\n .sortBy((product) => enabledServices.getById(product.product_group_id)?.sorting_weight)\n\n return {\n lines,\n services,\n items\n }\n}\n\nconst mapDispatchToProps = (_dispatch) => ({\n fetchServices: (cartId) => ProductGroupActions.fetchServices({ cart_id: cartId })\n})\n\nexport default reduxConnect(mapStateToProps, mapDispatchToProps)(Services)\n","import styled from 'styled-components'\nimport { color } from 'ui/themes/utils'\n\nconst Overdue = styled.div`\n margin-top: 15px !important;\n color: ${color('Accent6/Base')};\n line-height: 1.2rem;\n i {\n margin-right: 5px;\n }\n`\n\nexport default Overdue\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\n\n// Libraries\nimport { withTranslation } from 'shared/utils/withTranslation'\n\n// Components\nimport BOverdue from 'store/v2/react/scenes/cart/blocks/Overdue'\n\n// Shared\n\n/**\n * Overdue notification\n *\n * @example\n * \n */\n\nexport class Overdue extends Component {\n static displayName = 'Overdue'\n\n static propTypes = {\n show: PropTypes.bool\n }\n\n render = () => {\n return this.props.show && (\n \n \n {this.props.t('user.checkout.dates_in_past')}\n \n )\n }\n}\n\nexport default withTranslation('user')(Overdue)\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport Period from 'store/v2/react/scenes/cart/period'\nimport Lines from 'store/v2/react/scenes/cart/lines'\nimport Services from 'store/components/Services'\nimport Overdue from 'store/v2/react/scenes/cart/components/Overdue'\nimport Tooltip from 'ui/components/Tooltip'\nimport { PoweredBy } from 'shop-components/components/PoweredBy'\n\n// Libraries\nimport { StyleSheetManager } from 'styled-components'\n\n// Shared\nimport ClientActions from 'store/v2/redux/actions/client'\nimport Format from 'shared/utils/format'\nimport ReactCSSTransitionGroup from 'shared/lib/react_css_transition_group'\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport previewUrlComposer from 'shared/utils/previewUrlComposer'\nimport { shouldForwardProp } from 'shared/utils/shouldForwardProp'\n\nclass FloatingCart extends Component {\n static displayName = 'FloatingCart'\n\n static propTypes = {\n cartOpen: PropTypes.bool,\n toggleCart: PropTypes.func,\n cart: PropTypes.object,\n locations: PropTypes.object,\n hasDates: PropTypes.bool,\n cannotCheckout: PropTypes.bool,\n showPrices: PropTypes.bool,\n showPoweredBy: PropTypes.bool,\n totalPriceAttribute: PropTypes.string,\n currency: PropTypes.object,\n checkingOut: PropTypes.bool,\n setCheckingOut: PropTypes.func,\n viewCartHref: PropTypes.string,\n checkoutButtonValid: PropTypes.bool,\n cartOverdue: PropTypes.bool,\n inPortal: PropTypes.bool,\n nonServiceCartLinesCount: PropTypes.number,\n t: PropTypes.func\n }\n\n state = {\n autoOpenedModal: false\n }\n\n onAutoModal = (callback) => {\n // Needs to live in parent state as Period gets unmounted\n // on some transitions losing state\n this.setState({ autoOpenedModal: true }, callback)\n }\n\n renderCheckoutButton = () => {\n const { checkoutButtonValid, hasDates, cannotCheckout, setCheckingOut, viewCartHref, t } = this.props\n const checkoutButtonClass = checkoutButtonValid ? 'bq-enabled' : 'bq-disabled'\n\n const checkoutButton = (\n \n )\n\n let tooltipContent = t('user.store.select_a_period')\n\n if (hasDates && cannotCheckout) {\n tooltipContent = t('user.store.not_all_products_available')\n }\n\n return (\n
\n {viewCartHref && (\n \n {t('user.store.view_cart')}\n \n )}\n {checkoutButtonValid && (\n checkoutButton\n )}\n {!checkoutButtonValid && (\n \n {checkoutButton}\n \n )}\n
\n )\n }\n\n render () {\n const { autoOpenedModal } = this.state\n const {\n cart,\n cartOpen,\n toggleCart,\n cartOverdue,\n cannotCheckout,\n checkingOut,\n hasDates,\n showPrices,\n showPoweredBy,\n currency,\n totalPriceAttribute,\n inPortal,\n locations,\n nonServiceCartLinesCount,\n t\n } = this.props\n const floatingCartClasses = []\n\n floatingCartClasses.push(cartOpen ? 'open' : 'closed')\n\n if (inPortal) {\n floatingCartClasses.push('portal')\n }\n\n return (\n \n \n
\n \n
{t('user.store.my_order')}
\n \n \n \n
\n \n \n {nonServiceCartLinesCount > 0 && (\n
\n {cart && (\n \n \n \n )}\n {showPrices && (\n
\n
\n {t('user.store.subtotal')}\n {Format.money(cart?.get(totalPriceAttribute), currency)}\n
\n\n {cart !== null && cart.get('deposit_in_cents') !== 0 && (\n
\n {t('user.store.security_deposit')}\n {Format.money(cart.get('deposit_in_cents'), currency)}\n
\n )}\n\n \n
\n )}\n {checkingOut && (\n
\n
\n
\n )}\n {!checkingOut && this.renderCheckoutButton()}\n {showPoweredBy && (\n
\n \n
\n )}\n
\n )}\n \n
\n \n )\n }\n}\n\nconst mapStateToProps = (state, props) => {\n let cannotCheckout, totalPriceAttribute\n\n const slug = state.client.getIn(['company', 'slug'])\n const cart = state.orm.carts.getById(state.client.cartId)\n\n const cartLines = state.orm.lines.getById(cart.lines)\n const nonServiceCartLinesCount = cartLines.pluck('product_type').filter((type) => type !== 'service').length\n\n const cartOverdue = state.client.cartOverdue\n\n const searchParams = new URLSearchParams(window.location.search)\n const href = window.booqableOptions.preview ?\n previewUrlComposer({ slug, themeId: searchParams.get('theme_id'), key: 'templates/cart.json' }) :\n props.href || cart?.cart_url\n\n if (state.settings.get('pricing.tax_strategy') === 'inclusive') {\n totalPriceAttribute = 'grand_total_with_tax_in_cents'\n } else {\n totalPriceAttribute = 'grand_total_in_cents'\n }\n\n const hasDates = !!(cart?.starts_at && cart?.stops_at)\n const useAvailability = state.settings.get('store.use_availability')\n\n // Check if we need to calculate if use can checkout\n if (useAvailability) {\n cannotCheckout =\n state.orm.lines\n .getAll({\n id: cart?.lines,\n can_checkout: false\n })\n .size() > 0\n } else {\n cannotCheckout = false\n }\n\n // Make sure to typecast to boolean\n const checkoutButtonValid = !!(nonServiceCartLinesCount && hasDates && !cannotCheckout && !cartOverdue)\n\n return {\n cart,\n nonServiceCartLinesCount,\n cartOpen: state.client.cartOpen,\n cartScroll: state.client.cartScroll,\n currency: state.client.currency?.toJS(),\n totalPriceAttribute,\n checkoutButtonValid,\n hasDates,\n checkingOut: state.client.checkingOut,\n cannotCheckout,\n showPrices: state.settings.get('store.use_prices'),\n showPoweredBy: state.settings.get('store.show_powered_by'),\n cartOverdue,\n locations: state.orm.locations.getAll().sort('name'),\n viewCartHref: href\n }\n}\n\nconst mapDispatchToProps = () => {\n return {\n toggleCart: (cartOpen) => {\n return ClientActions.toggleCart(cartOpen)\n },\n setCheckingOut: (e) => {\n e.preventDefault()\n\n if (ClientActions.evaluateCartOverdue()) return\n\n ClientActions.setCheckingOut()\n }\n }\n}\n\nexport default compose(reduxConnect(mapStateToProps, mapDispatchToProps), withTranslation('user'))(FloatingCart)\n","import styled, { css } from 'styled-components'\nimport { color, size, fontSize, fontWeight } from 'ui/themes/utils'\n\nimport Div from 'ui/elements/Div'\nimport Button from 'ui/elements/Button'\n\nexport const Backdrop = styled(Div)`\n position: fixed;\n\n display: flex;\n justify-content: center;\n\n top: 0;\n left: 0;\n\n width: 100vw;\n height: 100%;\n\n /* 99 = 0.6 opacity */\n background: ${color('Accent2/Controlvariant1')}99;\n\n opacity: ${({ state }) => (state === 'entered' ? 1 : 0)};\n\n padding: ${size('padding', 'lg')};\n\n font-family: ${(props) => props.theme.font.body};\n\n transition: 0.25s all;\n\n z-index: 10000000;\n\n box-sizing: border-box;\n`\n\nexport const Body = styled(Div)`\n padding: ${size('padding', 'md')};\n\n @media screen and (max-height: 562px) {\n max-height: none;\n }\n`\n\nexport const Header = styled(Div)`\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n\n padding: ${size('padding', 'md')};\n\n &:empty {\n padding: 0;\n }\n`\n\nexport const Footer = styled(Div)`\n display: flex;\n\n padding: ${size('padding', 'md')};\n\n background-color: ${color('white')};\n\n box-shadow: 0 -4px 10px 0 rgba(0, 0, 0, 0.18);\n\n z-index: 100;\n\n position: sticky;\n bottom: 0;\n left: 0;\n right: 0;\n`\n\nexport const Container = styled(Div)`\n max-width: 825px;\n max-height: 100%;\n width: 100%;\n\n background: ${color('white')};\n\n box-shadow: 0 7px 10px 0 rgba(0, 0, 0, 0.18);\n\n border-radius: ${size('borderRadius')};\n\n margin: auto 0;\n\n opacity: 0;\n\n transform: translateY(15%);\n\n position: relative;\n\n ${({ state }) => state === 'entered' && css`\n opacity: 1;\n transform: translateY(0);\n `}\n\n overflow-y: auto;\n transition: all 0.25s ease;\n`\n\nexport const Close = styled(Button)`\n appearance: none;\n\n background: transparent;\n\n border: none;\n\n position: absolute;\n\n top: ${size('padding', 'sm')};\n right: ${size('padding', 'sm')};\n\n opacity: 0.6;\n\n padding: 0;\n\n font-weight: ${fontWeight('bold')};\n font-size: ${fontSize('lg')};\n\n cursor: pointer;\n\n z-index: 99;\n\n transition: opacity 0.3s ease-in;\n\n &:hover, &:focus {\n opacity: 1;\n }\n`\n","/**\n * @fileoverview A customizable Modal component with header, body, and footer subcomponents.\n * @module Modal\n */\n\n// React\nimport React, { useRef, forwardRef } from 'react'\nimport PropTypes from 'prop-types'\n\n// Libraries\nimport { Transition, config } from 'react-transition-group'\n\n// Hooks\nimport { useLockScroll } from 'shared/utils/useLockScroll'\n\n// Components\nimport PortalWrapper from 'ui/components/PortalWrapper'\nimport Icon from 'ui/components/Icon'\nimport H3 from 'ui/elements/H3'\nimport { Backdrop, Body, Container, Header, Footer, Close } from 'store/blocks/Modal'\n\n/**\n * @typedef {Object} ModalModifiers\n * @property {string} [backdrop] - Custom CSS class for the backdrop.\n * @property {string} [container] - Custom CSS class for the container.\n */\n\n/**\n * A customizable Modal component that can be opened and closed.\n * It uses react-transition-group for enter/exit animations\n * and custom hooks for handling outside clicks and locking the body scroll.\n *\n * @component\n * @param {Object} props - The properties that define the Modal's behavior and content.\n * @param {boolean} props.open - Determines whether the modal is visible.\n * @param {Function} [props.onClose] - Callback function to be called when the modal should be closed.\n * @param {ModalModifiers} [props.modifiers] - Custom CSS classes for styling different parts of the modal.\n * @param {React.ReactNode} props.children - The content to be rendered inside the modal.\n *\n * @example\n * // Named import\n * import { Modal, ModalHeader, ModalBody, ModalFooter } from 'ui/components/Modal'\n *\n * \n * Modal Title\n * Modal Content\n * \n * \n * \n * \n *\n * @example\n * // Namespace import\n * import * as Modal from 'ui/components/Modal'\n *\n * \n * Modal Title\n * Modal Content\n * \n * \n * \n * \n */\nexport const Modal = ({ open, onClose, modifiers, children }) => {\n // disables animations when in test mode\n config.disabled = !!window.testMode\n\n const nodeRef = useRef(null)\n\n useLockScroll(open)\n\n const handleBackdropClick = (event) => {\n if (event.target === event.currentTarget) {\n onClose?.()\n }\n }\n\n return (\n \n {(state) => (\n \n \n \n {children}\n \n \n \n )}\n \n )\n}\n\nModal.propTypes = {\n open: PropTypes.bool.isRequired,\n onClose: PropTypes.func,\n modifiers: PropTypes.shape({\n backdrop: PropTypes.string,\n container: PropTypes.string\n }),\n children: PropTypes.node\n}\n\n/**\n * The close button for the Modal.\n *\n * @component\n * @param {Object} props - The properties for the ModalClose.\n * @param {Function} props.onClose - Callback function to be called when the close button is clicked.\n *\n * @example\n * // Named import\n * import { ModalClose } from 'ui/components/Modal'\n *\n * \n *\n * @example\n * // Namespace import\n * import * as Modal from 'ui/components/Modal'\n *\n * \n */\nexport const ModalClose = forwardRef(({ onClose }, ref) => (\n \n \n \n))\n\nModalClose.displayName = 'ModalClose'\n\nModalClose.propTypes = {\n onClose: PropTypes.func\n}\n\n/**\n * The header section of the Modal.\n *\n * @component\n * @param {Object} props - The properties for the ModalHeader.\n * @param {React.ReactNode} props.children - The content to be rendered inside the header.\n * @param {string} [props.modifiers] - Custom CSS class for styling the header.\n *\n * @example\n * // Named import\n * import { ModalHeader } from 'ui/components/Modal'\n *\n * Modal Title\n *\n * @example\n * // Namespace import\n * import * as Modal from 'ui/components/Modal'\n *\n * Modal Title\n */\nexport const ModalHeader = forwardRef(({ children, ...props }, ref) => (\n
\n {children}\n
\n))\n\nModalHeader.displayName = 'ModalHeader'\n\nModalHeader.propTypes = {\n children: PropTypes.node\n}\n\n/**\n * The title component for the Modal header.\n *\n * @component\n * @param {Object} props - The properties for the ModalTitle.\n * @param {React.ReactNode} props.children - The content to be rendered as the modal title.\n *\n * @example\n * // Named import\n * import { ModalTitle } from 'ui/components/Modal'\n *\n * Welcome to Our Application\n *\n * @example\n * // Namespace import\n * import * as Modal from 'ui/components/Modal'\n *\n * Welcome to Our Application\n */\nexport const ModalTitle = ({ children, ...props }) =>

{children}

\n\nModalTitle.propTypes = {\n children: PropTypes.node\n}\n\n/**\n * The body section of the Modal.\n *\n * @component\n * @param {Object} props - The properties for the ModalBody.\n * @param {React.ReactNode} props.children - The content to be rendered inside the body.\n * @param {string} [props.modifiers] - Custom CSS class for styling the body.\n *\n * @example\n * // Named import\n * import { ModalBody } from 'ui/components/Modal'\n *\n * \n *

This is the main content of the modal.

\n *
\n *\n * @example\n * // Namespace import\n * import * as Modal from 'ui/components/Modal'\n *\n * \n *

This is the main content of the modal.

\n *
\n */\nexport const ModalBody = forwardRef(({ children, ...props }, ref) => (\n \n {children}\n \n))\n\nModalBody.displayName = 'ModalBody'\n\nModalBody.propTypes = {\n children: PropTypes.node\n}\n\n/**\n * The footer section of the Modal.\n *\n * @component\n * @param {Object} props - The properties for the ModalFooter.\n * @param {React.ReactNode} props.children - The content to be rendered inside the footer.\n * @param {string} [props.modifiers] - Custom CSS class for styling the footer.\n *\n * @example\n * // Named import\n * import { ModalFooter } from 'ui/components/Modal'\n *\n * \n * \n * \n * \n *\n * @example\n * // Namespace import\n * import * as Modal from 'ui/components/Modal'\n *\n * \n * \n * \n * \n */\nexport const ModalFooter = forwardRef(({ children, ...props }, ref) => (\n
\n {children}\n
\n))\n\nModalFooter.displayName = 'ModalFooter'\n\nModalFooter.propTypes = {\n children: PropTypes.node\n}\n","import { useLayoutEffect } from 'react'\n\nexport const useLockScroll = (open) => {\n useLayoutEffect(() => {\n const originalStyle = window.getComputedStyle(document.body).overflow\n\n if (open) {\n document.body.style.overflow = 'hidden'\n }\n\n return () => {\n document.body.style.overflow = originalStyle\n }\n }, [open])\n}\n","// React\nimport React, { useState, useEffect } from 'react'\nimport PropTypes from 'prop-types'\n\n// Libraries\nimport { pick } from 'lodash'\n\n// Components\nimport Select from 'ui/components/Select'\n\n// Hooks\nimport { useFormikContext } from 'formik'\n\nexport const UserAddressesSelect = ({ addresses }) => {\n const [selectedAddress, setSelectedAddress] = useState(null)\n\n const form = useFormikContext()\n\n useEffect(() => {\n if (!addresses?.length) return\n\n // Select expecting it's own shape as value\n setSelectedAddress({\n value: addresses[0].id,\n label: addresses[0].value\n })\n }, [addresses])\n\n const options = addresses.map((address) => ({\n value: address.id,\n label: address.value\n }))\n\n const handleUserAddressSelect = (id) => {\n const option = options.find((option) => option.value === id)\n\n if (!option) return\n\n setSelectedAddress(option)\n\n const address = addresses.find((address) => address.id === id)\n\n if (!address) return\n\n form.setValues({\n ...form.values,\n data: {\n ...form.values.data,\n delivery_address_property_id: id\n },\n delivery_address: pick(address, [\n 'address1',\n 'address2',\n 'zipcode',\n 'city',\n 'region',\n 'province',\n 'country',\n 'country_id'\n ])\n })\n }\n\n return (\n \n )\n}\n\nUserAddressesSelect.propTypes = {\n addresses: PropTypes.array\n}\n","// React\nimport React, { useEffect, useState, Fragment } from 'react'\n\n// Components\nimport AddressFields from 'back_office/modules/addresses/components/AddressFields'\nimport { UserAddressesSelect } from './UserAddressesSelect'\nimport Span from 'ui/elements/Span'\nimport A from 'ui/elements/A'\nimport Div from 'ui/elements/Div'\nimport Label from 'ui/elements/Label'\n\n// Libraries\nimport axios from 'axios'\n\n// Hooks\nimport { useTranslation } from 'shared/utils/useTranslation'\nimport { useOrm } from 'shared/utils/useOrm'\nimport { useFormikContext } from 'formik'\nimport { useSelector } from 'react-redux'\nimport { useSettings } from 'shared/utils/useSettings'\n\n// Shared\nimport { addressFieldsOrder } from 'back_office/modules/addresses/components/addressFieldsOrder'\nimport { fetchCountriesAndProvinces } from 'back_office/modules/addresses/components/fetchCountriesAndProvinces'\nimport { featureDisabled, FeatureFlags } from 'shared/utils/features'\n\nexport const DeliveryFulfillmentForm = () => {\n const [userAddresses, setUserAddresses] = useState([])\n const [isUserAuthenticated, setIsUserAuthenticated] = useState(undefined)\n\n const form = useFormikContext()\n const { t, tOrEmptyString, Trans } = useTranslation('user')\n\n const cartId = useSelector((state) => state.client.cartId)\n\n const cart = useOrm('carts', (carts) => carts.getById(cartId || window.booqableOptions.cart?.id))\n const countries = useOrm('countries', (countries) => {\n return countries.getAll().toArray()\n })\n const provinces = useOrm('provinces', (provinces) => {\n return provinces.getAll().toArray()\n })\n\n const isAuthEnabled = useSettings('user.auth_enabled')\n\n const authUriBase = cart?.user_login_url ?? '/customers/login'\n const authRedirectUriParamValue = `${window.location.origin}?${encodeURIComponent(\n 'open-picker=true&fulfillment-tab=delivery'\n )}`\n const authUri = `${authUriBase}?redirect_uri=${authRedirectUriParamValue}`\n\n useEffect(() => {\n if (!cart) return\n if (!isAuthEnabled) return\n\n const userAddressesUrl = window.booqableOptions?.apiURL ?\n `${window.booqableOptions?.apiURL}/user_addresses` :\n '/user_addresses'\n\n axios\n .get(userAddressesUrl)\n .then(({ data }) => {\n setIsUserAuthenticated(true)\n setUserAddresses(data.properties)\n })\n .catch(() => {\n setIsUserAuthenticated(false)\n })\n }, [cart?.id, isAuthEnabled])\n\n useEffect(() => {\n if (!countries.length || !provinces.length) {\n fetchCountriesAndProvinces()\n }\n }, [])\n\n return (\n \n {isUserAuthenticated && userAddresses.length > 0 && (\n
\n \n \n
\n )}\n \n {isUserAuthenticated === false && isAuthEnabled && (\n \n \n }}\n />\n \n )}\n
\n )\n}\n","// React\nimport { useState, useEffect, useCallback, useRef } from 'react'\n\nexport const useCachedQuery = (queryFn, options = {}) => {\n const [isLoading, setIsLoading] = useState(false)\n\n // Cache to store results for different keys\n const cache = useRef(new Map())\n const previousKey = useRef(options.key)\n\n useEffect(() => {\n if (previousKey.current !== options.key) {\n // If we have cached data for the new key, use it\n if (options.key !== undefined && cache.current.has(options.key)) {\n options.onSuccess?.(cache.current.get(options.key))\n }\n\n previousKey.current = options.key\n }\n }, [options.key])\n\n const perform = useCallback(\n async (...args) => {\n // If key is undefined, always fetch\n // If key has changed from the previous fetch, fetch again\n // If key exists but no cached data, fetch\n const shouldFetch = options.key === undefined || !cache.current.has(options.key)\n\n if (!shouldFetch) {\n const cached = cache.current.get(options.key)\n\n options.onSuccess?.(cached)\n\n return cached\n }\n\n setIsLoading(true)\n\n options.onLoading?.()\n\n try {\n const result = await queryFn(...args)\n\n options.onSuccess?.(result)\n\n // Cache the result if we have a key\n if (options.key !== undefined) {\n cache.current.set(options.key, result)\n }\n\n return result\n } catch (err) {\n options.onError?.(err)\n\n throw new Error(options.errorKey || 'fetch_error')\n } finally {\n setIsLoading(false)\n }\n },\n [queryFn, options.key]\n )\n\n return {\n isLoading,\n perform\n }\n}\n","import axios from 'axios'\n\nexport const fetchDeliveryOptionsRequest = ({ cartId, deliveryAddress }) => {\n return axios.post(`${window.booqableOptions?.apiUrl ?? ''}/delivery_options`, {\n cart_id: cartId,\n delivery: {\n address: deliveryAddress\n },\n skip_checkout_validation: true,\n skip_shortage_validation: true\n })\n}\n","// React\nimport React, { createContext, useState, useEffect, useCallback } from 'react'\nimport PropTypes from 'prop-types'\n\n// Hooks\nimport { useSettings } from 'shared/utils/useSettings'\nimport { usePrevious } from 'shared/utils/usePrevious'\n\n// Actions\nimport ClientActions from 'store/v2/redux/actions/client'\nimport ItemActions from 'store/v2/redux/actions/item'\nimport CartActions from 'store/v2/redux/actions/cart'\n\n// Shared\nimport moment from 'shared/lib/moment'\nimport { featureEnabled, FeatureFlags } from 'back_office/v2/utils/utils'\n\nexport const CartPickerContext = createContext({\n cart: null,\n onSave: async () => {},\n onChange: () => {},\n onValidate: () => {},\n isValid: false,\n isLoading: false,\n setLoading: () => {}\n})\n\nexport const CartPickerProvider = ({ children, cart, onSave }) => {\n const [values, setValues] = useState(null)\n\n const [isValid, setIsValid] = useState(false)\n const [isLoading, setIsLoading] = useState(false)\n\n const previousCart = usePrevious(cart)\n\n const behavior = useSettings('store.behaviors.location_picker', 'start_stop')\n const defaultStartLocationId = useSettings('defaults.shop_start_location_id')\n const defaultStopLocationId = useSettings('defaults.shop_stop_location_id')\n\n useEffect(() => {\n if ((!previousCart && cart) || (!previousCart?.starts_at && cart?.starts_at)) {\n setValues({\n start_location_id: cart.start_location_id,\n starts_at: cart.starts_at,\n stop_location_id: cart.stop_location_id,\n stops_at: cart.stops_at\n })\n }\n\n const shouldUpdateValues =\n previousCart?.starts_at !== cart?.starts_at ||\n previousCart?.stops_at !== cart?.stops_at ||\n previousCart?.start_location_id !== cart?.start_location_id ||\n previousCart?.stop_location_id !== cart?.stop_location_id\n\n if (shouldUpdateValues) {\n setValues({\n start_location_id: cart.start_location_id,\n starts_at: cart.starts_at,\n stop_location_id: cart.stop_location_id,\n stops_at: cart.stops_at\n })\n }\n }, [cart, previousCart])\n\n const handleChange = useCallback((newValues) => {\n setValues(newValues)\n }, [])\n\n const handleValidate = useCallback((valid) => {\n setIsValid(valid)\n }, [])\n\n const handleSave = useCallback(\n async (payload) => {\n const nextValues = { ...(payload || values) }\n\n switch (behavior) {\n case 'start':\n nextValues.stop_location_id = nextValues.start_location_id\n break\n case 'auto':\n nextValues.start_location_id = defaultStartLocationId\n nextValues.stop_location_id = defaultStopLocationId\n break\n default:\n break\n }\n\n if (featureEnabled(FeatureFlags.DELIVERIES) && nextValues.data.fulfillment_type === 'delivery') {\n nextValues.data.delivery_address = nextValues.delivery_address\n\n delete nextValues.delivery_address\n }\n\n setIsLoading(true)\n\n try {\n const response = await CartActions.update({\n ...nextValues,\n starts_at: moment(nextValues.starts_at),\n stops_at: moment(nextValues.stops_at)\n })\n\n onSave?.()\n\n const cartId = response.payload.response.cart.id\n\n await ItemActions.fetchAllOnPage(cartId)\n\n ClientActions.evaluateCartOverdue()\n\n setIsLoading(false)\n\n return response\n } catch (error) {\n console.error('Error saving cart', error)\n\n throw error\n } finally {\n setIsLoading(false)\n }\n },\n [values, behavior, defaultStartLocationId, defaultStopLocationId]\n )\n\n return (\n \n {children}\n \n )\n}\n\nCartPickerProvider.propTypes = {\n children: PropTypes.node,\n cart: PropTypes.object,\n onSave: PropTypes.func\n}\n","// React\nimport { useEffect, useMemo, useRef, useContext } from 'react'\n\n// Libraries\nimport { isEqual, isEmpty } from 'lodash'\n\n// Hooks\nimport { useFormikContext } from 'formik'\nimport { useCachedQuery } from 'shared/utils/useCachedQuery'\n\n// Shared\nimport { Format as FormatUtils } from 'back_office/v2/utils/utils'\nimport { fetchDeliveryOptionsRequest } from './requests'\nimport { CartPickerContext } from './Provider'\n\nexport const useCartPicker = () => {\n const context = useContext(CartPickerContext)\n\n if (!context) {\n throw Error('\"useCartPicker\" should be used within \"CartPickerProvider\"')\n }\n\n return context\n}\n\nexport const useDeliveryOptions = ({ cart, fetchAvailability, onError, resetError }) => {\n const isFirstMount = useRef(true)\n\n const form = useFormikContext()\n\n const formattedDeliveryAddress = useMemo(() => {\n if (!form.values.delivery_address) return\n\n return FormatUtils.address(form.values.delivery_address)\n }, [form.values.delivery_address])\n\n const { setLoading, onSave } = useCartPicker()\n\n const { perform: fetchDeliveryOptions, isLoading } = useCachedQuery(fetchDeliveryOptionsRequest, {\n key: formattedDeliveryAddress,\n errorKey: 'fetch_delivery_options_error',\n onSuccess: async ({ data }) => {\n setLoading(false)\n resetError()\n\n if (data.rates.length === 0) {\n onError('delivery_unavailable_error')\n }\n },\n onError: () => {\n setLoading(false)\n\n onError('delivery_unavailable_error')\n },\n onLoading: () => {\n setLoading(true)\n resetError()\n }\n })\n\n const isDelivery = form.values.data?.fulfillment_type === 'delivery'\n\n useEffect(() => {\n const request = async () => {\n try {\n const { payload } = await onSave(form.values)\n\n await Promise.all([\n fetchDeliveryOptions({\n cartId: payload.response.cart.id,\n deliveryAddress: form.values.data.delivery_address\n }),\n fetchAvailability({ type: 'start', values: form.values })\n ])\n } catch (error) {\n if (error instanceof Error) {\n switch (error.message) {\n case 'fetch_delivery_options_error':\n onError('delivery_unavailable_error')\n break\n case 'fetch_availability_error':\n console.error('Error fetching availability', error)\n break\n }\n }\n }\n }\n\n if (!cart?.id) return\n if (!isDelivery) return\n if (isEmpty(form.values.delivery_address)) return\n\n // The following fields are always required despite the selected country,\n // do not fetch the closest location if they are not set\n if (\n !form.values.delivery_address?.country ||\n !form.values.delivery_address?.address1 ||\n !form.values.delivery_address?.zipcode ||\n !form.values.delivery_address?.city\n )\n return\n\n // Check if the delivery address fields have no errors\n if (Object.keys(form.errors?.delivery_address ?? {}).length) return\n\n // Check if it's the first mount or if values have changed\n const valuesAreEqual =\n isEqual(form.values.delivery_address, form.initialValues.delivery_address) &&\n isEqual(form.values.start_location_id, form.initialValues.start_location_id) &&\n isEqual(form.values.stop_location_id, form.initialValues.stop_location_id)\n\n if (isFirstMount.current || !valuesAreEqual) {\n request()\n }\n\n isFirstMount.current = false\n }, [cart?.id, form.values, form.initialValues, form.errors, isDelivery, onSave])\n\n return { isLoading }\n}\n","import { useState, useEffect } from 'react'\n\n/**\n * A custom React hook that returns the value of a specific URL search parameter\n * @param {string} paramName - The name of the search parameter to retrieve\n * @returns {string|null} The value of the search parameter or null if not found\n */\nexport const useSearchParam = (paramName) => {\n const [paramValue, setParamValue] = useState(() => {\n const searchParams = new URLSearchParams(window.location.search)\n return searchParams.get(paramName)\n })\n\n useEffect(() => {\n const handleUrlChange = () => {\n const searchParams = new URLSearchParams(window.location.search)\n setParamValue(searchParams.get(paramName))\n }\n\n window.addEventListener('popstate', handleUrlChange)\n return () => window.removeEventListener('popstate', handleUrlChange)\n }, [paramName])\n\n return paramValue\n}\n","// React\nimport React, { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\n\n// Components\nimport BCartPicker from 'ui/blocks/Picker/types/cart'\nimport { LocationPicker } from 'ui/components/Picker/LocationPicker'\nimport { DeliveryFulfillmentForm } from './DeliveryFulfillmentForm'\nimport Div from 'ui/elements/Div'\nimport Label from 'ui/elements/Label'\nimport Span from 'ui/elements/Span'\n\n// Libraries\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faTriangleExclamation as farTriangleExclamation } from '@fortawesome/pro-regular-svg-icons'\n\n// Hooks\nimport { useFormikContext } from 'formik'\nimport { useOrm } from 'shared/utils/useOrm'\nimport { useDeliveryOptions } from './hooks'\nimport { useTranslation } from 'shared/utils/useTranslation'\nimport { useSearchParam } from 'shared/utils/useSearchParam'\n\n// Shared\nimport { Field } from 'shared/form'\n\nexport const FulfillmentType = ({ cart, fetchAvailability }) => {\n const [deliveryError, setDeliveryError] = useState(null)\n\n const form = useFormikContext()\n const fulfillmentTab = useSearchParam('fulfillment-tab')\n const { tOrEmptyString, t } = useTranslation('user')\n\n const pickupLocations = useOrm('locations', (locations) => {\n return locations\n .getAll({ archived_at: [null, undefined] })\n .filter((location) => location.fulfillment_capabilities.includes('pickup'))\n })\n const deliveryLocations = useOrm('locations', (locations) => {\n return locations\n .getAll({ archived_at: [null, undefined] })\n .filter((location) => location.fulfillment_capabilities.includes('delivery'))\n })\n\n useDeliveryOptions({ cart, fetchAvailability, onError: setDeliveryError, resetError: () => setDeliveryError(null) })\n\n const showFulfillmentTypeSelect = !!pickupLocations.size() && !!deliveryLocations.size()\n const isPickup = form.values.data.fulfillment_type === 'pickup'\n const isDelivery = form.values.data.fulfillment_type === 'delivery'\n\n useEffect(() => {\n if (fulfillmentTab === 'delivery') {\n form.setFieldValue('data.fulfillment_type', 'delivery')\n }\n }, [])\n\n useEffect(() => {\n const fulfillmentType = form.values.data.fulfillment_type\n\n if (fulfillmentType === 'delivery' && !form.values.delivery_address?.country && !form.values.delivery_address?.country_id) {\n form.setFieldError(\n 'delivery_address.country',\n `${tOrEmptyString('user.deliveries.address_fields.country')} ${tOrEmptyString('user.public_errors.invalid')}`\n )\n }\n\n if (fulfillmentType === 'pickup') {\n const errors = { ...form.errors }\n\n delete errors.delivery_address\n\n form.setErrors(errors)\n }\n }, [form.values.data.fulfillment_type, form.values.delivery_address, form.errors])\n\n const handleLocationChange = ({ start_location_id: id }) => {\n const values = {\n ...form.values,\n start_location_id: id\n }\n\n fetchAvailability({ type: 'start', values })\n }\n\n if (isPickup && pickupLocations.size() === 1 && !deliveryLocations.size()) return null\n\n return (\n \n
\n {!!deliveryError && (\n \n \n \n {t(`user.deliveries.${deliveryError}`)}\n \n \n )}\n {showFulfillmentTypeSelect && (\n \n \n \n )}\n {isPickup && pickupLocations.size() > 1 && (\n
\n \n \n \n \n
\n )}\n {isDelivery && (\n
\n \n
\n )}\n
\n
\n )\n}\n\nFulfillmentType.propTypes = {\n cart: PropTypes.object.isRequired,\n fetchAvailability: PropTypes.func.isRequired\n}\n","// React\nimport React, { Component, Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Components\nimport Tooltip from 'ui/components/Tooltip'\n\nexport class ReadOnlyModeDisabledComponent extends Component {\n static displayName = 'ReadOnlyModeDisabledComponent'\n\n static propTypes = {\n readOnlyMode: PropTypes.bool\n }\n\n render () {\n const { readOnlyMode, children } = this.props\n\n if (readOnlyMode) {\n return (\n \n
\n {children}\n
\n \n )\n } else {\n return children\n }\n }\n}\n\nconst mapStateToProps = (state, props) => {\n return {\n readOnlyMode: state.client.readOnlyMode\n }\n}\n\nexport default reduxConnect(mapStateToProps)(ReadOnlyModeDisabledComponent)\n","import Model from '../models'\nimport API from '../../api'\n\nModel.Availability.createAction('FETCH_ITEM_AVAILABILITY', (options) => {\n return API.get('item_availabilities', options)\n})\n\nModel.Availability.createAction('FETCH_CALENDAR_AVAILABILITY', (options) => {\n return API.get('cart_availabilities', options)\n})\n\nexport default Model.Availability.actions\n","// React\nimport React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Components\nimport { CartFlowPicker } from 'ui/components/Picker'\nimport { PickerProvider } from 'ui/components/Picker/Provider'\nimport { LocationPicker } from 'ui/components/Picker/LocationPicker'\nimport { FulfillmentType } from './FulfillmentType'\nimport BCartPicker from 'ui/blocks/Picker/types/cart'\nimport ReadOnlyModeDisabledComponent from 'store/components/ReadOnlyModeDisabledComponent'\n\n// Libraries\nimport _debounce from 'lodash/debounce'\n\n// Hooks\nimport { useSettings } from 'shared/utils/useSettings'\nimport { useOrm } from 'shared/utils/useOrm'\nimport { useOpeningHours } from 'shared/utils/useOpeningHours'\nimport { useCartPicker } from './hooks'\n\n// Shared\nimport { featureEnabled, FeatureFlags } from 'back_office/v2/utils/utils'\nimport AvailabilityActions from 'store/v2/redux/actions/availability'\nimport moment from 'shared/lib/moment'\nimport promiseDebounce from 'shared/utils/promiseDebounce'\nimport { useTranslation } from 'react-i18next'\n\n/**\n * CartPicker Component\n *\n * This component renders a CartFlowPicker with additional functionality for handling\n * availability fetching and duration changes.\n *\n * @component\n * @param {Object} props - The component props\n * @param {string} props.mode - The mode of the picker ('freely', 'timeslot_duration', 'timeslot_fixed')\n * @param {Function} props.onChange - Callback function when selection changes\n * @param {string} props.format - The date format to use\n * @param {boolean} props.useTimes - Whether to use times in the picker\n * @param {Object} props.cart - The cart object\n * @param {Object} props.durations - Object of available durations\n * @param {Object} props.timeslots - Object of available timeslots\n * @param {Object} props.initialValues - Initial values for the picker\n * @param {boolean} props.useAMOrPM - Whether to use AM/PM format\n * @param {Object} props.minDate - The minimum selectable date\n * @param {boolean} [props.disabled] - Whether the picker is disabled\n * @param {Object} props.availabilities - Object of availability data\n * @param {boolean} props.availabilityLoading - Whether availability data is currently loading\n * @param {number} props.lineCount - The number of lines in the cart\n * @param {boolean} props.showAvailability - Whether to show availability\n * @param {Function} props.fetchAvailability - Function to fetch availability data\n *\n * @returns {React.Component} A wrapped CartFlowPicker component with additional functionality\n */\nconst CartPicker = ({ cart, availabilities, initialValues, minDate, ...props }) => {\n const [duration, setDuration] = useState(null)\n\n const openingHours = useOpeningHours()\n const { onChange, onValidate } = useCartPicker()\n\n const locations = useOrm('locations', (locations) => {\n return locations.getAll({ archived_at: [null, undefined] })\n })\n const intervalInMinutes = useSettings('store.time_increment', {\n default: 15,\n transformer: (value) => parseInt(value)\n })\n\n const { t } = useTranslation()\n\n const handleMonthChange = (options, date) => {\n // Fetch availability on month change if setting enabled\n if (!props.showAvailability || !props.lineCount) return\n\n try {\n props.fetchAvailability(cart, {\n year: date.getFullYear(),\n month: date.getMonth() + 1,\n type: options.type,\n starts_at: options.values?.starts_at,\n durationData: duration\n })\n } catch {\n throw new Error('fetch_availability_error')\n }\n }\n\n const debouncedHandleMonthChange = () => {\n if (window.testMode) {\n return handleMonthChange\n } else {\n return promiseDebounce(handleMonthChange, 500)\n }\n }\n\n const handleAvailabilityFetch = (options, day) => {\n let date\n\n day = options?.day || day\n\n if (day) {\n date = day.toDate?.().getDate() ?? day\n }\n\n if (!props.showAvailability || !props.lineCount) return\n\n try {\n props.fetchAvailability(cart, {\n type: options.type,\n day: date,\n starts_at: options.values?.starts_at,\n month: options.values?.starts_at ? new Date(options.values?.starts_at).getMonth() + 1 : undefined,\n year: options.values?.starts_at ? new Date(options.values?.starts_at).getFullYear() : undefined,\n durationData: duration,\n location_id: options.values?.start_location_id\n })\n } catch {\n throw new Error('fetch_availability_error')\n }\n }\n\n const handleChangeDuration = (_duration, durationData) => {\n setDuration(durationData)\n }\n\n return (\n \n \n \n {featureEnabled(FeatureFlags.DELIVERIES) && (\n \n )}\n {!featureEnabled(FeatureFlags.DELIVERIES) && (\n \n )}\n \n \n \n \n )\n}\n\nCartPicker.propTypes = {\n cart: PropTypes.object,\n locations: PropTypes.object,\n availabilities: PropTypes.object,\n initialValues: PropTypes.object,\n lineCount: PropTypes.number,\n showAvailability: PropTypes.bool,\n fetchAvailability: PropTypes.func,\n minDate: PropTypes.object,\n onChange: PropTypes.func,\n onValidate: PropTypes.func,\n setLoading: PropTypes.func\n}\n\nconst mapStateToProps = (state, props) => {\n const cart = props.cart || state.orm.carts.getById(state.client.cartId)\n\n const locations = state.orm.locations.getAll({ archived_at: [null, undefined] })\n const pickupLocations = locations.filter((location) => location.fulfillment_capabilities.includes('pickup'))\n const deliveryLocations = locations.filter((location) => location.fulfillment_capabilities.includes('delivery'))\n\n const companyCountry = state.settings.get('main_address_attributes.country')\n const companyCountryId = state.settings.get('main_address_attributes.country_id')\n\n const initialValues = {\n starts_at: null,\n stops_at: null,\n start_location_id: null,\n stop_location_id: null,\n delivery_address: {\n address1: '',\n address2: '',\n city: '',\n country: companyCountry || '',\n country_id: companyCountryId || '',\n first_name: '',\n last_name: '',\n region: '',\n province_id: '',\n zipcode: ''\n },\n data: {}\n }\n\n if (cart) {\n Object.assign(initialValues, {\n starts_at: cart.starts_at ? moment(cart.starts_at) : null,\n stops_at: cart.stops_at ? moment(cart.stops_at) : null,\n start_location_id: cart.start_location_id || null,\n stop_location_id: cart.stop_location_id || null,\n data: {\n fulfillment_type: cart.data?.fulfillment_type\n },\n delivery_address: cart.data?.delivery_address || initialValues.delivery_address\n })\n }\n\n if (!initialValues.data.fulfillment_type) {\n if (pickupLocations.size()) {\n initialValues.data.fulfillment_type = 'pickup'\n } else if (deliveryLocations.size()) {\n initialValues.data.fulfillment_type = 'delivery'\n }\n }\n\n return {\n initialValues,\n mode: state.settings.get('store.period_type'),\n useTimes: state.settings.get('store.use_times'),\n format: state.settings.get('dates.format'),\n useAMOrPM: state.settings.get('dates.use_am_pm'),\n minDate: state.client.firstTimeSelectable,\n cart,\n availabilities: state.orm.shop_availabilities.getAll(),\n showAvailability:\n state.settings.get('store.use_availability') && state.settings.get('store.show_cart_availability'),\n availabilityLoading: state.orm.pendingRequests.includes('SHOP_AVAILABILITIES_FETCH_CALENDAR_AVAILABILITY'),\n lineCount: cart?.lines.length\n }\n}\n\nconst mapDispatchToProps = (_dispatch, _props) => {\n return {\n fetchAvailability: (cart, params) => {\n // No cart - can't check availability\n if (!cart?.created_at) return\n\n // Do not send moment objects in a request (it will serialise and cause a CORS error)\n if (params.starts_at?._isAMomentObject) {\n params.starts_at = params.starts_at.toDate()\n }\n\n const date = new Date(params?.type === 'start' ? cart.starts_at || Date() : cart.stops_at || Date())\n const filter = {\n cart_id: cart.id,\n year: params?.year || date.getFullYear(),\n month: params?.month || date.getMonth() + 1,\n day: params?.day,\n type: params?.type,\n duration_period: params?.durationData?.data?.period,\n start_location_id: params?.location_id\n }\n\n if (params?.starts_at) {\n Object.assign(filter, { starts_at: params?.starts_at })\n }\n\n AvailabilityActions.fetchCalendarAvailability({\n filter,\n apiVersion: 3\n })\n }\n }\n}\n\nexport default reduxConnect(mapStateToProps, mapDispatchToProps)(CartPicker)\n","import { CartPicker } from './styles'\n\nexport default CartPicker\n","import styled from 'styled-components'\n\nexport const CartPicker = styled.div`\n [class*='Period']:has([class^='Portal']:not(:empty)), [class^='Portal']:not(:empty) {\n max-height: 100%;\n height: 100%;\n\n overflow-y: auto;\n }\n\n [class^='Period'] {\n overflow-y: auto;\n }\n\n @media screen and (max-width: 576px) {\n .DayPicker-NavBar {\n display: none;\n }\n }\n\n @media screen and (min-width: 576px) {\n .DayPicker {\n min-height: 350px;\n }\n }\n`\n","// React\nimport React, { useState } from 'react'\nimport PropTypes from 'prop-types'\n\n// Libraries\nimport { clsx } from 'clsx'\n\n// Components\nimport { Modal, ModalBody, ModalTitle, ModalClose, ModalFooter } from 'store/components/Modal'\nimport Button from 'ui/components/Button'\nimport Div from 'ui/elements/Div'\nimport ActionGroup from 'ui/blocks/ActionGroup'\nimport CartPicker from './Picker'\nimport BCartPicker from 'store/blocks/CartPicker'\n\n// Hooks\nimport { useTranslation } from 'shared/utils/useTranslation'\nimport { useIsMobile } from 'shared/utils/useIsMobile'\nimport { useCartPicker } from './hooks'\nimport { CartPickerProvider } from './Provider'\n\nconst CartPickerInner = ({ open, onSaveCallback, onClose, brandingColor, title, productId, withBranding }) => {\n const [promise, setPromise] = useState(null)\n\n const { cart, onSave, isValid, isLoading } = useCartPicker()\n\n const { t } = useTranslation('user')\n const isMobile = useIsMobile()\n\n const handleSave = () => {\n const promise = onSave?.().then(() => {\n if (onSaveCallback) {\n return onSaveCallback()\n }\n\n onClose()\n })\n\n setPromise(promise)\n }\n\n return (\n \n \n
\n
\n {title}\n {onClose && }\n
\n \n \n \n
\n \n \n \n {(productId && t('user.store.book')) || t('user.store.apply') || 'Apply'}\n \n \n \n
\n \n )\n}\n\nCartPickerInner.propTypes = {\n open: PropTypes.bool,\n onClose: PropTypes.func,\n brandingColor: PropTypes.string,\n title: PropTypes.any,\n productId: PropTypes.string,\n onSaveCallback: PropTypes.func,\n withBranding: PropTypes.bool\n}\n\nexport const ModalCartPicker = ({ cart, onSave, ...props }) => (\n \n \n \n)\n\nModalCartPicker.propTypes = {\n cart: PropTypes.object,\n onSave: PropTypes.func\n}\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport { ModalCartPicker } from 'store/modules/cart/CartPicker/Modal'\n\n// Libraries\n\n// Shared\nimport ClientActions from 'store/v2/redux/actions/client'\nimport CartActions from 'store/v2/redux/actions/cart'\nimport getBrandingColor from 'shared/utils/getBrandingColor'\nimport { withTranslation } from 'shared/utils/withTranslation'\n\nclass CartPickerContainer extends Component {\n static displayName = 'CartPickerContainer'\n\n static propTypes = {\n cart: PropTypes.object,\n modalOpen: PropTypes.bool,\n brandingColor: PropTypes.string,\n togglePicker: PropTypes.func,\n clearCart: PropTypes.func,\n t: PropTypes.func\n }\n\n componentDidMount = () => {\n this.mobile = window.innerWidth <= 800\n }\n\n handleClearAndClose = () => {\n this.props.clearCart().then(() => this.props.togglePicker(false))\n }\n\n handleClose = () => {\n this.props.togglePicker(false)\n }\n\n render () {\n const { cart, modalOpen, brandingColor, t } = this.props\n\n return (\n \n )\n }\n}\n\nconst mapStateToProps = (state, _props) => {\n return {\n cart: state.orm.carts.getById(state.client.cartId),\n modalOpen: state.client.modalPickerOpen,\n brandingColor: getBrandingColor()\n }\n}\n\nconst mapDispatchToProps = (_dispatch, _props) => {\n return {\n togglePicker: ClientActions.toggleModalPicker,\n clearCart: () => {\n CartActions.clear({\n apiVersion: 1\n })\n }\n }\n}\n\nexport default compose(reduxConnect(mapStateToProps, mapDispatchToProps), withTranslation('user'))(CartPickerContainer)\n","// React\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Libraries\n\n// Components\n\n// Shared\nimport ReactCSSTransitionGroup from 'shared/lib/react_css_transition_group'\nimport Format from 'shared/utils/format'\nimport { setUserFrameworkCartData } from 'shared/utils/userFrameworkEvents'\nimport clientActions from 'store/v2/redux/actions/client'\nimport { withTranslation } from 'shared/utils/withTranslation'\n\nexport class Launcher extends React.Component {\n static displayName = 'Launcher'\n\n static propTypes = {\n itemCount: PropTypes.number,\n cartOpen: PropTypes.bool,\n toggleCart: PropTypes.func,\n cart: PropTypes.object,\n useTimes: PropTypes.bool,\n usePrices: PropTypes.bool,\n timeFormat: PropTypes.string,\n floating: PropTypes.bool,\n totalPriceAttribute: PropTypes.string,\n currency: PropTypes.object,\n t: PropTypes.func\n }\n\n componentDidUpdate = () => {\n setUserFrameworkCartData()\n }\n\n get style () {\n const { floating } = this.props\n\n if (floating) {\n return {\n position: 'fixed',\n bottom: 15,\n right: 15\n }\n } else {\n return {}\n }\n }\n\n get countLabel () {\n const { itemCount, t } = this.props\n\n if (itemCount === 1) {\n return `${itemCount} ${t('user.store.item')}`\n }\n\n return `${itemCount} ${t('user.store.items')}`\n }\n\n render () {\n const launcherClassNames = []\n const { cart, cartOpen, toggleCart, useTimes, usePrices, timeFormat, itemCount, currency, totalPriceAttribute, t } = this.props\n\n launcherClassNames.push(cartOpen ? 'open' : 'closed')\n\n return (\n \n \n
\n \n
\n
\n
\n {cart && cart.starts_at ?\n (\n \n {Format.date(cart.starts_at, 'shortDate')} \n {useTimes && Format.date(cart.starts_at, timeFormat)}\n {' - '}\n {Format.date(cart.stops_at, 'shortDate')} \n {useTimes && Format.date(cart.stops_at, timeFormat)}\n \n ) :\n ({t('user.store.select_a_period')})}\n
\n
\n
\n {cart && itemCount ?\n (\n
\n \n {this.countLabel}\n \n {usePrices && (\n \n \n {Format.money(cart != null ? cart.get(totalPriceAttribute) : undefined, currency)}\n \n \n )}\n
\n ) :\n ({t('user.store.cart_empty')})}\n
\n
\n \n \n )\n }\n}\n\nconst mapStateToProps = (state) => {\n let timeFormat, totalPriceAttribute\n\n if (state.settings.get('dates.use_am_pm')) {\n timeFormat = 'hh:mm A'\n } else {\n timeFormat = 'HH:mm'\n }\n\n const cart = state.orm.carts.getById(state.client.cartId)\n const lines = state.orm.lines.getAll({\n id: cart != null ? cart.lines : undefined,\n product_type: ['consumable', 'rental', 'bundle']\n })\n\n const itemCount = lines.map((line) => line.quantity).reduce((a, b) => a + b, 0)\n\n if (state.settings.get('pricing.tax_strategy') === 'inclusive') {\n totalPriceAttribute = 'grand_total_with_tax_in_cents'\n } else {\n totalPriceAttribute = 'grand_total_in_cents'\n }\n\n return {\n floating: state.client.floatingCart,\n cartOpen: state.client.cartOpen,\n cart,\n currency: state.client.currency.toJS(),\n totalPriceAttribute,\n timeFormat,\n useTimes: state.settings.get('store.use_times'),\n usePrices: state.settings.get('store.use_prices'),\n itemCount\n }\n}\n\nconst mapDispatchToProps = () => {\n return {\n toggleCart: (cartOpen) => {\n return clientActions.toggleCart(cartOpen)\n }\n }\n}\n\nexport default compose(withTranslation('user'), reduxConnect(mapStateToProps, mapDispatchToProps))(Launcher)\n","// React\nimport React, { Fragment, useState, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Components\nimport FloatingCart from 'store/v2/react/scenes/cart/components/FloatingCart'\nimport CartPicker from 'store/modules/cart/FloatingCart/components/CartPicker'\nimport Launcher from 'store/modules/cart/FloatingCart/components/Launcher'\n\nconst Cart = ({ isShowCartBehavior }) => {\n const [showPicker, setShowPicker] = useState(true)\n\n useEffect(() => {\n if (document.querySelector('bq-date-picker-modal')) {\n setShowPicker(false)\n }\n }, [])\n\n return (\n
\n {isShowCartBehavior && (\n \n
\n \n
\n \n
\n )}\n {showPicker && }\n
\n )\n}\n\nCart.propTypes = {\n isShowCartBehavior: PropTypes.bool\n}\n\nconst mapStateToProps = (state, props) => {\n const isShowCartBehavior = state.settings.get('store.behaviors.add_button') === 'show_cart'\n\n return {\n isShowCartBehavior\n }\n}\n\nexport default reduxConnect(mapStateToProps)(Cart)\n","import { Themed } from './styles'\n\nexport default Themed\n","import styled from 'styled-components'\n\nexport const Themed = styled.div`\n * {\n &:not(i) {\n font-family: ${(props) => props.theme.font.body};\n }\n }\n`\n","\n\n/**\n * Theme for being used in the checkout and store integration.\n */\n\nimport { colors, palette } from 'ui/themes/colors'\n\n// DO NOT USE THESE COLORS! THEY ARE DEPRECATED AND WILL BE REMOVED IN THE FUTURE\nconst deprecatedColors = (brandingColor) => {\n return {\n primary: brandingColor,\n secondary: colors['Text/Secondary'],\n success: colors['Success/Base'],\n info: colors['Accent1/Base'],\n warning: colors['Warning/Base'],\n danger: colors['Danger/Base'],\n\n light: palette.grey[20],\n dark: colors['Text/Primary'],\n\n borderHover: palette.grey[40]\n }\n}\n\nconst color = (brandingColor) => {\n return {\n black: palette.black,\n white: palette.white,\n transparent: 'transparent',\n branding: brandingColor,\n\n // Ease of use colors, corresponding to the Base color of the palette.\n // e.g. blue =~ colors['Primary/Base']\n blue: palette.blue[60],\n green: palette.green[50],\n orange: palette.orange[50],\n red: palette.red[60],\n purple: palette.purple[60],\n grey: palette.grey[30],\n\n ...colors,\n ...deprecatedColors(brandingColor)\n }\n}\n\n/**\n * We use a 4px grid system for spacing. This function calculates the pixel value for a given grid unit.\n * 0.5 grid units = 2px\n * 1 grid unit = 4px\n * 2 grid units = 8px\n * 3 grid units = 12px\n * 4 grid units = 16px\n * 5 grid units = 20px\n * 6 grid units = 24px\n * 7 grid units = 28px\n * 8 grid units = 32px\n * 9 grid units = 36px\n * 10 grid units = 40px\n * 11 grid units = 44px\n * 12 grid units = 48px\n * 16 grid units = 64px\n */\nconst grid = (unit) => {\n if (!Number.isInteger(unit) && unit !== 0.5) {\n throw new Error('Grid units must be integers or 0.5')\n }\n return `${unit * 4}px`\n}\n\nconst units = {\n 0.5: grid(0.5),\n 1: grid(1),\n 2: grid(2),\n 3: grid(3),\n 4: grid(4),\n 5: grid(5),\n 6: grid(6),\n 7: grid(7),\n 8: grid(8),\n 9: grid(9),\n 10: grid(10),\n 11: grid(11),\n 12: grid(12),\n 13: grid(13),\n 14: grid(14),\n 15: grid(15),\n 16: grid(16)\n}\n\nconst font = {\n base: 'Roboto',\n fallback: 'sans-serif',\n mono: 'Monospace',\n fontAwesomeStyle: 'far',\n size: {\n body: '20px',\n xs: '13px !important',\n sm: '13px',\n md: '14px',\n lg: '18px',\n lgplus: '22px',\n xl: '34px',\n xxl: '50px',\n xxxl: '66px'\n },\n weight: {\n light: '300',\n lighter: '400',\n normal: '500',\n semibold: '600',\n bold: '700'\n }\n}\n\nfont.body = `${font.base}, ${font.fallback}`\n\nconst size = {\n borderRadius: {\n xs: '2px',\n sm: '6px',\n md: '6px',\n lg: '6px',\n lgplus: '8px',\n xl: '13px'\n },\n borderWidth: {\n xs: '1px',\n sm: '1px',\n md: '1px',\n lg: '1px'\n },\n controlHeight: {\n xs: '26px',\n sm: '36px',\n md: '42px',\n lg: '50px'\n },\n margin: {\n xs: grid(1),\n sm: grid(3),\n md: grid(4),\n lg: grid(6)\n },\n padding: {\n xs: grid(1),\n sm: grid(3),\n md: grid(4),\n mdplus: grid(5),\n lg: grid(6),\n lgplus: grid(7),\n xl: grid(8),\n xlplus: grid(11),\n xxl: grid(12),\n xxxl: grid(16)\n },\n shadow: {\n sm: 'rgba(0, 0, 0, 0.2) 0px 1px 2px 0px',\n smplus: 'rgba(0, 0, 0, 0.1) 0px 4px 12px 0px',\n md: 'rgba(0, 0, 0, 0.1) 0 6px 14px 0',\n lg: 'rgba(0, 0, 0, 0.1) 0 6px 14px 0'\n },\n screenSizes: {\n xs: '0px',\n sm: '768px',\n md: '992px',\n lg: '1200px',\n xl: '1800px'\n }\n}\n\nconst opacity = {\n disabled: 0.6,\n destroying: 0.4\n}\n\nconst zIndex = [\n 1,\n 100,\n 200,\n 300,\n 400\n]\n\nexport default (brandingColor = '#8fcc40') => {\n return {\n color: color(brandingColor),\n font,\n opacity,\n size,\n zIndex,\n units\n }\n}\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Libraries\nimport { ThemeProvider, StyleSheetManager } from 'styled-components'\n\n// Components\nimport BThemed from '../blocks/Themed'\n\n// Shared\nimport theme from 'ui/themes/public'\nimport getBrandingColor from 'shared/utils/getBrandingColor'\nimport { shouldForwardProp } from 'shared/utils/shouldForwardProp'\n\nclass Themed extends Component {\n static displayName = 'Themed'\n\n static propTypes = {\n children: PropTypes.node,\n brandingColor: PropTypes.string\n }\n\n render () {\n const { children, brandingColor } = this.props\n\n return (\n \n \n \n {children}\n \n \n \n )\n }\n}\n\nconst mapStateToProps = (state, props) => {\n return {\n brandingColor: getBrandingColor()\n }\n}\n\nexport default reduxConnect(mapStateToProps)(Themed)\n","// React\nimport React from 'react'\nimport { Provider } from 'react-redux'\n\n// Components\nimport Cart from 'store/v2/react/components/cart'\nimport Themed from 'store/v2/react/components/Themed'\n\nconst store = window.booqableStore\n\nexport default class CartScene extends React.Component {\n static displayName = 'CartScene'\n\n render () {\n return (\n \n \n \n \n \n )\n }\n}\n","export default {\n findByIdOrSlug (collection, id) {\n let item\n\n if ((item = collection.getById(id))) {\n return item\n } else if ((item = collection.getAll({ slug: id }).first())) {\n return item\n } else {\n return collection.getAll({ legacy_id: parseInt(id) }).first()\n }\n }\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\nimport itemSelectors from 'store/v2/redux/selectors/item'\n\nclass IdFinder extends React.Component {\n static displayName = 'IdFinder'\n\n static propTypes = {\n children: PropTypes.object,\n hideOnLoad: PropTypes.bool\n }\n\n shouldComponentUpdate = (nextProps) => {\n if (this.props.item && nextProps.uiKey === this.props.uiKey) {\n return false\n } else {\n return true\n }\n }\n\n render = () => {\n const { item, hideOnLoad } = this.props\n\n if (!item && hideOnLoad) {\n return null\n } else {\n return this.props.children && React.cloneElement(this.props.children, this.props)\n }\n }\n}\n\nconst mapStateToProps = (state, props) => {\n const item = itemSelectors.findByIdOrSlug(state.orm.product_groups, props.id) ||\n itemSelectors.findByIdOrSlug(state.orm.bundles, props.id) ||\n itemSelectors.findByIdOrSlug(state.orm.items, props.id)\n\n return {\n id: item && item.id,\n item,\n uiKey: props.id\n }\n}\n\nexport default reduxConnect(mapStateToProps)(IdFinder)\n","import { updateUI } from 'shared/redux/interface'\nconst store = window.booqableStore\n\nexport default {\n setItem (id) {\n const action = updateUI('Quickview', { itemId: id })\n\n return store.dispatch(action)\n },\n\n unsetItem () {\n const action = updateUI('Quickview', { itemId: null })\n\n return store.dispatch(action)\n }\n}\n","// React\nimport React from 'react'\nimport { findDOMNode } from 'react-dom'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport FocalImage from 'ui/components/FocalImage'\nimport ProductPrice from './product_price'\n\n// Libraries\nimport _capitalize from 'lodash/capitalize'\nimport _get from 'lodash/get'\n\n// Shared\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport ReactCSSTransitionGroup from 'shared/lib/react_css_transition_group'\nimport quickviewActions from 'store/v2/redux/actions/quickview'\n\nexport class Product extends React.Component {\n static displayName = 'Product'\n\n static propTypes = {\n loading: PropTypes.bool,\n id: PropTypes.string,\n item: PropTypes.object,\n photo: PropTypes.object,\n useAvailability: PropTypes.bool,\n hideProductAvailabilityQuantities: PropTypes.bool,\n hasDates: PropTypes.string,\n hasPrices: PropTypes.any,\n onClick: PropTypes.func,\n openQuickview: PropTypes.func,\n t: PropTypes.func\n }\n\n componentDidMount = () => {\n this.setWidth()\n\n window.addEventListener('resize', this.setWidth, false)\n }\n\n componentWillUnmount = () => {\n window.removeEventListener('resize', this.setWidth)\n }\n\n findAncestor = (el, cls) => {\n while ((el = el.parentElement) && !el.classList.contains(cls));\n\n return el\n }\n\n setWidth = () => {\n // eslint-disable-next-line react/no-find-dom-node\n const node = this.findAncestor(findDOMNode(this), 'booqable-product')\n const container = node?.parentNode\n\n if (!node || !container) return\n\n const width = container.offsetWidth\n let maxPerRow = Math.floor(width / 280)\n\n // Max of 6 per row\n maxPerRow = Math.max(1, Math.min(maxPerRow, 6))\n\n return (node.style.width = 100 / maxPerRow + '%')\n }\n\n renderLoading = () => {\n const { t } = this.props\n\n return (\n
\n
\n \n \n \n \n \n
\n
\n
\n {t('user.store.product_placeholder')}\n
\n
\n
\n
\n
\n )\n }\n\n renderContent = () => {\n const { id, item, photo, onClick, openQuickview, useAvailability, hideProductAvailabilityQuantities, hasDates, hasPrices, t } = this.props\n\n const preview = _get(photo, 'preview')\n const imageSrc = _get(photo, 'large_url') || item.photo_url\n const imageCoordinates = _get(photo, 'coordinates')\n\n return (\n
\n
\n \n {imageSrc && (\n \n )}\n {!imageSrc && (\n \n \n \n )}\n \n
\n {useAvailability && hasDates && (\n \n {item.available_quantity === null && (\n {_capitalize(t('user.store.available'))}\n )}\n {item.available_quantity === 0 && (\n {_capitalize(t('user.store.unavailable'))}\n )}\n {item.available_quantity > 0 && (\n hideProductAvailabilityQuantities ?\n (\n \n {_capitalize(t('user.store.available'))}\n \n ) :\n (\n \n {item.available_quantity} \n {t('user.store.available')}\n \n )\n )}\n \n )}\n \n \n \n \n
\n {item.name}\n
\n
\n {item && (\n \n )}\n
\n
\n \n )\n }\n\n render () {\n const { loading } = this.props\n\n return loading ? this.renderLoading() : this.renderContent()\n }\n}\n\nconst mapStateToProps = (state, props) => {\n const showPrices = state.settings.get('store.use_prices')\n const item = state.orm.items.getById(props.id)\n const cart = state.orm.carts.getById(state.client.cartId)\n const photo = item && state.orm.photos.getById(item.photo_id)\n\n return {\n loading: !item,\n translations: state.client.get('translations').toJS(),\n item,\n photo,\n useAvailability: state.settings.get('store.use_availability'),\n hideProductAvailabilityQuantities: state.settings.get('store.hide_product_availability_quantities'),\n hasDates: cart?.starts_at && cart?.stops_at,\n hasPrices: showPrices && item?.price_each_in_cents\n }\n}\n\nconst mapDispatchToProps = (_, props) => {\n const openQuickview = (id) => quickviewActions.setItem(id)\n\n return {\n openQuickview,\n onClick: (id, e) => {\n if (props.link && !e.target.getAttribute('data-link')) {\n return (window.location = props.link)\n } else {\n return openQuickview(id)\n }\n }\n }\n}\n\nexport default compose(reduxConnect(mapStateToProps, mapDispatchToProps), withTranslation('user'))(Product)\n","import React from 'react'\nimport { Provider } from 'react-redux'\n\nimport IdFinder from '../id_finder'\nimport Product from '../components/product'\nimport Themed from 'store/v2/react/components/Themed'\n\nconst store = window.booqableStore\n\nexport default class ProductGroup extends React.Component {\n static displayName = 'ProductGroupContainer'\n\n render = () => {\n return (\n \n \n
\n \n \n \n
\n
\n
\n )\n }\n}\n","// React\nimport React from 'react'\nimport { connect as reduxConnect } from 'react-redux'\nimport PropTypes from 'prop-types'\n\n// Libraries\nimport _range from 'lodash/range'\n\nclass Pagination extends React.Component {\n static displayName = 'Pagination'\n\n static propTypes = {\n page: PropTypes.any,\n pages: PropTypes.any,\n padding: PropTypes.number,\n showPrev: PropTypes.bool,\n showNext: PropTypes.bool,\n handlePage: PropTypes.func,\n handleNextPage: PropTypes.func,\n handlePrevPage: PropTypes.func\n }\n\n renderPages = () => {\n const allPages = _range(1, (this.props.pages + 1))\n\n const padding = this.props.padding || 2\n const show = padding * 2 + 1\n let till = Math.min(this.props.pages, this.props.page + padding)\n const from = Math.max(0, till - show)\n\n till = from + show\n\n return allPages.slice(from, till).map((page) => {\n const classNames = []\n\n if (page === this.props.page) {\n classNames.push('bq-pagination-current bq-branded')\n }\n\n return (\n \n {(page !== this.props.page) && }\n {(page === this.props.page) && page}\n \n )\n })\n }\n\n render () {\n if (this.props.pages <= 1) {\n return null\n }\n\n return (\n
\n
\n {this.props.showPrev && (\n \n \n \n )}\n {this.renderPages()}\n {this.props.showNext && (\n \n \n \n )}\n
\n
\n )\n }\n}\n\nconst mapStateToProps = (state, props) => {\n const pages = Math.ceil(props.total / props.per)\n\n return {\n pages,\n showPrev: props.page !== 1,\n showNext: props.page !== pages\n }\n}\n\nconst mapDispatchToProps = (dispatch, props) => {\n const handlePageChange = (page) => {\n const pages = Math.ceil(props.total / props.per)\n\n if (page >= 1 && page <= pages) {\n return props.onChange(page)\n }\n }\n\n return {\n handlePage (page) {\n return handlePageChange(page)\n },\n handlePrevPage () {\n return handlePageChange(props.page - 1)\n },\n handleNextPage () {\n return handlePageChange(props.page + 1)\n }\n }\n}\n\nexport default reduxConnect(mapStateToProps, mapDispatchToProps)(Pagination)\n","const store = window.booqableStore\n\nexport const setFilterSearchQuery = (value, key = 'global') => {\n store.dispatch({\n type: 'SET_FILTER_SEARCH_QUERY',\n payload: {\n key,\n value\n }\n })\n}\n\nexport const setFilterCollection = (value, key = 'global') => {\n store.dispatch({\n type: 'SET_FILTER_COLLECTION',\n payload: {\n key,\n value\n }\n })\n}\n\nexport const setFilterSortBy = (value, key = 'global') => {\n store.dispatch({\n type: 'SET_FILTER_SORT_BY',\n payload: {\n key,\n value\n }\n })\n}\n\nexport const setFilterFilterBy = (value, key = 'global') => {\n store.dispatch({\n type: 'SET_FILTER_FILTER_BY',\n payload: {\n key,\n value\n }\n })\n}\n\nexport default {\n setFilterSearchQuery,\n setFilterSortBy,\n setFilterFilterBy\n}\n","// React\nimport React, { useRef, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Shared\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport { setFilterSearchQuery } from 'store/v2/redux/actions/filter'\nimport useIsMobile from 'shared/utils/useIsMobile'\n\nconst ProductSearch = ({ t, filterKey = 'global' }) => {\n const ref = useRef()\n\n const [value, setValue] = useState('')\n\n const isMobile = useIsMobile()\n\n const handleInputChange = (e) => {\n setValue(e.target.value)\n\n // Search was cleared manually\n if (e.target.value === '') {\n setFilterSearchQuery('', filterKey)\n }\n }\n\n const handleInputKeyUp = (e) => {\n if (e.key === 'Enter') {\n setFilterSearchQuery(value, filterKey)\n\n if (isMobile) {\n ref.current?.blur()\n }\n }\n }\n\n const handleClearClick = () => {\n setValue('')\n\n setFilterSearchQuery('', filterKey)\n\n ref.current?.focus()\n }\n\n return (\n
\n
\n \n
\n \n {value && (\n
\n \n
\n )}\n
\n )\n}\n\nProductSearch.displayName = 'ProductSearch'\n\nProductSearch.propTypes = {\n t: PropTypes.func,\n filterKey: PropTypes.string\n}\n\nconst mapStateToProps = (state, props) => {\n return {\n filterKey: props.searchKey || props.filterKey\n }\n}\n\nconst decoratedComponent = reduxConnect(mapStateToProps)(ProductSearch)\n\nexport default withTranslation('user')(decoratedComponent)\n","import styled, { css } from 'styled-components'\n\nimport { fontWeight, color, size } from 'ui/themes/utils'\n\nimport I from 'ui/elements/I'\n\nexport const Collection = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n\n font-size: 14px !important;\n line-height: 32px !important;\n font-family: \"Roboto\", sans-serif;\n\n cursor: pointer;\n\n font-weight: ${fontWeight('normal')} !important;\n\n clear: both;\n\n ${({ active }) => active && css`\n font-weight: ${fontWeight('bold')} !important;\n `}\n\n > div {\n flex-grow: 1;\n text-align: left;\n }\n\n > span {\n color: ${color('Text/Secondary')};\n font-weight: ${fontWeight('normal')} !important;\n }\n\n > ${I} {\n padding-right: ${size('padding', 'md')};\n }\n`\n\nexport const CollectionList = styled.ul`\n ${({ noPadding }) => !noPadding && css`\n > li {\n padding-left: 10px;\n }\n `}\n`\n","import { CollectionList, Collection } from './styles'\n\nCollectionList.Collection = Collection\n\nexport default CollectionList\n","import Model from '../models'\n\nexport default Model.Collection.actions\n","// React\nimport React, { useState, Fragment, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Libraries\nimport _get from 'lodash/get'\n\n// Components\nimport BCollectionList from 'store/modules/product/blocks/CollectionList'\nimport Icon from 'ui/components/Icon'\n\n// Shared\nimport { useTranslation } from 'react-i18next'\nimport { setFilterCollection } from 'store/v2/redux/actions/filter'\nimport CollectionActions from 'store/v2/redux/actions/collection'\n\nconst CollectionList = ({\n collections,\n rootCollections,\n active,\n fetchCollections,\n filterKey = 'global',\n brandColor,\n horizontalRule\n}) => {\n const [open, setOpen] = useState({})\n const { t } = useTranslation('user')\n\n useEffect(() => {\n fetchCollections()\n }, [])\n\n const handleToggleCollection = (collectionId, e) => {\n e?.stopPropagation()\n\n setOpen((prevOpen) => ({\n ...prevOpen,\n [collectionId]: !prevOpen[collectionId]\n }))\n }\n\n const handleFilterByCollection = (collectionId, e) => {\n // If collection is closed open it\n if (!open[collectionId]) {\n handleToggleCollection(collectionId)\n }\n\n e?.nativeEvent.stopImmediatePropagation()\n setFilterCollection(collectionId, filterKey)\n }\n\n const renderCollection = (collection) => {\n const children = collections.getAll({ parent_id: collection.id })\n const isOpen = !!open[collection.id]\n const hasChildren = children.size() > 0\n\n return (\n
  • \n handleFilterByCollection(collection.id, e)}\n bold={hasChildren}\n active={collection.id === active}\n brandingColor={brandColor}\n >\n {hasChildren && (\n handleToggleCollection(collection.id, e)} />\n )}\n
    {collection.name}
    \n {' '}\n {collection.item_count}\n \n\n {hasChildren && isOpen && {children.map(renderCollection)}}\n
  • \n )\n }\n\n if (rootCollections.size() === 0) return null\n\n return (\n \n {horizontalRule &&
    }\n \n
  • \n handleFilterByCollection(null, e)}>\n {t('user.store.all_collections')}\n \n {rootCollections.map(renderCollection)}\n
  • \n
    \n
    \n )\n}\n\nCollectionList.propTypes = {\n collections: PropTypes.object,\n rootCollections: PropTypes.object,\n active: PropTypes.string,\n fetchCollections: PropTypes.func,\n filterKey: PropTypes.string,\n horizontalRule: PropTypes.bool,\n brandColor: PropTypes.string\n}\n\nconst mapStateToProps = (state, props) => {\n const filter = state.filter.get(props.filterKey || 'global')\n const collections = state.orm.collections.getAll()\n const rootCollections = collections.getAll({ parent_id: null })\n const brandColor = state.settings.get('store.brand_color')\n\n return {\n active: filter?.get('collection_id'),\n collections,\n rootCollections,\n brandColor\n }\n}\n\nconst mapDispatchToProps = (_dispatch, _props) => {\n return {\n fetchCollections: () =>\n CollectionActions.fetchAll({\n sort: '-system,depth,position',\n page: {\n size: 1000\n }\n })\n }\n}\n\nexport default compose(reduxConnect(mapStateToProps, mapDispatchToProps))(CollectionList)\n","/* eslint-disable react/no-find-dom-node */\n/* eslint-disable react/jsx-no-target-blank */\n\n// React\nimport React, { Component, Fragment } from 'react'\nimport { findDOMNode } from 'react-dom'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Libraries\nimport range from 'lodash/range'\nimport _map from 'lodash/map'\nimport _isEmpty from 'lodash/isEmpty'\nimport { Map } from 'immutable'\nimport { withTranslation, Trans } from 'react-i18next'\n\n// Components\nimport Product from './product'\nimport Pagination from './pagination'\nimport ProductSearch from './product_search'\nimport CollectionList from 'store/modules/product/components/CollectionList'\nimport { ModalCartPicker } from 'store/modules/cart/CartPicker/Modal'\n\n// Shared\nimport ItemActions from 'store/v2/redux/actions/item'\nimport isMobile from 'shared/utils/isMobile'\nimport { getLocalCartId } from 'shared/utils/cart'\n\nexport class ProductList extends Component {\n static displayName = 'ProductList'\n\n static propTypes = {\n items: PropTypes.object,\n hasItems: PropTypes.bool,\n hasDates: PropTypes.any,\n searchVisible: PropTypes.bool,\n collectionsVisible: PropTypes.bool,\n filterKey: PropTypes.string,\n filter: PropTypes.instanceOf(Map),\n per: PropTypes.any,\n loadingItems: PropTypes.number,\n wrapClass: PropTypes.string,\n limit: PropTypes.any,\n tags: PropTypes.string,\n categories: PropTypes.string,\n collections: PropTypes.string,\n searchValue: PropTypes.string,\n cart: PropTypes.object,\n brandingColor: PropTypes.string,\n t: PropTypes.func\n }\n\n state = {\n ids: [],\n loading: true,\n loadingItems: 4,\n total: null,\n page: 1,\n per: this.props.per || 24,\n cartModalOpen: false,\n initialLoaded: false\n }\n\n componentDidMount = () => {\n return this.fetchItems()\n }\n\n componentDidUpdate = (prevProps) => {\n const { filter } = this.props\n\n if (filter && !filter.equals(prevProps.filter)) {\n this.resetFilter()\n }\n }\n\n resetFilter = () => {\n const { filter } = this.props\n\n this.setState({ page: 1 })\n\n return this.fetchItems({ ...filter.toJS(), page: 1 })\n }\n\n fetchItems = (options) => {\n let limit = 0\n const { tags, categories, collections } = this.props\n const { per, page } = this.state\n\n if (options == null) {\n options = {}\n }\n\n this.setState({ loading: true })\n\n const cartId = getLocalCartId()\n\n const params = {\n cart_id: cartId,\n page: {\n number: page,\n per\n }\n }\n\n const filter = {}\n\n if (tags) {\n filter.tag = tags.split(',')\n }\n\n if (categories) {\n filter.category = categories.split(',')\n }\n\n if (collections) {\n filter.collection = collections.split(',')\n }\n\n if (options.page) {\n params.page.number = options.page\n }\n if (per) {\n params.page.per = parseInt(per)\n }\n if (options.q) {\n filter.q = options.q\n }\n\n if (options.category_id) {\n filter.category_id = options.category_id\n }\n\n if (options.collection_id) {\n filter.collection_id = options.collection_id\n // Remove collection filter to avoid conflicts\n filter.collection = []\n }\n\n if (options.filter_by === 'available') {\n filter.available = true\n }\n\n if (this.props.limit) {\n limit = parseInt(this.props.limit)\n\n if (!this.props.per) {\n params.page.number = 1\n params.page.per = limit\n }\n }\n\n return ItemActions.fetchAll({\n include: 'photo',\n filter: !_isEmpty(filter) ? filter : undefined,\n sort: options.sort_by,\n apiVersion: 3,\n ...params\n }).then((response) => {\n this.setState({\n ids: _map(response.payload.normalizedResponse.entities.items, 'id'),\n total: limit || response.payload.response.meta.total_count,\n loading: false,\n initialLoaded: true,\n loadingItems: Math.min(limit || response.payload.response.meta.total_count, params.per)\n })\n })\n }\n\n handlePageChange = (page) => {\n this.fetchItems({ page, ...this.props.filter.toJS() })\n this.setState({ page })\n\n const node = findDOMNode(this)\n\n if (node.scrollIntoView != null) {\n return node.scrollIntoView()\n } else {\n return window.scrollTo(0, 0)\n }\n }\n\n handleModalOpen = () => {\n this.setState({ cartModalOpen: true })\n }\n\n handleModalClose = () => {\n this.setState({ cartModalOpen: false })\n }\n\n renderList = () => {\n const { t } = this.props\n const items = this.props.items.getById(this.state.ids)\n\n if (items.size()) {\n return items.map((item) => {\n return (\n
    \n \n
    \n )\n })\n } else if (this.state.loading) {\n return range(1, this.props.loadingItems || this.state.loadingItems + 1).map((i) => (\n
    \n \n
    \n ))\n } else if (this.props.searchValue !== '' || (this.props.hasItems && items.size() === 0)) {\n return
    {t('user.store.no_products_found_try_filters')}
    \n } else {\n return (\n
    \n {t('user.store.no_products_found')}\n }}\n />\n
    \n )\n }\n }\n\n render () {\n const { cart, brandingColor, t } = this.props\n const { cartModalOpen } = this.state\n\n const mobile = isMobile()\n\n return (\n \n \n {this.props.searchVisible && }\n {!this.props.hasDates && (\n
    \n {t('user.store.no_dates_set')}\n
    \n )}\n {this.renderList()}\n {this.state.initialLoaded && this.state.total > 0 && (\n \n )}\n {this.props.collectionsVisible && }\n \n \n
    \n )\n }\n}\n\nconst mapStateToProps = (state, props) => {\n const searchVisible = props.showSearch === 'true'\n const collectionsVisible = props.showCollections === 'true' || props.showCategories === 'true'\n const cart = state.orm.carts.getById(state.client.cartId)\n const filterKey = props.filterKey || 'global'\n const brandingColor = state.settings.get('store.brand_color')\n\n return {\n hasDates: cart && cart.starts_at && cart.stops_at,\n hasItems: state.orm.items.size() > 0,\n items: state.orm.items.getAll(),\n loadingItems: parseInt(props.loadingItems) || parseInt(props.limit),\n searchVisible,\n collectionsVisible,\n filterKey,\n filter: state.filter.get(filterKey),\n cart,\n brandingColor\n }\n}\n\nconst reduxComponent = reduxConnect(mapStateToProps, null)(ProductList)\n\nexport default withTranslation('user')(reduxComponent)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Provider } from 'react-redux'\n\nimport ProductList from '../components/product_list'\nimport Themed from 'store/v2/react/components/Themed'\n\nconst store = window.booqableStore\n\nexport default class List extends React.Component {\n static displayName = 'ListContainer'\n\n static propTypes = {\n searchKey: PropTypes.string\n }\n\n render = () => {\n return (\n \n \n
    \n \n
    \n
    \n
    \n )\n }\n}\n","import styled, { css } from 'styled-components'\n\nexport const ProductButton = styled.div`\n`\n\nexport const BundleItems = styled.div`\n max-height: 175px;\n overflow-y: auto;\n\n display: grid;\n grid-template-columns: 50px max-content 1fr;\n\n margin-bottom: 12px !important;\n\n background:\n /* Shadow covers */\n linear-gradient(white 30%, rgba(255,255,255,0)),\n linear-gradient(rgba(255,255,255,0), white 70%) 0 100%,\n\n /* Shadows */\n radial-gradient(50% 0, farthest-side, rgba(0,0,0,.2), rgba(0,0,0,0)),\n radial-gradient(50% 100%,farthest-side, rgba(0,0,0,.2), rgba(0,0,0,0)) 0 100%;\n background:\n /* Shadow covers */\n linear-gradient(white 30%, rgba(255,255,255,0)),\n linear-gradient(rgba(255,255,255,0), white 70%) 0 100%,\n\n /* Shadows */\n radial-gradient(farthest-side at 50% 0, rgba(0,0,0,.15), rgba(0,0,0,0)),\n radial-gradient(farthest-side at 50% 100%, rgba(0,0,0,.15), rgba(0,0,0,0)) 0 100%;\n background-repeat: no-repeat;\n background-color: white;\n background-size: 100% 40px, 100% 40px, 100% 14px, 100% 14px;\n background-attachment: local, local, scroll, scroll;\n`\n\nexport const BundleItemRow = styled.div`\n display: contents;\n`\n\nexport const BundleItemCell = styled.div`\n display: flex;\n align-items: center;\n\n padding: 5px !important;\n\n font-size: 14px !important;\n\n ${({ disabled }) => disabled && css`\n opacity: 0.6;\n `}\n\n /* Need to specificity hack here ;< */\n &&&&&&&{\n select.bq-variation {\n font-size: 14px !important;\n margin-bottom: 0 !important;\n }\n }\n`\n","import { ProductButton, BundleItems, BundleItemRow, BundleItemCell } from './styles'\n\nProductButton.BundleItems = BundleItems\nProductButton.BundleItemRow = BundleItemRow\nProductButton.BundleItemCell = BundleItemCell\n\nexport default ProductButton\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Libraries\nimport clone from 'lodash/clone'\nimport isEmpty from 'lodash/isEmpty'\nimport isEqual from 'lodash/isEqual'\n\n// Components\nimport FocalImage from 'ui/components/FocalImage'\nimport Icon from 'ui/components/Icon'\nimport BProductButton from 'store/modules/product/blocks/ProductButton'\n\n// Shared\nimport NO_PRODUCT_IMAGE from '@assets/images/no-product-image.png'\n\nexport class BundleItems extends Component {\n static displayName = 'ProductButtonBundleItems'\n\n static propTypes = {\n bundleItems: PropTypes.object,\n products: PropTypes.object,\n productGroups: PropTypes.object,\n photos: PropTypes.object,\n configuration: PropTypes.object,\n setBundleConfiguration: PropTypes.func\n }\n\n componentDidMount = () => {\n this.chooseInitialConfiguration()\n }\n\n chooseInitialConfiguration = () => {\n const { bundleItems, products, configuration } = this.props\n const newConfiguration = clone(configuration)\n\n bundleItems.forEach((bundleItem) => {\n if (bundleItem.product_id) {\n // Specified BundleItem => Use preconfigured Product\n newConfiguration[bundleItem.id] = bundleItem.product_id\n } else if (isEmpty(configuration[bundleItem.id])) {\n // Unspecified BundleItem => Pick Product based on sorting_weight\n // sorting_weight determines order in which Products are shown under Product>Variations in the Back Office\n const choices = products.getAll({ product_group_id: bundleItem.product_group_id }).sort('sorting_weight')\n newConfiguration[bundleItem.id] = choices.getFirst().id\n }\n })\n\n if (!isEqual(newConfiguration, configuration)) {\n this.props.setBundleConfiguration(newConfiguration)\n }\n }\n\n handleChangeVariation = (bundleItemId, e) => {\n const { configuration } = this.props\n const selectedProductId = e.target.value\n\n const newConfiguration = clone(configuration)\n newConfiguration[bundleItemId] = selectedProductId\n\n this.props.setBundleConfiguration(newConfiguration)\n }\n\n renderSelectVariation = (bundleItemId, products, selectedProduct) => {\n return (\n
    \n \n {products.map((product) => (\n \n ))}\n \n \n
    \n )\n }\n\n renderItem = (bundleItem) => {\n const { products, productGroups, photos, configuration } = this.props\n const productGroup = productGroups.getById(bundleItem.product_group_id)\n const product = products.getById(bundleItem.product_id)\n const variation = products.getById(configuration[bundleItem.id])\n const item = variation || product || productGroup\n const photo = photos.getById(item.photo_id)\n const choices = products.getAll({ product_group_id: productGroup.id }).sort('sorting_weight')\n\n return (\n \n \n \n \n \n {bundleItem.quantity}x\n \n \n {(!productGroup.has_variations || bundleItem.product_id) &&\n item.name}\n {productGroup.has_variations && !bundleItem.product_id &&\n this.renderSelectVariation(bundleItem.id, choices, configuration[bundleItem.id])}\n \n \n )\n }\n\n render () {\n const { bundleItems } = this.props\n\n return (\n \n {bundleItems.map((item) => this.renderItem(item))}\n \n )\n }\n}\n\nconst mapStateToProps = (state, props) => {\n const bundleItems = state.orm.bundle_items.getAll({ bundle_id: props.item.id })\n const productGroupIds = bundleItems.pluck('product_group_id')\n const productGroups = state.orm.product_groups.getById(productGroupIds)\n const products = state.orm.products.getAll({ product_group_id: productGroupIds })\n\n return {\n bundleItems,\n products,\n productGroups,\n photos: state.orm.photos.getAll()\n }\n}\n\nexport default reduxConnect(mapStateToProps, null)(BundleItems)\n","import styled, { css } from 'styled-components'\n\nimport { size, fontWeight, fontSize, color } from 'ui/themes/utils'\n\nimport Icon from 'ui/blocks/Icon'\nimport P from 'ui/elements/P'\n\nexport const TimeTable = styled.div`\n width: ${({ width }) => width ? `${width}px` : 'auto'};\n\n ${P} {\n font-size: ${fontSize('md')};\n }\n`\n\nexport const ScrollContainer = styled.div`\n height: 360px;\n\n overflow-y: auto;\n\n @media screen and (max-width: 425px) {\n height: 70vh;\n }\n`\n\nexport const Header = styled.div`\n display: flex;\n flex-flow: row wrap;\n align-items: center;\n\n padding: ${size('padding', 'sm')} !important;\n\n border-bottom: ${size('borderWidth')} solid ${color('Misc/Divider')} !important;\n\n & > ${Icon} {\n flex: 0;\n\n cursor: pointer;\n }\n\n & > ${P} {\n font-weight: ${fontWeight('lighter')};\n }\n\n & > ${P}:last-of-type {\n flex: 1;\n\n text-align: center;\n\n margin: 0;\n }\n`\n\nexport const Item = styled.div`\n display: flex;\n align-items: center;\n\n padding: ${size('padding', 'sm')} !important;\n\n ${({ active }) => active && css`\n background: ${color('Primary/Background2')};\n `}\n\n ${({ inOpeningHours }) => !inOpeningHours && css`\n opacity: 0.5;\n `}\n\n & > ${P} {\n margin: 0;\n\n font-weight: ${fontWeight('lighter')};\n }\n\n & > ${P}:first-of-type {\n flex: 1;\n }\n\n & > ${P}:last-of-type {\n text-align: right;\n }\n`\n\nexport const Indicator = styled.div`\n width: 16px;\n height: 16px;\n\n margin-right: ${size('margin', 'xs')} !important;\n\n border-radius: ${size('borderRadius')};\n\n ${({ status }) => {\n let background\n\n if (status) {\n switch (status) {\n case 'available':\n background = color('Success/Outline')\n break\n case 'unavailable':\n background = color('Danger/Base')\n break\n }\n\n return css`\n background-color: ${background};\n `\n } else {\n /* Loading state */\n return css`\n background: #000000;\n opacity: 0.15;\n\n animation: pulse 1.5s infinite ease-in-out;\n\n @keyframes pulse {\n 0% { opacity: 0.05; }\n 50% { opacity: 0.15; }\n 100% { opacity: 0.05; }\n }\n `\n }\n }}\n`\n","import { Header, Indicator, Item, ScrollContainer, TimeTable } from './styles'\n\nTimeTable.Header = Header\nTimeTable.Item = Item\nTimeTable.Indicator = Indicator\nTimeTable.ScrollContainer = ScrollContainer\n\nexport default TimeTable\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Components\nimport P from 'ui/elements/P'\nimport Loader from 'ui/components/Loader'\nimport BTimeTable from 'store/modules/product/blocks/ProductAvailabilityCalendar/TimeTable'\nimport Icon from 'ui/components/Icon'\n\n// Libraries\nimport { withTranslation } from 'shared/utils/withTranslation'\n\n// Shared\nimport OperatinRuleUtils from 'shared/utils/operating_rules'\nimport { date as dateFormat } from 'shared/utils/format'\nimport moment, { localMomentInUTC } from 'shared/lib/moment'\n\nexport class TimeTable extends Component {\n static displayName = 'TimeTable'\n\n static propTypes = {\n id: PropTypes.string,\n date: PropTypes.any,\n onClose: PropTypes.func,\n fetchAvailability: PropTypes.func,\n quantity: PropTypes.number,\n selected: PropTypes.object,\n availabilities: PropTypes.object,\n showCounts: PropTypes.bool,\n width: PropTypes.number,\n t: PropTypes.func\n }\n\n constructor (props) {\n super(props)\n this.firstOpenElement = React.createRef()\n }\n\n componentDidMount = () => {\n const { date, fetchAvailability } = this.props\n\n fetchAvailability({\n time: date,\n timeTable: true\n })\n }\n\n componentDidUpdate = (prevProps) => {\n if (this.props.availabilities !== prevProps.availabilities) {\n this.firstOpenElement?.current?.scrollIntoView()\n }\n }\n\n render () {\n const { availabilities, onClose, date, selected, showCounts, t } = this.props\n const localDate = localMomentInUTC(date)\n\n let firstOpenElement = availabilities.find((el) => el.inOpeningHours)\n\n return (\n \n \n \n

    {dateFormat(localDate, 'date')}

    \n
    \n \n {!availabilities && }\n {availabilities.map((availability) => {\n let ref\n\n if (firstOpenElement === availability) {\n ref = this.firstOpenElement\n }\n\n const active = selected.contains(availability.time)\n\n return (\n \n \n

    {dateFormat(availability.time, 'time')}

    \n {showCounts &&

    {availability.quantity} {t('user.store.available')}

    }\n {!showCounts &&

    {t(availability.status === 'available' ? 'user.store.available' : 'user.store.unavailable')}

    }\n
    \n )\n })}\n
    \n
    \n )\n }\n}\n\nconst mapStateToProps = (_state, props) => {\n return {\n selected: moment.range(\n moment(props.selected.from),\n moment(props.selected.to)\n ),\n availabilities: props.availabilities.getAll({\n type: 'time'\n }).map((el) => {\n const time = moment(`${el.date} ${el.hour}:${el.minute}`)\n\n return {\n time,\n date: el.date,\n status: el.status,\n quantity: el.quantity,\n inOpeningHours: OperatinRuleUtils.isWithinOpeningHours(time, props.operatingRules, true)\n }\n }).filter((el) => {\n // TODO: In case we want to hide availability outside of opening hours\n // if (!el.inOpeningHours && el.status !== 'unavailable') return false\n const localDate = localMomentInUTC(props.date)\n return moment(el.date).isSame(localDate, 'day')\n }).sortBy((el) => el.time)\n }\n}\n\nconst reduxComponent = reduxConnect(mapStateToProps)(TimeTable)\n\nexport default withTranslation('user')(reduxComponent)\n","import styled from 'styled-components'\nimport Link from 'ui/blocks/Link'\nimport H3 from 'ui/elements/H3'\nimport Label from 'ui/elements/Label'\nimport BQuantityInput from 'ui/blocks/QuantityInput'\n\nimport { size, color, fontSize, fontWeight } from 'ui/themes/utils'\n\nexport const ProductAvailabilityCalendar = styled.div`\n overflow-x: hidden;\n\n .slide-and-fade-enter {\n opacity: 0;\n transform: translateX(100%);\n }\n\n .slide-and-fade-exit {\n opacity: 1;\n transform: translateX(0);\n }\n\n .slide-and-fade-enter-active {\n opacity: 1;\n transform: translateX(0);\n }\n\n .slide-and-fade-exit-active {\n opacity: 0;\n transform: translateX(-100%);\n }\n\n .slide-and-fade-enter-active,\n .slide-and-fade-exit-active {\n transition: all 150ms;\n }\n\n font-family: ${(props) => props.theme.font.body};\n\n .DayPicker-Caption {\n color: ${color('Text/Primary')};\n }\n`\n\nexport const CalendarContainer = styled.div``\n\nexport const Header = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n\n padding: ${size('padding', 'sm')} ${size('padding', 'sm')} 0 !important;\n\n cursor: pointer;\n\n ${H3} {\n font-size: calc(${fontSize('md')} + 2px);\n font-weight: ${fontWeight('semibold')};\n }\n`\n\nexport const InputContainer = styled.div`\n padding: ${size('padding', 'md')} ${size('padding', 'sm')} 0 !important;\n\n font-weight: ${fontWeight('semibold')} !important;\n\n display: flex;\n\n > div:first-child {\n /* Increase flex-basis to allow 3 digit numbers to be fully visible */\n flex-basis: 28%;\n }\n\n > div:last-child {\n flex-grow: 3;\n\n margin-left: ${size('margin', 'md')};\n }\n\n > div:first-child:last-child {\n margin-left: 0;\n }\n\n .Select__menu {\n margin-top: ${size('margin', 'xs')};\n }\n\n .Select__option {\n padding: ${size('padding', 'xs')} ${size('padding', 'md')};\n font-weight: ${fontWeight('lighter')};\n font-size: ${fontSize('md')};\n }\n\n ${Label} {\n font-weight: ${fontWeight('semibold')};\n font-size: ${fontSize('md')};\n\n margin-bottom: ${size('margin', 'xs')};\n }\n\n ${BQuantityInput.Control} {\n font-size: calc(${fontSize('sm')} + 1px);\n line-height: ${fontSize('lg')} !important;\n }\n`\n\nexport const AvailabilityLink = styled(Link)`\n display: inline-block;\n height: 2em;\n\n text-decoration: underline !important;\n`\n","import { ProductAvailabilityCalendar, InputContainer, AvailabilityLink, Header, CalendarContainer } from './styles'\n\nProductAvailabilityCalendar.InputContainer = InputContainer\nProductAvailabilityCalendar.AvailabilityLink = AvailabilityLink\nProductAvailabilityCalendar.Header = Header\nProductAvailabilityCalendar.CalendarContainer = CalendarContainer\n\nexport default ProductAvailabilityCalendar\n","// React\nimport React, { Component, Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport Navigation from 'ui/components/DayPicker/Navigation'\nimport InputField from 'ui/components/InputField'\nimport PickerDay from 'ui/components/Picker/Day'\nimport Popover from 'ui/components/Popover'\nimport Icon from 'ui/components/Icon'\nimport BDatePickerInput from 'ui/blocks/DatePickerInput'\nimport BDayPicker from 'ui/blocks/DayPicker'\nimport H3 from 'ui/elements/H3'\nimport TimeTable from './TimeTable'\nimport PortalWrapper from 'ui/components/PortalWrapper'\nimport BProductAvailabilityCalendar from 'store/modules/product/blocks/ProductAvailabilityCalendar'\nimport Div from 'ui/elements/Div'\n\n// Libraries\nimport DayPicker, { MomentLocaleUtils } from 'react-day-picker'\nimport debounce from 'lodash/debounce'\nimport { CSSTransition, SwitchTransition, config } from 'react-transition-group'\n\n// Shared\nimport { isDayClosed } from 'ui/components/Picker/utils'\nimport useIsMobile from 'shared/utils/useIsMobile'\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport moment, { localMoment } from 'shared/lib/moment'\nimport AvailabilityActions from 'store/v2/redux/actions/availability'\nimport { localMomentInUTC } from 'shared/lib/moment'\n\nimport 'react-day-picker/lib/style.css'\n\n// Get and set locale\nlet locale = 'en'\n\nif (navigator.languages !== undefined) {\n locale = navigator.languages[0]\n} else {\n locale = navigator.language\n}\n\nlocale = locale.toLowerCase()\n\nimport(`moment/locale/${locale}`).then(() => {\n moment.locale(locale)\n\n if (window.booqableOptions) {\n window.booqableOptions.locale = locale.split('-')[0]\n }\n})\n .catch((error) => {\n // These locales are the default in moment and\n // not included in as specific locale files.\n // We can discard the error since US English\n // is already loaded.\n if (['en', 'en-us'].includes(locale)) return\n\n throw (error)\n })\n\nclass ProductAvailabilityCalendar extends Component {\n static displayName = 'ProductAvailabilityCalendar'\n\n static propTypes = {\n id: PropTypes.string,\n productConfiguration: PropTypes.object,\n firstDayOfWeek: PropTypes.number,\n translate: PropTypes.bool,\n selected: PropTypes.object,\n availabilities: PropTypes.object,\n locations: PropTypes.object,\n showPast: PropTypes.bool,\n showTimes: PropTypes.bool,\n fetchAvailability: PropTypes.func,\n defaultLocationId: PropTypes.string,\n t: PropTypes.func,\n showCounts: PropTypes.bool,\n operatingRules: PropTypes.object,\n isMobile: PropTypes.bool\n }\n\n state = {\n selectedLocationId: null,\n quantity: 1,\n date: null,\n time: null,\n containerWidth: 0\n }\n\n componentDidMount = () => {\n // disables animations when in test mode\n config.disabled = !!window.testMode\n\n this.handleFetchAvailability = debounce(\n this.fetchAvailability,\n window.testMode ? 0 : 500\n )\n }\n\n componentDidUpdate = (_, prevState) => {\n if (!prevState.time && this.state.time !== prevState.time && this.containerRef) {\n this.setState({ containerWidth: this.containerRef.getBoundingClientRect().width })\n }\n\n if (!this.state.selectedLocationId && this.props.defaultLocationId !== this.state.selectedLocationId) {\n this.setState({ selectedLocationId: this.props.defaultLocationId })\n }\n }\n\n handlePopoverOpen = () => {\n this.setState({ open: true, time: null })\n this.handleFetchAvailability()\n }\n\n handleDayClick = (date, modifiers) => {\n if (modifiers.disabled) return\n\n const { showTimes } = this.props\n\n if (!showTimes) return\n\n this.setState({ time: date })\n }\n\n handleTimeTableClose = () => {\n this.setState({ time: null })\n }\n\n handlePopoverClose = () => {\n this.setState({ open: false })\n }\n\n fetchAvailability = ({ time, timeTable } = {}) => {\n const { id, productConfiguration, selected, fetchAvailability, defaultLocationId, locations } = this.props\n const { selectedLocationId, quantity, date } = this.state\n const queryDate = time || date || (selected?.from && new Date(selected.from)) || new Date()\n const locationId = selectedLocationId || defaultLocationId || locations?.first()?.id\n\n fetchAvailability(id, productConfiguration, {\n date: queryDate,\n locationId,\n quantity,\n timeTable\n })\n }\n\n renderLocationSelect = () => {\n const { locations, defaultLocationId, t } = this.props\n const { selectedLocationId } = this.state\n\n if (!locations || locations.size() <= 1) return null\n\n return (\n this.setState({ selectedLocationId: value }, this.handleFetchAvailability)\n }}\n renderNativeOnMobile={false}\n />\n )\n }\n\n renderQuantityInput = () => {\n const { t } = this.props\n const { quantity } = this.state\n\n return (\n { this.setState({ quantity: value }, this.handleFetchAvailability) }\n }}\n />\n )\n }\n\n renderDay = (day, modifiers) => {\n const { availabilities, showCounts, showPast, showTimes } = this.props\n\n const availabilityData = availabilities?.getFirst({ type: 'date', date: localMomentInUTC(day).format('YYYY-MM-DD') })\n\n return (\n \n )\n }\n\n renderAvailabilityCalendar = () => {\n const { translate, operatingRules, availabilities, showCounts, firstDayOfWeek, isMobile, showTimes, t } = this.props\n\n const modifiers = {}\n const selected = {\n from: new Date()\n }\n\n if (this.props.selected?.from) {\n Object.assign(selected, {\n from: localMoment(this.props.selected.from, true).toDate(),\n to: localMoment(this.props.selected.to, true).toDate()\n })\n\n Object.assign(modifiers, {\n selected,\n selectionStart: selected.from,\n selectionEnd: selected.to,\n from: selected.from,\n to: selected.to,\n past: { before: new Date() }\n })\n } else {\n Object.assign(modifiers, {\n past: { before: new Date() }\n })\n }\n\n return (\n { this.containerRef = ref }}\n className=\"booqable-component\"\n >\n \n

    {t('user.store.check_availability', t('common.check_availability'))}

    \n {' '}\n \n
    \n \n node.addEventListener('transitionend', done, false)}\n classNames=\"slide-and-fade\"\n >\n <>\n {this.state.time && (\n \n )}\n {!this.state.time && (\n \n \n {this.renderQuantityInput()}\n {this.renderLocationSelect()}\n \n
    \n \n this.setState({ date }, this.handleFetchAvailability)}\n onDayClick={this.handleDayClick}\n disabledDays={(date) => isDayClosed({ date: localMomentInUTC(date), openingHours: operatingRules, allowPast: false })}\n modifiers={modifiers}\n from={selected.from}\n to={selected.to}\n className={!showTimes && 'DayPicker--interactionDisabled'}\n />\n \n
    \n
    \n )}\n \n \n
    \n \n )\n }\n\n renderMobile = (open) => {\n const { t } = this.props\n\n return (\n \n \n {t('user.store.check_availability', t('common.check_availability'))}\n \n \n \n {this.renderAvailabilityCalendar(true)}\n \n \n \n )\n }\n\n render () {\n const { open } = this.state\n const { isMobile, t } = this.props\n\n if (isMobile) {\n return this.renderMobile(open)\n } else {\n return (\n \n \n {t('user.store.check_availability', t('common.check_availability'))}\n \n \n )\n }\n }\n}\n\nconst ProductAvailabilityCalendarWrapper = (props) => {\n const isMobile = useIsMobile()\n\n return \n}\n\nconst mapStateToProps = (state, _props) => {\n return {\n locations: state.orm.locations.getAll(),\n firstDayOfWeek: state.settings.get('dates.first_day_of_week'),\n showTimes: state.settings.get('store.use_times')\n }\n}\n\nconst mapDispatchToProps = (_dispatch, _props) => ({\n fetchAvailability: (id, configuration, { date, locationId, quantity, timeTable }) => {\n if (!date) return\n\n const filter = {\n year: date.getFullYear(),\n month: date.getMonth() + 1,\n item_id: id,\n start_location_id: locationId,\n quantity,\n configuration\n }\n\n if (timeTable) {\n filter.day = date.getDate()\n }\n\n return AvailabilityActions.fetchItemAvailability({\n apiVersion: 3,\n filter\n })\n }\n})\n\nexport default compose(\n reduxConnect(mapStateToProps, mapDispatchToProps),\n withTranslation('user')\n)(ProductAvailabilityCalendarWrapper)\n","import get from 'lodash/get'\n\nexport default {\n selectedForProductGroup (collection, selectedProductId, productGroupId) {\n let selectedProduct\n\n if (selectedProductId) {\n selectedProduct = collection.getById(selectedProductId)\n } else {\n // TODO: Select available product first\n const products = collection.getAll({ product_group_id: productGroupId })\n\n selectedProduct = products.sortBy(\n (product) => product.price_in_cents || product.price_each_in_cents || get(product, 'price.tile.price_in_cents')\n )\n selectedProduct =\n selectedProduct.filter((product) => product.available_quantity > 0).first() || selectedProduct.first()\n }\n\n return selectedProduct\n }\n}\n","import { updateUI } from 'shared/redux/interface'\n\nconst store = window.booqableStore\n\nexport default {\n addLineQtyUI (line, qty) {\n const newQty = parseInt(line.quantity) + parseInt(qty)\n const action = updateUI(`Line${line.id}`, { quantity: newQty })\n\n return store.dispatch(action)\n }\n}\n","// React\nimport React, { Component, Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Libraries\nimport _get from 'lodash/get'\nimport _capitalize from 'lodash/capitalize'\nimport _isEqual from 'lodash/isEqual'\nimport _isNaN from 'lodash/isNaN'\n\n// Components\nimport BundleItems from './BundleItems'\nimport ProductPrice from 'store/v2/react/components/product_price'\nimport InputField from 'ui/components/InputField'\nimport Button from 'ui/components/Button'\nimport Icon from 'ui/components/Icon'\nimport Spacer from 'ui/blocks/Spacer'\nimport ProductAvailabilityCalendar from 'store/modules/product/components/ProductAvailabilityCalendar'\nimport ReadOnlyModeDisabledComponent from 'store/components/ReadOnlyModeDisabledComponent'\n\n// Shared\nimport ReactCSSTransitionGroup from 'shared/lib/react_css_transition_group'\nimport { triggerUserFrameworkBookEvent } from 'shared/utils/userFrameworkEvents'\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport productSelectors from 'store/v2/redux/selectors/product'\nimport cartActions from 'store/v2/redux/actions/cart'\nimport clientActions from 'store/v2/redux/actions/client'\nimport quickviewActions from 'store/v2/redux/actions/quickview'\nimport lineActions from 'store/v2/redux/actions/line'\nimport BundleActions from 'store/v2/redux/actions/bundle'\nimport ProductGroupActions from 'store/v2/redux/actions/product_group'\nimport { getOperatingRules } from 'shared/utils/operating_rules'\n\nexport class ProductButton extends Component {\n static displayName = 'ProductButton'\n\n static propTypes = {\n item: PropTypes.object,\n productGroup: PropTypes.object,\n products: PropTypes.object,\n bundle: PropTypes.object,\n line: PropTypes.object,\n cart: PropTypes.object,\n useAvailability: PropTypes.bool,\n showProductAvailability: PropTypes.bool,\n hasDates: PropTypes.bool,\n book: PropTypes.func.isRequired,\n onChangeProductId: PropTypes.func,\n availabilities: PropTypes.object,\n operatingRules: PropTypes.object,\n showCounts: PropTypes.bool,\n addButtonUsesCheckoutBehaviour: PropTypes.bool,\n t: PropTypes.func,\n clear: PropTypes.func,\n loading: PropTypes.bool\n }\n\n constructor (props) {\n super(props)\n\n this.state = {\n loading: false,\n quantity: 1,\n selectedProductId: null,\n configuration: { products: {} },\n promise: null\n }\n }\n\n componentDidUpdate = (prevProps, prevState) => {\n const cartChanged = prevProps.cart?.updated_at !== this.props.cart?.updated_at\n\n const isBundle = this.props.item.type === 'Bundle'\n const bundleConfigChanged = !_isEqual(prevState.configuration, this.state.configuration)\n\n if (cartChanged) {\n this.loadItemData()\n }\n if (isBundle && (cartChanged || bundleConfigChanged)) {\n this.loadBundlePriceAndAvailability()\n }\n }\n\n get selectedProduct () {\n const { products, item } = this.props\n const { selectedProductId } = this.state\n\n if (item.type !== 'ProductGroup') return null\n\n return productSelectors.selectedForProductGroup(products, selectedProductId, item.id)\n }\n\n loadItemData = () => {\n const { item, cart } = this.props\n\n this.setState({ loading: true })\n\n const callback = () => this.setState({ loading: false, price_each_in_cents: null })\n\n if (item.type === 'ProductGroup') {\n return ProductGroupActions.fetchAll({\n ids: [item.id],\n cart_id: cart && cart.id,\n include: 'photos,products',\n apiVersion: 3\n }).then(callback)\n } else if (item.type === 'Bundle') {\n return BundleActions.fetchAll({\n ids: [item.id],\n cart_id: cart && cart.id,\n include: [\n 'photos',\n 'bundle_items',\n 'bundle_items.product',\n 'bundle_items.product.photo',\n 'bundle_items.product_group',\n 'bundle_items.product_group.products',\n 'bundle_items.product_group.photo',\n 'bundle_items.product_group.products',\n 'bundle_items.product_group.products.photo'\n ].join(','),\n apiVersion: 3\n }).then(callback)\n }\n }\n\n handleBook = () => {\n const { book, clear, addButtonUsesCheckoutBehaviour, line, item, hasDates } = this.props\n const { quantity, selectedProductId, configuration } = this.state\n\n if (!hasDates && addButtonUsesCheckoutBehaviour) {\n return clientActions.toggleModalPicker(true)\n }\n\n this.setState({ loading: true })\n\n let promise\n\n const itemId = selectedProductId || _get(this.selectedProduct, 'id') || item.id\n\n if (addButtonUsesCheckoutBehaviour) {\n promise = clear().then(() => book(itemId, line, quantity, configuration, addButtonUsesCheckoutBehaviour))\n } else {\n promise = book(itemId, line, quantity, configuration, addButtonUsesCheckoutBehaviour)\n }\n\n this.setState({ promise })\n }\n\n handleChangeQuantity = (e) => {\n let { value } = e.target\n\n if (value < 0) {\n value = 1\n }\n\n return this.setState({ quantity: value })\n }\n\n handleChangeVariation = (e) => {\n const id = e.target.value\n\n this.props.onChangeProductId && this.props.onChangeProductId(id)\n\n return this.setState({ selectedProductId: id })\n }\n\n setBundleConfiguration = (newBundleConfiguration) => {\n this.setState({ configuration: { products: newBundleConfiguration } })\n }\n\n loadBundlePriceAndAvailability = () => {\n const { cart, item } = this.props\n const { configuration } = this.state\n\n // Cart MUST be present. Otherwise we get wrong pricing displayed.\n if (!cart) return\n\n BundleActions.configurationAvailability({\n id: item.id,\n products: configuration.products,\n cart_id: cart.id,\n apiVersion: 3\n }).then((response) => {\n this.setState({\n price_each_in_cents: _get(response, 'payload.response.data.configuration.price_each_in_cents'),\n available_quantity: _get(response, 'payload.response.data.configuration.available_quantity')\n })\n })\n }\n\n renderAvailability = () => {\n const {\n useAvailability,\n showProductAvailability,\n availabilities,\n showCounts,\n hasDates,\n item,\n products,\n productGroup,\n bundle,\n cart,\n operatingRules,\n t\n } = this.props\n const { configuration } = this.state\n\n if (!useAvailability) return null\n\n let available\n const product = products && this.selectedProduct\n\n const withProductAvailability =\n useAvailability &&\n showProductAvailability &&\n ['bulk', 'trackable', 'mixed'].includes(item.tracking_type)\n\n if (typeof this.state.available_quantity === 'number') {\n available = this.state.available_quantity\n } else {\n available = (product || item || productGroup || bundle)?.available_quantity\n }\n\n return (\n \n {hasDates && available !== null && (\n \n {available > 0 && showCounts && (\n \n {!_get(productGroup, 'has_variations') && (\n \n {available}\n {' '}\n \n )}\n {t('user.store.available')}\n \n )}\n {available <= 0 && available !== -1 && (\n \n {_capitalize(t('user.store.unavailable'))}\n \n )}\n {(available === -1 ||\n (!showCounts && available > 0)) && (\n \n {_capitalize(t('user.store.available'))}\n \n )}\n \n )}\n {withProductAvailability && (\n \n )}\n \n )\n }\n\n renderSelectVariation = () => {\n const { useAvailability, showCounts, hasDates, products, productGroup, t } = this.props\n const selectedProductId = this.state.selectedProductId || _get(this.selectedProduct, 'id')\n\n return (\n
    \n \n {products.map((product) => {\n const withAvailability =\n useAvailability &&\n hasDates &&\n product.tracking_type !== 'none' &&\n product.available_quantity !== null &&\n showCounts\n\n return (\n \n )\n })}\n \n \n
    \n )\n }\n\n render () {\n const { item, productGroup, bundle, useAvailability, hasDates, addButtonUsesCheckoutBehaviour, t } = this.props\n const { quantity, configuration, price_each_in_cents: priceEachInCents } = this.state\n const selectedProduct = this.selectedProduct || bundle || item\n const loading = this.props.loading || this.state.loading\n\n let disabled = quantity <= 0 || _isNaN(quantity)\n\n if (addButtonUsesCheckoutBehaviour && useAvailability && selectedProduct?.tracking_type !== 'none') {\n disabled =\n disabled ||\n (hasDates && !selectedProduct?.available_quantity) ||\n (hasDates && quantity > selectedProduct?.available_quantity)\n }\n\n return (\n
    \n {bundle && (\n \n )}\n
    \n {_get(productGroup, 'has_variations') && this.renderSelectVariation()}\n \n {this.renderAvailability()}\n
    \n \n \n \n \n {addButtonUsesCheckoutBehaviour && (\n \n {hasDates && t('user.store.add_to_cart')}\n {!hasDates && t('user.store.select_a_period')}\n \n )}\n {!addButtonUsesCheckoutBehaviour && t('user.store.add_to_cart')}\n \n \n
    \n
    \n
    \n )\n }\n}\n\nconst mapStateToProps = (state, props) => {\n const cart = state.orm.carts.getById(state.client.cartId)\n const productGroup = state.orm.product_groups.getById(props.item.id)\n\n const hasDates = !!cart?.starts_at && !!cart?.stops_at\n\n return {\n cart,\n productGroup,\n operatingRules: getOperatingRules(state),\n availabilities: state.orm.shop_availabilities,\n useAvailability: state.settings.get('store.use_availability'),\n showProductAvailability: state.settings.get('store.show_product_availability'),\n bundle: state.orm.bundles.getById(props.item.id),\n products: state.orm.products.getAll({ product_group_id: productGroup && productGroup.id }).sort('sorting_weight'),\n showCounts: !state.settings.get('store.hide_product_availability_quantities'),\n addButtonUsesCheckoutBehaviour: state.settings.get('store.behaviors.add_button') === 'checkout',\n hasDates\n }\n}\n\nconst mapDispatchToProps = () => {\n return {\n clear: () => {\n return cartActions.clear({\n apiVersion: 1\n })\n },\n book: (itemId, line, quantity, configuration, addButtonUsesCheckoutBehaviour) => {\n return cartActions.book({ item_id: itemId, quantity, configuration, apiVersion: 1 }).then(() => {\n if (line) {\n lineActions.addLineQtyUI(line, quantity)\n }\n\n const addToCart = () => {\n quickviewActions.unsetItem()\n clientActions.toggleCart(true)\n }\n\n const handleCheckout = () => {\n quickviewActions.unsetItem()\n clientActions.setCheckingOut()\n }\n\n const checkout = () =>\n clientActions.evaluateCartOverdue() ? clientActions.toggleModalPicker(true) : handleCheckout()\n\n const action = addButtonUsesCheckoutBehaviour ? checkout : addToCart\n\n triggerUserFrameworkBookEvent(itemId, quantity)\n\n return setTimeout(action, 150)\n })\n }\n }\n}\n\nconst reduxComponent = reduxConnect(mapStateToProps, mapDispatchToProps)(ProductButton)\n\nexport default withTranslation('user')(reduxComponent)\n","import React from 'react'\nimport { Provider } from 'react-redux'\n\nimport IdFinder from '../id_finder'\nimport ProductButton from 'store/modules/product/components/ProductButton'\nimport Themed from 'store/v2/react/components/Themed'\n\nconst store = window.booqableStore\n\nexport default class Button extends React.Component {\n static displayName = 'ProductButtonContainer'\n\n render = () => {\n return (\n \n \n
    \n \n \n \n
    \n
    \n
    \n )\n }\n}\n","import styled, { css } from 'styled-components'\n\nimport { fontSize } from 'ui/themes/utils'\n\nexport const ProductImage = styled.div`\n float: left;\n\n width: 250px;\n\n @media (max-width: 534px) {\n width: 100%;\n float: none;\n }\n`\n\nexport const MainImage = styled.div`\n max-height: 100%;\n max-width: 100%;\n\n width: 100%;\n height: 100%;\n\n position: absolute;\n top: 0;\n left: 0;\n\n visibility: hidden;\n\n ${({ visible }) => visible && css`\n visibility: visible;\n `}\n`\n\nexport const MainImageContainer = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n\n width: 250px;\n height: 250px;\n\n position: relative;\n\n cursor: zoom-in;\n\n ${({ magnify }) => magnify && css`\n cursor: zoom-out;\n `}\n\n ${({ canMagnify }) => !canMagnify && css`\n cursor: default;\n `}\n\n @media (max-width: 534px) {\n width: 100%;\n }\n\n @media (max-height: 550px) {\n height: 200px;\n }\n`\n\nexport const GalleryImages = styled.div`\n position: absolute;\n\n left: ${({ offset }) => offset || 0};\n top: 0;\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n transition: left 0.3s ease-in-out;\n`\n\nexport const GalleryImagesContainer = styled.div`\n position: relative;\n overflow: hidden;\n`\n\nexport const GalleryImageContainer = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n\n margin-left: 5px !important;\n\n overflow: hidden;\n\n border: 1px solid transparent !important;\n\n &:hover {\n border: 1px solid ${({ brandingColor }) => brandingColor};\n cursor: pointer;\n }\n\n ${({ selected }) => selected && css`\n border: 1px solid ${({ brandingColor }) => brandingColor} !important;\n `}\n`\n\nexport const GalleryImage = styled.img`\n max-height: 100%;\n max-width: 100%;\n`\n\nexport const Controls = styled.div`\n font-size: ${fontSize('md')};\n\n transition: opacity 0.3s ease-in-out;\n cursor: pointer;\n\n &:hover {\n opacity: 0.6;\n }\n\n ${({ disabled }) => disabled && css`\n opacity: 0.6;\n cursor: initial;\n pointer-events: none;\n `}\n`\n\nexport const Gallery = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n\n margin-top: 10px !important;\n\n ${({ size, offset }) => css`\n ${GalleryImagesContainer} {\n /* 5 = gap between images */\n width: ${((size + 5) * 3) + 5}px;\n height: ${size}px;\n }\n\n ${GalleryImageContainer} {\n height: ${size}px;\n width: ${size}px;\n }\n\n ${GalleryImages} {\n left: -${offset * (size + 5)}px;\n }\n `}\n`\n","import {\n ProductImage, MainImage, MainImageContainer,\n Gallery, GalleryImage, GalleryImageContainer,\n Controls, GalleryImages, GalleryImagesContainer\n} from './styles'\n\nProductImage.MainImage = MainImage\nProductImage.MainImageContainer = MainImageContainer\nProductImage.Gallery = Gallery\nProductImage.GalleryImage = GalleryImage\nProductImage.GalleryImageContainer = GalleryImageContainer\nProductImage.Controls = Controls\nProductImage.GalleryImages = GalleryImages\nProductImage.GalleryImagesContainer = GalleryImagesContainer\n\nexport default ProductImage\n","import styled from 'styled-components'\nimport { color, size } from 'ui/themes/utils'\n\nimport ReactInputPosition from 'react-input-position'\n\nexport const ImageMagnify = styled(ReactInputPosition)`\n &&& {\n position: relative;\n overflow: hidden;\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n z-index: 10;\n background-color: ${color('white')};\n }\n`\n\nexport const ImageContainer = styled.div`\n &&& {\n display: inline-block;\n\n padding: 2px;\n padding-bottom: 0;\n\n border: ${size('borderWidth')} solid ${color('Misc/Divider')};\n\n z-index: 10;\n background-color: ${color('white')};\n }\n`\n\nexport const Image = styled.img`\n &&& {\n margin-bottom: -2px;\n }\n`\n\nexport const Portal = styled.div`\n &&& {\n width: 100%;\n height: 100%;\n\n position: relative;\n overflow: hidden;\n\n background-image: url(${({ image }) => image});\n background-repeat: no-repeat;\n background-size: cover;\n\n z-index: 1024;\n\n transform: ${({ scale }) => `scale(${scale})`};\n }\n`\n\nexport const PortalContainer = styled.div`\n width: ${({ width }) => width}px;\n height: ${({ height }) => height}px;\n\n overflow: hidden;\n`\n\nexport const MagnifyContainer = styled.div`\n position: absolute;\n top: 30px;\n left: 310px;\n\n background-color: ${color('white')};\n box-shadow: ${size('shadow', 'md')};\n`\n","import { ImageMagnify, ImageContainer, Image, Portal, PortalContainer, MagnifyContainer } from './styles'\n\nImageMagnify.ImageContainer = ImageContainer\nImageMagnify.Image = Image\nImageMagnify.Portal = Portal\nImageMagnify.PortalContainer = PortalContainer\nImageMagnify.MagnifyContainer = MagnifyContainer\n\nexport default ImageMagnify\n","// React\nimport React, { Fragment, useState, useRef } from 'react'\nimport { createPortal } from 'react-dom'\nimport PropTypes from 'prop-types'\n\nimport BImageMagnify from 'store/modules/product/blocks/ImageMagnify'\n\nimport { interpolateNumber } from 'd3-interpolate'\n\nconst ImageRenderer = (props) => {\n const originalRef = useRef(null)\n\n const [originalDimensions, setOriginalDimensions] = useState(null)\n\n const handleOriginalLoad = ({ target: img }) => {\n setOriginalDimensions({ height: img.offsetHeight, width: img.offsetWidth })\n }\n\n const calculatePosition = (x, y) => {\n const offset = 50 * props.scale\n\n if (!originalRef || !originalRef.current) return '0 0'\n\n const box = originalRef.current.getBoundingClientRect()\n const { width, height } = box\n\n const lo = (x / width) * 100\n const wo = (y / height) * 100\n\n const rx = `calc(${lo}% + ${interpolateNumber(offset, -offset)(lo / 100)}px)`\n const ry = `calc(${wo}% + ${interpolateNumber(offset, -offset)(wo / 100)}px)`\n\n return `${rx} ${ry}`\n }\n\n const imageIsVertical = originalDimensions && originalDimensions.height > (props.size || props.height)\n\n return (\n \n \n \n \n {originalRef?.current &&\n createPortal(\n \n \n ,\n props.portalTarget || document.body\n )}\n \n )\n}\n\nImageRenderer.propTypes = {\n originalImage: PropTypes.string.isRequired,\n zoomedImage: PropTypes.string,\n imageAlt: PropTypes.string,\n size: PropTypes.number,\n width: PropTypes.number,\n height: PropTypes.number,\n zoomedSize: PropTypes.number,\n zoomedWidth: PropTypes.number,\n zoomedHeight: PropTypes.number,\n elementDimensions: PropTypes.object,\n portalTarget: PropTypes.any,\n activePosition: PropTypes.object,\n scale: PropTypes.number\n}\n\nexport default ImageRenderer\n","// React\nimport React from 'react'\n\n// Libraries\nimport {\n MOUSE_ACTIVATION\n} from 'react-input-position'\n\n// Components\nimport BImageMagnify from 'store/modules/product/blocks/ImageMagnify'\nimport ImageRenderer from './ImageRenderer'\n\nconst ImageMagnify = (props) => {\n return (\n \n \n \n )\n}\n\nexport default ImageMagnify\n","import styled, { css } from 'styled-components'\nimport { color, size } from 'ui/themes/utils'\n\nexport const ModalGallery = styled.div`\n position: fixed;\n\n top: 0;\n left: 0;\n\n background-color: ${color('white')};\n\n width: 100vw;\n height: 100vh;\n\n z-index: 99999;\n`\n\nexport const Title = styled.h3`\n text-align: center;\n\n padding: ${size('padding', 'sm')} 0;\n\n line-height: 25px;\n\n width: 75%;\n margin: 0 auto;\n\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n`\n\nexport const Wrapper = styled.div`\n display: flex;\n flex-flow: column nowrap;\n\n position: relative;\n\n height: 100%;\n`\n\nexport const ControlWrapper = styled.div`\n display: inline-block;\n\n padding: ${size('padding', 'sm')};\n\n background-color: ${color('white')}80;\n`\n\nexport const Header = styled.div`\n z-index: 1;\n\n ${ControlWrapper} {\n position: absolute;\n top: 0;\n left: 0;\n }\n`\n\nexport const Body = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n\n padding: ${size('padding', 'sm')};\n\n height: calc(100% - 125px);\n\n position: relative;\n`\n\nexport const Footer = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n\n position: absolute;\n bottom: 0;\n left: 0;\n\n width: 100%;\n\n padding-bottom: ${size('padding', 'sm')};\n`\n\nexport const Controls = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n\n position: absolute;\n top: 50%;\n left: 0;\n\n width: 100%;\n\n transform: translateY(-50%);\n`\n\nexport const GalleryImages = styled.div`\n position: absolute;\n\n left: ${({ offset }) => offset || 0};\n top: 0;\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n transition: left 0.3s ease-in-out;\n`\n\nexport const GalleryImagesContainer = styled.div`\n position: relative;\n overflow: hidden;\n`\n\nexport const Image = styled.img`\n width: ${({ width }) => width};\n height: ${({ height }) => height};\n max-height: 400px;\n\n @media (orientation: landscape) {\n height: 100%;\n width: auto;\n }\n`\n\nexport const GalleryImageContainer = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n\n margin-left: ${size('margin', 'xs')} !important;\n\n overflow: hidden;\n\n border: ${size('borderWidth')} solid transparent !important;\n\n &:hover {\n border-color: ${({ brandingColor }) => brandingColor};\n cursor: pointer;\n }\n\n ${({ selected }) =>\n selected &&\n css`\n border-color: ${({ brandingColor }) => brandingColor} !important;\n `}\n`\n\nexport const Gallery = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n\n ${({ size, offset }) => css`\n ${GalleryImagesContainer} {\n /* 5 = gap between images */\n width: ${(size + 5) * 3 + 5}px;\n height: ${size}px;\n }\n\n ${GalleryImageContainer} {\n height: ${size}px;\n width: ${size}px;\n }\n\n ${GalleryImages} {\n left: -${offset * (size * 0.85)}px;\n }\n `}\n`\n","import {\n ModalGallery,\n Wrapper,\n Body,\n Header,\n ControlWrapper,\n Controls,\n Footer,\n Gallery,\n GalleryImageContainer,\n GalleryImagesContainer,\n GalleryImages,\n Title,\n Image\n} from './styles'\n\nModalGallery.Wrapper = Wrapper\nModalGallery.Body = Body\nModalGallery.Header = Header\nModalGallery.ControlWrapper = ControlWrapper\nModalGallery.Controls = Controls\nModalGallery.Footer = Footer\nModalGallery.Gallery = Gallery\nModalGallery.GalleryImageContainer = GalleryImageContainer\nModalGallery.GalleryImagesContainer = GalleryImagesContainer\nModalGallery.GalleryImages = GalleryImages\nModalGallery.Title = Title\nModalGallery.Image = Image\n\nexport default ModalGallery\n","// React\nimport React, { useState, useEffect } from 'react'\nimport { createPortal } from 'react-dom'\n\n// Libraries\nimport _get from 'lodash/get'\n\n// Components\nimport BModalGallery from 'store/modules/product/blocks/ModalGallery'\nimport Icon from 'ui/components/Icon'\nimport FocalImage from 'ui/components/FocalImage'\n\nconst THUMBNAIL_SIZE = 60\n\nconst ModalGallery = (props) => {\n const [swipe, setSwipe] = useState({})\n const [swiping, setSwiping] = useState(false)\n const [galleryOffset, setGalleryOffset] = useState(0)\n const [dimensions, setDimensions] = useState(null)\n\n useEffect(() => {\n const photoIndex = props.photos.indexOf(props.selectedPhoto)\n\n if (photoIndex <= -1) {\n setGalleryOffset(0)\n } else {\n setGalleryOffset(Math.min(photoIndex, getMaximumOffset()))\n }\n }, [props.selectedPhoto])\n\n const onTouchStart = (e) => {\n const touch = e.touches[0]\n\n setSwipe({ x: touch.clientX })\n }\n\n const onTouchMove = (e) => {\n if (e.changedTouches && e.changedTouches.length) {\n setSwiping(true)\n }\n }\n\n const onTouchEnd = (e) => {\n const touch = e.changedTouches[0]\n const x = touch.clientX - swipe.x\n\n if (swiping && x > 50) {\n props.handlePhotoSelect && props.handlePhotoSelect(-1)\n } else if (swiping && x < 50) {\n props.handlePhotoSelect && props.handlePhotoSelect(1)\n }\n\n setSwiping(false)\n }\n\n const onImageLoad = ({ target: img }) => {\n setDimensions({ height: img.offsetHeight, width: img.offsetWidth })\n }\n\n const getMaximumOffset = () => {\n return Math.max(props.photos.length - 1, 0)\n }\n\n const handleImagesForward = () => {\n if (galleryOffset + 1 > getMaximumOffset()) return null\n\n setGalleryOffset(galleryOffset + 1)\n }\n\n const handleImagesBackward = () => {\n if (galleryOffset - 1 < 0) return null\n\n setGalleryOffset(galleryOffset - 1)\n }\n\n const showGallery = props.photos.length > 0\n const showControls = props.photos.length > 1\n\n const imageIsVertical = dimensions && (dimensions.height / dimensions.width) > 1\n\n return createPortal(\n \n \n \n \n \n \n {props.itemTitle}\n \n \n \n {showControls && (\n \n {\n props.handlePhotoSelect(-1)\n handleImagesBackward()\n }}\n >\n \n \n {\n props.handlePhotoSelect(1)\n handleImagesForward()\n }}\n >\n \n \n \n )}\n \n \n {showGallery && (\n \n \n \n {props.photos.map((photo) => (\n props.onThumbnailPress(photo)}\n >\n \n \n ))}\n \n \n \n )}\n \n \n ,\n document.body\n )\n}\n\nexport default ModalGallery\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Libraries\nimport _get from 'lodash/get'\nimport _find from 'lodash/find'\nimport _findIndex from 'lodash/findIndex'\n\n// Components\nimport FocalImage from 'ui/components/FocalImage'\nimport Icon from 'ui/components/Icon'\nimport BProductImage from 'store/modules/product/blocks/ProductImage'\nimport ImageMagnify from 'store/modules/product/components/ImageMagnify'\nimport ModalGallery from 'store/modules/product/components/ModalGallery'\n\n// Shared\nimport useIsMobile from 'shared/utils/useIsMobile'\nimport NO_PRODUCT_IMAGE from '@assets/images/no-product-image.png'\n\nconst THUMBNAIL_SIZE = 60\n\nexport class ProductImage extends Component {\n static displayName = 'ProductImage'\n\n static propTypes = {\n defaultPhoto: PropTypes.object,\n // Show this photo\n photoId: PropTypes.string,\n brandingColor: PropTypes.string,\n portalTarget: PropTypes.instanceOf(Element),\n itemTitle: PropTypes.any,\n alt: PropTypes.string,\n isMobile: PropTypes.bool\n }\n\n constructor (props) {\n super(props)\n\n this.state = {\n selectedPhoto: null,\n galleryOffset: 0,\n magnify: false,\n showGallery: false,\n hideFocalImages: false\n }\n }\n\n componentDidMount = () => {\n this.componentDidUpdate({})\n }\n\n componentDidUpdate = (prevProps) => {\n const { defaultPhoto, photoId } = this.props\n\n if (photoId !== prevProps.photoId) {\n let newSelectedPhoto\n\n if (photoId) {\n newSelectedPhoto = _find([defaultPhoto, ...this.photos], { id: photoId })\n } else {\n newSelectedPhoto = defaultPhoto\n }\n\n const newState = { selectedPhoto: newSelectedPhoto }\n\n // Makes sure we update the gallery offset if needed\n const photoIndex = this.photos.indexOf(newSelectedPhoto)\n\n if (photoIndex <= -1) {\n newState.galleryOffset = 0\n } else {\n newState.galleryOffset = Math.min(photoIndex, this.maximumOffset)\n }\n\n this.setState(newState)\n }\n }\n\n get maximumOffset () {\n // Displaying 3 images at a time the default product group\n // image + 2 album_photos so maximumOffset is how many images\n // over these 3\n return Math.max(this.photos.length - 2, 0)\n }\n\n get photos () {\n return _get(this.props, 'albumPhotos', [])\n }\n\n handleChangeImage = (photo) => {\n this.setState({ selectedPhoto: photo, magnify: false, hideFocalImages: false })\n }\n\n handleImagesForward = () => {\n const { galleryOffset } = this.state\n\n if (galleryOffset + 1 > this.maximumOffset) return null\n\n this.setState({ galleryOffset: galleryOffset + 1 })\n }\n\n handleImagesBackward = () => {\n const { galleryOffset } = this.state\n\n if (galleryOffset - 1 < 0) return null\n\n this.setState({ galleryOffset: galleryOffset - 1 })\n }\n\n handleClick = () => {\n const { magnify, hideFocalImages } = this.state\n const { defaultPhoto } = this.props\n\n const canMagnify = [defaultPhoto, ...this.photos][0] !== undefined\n\n if (canMagnify) {\n this.setState({ magnify: !magnify, hideFocalImages: !hideFocalImages })\n }\n }\n\n handleTouch = () => {\n const { defaultPhoto } = this.props\n\n const canMagnify = [defaultPhoto, ...this.photos][0] !== undefined\n\n if (canMagnify) {\n this.setState({ showGallery: true })\n }\n }\n\n handleGalleryClose = (e) => {\n e.preventDefault()\n\n this.setState({ showGallery: false })\n }\n\n handleThumbnailPress = (selectedPhoto) => {\n this.setState({ selectedPhoto })\n }\n\n handlePhotoSelect = (direction) => {\n const { selectedPhoto } = this.state\n const { defaultPhoto } = this.props\n\n const photosArray = [defaultPhoto, ...this.photos]\n\n const selectedPhotoURL = (selectedPhoto && selectedPhoto.large_url) || (defaultPhoto && defaultPhoto.large_url)\n\n const currentIndex = _findIndex(photosArray, { large_url: selectedPhotoURL })\n\n if (direction === -1 && currentIndex === 0) return\n\n if (direction === 1 && currentIndex === photosArray.length - 1) return\n\n const newSelectedPhoto = photosArray[currentIndex + direction]\n\n this.setState({ selectedPhoto: newSelectedPhoto })\n }\n\n render () {\n const { selectedPhoto, galleryOffset, magnify, showGallery: showMobileGallery, hideFocalImages } = this.state\n const { defaultPhoto, brandingColor, portalTarget, itemTitle, alt, isMobile } = this.props\n\n const selectedPhotoURL = (selectedPhoto && selectedPhoto.large_url) || (defaultPhoto && defaultPhoto.large_url)\n const selectedLargePhotoURL = (selectedPhoto && selectedPhoto.xlarge_url) || (defaultPhoto && defaultPhoto.xlarge_url)\n\n const showGallery = this.photos.length > 0\n const showControls = this.photos.length > 2\n\n const canMagnify = [defaultPhoto, ...this.photos][0] !== undefined\n\n return (\n \n \n {[defaultPhoto, ...this.photos].map((photo, index) => (\n \n \n \n ))}\n {canMagnify && magnify && !isMobile && (\n \n )}\n {showMobileGallery && isMobile && (\n \n )}\n \n {showGallery && (\n \n {showControls && (\n \n \n \n )}\n \n \n {[defaultPhoto, ...this.photos].map((photo) => (\n \n \n \n ))}\n \n \n {showControls && (\n = this.maximumOffset}>\n \n \n )}\n \n )}\n \n )\n }\n}\n\nconst ProductImageWrapper = (props) => {\n const isMobile = useIsMobile()\n\n return \n}\n\nconst mapStateToProps = (state, props) => {\n const photos = state.orm.photos\n .getAll({ owner_id: props.ownerId })\n .sort('position')\n .toArray()\n\n const defaultPhoto = photos && photos[0]\n const albumPhotos = photos && photos.slice(1)\n\n return {\n brandingColor: state.settings.get('store.brand_color'),\n defaultPhoto,\n albumPhotos\n }\n}\n\nexport default reduxConnect(mapStateToProps)(ProductImageWrapper)\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport uiConnect from 'shared/redux/interface'\nimport { compose } from 'redux'\n\n// Libraries\n\n// Components\nimport ProductButton from 'store/modules/product/components/ProductButton'\nimport ProductImage from 'store/modules/product/components/ProductImage'\nimport BImageMagnify from 'store/modules/product/blocks/ImageMagnify'\n\n// Shared\nimport { triggerUserFrameworkViewProductEvent } from 'shared/utils/userFrameworkEvents'\nimport productSelectors from 'store/v2/redux/selectors/product'\nimport BundleActions from 'store/v2/redux/actions/bundle'\nimport ProductGroupActions from 'store/v2/redux/actions/product_group'\n\nclass ProductDetail extends Component {\n static displayName = 'ProductDetail'\n\n static propTypes = {\n onChangeProductId: PropTypes.func,\n item: PropTypes.object,\n product: PropTypes.object,\n bundleItems: PropTypes.any,\n selectedProductId: PropTypes.string,\n ui: PropTypes.object,\n cart: PropTypes.object\n }\n\n constructor (props) {\n super(props)\n\n this.state = {\n triggeredTracking: false,\n hovered: false,\n loading: false\n }\n }\n\n componentDidUpdate = (prevProps) => {\n const { product, bundleItems } = this.props\n\n // On mount window.Booqable.data is not set yet. By keeping track of whether this is triggered,\n // we can use the data in reporting events. In this event we also include Bundle data.\n if (product && !this.state.triggeredTracking) {\n const isBundle = product.type === 'Bundle'\n\n if (isBundle && !bundleItems) return\n\n this.setState({ triggeredTracking: true })\n\n triggerUserFrameworkViewProductEvent(product, isBundle && bundleItems)\n }\n\n if (this.props.ui?.selectedProductId && this.props.ui?.selectedProductId !== prevProps.ui?.selectedProductId) {\n triggerUserFrameworkViewProductEvent(product)\n }\n }\n\n componentDidMount = () => {\n const { product, item } = this.props\n const productDataFresh =\n product?.price_each_in_cents === item?.price_each_in_cents &&\n product?.charge_label === item?.charge_label &&\n product?.available_quantity === item?.available_quantity\n\n if (productDataFresh || window.bqFetchingDetailProducts) return\n\n this.fetchData()\n }\n\n fetchData = () => {\n const { item, cart } = this.props\n\n this.setState({ loading: true })\n\n const callback = () => this.setState({ loading: false })\n\n if (item.type === 'ProductGroup') {\n return ProductGroupActions.fetchAll({\n ids: [item.id],\n cart_id: cart && cart.id,\n include: 'photos,products',\n apiVersion: 3\n }).then(callback)\n } else if (item.type === 'Bundle') {\n return BundleActions.fetchAll({\n ids: [item.id],\n cart_id: cart && cart.id,\n include: [\n 'photos', 'bundle_items', 'bundle_items.product', 'bundle_items.product.photo',\n 'bundle_items.product_group', 'bundle_items.product_group.products',\n 'bundle_items.product_group.photo', 'bundle_items.product_group.products',\n 'bundle_items.product_group.products.photo'\n ].join(','),\n apiVersion: 3\n }).then(callback)\n }\n }\n\n render = () => {\n const { item } = this.props\n const { loading } = this.state\n\n return (\n
    \n \n
    \n

    \n {item && item.name}\n

    \n {item &&\n (\n \n )}\n {item && item.description &&\n
    }\n this.magnifyRef = ref} />\n
    \n
    \n )\n }\n}\n\nconst uiToProps = {\n state: {\n selectedProductId: null\n }\n}\n\nconst mapStateToProps = (state, props) => {\n const item = props.item || state.orm.items.getById(props.itemId)\n const selectedProduct = productSelectors.selectedForProductGroup(\n state.orm.products.sort('sorting_weight'),\n props.ui != null ? props.ui.selectedProductId : undefined,\n item.id\n )\n const bundle = item.type === 'Bundle' && state.orm.bundles.getById(item.id)\n const bundleItems = bundle && state.orm.bundle_items.getById(bundle.bundle_items)\n\n return {\n item,\n translations: state.client.get('translations').toJS(),\n product: selectedProduct,\n cart: state.orm.carts.getById(state.client.cartId),\n bundle,\n bundleItems\n }\n}\n\nconst mapDispatchToProp = (_, props) => {\n return {\n onChangeProductId (id) {\n return props.updateUI({ selectedProductId: id })\n }\n }\n}\n\nexport default compose(\n uiConnect('ProductDetail', uiToProps),\n reduxConnect(mapStateToProps, mapDispatchToProp)\n)(ProductDetail)\n","import React from 'react'\nimport { Provider } from 'react-redux'\n\nimport IdFinder from '../id_finder'\nimport ProductDetail from '../components/product_detail'\nimport Themed from 'store/v2/react/components/Themed'\n\nconst store = window.booqableStore\n\nexport default class Detail extends React.Component {\n static displayName = 'ProductDetailContainer'\n\n render () {\n return (\n \n \n
    \n \n \n \n
    \n
    \n
    \n )\n }\n}\n","// React\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport uiConnect from 'shared/redux/interface'\nimport { connect as reduxConnect, Provider } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport ProductDetail from '../components/product_detail'\nimport Themed from 'store/v2/react/components/Themed'\n\nconst store = window.booqableStore\n\nclass QuickviewInner extends React.Component {\n static displayName = 'QuickviewInner'\n\n static propTypes = {\n item: PropTypes.any,\n itemId: PropTypes.string,\n closeWrapper: PropTypes.func,\n close: PropTypes.func\n }\n\n render () {\n const { itemId, item, closeWrapper, close } = this.props\n\n return (\n
    \n \n
    \n \n {itemId && }\n
    \n
    \n
    \n )\n }\n}\n\nconst uiToProps = {\n state: {\n itemId: null\n }\n}\n\nconst mapStateToProps = (state, props) => {\n const itemId = props.ui.itemId\n\n return {\n itemId,\n item: state.orm.items.getById(itemId)\n }\n}\n\nconst mapDispatchToProps = (dispatch, props) => {\n const close = () => props.updateUI({ itemId: null })\n\n return {\n closeWrapper: (e) => {\n if (e.target.id === 'booqable-quickview-wrapper') {\n return close()\n }\n },\n close\n }\n}\n\nconst QuickviewInnerComposed = compose(\n uiConnect('Quickview', uiToProps),\n reduxConnect(mapStateToProps, mapDispatchToProps)\n)(QuickviewInner)\n\nexport default class Quickview extends React.Component {\n static displayName = 'Quickview'\n\n render () {\n return (\n \n \n \n \n \n )\n }\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Provider } from 'react-redux'\nimport ProductSearch from '../components/product_search'\nimport Themed from 'store/v2/react/components/Themed'\n\nconst store = window.booqableStore\n\nexport default class ProductSearchContainer extends React.Component {\n static displayName = 'ProductSearchContainer'\n\n static propTypes = {\n searchKey: PropTypes.string\n }\n\n render = () => {\n return (\n \n \n
    \n \n
    \n
    \n
    \n )\n }\n}\n","import styled, { css } from 'styled-components'\n\nimport { transparentize } from 'ui/themes/utils'\n\nimport BPeriod from '../../blocks/Period'\n\nexport const DateTimeContainer = styled.div`\n &:first-child {\n border-radius: 3px 3px 0 3px;\n }\n\n &:nth-child(2) {\n border-radius: 3px 3px 3px 0;\n }\n\n ${(props) => props.disabled || (props.active ?\n css`\n margin-bottom: -2px !important;\n\n border-bottom: 2px solid !important;\n ${(props) => props.brandingColor ? `border-color: ${props.brandingColor} !important` : ''};\n ` :\n css`\n &:hover {\n margin-bottom: -2px !important;\n\n border-bottom: 2px solid !important;\n\n ${(props) => props.brandingColor ? `border-color: ${transparentize(props.brandingColor, 0.5)} !important` : ''};\n }\n `)}\n`\n\nexport const Container = styled.div`\n position: relative;\n\n display: flex;\n\n ${(props) => props.useAMPM ? 'min-width: 330px' : 'min-width: 270px'};\n\n width: 100%;\n min-height: 50px;\n\n background: #FFFFFF;\n\n border: 1px solid #E9EBED !important;\n border-radius: 3px;\n\n ${DateTimeContainer} {\n width: 100%;\n\n &:first-of-type ${BPeriod.Detail} {\n border-right: 1px solid #E9EBED !important;\n }\n\n ${BPeriod.Detail} {\n display: flex;\n flex-flow: column nowrap;\n justify-content: center;\n\n padding: 10px;\n\n width: 100%;\n height: 100%;\n\n cursor: pointer;\n }\n }\n\n @media screen and (max-width: 320px) {\n display: block;\n min-width: 100%;\n\n ${DateTimeContainer} {\n &:first-child {\n border-bottom: 1px solid #E9EBED !important;\n }\n }\n}\n`\n\nexport const Label = styled.div`\n margin: 4px 0 !important;\n\n font-weight: 500 !important;\n`\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Libraries\nimport { withTranslation } from 'shared/utils/withTranslation'\n\n// Components\nimport { ModalCartPicker } from 'store/modules/cart/CartPicker/Modal'\nimport BPeriod from '../../blocks/Period'\n\n// Shared\nimport Format from 'shared/utils/format'\nimport quickviewActions from 'store/v2/redux/actions/quickview'\nimport { triggerUserFrameworkBookEvent } from 'shared/utils/userFrameworkEvents'\nimport ClientActions from 'store/v2/redux/actions/client'\nimport ItemActions from 'store/v2/redux/actions/item'\nimport CartActions from 'store/v2/redux/actions/cart'\nimport { isLocationInputEnabled } from 'ui/components/Picker/utils'\nimport useIsMobile from 'shared/utils/useIsMobile'\n\n// Styles\nimport { Container, DateTimeContainer } from './Base.styles'\n\nexport class SeparateDatePicker extends Component {\n constructor (props) {\n super(props)\n\n this.state = {\n modalOpen: false,\n loading: false\n }\n }\n\n static displayName = 'SeparateDatePicker'\n\n static propTypes = {\n periodType: PropTypes.string,\n useAMOrPM: PropTypes.bool,\n locations: PropTypes.object,\n cart: PropTypes.object,\n timeFormat: PropTypes.string,\n useTimes: PropTypes.bool,\n brandingColor: PropTypes.string,\n productId: PropTypes.string,\n item: PropTypes.object,\n isMobile: PropTypes.bool,\n title: PropTypes.string,\n t: PropTypes.func\n }\n\n componentDidMount = () => {\n const { productId } = this.props\n\n // Fetch item if id set\n if (productId) {\n this.setState({ loading: true })\n ItemActions.fetchAll({\n include: 'photo',\n apiVersion: 3,\n ids: [productId]\n }).then(() => {\n this.setState({ loading: false })\n })\n }\n }\n\n handleSave = () => {\n const { item, productId } = this.props\n\n if (!productId) return\n\n if (!item) {\n // Item not in state as we can't fetch products trough the item endpoint\n // so it's a product and should be booked\n CartActions.book({ item_id: productId, quantity: 1, apiVersion: 1 }).then(() => {\n triggerUserFrameworkBookEvent(productId, 1)\n // Implemented in PR#6092\n ClientActions.setCheckingOut()\n })\n } else {\n quickviewActions.setItem(productId)\n }\n }\n\n handleClose = () => {\n this.setState({ modalOpen: false })\n }\n\n handleOpenModal = () => {\n this.setState({ modalOpen: true })\n }\n\n handleTouch = (e) => {\n e.preventDefault()\n this.handleOpenModal()\n }\n\n render () {\n const {\n useAMOrPM,\n useTimes,\n periodType,\n brandingColor,\n cart,\n locations,\n productId,\n item,\n title,\n isMobile,\n t\n } = this.props\n\n const {\n modalOpen\n } = this.state\n\n const hasLocations = locations.size() > 1\n\n return (\n \n \n {cart && cart.starts_at ?\n (\n \n {hasLocations && isLocationInputEnabled('start') && (\n \n {cart && cart.start_location_id ? locations.getById(cart.start_location_id).name : null}\n \n )}\n \n {`${Format.date(\n cart ? cart.starts_at : undefined,\n 'MMM D[,] YYYY'\n )}${useTimes ?\n `, ${Format.date(\n cart ? cart.starts_at : undefined,\n this.props.timeFormat\n )}` :\n ''}`}\n \n \n ) :\n (\n \n \n {t('user.store.start_date')}\n \n \n )}\n \n \n {cart && cart.stops_at ?\n (\n \n {hasLocations && isLocationInputEnabled('stop') && (\n \n {cart && cart.stop_location_id ? locations.getById(cart.stop_location_id).name : null}\n \n )}\n \n {`${Format.date(\n cart ? cart.stops_at : undefined,\n 'MMM D[,] YYYY'\n )}${useTimes ?\n `, ${Format.date(\n cart ? cart.stops_at : undefined,\n this.props.timeFormat\n )}` :\n ''}`}\n \n \n ) :\n (\n \n \n {t('user.store.stop_date')}\n \n \n )}\n \n \n \n )\n }\n}\n\nconst FunctionalSeparateDatePicker = (props) => {\n const isMobile = useIsMobile()\n\n return \n}\n\nconst mapStateToProps = (state, props) => {\n const useAMOrPM = state.settings.get('dates.use_am_pm')\n const useTimes = state.settings.get('store.use_times')\n const brandingColor = window.booqableOptions?.primaryColor ?? state.settings.get('store.brand_color')\n const cart = state.orm.carts.getById(state.client.cartId)\n\n let timeFormat = ''\n\n if (useTimes) {\n timeFormat = useAMOrPM ? ' hh:mm A' : ' HH:mm'\n }\n\n return {\n cart,\n useTimes,\n item: state.orm.items.getById(props.productId),\n brandingColor,\n locations: state.orm.locations.getAll().sort('name'),\n timeFormat\n }\n}\n\nconst reduxComponent = reduxConnect(mapStateToProps, null)(FunctionalSeparateDatePicker)\n\nexport default withTranslation('user')(reduxComponent)\n","import React from 'react'\nimport { Provider } from 'react-redux'\n\nimport SeparateDatePicker from '../components/separate_date_picker'\nimport Themed from 'store/v2/react/components/Themed'\n\nconst store = window.booqableStore\n\nexport default class SeparateDatePickerContainer extends React.Component {\n static displayName = 'SeparateDatePicker'\n\n render = () => {\n return (\n \n \n
    \n \n
    \n
    \n
    \n )\n }\n}\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { Provider } from 'react-redux'\nimport Themed from 'store/v2/react/components/Themed'\n\nimport CollectionList from 'store/modules/product/components/CollectionList'\n\nconst store = window.booqableStore\n\nexport default class CollectionListContainer extends Component {\n static displayName = 'CollectionListContainer'\n\n static propTypes = {\n searchKey: PropTypes.string\n }\n\n render () {\n return (\n \n \n
    \n \n
    \n
    \n
    \n )\n }\n}\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Libraries\nimport { withTranslation } from 'shared/utils/withTranslation'\n\n// Components\n\n// Shared\nimport { setFilterSortBy } from 'store/v2/redux/actions/filter'\n\nexport class SortingSelect extends Component {\n static displayName = 'SortingSelect'\n\n static propTypes = {\n sortBy: PropTypes.string,\n handleChangeSortBy: PropTypes.func,\n showPrices: PropTypes.bool,\n t: PropTypes.func\n }\n\n get options () {\n const { showPrices, t } = this.props\n\n let options = [\n {\n label: t('user.store.sorting_standard'),\n value: 'null'\n }\n ]\n\n if (showPrices) {\n options.push(\n {\n label: t('user.store.sorting_price_ascending'),\n value: 'price_each_in_cents'\n },\n {\n label: t('user.store.sorting_price_descending'),\n value: '-price_each_in_cents'\n }\n )\n }\n\n options.push({\n label: t('user.store.sorting_newest'),\n value: '-created_at'\n })\n\n return options\n }\n\n render () {\n const { sortBy, handleChangeSortBy } = this.props\n\n return (\n
    \n \n {this.options.map((option) => (\n \n ))}\n \n
    \n )\n }\n}\n\nconst mapStateToProps = (state, props) => {\n const filter = state.filter.get(props.filterKey || 'global')\n const sortBy = (filter && filter.get('sort_by')) || undefined\n\n return {\n sortBy,\n showPrices: state.settings.get('store.use_prices')\n }\n}\n\nconst mapDispatchToProps = (_dispatch, props) => {\n return {\n handleChangeSortBy: (event) => {\n let value = event.target.value\n\n if (value === 'null') {\n value = null\n }\n\n setFilterSortBy(value, props.filterKey || 'global')\n }\n }\n}\n\nconst reduxComponent = reduxConnect(mapStateToProps, mapDispatchToProps)(SortingSelect)\n\nexport default withTranslation('user')(reduxComponent)\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Libraries\nimport { withTranslation } from 'shared/utils/withTranslation'\n\n// Components\n\n// Shared\nimport { setFilterFilterBy } from 'store/v2/redux/actions/filter'\n\nexport class FilterSelect extends Component {\n static displayName = 'FilterSelect'\n\n static propTypes = {\n filterBy: PropTypes.string,\n handleChangeFilter: PropTypes.func,\n useAvailability: PropTypes.bool\n }\n\n get options () {\n const { useAvailability, t } = this.props\n const options = [\n {\n label: t('user.store.filter_all'),\n value: null\n }\n ]\n\n if (useAvailability) {\n options.push(\n {\n label: t('user.store.filter_available'),\n value: 'available'\n }\n )\n }\n\n return options\n }\n\n render () {\n const { filterBy, handleChangeFilter } = this.props\n\n return (\n
    \n \n {this.options.map((option) => (\n \n ))}\n \n
    \n )\n }\n}\n\nconst mapStateToProps = (state, props) => {\n const filter = state.filter.get(props.filterKey || 'global')\n const filterBy = (filter && filter.get('filter_by')) || undefined\n\n return {\n useAvailability: state.settings.get('store.use_availability'),\n filterBy\n }\n}\n\nconst mapDispatchToProps = (_dispatch, props) => {\n return {\n handleChangeFilter: (event) => {\n const value = event.target.value\n\n setFilterFilterBy(value, props.filterKey || 'global')\n }\n }\n}\n\nconst reduxComponent = reduxConnect(mapStateToProps, mapDispatchToProps)(FilterSelect)\n\nexport default withTranslation('user')(reduxComponent)\n\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\n\n// Libraries\nimport { Provider } from 'react-redux'\n\n// Components\nimport ProductSearch from '../components/product_search'\nimport SortingSelect from 'store/modules/product/components/SortingSelect'\nimport FilterSelect from 'store/modules/product/components/FilterSelect'\nimport Themed from 'store/v2/react/components/Themed'\n\n// Shared\n\nconst store = window.booqableStore\n\nexport default class FilterBar extends Component {\n static displayName = 'FilterBar'\n\n static propTypes = {\n filterKey: PropTypes.string,\n searchKey: PropTypes.string\n }\n\n static defaultProps = {\n filterKey: 'global'\n }\n\n render () {\n const filterKey = this.props.searchKey || this.props.filterKey\n\n // TODO: Re-enable filterselect when availability filtering perfomance is improved\n return (\n \n \n
    \n
    \n \n \n {false && }\n
    \n
    \n
    \n
    \n )\n }\n}\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\n\n// Libraries\nimport { Provider } from 'react-redux'\n\n// Components\nimport SortingSelect from 'store/modules/product/components/SortingSelect'\nimport Themed from 'store/v2/react/components/Themed'\n\n// Shared\n\nconst store = window.booqableStore\n\nexport default class SortingSelectContainer extends Component {\n static displayName = 'SortingSelectContainer'\n\n static propTypes = {\n filterKey: PropTypes.string\n }\n\n static defaultProps = {\n filterKey: 'global'\n }\n\n render () {\n const { filterKey } = this.props\n\n return (\n \n \n
    \n \n
    \n
    \n
    \n )\n }\n}\n","// React\nimport React from 'react'\nimport PropTypes from 'prop-types'\n\n// Components\nimport CartPicker from './Picker'\n\n// Shared\nimport { useCartPicker } from './hooks'\nimport { CartPickerProvider } from './Provider'\n\nconst CartPickerInner = (props) => {\n const { cart, onSave, onChange } = useCartPicker()\n\n const handleChange = (values) => {\n onChange(values)\n onSave(values)\n }\n\n return \n}\n\nexport const InlineCartPicker = ({ cart, onSave, ...props }) => (\n \n \n \n)\n\nInlineCartPicker.propTypes = {\n cart: PropTypes.object,\n onSave: PropTypes.func\n}\n","// React\nimport React, { Component, Fragment } from 'react'\nimport PropTypes from 'prop-types'\n\n// Libraries\nimport { Provider } from 'react-redux'\n\n// Components\nimport CollectionList from 'store/modules/product/components/CollectionList'\nimport { InlineCartPicker } from 'store/modules/cart/CartPicker/Inline'\nimport Themed from 'store/v2/react/components/Themed'\n\n// Shared\n\nconst store = window.booqableStore\n\nexport default class Sidebar extends Component {\n static displayName = 'Sidebar'\n\n static propTypes = {\n filterKey: PropTypes.string\n }\n\n static defaultProps = {\n filterKey: 'global'\n }\n\n render () {\n const { filterKey } = this.props\n\n return (\n \n \n \n \n
    \n \n
    \n
    \n
    \n
    \n )\n }\n}\n","// React\nimport React, { Component, Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport FocalImage from 'ui/components/FocalImage'\nimport ReadOnlyModeDisabledComponent from 'store/components/ReadOnlyModeDisabledComponent'\n\n// Shared\nimport Format from 'shared/utils/format'\nimport { withTranslation } from 'shared/utils/withTranslation'\n\nexport class EmbeddableCartLine extends Component {\n static displayName = 'EmbeddableCartLine'\n\n static propTypes = {\n line: PropTypes.object,\n currency: PropTypes.any,\n photo: PropTypes.object,\n useAvailability: PropTypes.bool,\n showPrices: PropTypes.bool,\n hideProductAvailabilityQuantities: PropTypes.bool,\n hasDates: PropTypes.bool,\n quantity: PropTypes.number,\n deleting: PropTypes.bool,\n onIncreaseQuantity: PropTypes.func,\n onDecreaseQuantity: PropTypes.func,\n onRemove: PropTypes.func,\n onInputChange: PropTypes.func,\n t: PropTypes.func\n }\n\n render () {\n const {\n line,\n currency,\n useAvailability,\n showPrices,\n hideProductAvailabilityQuantities,\n hasDates,\n quantity,\n deleting,\n onIncreaseQuantity,\n onDecreaseQuantity,\n onRemove,\n onInputChange,\n t\n } = this.props\n\n const available = line.available_quantity >= quantity\n const statusClass = available ? 'bq-available' : 'bq-unavailable'\n const titleClass = useAvailability ? 'bq-small' : 'bq-large'\n\n if (line.product_type === 'service' || line.quantity === 0) {\n return null\n }\n\n return (\n \n \n
    \n {line?.photo && (\n
    \n \n
    \n )}\n {!line?.photo && (\n \n \n \n )}\n
    \n
    \n
    {line.title}
    \n {hasDates && useAvailability && (\n \n {!hideProductAvailabilityQuantities && (\n \n {line.available_quantity} \n {t('user.store.available')}\n \n )}\n {hideProductAvailabilityQuantities && (\n t(available ? 'user.store.available' : 'user.store.unavailable')\n )}\n \n )}\n
    \n \n \n \n
    \n \n \n \n
    \n
    \n \n \n {showPrices && line.display_price_in_cents > 0 && (\n {Format.money(line.display_price_in_cents, currency)}\n )}\n \n \n \n \n \n \n \n )\n }\n}\n\nconst mapStateToProps = (state) => ({ hideProductAvailabilityQuantities: state.settings.get('store.hide_product_availability_quantities') })\n\nconst EnhancedEmbeddableCartLine = compose(\n withTranslation('user'),\n connect(mapStateToProps)\n)(EmbeddableCartLine)\n\nexport default EnhancedEmbeddableCartLine\n","// React\nimport { Component, createElement } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Libraries\n\n// Components\n\n// Shared\nimport { triggerUserFrameworkBookEvent } from 'shared/utils/userFrameworkEvents'\nimport cartActions from 'store/v2/redux/actions/cart'\n\nexport class EmbeddableCartLineContainer extends Component {\n static displayName = 'EmbeddableCartLineContainer'\n\n static propTypes = {\n book: PropTypes.func,\n line: PropTypes.object,\n component: PropTypes.any.isRequired\n }\n\n constructor (props) {\n super(props)\n\n this.state = {\n quantity: props.line.quantity,\n deleting: false\n }\n }\n\n handleBook = (quantity) => {\n if (quantity === 0) {\n this.setState({ deleting: true })\n }\n\n if (quantity === -1) {\n return\n }\n\n this.setState({ quantity })\n\n this.props.book(quantity)\n }\n\n handleIncreaseQuantity = () => {\n const { quantity } = this.state\n\n this.handleBook(quantity + 1)\n }\n\n handleDecreaseQuantity = () => {\n const { quantity } = this.state\n\n this.handleBook(quantity - 1)\n }\n\n handleRemove = () => {\n this.handleBook(0)\n }\n\n handleInputChange = ({ target }) => {\n if (target.value) {\n this.handleBook(target.value)\n }\n }\n\n render () {\n const { component, ...otherProps } = this.props\n const { quantity, deleting } = this.state\n\n return createElement(component, {\n quantity,\n deleting,\n onIncreaseQuantity: this.handleIncreaseQuantity,\n onDecreaseQuantity: this.handleDecreaseQuantity,\n onRemove: this.handleRemove,\n onInputChange: this.handleInputChange,\n ...otherProps\n })\n }\n}\n\nconst mapStateToProps = (state, props) => {\n return {\n currency: state.client.currency.toJS(),\n useAvailability: state.settings.get('store.use_availability') && props.line.tracking_type !== 'none',\n showPrices: state.settings.get('store.use_prices'),\n photo: props.line.product && state.orm.photos.getById(props.line.product.photo_id)\n }\n}\n\nconst mapDispatchToProps = (_dispatch, props) => {\n return {\n book: (quantity) => {\n return cartActions.book({\n item_id: props.line.item_id,\n line_id: props.line.id,\n quantity,\n type: 'set',\n apiVersion: 1\n }).then((_response) => {\n const quantityChange = quantity - props.line.quantity\n\n triggerUserFrameworkBookEvent(props.line.item_id, quantityChange)\n })\n }\n }\n}\n\nexport default reduxConnect(mapStateToProps, mapDispatchToProps)(EmbeddableCartLineContainer)\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Libraries\nimport { withTranslation } from 'shared/utils/withTranslation'\n\n// Components\nimport LineContainer from './LineContainer'\n\n// Shared\n\nexport class EmbeddableCartLinesContainer extends Component {\n static displayName = 'EmbeddableCartLinesContainer'\n\n static propTypes = {\n lines: PropTypes.object,\n hasDates: PropTypes.bool,\n component: PropTypes.any\n }\n\n render () {\n const { lines, hasDates, component, t } = this.props\n\n if (lines.size() <= 0) {\n return
    {t('user.store.cart_empty')}
    \n }\n\n return lines.map((line) => )\n }\n}\n\nconst mapStateToProps = (state, props) => {\n const cart = state.orm.carts.getById(state.client.cartId)\n const hasDates = !!(cart && cart.starts_at && cart.stops_at)\n const lines = state.orm.lines.getAll({ id: cart != null ? cart.lines : undefined })\n\n return {\n lines,\n hasDates\n }\n}\n\nconst reduxComponent = reduxConnect(mapStateToProps, null)(EmbeddableCartLinesContainer)\n\nexport default withTranslation('user')(reduxComponent)\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Libraries\nimport { withTranslation } from 'shared/utils/withTranslation'\n\n// Component\nimport Line from './Line'\nimport LinesContainer from './LinesContainer'\n\nexport class EmbeddableCartLines extends Component {\n static displayName = 'EmbeddableCartLines'\n\n static propTypes = {\n lines: PropTypes.object,\n usePrices: PropTypes.bool,\n t: PropTypes.func\n }\n\n render () {\n const { lines, usePrices, t } = this.props\n\n return (\n
    \n
    \n {lines.size() > 0 && (\n \n \n \n \n \n {usePrices && }\n \n \n \n \n \n
    {t('user.store.product')}{t('user.store.quantity')}{t('user.cart.total')}\n
    \n )}\n {lines.size() <= 0 &&\n
    {t('user.store.cart_empty')}
    }\n
    \n
    \n )\n }\n}\n\nconst mapStateToProps = (state) => {\n const cart = state.orm.carts.getById(state.client.cartId)\n const lines = state.orm.lines.getAll({ id: cart != null ? cart.lines : undefined })\n const usePrices = state.settings.get('store.use_prices')\n\n return { lines, usePrices }\n}\n\nconst reduxComponent = reduxConnect(mapStateToProps, null)(EmbeddableCartLines)\n\nexport default withTranslation('user')(reduxComponent)\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Libraries\nimport { withTranslation } from 'shared/utils/withTranslation'\n\nexport class EmbeddableCartErrors extends Component {\n static displayName = 'EmbeddableCartErrors'\n\n static propTypes = {\n hasDates: PropTypes.bool,\n cannotCheckout: PropTypes.bool,\n t: PropTypes.func\n }\n\n render () {\n const { hasDates, cannotCheckout, t } = this.props\n\n let errorText\n\n if (hasDates && cannotCheckout) {\n errorText = t('user.store.not_all_products_available')\n }\n\n if (!hasDates) {\n errorText = t('user.store.select_a_period', 'Select a rental period')\n }\n\n if (!errorText) return null\n\n return (\n
    \n \n {errorText}\n
    \n )\n }\n}\n\nconst mapStateToProps = (state, props) => {\n const cart = state.orm.carts.getById(state.client.cartId)\n const hasDates = !!(cart && cart.starts_at && cart.stops_at)\n const useAvailability = state.settings.get('store.use_availability')\n\n let cannotCheckout\n\n // Check if we need to calculate if use can checkout\n if (useAvailability) {\n cannotCheckout =\n state.orm.lines\n .getAll({\n id: cart != null ? cart.lines : undefined,\n can_checkout: false\n })\n .size() > 0\n } else {\n cannotCheckout = false\n }\n\n return {\n hasDates,\n cannotCheckout\n }\n}\n\nconst reduxComponent = reduxConnect(mapStateToProps, null)(EmbeddableCartErrors)\n\nexport default withTranslation('user')(reduxComponent)\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Libraries\nimport { withTranslation } from 'shared/utils/withTranslation'\n\n// Components\n\n// Shared\nimport Format from 'shared/utils/format'\n\nexport class EmbeddableCartTotals extends Component {\n static displayName = 'EmbeddableCartTotals'\n\n static propTypes = {\n cart: PropTypes.object,\n currency: PropTypes.any,\n totalPriceAttribute: PropTypes.string,\n t: PropTypes.func\n }\n\n render () {\n const { cart, currency, totalPriceAttribute, t } = this.props\n\n if (!cart || cart.lines.length < 1) return null\n\n return (\n
    \n
    \n {t('user.store.subtotal')}\n \n {Format.money(\n cart != null ? cart.get(totalPriceAttribute) : undefined,\n currency\n )}\n \n
    \n\n {(cart != null && cart.get('deposit_in_cents') !== 0) && (\n
    \n {t('user.store.security_deposit')}\n \n {Format.money(\n cart != null ? cart.get('deposit_in_cents') : undefined,\n currency\n )}\n \n
    \n )}\n
    \n )\n }\n}\n\nconst mapStateToProps = (state, _props) => {\n let totalPriceAttribute\n\n if (state.settings.get('pricing.tax_strategy') === 'inclusive') {\n totalPriceAttribute = 'grand_total_with_tax_in_cents'\n } else {\n totalPriceAttribute = 'grand_total_in_cents'\n }\n\n return {\n currency: state.client.currency != null ? state.client.currency.toJS() : undefined,\n totalPriceAttribute\n }\n}\n\nconst reduxComponent = reduxConnect(mapStateToProps, null)(EmbeddableCartTotals)\n\nexport default withTranslation('user')(reduxComponent)\n","// React\nimport React, { Component, Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport Errors from './Errors'\nimport Totals from './Totals'\nimport Services from 'store/components/Services'\nimport { InlineCartPicker } from 'store/modules/cart/CartPicker/Inline'\nimport ReadOnlyModeDisabledComponent from 'store/components/ReadOnlyModeDisabledComponent'\n\n// Shared\nimport clientActions from 'store/v2/redux/actions/client'\nimport { withTranslation } from 'shared/utils/withTranslation'\n\nexport class EmbeddableCartSidebar extends Component {\n static displayName = 'EmbeddableCartSidebar'\n\n static propTypes = {\n cart: PropTypes.object,\n checkoutButtonValid: PropTypes.bool,\n checkingOut: PropTypes.bool,\n setCheckingOut: PropTypes.func,\n usePrices: PropTypes.bool,\n showContinueShopping: PropTypes.bool,\n showDatePicker: PropTypes.bool,\n t: PropTypes.func\n }\n\n static defaultProps = {\n showContinueShopping: true,\n showDatePicker: true\n }\n\n handleBack = (event) => {\n window.history.back()\n event?.preventDefault()\n }\n\n render () {\n const {\n cart,\n checkoutButtonValid,\n showDatePicker,\n checkingOut,\n setCheckingOut,\n usePrices,\n showContinueShopping,\n t\n } = this.props\n const checkoutButtonClass = checkoutButtonValid ? 'bq-enabled' : 'bq-disabled'\n\n return (\n
    \n {showDatePicker && }\n
    \n \n {usePrices && cart && cart.lines.length > 0 && (\n \n
    \n \n
    \n )}\n
    \n \n {checkingOut && (\n
    \n
    \n
    \n )}\n {!checkingOut && (\n \n \n {t('user.store.checkout')}\n \n \n )}\n {showContinueShopping && (\n \n )}\n
    \n
    \n )\n }\n}\n\nconst mapStateToProps = (state, props) => {\n const cart = state.orm.carts.getById(state.client.cartId)\n\n let cannotCheckout\n\n const hasDates = !!(cart?.starts_at && cart?.stops_at)\n const useAvailability = state.settings.get('store.use_availability')\n const usePrices = state.settings.get('store.use_prices')\n\n // Check if we need to calculate if use can checkout\n if (useAvailability) {\n cannotCheckout =\n state.orm.lines\n .getAll({\n id: cart?.lines,\n can_checkout: false\n })\n .size() > 0\n } else {\n cannotCheckout = false\n }\n\n const checkoutButtonValid = !!(\n (Number(cart?.lines?.length || 0) > 0) &&\n hasDates &&\n !cannotCheckout &&\n !state.client.cartOverdue\n )\n\n return {\n cart,\n checkingOut: state.client.checkingOut,\n checkoutButtonValid,\n usePrices,\n showContinueShopping: props.continueShopping,\n showDatePicker: props.datepicker\n }\n}\n\nconst mapDispatchToProps = (_dispatch, _props) => {\n return {\n setCheckingOut: (e) => {\n e.preventDefault()\n\n if (clientActions.evaluateCartOverdue()) return\n\n clientActions.setCheckingOut()\n }\n }\n}\n\nexport default compose(\n reduxConnect(mapStateToProps, mapDispatchToProps),\n withTranslation('user')\n)(EmbeddableCartSidebar)\n","// React\nimport React, { Component, Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport FocalImage from 'ui/components/FocalImage'\n\n// Shared\nimport Format from 'shared/utils/format'\nimport { withTranslation } from 'shared/utils/withTranslation'\n\nexport class EmbeddableCartMobileLine extends Component {\n static displayName = 'EmbeddableCartMobileLine'\n\n static propTypes = {\n line: PropTypes.object,\n currency: PropTypes.any,\n photo: PropTypes.object,\n useAvailability: PropTypes.bool,\n showPrices: PropTypes.bool,\n hideProductAvailabilityQuantities: PropTypes.bool,\n hasDates: PropTypes.bool,\n quantity: PropTypes.number,\n deleting: PropTypes.bool,\n onIncreaseQuantity: PropTypes.func,\n onDecreaseQuantity: PropTypes.func,\n onRemove: PropTypes.func,\n onInputChange: PropTypes.func,\n t: PropTypes.func\n }\n\n constructor (props) {\n super(props)\n\n this.state = {\n quantity: props.line.quantity,\n deleting: false\n }\n }\n\n render () {\n const {\n line,\n currency,\n useAvailability,\n showPrices,\n hideProductAvailabilityQuantities,\n hasDates,\n quantity,\n deleting,\n onIncreaseQuantity,\n onDecreaseQuantity,\n onRemove,\n onInputChange,\n t\n } = this.props\n\n const available = line.available_quantity >= quantity\n const statusClass = available ? 'bq-available' : 'bq-unavailable'\n\n if (line.product_type === 'service' || line.quantity === 0) {\n return null\n }\n\n return (\n
    \n
    \n {line?.photo && (\n
    \n \n
    \n )}\n {!line?.photo && (\n \n \n \n )}\n
    \n
    \n
    {line.title}
    \n {hasDates && useAvailability && (\n \n {!hideProductAvailabilityQuantities && (\n \n {line.available_quantity} \n {t('user.store.available')}\n \n )}\n {hideProductAvailabilityQuantities &&\n t(available ? 'user.store.available' : 'user.store.unavailable')}\n \n )}\n
    \n \n \n \n
    \n
    \n
    \n \n {showPrices && line.display_price_in_cents > 0 && (\n {Format.money(line.display_price_in_cents, currency)}\n )}\n
    \n
    \n )\n }\n}\n\nconst mapStateToProps = (state) => ({ hideProductAvailabilityQuantities: state.settings.get('store.hide_product_availability_quantities') })\n\nconst EnhancedEmbeddableCartMobileLine = compose(\n withTranslation('user'),\n connect(mapStateToProps)\n)(EmbeddableCartMobileLine)\n\nexport default EnhancedEmbeddableCartMobileLine\n","// React\nimport React, { Component } from 'react'\n\n// Libraries\n\n// Components\nimport LinesContainer from '../LinesContainer'\nimport Line from './Line'\n\n// Shared\n\nexport default class EmbeddableCartMobileLines extends Component {\n static displayName = 'EmbeddableCartMobileLines'\n\n render () {\n return (\n
    \n \n
    \n )\n }\n}\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\n\n// Libraries\n\n// Components\nimport Sidebar from '../Sidebar'\nimport { InlineCartPicker } from 'store/modules/cart/CartPicker/Inline'\nimport { PoweredBy } from 'shop-components/components/PoweredBy'\nimport Lines from './Lines'\nimport Spacer from 'ui/blocks/Spacer'\n\n// Shared\n\nexport class EmbeddableCartMobile extends Component {\n static displayName = 'EmbeddableCartMobile'\n\n static propTypes = {\n showPoweredBy: PropTypes.bool,\n t: PropTypes.func\n }\n\n render () {\n const { showPoweredBy } = this.props\n\n return (\n
    \n \n
    \n
    \n \n \n \n {showPoweredBy && (\n
    \n \n
    \n )}\n
    \n
    \n )\n }\n}\n\nexport default EmbeddableCartMobile\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Libraries\n\n// Components\nimport Lines from './Lines'\nimport Sidebar from './Sidebar'\nimport Mobile from './Mobile'\nimport { PoweredBy } from 'shop-components/components/PoweredBy'\n\n// Shared\nimport { setUserFrameworkCartData } from 'shared/utils/userFrameworkEvents'\n\nclass EmbeddableCart extends Component {\n static displayName = 'EmbeddableCart'\n\n static propTypes = {\n cart: PropTypes.object,\n showPoweredBy: PropTypes.bool,\n t: PropTypes.func\n }\n\n state = {\n triggeredTracking: false,\n renderMobileForDesktop: false\n }\n\n get isMobile () {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent) ||\n this.state.renderMobileForDesktop\n }\n\n componentDidMount () {\n window.addEventListener('resize', this.handleWindowResize)\n }\n\n componentWillUnmount () {\n window.removeEventListener('resize', this.handleWindowResize)\n }\n\n componentDidUpdate = (prevProps) => {\n const { cart } = this.props\n\n if (cart !== prevProps.cart) {\n setUserFrameworkCartData()\n }\n\n // On mount window.Booqable.data is not set yet. By keeping track of whether this is triggered,\n // we can use the data in reporting events\n if (window.Booqable.cartData && !this.state.triggeredTracking) {\n this.setState({ triggeredTracking: true })\n\n window.Booqable._trigger('viewCart')\n }\n }\n\n handleWindowResize = () => {\n const renderMobileForDesktop = window.innerWidth <= 991\n\n if (renderMobileForDesktop !== this.state.renderMobileForDesktop) {\n this.setState({ renderMobileForDesktop })\n }\n }\n\n renderDesktop () {\n const { showPoweredBy } = this.props\n\n return (\n
    \n
    \n
    \n \n {showPoweredBy && (\n
    \n \n
    \n )}\n
    \n
    \n \n
    \n
    \n
    \n )\n }\n\n renderMobile () {\n const { showPoweredBy } = this.props\n\n return \n }\n\n render () {\n return this.isMobile ? this.renderMobile() : this.renderDesktop()\n }\n}\n\nconst mapStateToProps = (state) => {\n const cart = state.orm.carts.first()\n\n return {\n cart,\n showPoweredBy: state.settings.get('store.show_powered_by')\n }\n}\n\nexport default reduxConnect(mapStateToProps)(EmbeddableCart)\n","// React\nimport React, { Component } from 'react'\n\n// Libraries\nimport { Provider } from 'react-redux'\n\n// Components\nimport EmbeddableCart from 'store/modules/cart/EmbeddableCart'\nimport Themed from 'store/v2/react/components/Themed'\n\n// Shared\n\nconst store = window.booqableStore\n\nexport default class EmbeddableCartContainer extends Component {\n static displayName = 'EmbeddableCartContainer'\n\n render () {\n return (\n \n \n \n \n \n )\n }\n}\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\n\n// Libraries\nimport { Provider } from 'react-redux'\n\n// Components\nimport EmbeddableCartLines from 'store/modules/cart/EmbeddableCart/Lines'\nimport EmbeddableCartMobileLines from 'store/modules/cart/EmbeddableCart/Mobile/Lines'\nimport Themed from 'store/v2/react/components/Themed'\n\n// Shared\n\nconst store = window.booqableStore\n\nexport default class EmbeddableCartLinesContainer extends Component {\n static displayName = 'EmbeddableCartLinesContainer'\n\n static propTypes = {\n compact: PropTypes.bool\n }\n\n render () {\n const { compact } = this.props\n\n return (\n \n \n
    \n {compact ?\n :\n }\n
    \n
    \n
    \n )\n }\n}\n","// React\nimport React, { Component } from 'react'\n\n// Libraries\nimport { Provider } from 'react-redux'\n\n// Components\nimport EmbeddableCartSidebar from 'store/modules/cart/EmbeddableCart/Sidebar'\nimport Themed from 'store/v2/react/components/Themed'\n\n// Shared\n\nconst store = window.booqableStore\n\nexport default class EmbeddableCartSidebarContainer extends Component {\n static displayName = 'EmbeddableCartSidebarContainer'\n\n render () {\n return (\n \n \n
    \n \n
    \n
    \n
    \n )\n }\n}\n","// React\nimport React, { useEffect, useCallback, Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Components\nimport FloatingCart from 'store/v2/react/scenes/cart/components/FloatingCart'\nimport Popover from 'ui/components/Popover'\nimport PortalWrapper from 'ui/components/PortalWrapper'\n\n// Libraries\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faShoppingCart as fasShoppingCart } from '@fortawesome/pro-solid-svg-icons'\nimport { faShoppingCart as farShoppingCart } from '@fortawesome/pro-regular-svg-icons'\nimport { faShoppingCart as falShoppingCart } from '@fortawesome/pro-light-svg-icons'\nimport { faShoppingCart as fatShoppingCart } from '@fortawesome/pro-thin-svg-icons'\n\nimport { StyleSheetManager } from 'styled-components'\n\n// Shared\nimport { setUserFrameworkCartData } from 'shared/utils/userFrameworkEvents'\nimport ClientActions from 'store/v2/redux/actions/client'\nimport useIsMobile from 'shared/utils/useIsMobile'\nimport { shouldForwardProp } from 'shared/utils/shouldForwardProp'\n\nconst getIcon = (style) => {\n switch (style) {\n case 'solid':\n return fasShoppingCart\n case 'regular':\n return farShoppingCart\n case 'light':\n return falShoppingCart\n case 'thin':\n return fatShoppingCart\n default:\n return farShoppingCart\n }\n}\n\nconst CartButton = ({ cart, iconStyle, itemCount, cartOpen, toggleCart, href }) => {\n const isMobile = useIsMobile()\n\n const icon = getIcon(iconStyle)\n\n useEffect(() => {\n setUserFrameworkCartData()\n }, [cart])\n\n const renderFloatingCart = useCallback(\n (props) => (\n
    \n \n
    \n ),\n [isMobile, href]\n )\n\n const renderIcon = useCallback(\n () => (\n \n \n \n ),\n [itemCount, icon, toggleCart]\n )\n\n if (isMobile) {\n return (\n \n {renderIcon()}\n {renderFloatingCart()}\n \n )\n }\n\n return (\n \n {renderIcon()}\n \n )\n}\n\nCartButton.propTypes = {\n cart: PropTypes.object,\n itemCount: PropTypes.number,\n isMobile: PropTypes.bool,\n toggleCart: PropTypes.func,\n cartOpen: PropTypes.bool,\n iconStyle: PropTypes.oneOf(['solid', 'regular', 'light', 'thin']),\n href: PropTypes.string\n}\n\nCartButton.displayName = 'CartButton'\n\nconst mapStateToProps = (state, props) => {\n const cart = state.orm.carts.getById(state.client.cartId)\n const lines = state.orm.lines.getAll({\n id: cart != null ? cart.lines : undefined,\n product_type: ['consumable', 'rental', 'bundle']\n })\n const cartIsOpen = state.client.cartOpen\n\n const hasDates = !!((cart != null ? cart.starts_at : undefined) && (cart != null ? cart.stops_at : undefined))\n\n const itemCount = lines.map((line) => line.quantity).reduce((a, b) => a + b, 0)\n\n return {\n cart,\n itemCount,\n hasDates,\n cartOpen: state.client.cartOpen,\n locations: state.orm.locations.getAll().sort('name'),\n cartIsOpen\n }\n}\n\nconst mapDispatchToProps = (dispatch, props) => {\n return {\n toggleCart: () => {\n const state = window.booqableStore.getState()\n const isOpen = state.client.cartOpen\n\n return ClientActions.toggleCart(!isOpen)\n }\n }\n}\n\nexport default reduxConnect(mapStateToProps, mapDispatchToProps)(CartButton)\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Components\nimport CartPicker from 'store/modules/cart/FloatingCart/components/CartPicker'\nimport CartButtonComponent from 'store/modules/cart/CartButton'\n\nexport class CartButton extends Component {\n static displayName = 'CartButton'\n\n static propTypes = {\n isShowCartBehavior: PropTypes.bool\n }\n\n render () {\n const { isShowCartBehavior } = this.props\n\n return (\n
    \n {isShowCartBehavior && }\n \n
    \n )\n }\n}\n\nconst mapStateToProps = (state, props) => {\n const isShowCartBehavior = state.settings.get('store.behaviors.add_button') === 'show_cart'\n\n return {\n isShowCartBehavior\n }\n}\n\nexport default reduxConnect(mapStateToProps)(CartButton)\n","// React\nimport React, { Component } from 'react'\n\n// Libraries\nimport { Provider } from 'react-redux'\n\n// Components\nimport Themed from 'store/v2/react/components/Themed'\nimport CartButton from 'store/v2/react/components/cart_button'\n\n// Shared\n\nconst store = window.booqableStore\n\nexport default class CartButtonContainer extends Component {\n static displayName = 'CartButtonContainer'\n\n render () {\n return (\n \n \n \n \n \n )\n }\n}\n","import styled, { css, createGlobalStyle } from 'styled-components'\n\nexport const HostStyles = createGlobalStyle`\n :host {\n --availability-padding: 5px 12px;\n --availability-border-radius: var(--border-radius-lg, 20px);\n\n --availability-available-background-color: var(--color-green, #8fcc40);\n --availability-available-color: var(--color-white, #fff);\n --availability-unavailable-background-color: var(--color-red, #f85454);\n --availability-unavailable-color: var(--color-white, #fff);\n }\n`\n\nexport const Availability = styled.span`\n padding: var(--availability-padding);\n\n border-radius: var(--availability-border-radius);\n\n ${({ available }) => available && css`\n background-color: var(--availability-available-background-color);\n color: var(--availability-available-color);\n `}\n\n ${({ available }) => !available && css`\n background-color: var(--availability-unavailable-background-color);\n color: var(--availability-unavailable-color);\n `}\n`\n","// React\nimport React, { useMemo } from 'react'\nimport { Provider } from 'react-redux'\n\nconst withStore = (Component) => (props) => {\n const store = useMemo(() => window.booqableGetStore(), [])\n\n return (\n \n \n \n )\n}\n\nexport default withStore\n","// React\nimport React from 'react'\nimport { ThemeProvider } from 'styled-components'\n\n// Shared\nimport theme from 'ui/themes/public'\nimport getBrandingColor from 'shared/utils/getBrandingColor'\n\nconst withTheme = (Component) => (props) =>\n (\n \n \n \n )\n\nexport default withTheme\n","// React\nimport React from 'react'\nimport { createRoot } from 'react-dom/client'\n\n// Libraries\nimport { StyleSheetManager } from 'styled-components'\nimport camelCase from 'lodash/camelCase'\nimport retargetEvents from 'react-shadow-dom-retarget-events'\n\n// Shared\nimport { shouldForwardProp } from 'shared/utils/shouldForwardProp'\n\nconst registerCustomElement = (\n name,\n Component,\n { attributes, mountElement = 'div', mountAttributes = {}, styleSheetTarget } = {}\n) => {\n const webComponentClass = class extends HTMLElement {\n constructor () {\n super()\n\n this.mountPoint = document.createElement(mountElement)\n this.mountPoint.className = name\n\n for (const [key, value] of Object.entries(mountAttributes)) {\n this.mountPoint.setAttribute(key, value)\n }\n\n this.attachShadow({ mode: 'open' })\n }\n\n connectedCallback () {\n if (this.isConnected) {\n this.setAttribute('initialized', 'true')\n\n const attrs = attributes?.reduce(\n (acc, key) =>\n Object.assign(acc, {\n [camelCase(key.replace('data-', ''))]:\n this.getAttribute(key) ?? undefined\n }),\n {}\n ) ?? {}\n\n const handleSetAttribute = (name, value) => {\n if (value === null) {\n this.removeAttribute(name)\n } else {\n this.setAttribute(name, value)\n }\n }\n\n this.shadowRoot?.appendChild(this.mountPoint)\n\n const root = createRoot(this.mountPoint)\n\n root.render(\n \n {this.childNodes}\n \n )\n\n retargetEvents(this.shadowRoot)\n }\n }\n\n disconnectedCallback () {\n if (!this.isConnected) {\n this.shadowRoot?.removeChild(this.mountPoint)\n }\n }\n }\n\n if (!customElements.get(name)) {\n customElements.define(name, webComponentClass)\n }\n}\n\nexport default registerCustomElement\n","import axios from 'axios'\nimport qs from 'qs'\n\nconst request = axios.create({\n baseURL: window.booqableOptions.apiURL\n})\n\nrequest.interceptors.request.use((config) => {\n config.paramsSerializer = (params) => {\n return qs.stringify(params, {\n arrayFormat: 'brackets',\n encode: false\n })\n }\n\n return config\n})\n\nexport default request\n","import request from './'\n\nexport const getAvailabilities = ({ ids, startsAt, stopsAt, startLocationId }) => {\n return request({\n method: 'POST',\n url: '/api/boomerang/availabilities',\n data: {\n filter: {\n item_id: ids,\n from: startsAt,\n till: stopsAt,\n location_id: startLocationId\n }\n }\n })\n}\n\nexport const getAvailability = ({ id, startsAt, stopsAt, startLocationId, configuration }) => {\n return request({\n method: 'POST',\n url: '/api/boomerang/availabilities',\n data: {\n filter: {\n item_id: id,\n from: startsAt,\n till: stopsAt,\n location_id: startLocationId,\n configuration\n }\n }\n })\n}\n","// Libraries\nimport _debounce from 'lodash/debounce'\n\n// Shared\nimport { getAvailabilities, getAvailability } from 'shop-components/api/availability'\n\nlet ids = []\n\nconst availabilitiesRequest = ({ dispatch, ...params }) => {\n dispatch({\n type: 'PRODUCT_AVAILABILITIES_FETCH_START'\n })\n\n getAvailabilities({ ids, ...params })\n .then(({ data: { data } }) => {\n const availabilities = data.map(({ attributes }) => attributes)\n\n dispatch({ type: 'PRODUCT_AVAILABILITIES_FETCH_SUCCESS', payload: { records: availabilities } })\n })\n .catch(() => {\n dispatch({\n type: 'PRODUCT_AVAILABILITIES_FETCH_ERROR'\n })\n })\n\n ids = []\n}\n\nconst availabilityRequest = ({ dispatch, ...params }) => {\n dispatch({\n type: 'PRODUCT_AVAILABILITIES_FETCH_START'\n })\n\n getAvailability(params)\n .then(({ data: { data } }) => {\n const availabilities = data.map(({ attributes }) => attributes)\n\n dispatch({ type: 'PRODUCT_AVAILABILITIES_FETCH_SUCCESS', payload: { records: availabilities } })\n })\n .catch(() => {\n dispatch({\n type: 'PRODUCT_AVAILABILITIES_FETCH_ERROR'\n })\n })\n}\n\nconst fetchAvailabilitiesDebounced = _debounce(availabilitiesRequest, 50)\n\nconst fetchAvailabilityDebounced = _debounce(availabilityRequest, 50)\n\n// Bulk fetch actions are debounced to prevent multiple requests\nexport const fetchAvailabilities = ({ id, ...params }) => (dispatch) => {\n if (!ids.includes(id)) {\n ids.push(id)\n }\n\n return fetchAvailabilitiesDebounced({ ...params, dispatch })\n}\n\nexport const fetchAvailability = (params) => (dispatch) => {\n return fetchAvailabilityDebounced({ ...params, dispatch })\n}\n\nexport const fetchVariationAvailability = ({ productId, ...params }) => (dispatch) => {\n dispatch({\n type: 'PRODUCT_VARIATION_AVAILABILITIES_FETCH_START'\n })\n\n getAvailabilities(params)\n .then(({ data: { data } }) => {\n const availabilities = data.map(({ attributes }) => ({ ...attributes }))\n\n dispatch({\n type: 'PRODUCT_VARIATION_AVAILABILITIES_FETCH_SUCCESS',\n payload: { records: availabilities, productId }\n })\n })\n .catch(() => {\n dispatch({\n type: 'PRODUCT_VARIATION_AVAILABILITIES_FETCH_ERROR'\n })\n })\n}\n","// React\nimport React, { Fragment, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport Skeleton from 'ui/blocks/Skeleton'\nimport { HostStyles, Availability } from './styles'\n\n// Shared\nimport withStore from 'shop-components/utils/withStore'\nimport withTheme from 'shop-components/utils/withTheme'\nimport registerCustomElement from 'shop-components/utils/registerCustomElement'\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport { fetchAvailabilities } from 'shop-components/redux/actions/availability'\n\nconst ProductAvailability = ({\n productId,\n isLoading,\n availability,\n cart,\n fetchProductAvailabilities,\n hideAvailability,\n setAttribute,\n t\n}) => {\n useEffect(() => {\n if (productId && !!cart.startsAt && !!cart.stopsAt && !!cart.startLocationId) {\n fetchProductAvailabilities({\n id: productId,\n startsAt: cart.startsAt,\n stopsAt: cart.stopsAt,\n startLocationId: cart.startLocationId\n })\n }\n }, [cart.startsAt, cart.stopsAt, cart.startLocationId])\n\n useEffect(() => {\n if (!cart.startsAt || !cart.stopsAt || !availability) {\n setAttribute('visible', false)\n } else {\n setAttribute('visible', true)\n }\n }, [cart.startsAt, cart.stopsAt, availability])\n\n if (isLoading) return \n\n if (!cart.startsAt || !cart.stopsAt || !availability) return null\n\n const availableString = hideAvailability ?\n t('user.store.available') :\n `${availability.plannable} ${t('user.store.available')?.toLowerCase?.()}`\n\n return (\n \n \n \n {availability?.plannable ? availableString : t('user.store.unavailable')}\n \n \n )\n}\n\nProductAvailability.displayName = 'ProductAvailability'\n\nProductAvailability.propTypes = {\n availability: PropTypes.object,\n isLoading: PropTypes.bool,\n hideAvailability: PropTypes.bool,\n cart: PropTypes.object,\n productId: PropTypes.string,\n fetchProductAvailabilities: PropTypes.func,\n setAttribute: PropTypes.func,\n t: PropTypes.func\n}\n\nconst mapStateToProps = (state, props) => {\n let availability\n\n const cart = state.orm.carts.getById(state.client.cartId || window.booqableOptions.cart?.id)\n\n const item = state.items.records[props.productId]\n\n if (item?.products?.length > 1 && item?.type !== 'bundles') {\n availability = item?.products?.find(({ id }) => id === item.variation_id)?.availability\n } else {\n availability = item?.availability\n }\n\n return {\n cart: {\n id: cart?.id ?? window.booqableOptions.cart?.id,\n startsAt: cart?.starts_at ?? window.booqableOptions.cart?.from,\n stopsAt: cart?.stops_at ?? window.booqableOptions.cart?.till,\n startLocationId: cart?.start_location_id ?? window.booqableOptions.cart?.startLocationId\n },\n isLoading: state.items.loading && !availability,\n availability,\n hideAvailability: state.settings.get('store.hide_product_availability_quantities')\n }\n}\n\nconst mapDispatchToProps = (dispatch, props) => ({\n fetchProductAvailabilities: (attributes) => dispatch(fetchAvailabilities(attributes))\n})\n\nconst decoratedComponent = compose(\n withStore,\n withTranslation('user'),\n withTheme,\n reduxConnect(mapStateToProps, mapDispatchToProps)\n)(ProductAvailability)\n\nregisterCustomElement('bq-product-availability', decoratedComponent, {\n mountElement: 'span',\n attributes: ['product-id']\n})\n\nexport default decoratedComponent\n","// Libraries\nimport _debounce from 'lodash/debounce'\n\n// Shared\nimport { getPrices, getPrice } from 'shop-components/api/price'\n\nlet ids = []\n\nconst pricesRequest = ({ cartId, dispatch }) => {\n dispatch({\n type: 'PRODUCT_PRICES_FETCH_START'\n })\n\n getPrices({ ids, cartId })\n .then(({ data: { data } }) => {\n const prices = data.map(({ attributes }) => attributes)\n\n dispatch({ type: 'PRODUCT_PRICES_FETCH_SUCCESS', payload: { records: prices } })\n })\n .catch(() => {\n dispatch({\n type: 'PRODUCT_PRICES_FETCH_ERROR'\n })\n })\n\n ids = []\n}\n\nconst priceRequest = ({ id, cartId, configuration, dispatch }) => {\n dispatch({\n type: 'PRODUCT_PRICES_FETCH_START'\n })\n\n getPrice({ id, configuration, cartId })\n .then(({ data: { data } }) => {\n const prices = data.map(({ attributes }) => attributes)\n\n dispatch({ type: 'PRODUCT_PRICES_FETCH_SUCCESS', payload: { records: prices, method: 'configuration' } })\n })\n .catch(() => {\n dispatch({\n type: 'PRODUCT_PRICES_FETCH_ERROR'\n })\n })\n}\n\nconst fetchPricesDebounced = _debounce(pricesRequest, 50)\n\nconst fetchPriceDebounced = _debounce(priceRequest, 50)\n\nexport const fetchPrices = ({ id, cartId }) => (dispatch) => {\n if (!ids.includes(id)) {\n ids.push(id)\n }\n\n return fetchPricesDebounced({ cartId, dispatch })\n}\n\nexport const fetchPrice = ({ id, cartId, configuration }) => (dispatch) => {\n return fetchPriceDebounced({ id, cartId, configuration, dispatch })\n}\n","import request from './'\n\nexport const getPrices = ({ ids, cartId }) => {\n return request({\n method: 'POST',\n url: '/api/boomerang/prices',\n data: {\n filter: {\n item_id: ids,\n cart_id: cartId\n }\n }\n })\n}\n\nexport const getPrice = ({ id, cartId, configuration }) => {\n return request({\n method: 'POST',\n url: '/api/boomerang/prices',\n data: {\n filter: {\n item_id: id,\n cart_id: cartId,\n configuration\n }\n }\n })\n}\n","// React\nimport React, { useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport Skeleton from 'ui/blocks/Skeleton'\n\n// Shared\nimport withStore from 'shop-components/utils/withStore'\nimport withTheme from 'shop-components/utils/withTheme'\nimport registerCustomElement from 'shop-components/utils/registerCustomElement'\nimport { fetchPrice, fetchPrices } from 'shop-components/redux/actions/price'\nimport { money } from 'shared/utils/format'\n\nconst ProductPrice = ({\n productId,\n isLoading,\n price,\n defaultPrice,\n cart,\n product,\n fetchProductPrice,\n fetchProductPrices,\n currency\n}) => {\n useEffect(() => {\n if (product?.id && cart?.id && (product?.variation_id || product?.configuration)) {\n return fetchProductPrice({\n cartId: cart.id,\n id: product.variation_id || product.id,\n configuration: product.configuration\n })\n }\n\n if (productId && cart?.id) {\n fetchProductPrices({\n cartId: cart.id,\n id: productId\n })\n }\n }, [productId, product?.id, product?.variation_id, product?.configuration, cart.id, cart.startsAt, cart.stopsAt])\n\n if (isLoading) return \n\n if (price) return money(price, currency)\n\n if (defaultPrice) return defaultPrice\n\n return null\n}\n\nProductPrice.displayName = 'ProductPrice'\n\nProductPrice.propTypes = {\n productId: PropTypes.string,\n product: PropTypes.object,\n price: PropTypes.number,\n isLoading: PropTypes.bool,\n defaultPrice: PropTypes.string,\n cart: PropTypes.object,\n fetchProductPrice: PropTypes.func,\n fetchProductPrices: PropTypes.func,\n currency: PropTypes.object\n}\n\nconst mapStateToProps = (state, props) => {\n const cart = state.orm.carts.getById(state.client.cartId || window.booqableOptions.cart?.id)\n const product = state.items.records[props.productId]\n const price = product?.price?.price_each_in_cents\n\n return {\n cart: {\n id: cart?.id ?? window.booqableOptions.cart?.id,\n startsAt: cart?.starts_at ?? window.booqableOptions.cart?.from,\n stopsAt: cart?.stops_at ?? window.booqableOptions.cart?.till\n },\n currency: window.booqableOptions.currency,\n isLoading: state.items.loading && !price,\n price,\n product\n }\n}\n\nconst mapDispatchToProps = (dispatch, props) => ({\n fetchProductPrice: (attributes) => dispatch(fetchPrice(attributes)),\n fetchProductPrices: (attributes) => dispatch(fetchPrices(attributes))\n})\n\nconst decoratedComponent = compose(\n withStore,\n withTheme,\n reduxConnect(mapStateToProps, mapDispatchToProps)\n)(ProductPrice)\n\nregisterCustomElement('bq-product-price', decoratedComponent, {\n mountElement: 'span',\n attributes: ['product-id', 'default-price']\n})\n\nexport default decoratedComponent\n","// React\nimport React, { useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport Skeleton from 'ui/blocks/Skeleton'\n\n// Shared\nimport withStore from 'shop-components/utils/withStore'\nimport withTheme from 'shop-components/utils/withTheme'\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport registerCustomElement from 'shop-components/utils/registerCustomElement'\nimport { fetchPrice, fetchPrices } from 'shop-components/redux/actions/price'\n\nconst ProductPriceLabel = ({\n productId,\n label,\n isLoading,\n defaultLabel,\n cart,\n product,\n fetchProductPrices,\n fetchProductPrice\n}) => {\n useEffect(() => {\n if (product?.id && cart?.id && (product?.variation_id || product?.configuration)) {\n return fetchProductPrice({\n cartId: cart.id,\n id: product.variation_id || product.id,\n configuration: product.configuration\n })\n }\n\n if (productId && cart?.id) {\n fetchProductPrices({\n cartId: cart.id,\n id: productId\n })\n }\n }, [productId, product?.id, product?.variation_id, product?.configuration, cart.id, cart.startsAt, cart.stopsAt])\n\n if (isLoading) return \n\n if (label) return label\n\n if (defaultLabel) return defaultLabel\n\n return null\n}\n\nProductPriceLabel.displayName = 'ProductPriceLabel'\n\nProductPriceLabel.propTypes = {\n productId: PropTypes.string,\n label: PropTypes.any,\n isLoading: PropTypes.bool,\n defaultLabel: PropTypes.any,\n cart: PropTypes.object,\n product: PropTypes.object,\n fetchProductPrices: PropTypes.func,\n fetchProductPrice: PropTypes.func\n}\n\nconst mapStateToProps = (state, props) => {\n const cart = state.orm.carts.getById(state.client.cartId || window.booqableOptions.cart?.id)\n const product = state.items.records[props.productId]\n const type = product?.price?.product_type\n const label = type === 'consumable' ? props.t('user.store.buy') : product?.price?.charge_label\n\n return {\n cart: {\n id: cart?.id ?? window.booqableOptions.cart?.id,\n startsAt: cart?.starts_at ?? window.booqableOptions.cart?.from,\n stopsAt: cart?.stops_at ?? window.booqableOptions.cart?.till\n },\n isLoading: state.items.loading && !label,\n label,\n product\n }\n}\n\nconst mapDispatchToProps = (dispatch, _props) => ({\n fetchProductPrice: (attributes) => dispatch(fetchPrice(attributes)),\n fetchProductPrices: (attributes) => dispatch(fetchPrices(attributes))\n})\n\nconst decoratedComponent = compose(\n withStore,\n withTranslation('user'),\n withTheme,\n reduxConnect(mapStateToProps, mapDispatchToProps)\n)(ProductPriceLabel)\n\nregisterCustomElement('bq-product-price-label', decoratedComponent, {\n mountElement: 'span',\n attributes: ['product-id', 'default-label']\n})\n\nexport default decoratedComponent\n","import styled, { createGlobalStyle } from 'styled-components'\nimport { color } from 'ui/themes/utils'\n\nexport const HostStyles = createGlobalStyle`\n :host {\n --variation-select-border: 1px solid var(--color-border, ${color('Misc/Divider')});\n\n --variation-select-color: var(--color-typo, ${color('text')});\n --variation-select-background-color: var(--color-white, ${color('white')});\n --variation-select-font-size: 13px;\n --variation-select-font-family: var(--font-body, sans-serif);\n\n --variation-select-padding: 0 30px 0 10px;\n\n --variation-select-control-height: 38px;\n\n --variation-select-border-radius: 6px;\n }\n`\n\nconst Wrapper = styled.div`\n position: relative;\n\n svg {\n position: absolute;\n\n top: 50%;\n right: 10px;\n transform: translateY(-50%);\n\n width: 14px;\n height: 14px;\n\n pointer-events: none;\n }\n`\n\nconst Select = styled.select`\n border: var(--variation-select-border);\n\n background-color: var(--variation-select-background-color);\n color: var(--variation-select-color);\n\n font-family: var(--variation-select-font-family);\n font-size: var(--variation-select-font-size);\n\n padding: var(--variation-select-padding);\n\n width: 100%;\n height: var(--variation-select-control-height);\n\n border-radius: var(--variation-select-border-radius);\n\n appearance: none;\n`\n\nWrapper.Select = Select\n\nexport default Wrapper\n","// React\nimport React, { Fragment, useCallback, useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Libraries\nimport BVariationSelect, { HostStyles } from './styles'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faChevronDown as farChevronDown } from '@fortawesome/pro-regular-svg-icons'\nimport _sortBy from 'lodash/sortBy'\n\n// Shared\nimport withStore from 'shop-components/utils/withStore'\nimport withTheme from 'shop-components/utils/withTheme'\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport registerCustomElement from 'shop-components/utils/registerCustomElement'\nimport { fetchPrice } from 'shop-components/redux/actions/price'\nimport { fetchVariationAvailability } from 'shop-components/redux/actions/availability'\nimport { Settings as SettingsUtils } from 'back_office/v2/utils/utils'\n\nconst ProductVariationsSelect = ({\n name,\n productId,\n variations,\n defaultVariation,\n withAvailability,\n cart,\n fetchProductPrice,\n fetchAvailability,\n setVariation,\n t\n}) => {\n const [selected, setSelected] = useState(defaultVariation?.id)\n\n const handleSelectVariation = useCallback(\n (id) => {\n setVariation(productId, id)\n setSelected(id)\n },\n [productId, setVariation]\n )\n\n useEffect(() => {\n if (!selected && defaultVariation?.id) {\n handleSelectVariation(defaultVariation?.id)\n }\n }, [selected, defaultVariation?.id, handleSelectVariation])\n\n useEffect(() => {\n if (!(selected && cart.id)) return\n\n fetchProductPrice({ id: selected, cartId: cart.id })\n }, [selected, cart.id, cart.startsAt, cart.stopsAt])\n\n useEffect(() => {\n if (!(productId && variations?.length && cart.startsAt && cart.stopsAt && cart.startLocationId)) return\n\n fetchAvailability({\n ids: variations.map(({ id }) => id),\n productId,\n startsAt: cart.startsAt,\n stopsAt: cart.stopsAt,\n startLocationId: cart.startLocationId\n })\n }, [productId, variations?.length, cart.startsAt, cart.stopsAt, cart.startLocationId])\n\n if (!variations || variations?.length <= 1) return null\n\n return (\n \n \n \n handleSelectVariation(e.target.value)}\n >\n {variations.map((variation) => {\n return (\n \n )\n })}\n \n \n \n \n )\n}\n\nProductVariationsSelect.propTypes = {\n productId: PropTypes.string.isRequired,\n name: PropTypes.string,\n cart: PropTypes.object,\n variations: PropTypes.array,\n defaultVariation: PropTypes.object,\n withAvailability: PropTypes.bool,\n fetchProductPrice: PropTypes.func,\n fetchAvailability: PropTypes.func,\n setVariation: PropTypes.func,\n t: PropTypes.func\n}\n\nProductVariationsSelect.displayName = 'ProcuctVariationsSelect'\n\nconst mapStateToProps = (state, props) => {\n const cart = state.orm.carts.getById(state.client.cartId || window.booqableOptions.cart?.id)\n const hasDates = !!(cart?.starts_at && cart?.stops_at)\n\n const item = state.items.records[props.productId]\n\n const variations = _sortBy(item?.products, 'sorting_weight')\n const defaultVariation = variations?.[0]\n\n const withAvailability =\n hasDates &&\n item?.tracking_type !== 'none' &&\n SettingsUtils.get('store.use_availability') &&\n !SettingsUtils.get('store.hide_product_availability_quantities')\n\n return {\n cart: {\n id: cart?.id ?? window.booqableOptions.cart?.id,\n startsAt: cart?.starts_at ?? window.booqableOptions.cart?.from,\n stopsAt: cart?.stops_at ?? window.booqableOptions.cart?.till,\n startLocationId: cart?.start_location_id ?? window.booqableOptions.cart?.start_location_id\n },\n name: item?.name,\n variations,\n defaultVariation,\n withAvailability\n }\n}\n\nconst mapDispatchToProps = (dispatch, props) => ({\n fetchProductPrice: ({ id, cartId }) => dispatch(fetchPrice({ id, cartId })),\n fetchAvailability: (attributes) => dispatch(fetchVariationAvailability(attributes)),\n setVariation: (id, variationId) => dispatch({ type: 'PRODUCT_UPDATE_VARIATION', payload: { id, variationId } })\n})\n\nconst decoratedComponent = compose(\n withStore,\n withTheme,\n withTranslation('user'),\n reduxConnect(mapStateToProps, mapDispatchToProps)\n)(ProductVariationsSelect)\n\nregisterCustomElement('bq-product-variations-select', decoratedComponent, {\n attributes: ['product-id']\n})\n\nexport default decoratedComponent\n","// React\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport ProductAvailabilityCalendar from 'store/modules/product/components/ProductAvailabilityCalendar'\n\n// Shared\nimport withStore from 'shop-components/utils/withStore'\nimport withTheme from 'shop-components/utils/withTheme'\nimport registerCustomElement from 'shop-components/utils/registerCustomElement'\nimport { getOperatingRules } from 'shared/utils/operating_rules'\nimport { Settings as SettingsUtils } from 'back_office/v2/utils/utils'\n\nconst AvailabilityCalendar = ({ itemId, cart, configuration, locations, availabilities, operatingRules, showCounts }) => (\n \n)\n\nAvailabilityCalendar.propTypes = {\n item: PropTypes.object,\n cart: PropTypes.object,\n configuration: PropTypes.object,\n locations: PropTypes.object,\n availabilities: PropTypes.object,\n operatingRules: PropTypes.object,\n showCounts: PropTypes.bool\n}\n\nconst mapStateToProps = (state, props) => {\n const cart = state.orm.carts.getById(state.client.cartId || window.booqableOptions.cart.id)\n const locations = {\n start: state.orm.locations.getById(cart?.start_location_id ?? window.booqableOptions.cart.startLocationId),\n stop: state.orm.locations.getById(cart?.stop_location_id ?? window.booqableOptions.cart.stopLocationId)\n }\n\n const item = state.items.records[props.productId]\n let itemId = item?.variation_id\n itemId ||= item?.type === 'product_groups' ? item?.products?.[0]?.id : item?.id\n\n const availabilities = state.orm.shop_availabilities.getAll({\n item_id: itemId\n })\n\n const configuration = item?.configuration\n\n const operatingRules = getOperatingRules(state)\n const showCounts = !SettingsUtils.get('store.hide_product_availability_quantities')\n\n return {\n item,\n itemId,\n configuration,\n cart,\n locations,\n availabilities,\n operatingRules,\n showCounts\n }\n}\n\nconst decoratedComponent = compose(withStore, withTheme, reduxConnect(mapStateToProps))(AvailabilityCalendar)\n\nregisterCustomElement('bq-product-availability-calendar', decoratedComponent, {\n attributes: ['product-id'],\n mountElement: 'span',\n styleSheetTarget: document.head\n})\n\nexport default decoratedComponent\n","import styled, { css, createGlobalStyle } from 'styled-components'\nimport { color } from 'ui/themes/utils'\n\nimport Skeleton from 'ui/blocks/Skeleton'\n\nconst statusColors = {\n success: '--add-button-button-color',\n error: '--add-button-error-color'\n}\n\nexport const HostStyles = createGlobalStyle`\n :host {\n --add-button-button-color: var(--color-accent-background, ${color('branding')});\n --add-button-button-label-color: var(--color-accent-foreground, ${color('white')});\n\n --add-button-success-color: var(--color-green, ${color('Success/Base')});\n --add-button-error-color: var(--color-red, ${color('Danger/Base')});\n\n --add-button-label-weight: 700;\n --add-button-label-family: var(--font-body, sans-serif);\n\n --add-button-input-border-radius: 6px;\n --add-button-button-border-radius: 6px;\n\n --add-button-control-button-color: var(--color-typo, ${color('text')});\n\n --add-button-input-color: var(--color-typo, ${color('text')});\n --add-button-input-background-color: var(--color-white, ${color('white')});\n --add-button-input-border: 1px solid var(--color-border, ${color('Misc/Divider')});\n\n --add-button-control-height: 48px;\n\n --add-button-input-padding: 8px 12px;\n --add-button-input-width: 110px;\n\n --add-button-button-padding: 0 14px;\n --add-button-button-width: 100%;\n --add-button-button-max-width: 400px;\n\n --add-button-gap: 6px;\n }\n\n * {\n box-sizing: border-box;\n }\n\n @keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n }\n`\n\nconst Wrapper = styled.div`\n display: flex;\n align-items: center;\n\n gap: var(--add-button-gap);\n\n width: 100%;\n`\n\nconst ButtonLabel = styled.span`\n color: var(--add-button-button-label-color);\n\n font-family: var(--add-button-label-family);\n font-weight: var(--add-button-label-weight);\n`\n\nconst ButtonOverlay = styled.div`\n position: absolute;\n\n width: 100%;\n height: 100%;\n\n top: 0;\n left: 0;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n svg {\n max-height: 18px;\n max-width: 18px;\n\n height: 100%;\n width: 100%;\n\n &.loading {\n animation: spin 1s linear infinite;\n }\n }\n`\n\nconst Button = styled.button`\n display: block;\n position: relative;\n\n width: var(--add-button-button-width);\n height: var(--add-button-control-height);\n\n max-width: var(--add-button-button-max-width);\n\n padding: var(--add-button-button-padding);\n\n background-color: var(--add-button-button-color);\n color: var(--add-button-button-label-color);\n\n border: none;\n border-radius: var(--add-button-button-border-radius);\n\n cursor: pointer;\n\n &:hover {\n box-shadow: inset 0px 0px 400px 110px rgba(0, 0, 0, 0.12);\n }\n\n transition: all 0.2s ease-in-out;\n\n ${({ loading }) =>\n loading &&\n css`\n cursor: progress;\n\n ${ButtonLabel} {\n opacity: 0;\n visibility: hidden;\n }\n `}\n\n ${({ disabled }) =>\n disabled &&\n css`\n cursor: not-allowed;\n\n opacity: 0.6;\n `}\n\n ${({ status }) =>\n status &&\n css`\n background-color: var(${statusColors[status]});\n\n ${ButtonLabel} {\n opacity: 0;\n visibility: hidden;\n }\n `}\n`\n\nconst InputWrapper = styled.div`\n position: relative;\n`\n\nconst Input = styled.input`\n display: block;\n\n width: var(--add-button-input-width);\n height: var(--add-button-control-height);\n\n color: var(--add-button-input-color);\n background-color: var(--add-button-input-background-color);\n\n padding: var(--add-button-input-padding);\n margin: 0;\n\n border: var(--add-button-input-border);\n border-radius: var(--add-button-input-border-radius);\n\n font-family: sans-serif;\n\n appearance: textfield;\n\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n appearance: none;\n margin: 0;\n }\n`\n\nconst Controls = styled.div`\n position: absolute;\n\n display: flex;\n flex-direction: column;\n\n top: 0;\n right: 0;\n bottom: 0;\n\n border-top-right-radius: var(--add-button-input-border-radius);\n border-bottom-right-radius: var(--add-button-input-border-radius);\n\n border-left: var(--add-button-input-border);\n`\n\nconst Control = styled.button`\n flex: 1 1 auto;\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n padding: 0 15px;\n\n border: none;\n\n background-color: transparent;\n\n cursor: pointer;\n\n svg {\n width: 12px;\n height: 12px;\n\n fill: var(--add-button-control-button-color);\n color: var(--add-button-control-button-color);\n }\n`\n\nconst SkeletonContainer = styled(Wrapper)`\n ${Skeleton} {\n height: var(--add-button-control-height);\n width: var(--add-button-button-width);\n\n border-radius: var(--add-button-button-border-radius);\n }\n`\n\nWrapper.Button = Button\nWrapper.ButtonLabel = ButtonLabel\nWrapper.ButtonOverlay = ButtonOverlay\nWrapper.InputWrapper = InputWrapper\nWrapper.Input = Input\nWrapper.Controls = Controls\nWrapper.Control = Control\nWrapper.SkeletonContainer = SkeletonContainer\n\nexport default Wrapper\n","// React\nimport React from 'react'\nimport PropTypes from 'prop-types'\n\n// Components\nimport BProductButton from './styles'\nimport Skeleton from 'ui/blocks/Skeleton'\n\n// Libraries\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n faSpinnerThird as farSpinnerThird,\n faCheck as farCheck,\n faTimes as farTimes\n} from '@fortawesome/pro-regular-svg-icons'\n\nconst Button = ({ loading, disabled, status, behavior, onClick, label }) => {\n if (!behavior) {\n return (\n \n \n \n )\n }\n\n return (\n \n {label}\n {loading && (\n \n \n \n )}\n {status === 'success' && (\n \n \n \n )}\n {status === 'error' && (\n \n \n \n )}\n \n )\n}\n\nButton.propTypes = {\n onClick: PropTypes.func,\n loading: PropTypes.bool,\n disabled: PropTypes.bool,\n status: PropTypes.oneOf(['success', 'error']),\n behavior: PropTypes.oneOf(['show_cart', 'checkout']),\n label: PropTypes.any\n}\n\nexport default Button\n","import request from './'\n\n// Universal action supporting product groups, products and bundles\nexport const getItem = (id) => {\n return request({\n method: 'GET',\n url: `/api/boomerang/items/${id}`,\n params: {\n include: ['photo', 'bundle_items.product_group.products.photo', 'products', 'products.photo']\n }\n })\n}\n","// Libraries\nimport _debounce from 'lodash/debounce'\n\n// Shared\nimport { getItem } from 'shop-components/api/items'\n\nexport const composeItem = ({ data, included }) => {\n const item = {\n id: data.id,\n type: data.type,\n ...data.attributes,\n photos: [],\n products: []\n }\n\n included.forEach(({ id, type, attributes, relationships }) => {\n switch (type) {\n case 'bundle_items': {\n if (data.type !== 'bundles') return\n\n const productGroup = included.find(({ id: _id }) => _id === relationships.product_group.data.id)\n const photo = included.find(({ id: _id }) => _id === productGroup.attributes.photo_id)\n const products = productGroup.relationships.products.data\n .map(({ id }) => ({\n id,\n ...included.find(({ id: _id }) => _id === id).attributes\n }))\n .map((product) => {\n const photo = included.find(({ id: _id }) => _id === product.photo_id)?.attributes\n\n if (photo) {\n return {\n ...product,\n photo\n }\n }\n\n return product\n })\n\n if (photo && !item.photos.find(({ id: _id }) => _id === photo.id)) {\n item.photos.push({\n id: photo.id,\n ...photo.attributes\n })\n }\n\n item.products.push({\n id,\n ...attributes,\n product_group: {\n id: productGroup.id,\n ...productGroup.attributes,\n products\n }\n })\n\n break\n }\n case 'products': {\n if (data.type !== 'product_groups') return\n\n const photo = included.find(({ id: _id }) => _id === attributes.photo_id)\n\n if (photo && !item.photos.find(({ id: _id }) => _id === photo.id)) {\n item.photos.push({\n id: photo.id,\n ...photo.attributes\n })\n }\n\n item.products.push({\n id,\n ...attributes\n })\n\n break\n }\n }\n })\n\n return item\n}\n\nconst fetchRequest = (id, dispatch) => {\n dispatch({\n type: 'PRODUCTS_FETCH_START',\n payload: { id }\n })\n\n getItem(id).then(({ data }) => {\n const item = composeItem(data)\n\n dispatch({ type: 'PRODUCTS_FETCH_SUCCESS', payload: { records: [item] } })\n })\n}\n\nconst fetchDebounced = _debounce(fetchRequest, 50)\n\nexport const fetchItem = (id) => (dispatch) => {\n return fetchDebounced(id, dispatch)\n}\n\nexport const updateConfiguration = ({ id, itemId, variationId }) => (dispatch) => {\n dispatch({\n type: 'PRODUCT_UPDATE_CONFIGURATION',\n payload: { id, itemId, variationId }\n })\n}\n","// React\nimport React, { Fragment, useState, useCallback, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport BProductButton, { HostStyles } from './styles'\nimport Button from './Button'\n\n// Libraries\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faPlus as farPlus, faMinus as farMinus } from '@fortawesome/pro-regular-svg-icons'\n\n// Shared\nimport withStore from 'shop-components/utils/withStore'\nimport withTheme from 'shop-components/utils/withTheme'\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport registerCustomElement from 'shop-components/utils/registerCustomElement'\nimport CartActions from 'store/v2/redux/actions/cart'\nimport ClientActions from 'store/v2/redux/actions/client'\nimport { Settings as SettingsUtils } from 'back_office/v2/utils/utils'\nimport { triggerUserFrameworkBookEvent } from 'shared/utils/userFrameworkEvents'\nimport { fetchItem } from 'shop-components/redux/actions/item'\n\nconst ProductButton = ({ item, behavior, hasDates, useAvailability, bookProduct, fetchItem, clearCart, label, t }) => {\n const [quantity, setQuantity] = useState(1)\n const [loading, setLoading] = useState(false)\n const [status, setStatus] = useState(null)\n\n useEffect(() => {\n fetchItem()\n }, [])\n\n let disabled = quantity <= 0 || isNaN(quantity) || loading\n\n if (behavior === 'checkout' && useAvailability) {\n const available = item?.availability?.plannable\n\n disabled = disabled || (hasDates && !available) || (hasDates && quantity > available)\n }\n\n const handleBook = useCallback(async () => {\n let timeout\n let id\n\n if (item.type === 'bundles') {\n id = item.id\n } else {\n id = item.variation_id || item.products[0].id\n }\n\n setLoading(true)\n\n if (behavior === 'checkout') {\n await clearCart()\n }\n\n await bookProduct({ id, quantity, configuration: item.configuration })\n .then(() => {\n setStatus('success')\n })\n .catch(() => {\n setStatus('error')\n })\n .finally(() => {\n setLoading(false)\n\n timeout = setTimeout(() => {\n setStatus(null)\n }, 3000)\n })\n\n return () => {\n clearTimeout(timeout)\n }\n }, [item, quantity])\n\n const handleButtonClick = useCallback(() => {\n if (!hasDates && behavior === 'checkout') {\n return ClientActions.toggleModalPicker(true)\n }\n\n handleBook()\n }, [handleBook, hasDates, behavior])\n\n const handleInputFocus = useCallback(({ target }) => {\n target.select()\n }, [])\n\n const handleChangeQuantity = useCallback(({ target: { value } }) => {\n if (value && !isNaN(value)) {\n setQuantity(parseInt(value))\n }\n }, [])\n\n const handleIncreaseQuantity = useCallback(() => {\n setQuantity((prev) => prev + 1)\n }, [])\n\n const handleDecreaseQuantity = useCallback(() => {\n setQuantity((prev) => {\n if (prev === 0) return prev\n\n return prev - 1\n })\n }, [])\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nProductButton.propTypes = {\n item: PropTypes.object,\n behavior: PropTypes.oneOf(['show_cart', 'checkout']),\n hasDates: PropTypes.bool,\n useAvailability: PropTypes.bool,\n bookProduct: PropTypes.func,\n clearCart: PropTypes.func,\n fetchItem: PropTypes.func,\n label: PropTypes.any,\n t: PropTypes.func\n}\n\nProductButton.displayName = 'ProductButton'\n\nconst mapStateToProps = (state, props) => {\n const cart = state.orm.carts.getById(state.client.cartId)\n const item = state.items.records[props.productId]\n\n const behavior = SettingsUtils.get('store.behaviors.add_button')\n const useAvailability = SettingsUtils.get('store.use_availability') && item?.tracking_type !== 'none'\n const hasDates = !!cart?.starts_at && !!cart?.stops_at\n\n let label = 'user.store.add_to_cart'\n\n if (behavior === 'checkout' && !hasDates) {\n label = 'user.store.select_a_period'\n }\n\n return { item, behavior, hasDates, label, useAvailability }\n}\n\nconst mapDispatchToProps = (dispatch, props) => ({\n fetchItem: () => dispatch(fetchItem(props.productId)),\n clearCart: () => CartActions.clear(),\n bookProduct: ({ id, quantity, configuration }) =>\n CartActions.book({ item_id: id, quantity, configuration: { products: configuration } }).then(() => {\n const toggleCart = () => ClientActions.toggleCart(true)\n const togglePicker = () =>\n ClientActions.evaluateCartOverdue() ? ClientActions.toggleModalPicker(true) : ClientActions.setCheckingOut()\n\n const action = SettingsUtils.get('store.behaviors.add_button') === 'show_cart' ? toggleCart : togglePicker\n\n triggerUserFrameworkBookEvent(id, quantity)\n\n return setTimeout(action, 150)\n })\n})\n\nconst decoratedComponent = compose(\n withTranslation('user'),\n withTheme,\n withStore,\n reduxConnect(mapStateToProps, mapDispatchToProps)\n)(ProductButton)\n\nregisterCustomElement('bq-product-button', decoratedComponent, {\n attributes: ['product-id']\n})\n\nexport default decoratedComponent\n","import styled, { css, createGlobalStyle } from 'styled-components'\n\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { color } from 'ui/themes/utils'\n\nexport const HostStyles = createGlobalStyle`\n :host {\n /* Colors */\n --date-picker-icon-color: var(--color-accent-foreground, #ffffff);\n --date-picker-background-color: var(--color-white, #ffffff);\n --date-picker-text-color: var(--color-typo, #0c2747);\n --date-picker-placeholder-color: var(--color-placeholder, #0c27471a);\n --date-picker-cleanstate-background-color: var(--color-accent-background, #395db8);\n --date-picker-cleanstate-text-color: var(--color-accent-foreground, #ffffff);\n --date-picker-error-color: var(--color-red, #f85454);\n\n /* Sizes */\n --date-picker-wrapper-padding: 0.5rem;\n --date-picker-cleanstate-padding: 0.75rem 1.25rem;\n --date-picker-section-padding: 0.75rem;\n --date-picker-title-size: 1.125rem;\n --date-picker-title-line-height: 1.75rem;\n --date-picker-text-size: 1rem;\n --date-picker-text-line-height: 1.5rem;\n --date-picker-border-radius: 0.5rem;\n\n /* Other styles */\n --date-picker-box-shadow: 0 1px 2px rgba(33, 59, 71, 0.12), 0 4px 12px rgba(33, 59, 71, 0.12);\n --date-picker-section-border: 1px solid ${color('Misc/Divider')};\n\n --date-picker-cleanstate-alignment: left;\n --date-picker-alignment: left;\n\n @media (min-width: 820px) {\n --date-picker-wrapper-padding: 1rem;\n }\n }\n`\n\nconst DatePicker = styled.div`\n * {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n }\n\n font-family: var(--font-body);\n`\n\nconst Icon = styled(FontAwesomeIcon)`\n max-width: 24px;\n width: 100%;\n\n color: var(--date-picker-icon-color);\n`\n\nconst CalendarIcon = styled(Icon)`\n max-height: 24px;\n\n margin-right: 16px;\n`\n\nconst ChevronIcon = styled(Icon)`\n max-width: 12px;\n`\n\nconst Cleanstate = styled.div`\n display: flex;\n align-items: center;\n\n text-align: var(--date-picker-cleanstate-alignment);\n\n background-color: var(--date-picker-cleanstate-background-color);\n\n padding: var(--date-picker-cleanstate-padding);\n\n border-radius: var(--date-picker-border-radius);\n\n cursor: pointer;\n\n min-height: 56px;\n`\n\nconst CleanstateLabels = styled.div`\n width: 100%;\n margin-right: 16px;\n\n color: var(--date-picker-cleanstate-text-color);\n`\n\nconst CleanstateTitle = styled.div`\n font-size: var(--date-picker-title-size);\n line-height: var(--date-picker-title-line-height);\n font-weight: 600;\n\n color: var(--color-accent-foreground);\n`\n\nconst CleanstateLabel = styled.div`\n font-size: var(--date-picker-text-size);\n line-height: var(--date-picker-text-line-height);\n color: var(--color-accent-foreground);\n`\n\nconst Wrapper = styled.div`\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n\n background-color: var(--date-picker-background-color);\n\n padding: var(--date-picker-wrapper-padding) 0;\n\n box-shadow: var(--date-picker-box-shadow);\n border-radius: var(--date-picker-border-radius);\n\n text-align: var(--date-picker-alignment);\n`\n\nconst SectionGroup = styled.div`\n display: flex;\n flex-grow: 1;\n cursor: pointer;\n`\n\nconst Section = styled.div`\n flex: 1 1 0;\n padding: 0 var(--date-picker-section-padding);\n border-right: var(--date-picker-section-border);\n`\n\nconst Label = styled.p`\n font-size: var(--date-picker-text-size);\n line-height: var(--date-picker-text-line-height);\n\n color: var(--date-picker-text-color);\n\n font-weight: 600;\n\n @media (min-width: 820px) {\n display: block;\n }\n`\n\nconst Value = styled.p`\n font-size: var(--date-picker-text-size);\n line-height: var(--date-picker-text-line-height);\n\n color: var(--date-picker-text-color);\n\n font-weight: 400;\n\n ${({ isPlaceholder }) => isPlaceholder && css`\n font-size: var(--date-picker-text-size);\n line-height: var(--date-picker-text-line-height);\n font-weight: 400;\n color: var(--date-picker-placeholder-color);\n `}\n\n ${({ isValid }) => !isValid && css`\n color: var(--date-picker-error-color);\n `}\n`\n\nDatePicker.Icon = Icon\nDatePicker.CalendarIcon = CalendarIcon\nDatePicker.ChevronIcon = ChevronIcon\nDatePicker.Cleanstate = Cleanstate\nDatePicker.CleanstateLabels = CleanstateLabels\nDatePicker.CleanstateTitle = CleanstateTitle\nDatePicker.CleanstateLabel = CleanstateLabel\nDatePicker.Wrapper = Wrapper\nDatePicker.Section = Section\nDatePicker.SectionGroup = SectionGroup\nDatePicker.Label = Label\nDatePicker.Value = Value\n\nexport default DatePicker\n","// React\nimport { useEffect, useCallback } from 'react'\n\n// Hooks\nimport { useSettings } from 'shared/utils/useSettings'\nimport { useSearchParam } from 'shared/utils/useSearchParam'\nimport { useSelector } from 'react-redux'\n\n// Shared\nimport CartActions from 'store/v2/redux/actions/cart'\nimport ClientActions from 'store/v2/redux/actions/client'\n\nexport const useDatePicker = () => {\n const shouldOpenPicker = useSearchParam('open-picker')\n\n const behavior = useSettings('store.behaviors.add_button')\n\n const isOpen = useSelector((state) => state.client.modalPickerOpen)\n\n const toggle = useCallback((state) => {\n ClientActions.toggleModalPicker(state)\n }, [])\n\n const close = useCallback(() => {\n switch (behavior) {\n case 'show_cart': {\n ClientActions.toggleModalPicker(false)\n break\n }\n case 'checkout': {\n CartActions.clear()\n ClientActions.toggleModalPicker(false)\n break\n }\n }\n }, [behavior])\n\n // Effect to check if we should open picker based on the URL search param\n useEffect(() => {\n if (!shouldOpenPicker) return\n\n toggle(true)\n }, [])\n\n return {\n isOpen,\n toggle,\n close,\n behavior\n }\n}\n","// React\nimport React, { Fragment, useMemo } from 'react'\nimport { compose } from 'redux'\n\n// Components\nimport BDatePicker, { HostStyles } from './styles'\n\n// Libraries\nimport { faCalendar as falCalendar, faChevronRight as falChevronRight } from '@fortawesome/pro-light-svg-icons'\n\n// Hooks\nimport { useOrm, shallowEqual } from 'shared/utils/useOrm'\nimport { useOpeningHours } from 'shared/utils/useOpeningHours'\nimport { useSettings } from 'shared/utils/useSettings'\nimport { useTranslation } from 'shared/utils/useTranslation'\nimport { useDatePicker } from './hooks'\nimport { useSelector } from 'react-redux'\n\n// Shared\nimport withStore from 'shop-components/utils/withStore'\nimport withTheme from 'shop-components/utils/withTheme'\nimport { Format as FormatUtils } from 'back_office/v2/utils/utils'\nimport { isLocationInputEnabled, isDaySelectable, isTimeSelectable } from 'ui/components/Picker/utils'\n\nconst getLabelKey = (pricingEnabled, availabilityEnabled) => {\n if (pricingEnabled && availabilityEnabled) {\n return 'user.store.view_prices_and_availability'\n }\n\n if (pricingEnabled && !availabilityEnabled) {\n return 'user.store.view_prices'\n }\n\n if (!pricingEnabled && availabilityEnabled) {\n return 'user.store.view_availability'\n }\n}\n\nconst Button = () => {\n const openingHours = useOpeningHours()\n\n const cartId = useSelector((state) => state.client.cartId)\n\n const cart = useOrm('carts', (carts) => {\n return carts.getById(cartId || window.booqableOptions.cart?.id)\n })\n const locations = useOrm('locations', (locations) => {\n return {\n count: locations.size(),\n start: locations.getById(cart?.start_location_id ?? window.booqableOptions.cart?.startLocationId),\n stop: locations.getById(cart?.stop_location_id ?? window.booqableOptions.cart?.stopLocationId)\n }\n }, shallowEqual)\n\n const useTimes = useSettings('store.use_times')\n const useAMOrPM = useSettings('dates.use_am_pm')\n const isPricingEnabled = useSettings('pricing.enabled')\n const isAvailabilityEnabled = useSettings('store.use_availability')\n\n const { toggle } = useDatePicker()\n\n const dates = {\n start: cart?.starts_at ?? window.booqableOptions.cart?.from,\n stop: cart?.stops_at ?? window.booqableOptions.cart?.till\n }\n\n const isDelivery = cart?.data?.fulfillment_type === 'delivery'\n\n const isStartValid = useMemo(\n () =>\n isDaySelectable({\n type: 'start',\n openingHours,\n date: dates.start,\n values: {\n starts_at: dates.start,\n stops_at: dates.stop\n }\n }) &&\n isTimeSelectable({\n type: 'start',\n openingHours,\n date: dates.start,\n values: {\n starts_at: dates.start,\n stops_at: dates.stop\n }\n }),\n [dates.start, dates.stop, openingHours]\n )\n\n const isStopValid = useMemo(\n () =>\n isDaySelectable({\n type: 'stop',\n openingHours,\n date: dates.stop,\n values: {\n starts_at: dates.start,\n stops_at: dates.stop\n }\n }) &&\n isTimeSelectable({\n type: 'stop',\n openingHours,\n date: dates.stop,\n values: {\n starts_at: dates.start,\n stops_at: dates.stop\n }\n }),\n [dates.start, dates.stop, openingHours]\n )\n\n const { t } = useTranslation('user')\n\n const hasLocations = locations.count > 1 && (isLocationInputEnabled('start') || isLocationInputEnabled('stop'))\n const hasData = hasLocations ?\n !!dates.start && !!dates.stop && !!locations.start && !!locations.stop :\n !!dates.start && !!dates.stop\n\n let timeFormat = ''\n\n if (useTimes) {\n timeFormat = useAMOrPM ? ' hh:mm A' : ' HH:mm'\n }\n\n const labelKey = getLabelKey(isPricingEnabled, isAvailabilityEnabled)\n\n if (!cart) return null\n\n if (!hasData) {\n return (\n \n \n \n toggle(true)}>\n \n \n {t('user.store.select_a_period')}\n {labelKey ? t(labelKey) : '...'}\n \n \n \n \n \n )\n }\n\n return (\n \n \n \n toggle(true)} hasLocations={hasLocations}>\n \n \n {isDelivery ? t('user.store.timeslot_from') : t('user.store.start_date')}\n \n {dates.start && (\n \n {FormatUtils.date(dates.start, 'MMM D[,] YYYY')}\n {useTimes && FormatUtils.date(dates.start, timeFormat)}\n \n )}\n {!dates.start && t('user.store.pick_date')}\n \n \n \n {isDelivery ? t('user.store.timeslot_until') : t('user.store.stop_date')}\n \n {dates.stop && (\n \n {FormatUtils.date(dates.stop, 'MMM D[,] YYYY')}\n {useTimes && FormatUtils.date(dates.stop, timeFormat)}\n \n )}\n {!dates.stop && t('user.store.pick_date')}\n \n \n \n {hasLocations && !isDelivery && (\n \n \n {t('user.store.start_location')}\n \n {locations.start?.name ?? t('user.store.start_location')}\n \n \n \n {t('user.store.stop_location')}\n \n {locations.stop?.name ?? t('user.store.stop_location')}\n \n \n \n )}\n \n \n \n )\n}\n\nconst decoratedComponent = compose(\n withStore,\n withTheme\n)(Button)\n\nexport default decoratedComponent\n","import styled, { css, createGlobalStyle } from 'styled-components'\n\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\n\nexport const HostStyles = createGlobalStyle`\n :host {\n /* Colors */\n --date-picker-icon-color: var(--color-accent-foreground, #ffffff);\n --date-picker-background-color: var(--color-white, #ffffff);\n --date-picker-text-color: var(--color-typo, #0c2747);\n --date-picker-border-color: var(--color-accent-background, #395db8);\n --date-picker-error-color: var(--color-red, #f85454);\n\n /* Sizes */\n --date-picker-wrapper-padding: 0.5rem;\n --date-picker-text-size: 1.125rem;\n --date-picker-text-weight: 600;\n --date-picker-text-line-height: 1.75rem;\n --date-picker-border-radius: 0.5rem;\n }\n`\n\nconst DatePicker = styled.div`\n * {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n }\n\n font-family: var(--font-body);\n`\n\nconst Icon = styled(FontAwesomeIcon)`\n max-width: 14px;\n width: 100%;\n\n color: var(--date-picker-icon-color);\n`\n\nconst CalendarIcon = styled(Icon)`\n max-height: 24px;\n\n margin-right: 12px;\n`\n\nconst Wrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n margin: auto;\n width: 512px;\n max-width: 100%;\n\n background-color: var(--date-picker-background-color);\n\n padding: var(--date-picker-wrapper-padding);\n\n border: 1px solid var(--date-picker-border-color);\n\n border-radius: var(--date-picker-border-radius);\n\n cursor: pointer;\n\n @media (max-width: 820px) {\n width: 100%;\n }\n`\n\nconst WrapperWithData = styled(Wrapper)`\n @media (max-width: 426px) {\n flex-direction: column;\n align-items: start;\n }\n`\n\nconst Text = styled.div`\n font-size: var(--date-picker-text-size);\n line-height: var(--date-picker-text-line-height);\n font-weight: var(--date-picker-text-weight);\n\n color: var(--date-picker-text-color);\n`\n\nconst ExpandedTitle = styled.span`\n @media (max-width: 426px) {\n display: none;\n }\n`\n\nconst Location = styled(Text)`\n border-right: 1px solid var(--date-picker-border-color);\n padding-right: 12px;\n margin-right: 12px;\n\n @media (max-width: 426px) {\n border-right: 0px none;\n padding-right: 0px;\n margin-right: 0px;\n }\n`\n\nconst Dates = styled(Text)`\n ${({ isValid }) => !isValid && css`\n color: var(--date-picker-error-color);\n `}\n\n @media (max-width: 426px) {\n font-weight: 400;\n }\n`\n\nDatePicker.Wrapper = Wrapper\nDatePicker.WrapperWithData = WrapperWithData\nDatePicker.CalendarIcon = CalendarIcon\nDatePicker.Text = Text\nDatePicker.ExpandedTitle = ExpandedTitle\nDatePicker.Location = Location\nDatePicker.Dates = Dates\n\nexport default DatePicker\n","// React\nimport React, { Fragment, useMemo } from 'react'\nimport { compose } from 'redux'\n\n// Components\nimport BDatePicker, { HostStyles } from './styles-next'\n\n// Libraries\nimport { faCalendar as farCalendar } from '@fortawesome/pro-regular-svg-icons'\n\n// Hooks\nimport { useOrm, shallowEqual } from 'shared/utils/useOrm'\nimport { useOpeningHours } from 'shared/utils/useOpeningHours'\nimport { useSettings } from 'shared/utils/useSettings'\nimport { useTranslation } from 'shared/utils/useTranslation'\nimport { useDatePicker } from './hooks'\nimport { useSelector } from 'react-redux'\n\n// Shared\nimport withStore from 'shop-components/utils/withStore'\nimport withTheme from 'shop-components/utils/withTheme'\nimport { Format as FormatUtils } from 'back_office/v2/utils/utils'\nimport { isLocationInputEnabled, isDaySelectable, isTimeSelectable } from 'ui/components/Picker/utils'\n\nconst getLabelKey = (pricingEnabled, availabilityEnabled) => {\n if (pricingEnabled && availabilityEnabled) {\n return 'user.store.view_prices_and_availability'\n }\n\n if (pricingEnabled && !availabilityEnabled) {\n return 'user.store.view_prices'\n }\n\n if (!pricingEnabled && availabilityEnabled) {\n return 'user.store.view_availability'\n }\n}\n\nconst ButtonNext = () => {\n const openingHours = useOpeningHours()\n\n const cartId = useSelector((state) => state.client.cartId)\n\n const cart = useOrm('carts', (carts) => {\n return carts.getById(cartId || window.booqableOptions.cart?.id)\n })\n const locations = useOrm('locations', (locations) => {\n return {\n count: locations.size(),\n start: locations.getById(cart?.start_location_id ?? window.booqableOptions.cart?.startLocationId),\n stop: locations.getById(cart?.stop_location_id ?? window.booqableOptions.cart?.stopLocationId)\n }\n }, shallowEqual)\n\n const useTimes = useSettings('store.use_times')\n const useAMOrPM = useSettings('dates.use_am_pm')\n const isPricingEnabled = useSettings('pricing.enabled')\n const isAvailabilityEnabled = useSettings('store.use_availability')\n\n const { toggle } = useDatePicker()\n\n const dates = {\n start: cart?.starts_at ?? window.booqableOptions.cart?.from,\n stop: cart?.stops_at ?? window.booqableOptions.cart?.till\n }\n\n const isDelivery = cart?.data?.fulfillment_type === 'delivery'\n\n const isStartValid = useMemo(\n () =>\n isDaySelectable({\n type: 'start',\n openingHours,\n date: dates.start,\n values: {\n starts_at: dates.start,\n stops_at: dates.stop\n }\n }) &&\n isTimeSelectable({\n type: 'start',\n openingHours,\n date: dates.start,\n values: {\n starts_at: dates.start,\n stops_at: dates.stop\n }\n }),\n [dates.start, dates.stop, openingHours]\n )\n\n const isStopValid = useMemo(\n () =>\n isDaySelectable({\n type: 'stop',\n openingHours,\n date: dates.stop,\n values: {\n starts_at: dates.start,\n stops_at: dates.stop\n }\n }) &&\n isTimeSelectable({\n type: 'stop',\n openingHours,\n date: dates.stop,\n values: {\n starts_at: dates.start,\n stops_at: dates.stop\n }\n }),\n [dates.start, dates.stop, openingHours]\n )\n\n const { t } = useTranslation('user')\n\n const hasLocations = locations.count > 1 && (isLocationInputEnabled('start') || isLocationInputEnabled('stop'))\n const hasData = hasLocations ?\n !!dates.start && !!dates.stop && !!locations.start && !!locations.stop :\n !!dates.start && !!dates.stop\n\n let timeFormat = ''\n\n if (useTimes) {\n timeFormat = useAMOrPM ? ' hh:mm A' : ' HH:mm'\n }\n\n const labelKey = getLabelKey(isPricingEnabled, isAvailabilityEnabled)\n\n if (!cart) return null\n\n if (!hasData) {\n return (\n \n \n \n toggle(true)}>\n \n \n {t('user.store.select_a_period')}\n {labelKey && ; {t(labelKey)}}\n \n \n \n \n )\n }\n\n return (\n \n \n \n toggle(true)}>\n {hasLocations && !isDelivery && (\n \n {locations.start?.name ?? t('user.store.start_location')}\n \n )}\n \n {dates.start && (\n \n {FormatUtils.date(dates.start, 'MMM D[,] YYYY')}\n {useTimes && FormatUtils.date(dates.start, timeFormat)}\n \n )}\n  - \n {dates.stop && (\n \n {FormatUtils.date(dates.stop, 'MMM D[,] YYYY')}\n {useTimes && FormatUtils.date(dates.stop, timeFormat)}\n \n )}\n \n \n \n \n )\n}\n\nconst decoratedComponent = compose(\n withStore,\n withTheme\n)(ButtonNext)\n\nexport default decoratedComponent\n","// React\nimport React from 'react'\nimport PropTypes from 'prop-types'\n\n// Components\nimport Button from './Button'\nimport ButtonNext from './ButtonNext'\n\n// Shared\nimport registerCustomElement from 'shop-components/utils/registerCustomElement'\n\nconst DatePicker = ({ version }) => {\n return version === 'next' ? : \n \n )}\n \n )}\n {lines.size() === 0 && showPoweredBy && (\n \n \n \n )}\n \n )\n}\n\nLines.displayName = 'Lines'\nLines.propTypes = {\n hasDates: PropTypes.bool,\n cannotCheckout: PropTypes.bool,\n lines: PropTypes.object,\n toggleCart: PropTypes.func,\n showPoweredBy: PropTypes.bool,\n loading: PropTypes.bool,\n t: PropTypes.func\n}\n\nconst mapStateToProps = (state, props) => {\n const { cartOpen } = state.client\n\n return {\n cartOpen,\n lines: state.orm.lines.getAll({ id: props.cart?.lines }).filter(({ product_type: type }) => type !== 'service'),\n showPoweredBy: state.settings.get('store.show_powered_by')\n }\n}\n\nexport default compose(\n withTranslation('user'),\n reduxConnect(mapStateToProps)\n)(Lines)\n","import styled from 'styled-components'\nimport { size } from 'ui/themes/utils'\n\nimport Icon from 'ui/blocks/Icon'\n\nexport const Period = styled.div`\n cursor: pointer;\n\n ${Icon} {\n font-size: 12px;\n margin: 0 ${size('margin', 'xs')};\n\n &:last-child {\n margin-right: 0;\n }\n }\n`\n\nexport const Details = styled.div`\n display: flex;\n flex-flow: row nowrap;\n\n align-items: center;\n\n gap: ${size('margin', 'sm')};\n\n font-size: 14px;\n text-align: left;\n`\n\nexport const Detail = styled.div`\n flex: 1;\n\n &:last-child {\n text-align: right;\n }\n`\n\nexport const Location = styled.p`\n font-size: 12px !important;\n line-height: 16px;\n font-weight: 400 !important;\n\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n`\n\nexport const DateTime = styled.p`\n font-size: 13px !important;\n line-height: 16px;\n font-weight: 600 !important;\n\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n &:first-letter {\n text-transform: uppercase;\n }\n`\n\nexport const ChoosePeriod = styled.p`\n width: 100%;\n`\n\nexport const Dates = styled.div`\n width: calc(100% - var(--minicart-padding) * 2);\n\n padding: 14px !important;\n\n font-size: 12px !important;\n line-height: 16px !important;\n text-align: center;\n\n background: rgba(0, 0, 0, 0.16);\n border-radius: 8px;\n`\n\nconst DatesBase = styled.div`\n position: relative;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n padding-bottom: var(--minicart-padding);\n`\n\nexport const WithDates = styled(DatesBase)`\n ${Icon} {\n line-height: 16px;\n align-self: flex-start;\n\n &:last-child {\n position: absolute;\n\n top: 50%;\n right: ${size('padding', 'md')};\n\n transform: translateY(-50%);\n }\n }\n`\n\nexport const NoDates = styled(DatesBase)`\n ${Icon} {\n &:last-child {\n position: absolute;\n\n top: 50%;\n right: ${size('padding', 'md')};\n\n transform: translateY(-50%);\n }\n }\n`\n\nexport const Placeholder = styled.p`\n font-size: 14px !important;\n`\n\nPeriod.Dates = Dates\nPeriod.Details = Details\nPeriod.Detail = Detail\nPeriod.Location = Location\nPeriod.DateTime = DateTime\nPeriod.NoDates = NoDates\nPeriod.WithDates = WithDates\nPeriod.ChoosePeriod = ChoosePeriod\nPeriod.Placeholder = Placeholder\n\nexport default Period\n","// React\nimport React, { useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport BPeriod from '../styles/Period'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faArrowRight as farArrowRight } from '@fortawesome/pro-regular-svg-icons'\n\n// Libraries\nimport { withTranslation } from 'shared/utils/withTranslation'\n\n// Shared\n\nimport Format from 'shared/utils/format'\nimport ClientActions from 'store/v2/redux/actions/client'\n\nexport const Period = ({\n autoOpenedModal,\n onAutoModal,\n hasDates,\n open,\n modalOpen,\n openDatePicker,\n cart,\n locations,\n useTimes,\n t,\n timeFormat\n}) => {\n useEffect(() => {\n if (!autoOpenedModal && open && !hasDates && !modalOpen) {\n onAutoModal(() => {\n openDatePicker()\n })\n }\n }, [autoOpenedModal, open, hasDates, modalOpen])\n\n const handleOpenModal = () => {\n openDatePicker()\n }\n\n const hasLocations = locations.size() > 1\n\n return (\n \n {hasDates && (\n \n \n \n \n \n {Format.date(cart?.starts_at, 'date')}\n {useTimes && `, ${Format.date(cart?.starts_at, timeFormat)}`}\n \n {hasLocations && (\n \n {cart?.start_location_id ? locations.getById(cart.start_location_id)?.name : null}\n \n )}\n \n \n \n \n {Format.date(cart?.stops_at, 'date')}\n {useTimes && `, ${Format.date(cart?.stops_at, timeFormat)}`}\n \n {hasLocations && (\n \n {cart?.stop_location_id ? locations.getById(cart.stop_location_id)?.name : null}\n \n )}\n \n \n \n \n )}\n {!hasDates && (\n \n \n {t('user.store.select_a_period')}\n \n \n )}\n \n )\n}\n\nPeriod.displayName = 'Period'\n\nPeriod.propTypes = {\n cart: PropTypes.object,\n hasDates: PropTypes.bool,\n useTimes: PropTypes.bool,\n timeFormat: PropTypes.string,\n locations: PropTypes.object,\n openDatePicker: PropTypes.func,\n onAutoModal: PropTypes.func,\n autoOpenedModal: PropTypes.bool,\n open: PropTypes.bool,\n modalOpen: PropTypes.bool,\n t: PropTypes.func\n}\n\nconst mapStateToProps = (state, props) => {\n let timeFormat\n\n if (state.settings.get('dates.use_am_pm')) {\n timeFormat = 'hh:mm A'\n } else {\n timeFormat = 'HH:mm'\n }\n\n return {\n locale: state.client.locale,\n timeFormat,\n useTimes: state.settings.get('store.use_times'),\n open: state.client.cartOpen,\n modalOpen: state.client.modalPickerOpen\n }\n}\n\nconst mapDispatchToProps = (dispatch, props) => {\n return {\n openDatePicker: () => ClientActions.toggleModalPicker(true)\n }\n}\n\nexport default compose(withTranslation('user'), reduxConnect(mapStateToProps, mapDispatchToProps))(Period)\n","import styled, { css } from 'styled-components'\nimport { size } from 'ui/themes/utils'\n\nexport const Services = styled.div`\n padding: 0 var(--minicart-padding);\n padding-bottom: 12px;\n margin-bottom: 16px;\n\n border-bottom: 1px solid var(--minicart-border-color);\n\n color: var(--minicart-typo-color);\n\n font-size: var(--minicart-font-size);\n\n height: ${({ open, headerHeight }) => open ?\n css`150px` :\n css`${headerHeight}px`\n };\n max-height: 150px;\n\n overflow: ${({ open }) => open ? 'auto' : 'hidden'};\n position: relative;\n\n transition: height 0.3s ease, max-height 0.3s ease;\n`\n\nexport const Header = styled.div`\n display: grid;\n grid-template-columns: 1fr repeat(2, max-content);\n gap: ${size('margin', 'xs')};\n\n position: sticky;\n top: 0;\n left: 0;\n\n padding-bottom: var(--minicart-padding);\n background-image: ${({ open }) => css`linear-gradient(\n to bottom,\n var(--minicart-background-color) 60%,\n color-mix(in srgb, var(--minicart-background-color) ${open ? 0 : 100}%, transparent)\n )`};\n\n align-items: center;\n justify-content: space-between;\n\n font-size: var(--minicart-font-size);\n\n cursor: pointer;\n`\n\nexport const Title = styled.span``\n\nexport const Total = styled.span`\n font-weight: var(--minicart-font-weight-bold);\n`\n\nexport const Service = styled.div`\n display: flex;\n align-items: center;\n\n label {\n margin: 0;\n }\n\n & > span {\n margin-right: 0.9em;\n cursor: pointer;\n }\n\n & > span:last-child {\n margin-left: auto;\n margin-right: 0;\n\n font-weight: var(--minicart-font-weight-bold);\n\n cursor: default;\n }\n\n &:not(:last-child) {\n margin-bottom: 0.7em;\n }\n`\n\nServices.Header = Header\nServices.Service = Service\nServices.Title = Title\nServices.Total = Total\n\nexport default Services\n","// React\nimport React, { useState, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Libraries\n\n// Components\nimport BServices from 'shop-components/components/MiniCart/styles/Services'\nimport Checkbox from 'ui/components/Checkbox'\nimport ProductPrice from 'store/v2/react/components/product_price'\n\n// Shared\nimport cartActions from 'store/v2/redux/actions/cart'\nimport { triggerUserFrameworkBookEvent } from 'shared/utils/userFrameworkEvents'\n\nexport const Service = ({ inCart, toggleService, service, line, hasPrice }) => {\n const [checked, setChecked] = useState(false)\n const [loading, setLoading] = useState(false)\n\n useEffect(() => {\n setChecked(inCart)\n }, [inCart])\n\n const handleChangeService = () => {\n if (loading) return\n\n const value = !checked\n\n setChecked((prev) => !prev)\n setLoading(true)\n\n toggleService(value).then(() => {\n setChecked(inCart)\n setLoading(false)\n })\n }\n\n const renderPrice = () => {\n return (\n \n )\n }\n\n return (\n \n \n \n \n {service.name}\n {hasPrice && {renderPrice()}}\n \n )\n}\n\nService.displayName = 'Service'\nService.propTypes = {\n service: PropTypes.object.isRequired,\n line: PropTypes.object,\n inCart: PropTypes.bool.isRequired,\n toggleService: PropTypes.func.isRequired,\n hasPrice: PropTypes.bool\n}\n\nconst mapStateToProps = (state, props) => {\n const hasPrice =\n props.service &&\n props.service.price_in_cents >= 0 &&\n props.service.price_in_cents !== null &&\n props.service.price_type !== 'none'\n\n return {\n line: props.lines.getAll({ item_id: props.service.id }).reverse().first(),\n hasPrice\n }\n}\n\nconst mapDispatchToProps = (state, props) => {\n const book = (quantity) => {\n return cartActions\n .book({\n item_id: props.service.id,\n quantity,\n type: 'set'\n })\n .then((response) => {\n const quantityChange = quantity === 0 ? -1 : 1\n\n triggerUserFrameworkBookEvent(props.service.id, quantityChange)\n })\n }\n\n return {\n toggleService: (value) => {\n if (value) {\n return book(1)\n } else {\n return book(0)\n }\n }\n }\n}\n\nexport default reduxConnect(mapStateToProps, mapDispatchToProps)(Service)\n","// React\nimport React, { useState, useEffect, useRef } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Libraries\nimport _intersection from 'lodash/intersection'\n\n// Components\nimport BServices from 'shop-components/components/MiniCart/styles/Services'\nimport Service from './Service'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faChevronUp as farChevronUp, faChevronDown as farChevronDown } from '@fortawesome/pro-regular-svg-icons'\n\n// Shared\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport { Format as FormatUtils } from 'back_office/v2/utils/utils'\nimport ProductGroupActions from 'store/v2/redux/actions/product_group'\n\nexport const Services = ({ cart, lines, currency, services, servicesPrice, cartItemIds, t }) => {\n const prevCartRef = useRef(cart)\n const headerElementRef = useRef(null)\n\n const [open, setOpen] = useState(true)\n\n useEffect(() => {\n ProductGroupActions.fetchServices({ cart_id: cart.id })\n }, [cart.id])\n\n useEffect(() => {\n const previousCart = prevCartRef.current\n const newCart = !previousCart && cart\n const fromChanged = cart && !newCart ? previousCart.starts_at !== cart.starts_at : false\n const tillChanged = cart && !newCart ? previousCart.stops_at !== cart.stops_at : false\n\n if (cart && (newCart || fromChanged || tillChanged)) {\n ProductGroupActions.fetchServices({ cart_id: cart ? cart.id : undefined })\n }\n\n prevCartRef.current = cart\n }, [cart])\n\n const isServiceInCart = (serviceId) => {\n return cartItemIds.includes(serviceId)\n }\n\n const handleToggleOpen = () => {\n setOpen((prev) => !prev)\n }\n\n const renderServices = () => {\n return services.map((service) => (\n \n ))\n }\n\n if (!services?.size()) {\n return null\n }\n\n return (\n \n \n {t('user.store.additional_services')}\n {FormatUtils.money(servicesPrice, currency)}\n \n \n {renderServices()}\n \n )\n}\n\nServices.displayName = 'ServiceLines'\nServices.propTypes = {\n cart: PropTypes.object,\n currency: PropTypes.object,\n lines: PropTypes.object,\n services: PropTypes.object,\n servicesPrice: PropTypes.number,\n cartItemIds: PropTypes.object,\n t: PropTypes.func\n}\n\nconst mapStateToProps = (state, props) => {\n const currency = state.client.currency.toJS()\n const lines = state.orm.lines.getAll({ id: props.cart?.lines })\n const cartItemIds = lines.map((line) => line.item_id)\n const services = state.orm.product_groups.getAll({ product_type: 'service', show_in_store: true })\n const enabledServices = state.orm.products\n .getAll({ product_type: 'service', product_group_id: services.pluck('id') })\n .sortBy((service) => services.getById(service.product_group_id).sorting_weight)\n\n const selectedServices = lines.getAll({ item_id: _intersection(cartItemIds.toArray(), enabledServices.pluck('id')) })\n const servicesPrice = selectedServices.toArray().reduce((sum, { display_price_in_cents: price }) => sum + price, 0)\n\n return {\n currency,\n lines,\n services: enabledServices,\n servicesPrice,\n cartItemIds\n }\n}\n\nexport default compose(withTranslation('user'), reduxConnect(mapStateToProps))(Services)\n","// Hooks\nimport { useOrm } from 'shared/utils/useOrm'\nimport { useSettings } from 'shared/utils/useSettings'\nimport { useSelector } from 'react-redux'\n\n// Shared\nimport previewUrlComposer from 'shared/utils/previewUrlComposer'\n\nexport const useCart = () => {\n const cartId = useSelector((state) => state.client.cartId)\n const companySlug = useSelector((state) => state.client.getIn(['company', 'slug']))\n\n const cart = useOrm('carts', (carts) => carts.getById(cartId))\n\n const taxStrategy = useSettings('pricing.tax_strategy')\n const showPrices = useSettings('store.use_prices')\n\n const currency = useSelector((state) => state.client.currency)\n\n const isOverdue = useSelector((state) => state.client.cartOverdue)\n const isEmpty = useOrm('lines', (lines) => {\n return lines.getAll({\n id: cart?.lines,\n product_type: ['rental', 'consumable', 'bundle']\n }).size() === 0\n })\n\n const searchParams = new URLSearchParams(window.location.search)\n const viewCartHref = window.booqableOptions.preview ?\n previewUrlComposer({ slug: companySlug, themeId: searchParams.get('theme_id'), key: 'templates/cart.json' }) :\n cart?.cart_url\n\n let totalPriceAttribute\n\n if (taxStrategy === 'inclusive') {\n totalPriceAttribute = 'grand_total_with_tax_in_cents'\n } else {\n totalPriceAttribute = 'grand_total_in_cents'\n }\n\n return {\n cart,\n totalPriceAttribute,\n showPrices,\n taxStrategy,\n currency: currency?.toJS(),\n isOverdue,\n isEmpty,\n viewCartHref\n }\n}\n","// React\nimport React, { Fragment, useState, useCallback, useEffect } from 'react'\nimport { compose } from 'redux'\n\n// Components\nimport BMiniCart, { HostStyles } from 'shop-components/components/MiniCart/styles'\nimport Lines from 'shop-components/components/MiniCart/components/Lines'\nimport Period from 'shop-components/components/MiniCart/components/Period'\nimport Services from 'shop-components/components/MiniCart/components/Services'\nimport { PoweredBy } from 'shop-components/components/PoweredBy'\n\n// Libraries\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n faTimes as farTimes,\n faTriangleExclamation as farTriangleExclamation\n} from '@fortawesome/pro-regular-svg-icons'\n\n// Hooks\nimport { useCart } from 'shop-components/utils/useCart'\nimport { useTranslation } from 'shared/utils/useTranslation'\nimport { useOrm } from 'shared/utils/useOrm'\nimport { useSelector } from 'react-redux'\nimport { useSettings } from 'shared/utils/useSettings'\nimport { useIsMobile } from 'shared/utils/useIsMobile'\n\n// Shared\nimport registerCustomElement from 'shop-components/utils/registerCustomElement'\nimport withStore from 'shop-components/utils/withStore'\nimport withTheme from 'shop-components/utils/withTheme'\nimport ClientActions from 'store/v2/redux/actions/client'\nimport LineActions from 'back_office/v2/redux/actions/line_actions'\nimport Format from 'shared/utils/format'\n\nexport const MiniCart = () => {\n let cannotCheckout = false\n\n const isMobile = useIsMobile()\n\n const [autoOpenedModal, setAutoOpenedModal] = useState(false)\n const [isLoading, setIsLoading] = useState(true)\n\n const { cart, totalPriceAttribute, showPrices, isOverdue, viewCartHref } = useCart()\n\n const currency = useSelector((state) => state.client.currency)?.toJS()\n\n const locations = useOrm('locations', (locations) => {\n return locations.getAll().sort('name')\n })\n const lines = useOrm('lines', (lines) => {\n return lines.getAll({ id: cart?.lines }).filter(({ product_type: type }) => type !== 'service')\n })\n const unavailableLines = useOrm('lines', (lines) => {\n return lines\n .getAll({\n id: cart?.lines,\n can_checkout: false\n })\n .filter((line) => line.line_type !== 'delivery_rate')\n })\n\n const showPoweredBy = useSettings('store.show_powered_by')\n const useAvailability = useSettings('store.use_availability')\n\n const isCartOpen = useSelector((state) => state.client.cartOpen)\n const isCheckingOut = useSelector((state) => state.client.checkingOut)\n\n const { t } = useTranslation('user')\n\n useEffect(() => {\n const fetchLines = async (cartId) => {\n return LineActions.fetchAll({\n apiVersion: 'boomerang',\n include: [\n 'item',\n 'item.photo',\n 'item.bundle_items',\n 'item.bundle_items.product',\n 'item.bundle_items.product.photo'\n ],\n filter: {\n owner_id: cartId\n }\n })\n }\n\n if (cart?.id) {\n fetchLines(cart.id).finally(() => {\n setIsLoading(false)\n })\n }\n }, [cart?.id])\n\n const hasDates = !!(cart?.starts_at && cart?.stops_at)\n\n if (useAvailability) {\n cannotCheckout = unavailableLines.size() > 0\n }\n\n const isCheckoutButtonValid = !!(cart?.lines.length && hasDates && !cannotCheckout && !isOverdue)\n\n // Needs to live in parent state as Period gets unmounted\n // on some transitions losing state\n const onAutoModal = useCallback(\n (callback) => {\n setAutoOpenedModal(true)\n callback?.()\n },\n [setAutoOpenedModal]\n )\n\n const setCheckingOut = (e) => {\n e.preventDefault()\n\n if (ClientActions.evaluateCartOverdue()) return\n\n ClientActions.setCheckingOut()\n }\n\n const toggleCart = (cartOpen) => {\n return ClientActions.toggleCart(cartOpen)\n }\n\n const viewCart = () => {\n window.location = window.Booqable.decorateLinkForTracking(viewCartHref)\n }\n\n return (\n \n \n \n \n \n
    {t('user.store.cart_title')}
    \n \n \n \n
    \n \n
    \n \n \n \n {lines?.size() > 0 && (\n \n \n {showPrices && (\n \n \n {t('user.store.subtotal')}\n {Format.money(cart?.get(totalPriceAttribute), currency)}\n \n\n {cart?.get('deposit_in_cents') > 0 && (\n \n {t('user.store.security_deposit')}\n {Format.money(cart.get('deposit_in_cents'), currency)}\n \n )}\n\n {isOverdue && (\n \n \n {t('user.checkout.dates_in_past')}\n \n )}\n \n )}\n \n {viewCartHref && (\n \n {t('user.store.view_cart')}\n \n )}\n \n {t('user.store.checkout')}\n \n \n {showPoweredBy && (\n \n \n \n )}\n \n )}\n
    \n
    \n )\n}\n\nregisterCustomElement('bq-minicart', compose(withStore, withTheme)(MiniCart))\n\nexport default MiniCart\n","// React\nimport React from 'react'\nimport PropTypes from 'prop-types'\n\n// Components\nimport Img from 'ui/elements/Img'\nimport FocalImage from 'ui/components/FocalImage'\n\n// Shared\nimport { optimizeImageUrl } from 'shared/utils/optimizeImageUrl'\n\nconst OptimizedImage = ({ focal, src, ...otherProps }) => {\n const optimizedSrc = optimizeImageUrl(src, { ...otherProps })\n\n if (focal) {\n return \n }\n\n return \n}\n\nOptimizedImage.displayName = 'OptimizedImage'\n\nOptimizedImage.propTypes = {\n src: PropTypes.string.isRequired,\n width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n quality: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n format: PropTypes.oneOf(['jpg', 'jpeg', 'png', 'webp']),\n focal: PropTypes.shape({\n x: PropTypes.any,\n y: PropTypes.any\n })\n}\n\nexport default OptimizedImage\n","import styled, { css, createGlobalStyle } from 'styled-components'\nimport { color } from 'ui/themes/utils'\n\nimport FocalImage from 'ui/blocks/FocalImage'\nimport OptimizedImage from './components/OptimizedImage'\n\nexport const HostStyles = createGlobalStyle`\n :host {\n /* Gallery */\n --product-gallery-direction: column;\n --product-gallery-gap: 12px;\n\n /* Large Preview */\n --product-gallery-preview-gap: 8px;\n --product-gallery-preview-border-radius: 0;\n\n /* Controls */\n --product-gallery-control-size: 40px;\n --product-gallery-control-padding: 0 10px;\n --product-gallery-control-border-radius: 6px;\n --product-gallery-control-background-color: ${color('white')}66;\n --product-gallery-control-icon-size: 20px;\n --product-gallery-control-icon-color: var(--color-typo, ${color('black')});\n --product-gallery-control-filter: blur(3px);\n\n /* Thumbnails */\n --product-gallery-thumbnail-direction: row;\n --product-gallery-thumbnail-border-radius: 6px;\n --product-gallery-thumbnail-border: 1px solid var(--color-border, ${color('Misc/Divider')});\n --product-gallery-active-thumbnail-border: 1px solid var(--color-accent-background, ${color('branding')});\n --product-gallery-thumbnail-size: 64px;\n }\n\n * {\n box-sizing: border-box;\n }\n`\n\nconst ProductGallery = styled.div`\n display: flex;\n flex-direction: var(--product-gallery-direction);\n\n gap: var(--product-gallery-gap);\n`\n\nconst Wrapper = styled.div`\n position: relative;\n`\n\nconst Inner = styled.div`\n display: flex;\n align-items: center;\n\n overflow-x: auto;\n overflow-y: hidden;\n\n scroll-snap-type: x mandatory;\n\n gap: var(--horizontal-padding, 16px);\n\n position: relative;\n\n -ms-overflow-style: none;\n scrollbar-width: none;\n\n -webkit-overflow-scrolling: touch;\n\n &::-webkit-scrollbar {\n display: none;\n }\n\n ${({ noGap }) => noGap && css`\n gap: 0;\n `}\n`\n\nconst Item = styled.div`\n scroll-snap-align: start end;\n scroll-snap-stop: always;\n\n min-width: 100%;\n width: 100%;\n`\n\nconst Image = styled(OptimizedImage)`\n display: block;\n\n width: 100%;\n\n border-radius: var(--product-gallery-preview-border-radius);\n`\n\nconst Controls = styled.div`\n position: absolute;\n\n top: 50%;\n left: 0;\n right: 0;\n transform: translateY(-50%);\n\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n padding: var(--product-gallery-control-padding);\n\n pointer-events: none;\n\n z-index: 1000;\n`\n\nconst Control = styled.button`\n width: var(--product-gallery-control-size);\n height: var(--product-gallery-control-size);\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n border: none;\n border-radius: var(--product-gallery-control-border-radius);\n\n cursor: pointer;\n\n background-color: var(--product-gallery-control-background-color);\n backdrop-filter: var(--product-gallery-control-filter);\n\n pointer-events: all;\n\n svg {\n width: var(--product-gallery-control-icon-size);\n height: var(--product-gallery-control-icon-size);\n\n fill: var(--product-gallery-control-icon-color);\n color: var(--product-gallery-control-icon-color);\n }\n\n ${({ hidden }) => hidden && css`\n visibility: hidden;\n\n pointer-events: none;\n `}\n\n ${({ small }) => small && css`\n width: calc(var(--product-gallery-control-size) / 2);\n height: calc(var(--product-gallery-control-size) / 2);\n\n svg {\n width: calc(var(--product-gallery-control-icon-size) / 2);\n height: calc(var(--product-gallery-control-icon-size) / 2);\n }\n `}\n`\n\nconst ThumbnailsInner = styled.div`\n display: flex;\n align-items: center;\n\n flex-direction: var(--product-gallery-thumbnail-direction);\n\n gap: var(--product-gallery-preview-gap);\n`\n\nconst Thumbnail = styled.div`\n ${FocalImage} {\n width: var(--product-gallery-thumbnail-size);\n height: var(--product-gallery-thumbnail-size);\n\n border-radius: var(--product-gallery-thumbnail-border-radius);\n border: var(--product-gallery-thumbnail-border);\n\n cursor: pointer;\n\n transition: border 0.2s ease-in-out;\n\n ${({ isActive }) => isActive && css`\n border: var(--product-gallery-active-thumbnail-border);\n `}\n }\n`\n\nProductGallery.Wrapper = Wrapper\nProductGallery.Inner = Inner\nProductGallery.Item = Item\nProductGallery.Image = Image\nProductGallery.Controls = Controls\nProductGallery.Control = Control\nProductGallery.ThumbnailsInner = ThumbnailsInner\nProductGallery.Thumbnail = Thumbnail\n\nexport default ProductGallery\n","import request from './'\n\nexport const getPhoto = (id) => {\n return request({\n method: 'GET',\n url: `/api/boomerang/photos/${id}`\n })\n}\n\nexport const getPhotos = ({ ownerId }) => {\n return request({\n method: 'GET',\n url: '/api/boomerang/photos',\n params: {\n filter: {\n owner_id: ownerId\n }\n }\n })\n}\n","import { getPhoto, getPhotos } from 'shop-components/api/photo'\n\nexport const fetchPhoto = (id) => (dispatch) => {\n dispatch({\n type: 'PRODUCT_IMAGES_FETCH_START'\n })\n\n getPhoto(id)\n .then(({ data: { data } }) => {\n const photo = {\n id: data.id,\n ...data.attributes\n }\n\n dispatch({\n type: 'PRODUCT_IMAGES_FETCH_SUCCESS',\n payload: { records: [photo] }\n })\n })\n .catch(() => {\n dispatch({\n type: 'PRODUCT_IMAGES_FETCH_ERROR'\n })\n })\n}\n\nexport const fetchPhotos = (ownerId) => (dispatch) => {\n dispatch({\n type: 'PRODUCT_IMAGES_FETCH_START'\n })\n\n getPhotos({ ownerId })\n .then(({ data: { data } }) => {\n const records = data.map(({ id, attributes }) => ({\n id,\n ...attributes\n }))\n\n dispatch({\n type: 'PRODUCT_IMAGES_FETCH_SUCCESS',\n payload: { records }\n })\n })\n .catch(() => {\n dispatch({\n type: 'PRODUCT_IMAGES_FETCH_ERROR'\n })\n })\n}\n","// React\nimport React, { Fragment, useEffect, useRef, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport BProductGallery, { HostStyles } from './styles'\nimport OptimizedImage from './components/OptimizedImage'\n\n// Libraries\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faChevronLeft as farChevronLeft, faChevronRight as farChevronRight } from '@fortawesome/pro-regular-svg-icons'\n\n// Shared\nimport { fetchPhotos } from 'shop-components/redux/actions/photo'\nimport withStore from 'shop-components/utils/withStore'\nimport withTheme from 'shop-components/utils/withTheme'\nimport registerCustomElement from 'shop-components/utils/registerCustomElement'\n\nconst ProductGallery = ({\n item,\n photos,\n variationId,\n variations,\n fetchPhotos,\n enableThumbnails = 'true',\n enableControls = 'true',\n infiniteScroll = 'true'\n}) => {\n const listenerReady = useRef(false)\n const innerRef = useRef()\n const thumbnailsWrapperRef = useRef()\n const thumbnailsInnerRef = useRef()\n\n const [currentIndex, setIndex] = useState(variationId && variations ? null : 0)\n\n const withInfiniteScroll = infiniteScroll === 'true'\n const withControls = enableControls === 'true'\n const withThumbnails = enableThumbnails === 'true'\n\n useEffect(() => {\n if (!item?.id) return\n\n fetchPhotos()\n }, [item?.id])\n\n useEffect(() => {\n if (photos?.length && !listenerReady.current) {\n // Reset scroll offset on gallery init to prevent invalid index to be calculated\n innerRef.current.scrollLeft = 0\n\n const handleInnerScroll = () => {\n const width = innerRef.current.offsetWidth\n const offset = innerRef.current.scrollLeft\n const index = Math.round(offset / width)\n\n handleSnapToThumbnail(index)\n\n setIndex(index)\n }\n\n innerRef.current?.addEventListener('scroll', handleInnerScroll)\n innerRef.current?.addEventListener('touchmove', handleInnerScroll)\n\n listenerReady.current = true\n\n return () => {\n innerRef.current?.removeEventListener('scroll', handleInnerScroll)\n innerRef.current?.removeEventListener('touchmove', handleInnerScroll)\n\n listenerReady.current = false\n }\n }\n }, [photos])\n\n useEffect(() => {\n if (variationId && variations) {\n const currentPhotoId = variations.find((variation) => variation.id === variationId)?.photo_id\n const currentPhotoIndex = photos.findIndex((photo) => photo.id === currentPhotoId)\n\n if (currentPhotoIndex > -1) {\n handleSnapToPhoto(currentPhotoIndex)\n }\n }\n }, [variationId, variations, photos])\n\n const handleSnapToThumbnail = (index) => {\n const width = thumbnailsInnerRef.current?.offsetWidth / photos.length\n const height = thumbnailsInnerRef.current?.offsetHeight / photos.length\n\n thumbnailsWrapperRef.current?.scrollTo({\n left: width * index - width,\n top: height * index - height,\n behavior: 'smooth'\n })\n }\n\n const handleSnapToPhoto = (index, behavior = 'smooth') => {\n const width = innerRef.current?.offsetWidth\n const offset = width * index\n\n innerRef.current?.scrollTo({\n left: offset,\n behavior\n })\n\n handleSnapToThumbnail(index)\n\n setIndex(index)\n }\n\n const handleSnapToNextPhoto = () => {\n if (currentIndex < photos.length - 1) {\n handleSnapToPhoto(currentIndex + 1)\n }\n\n if (currentIndex === photos.length - 1 && withInfiniteScroll) {\n handleSnapToPhoto(0)\n }\n }\n\n const handleSnapToPrevPhoto = () => {\n if (currentIndex > 0) {\n handleSnapToPhoto(currentIndex - 1)\n }\n\n if (currentIndex === 0 && withInfiniteScroll) {\n handleSnapToPhoto(photos.length - 1)\n }\n }\n\n return (\n \n \n {!!photos?.length && (\n \n \n \n {photos?.map((photo) => {\n return (\n \n \n \n )\n })}\n \n {withControls && photos?.length > 1 && (\n \n \n \n \n \n \n \n \n )}\n \n {withThumbnails && photos?.length > 1 && (\n \n \n \n {photos\n .filter(({ url }) => !!url)\n .map((photo, index) => {\n const isActive = currentIndex === index\n\n return (\n handleSnapToPhoto(index)}\n >\n \n \n )\n })}\n \n \n \n )}\n \n )}\n \n )\n}\n\nProductGallery.propTypes = {\n item: PropTypes.object,\n photos: PropTypes.array,\n variationId: PropTypes.string,\n variations: PropTypes.array,\n fetchPhotos: PropTypes.func,\n enableThumbnails: PropTypes.oneOf(['true', 'false']),\n enableControls: PropTypes.oneOf(['true', 'false']),\n infiniteScroll: PropTypes.oneOf(['true', 'false'])\n}\n\nconst mapStateToProps = (state, props) => {\n const item = state.items.records[props.productId]\n\n return {\n item,\n photos: item?.photos,\n variationId: item?.variation_id,\n variations: item?.products\n }\n}\n\nconst mapDispatchToProps = (dispatch, props) => ({\n fetchPhotos: () => dispatch(fetchPhotos(props.productId))\n})\n\nconst decoratedComponent = compose(\n withStore,\n withTheme,\n reduxConnect(mapStateToProps, mapDispatchToProps)\n)(ProductGallery)\n\nregisterCustomElement('bq-product-gallery', decoratedComponent, {\n attributes: ['product-id', 'enable-thumbnails', 'enable-controls', 'infinite-scroll']\n})\n\nexport default decoratedComponent\n","import styled, { css, createGlobalStyle } from 'styled-components'\nimport { color } from 'ui/themes/utils'\n\nimport FocalImage from 'ui/blocks/FocalImage'\n\nexport const HostStyles = createGlobalStyle`\n :host {\n --variation-select-border: 1px solid var(--color-border, ${color('Misc/Divider')});\n --variation-select-color: var(--color-typo, ${color('text')});\n --variation-select-background-color: var(--color-white, ${color('white')});\n --variation-select-font-size: 13px;\n --variation-select-font-family: var(--font-body, sans-serif);\n --variation-select-padding: 0 30px 0 10px;\n --variation-select-control-height: 38px;\n --variation-select-border-radius: 6px;\n\n --bundle-items-image-size: 50px;\n --bundle-items-image-border: 1px solid var(--color-border, ${color('Misc/Divider')});\n --bundle-items-image-border-radius: 6px;\n\n --bundle-items-cell-padding: 5px;\n\n --bundle-items-font-size: 15px;\n --bundle-items-font-family: var(--font-body, sans-serif);\n\n --bundle-items-background-color: var(--color-primary-background, ${color('white')});\n --bundle-items-color: var(--color-primary-foreground, ${color('text')});\n }\n\n * {\n box-sizing: border-box;\n }\n`\n\nconst BundleItems = styled.div`\n position: relative;\n\n background-color: var(--bundle-items-background-color);\n`\n\nconst Inner = styled.div`\n display: grid;\n grid-template-columns: max-content max-content 1fr;\n\n overflow-y: auto;\n\n ${({ height }) => height && css`\n max-height: ${height}px;\n `}\n`\n\nconst BundleItem = styled.div`\n display: contents;\n\n ${FocalImage} {\n width: var(--bundle-items-image-size);\n height: var(--bundle-items-image-size);\n\n border: var(--bundle-items-image-border);\n border-radius: var(--bundle-items-image-border-radius);\n }\n`\n\nconst BundleItemCell = styled.div`\n display: flex;\n align-items: center;\n\n padding: var(--bundle-items-cell-padding);\n\n font-size: var(--bundle-items-font-size);\n font-family: var(--bundle-items-font-family);\n\n color: var(--bundle-items-color);\n\n &:first-child {\n padding-left: 0;\n }\n\n &:last-child {\n padding-right: 0;\n }\n`\n\nconst BundleItemSelectWrapper = styled.div`\n position: relative;\n\n width: 100%;\n\n svg {\n position: absolute;\n\n color: var(--variation-select-color);\n fill: var(--variation-select-color);\n\n top: 50%;\n right: 10px;\n transform: translateY(-50%);\n\n width: 14px;\n height: 14px;\n\n pointer-events: none;\n }\n`\n\nconst BundleItemSelect = styled.select`\n border: var(--variation-select-border);\n\n color: var(--variation-select-color);\n background-color: var(--variation-select-background-color);\n\n font-size: var(--variation-select-font-size);\n font-family: var(--variation-select-font-family);\n\n padding: var(--variation-select-padding);\n\n width: 100%;\n height: var(--variation-select-control-height);\n\n border-radius: var(--variation-select-border-radius);\n\n appearance: none;\n`\n\nconst ScrollGradient = styled.div`\n position: absolute;\n\n left: 0;\n right: 0;\n\n height: 50px;\n width: 100%;\n\n z-index: 100;\n\n pointer-events: none;\n\n opacity: 0;\n\n background-image: linear-gradient(\n to bottom,\n color-mix(in srgb, var(--bundle-items-background-color) 0%, transparent) 15%,\n var(--bundle-items-background-color)\n );\n\n transition: opacity 0.15s cubic-bezier(0.18, 0.89, 0.32, 1.28);\n\n ${({ visible }) => visible && css`\n opacity: 1;\n `}\n\n ${({ side }) => {\n switch (side) {\n case 'top':\n return css`\n top: 0;\n background-image: linear-gradient(\n to top,\n color-mix(in srgb, var(--bundle-items-background-color) 0%, transparent) 15%,\n var(--bundle-items-background-color)\n );\n `\n case 'bottom':\n return css`\n bottom: 0;\n background-image: linear-gradient(\n to bottom,\n color-mix(in srgb, var(--bundle-items-background-color) 0%, transparent) 15%,\n var(--bundle-items-background-color)\n );\n `\n }\n }}\n`\n\nBundleItems.Inner = Inner\nBundleItems.BundleItem = BundleItem\nBundleItems.BundleItemCell = BundleItemCell\nBundleItems.BundleItemSelectWrapper = BundleItemSelectWrapper\nBundleItems.BundleItemSelect = BundleItemSelect\nBundleItems.ScrollGradient = ScrollGradient\n\nexport default BundleItems\n","// React\nimport React, { useState, useEffect, useCallback, memo } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Components\nimport BBundleItems from './styles'\nimport FocalImage from 'ui/components/FocalImage'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faChevronDown as farChevronDown } from '@fortawesome/pro-regular-svg-icons'\n\n// Libraries\nimport _sortBy from 'lodash/sortBy'\n\n// Shared\nimport { updateConfiguration } from 'shop-components/redux/actions/item'\nimport NO_PRODUCT_IMAGE from '@assets/images/no-product-image.png'\n\nconst getItem = (item, selected) => {\n const variation = item.product_group?.products?.find((p) => p.id === selected)\n const product = item.product_group?.products?.find((p) => p.id === item.product_id)\n const productGroup = item.product_group\n\n return variation || product || productGroup\n}\n\nconst BundleItem = ({ productId, cart, bundleItem, updateConfiguration }) => {\n const [selected, setSelected] = useState('')\n\n const item = getItem(bundleItem, selected)\n const variations = _sortBy(\n bundleItem.product_group?.products?.filter(({ archived_at: archivedAt }) => !archivedAt),\n 'sorting_weight'\n )\n const photo = variations.find((p) => p.id === selected)?.photo\n\n const handleSetSelected = useCallback(\n (id) => {\n if (cart?.id && id !== selected) {\n setSelected(id)\n updateConfiguration({ id: productId, itemId: bundleItem.id, variationId: id })\n }\n },\n [selected, productId, bundleItem.id, cart]\n )\n\n useEffect(() => {\n const defaultVariation = variations.find(({ id }) => id === bundleItem.product_id) || variations[0]\n\n if (!selected && defaultVariation?.id) {\n handleSetSelected(defaultVariation.id)\n }\n }, [bundleItem, selected, variations, handleSetSelected])\n\n return (\n \n \n \n \n {bundleItem.quantity}x\n \n {(!bundleItem.product_group.has_variations || bundleItem.product_id) && item.name}\n {bundleItem.product_group.has_variations && !bundleItem.product_id && (\n \n handleSetSelected(target.value)}\n >\n {variations.map((variation) => (\n \n ))}\n \n \n \n )}\n \n \n )\n}\n\nBundleItem.propTypes = {\n productId: PropTypes.string,\n cart: PropTypes.object,\n bundleItem: PropTypes.object,\n updateConfiguration: PropTypes.func\n}\n\nconst mapStateToProps = (state, _props) => ({\n cart: state.orm.carts.getById(state.client.cartId ?? window.booqableOptions.cart?.id)\n})\n\nconst mapDispatchToProps = (dispatch, _props) => ({\n updateConfiguration: (attributes) => dispatch(updateConfiguration(attributes))\n})\n\nconst decoratedComponent = reduxConnect(mapStateToProps, mapDispatchToProps)(BundleItem)\n\nexport default memo(decoratedComponent)\n","// React\nimport React, { Fragment, useState, useEffect, useCallback, useRef } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport Item from './Item'\nimport BBundleItems, { HostStyles } from './styles'\n\n// Shared\nimport withStore from 'shop-components/utils/withStore'\nimport withTheme from 'shop-components/utils/withTheme'\nimport registerCustomElement from 'shop-components/utils/registerCustomElement'\nimport { fetchPrice } from 'shop-components/redux/actions/price'\nimport { fetchAvailability } from 'shop-components/redux/actions/availability'\n\nconst CONTAINER_HEIGHT = 220\n\nconst BundleItems = ({ productId, items, cart, bundle, fetchPrice, fetchAvailability }) => {\n const ref = useRef()\n\n const [displayTopGradient, setDisplayTopGradient] = useState(false)\n const [displayBottomGradient, setDisplayBottomGradient] = useState(false)\n\n useEffect(() => {\n if (cart.id && bundle?.id) {\n fetchPrice({\n cartId: cart.id,\n id: bundle.id,\n configuration: bundle.configuration\n })\n }\n\n if (cart.startsAt && cart.stopsAt && cart.startLocationId) {\n fetchAvailability({\n startsAt: cart.startsAt,\n stopsAt: cart.stopsAt,\n startLocationId: cart.startLocationId,\n id: productId,\n configuration: bundle?.configuration\n })\n }\n }, [cart.id, cart.startsAt, cart.stopsAt, bundle?.configuration])\n\n useEffect(() => {\n const handleInnerScroll = () => {\n if (ref.current?.scrollTop + CONTAINER_HEIGHT >= ref.current?.scrollHeight) {\n setDisplayBottomGradient(false)\n setDisplayTopGradient(true)\n } else {\n setDisplayBottomGradient(true)\n setDisplayTopGradient(false)\n }\n }\n\n if (ref.current?.scrollHeight > CONTAINER_HEIGHT) {\n setDisplayBottomGradient(true)\n }\n\n ref.current?.addEventListener('scroll', handleInnerScroll)\n\n return () => {\n ref.current?.removeEventListener('scroll', handleInnerScroll)\n }\n }, [items])\n\n const renderBundleItem = useCallback(\n (item) => ,\n [productId]\n )\n\n return (\n \n \n {items?.length && (\n \n \n \n {items.map(renderBundleItem)}\n \n \n \n )}\n \n )\n}\n\nBundleItems.propTypes = {\n productId: PropTypes.string.isRequired,\n cart: PropTypes.object,\n bundle: PropTypes.object,\n items: PropTypes.array,\n fetchPrice: PropTypes.func,\n fetchAvailability: PropTypes.func\n}\n\nconst mapStateToProps = (state, props) => {\n const cart = state.orm.carts.getById(state.client.cartId || window.booqableOptions.cart?.id)\n const bundle = state.items.records[props.productId]\n\n return {\n cart: {\n id: cart?.id ?? window.booqableOptions.cart?.id,\n startsAt: cart?.starts_at ?? window.booqableOptions.cart?.from,\n stopsAt: cart?.stops_at ?? window.booqableOptions.cart?.till,\n startLocationId: cart?.start_location_id ?? window.booqableOptions?.startLocationId\n },\n bundle,\n items: bundle?.products\n }\n}\n\nconst mapDispatchToProps = (dispatch, props) => ({\n fetchPrice: (attributes) => dispatch(fetchPrice(attributes)),\n fetchAvailability: (attributes) => dispatch(fetchAvailability(attributes))\n})\n\nconst decoratedComponent = compose(withStore, withTheme, reduxConnect(mapStateToProps, mapDispatchToProps))(BundleItems)\n\nregisterCustomElement('bq-bundle-items', decoratedComponent, {\n attributes: ['product-id']\n})\n\nexport default decoratedComponent\n","import styled, { createGlobalStyle, css } from 'styled-components'\nimport { color } from 'ui/themes/utils'\n\nimport Skeleton from 'ui/blocks/Skeleton'\nimport FocalImage from 'ui/blocks/FocalImage'\n\nexport const HostStyles = createGlobalStyle`\n :host {\n --lines-empty-text-color: var(--color-primary-foreground, ${color('Text/Primary')});\n\n --line-border: 1px solid var(--color-border, ${color('Misc/Divider')});\n\n --line-image-size: var(--cart-line-image-size, 60px);\n --line-image-border-radius: var(--cart-line-image-border-radius, 6px);\n --line-image-border: 1px solid var(--color-border, ${color('Misc/Divider')});\n\n --line-icon-color: var(--color-primary-foreground, #0c2747);\n --line-control-border-radius: var(--cart-line-control-border-radius, 6px);\n --line-control-border: 1px solid var(--color-border, ${color('Misc/Divider')});\n --line-input-color: var(--color-primary-foreground, #0c2747);\n\n --line-availability-border: 1px solid;\n --line-availability-border-color-available: var(--color-green, ${color('Success/Base')});\n --line-availability-border-color-unavailable: var(--color-red, ${color('Danger/Base')});\n --line-availability-color-available: var(--color-green, ${color('Success/Base')});\n --line-availability-color-unavailable: var(--color-red, ${color('Danger/Base')});\n --line-availability-background-color-available: transparent;\n --line-availability-background-color-unavailable: transparent;\n\n --line-title-color: var(--color-primary-foreground, ${color('Text/Primary')});\n --line-title-font-size: 16px;\n\n --line-price-color: var(--color-primary-foreground, ${color('Text/Primary')});\n --line-price-font-size: 16px;\n\n --line-variations-color: var(--color-primary-foreground-lightened, ${color('Text/Secondary')});\n --line-variations-font-size: 14px;\n\n --line-toggle-color: var(--color-primary-foreground, ${color('branding')});\n --line-toggle-font-size: 16px;\n\n --line-bundle-item-quantity-color: var(--color-primary-foreground, ${color('Text/Secondary')});\n --line-bundle-item-quantity-font-size: 16px;\n --line-bundle-item-quantity-background: var(--color-primary-background, ${color('white')});\n\n --line-bundle-item-name-color: var(--color-primary-foreground, ${color('Text/Primary')});\n --line-bundle-item-name-font-size: 16px;\n }\n`\n\nexport const Lines = styled.div`\n display: grid;\n grid-template-columns: max-content 1fr max-content max-content;\n\n border-top: var(--line-border);\n\n * {\n box-sizing: border-box;\n }\n\n ${FocalImage} {\n width: var(--line-image-size);\n height: var(--line-image-size);\n\n border-radius: var(--line-image-border-radius);\n border: var(--line-image-border);\n }\n`\n\nexport const EmptyText = styled.h3`\n display: inline-block;\n\n color: var(--lines-empty-text-color);\n`\n\nexport const Cell = styled.div`\n padding: 20px 12px;\n\n border-bottom: var(--line-border);\n`\n\nexport const Image = styled(Cell)`\n grid-column: 1 / 2;\n\n padding-left: 0;\n\n @media screen and (max-width: 576px) {\n border: none;\n\n padding-bottom: 0;\n }\n`\n\nexport const Info = styled(Cell)`\n grid-column: 2 / 3;\n\n @media screen and (max-width: 576px) {\n border: none;\n\n padding-bottom: 0;\n }\n`\n\nexport const Availability = styled.span`\n display: inline-block;\n\n font-family: var(--font-body);\n font-size: 14px;\n font-weight: 600;\n\n margin: 8px 0;\n padding: 2px 8px;\n\n border: var(--line-availability-border);\n border-radius: 20px;\n\n ${({ available }) =>\n available ?\n css`\n border-color: var(--line-availability-border-color-available);\n color: var(--line-availability-color-available);\n background-color: var(--line-availability-background-color-available);\n ` :\n css`\n border-color: var(--line-availability-border-color-unavailable);\n color: var(--line-availability-color-unavailable);\n background-color: var(--line-availability-background-color-unavailable);\n `}\n`\n\nexport const Controls = styled(Cell)`\n display: flex;\n\n gap: 4px;\n\n grid-column: 3 / 4;\n\n padding-right: 0;\n\n @media screen and (max-width: 576px) {\n grid-column: 1 / 3;\n }\n\n ${({ withRightOffset }) => withRightOffset && css`\n padding-right: 12px;\n `}\n`\n\nexport const ActionButton = styled.button`\n border: none;\n background: none;\n\n width: 40px;\n height: 40px;\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n margin-right: 8px;\n\n cursor: pointer;\n\n svg {\n width: 18px;\n height: 18px;\n\n fill: var(--line-icon-color);\n color: var(--line-icon-color);\n }\n`\n\nexport const QuantityButton = styled(ActionButton)`\n border: var(--line-control-border);\n border-radius: var(--line-control-border-radius);\n\n background-color: var(--line-bundle-item-quantity-background);\n\n margin-right: 0;\n\n svg {\n width: 14px;\n height: 14px;\n\n fill: var(--line-icon-color);\n color: var(--line-icon-color);\n }\n`\n\nexport const QuantityInput = styled.input`\n border: none;\n border: var(--line-control-border);\n\n background-color: var(--line-bundle-item-quantity-background);\n\n color: var(--line-input-color);\n\n border-radius: var(--line-control-border-radius);\n\n font-size: 14px;\n line-height: 20px;\n\n text-align: center;\n\n min-height: 40px;\n max-height: 40px;\n width: 60px;\n`\n\nexport const Price = styled(Cell)`\n display: flex;\n justify-content: flex-end;\n align-items: flex-start;\n\n padding-top: 30px;\n padding-right: 0;\n\n font-family: var(--font-body);\n font-size: var(--line-price-font-size);\n color: var(--line-price-color);\n\n ${Skeleton} {\n display: block;\n }\n\n grid-column: 4 / 5;\n\n @media screen and (max-width: 576px) {\n grid-column: 3 / 4;\n }\n`\n\nexport const Title = styled.h3`\n font-family: var(--font-heading);\n font-size: 16px;\n\n font-size: var(--line-title-font-size);\n color: var(--line-title-color);\n\n margin: 0;\n`\n\nexport const Variations = styled.p`\n font-family: var(--font-body);\n font-size: var(--line-variations-font-size);\n\n color: var(--line-variations-color);\n\n margin: 0;\n`\n\nexport const Contents = styled.div``\n","import styled from 'styled-components'\n\nimport FocalImage from 'ui/blocks/FocalImage'\n\nexport const BundleItem = styled.div`\n display: flex;\n align-items: center;\n\n gap: 12px;\n\n &:not(:last-child) {\n margin-bottom: 8px;\n }\n\n ${FocalImage} {\n width: 32px;\n height: 32px;\n }\n`\n\nexport const Toggle = styled.div`\n display: flex;\n align-items: center;\n\n cursor: pointer;\n\n margin-bottom: 8px;\n\n gap: 4px;\n\n svg {\n width: 16px;\n height: 16px;\n\n fill: var(--line-toggle-color);\n color: var(--line-toggle-color);\n }\n`\n\nexport const ToggleText = styled.span`\n font-family: var(--font-body);\n font-size: var(--line-toggle-font-size);\n\n font-weight: 600;\n\n color: var(--line-toggle-color);\n`\n\nexport const Quantity = styled.span`\n font-family: var(--font-body);\n font-size: var(--line-bundle-item-quantity-font-size);\n\n color: var(--line-bundle-item-quantity-color);\n`\n\nexport const Name = styled.span`\n font-family: var(--font-body);\n font-size: var(--line-bundle-item-name-font-size);\n\n color: var(--line-bundle-item-name-color);\n`\n","// React\nimport React, { useState, useCallback, Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport { BundleItem, Quantity, Name, Toggle, ToggleText } from './styles'\nimport FocalImage from 'ui/components/FocalImage'\n\n// Libraries\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faChevronUp as farChevronUp, faChevronDown as farChevronDown } from '@fortawesome/pro-regular-svg-icons'\n\n// Shared\nimport NO_PRODUCT_IMAGE from '@assets/images/no-product-image.png'\nimport { withTranslation } from 'shared/utils/withTranslation'\n\nconst BundleContents = ({ data, products, photos, t }) => {\n const [open, setOpen] = useState(false)\n\n const handleToggle = useCallback(() => {\n setOpen((prev) => !prev)\n }, [])\n\n return (\n \n \n \n {t('user.cart.bundle_contents')} ({data.length})\n \n \n \n {open &&\n data.map((item) => {\n const product = products.getById(item.item_id)\n\n if (!product) return null\n\n const photo = photos.getById(product?.photo_id)\n\n return (\n \n \n {item.quantity}x\n {product.name}\n \n )\n })}\n \n )\n}\n\nBundleContents.displayName = 'BundleContents'\n\nBundleContents.propTypes = {\n data: PropTypes.array,\n products: PropTypes.object,\n photos: PropTypes.object,\n t: PropTypes.func\n}\n\nconst mapStateToProps = (state, props) => {\n const products = state.orm.products\n const photos = state.orm.photos\n\n return { products, photos }\n}\n\nexport default compose(withTranslation('user'), reduxConnect(mapStateToProps))(BundleContents)\n","// React\nimport React, { Fragment, useCallback, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport {\n Controls,\n ActionButton,\n QuantityButton,\n QuantityInput,\n Price,\n Image,\n Info,\n Title,\n Variations,\n Contents,\n Availability\n} from './styles'\nimport FocalImage from 'ui/components/FocalImage'\nimport Skeleton from 'ui/blocks/Skeleton'\nimport BundleContents from './BundleContents'\n\n// Libraries\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faMinus as farMinus, faPlus as farPlus } from '@fortawesome/pro-regular-svg-icons'\nimport { faTrash as falTrash } from '@fortawesome/pro-light-svg-icons'\n\nimport _debounce from 'lodash/debounce'\n\n// Shared\nimport { Settings as SettingsUtils, Format as FormatUtils } from 'back_office/v2/utils/utils'\nimport CartActions from 'store/v2/redux/actions/cart'\nimport NO_PRODUCT_IMAGE from '@assets/images/no-product-image.png'\nimport { withTranslation } from 'shared/utils/withTranslation'\n\nconst Line = ({\n line,\n product,\n currency,\n type,\n hasDates,\n useAvailability,\n hideAvailabilityQuantity,\n showPrices,\n updateLine,\n t\n}) => {\n const [quantity, setQuantity] = useState(line?.quantity)\n const [loading, setLoading] = useState(false)\n\n const handleUpdateQuantity = useCallback(\n (quantity, skipQuantityUpdate) => {\n if (quantity === '') {\n if (!skipQuantityUpdate) {\n setQuantity(1)\n }\n\n updateLine(line, 1).finally(() => setLoading(false))\n } else {\n if (!skipQuantityUpdate) {\n setQuantity(quantity)\n }\n\n updateLine(line, quantity).finally(() => setLoading(false))\n }\n },\n [line]\n )\n\n const debounceUpdateQuantity = _debounce(handleUpdateQuantity, 500)\n\n const handleUpdateInputQuantity = useCallback(({ target }) => {\n setQuantity(target.value)\n\n debounceUpdateQuantity(target.value)\n }, [])\n\n const handleIncreaseQuantity = useCallback((quantity) => {\n setLoading(true)\n setQuantity(quantity + 1)\n\n debounceUpdateQuantity(quantity + 1, true)\n }, [])\n\n const handleDecreaseQuantity = useCallback((quantity) => {\n setLoading(true)\n setQuantity(quantity - 1)\n\n debounceUpdateQuantity(quantity - 1, true)\n }, [])\n\n const handleDeleteLine = useCallback(() => {\n updateLine(line, 0)\n }, [line])\n\n if (!line || !product) return null\n\n const available = line.available_quantity >= quantity\n\n return (\n \n \n \n \n \n {product.group_name || product.name}\n {product.variation_values && {product.variation_values.join(',')}}\n {hasDates && useAvailability && (\n \n {!hideAvailabilityQuantity && (\n \n {line.available_quantity} {t('user.store.available')}\n \n )}\n {hideAvailabilityQuantity && t(available ? 'user.store.available' : 'user.store.unavailable')}\n \n )}\n {type === 'bundle' && (\n \n \n \n )}\n \n \n \n \n \n handleDecreaseQuantity(quantity)}\n >\n \n \n \n handleIncreaseQuantity(quantity)}\n >\n \n \n \n {showPrices && (\n {loading ? : FormatUtils.money(line.display_price_in_cents, currency)}\n )}\n \n )\n}\n\nLine.displayName = 'Line'\n\nLine.propTypes = {\n line: PropTypes.object,\n product: PropTypes.object,\n currency: PropTypes.object,\n type: PropTypes.oneOf(['rental', 'bundle']),\n hasDates: PropTypes.bool,\n useAvailability: PropTypes.bool,\n hideAvailabilityQuantity: PropTypes.bool,\n showPrices: PropTypes.bool,\n updateLine: PropTypes.func,\n t: PropTypes.func\n}\n\nconst mapStateToProps = (state, props) => {\n let product\n\n const cartId = state.client.cartId\n const currency = state.client.currency.toJS()\n\n const cart = state.orm.carts.getById(cartId)\n const line = state.orm.lines.getById(props.id)\n const type = line?.product?.product_type\n\n const hasDates = !!cart.starts_at && !!cart.stops_at\n const useAvailability = SettingsUtils.get('store.use_availability') && line?.tracking_type !== 'none'\n const hideAvailabilityQuantity = SettingsUtils.get('store.hide_product_availability_quantities')\n const showPrices = SettingsUtils.get('store.use_prices')\n\n switch (type) {\n case 'bundle':\n product = state.orm.bundles.getById(line?.product.id)\n break\n case undefined:\n product = null\n break\n default:\n product = state.orm.products.getById(line?.product.id)\n break\n }\n\n return { line, product, currency, type, useAvailability, hasDates, hideAvailabilityQuantity, showPrices }\n}\n\nconst mapDispatchToProps = () => {\n return {\n updateLine: (line, quantity) =>\n CartActions.book({\n item_id: line.item_id,\n line_id: line.id,\n quantity,\n type: 'set'\n })\n }\n}\n\nexport default compose(withTranslation('user'), reduxConnect(mapStateToProps, mapDispatchToProps))(Line)\n","// React\nimport React from 'react'\n\n// Components\nimport { Controls, Image, Info, Lines, Price } from './styles'\nimport Skeleton from 'ui/blocks/Skeleton'\n\nconst LinesSkeleton = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default LinesSkeleton\n","// React\nimport React, { Fragment, useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport Line from './Line'\nimport LinesSkeleton from './LineSkeleton'\nimport { Lines as LinesContainer, EmptyText, HostStyles } from './styles'\nimport Div from 'ui/elements/Div'\n\n// Libraries\nimport _flatten from 'lodash/flatten'\n\n// Shared\nimport withStore from 'shop-components/utils/withStore'\nimport withTheme from 'shop-components/utils/withTheme'\nimport registerCustomElement from 'shop-components/utils/registerCustomElement'\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport ItemActions from 'back_office/v2/redux/actions/item_actions'\nimport LineActions from 'back_office/v2/redux/actions/line_actions'\n\nconst Lines = ({ cartId, lines, fetchLines, fetchContents, t }) => {\n const [loading, setLoading] = useState(false)\n\n useEffect(() => {\n setLoading(true)\n\n fetchLines(cartId)\n .then(({ payload }) => {\n const ids = _flatten(\n payload.response.data.map(({ attributes }) => attributes.items.map(({ item_id: id }) => id))\n )\n\n if (!ids.length) return\n\n fetchContents(ids)\n })\n .finally(() => {\n setLoading(false)\n })\n }, [cartId])\n\n if (loading) {\n return (\n \n \n \n \n )\n }\n\n if (!lines.size()) {\n return (\n \n \n
    \n {t('user.cart.empty')}\n
    \n
    \n )\n }\n\n return (\n \n \n \n {lines?.map((line) => (\n \n ))}\n \n \n )\n}\n\nLines.propTypes = {\n cartId: PropTypes.string,\n lines: PropTypes.object,\n fetchLines: PropTypes.func,\n fetchContents: PropTypes.func,\n t: PropTypes.func\n}\n\nconst mapStateToProps = (state, _props) => {\n const cartId = state.client.cartId\n\n const cart = state.orm.carts.getById(cartId)\n const lines = state.orm.lines.getAll({ id: cart?.lines }).filter(({ product_type: type }) => type !== 'service')\n\n return { cartId, lines }\n}\n\nconst mapDispatchToProps = (_dispatch, _props) => {\n return {\n fetchLines: (id) => {\n return LineActions.fetchAll({\n apiVersion: 'boomerang',\n include: [\n 'item',\n 'item.photo',\n 'item.bundle_items',\n 'item.bundle_items.product',\n 'item.bundle_items.product.photo'\n ],\n filter: {\n owner_id: id\n }\n })\n },\n fetchContents: (ids) => {\n return ItemActions.fetchAll({\n apiVersion: 'boomerang',\n include: ['photo'],\n filter: {\n id: ids,\n archived: false\n }\n })\n }\n }\n}\n\nconst decoratedComponent = compose(\n withStore,\n withTheme,\n withTranslation('user'),\n reduxConnect(mapStateToProps, mapDispatchToProps)\n)(Lines)\n\nregisterCustomElement('bq-cart-lines', decoratedComponent)\n\nexport default decoratedComponent\n","import styled, { createGlobalStyle, css } from 'styled-components'\nimport { color } from 'ui/themes/utils'\n\nimport H3 from 'ui/elements/H3'\nimport P from 'ui/elements/P'\nimport Div from 'ui/elements/Div'\nimport Label from 'ui/elements/Label'\n\nexport const HostStyles = createGlobalStyle`\n :host {\n --services-container-background: transparent;\n --services-container-padding: 16px;\n --services-container-border-radius: 8px;\n --services-container-border: 1px solid var(--color-border, ${color('Misc/Divider')});\n\n --services-text-color: var(--color-primary-foreground, ${color('Text/Primary')});\n\n --service-checkbox-border: 1px solid var(--color-border, ${color('Misc/Divider')});\n --service-checkbox-border-radius: 4px;\n --service-checkbox-size: 20px;\n --service-checkbox-color: ${color('white')};\n --service-checkbox-color-checked: var(--color-accent-background, ${color('branding')});\n --service-checkbox-icon-color: var(--color-accent-foreground, ${color('white')});\n\n --service-title-font-size: 18px;\n --service-name-font-size: 16px;\n --service-price-font-size: 16px;\n }\n\n * {\n box-sizing: border-box;\n }\n\n @keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n }\n`\n\nexport const Container = styled(Div)`\n position: relative;\n\n background: var(--services-container-background);\n border: var(--services-container-border);\n\n padding: var(--services-container-padding);\n\n border-radius: var(--services-container-border-radius);\n`\n\nexport const Title = styled(H3)`\n font-family: var(--font-body);\n font-weight: 600;\n font-size: var(--service-title-font-size);\n\n margin-bottom: 14px;\n\n color: var(--services-text-color);\n`\n\nexport const ServiceContainer = styled(Div)`\n display: grid;\n grid-template-columns: max-content 1fr;\n grid-gap: 12px;\n\n &:not(:last-child) {\n margin-bottom: 12px;\n }\n\n ${({ hasPrice }) =>\n hasPrice &&\n css`\n grid-template-columns: max-content 1fr max-content;\n `}\n\n ${({ loading }) =>\n loading &&\n css`\n grid-template-columns: max-content 1fr max-content;\n `}\n`\n\nexport const Name = styled(Div)`\n display: flex;\n align-items: center;\n\n ${Label} {\n font-family: var(--font-body);\n font-size: var(--service-name-font-size);\n font-weight: 400;\n\n cursor: pointer;\n\n margin: 0;\n\n color: var(--services-text-color);\n }\n\n ${({ disabled }) =>\n disabled &&\n css`\n opacity: 0.7;\n `}\n`\n\nexport const Checkbox = styled(Div)`\n width: var(--service-checkbox-size);\n height: var(--service-checkbox-size);\n\n cursor: pointer;\n\n border-radius: var(--service-checkbox-border-radius);\n border: var(--service-checkbox-border);\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n padding: 2px;\n\n background-color: var(--service-checkbox-color);\n\n svg {\n max-width: 100%;\n max-height: 100%;\n\n width: 100%;\n\n color: var(--service-checkbox-icon-color);\n fill: var(--service-checkbox-icon-color);\n\n visibility: hidden;\n }\n`\n\nexport const CheckboxContainer = styled(Div)`\n position: relative;\n\n & > input[type='checkbox'] {\n position: absolute;\n top: 0;\n left: 0;\n width: 0;\n height: 0;\n visibility: hidden;\n\n &:checked + ${Checkbox} {\n background-color: var(--service-checkbox-color-checked);\n\n svg {\n visibility: visible;\n }\n }\n }\n`\n\nexport const Price = styled(P)`\n font-family: var(--font-body);\n font-weight: 700;\n font-size: var(--service-price-font-size);\n\n color: var(--services-text-color);\n\n text-align: right;\n\n margin: 0;\n\n ${({ disabled }) =>\n disabled &&\n css`\n opacity: 0.7;\n `}\n`\n","// React\nimport React, { useEffect, useState, useCallback } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Components\nimport { Name, Checkbox, CheckboxContainer, Price, ServiceContainer } from './styles'\nimport Input from 'ui/elements/Input'\nimport Label from 'ui/elements/Label'\n\n// Libraries\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faCheck as farCheck } from '@fortawesome/pro-regular-svg-icons'\n\n// Shared\nimport { fetchPrices } from 'shop-components/redux/actions/price'\nimport { money } from 'shared/utils/format'\nimport CartActions from 'store/v2/redux/actions/cart'\nimport { Settings as SettingsUtils } from 'back_office/v2/utils/utils'\n\nconst Service = ({ cart, service, fetchPrice, toggleService, dates, inCart, price, currency, hasPrice }) => {\n const [checked, setChecked] = useState(inCart)\n const [loading, setLoading] = useState(false)\n\n useEffect(() => {\n if (service?.id && cart?.id) {\n fetchPrice({ id: service.id, cartId: cart.id })\n }\n }, [dates.start, dates.stop, service?.id, cart?.id])\n\n useEffect(() => {\n if (inCart !== checked) {\n setChecked(inCart)\n }\n }, [inCart, checked])\n\n const handleToggleService = useCallback(() => {\n const value = !checked\n\n setLoading(true)\n setChecked((prev) => !prev)\n\n toggleService({ id: service.id, value })\n .catch(() => {\n setChecked((prev) => !prev)\n })\n .finally(() => {\n setLoading(false)\n })\n }, [checked, service?.id])\n\n if (!service) return null\n\n return (\n \n \n \n \n \n {price && hasPrice && {money(price.price_each_in_cents, currency)}}\n \n )\n}\n\nService.propTypes = {\n service: PropTypes.object,\n cart: PropTypes.object,\n fetchPrice: PropTypes.func,\n toggleService: PropTypes.func,\n dates: PropTypes.object,\n price: PropTypes.object,\n currency: PropTypes.object,\n inCart: PropTypes.bool,\n hasPrice: PropTypes.bool\n}\n\nconst mapStateToProps = (state, props) => {\n const cart = state.orm.carts.getById(state.client.cartId)\n const dates = { start: cart?.starts_at, stop: cart?.stops_at }\n\n const price = state.items.records[props.service?.product_group_id]?.price\n const currency = window.booqableOptions.currency\n\n const hasPrice =\n price?.price_each_in_cents >= 0 &&\n price?.price_each_in_cents !== null &&\n props.service?.price_type !== 'none' &&\n props.service?.price_type !== null &&\n SettingsUtils.get('store.use_prices')\n\n return { dates, cart, price, currency, hasPrice }\n}\n\nconst mapDispatchToProps = (dispatch, props) => {\n const book = ({ id, quantity }) =>\n CartActions.book({\n item_id: id,\n quantity,\n type: 'set'\n })\n\n return {\n fetchPrice: (params) => dispatch(fetchPrices(params)),\n toggleService: ({ id, value }) => {\n if (value) {\n return book({ id, quantity: 1 })\n } else {\n return book({ id, quantity: 0 })\n }\n }\n }\n}\n\nexport default reduxConnect(mapStateToProps, mapDispatchToProps)(Service)\n","// React\nimport React, { Fragment, useEffect, useCallback } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport { HostStyles, Container, Title } from './styles'\nimport Service from './Service'\n\n// Shared\nimport withStore from 'shop-components/utils/withStore'\nimport withTheme from 'shop-components/utils/withTheme'\nimport registerCustomElement from 'shop-components/utils/registerCustomElement'\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport ItemActions from 'back_office/v2/redux/actions/item_actions'\nimport LineActions from 'back_office/v2/redux/actions/line_actions'\n\nconst Services = ({ cartId, services, itemIds, fetchLines, fetchServices, title, t }) => {\n useEffect(() => {\n if (!cartId) return\n\n // We need to fetch both services and lines\n // because we need to know which services are already added to the cart\n fetchLines(cartId).then(() => {\n fetchServices()\n })\n }, [cartId])\n\n const isServiceInCart = useCallback((serviceId) => itemIds.includes(serviceId), [itemIds])\n\n if (!services.size()) return null\n\n return (\n \n \n \n {title || t('user.store.additional_services')}\n {services?.map((service) => {\n const inCart = isServiceInCart(service.id)\n\n return \n })}\n \n \n )\n}\n\nServices.propTypes = {\n cartId: PropTypes.string,\n services: PropTypes.object,\n itemIds: PropTypes.object,\n fetchLines: PropTypes.func,\n fetchServices: PropTypes.func,\n t: PropTypes.func,\n // Element attributes\n title: PropTypes.any\n}\n\nconst mapStateToProps = (state, _props) => {\n const cartId = state.client.cartId\n const cart = state.orm.carts.getById(cartId)\n\n const lines = state.orm.lines.getAll({ id: cart?.lines })\n const itemIds = lines.map((line) => line.item_id)\n\n const enabledServices = state.orm.product_groups.getAll({\n product_type: 'service',\n show_in_store: true,\n archived_at: null\n })\n const services = state.orm.products\n .getAll({ product_type: 'service', product_group_id: enabledServices.pluck('id') })\n .sortBy((product) => enabledServices.getById(product.product_group_id)?.sorting_weight)\n\n return { cartId, services, itemIds }\n}\n\nconst mapDispatchToProps = (_dispatch, _props) => {\n return {\n fetchLines: (id) => {\n return LineActions.fetchAll({\n apiVersion: 'boomerang',\n include: [\n 'item',\n 'item.photo',\n 'item.bundle_items',\n 'item.bundle_items.product',\n 'item.bundle_items.product.photo'\n ],\n filter: {\n owner_id: id\n }\n })\n },\n fetchServices: () => {\n return ItemActions.fetchAll({\n apiVersion: 'boomerang',\n filter: { services: true, archived: false, show_in_store: true },\n page: {\n number: 1,\n size: 100\n }\n })\n }\n }\n}\n\nconst decoratedComponent = compose(\n withStore,\n withTheme,\n withTranslation('user'),\n reduxConnect(mapStateToProps, mapDispatchToProps)\n)(Services)\n\nregisterCustomElement('bq-cart-services', decoratedComponent, {\n attributes: ['title']\n})\n\nexport default decoratedComponent\n","import styled, { createGlobalStyle } from 'styled-components'\nimport { color } from 'ui/themes/utils'\n\nimport P from 'ui/elements/P'\nimport Hr from 'ui/elements/Hr'\n\nconst BaseGrid = styled.div`\n display: grid;\n grid-template-columns: 1fr max-content;\n grid-gap: 8px;\n\n ${P} {\n margin: 0;\n }\n`\n\nexport const HostStyles = createGlobalStyle`\n :host {\n --totals-text-color: var(--color-primary-foreground, ${color('Text/Primary')});\n\n --totals-border: 1px solid var(--color-border, ${color('Misc/Divider')});\n\n --totals-breakdown-font-size: 16px;\n --totals-breakdown-font-weight: 400;\n\n --totals-total-font-size: 20px;\n --totals-total-font-weight: 700;\n\n --totals-error-padding: 16px;\n --totals-error-border-radius: 8px;\n --totals-error-background-color: #FFEAEF;\n --totals-error-color: var(--color-red, ${color('Danger/Base')});\n --totals-error-gap: 16px;\n --totals-error-font-size: 16px;\n --totals-error-font-weight: 400;\n }\n\n ${Hr} {\n border: none;\n border-top: var(--totals-border);\n }\n`\n\nexport const Breakdown = styled(BaseGrid)`\n ${P} {\n font-family: var(--font-body);\n font-size: var(--totals-breakdown-font-size);\n font-weight: var(--totals-breakdown-font-weight);\n\n color: var(--totals-text-color);\n }\n`\n\nexport const Total = styled(BaseGrid)`\n ${P} {\n font-family: var(--font-body);\n font-size: var(--totals-total-font-size);\n font-weight: var(--totals-total-font-weight);\n\n color: var(--totals-text-color);\n }\n`\n\nexport const Error = styled.div`\n display: grid;\n grid-template-columns: max-content 1fr;\n align-items: center;\n\n padding: var(--totals-error-padding);\n\n border-radius: var(--totals-error-border-radius);\n\n background-color: var(--totals-error-background-color);\n\n gap: var(--totals-error-gap);\n\n svg {\n width: 20px;\n height: 20px;\n\n fill: var(--totals-error-color);\n color: var(--totals-error-color);\n }\n\n ${P} {\n margin: 0;\n\n font-family: var(--font-body);\n font-size: var(--totals-error-font-size);\n font-weight: var(--totals-error-font-weight);\n\n color: var(--totals-error-color);\n }\n`\n","// React\nimport React, { Fragment, useEffect } from 'react'\nimport PropTypes from 'prop-types'\n\n// Components\nimport Spacer from 'ui/blocks/Spacer'\nimport { Error } from './styles'\nimport P from 'ui/elements/P'\n\n// Libraries\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faExclamationTriangle as fasExclamationTriangle } from '@fortawesome/pro-regular-svg-icons'\n\n// Hooks\nimport { useCart } from 'shop-components/utils/useCart'\nimport { useOrm } from 'shared/utils/useOrm'\nimport { useTranslation } from 'shared/utils/useTranslation'\nimport { useSettings } from 'shared/utils/useSettings'\n\nexport const Errors = ({ onError }) => {\n let errorText\n let cannotCheckout = false\n\n const { cart, isOverdue, isEmpty } = useCart()\n\n const useAvailability = useSettings('store.use_availability')\n\n const unavailableLines = useOrm('lines', (lines) => {\n return lines\n .getAll({\n id: cart?.lines,\n can_checkout: false\n })\n .filter((line) => line.line_type !== 'delivery_rate')\n })\n\n const { t } = useTranslation('user')\n\n const hasDates = !!(cart?.starts_at && cart?.stops_at)\n\n if (hasDates && cannotCheckout) {\n errorText = t('user.store.not_all_products_available')\n }\n\n if (!hasDates) {\n errorText = t('user.store.select_a_period', 'Select a rental period')\n }\n\n if (isOverdue) {\n errorText = t('user.checkout.dates_in_past')\n }\n\n if (useAvailability) {\n cannotCheckout = unavailableLines.size() > 0\n }\n\n useEffect(() => {\n if (errorText || isEmpty) {\n onError(errorText || true)\n } else {\n onError(null)\n }\n }, [errorText, isEmpty])\n\n if (!errorText) return null\n\n return (\n \n \n \n

    {errorText}

    \n
    \n \n
    \n )\n}\n\nErrors.displayName = 'Errors'\n\nErrors.propTypes = {\n onError: PropTypes.func\n}\n","import styled, { css, createGlobalStyle } from 'styled-components'\nimport { color } from 'ui/themes/utils'\n\nconst statusColors = {\n error: '--book-button-error-color'\n}\n\nexport const HostStyles = createGlobalStyle`\n :host {\n --book-button-button-color: var(--color-accent-background, ${color('branding')});\n --book-button-button-label-color: var(--color-accent-foreground, ${color('white')});\n\n --secondary-button-button-color: var(--color-primary-background, ${color('white')});\n --secondary-button-button-label-color: var(--color-primary-foreground, ${color('Text/Primary')});\n --secondary-button-button-border: 1px solid var(--color-border, ${color('Misc/Divider')});\n\n --book-button-error-color: var(--color-red, ${color('Danger/Base')});\n\n --book-button-label-weight: 700;\n\n --book-button-input-border-radius: 6px;\n --book-button-button-border-radius: 6px;\n\n --book-button-control-height: 48px;\n\n --book-button-button-padding: 0 14px;\n --book-button-button-width: 100%;\n }\n\n * {\n box-sizing: border-box;\n }\n\n @keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n }\n`\n\nexport const Label = styled.span`\n color: var(--book-button-button-label-color);\n\n font-weight: var(--book-button-label-weight);\n`\n\nexport const Overlay = styled.div`\n position: absolute;\n\n width: 100%;\n height: 100%;\n\n top: 0;\n left: 0;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n svg {\n max-height: 18px;\n max-width: 18px;\n\n height: 100%;\n width: 100%;\n\n &.loading {\n animation: spin 1s linear infinite;\n }\n }\n`\n\nexport const Button = styled.button`\n display: block;\n position: relative;\n\n width: var(--book-button-button-width);\n height: var(--book-button-control-height);\n\n padding: var(--book-button-button-padding);\n\n background-color: var(--book-button-button-color);\n color: var(--book-button-button-label-color);\n\n border: none;\n border-radius: var(--book-button-button-border-radius);\n\n cursor: pointer;\n\n &:hover {\n box-shadow: inset 0px 0px 400px 110px rgba(0, 0, 0, 0.12);\n }\n\n transition: all 0.2s ease-in-out;\n\n ${({ loading }) =>\n loading &&\n css`\n cursor: progress;\n\n ${Label} {\n opacity: 0;\n visibility: hidden;\n }\n `}\n\n ${({ disabled }) =>\n disabled &&\n css`\n cursor: not-allowed;\n\n opacity: 0.6;\n `}\n\n ${({ status }) =>\n status &&\n css`\n background-color: var(${statusColors[status]});\n\n ${Label} {\n opacity: 0;\n visibility: hidden;\n }\n `}\n\n ${({ secondary }) =>\n secondary &&\n css`\n background-color: var(--secondary-button-button-color);\n\n border: var(--secondary-button-button-border);\n\n ${Label} {\n color: var(--secondary-button-button-label-color);\n }\n `}\n`\n","// React\nimport React, { Fragment, useState, useCallback } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport { Button as ButtonContainer, HostStyles, Label, Overlay } from './styles'\n\n// Libraries\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faSpinnerThird as farSpinnerThird, faTimes as farTimes } from '@fortawesome/pro-regular-svg-icons'\n\n// Shared\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport ClientActions from 'store/v2/redux/actions/client'\n\nconst CheckoutButton = ({ disabled, t, book }) => {\n const [loading, setLoading] = useState(false)\n const [status, setStatus] = useState(null)\n\n const handleBook = useCallback(() => {\n let timeout\n\n setLoading(true)\n\n book()\n .catch(() => {\n setStatus('error')\n })\n .finally(() => {\n setLoading(false)\n timeout = setTimeout(() => {\n setStatus(null)\n }, 3000)\n })\n\n return () => {\n clearTimeout(timeout)\n }\n }, [])\n\n return (\n \n \n \n \n {loading && (\n \n \n \n )}\n {status === 'error' && (\n \n \n \n )}\n \n \n )\n}\n\nCheckoutButton.displayName = 'Button'\n\nCheckoutButton.propTypes = {\n disabled: PropTypes.bool,\n book: PropTypes.func,\n t: PropTypes.func\n}\n\nconst mapDispatchToProps = (dispatch, props) => {\n return {\n book: () => {\n return new Promise((resolve, reject) => {\n if (ClientActions.evaluateCartOverdue()) {\n reject(new Error('Cart is overdue'))\n } else {\n ClientActions.setCheckingOut()\n\n resolve()\n }\n })\n }\n }\n}\n\nexport default compose(withTranslation('user'), reduxConnect(null, mapDispatchToProps))(CheckoutButton)\n","// React\nimport { useCallback } from 'react'\n\nexport const useNavigation = () => {\n const backToStore = useCallback(() => {\n const previewing = window.location.pathname.includes('/preview')\n const backUrl = window.booqableOptions?.cart.backToStoreUrl\n\n if (previewing || !backUrl) {\n return window.history.back()\n }\n\n return window.location.replace(backUrl)\n }, [])\n\n return { backToStore }\n}\n","// React\nimport React, { Fragment, useCallback } from 'react'\nimport PropTypes from 'prop-types'\n\n// Components\nimport { Button as ButtonContainer, HostStyles, Label } from './styles'\n\n// Shared\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport { useNavigation } from 'shop-components/utils/navigation'\n\nconst BackToStoreButton = ({ disabled, t }) => {\n const { backToStore } = useNavigation()\n\n const handleGoBackToStore = useCallback((e) => {\n e?.preventDefault()\n\n backToStore()\n }, [])\n\n return (\n \n \n \n \n \n \n )\n}\n\nBackToStoreButton.displayName = 'Button'\n\nBackToStoreButton.propTypes = {\n disabled: PropTypes.bool,\n t: PropTypes.func\n}\n\nexport default withTranslation('user')(BackToStoreButton)\n","// React\nimport React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport { Breakdown } from './styles'\nimport P from 'ui/elements/P'\nimport Hr from 'ui/elements/Hr'\n\n// Shared\nimport { Format as FormatUtils } from 'back_office/v2/utils/utils'\nimport { withTranslation } from 'shared/utils/withTranslation'\n\nconst Discounts = ({ lines, currency }) => {\n if (!lines.length) return null\n\n return (\n \n \n {lines.map(({ key, label, value }) => (\n \n

    {label}

    \n

    {FormatUtils.money(value, currency)}

    \n
    \n ))}\n
    \n
    \n
    \n )\n}\n\nDiscounts.propTypes = {\n lines: PropTypes.array,\n currency: PropTypes.object\n}\n\nconst mapStateToProps = (state, props) => {\n const lines = []\n\n const currency = state.client.currency.toJS()\n const coupon = state.orm.coupons.getById(props.cart.coupon_id)\n const discountLabel = props.t('user.checkout.discount')\n\n if (props.cart.discount_percentage !== 0) {\n lines.push({\n key: 'cart',\n label: props.t('user.auth.account_discount'),\n value: props.cart.discount_in_cents * -1\n })\n }\n\n if (coupon) {\n let label\n const value = props.cart.coupon_discount_in_cents * -1\n\n if (coupon.coupon_type === 'percentage') {\n label = `${props.t('user.checkout.coupon')}: ${coupon.value}% ${discountLabel.toLowerCase()}`\n } else {\n label = `${props.t('user.checkout.coupon')} ${discountLabel.toLowerCase()}`\n }\n\n lines.push({ key: 'coupon', label, value })\n }\n\n return {\n lines,\n currency\n }\n}\n\nexport default compose(\n withTranslation('user'),\n reduxConnect(mapStateToProps)\n)(Discounts)\n","// React\nimport React, { Fragment, useState } from 'react'\nimport { compose } from 'redux'\n\n// Components\nimport { Breakdown, HostStyles, Total } from './styles'\nimport P from 'ui/elements/P'\nimport Spacer from 'ui/blocks/Spacer'\nimport Div from 'ui/elements/Div'\nimport { Errors } from './Errors'\nimport CheckoutButton from './Buttons/Checkout'\nimport BackToStoreButton from './Buttons/BackToStore'\nimport Discounts from './Discounts'\n\n// Hooks\nimport { useTranslation } from 'shared/utils/useTranslation'\nimport { useCart } from 'shop-components/utils/useCart'\n\n// Shared\nimport withStore from 'shop-components/utils/withStore'\nimport withTheme from 'shop-components/utils/withTheme'\nimport registerCustomElement from 'shop-components/utils/registerCustomElement'\nimport { Format as FormatUtils } from 'back_office/v2/utils/utils'\n\nconst Totals = () => {\n const [error, setError] = useState(null)\n\n const { cart, totalPriceAttribute, showPrices, currency } = useCart()\n\n const { t } = useTranslation('user')\n\n if (!cart?.lines) return null\n\n return (\n \n \n
    \n {showPrices && (\n \n \n \n

    {t('user.store.subtotal')}

    \n

    {FormatUtils.money(cart[totalPriceAttribute], currency)}

    \n
    \n {cart.deposit_in_cents > 0 && (\n \n \n \n

    {t('user.store.security_deposit')}

    \n

    {FormatUtils.money(cart.deposit_in_cents, currency)}

    \n
    \n
    \n )}\n \n
    \n )}\n \n \n \n \n
    \n
    \n )\n}\n\nconst decoratedComponent = compose(withTheme, withStore)(Totals)\n\nregisterCustomElement('bq-cart-totals', decoratedComponent)\n\nexport default decoratedComponent\n","import styled, { css, createGlobalStyle } from 'styled-components'\nimport { color } from 'ui/themes/utils'\n\nexport const HostStyles = createGlobalStyle`\n :host, :root {\n --minicart-launcher-height: 60px;\n --minicart-launcher-open-width: 325px;\n --minicart-launcher-bottom: 16px;\n --minicart-launcher-right: 16px;\n --minicart-launcher-accent-color: var(--color-accent-background, ${color('branding')});\n --minicart-launcher-background-color: var(--color-accent-foreground, ${color('white')});\n --minicart-launcher-border-radius: var(--border-radius-sm, 8px);\n --minicart-launcher-padding: 8px;\n --minicart-launcher-font-size: 13px;\n --minicart-launcher-icon-size: 26px;\n --minicart-launcher-font: var(--font-body, --minicart-font, Source Sans Pro, sans-serif);\n --minicart-launcher-shadow: 0px 4px 12px 0px ${color('black')};\n }\n`\n\nexport const Launcher = styled.div`\n display: flex;\n position: fixed;\n\n right: var(--minicart-launcher-right);\n bottom: var(--minicart-launcher-bottom);\n\n height: var(--minicart-launcher-height);\n width: var(--minicart-launcher-height);\n\n font-family: var(--minicart-launcher-font);\n\n overflow: hidden;\n\n border-radius: var(--minicart-launcher-border-radius);\n\n cursor: pointer;\n\n transition: width 0.5s ease-in-out 0.1s;\n transition-delay: 0.5s;\n\n box-shadow: var(--minicart-launcher-shadow);\n\n &:hover {\n ${({ cartOpen }) => !cartOpen && css`\n width: var(--minicart-launcher-open-width);\n `}\n }\n\n`\n\nexport const MiniCartContainer = styled.div`\n position: fixed;\n right: 16px;\n bottom: 84px;\n`\n\nexport const Icon = styled.div`\n display: flex;\n\n justify-content: center;\n align-items: center;\n\n height: var(--minicart-launcher-height);\n min-width: var(--minicart-launcher-height);\n\n color: var(--minicart-launcher-background-color);\n background: var(--minicart-launcher-accent-color);\n\n > svg {\n font-size: var(--minicart-launcher-icon-size);\n height: var(--minicart-launcher-icon-size);\n width: var(--minicart-launcher-icon-size);\n }\n`\n\nexport const Summary = styled.div`\n padding: var(--minicart-launcher-padding);\n\n font-size: var(--minicart-launcher-font-size);\n\n width: calc(var(--minicart-launcher-open-width) - var(--minicart-launcher-height));\n /* Akwardly split line to please eslint */\n min-width: calc(var(--minicart-launcher-open-width) - var(--minicart-launcher-height)\n - (var(--minicart-launcher-padding) * 2));\n`\n\nexport const Dates = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n\n > svg {\n font-size: var(--minicart-launcher-font-size);\n height: var(--minicart-launcher-font-size);\n width: var(--minicart-launcher-font-size);\n }\n`\n\nexport const Details = styled.div`\n > div {\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n`\n\nLauncher.MiniCartContainer = MiniCartContainer\nLauncher.Icon = Icon\nLauncher.Summary = Summary\nLauncher.Dates = Dates\nLauncher.Details = Details\n\nexport default Launcher\n","// React\nimport React, { Fragment, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Libraries\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faCartShopping as fasCartShopping, faArrowRight as fasArrowRight } from '@fortawesome/pro-solid-svg-icons'\n\n// Components\nimport BLauncher, { HostStyles } from './styles'\nimport MiniCart from 'shop-components/components/MiniCart'\n\n// Shared\nimport registerCustomElement from 'shop-components/utils/registerCustomElement'\nimport withStore from 'shop-components/utils/withStore'\nimport withTheme from 'shop-components/utils/withTheme'\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport Format from 'shared/utils/format'\nimport { setUserFrameworkCartData } from 'shared/utils/userFrameworkEvents'\nimport ClientActions from 'store/v2/redux/actions/client'\n\nconst Launcher = ({\n cart,\n cartOpen,\n toggleCart,\n useTimes,\n usePrices,\n timeFormat,\n itemCount,\n currency,\n totalPriceAttribute,\n t\n}) => {\n useEffect(() => {\n setUserFrameworkCartData()\n }, [cart])\n\n return (\n \n \n {cart && (\n \n \n \n )}\n \n \n \n \n \n \n {cart?.starts_at ?\n (\n \n \n {Format.date(cart.starts_at)}\n {useTimes && Format.date(cart.starts_at, timeFormat)}\n \n \n \n {Format.date(cart.stops_at)}\n {useTimes && Format.date(cart.stops_at, timeFormat)}\n \n \n ) :\n (\n {t('user.store.select_a_period')}\n )}\n \n
    \n \n {cart && itemCount ?\n (\n
    \n \n {itemCount} {t('common.resources.item', { count: itemCount })}\n \n {usePrices && (\n {Format.money(cart?.get(totalPriceAttribute), currency)}\n )}\n
    \n ) :\n (\n {t('user.store.cart_empty')}\n )}\n
    \n
    \n \n
    \n )\n}\n\nLauncher.displayName = 'MiniCartLauncher'\n\nLauncher.propTypes = {\n cartOpen: PropTypes.bool,\n toggleCart: PropTypes.func,\n cart: PropTypes.object,\n useTimes: PropTypes.bool,\n usePrices: PropTypes.bool,\n timeFormat: PropTypes.string,\n totalPriceAttribute: PropTypes.string,\n currency: PropTypes.object,\n itemCount: PropTypes.number,\n t: PropTypes.func\n}\n\nconst mapStateToProps = (state) => {\n let timeFormat, totalPriceAttribute\n\n if (state.settings.get('dates.use_am_pm')) {\n timeFormat = 'hh:mm A'\n } else {\n timeFormat = 'HH:mm'\n }\n\n const cart = state.orm.carts.getById(state.client.cartId)\n const lines = state.orm.lines.getAll({ id: cart?.lines, product_type: ['consumable', 'rental', 'bundle'] })\n\n const itemCount = lines.map((line) => line.quantity).reduce((a, b) => a + b, 0)\n\n if (state.settings.get('pricing.tax_strategy') === 'inclusive') {\n totalPriceAttribute = 'grand_total_with_tax_in_cents'\n } else {\n totalPriceAttribute = 'grand_total_in_cents'\n }\n\n return {\n cartOpen: state.client.cartOpen,\n cart,\n currency: state.client.currency,\n totalPriceAttribute,\n timeFormat,\n useTimes: state.settings.get('store.use_times'),\n usePrices: state.settings.get('store.use_prices'),\n itemCount\n }\n}\n\nconst mapDispatchToProps = () => {\n return {\n toggleCart: (cartOpen) => {\n return ClientActions.toggleCart(cartOpen)\n },\n closePicker: () => {\n return ClientActions.toggleModalPicker(false)\n }\n }\n}\n\nconst decoratedComponent = compose(\n withTranslation('user'),\n withTheme,\n withStore,\n reduxConnect(mapStateToProps, mapDispatchToProps)\n)(Launcher)\n\nregisterCustomElement('bq-minicart-launcher', decoratedComponent)\n\nexport default decoratedComponent\n","import styled, { createGlobalStyle } from 'styled-components'\nimport { color } from 'ui/themes/utils'\n\nexport const HostStyles = createGlobalStyle`\n :host, :root {\n /* Container variables */\n --minicart-button-size: 24px;\n --minicart-button-color: var(--color-primary-foreground, ${color('white')});\n --minicart-button-hover-color: var(--color-primary-foreground, ${color('white')});\n --minicart-button-hover-opacity: 0.6;\n --minicart-button-transition-duration: 0ms;\n\n /* Updated container variables */\n --minicart-button-transition-property: none;\n --minicart-button-transition-timing-function: linear;\n --minicart-button-transition-delay: 0ms;\n --minicart-button-outer-padding: 0px;\n --minicart-button-outer-border: none;\n --minicart-button-outer-hover-border: none;\n --minicart-button-outer-border-radius: 0px;\n --minicart-button-outer-background: transparent;\n --minicart-button-outer-background-hover: transparent;\n --minicart-button-outer-transition: none;\n\n /* Badge variables */\n --minicart-button-badge-color: var(--color-accent-foreground, ${color('white')});\n --minicart-button-border-radius: 12px;\n --minicart-button-padding: 4px;\n --minicart-button-font: var(--font-body, --minicart-font, Source Sans Pro, sans-serif);\n --minicart-button-font-size: 12px;\n --minicart-button-accent-color: var(--color-accent-background, ${color('branding')});\n --minicart-button-badge-size: 16px;\n }\n`\n\nexport const Button = styled.div`\n position: relative;\n\n border: var(--minicart-button-outer-border);\n border-radius: var(--minicart-button-outer-border-radius);\n background: var(--minicart-button-outer-background);\n\n padding: var(--minicart-button-outer-padding);\n\n color: var(--minicart-button-color);\n\n cursor: pointer;\n\n > svg {\n height: var(--minicart-button-size);\n width: var(--minicart-button-size);\n }\n\n &:hover {\n color: var(--minicart-button-hover-color);\n\n border: var(--minicart-button-outer-hover-border);\n background: var(--minicart-button-outer-background-hover);\n\n > svg {\n opacity: var(--minicart-button-hover-opacity);\n }\n }\n\n transition-property: var(--minicart-button-transition-property);\n transition-duration: var(--minicart-button-transition-duration);\n transition-timing-function: var(--minicart-button-transition-timing-function);\n transition-delay: var(--minicart-button-transition-delay);\n`\n\nexport const Badge = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n\n position: absolute;\n bottom: 50%;\n left: 50%;\n\n min-height: var(--minicart-button-badge-size);\n min-width: var(--minicart-button-badge-size);\n aspect-ratio: 1/1;\n\n padding: var(--minicart-button-padding);\n\n border-radius: var(--minicart-button-border-radius);\n\n background: var(--minicart-button-accent-color);\n color: var(--minicart-button-badge-color);\n\n font-family: var(--minicart-button-font);\n font-size: var(--minicart-button-font-size);\n font-weight: 600;\n line-height: var(--minicart-button-badge-size);\n white-space: nowrap;\n text-wrap: nowrap;\n\n user-select: none;\n`\n\nButton.Badge = Badge\n\nexport default Button\n","// React\nimport React, { Fragment, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Libraries\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faShoppingCart as fasShoppingCart } from '@fortawesome/pro-solid-svg-icons'\nimport { faShoppingCart as farShoppingCart } from '@fortawesome/pro-regular-svg-icons'\nimport { faShoppingCart as falShoppingCart } from '@fortawesome/pro-light-svg-icons'\nimport { faShoppingCart as fatShoppingCart } from '@fortawesome/pro-thin-svg-icons'\n\nimport { StyleSheetManager } from 'styled-components'\n\n// Components\nimport BMiniCartButton, { HostStyles } from './styles'\nimport MiniCart from 'shop-components/components/MiniCart'\nimport Popover from 'ui/components/Popover'\nimport PortalWrapper from 'ui/components/PortalWrapper'\n\n// Shared\nimport { Settings as SettingsUtils } from 'back_office/v2/utils/utils'\nimport registerCustomElement from 'shop-components/utils/registerCustomElement'\nimport withStore from 'shop-components/utils/withStore'\nimport withTheme from 'shop-components/utils/withTheme'\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport { setUserFrameworkCartData } from 'shared/utils/userFrameworkEvents'\nimport ClientActions from 'store/v2/redux/actions/client'\nimport useIsMobile from 'shared/utils/useIsMobile'\nimport { shouldForwardProp } from 'shared/utils/shouldForwardProp'\n\nconst getIcon = (style) => {\n switch (style) {\n case 'solid':\n return fasShoppingCart\n case 'regular':\n return farShoppingCart\n case 'light':\n return falShoppingCart\n case 'thin':\n return fatShoppingCart\n default:\n return farShoppingCart\n }\n}\n\nconst MiniCartButton = ({ cart, cartOpen, toggleCart, iconStyle, itemCount }) => {\n const isMobile = useIsMobile()\n const icon = getIcon(iconStyle)\n\n useEffect(() => {\n setUserFrameworkCartData()\n }, [cart])\n\n const renderCartButton = () => {\n return (\n \n \n \n \n {itemCount > 0 && {itemCount}}\n \n \n )\n }\n\n const renderMiniCart = () => {\n return (\n \n \n \n )\n }\n\n if (isMobile) {\n return (\n \n \n \n \n \n \n {renderCartButton()}\n \n )\n }\n\n return (\n \n {renderCartButton()}\n \n )\n}\n\nMiniCartButton.displayName = 'MiniCartButton'\n\nMiniCartButton.propTypes = {\n cart: PropTypes.object,\n cartOpen: PropTypes.bool,\n toggleCart: PropTypes.func,\n itemCount: PropTypes.number,\n iconStyle: PropTypes.oneOf(['solid', 'regular', 'light', 'thin'])\n}\n\nconst mapStateToProps = (state, props) => {\n const cart = state.orm.carts.getById(state.client.cartId)\n const lines = state.orm.lines.getAll({ id: cart?.lines, product_type: ['consumable', 'rental', 'bundle'] })\n\n const itemCount = lines.map((line) => line.quantity).reduce((a, b) => a + b, 0)\n\n return {\n isShowCartBehavior: SettingsUtils.get('store.behaviors.add_button') === 'show_cart',\n cart,\n cartOpen: state.client.cartOpen,\n itemCount\n }\n}\n\nconst mapDispatchToProps = (dispatch, props) => {\n return {\n toggleCart: (cartOpen) => {\n return ClientActions.toggleCart(cartOpen)\n }\n }\n}\n\nconst decoratedComponent = compose(\n withTranslation('user'),\n withTheme,\n withStore,\n reduxConnect(mapStateToProps, mapDispatchToProps)\n)(MiniCartButton)\n\nregisterCustomElement('bq-minicart-button', decoratedComponent, {\n attributes: ['icon-style']\n})\n\nexport default decoratedComponent\n","\n\nimport React from 'react'\nimport { createRoot } from 'react-dom/client'\nimport cuid from 'cuid'\nimport Cookie from 'js-cookie'\nimport getFingerprint from 'shared/utils/get_fingerprint'\n\nimport LocaleActions from 'store/v2/redux/actions/locale'\nimport clientActions from 'store/v2/redux/actions/client'\nimport ItemActions from 'store/v2/redux/actions/item'\nimport BundleActions from 'store/v2/redux/actions/bundle'\nimport ProductGroupActions from 'store/v2/redux/actions/product_group'\nimport getProvider from 'store/v2/get_provider'\nimport { initShopTracking } from 'shared/utils/userFrameworkEvents'\n\nimport Cart from './scenes/cart'\nimport ProductGroup from './scenes/product_group'\nimport ProductList from './scenes/product_list'\nimport ProductButton from 'store/v2/react/scenes/product_button'\nimport ProductDetail from './scenes/product_detail'\nimport Quickview from './scenes/quickview'\nimport ProductSearch from './scenes/product_search'\nimport SeparateDatePicker from './scenes/separate_date_picker'\nimport CollectionList from './scenes/collection_list'\nimport FilterBar from './scenes/filter_bar'\nimport SortingSelect from './scenes/sorting_select'\nimport Sidebar from './scenes/sidebar'\nimport EmbeddableCart from './scenes/embeddable_cart'\nimport EmbeddableCartLines from './scenes/embeddable_cart_lines'\nimport EmbeddableCartSidebar from './scenes/embeddable_cart_sidebar'\nimport CartButton from './scenes/cart_button'\n\nimport 'shop-components/components/ProductAvailability'\nimport 'shop-components/components/ProductPrice/Price'\nimport 'shop-components/components/ProductPrice/Label'\nimport 'shop-components/components/ProductVariationsSelect'\nimport 'shop-components/components/ProductAvailabilityCalendar'\nimport 'shop-components/components/ProductButton'\nimport 'shop-components/components/DatePicker'\nimport 'shop-components/components/DatePicker/Modal'\nimport 'shop-components/components/MiniCart'\nimport 'shop-components/components/ProductGallery'\nimport 'shop-components/components/BundleItems'\nimport 'shop-components/components/CartLines'\nimport 'shop-components/components/CartServices'\nimport 'shop-components/components/CartTotals'\nimport 'shop-components/components/MiniCartLauncher'\nimport 'shop-components/components/MiniCartButton'\n\n// Set storeProvider for tracking\nif (!window.booqableOptions.storeProvider) {\n if (getProvider.isWix()) {\n window.booqableOptions.storeProvider = 'Wix'\n } else if (getProvider.isWeebly()) {\n window.booqableOptions.storeProvider = 'Weebly'\n } else if (getProvider.isSquarespace()) {\n window.booqableOptions.storeProvider = 'Squarespace'\n } else if (getProvider.isShopify()) {\n window.booqableOptions.storeProvider = 'Shopify'\n }\n}\n\nlet cartId\n\n// Migrate 'old' cookie to localStorage\nif ((cartId = Cookie.get('cartId'))) {\n localStorage.bqCartId = cartId\n Cookie.remove('cartId')\n}\n\nif ((cartId = localStorage.bqCartId)) {\n clientActions.setCartId(cartId)\n}\n\nconst booqableRoots = []\n\n// memoize root elements\nlet cartRoot, quickviewRoot\n\nwindow.initBooqableComponents = function () {\n for (const root of Array.from(booqableRoots)) {\n root?.unmount()\n }\n\n // For fetching product card data\n const cardIds = []\n\n // For fetching button/detail data\n const detailIds = []\n\n const initializeLocale = () => {\n let locale\n\n if (navigator.language != null) {\n locale = navigator.language\n } else if (navigator.languages != null) {\n locale = navigator.languages[0]\n }\n\n return LocaleActions.set(locale)\n }\n\n const initializeLauncher = () => {\n if (window.booqableOptions.disableLauncher) {\n return\n }\n\n const embeddableCartElements = {\n 'booqable-cart-button': document.querySelector('.booqable-cart-button'),\n 'booqable-embeddable-cart': document.querySelector('.booqable-embeddable-cart'),\n 'booqable-embeddable-cart-lines': document.querySelector('.booqable-embeddable-cart-lines'),\n 'booqable-embeddable-cart-sidebar': document.querySelector('.booqable-embeddable-cart-sidebar'),\n 'bq-minicart': document.querySelector('bq-minicart'),\n 'bq-minicart-launcher': document.querySelector('bq-minicart-launcher'),\n 'bq-minicart-button': document.querySelector('bq-minicart-button'),\n 'bq-date-picker': document.querySelector('bq-date-picker'),\n 'bq-date-picker-modal': document.querySelector('bq-date-picker-modal')\n }\n\n const usedEmbeddableCartElements = Object.entries(embeddableCartElements).filter(([_, v]) => v !== null)\n\n if (usedEmbeddableCartElements.length > 0) {\n // We save the embeddableCartElements key to the booqableOptions objects for tracking purposes\n window.booqableOptions.embeddableCartElements = Object.keys(\n Object.fromEntries(usedEmbeddableCartElements)\n ).join(', ')\n\n // Embeddable cart is being used, don't use launcher\n return\n }\n\n // # Initialize the cart launcher\n let launcher\n\n if (!(launcher = document.getElementById('booqable-cart'))) {\n launcher = document.createElement('div')\n launcher.setAttribute('id', 'booqable-cart')\n document.body.appendChild(launcher)\n clientActions.setFloatingCart()\n }\n\n const component = \n\n cartRoot = cartRoot || createRoot(document.getElementById('booqable-cart'))\n cartRoot.render(component)\n\n return launcher.setAttribute('initialized', 'true')\n }\n\n const initializeProductQuickview = () => {\n // # Initialize quickview\n const quickview = document.createElement('div')\n\n quickview.setAttribute('id', 'booqable-quickview')\n document.body.appendChild(quickview)\n\n const component = \n\n quickviewRoot = quickviewRoot || createRoot(document.getElementById('booqable-quickview'))\n\n return quickviewRoot.render(component)\n }\n\n const initializeLegacy = () => {\n // # Support for legacy v1 components\n const legacyComponents = document.getElementsByClassName('booqable-product-component')\n\n return Array.from(legacyComponents).map((node) => (node.className += ' booqable-product-button'))\n }\n\n const initializeProducts = () => {\n const products = document.getElementsByClassName('booqable-product')\n\n const result = []\n\n for (const node of Array.from(products)) {\n if (node.parentElement.className !== 'booqable-product-list') {\n // Get product group id\n const { id } = node.dataset\n\n cardIds.push(id)\n\n const component = \n const root = createRoot(node)\n\n root.render(component)\n result.push(booqableRoots.push(root))\n } else {\n result.push(undefined)\n }\n }\n\n return result\n }\n\n const initializeProductButtons = () => {\n // # Render all products buttons\n const productButtons = document.getElementsByClassName('booqable-product-button')\n\n const result = []\n\n for (const node of Array.from(productButtons)) {\n const { dataset } = node\n // Get product group id\n const { id } = dataset\n\n dataset.uiKey = id\n dataset.productGroupId = id\n detailIds.push(id)\n\n const component = \n const root = createRoot(node)\n\n root.render(component)\n result.push(booqableRoots.push(root))\n }\n\n return result\n }\n\n const initializeProductDetails = () => {\n // # Render all product details\n const productDetails = document.getElementsByClassName('booqable-product-detail')\n\n const result = []\n\n for (const node of Array.from(productDetails)) {\n const { dataset } = node\n // Get product group id\n const { id } = dataset\n\n dataset.uiKey = id\n dataset.productGroupId = id\n detailIds.push(id)\n\n const component = \n const root = createRoot(node)\n\n root.render(component)\n result.push(booqableRoots.push(root))\n }\n\n return result\n }\n\n const initializeProductLists = () => {\n // # Render Product List component\n const productLists = document.getElementsByClassName('booqable-product-list')\n\n const result = []\n\n for (const node of Array.from(productLists)) {\n const props = node.dataset\n\n props.uiKey = cuid()\n\n const component = \n const root = createRoot(node)\n\n root.render(component)\n result.push(booqableRoots.push(root))\n }\n\n return result\n }\n\n const initializeProductSearch = () => {\n // # Render product search component\n const productSearches = document.getElementsByClassName('booqable-product-search')\n\n const result = []\n\n for (const node of Array.from(productSearches)) {\n const props = node.dataset\n\n props.uiKey = cuid()\n\n const component = \n const root = createRoot(node)\n\n root.render(component)\n result.push(booqableRoots.push(root))\n }\n\n return result\n }\n\n const initializeStandardComponents = () => {\n const result = []\n const components = {\n 'booqable-datepicker': SeparateDatePicker,\n 'booqable-categories': CollectionList,\n 'booqable-collections': CollectionList,\n 'booqable-bar': FilterBar,\n 'booqable-sort': SortingSelect,\n // Re-enable when availability filtering performance is improved\n // 'booqable-filter': FilterSelect,\n 'booqable-sidebar': Sidebar,\n 'booqable-embeddable-cart': EmbeddableCart,\n 'booqable-embeddable-cart-lines': EmbeddableCartLines,\n 'booqable-embeddable-cart-sidebar': EmbeddableCartSidebar,\n 'booqable-cart-button': CartButton\n }\n\n Object.keys(components).forEach((className) => {\n const nodes = document.getElementsByClassName(className)\n\n for (const node of Array.from(nodes)) {\n const props = node.dataset\n const Component = components[className]\n const root = createRoot(node)\n\n root.render()\n result.push(booqableRoots.push(root))\n }\n })\n\n return result\n }\n\n initializeLocale()\n initializeLauncher()\n initializeProductQuickview()\n initializeLegacy()\n initializeProducts()\n initializeProductButtons()\n initializeProductDetails()\n initializeProductLists()\n initializeProductSearch()\n initializeStandardComponents()\n\n // # Fetch all product groups on the page\n if (cardIds.length > 0) {\n if (!window.bqFetchingProducts) {\n window.bqFetchingProducts = true\n\n ItemActions.fetchAll({ ids: cardIds, cart_id: cartId, include: 'photo', apiVersion: 3 })\n .then(() => {\n window.bqFetchingProducts = false\n }).catch((e) => {\n window.bqFetchingProducts = false\n\n if (e === 'Online reservations are disabled') {\n booqableRoots.forEach((root) => root?.unmount())\n\n cartRoot = cartRoot || createRoot(document.getElementById('booqable-cart'))\n cartRoot.unmount()\n }\n })\n }\n }\n\n if (detailIds.length > 0) {\n window.bqFetchingDetailProducts = true\n\n const actions = []\n\n actions.push(ProductGroupActions.fetchAll({\n ids: detailIds,\n cart_id: cartId,\n include: 'photos,products',\n apiVersion: 3\n }))\n\n actions.push(BundleActions.fetchAll({\n ids: detailIds,\n cart_id: cartId,\n include: [\n 'photos',\n 'bundle_items',\n 'bundle_items.product',\n 'bundle_items.product.photo',\n 'bundle_items.product_group',\n 'bundle_items.product_group.products',\n 'bundle_items.product_group.photo',\n 'bundle_items.product_group.products',\n 'bundle_items.product_group.products.photo'\n ].join(','),\n apiVersion: 3\n }))\n\n Promise.all(actions)\n .then(() => {\n window.bqFetchingDetailProducts = false\n })\n .catch(() => {\n window.bqFetchingDetailProducts = false\n })\n }\n}\n\ngetFingerprint((fingerprint) => {\n window.fingerprint = fingerprint\n window.initBooqableComponents()\n\n clientActions.initialize().then(() => {\n initShopTracking()\n })\n})\n","import ReduxModel from 'shared/lib/orm/reduxModel'\n\nconst Model = {}\n\nModel.Cart = ReduxModel('Cart', {\n defaultValues: {},\n hasMany: {\n lines: { namespace: Model }\n },\n hasOne: {\n coupon: { namespace: Model }\n }\n})\n\nModel.Line = ReduxModel('Line', {\n defaultValues: {},\n belongsTo: {\n cart: { namespace: Model }\n }\n})\n\nModel.ProductGroup = ReduxModel('ProductGroup', {\n defaultValues: {},\n hasMany: {\n products: { foreignKey: 'product_group_id', namespace: Model },\n album_photos: { namespace: Model, modelName: 'Photo' }\n\n },\n hasOne: {\n photo: { namespace: Model }\n }\n})\n\nModel.Product = ReduxModel('Product', {\n defaultValues: {},\n belongsTo: {\n product_group: { namespace: Model }\n }\n})\n\nModel.Item = ReduxModel('Item', {\n apiVersion: 3\n})\n\nModel.Bundle = ReduxModel('Bundle', {\n apiVersion: 3\n})\n\nModel.BundleItem = ReduxModel('BundleItem', {\n apiVersion: 3\n})\n\nModel.Location = ReduxModel('Location', {\n apiVersion: 3\n})\n\nModel.Availability = ReduxModel('ShopAvailability')\n\nModel.OperatingDateTime = ReduxModel('OperatingDateTime')\n\nModel.OperatingRule = ReduxModel('OperatingRule')\n\nModel.Photo = ReduxModel('Photo')\n\nModel.Collection = ReduxModel('Collection')\n\nModel.Coupon = ReduxModel('Coupon')\n\nexport default Model\n","import Immutable from 'immutable'\n\nconst Record = Immutable.Record({\n floatingCart: false,\n cartOpen: false,\n modalPickerOpen: false,\n cartScroll: 0,\n cartId: null,\n periodPickerOpen: false,\n checkingOut: false,\n currency: Immutable.Map(),\n translations: Immutable.Map(),\n company: Immutable.Map(),\n custom_fields: {},\n enabledFeatures: [],\n locale: 'en',\n cartOverdue: false,\n firstTimeSelectable: undefined,\n defaultStartTime: undefined,\n defaultStopTime: undefined,\n readOnlyMode: false\n})\n\nconst initialState = new Record()\n\nexport default function (state = initialState, action) {\n switch (action.type) {\n case 'CARTS_SET_PERIOD_SUCCESS':\n case 'CARTS_FETCH_SUCCESS':\n case 'CARTS_BOOK_SUCCESS':\n case 'CARTS_UPDATE_SUCCESS': {\n const { id } = action.payload.response.cart\n const data = action.payload.response.meta\n\n data.cartId = id\n localStorage.bqCartId = id\n\n return state.merge({\n cartId: id,\n company: data.company,\n currency: data.currency,\n custom_fields: data.custom_fields,\n enabledFeatures: data.features_enabled,\n translations: data.translations\n })\n }\n case 'LOCALE_SET':\n return state.merge({\n locale: action.payload.locale\n })\n case 'DEFAULT_TIMES_INITIALIZED':\n return state.merge(action.payload)\n case 'SET_CART_ID':\n return state.merge(action.payload)\n case 'SET_FLOATING_CART':\n return state.merge(action.payload)\n case 'TOGGLE_CART':\n return state.merge(action.payload)\n case 'TOGGLE_PICKER':\n return state.merge(action.payload)\n case 'TOGGLE_PERIOD_PICKER':\n return state.merge(action.payload)\n case 'SET_CART_SCROLL':\n return state.merge(action.payload)\n case 'SET_CHECKING_OUT':\n return state.merge({ checkingOut: action.payload !== undefined ? action.payload : true })\n case 'SET_CART_OVERDUE':\n return state.merge({ cartOverdue: action.payload })\n case 'SET_READ_ONLY_MODE':\n return state.set('readOnlyMode', action.payload.read_only_mode)\n default:\n return state\n }\n}\n","import { Map } from 'immutable'\n\nconst initialState = Map({\n global: Map({\n q: '',\n collection_id: null,\n sort_by: null,\n filter_by: null\n })\n})\n\nexport default (state = initialState, action) => {\n switch (action.type) {\n case 'SET_FILTER_SEARCH_QUERY':\n {\n const key = action.payload.key\n const previousValue = state.get(key)\n const value = previousValue ? previousValue.merge({ q: action.payload.value }) : { q: action.payload.value }\n\n return state.merge({ [key]: value })\n }\n case 'SET_FILTER_COLLECTION':\n {\n const key = action.payload.key\n const previousValue = state.get(key)\n const value = previousValue ?\n previousValue.merge({ collection_id: action.payload.value }) :\n { collection_id: action.payload.value }\n\n return state.merge({ [key]: value })\n }\n case 'SET_FILTER_SORT_BY':\n {\n const key = action.payload.key\n const previousValue = state.get(key)\n const value = previousValue ?\n previousValue.merge({ sort_by: action.payload.value }) :\n { sort_by: action.payload.value }\n\n return state.merge({ [key]: value })\n }\n case 'SET_FILTER_FILTER_BY':\n {\n const key = action.payload.key\n const previousValue = state.get(key)\n const value = previousValue ?\n previousValue.merge({ filter_by: action.payload.value }) :\n { filter_by: action.payload.value }\n\n return state.merge({ [key]: value })\n }\n case 'SETTINGS_INITIALIZED':\n {\n const settings = action.payload.settings\n\n return state.map(\n (key) => key.merge({ sort_by: settings['store.default_sort'], filter_by: settings['store.default_filter'] })\n )\n }\n default:\n return state\n }\n}\n","import _uniqBy from 'lodash/uniqBy'\nimport _sortBy from 'lodash/sortBy'\n\nconst initialState = {\n loading: false,\n records: {}\n}\n\nconst itemsReducer = (state = initialState, action) => {\n switch (action.type) {\n case 'PRODUCTS_FETCH_START':\n case 'PRODUCT_VARIATION_AVAILABILITIES_FETCH_START':\n case 'PRODUCT_AVAILABILITIES_FETCH_START':\n case 'PRODUCT_PRICES_FETCH_START':\n case 'PRODUCT_IMAGES_FETCH_START':\n return {\n ...state,\n loading: true\n }\n case 'PRODUCTS_FETCH_ERROR':\n case 'PRODUCT_VARIATION_AVAILABILITIES_FETCH_ERROR':\n case 'PRODUCT_AVAILABILITIES_FETCH_ERROR':\n case 'PRODUCT_PRICES_FETCH_ERROR':\n case 'PRODUCT_IMAGES_FETCH_ERROR':\n return {\n ...state,\n loading: false\n }\n // Fetching products\n case 'PRODUCTS_FETCH_SUCCESS': {\n const records = action.payload.records.reduce((state, item) => {\n const existing = state[item.id]\n\n if (existing) {\n return {\n ...state,\n [item.id]: {\n ...existing,\n ...item\n }\n }\n }\n\n return {\n ...state,\n [item.id]: item\n }\n }, state.records)\n\n return {\n loading: false,\n records\n }\n }\n // Fetching product availabilities\n case 'PRODUCT_AVAILABILITIES_FETCH_SUCCESS': {\n const records = action.payload.records.reduce((state, availability) => {\n const existing = state[availability.item_id]\n\n if (existing) {\n return {\n ...state,\n [availability.item_id]: {\n ...existing,\n availability\n }\n }\n }\n\n return {\n ...state,\n [availability.item_id]: {\n id: availability.item_id,\n availability\n }\n }\n }, state.records)\n\n return {\n loading: false,\n records\n }\n }\n // Fetching product variation availabilities\n case 'PRODUCT_VARIATION_AVAILABILITIES_FETCH_SUCCESS': {\n const records = action.payload.records.reduce((state, availability) => {\n const existing = state[action.payload.productId]\n\n if (existing) {\n const products = existing.products.map((product) => {\n if (product.id === availability.item_id) {\n return {\n ...product,\n availability\n }\n }\n\n return product\n })\n\n return {\n ...state,\n [action.payload.productId]: {\n ...existing,\n products\n }\n }\n }\n\n return {\n ...state,\n [action.payload.productId]: {\n id: action.payload.productId,\n products: [\n {\n id: availability.item_id,\n availability\n }\n ]\n }\n }\n }, state.records)\n\n return {\n loading: false,\n records\n }\n }\n // Fetching product prices\n case 'PRODUCT_PRICES_FETCH_SUCCESS': {\n const records = action.payload.records.reduce((state, price) => {\n const existing = state[price.item_id]\n\n if (existing) {\n // If the price was updated by changing configuration,\n // we don't want to override it if the new price is not a configuration price\n if (existing.method === 'configuration' && action.payload.method !== 'configuration') return state\n\n return {\n ...state,\n [price.item_id]: {\n ...existing,\n price,\n ...(action.payload.method === 'configuration' && { method: 'configuration' })\n }\n }\n }\n\n return {\n ...state,\n [price.item_id]: {\n id: price.item_id,\n price,\n ...(action.payload.method === 'configuration' && { method: 'configuration' })\n }\n }\n }, state.records)\n\n return {\n loading: false,\n records\n }\n }\n // Fetching product images\n case 'PRODUCT_IMAGES_FETCH_SUCCESS': {\n const records = action.payload.records.reduce((state, image) => {\n const existing = state[image.owner_id]\n\n if (existing) {\n return {\n ...state,\n [image.owner_id]: {\n ...existing,\n photos: _sortBy(_uniqBy([...existing.photos, image], 'id'), 'position')\n }\n }\n }\n\n return {\n ...state,\n [image.owner_id]: {\n id: image.owner_id,\n photos: [image]\n }\n }\n }, state.records)\n\n return {\n loading: false,\n records\n }\n }\n // Updating product variation\n case 'PRODUCT_UPDATE_VARIATION': {\n const { id, variationId } = action.payload\n\n const records = { ...state.records, [id]: { ...state.records[id], variation_id: variationId } }\n\n return {\n ...state,\n records\n }\n }\n // Updating product configuration\n case 'PRODUCT_UPDATE_CONFIGURATION': {\n const { id, itemId, variationId } = action.payload\n\n const records = {\n ...state.records,\n [id]: {\n ...state.records[id],\n configuration: {\n ...state.records[id].configuration,\n [itemId]: variationId\n }\n }\n }\n\n return {\n ...state,\n records\n }\n }\n default:\n return state\n }\n}\n\nexport default itemsReducer\n","import { reducer as interfaceReducer } from 'shared/redux/interface'\n\nimport ORM from 'shared/lib/orm/orm'\n\nimport clientReducer from './client'\nimport settingsReducer from 'shared/redux/reducers/settings'\nimport filterReducer from './filter'\nimport itemsReducer from 'shop-components/redux/reducers/items'\n\nconst rootReducer = (state = {}, action) => ({\n orm: ORM.reducer(state.orm, action, state),\n\n client: clientReducer(state.client, action, state),\n interface: interfaceReducer(state.interface, action, state),\n settings: settingsReducer(state.settings, action, state),\n filter: filterReducer(state.filter, action, state),\n items: itemsReducer(state.items, action, state)\n})\n\nexport default rootReducer\n","import { applyMiddleware, compose, createStore } from 'redux'\n\nimport rootReducer from './reducers/index'\nimport thunkMiddleware from 'redux-thunk'\n\nconst middleware = []\n\nmiddleware.push(thunkMiddleware)\n\nlet enhancer = applyMiddleware(...middleware)\n\nif (window.__REDUX_DEVTOOLS_EXTENSION__ != null) {\n enhancer = compose(\n enhancer,\n typeof window.__REDUX_DEVTOOLS_EXTENSION__ === 'function' ? window.__REDUX_DEVTOOLS_EXTENSION__() : undefined\n )\n}\n\nconst store = createStore(rootReducer, {}, enhancer)\n\nexport default store\n","import styled, { css } from 'styled-components'\nimport { size } from 'ui/themes/utils'\n\nimport Div from 'ui/elements/Div'\n\nexport const ActionGroup = styled(Div)`\n text-align: right;\n\n > *:not(:first-child) {\n margin-left: ${size('margin')};\n }\n\n * {\n display: inline-block;\n }\n\n ${(props) => props.float && css`\n float: right;\n `}\n\n ${(props) => props.left && css`\n text-align: left;\n `}\n\n ${({ flex }) => flex && css`\n display: flex;\n `}\n\n ${({ align }) => align && css`\n align-items: ${align};\n `}\n\n ${({ justify }) => justify && css`\n justify-content: ${justify};\n `}\n\n ${({ spacing }) => spacing && css`\n > *:not(:first-child) {\n margin-left: ${size('margin', spacing)};\n }\n `}\n`\n","import styled from 'styled-components'\nimport { injectModifiers } from 'ui/themes/utils'\nimport modifiers from 'ui/themes/modifiers'\n\nconst Img = styled.img`\n ${({ theme }) => injectModifiers(modifiers(theme))}\n`\n\nexport default Img\n"],"names":["CookieNotice","init","config","translations","en","CookieConsent","run","this","_settings","showPreferencesModal","showPreferences","servicesTable","services","Booqable","_apps","marketing","forEach","app","find","service","name","push","domain","desc","description","_services","map","label","filter","reduce","acc","_refreshAppConsent","cookie","tracking","includes","onConsent","onDeny","self","defaults","hideFromBots","navigator","webdriver","autoShow","categories","necessary","enabled","readOnly","language","default","onChange","Object","assign","undefined","window","imageFocus","require","location","pathname","origin","value","localStorage","setItem","getItem","initBooqableComponents","setCartData","data","cartData","_events","on","event","callback","context","hasOwnProperty","_trigger","args","Array","prototype","slice","call","arguments","callbacks","i","length","apply","off","listener","loadScript","src","_isScriptLoaded","tag","document","createElement","async","getElementsByTagName","appendChild","unloadScript","_findScript","removeChild","jQuery","_defer","$","querySelector","_once","func","didRun","TypeError","condition","method","attempt","setTimeout","_prependChild","parentElement","element","insertBefore","firstChild","essential","_initApps","entries","_","apps","_consentToAllApps","registerApp","category","appConfig","Error","_gtag","type","gtag","_prepare_gtag_event_data","currency","items","item","item_id","item_name","quantity","price","setupGoogleAnalytics","trackingId","defaultPageTracking","defaultEvents","options","linker","accept_incoming","dataLayer","Date","_setupGoogleAnalyticsDefaultPageTracking","_setupGoogleAnalyticsDefaultEvents","page_title","send_to","grandTotalWithTax","event_data","coupon","cartId","tax","_fbq","fbq","_prepare_fbq_event_data","contents","id","content_name","setupFacebook","fbId","f","b","e","n","t","s","callMethod","queue","loaded","version","parentNode","_setupFacebookDefaultEvents","setupIntercom","appId","intercomSettings","app_id","w","ic","Intercom","d","c","l","x","q","attachEvent","addEventListener","_loadIntercom","decorateLinkForTracking","link","ga","trackers","getAll","tracker","gaplugins","Linker","decorate","querySelectorAll","form","button","submitter","classList","contains","setAttribute","booqableStore","booqableGetStore","elementDataset","Promise","Bluebird","Model","accounting","cuid","warnings","onPossiblyUnhandledRejection","error","message","fingerPrintOptions","excludes","fonts","screenResolution","availableScreenResolution","store","locale","setLocale","booqableOptions","split","moment","tryLoadLocales","locales","then","dispatch","payload","loadLocale","catch","substring","toLowerCase","notSupported","localeWithSubstring","join","API","prefix","apiURL","getLocalCartId","cart","bqCartId","starts_at","startsAt","OperatinRuleUtils","isTimeSelectable","Cart","createAction","params","provider","storeProvider","pathName","startsWith","previewing","get","apiVersion","put","createResource","getBrandingColor","primaryColor","SettingUtils","clientActions","initialize","cartActions","fetch","source","embeddable_cart_elements","embeddableCartElements","action","settings","response","meta","OperatingRule","hydrate","operating_rules","Location","locations","evaluateCartOverdue","brandingColor","brandingUtils","resolve","_reject","defaultStartTime","TimeUtils","defaultStopTime","state","getState","startType","useTimes","firstTimeSelectable","OperatingRuleUtils","initializeDefaultTimes","setFloatingCart","floatingCart","toggleCart","open","cartOpen","toggleModalPicker","modalPickerOpen","setCartScroll","pixels","cartScroll","setCheckingOut","client","orm","carts","getById","checkoutURL","checkout_url","checkoutDomain","match","replace","checkoutURLwithSearch","search","setCartId","overdue","cartUtils","Item","actions","fetchAllOnPage","products","getElementsByClassName","itemIds","specificIds","node","from","dataset","Bundle","fetchAll","ids","cart_id","ProductGroup","include","post","productIds","isSquarespace","iterator","createNodeIterator","head","NodeFilter","SHOW_COMMENT","filterNone","curNode","nextNode","nodeValue","isWix","metaNode","content","isWeebly","_W","isShopify","Shopify","FILTER_ACCEPT","triggerUserFrameworkBookEvent","productId","_store","currencySettings","session","line","lines","first","price_each_in_cents","product","Math","abs","triggerUserFrameworkViewProductEvent","iso_code","price_in_cents","setUserFrameworkCartData","coupon_id","coupons","orderId","order_id","deposit","deposit_in_cents","couponDiscount","coupon_discount_in_cents","toBePaid","to_be_paid_in_cents","totalDueLater","total_due_later_in_cents","grandtotal","grand_total_in_cents","grand_total_with_tax_in_cents","tax_values","taxValue","value_in_cents","prev","current","identifier","title","Period","styled","div","withConfig","displayName","Icon","size","Details","Detail","p","DateTime","ChoosePeriod","DatesBase","WithDates","NoDates","Placeholder","Component","static","PropTypes","hasDates","timeFormat","autoOpenedModal","onAutoModal","modalOpen","togglePicker","componentDidUpdate","prevProps","props","handleOpenModal","render","hasLocations","React","BPeriod","className","onClick","start_location_id","Format","icon","stop_location_id","stops_at","reduxComponent","reduxConnect","mapStateToProps","mapDispatchToProps","ClientActions","withTranslation","Line","updateUI","useAvailability","decreaseQty","increaseQty","showPrices","hideProductAvailabilityQuantities","remove","ui","deleting","style","opacity","transform","componentDidMount","available","available_quantity","statusClass","titleClass","product_type","key","photo_url","Fragment","discountable","display_price_in_cents","compose","uiConnect","persist","toJS","tracking_type","_dispatch","book","line_id","quantityChange","newQuantity","Delay","initial","children","period","constructor","super","getDerivedStateFromProps","setProps","setState","prevState","Logo","width","height","viewBox","xmlns","stroke","strokeWidth","fill","fillRule","propTypes","PoweredBy","logoWidth","useTranslation","href","featureEnabled","FeatureFlags","EQUIPMENT_RENTAL_SOFTWARE_LINK","target","rel","easing","stiffness","damping","Lines","cannotCheckout","nonServiceCartLinesCount","showPoweredBy","componentWillUnmount","ReactCSSTransitionGroup","transitionName","transitionEnterTimeout","transitionLeaveTimeout","transitionAppear","transitionEnter","component","delayed","Motion","defaultStyle","v","spring","uiKey","bind","pluck","ProductPrice","chargeLabel","priceInCents","show","productType","priceType","FormatUtils","usePrices","hasPrice","Services","Service","disabled","css","Label","span","fontSize","fontWeight","index","inCart","toggleService","loading","setLoading","useState","checked","setChecked","handleChangeService","useCallback","console","finally","BServices","SettingsUtils","charge_label","price_type","Switch","field","withActiveEffect","relative","block","_state","reverse","CartActions","fetchServices","useEffect","isServiceInCart","serviceId","enabledServices","product_groups","show_in_store","product_group_id","sortBy","sorting_weight","ProductGroupActions","color","Overdue","BOverdue","FloatingCart","totalPriceAttribute","checkingOut","viewCartHref","checkoutButtonValid","cartOverdue","inPortal","renderCheckoutButton","checkoutButtonClass","checkoutButton","tooltipContent","Tooltip","direction","floatingCartClasses","StyleSheetManager","body","shouldForwardProp","enableVendorPrefixes","slug","getIn","searchParams","URLSearchParams","preview","previewUrlComposer","themeId","cart_url","can_checkout","sort","preventDefault","Backdrop","Div","theme","font","Body","Header","Footer","Container","Close","Button","Modal","onClose","modifiers","testMode","nodeRef","useRef","useLayoutEffect","originalStyle","getComputedStyle","overflow","useLockScroll","handleBackdropClick","currentTarget","Transition","in","timeout","enter","exit","PortalWrapper","backdrop","container","isRequired","ModalClose","forwardRef","ref","ModalHeader","_extends","ModalTitle","H3","ModalBody","ModalFooter","UserAddressesSelect","addresses","selectedAddress","setSelectedAddress","useFormikContext","address","Select","option","setValues","values","delivery_address_property_id","delivery_address","pick","forceValue","forceOnChange","DeliveryFulfillmentForm","userAddresses","setUserAddresses","isUserAuthenticated","setIsUserAuthenticated","tOrEmptyString","Trans","useSelector","useOrm","countries","toArray","provinces","isAuthEnabled","useSettings","authUri","user_login_url","encodeURIComponent","userAddressesUrl","axios","properties","fetchCountriesAndProvinces","AddressFields","defaultFormLayout","addressFieldsOrder","skipValidation","featureDisabled","NEW_ADDRESS_VALIDATION","invalidExistingAddressWarning","fieldTranslationPrefix","errorKey","selectPlaceholder","initialValues","addressIdentifier","fieldDebounce","Span","i18nKey","components","Link","A","fetchDeliveryOptionsRequest","deliveryAddress","apiUrl","delivery","skip_checkout_validation","skip_shortage_validation","CartPickerContext","createContext","onSave","onValidate","isValid","isLoading","CartPickerProvider","setIsValid","setIsLoading","previousCart","usePrevious","behavior","defaultStartLocationId","defaultStopLocationId","handleChange","newValues","handleValidate","valid","handleSave","nextValues","DELIVERIES","fulfillment_type","update","ItemActions","Provider","useCartPicker","useContext","useDeliveryOptions","fetchAvailability","onError","resetError","isFirstMount","formattedDeliveryAddress","useMemo","perform","fetchDeliveryOptions","useCachedQuery","queryFn","cache","Map","previousKey","has","onSuccess","cached","onLoading","result","set","err","rates","isDelivery","isEmpty","country","address1","zipcode","city","keys","errors","valuesAreEqual","isEqual","all","request","useSearchParam","paramName","paramValue","setParamValue","handleUrlChange","removeEventListener","FulfillmentType","deliveryError","setDeliveryError","fulfillmentTab","pickupLocations","archived_at","fulfillment_capabilities","deliveryLocations","showFulfillmentTypeSelect","isPickup","setFieldValue","fulfillmentType","country_id","setFieldError","setErrors","BCartPicker","Section","FontAwesomeIcon","farTriangleExclamation","FulfillmentTypeSelect","Field","inputModifiers","radioGroup","radioGroupIcon","radioGroupLabel","disableStyling","LocationPicker","handleLocationChange","ReadOnlyModeDisabledComponent","readOnlyMode","maxWidth","pointerEvents","Availability","CartPicker","availabilities","minDate","duration","setDuration","openingHours","useOpeningHours","intervalInMinutes","transformer","parseInt","handleMonthChange","date","showAvailability","lineCount","year","getFullYear","month","getMonth","durationData","handleAvailabilityFetch","day","toDate","getDate","location_id","PickerProvider","validateOnBlur","WrapperComponent","CartFlowPicker","onMonthChange","promiseDebounce","onOpen","onDurationChange","handleChangeDuration","_duration","address2","first_name","last_name","region","province_id","mode","format","useAMOrPM","shop_availabilities","availabilityLoading","pendingRequests","_props","created_at","_isAMomentObject","duration_period","AvailabilityActions","fetchCalendarAvailability","CartPickerInner","onSaveCallback","withBranding","promise","setPromise","isMobile","useIsMobile","clsx","ActionGroup","ModalCartPicker","CartPickerContainer","clearCart","mobile","innerWidth","handleClearAndClose","handleClose","clear","Launcher","itemCount","floating","position","bottom","right","countLabel","launcherClassNames","a","isShowCartBehavior","showPicker","setShowPicker","deprecatedColors","primary","secondary","colors","success","info","warning","danger","light","palette","grey","dark","borderHover","black","white","transparent","branding","blue","green","orange","red","purple","grid","unit","Number","isInteger","units","base","fallback","mono","fontAwesomeStyle","xs","sm","md","lg","lgplus","xl","xxl","xxxl","weight","lighter","normal","semibold","bold","borderRadius","borderWidth","controlHeight","margin","padding","mdplus","xlplus","shadow","smplus","screenSizes","destroying","zIndex","Themed","ThemeProvider","BThemed","CartScene","findByIdOrSlug","collection","legacy_id","IdFinder","hideOnLoad","shouldComponentUpdate","nextProps","itemSelectors","bundles","itemId","unsetItem","Product","photo","hasPrices","openQuickview","setWidth","findAncestor","el","cls","findDOMNode","offsetWidth","maxPerRow","floor","max","min","renderLoading","renderContent","_get","imageSrc","imageCoordinates","FocalImage","url","coordinates","maintainAspect","_capitalize","display","photos","photo_id","quickviewActions","getAttribute","Pagination","page","pages","showPrev","showNext","handlePage","handleNextPage","handlePrevPage","renderPages","allPages","_range","till","classNames","ceil","total","per","handlePageChange","setFilterSearchQuery","setFilterSortBy","setFilterFilterBy","ProductSearch","filterKey","setValue","placeholder","onKeyUp","blur","handleClearClick","focus","decoratedComponent","searchKey","Collection","active","I","CollectionList","ul","noPadding","collections","rootCollections","fetchCollections","brandColor","horizontalRule","setOpen","handleToggleCollection","collectionId","stopPropagation","prevOpen","handleFilterByCollection","nativeEvent","stopImmediatePropagation","setFilterCollection","renderCollection","parent_id","isOpen","hasChildren","BCollectionList","item_count","CollectionActions","ProductList","hasItems","searchVisible","collectionsVisible","loadingItems","wrapClass","limit","tags","searchValue","cartModalOpen","initialLoaded","fetchItems","equals","resetFilter","number","category_id","collection_id","filter_by","_isEmpty","sort_by","_map","normalizedResponse","entities","total_count","scrollIntoView","scrollTo","handleModalOpen","handleModalClose","renderList","range","ns","showSearch","showCollections","showCategories","List","ProductButton","BundleItems","BundleItemRow","BundleItemCell","bundleItems","productGroups","configuration","setBundleConfiguration","chooseInitialConfiguration","newConfiguration","clone","bundleItem","product_id","choices","getFirst","handleChangeVariation","bundleItemId","selectedProductId","renderSelectVariation","selectedProduct","renderItem","productGroup","BProductButton","large_url","NO_PRODUCT_IMAGE","has_variations","bundle_items","bundle_id","productGroupIds","TimeTable","P","ScrollContainer","inOpeningHours","Indicator","status","background","selected","showCounts","firstOpenElement","time","timeTable","localDate","localMomentInUTC","BTimeTable","dateFormat","Loader","availability","to","hour","minute","operatingRules","isSame","ProductAvailabilityCalendar","CalendarContainer","InputContainer","BQuantityInput","Control","AvailabilityLink","languages","productConfiguration","firstDayOfWeek","translate","showPast","showTimes","defaultLocationId","selectedLocationId","containerWidth","handleFetchAvailability","debounce","containerRef","getBoundingClientRect","handlePopoverOpen","handleDayClick","handleTimeTableClose","handlePopoverClose","locationId","renderLocationSelect","InputField","pluckObject","renderNativeOnMobile","renderQuantityInput","renderDay","availabilityData","PickerDay","availableCount","interactive","renderAvailabilityCalendar","localMoment","selectionStart","selectionEnd","past","before","BProductAvailabilityCalendar","SwitchTransition","CSSTransition","addEndListener","done","BDayPicker","DayPicker","navbarElement","Navigation","localeUtils","MomentLocaleUtils","onDayClick","disabledDays","isDayClosed","allowPast","renderMobile","BDatePickerInput","MobileWrapper","Popover","fallbackPlacements","offset","fixed","ProductAvailabilityCalendarWrapper","fetchItemAvailability","selectedForProductGroup","productGroupId","addLineQtyUI","qty","newQty","bundle","showProductAvailability","onChangeProductId","addButtonUsesCheckoutBehaviour","cartChanged","updated_at","isBundle","bundleConfigChanged","_isEqual","loadItemData","loadBundlePriceAndAvailability","productSelectors","BundleActions","handleBook","handleChangeQuantity","newBundleConfiguration","configurationAvailability","renderAvailability","withProductAvailability","currentMonth","useBusinessHours","withAvailability","priceEachInCents","_isNaN","branded","Spacer","vertical","getOperatingRules","lineActions","checkout","addToCart","ProductImage","MainImage","visible","MainImageContainer","magnify","canMagnify","GalleryImages","GalleryImagesContainer","GalleryImageContainer","GalleryImage","img","Controls","Gallery","ImageMagnify","ReactInputPosition","ImageContainer","Image","Portal","image","scale","PortalContainer","MagnifyContainer","ImageRenderer","originalRef","originalDimensions","setOriginalDimensions","imageIsVertical","BImageMagnify","originalImage","alt","imageAlt","onLoad","handleOriginalLoad","offsetHeight","createPortal","zoomedSize","zoomedWidth","elementDimensions","zoomedHeight","zoomedImage","backgroundPosition","calculatePosition","y","box","lo","wo","interpolateNumber","activePosition","portalTarget","mouseActivationMethod","MOUSE_ACTIVATION","HOVER","cursorStyle","cursorStyleActive","ModalGallery","Title","h3","Wrapper","ControlWrapper","swipe","setSwipe","swiping","setSwiping","galleryOffset","setGalleryOffset","dimensions","setDimensions","photoIndex","indexOf","selectedPhoto","getMaximumOffset","showGallery","showControls","BModalGallery","onTouchEnd","itemTitle","onTouchStart","touch","touches","clientX","onTouchMove","changedTouches","handlePhotoSelect","onImageLoad","handleImagesBackward","handleImagesForward","onThumbnailPress","noBorder","noBorderRadius","defaultPhoto","photoId","Element","hideFocalImages","newSelectedPhoto","_find","newState","maximumOffset","handleChangeImage","handleClick","handleTouch","handleGalleryClose","handleThumbnailPress","photosArray","selectedPhotoURL","currentIndex","_findIndex","showMobileGallery","selectedLargePhotoURL","xlarge_url","BProductImage","ProductImageWrapper","owner_id","ownerId","albumPhotos","ProductDetail","triggeredTracking","hovered","bqFetchingDetailProducts","fetchData","magnifyRef","dangerouslySetInnerHTML","__html","mapDispatchToProp","QuickviewInner","closeWrapper","close","QuickviewInnerComposed","Quickview","ProductSearchContainer","DateTimeContainer","transparentize","useAMPM","SeparateDatePicker","periodType","isLocationInputEnabled","FunctionalSeparateDatePicker","SeparateDatePickerContainer","CollectionListContainer","SortingSelect","handleChangeSortBy","FilterSelect","filterBy","handleChangeFilter","FilterBar","SortingSelectContainer","inline","InlineCartPicker","Sidebar","EmbeddableCartLine","onIncreaseQuantity","onDecreaseQuantity","onRemove","onInputChange","connect","EmbeddableCartLineContainer","handleIncreaseQuantity","handleDecreaseQuantity","handleRemove","handleInputChange","otherProps","_response","EmbeddableCartLinesContainer","LineContainer","EmbeddableCartLines","LinesContainer","EmbeddableCartErrors","errorText","EmbeddableCartTotals","EmbeddableCartSidebar","showContinueShopping","showDatePicker","handleBack","history","back","Totals","Errors","continueShopping","datepicker","EmbeddableCartMobileLine","EmbeddableCartMobileLines","cleanstate","EmbeddableCartMobile","EmbeddableCart","renderMobileForDesktop","test","userAgent","handleWindowResize","renderDesktop","Mobile","EmbeddableCartContainer","compact","EmbeddableCartSidebarContainer","CartButton","iconStyle","fasShoppingCart","farShoppingCart","falShoppingCart","fatShoppingCart","getIcon","renderFloatingCart","renderIcon","part","useContentWrapper","cartIsOpen","CartButtonComponent","CartButtonContainer","HostStyles","createGlobalStyle","registerCustomElement","attributes","mountElement","mountAttributes","styleSheetTarget","webComponentClass","HTMLElement","mountPoint","attachShadow","connectedCallback","isConnected","attrs","camelCase","handleSetAttribute","removeAttribute","shadowRoot","createRoot","childNodes","retargetEvents","disconnectedCallback","customElements","define","baseURL","interceptors","use","paramsSerializer","qs","arrayFormat","encode","getAvailabilities","stopsAt","startLocationId","fetchAvailabilitiesDebounced","_debounce","availabilitiesRequest","records","fetchAvailabilityDebounced","availabilityRequest","getAvailability","ProductAvailability","fetchProductAvailabilities","hideAvailability","Skeleton","availableString","plannable","withStore","withTheme","variation_id","fetchAvailabilities","fetchPricesDebounced","pricesRequest","getPrices","prices","fetchPriceDebounced","priceRequest","getPrice","fetchPrices","fetchPrice","defaultPrice","fetchProductPrice","fetchProductPrices","money","ProductPriceLabel","defaultLabel","select","ProductVariationsSelect","variations","defaultVariation","setVariation","setSelected","handleSelectVariation","BVariationSelect","variation","farChevronDown","_sortBy","fetchVariationAvailability","variationId","AvailabilityCalendar","start","stop","stopLocationId","statusColors","ButtonLabel","ButtonOverlay","InputWrapper","Input","input","SkeletonContainer","farSpinnerThird","farCheck","farTimes","fetchDebounced","fetchRequest","composeItem","included","relationships","_id","product_group","bookProduct","fetchItem","setQuantity","setStatus","isNaN","clearTimeout","handleButtonClick","handleInputFocus","onFocus","farPlus","farMinus","DatePicker","CalendarIcon","ChevronIcon","Cleanstate","CleanstateLabels","CleanstateTitle","CleanstateLabel","SectionGroup","Value","isPlaceholder","useDatePicker","shouldOpenPicker","toggle","count","shallowEqual","isPricingEnabled","isAvailabilityEnabled","dates","isStartValid","isDaySelectable","isStopValid","hasData","labelKey","availabilityEnabled","pricingEnabled","getLabelKey","BDatePicker","falCalendar","falChevronRight","WrapperWithData","Text","ExpandedTitle","Dates","ButtonNext","farCalendar","MiniCart","portal","Head","Notice","inSummary","BButton","Summary","Amount","invert","CheckoutButtons","CheckoutTotals","Remove","Quantity","QuantityButton","ProductName","large","StatusIndicator","Price","DetailContainer","center","BundleContents","BundleContentsTitle","BundleContentsItem","BundleContentsQuantity","BundleItem","BLine","setLoaded","handleToggleOpen","farChevronUp","spin","updateLineQuantity","setDeleting","debouncedUpdateLineQuantity","handleRemoveLine","line_type","farImage","fasTimes","farCircleInfo","BMiniCart","openDatePicker","farArrowRight","headerHeight","Total","Checkbox","servicesPrice","cartItemIds","prevCartRef","headerElementRef","newCart","fromChanged","tillChanged","selectedServices","_intersection","sum","useCart","companySlug","taxStrategy","isOverdue","setAutoOpenedModal","unavailableLines","isCartOpen","isCheckingOut","LineActions","fetchLines","isCheckoutButtonValid","viewCart","OptimizedImage","focal","optimizedSrc","optimizeImageUrl","Img","quality","ProductGallery","Inner","noGap","hidden","small","ThumbnailsInner","Thumbnail","isActive","fetchPhotos","getPhotos","enableThumbnails","enableControls","infiniteScroll","listenerReady","innerRef","thumbnailsWrapperRef","thumbnailsInnerRef","setIndex","withInfiniteScroll","withControls","withThumbnails","scrollLeft","handleInnerScroll","round","handleSnapToThumbnail","currentPhotoId","currentPhotoIndex","findIndex","handleSnapToPhoto","left","top","BProductGallery","handleSnapToPrevPhoto","farChevronLeft","handleSnapToNextPhoto","farChevronRight","BundleItemSelectWrapper","BundleItemSelect","ScrollGradient","side","updateConfiguration","archivedAt","handleSetSelected","BBundleItems","memo","displayTopGradient","setDisplayTopGradient","displayBottomGradient","setDisplayBottomGradient","scrollTop","scrollHeight","renderBundleItem","EmptyText","Cell","Info","withRightOffset","ActionButton","QuantityInput","Variations","Contents","Toggle","ToggleText","Name","handleToggle","hideAvailabilityQuantity","updateLine","handleUpdateQuantity","skipQuantityUpdate","debounceUpdateQuantity","handleUpdateInputQuantity","handleDeleteLine","group_name","variation_values","falTrash","LinesSkeleton","noCenter","fetchContents","_flatten","archived","ServiceContainer","CheckboxContainer","handleToggleService","htmlFor","BaseGrid","Hr","Breakdown","fasExclamationTriangle","Overlay","CheckoutButton","ButtonContainer","reject","BackToStoreButton","backToStore","backUrl","backToStoreUrl","handleGoBackToStore","Discounts","discountLabel","discount_percentage","discount_in_cents","coupon_type","setError","MiniCartContainer","BLauncher","fasCartShopping","fasArrowRight","closePicker","Badge","MiniCartButton","renderCartButton","BMiniCartButton","renderMiniCart","getProvider","Cookie","booqableRoots","cartRoot","quickviewRoot","root","unmount","cardIds","detailIds","initializeLocale","LocaleActions","initializeLauncher","disableLauncher","usedEmbeddableCartElements","fromEntries","launcher","getElementById","initializeProductQuickview","quickview","initializeLegacy","legacyComponents","initializeProducts","initializeProductButtons","productButtons","initializeProductDetails","productDetails","initializeProductLists","productLists","initializeProductSearch","productSearches","initializeStandardComponents","nodes","bqFetchingProducts","Fingerprint2","fingerprint","getFingerprint","googleAnalytics","facebookPixel","initShopTracking","ReduxModel","defaultValues","hasMany","namespace","hasOne","belongsTo","foreignKey","album_photos","modelName","OperatingDateTime","Photo","Coupon","initialState","Immutable","periodPickerOpen","company","custom_fields","enabledFeatures","merge","features_enabled","read_only_mode","global","previousValue","itemsReducer","existing","_uniqBy","rootReducer","ORM","reducer","clientReducer","interface","interfaceReducer","settingsReducer","filterReducer","middleware","thunkMiddleware","enhancer","applyMiddleware","__REDUX_DEVTOOLS_EXTENSION__","createStore","float","flex","align","justify","spacing","injectModifiers"],"sourceRoot":""}