UNPKG

@mezereon/bigcommerce-stencil

Version:

BigCommerce UI components for Mezereon Xperience

164 lines (151 loc) 3.93 kB
import Axios from '@/plugins/axios.js' import Store from '@/plugins/store.js' import Cookies from '@/plugins/cookies.js' import Search from '@/mixins/search.js' import Autocomplete from '@/mixins/autocomplete.js' import MzHitListItem from '@/custom/HitListItem.vue' import HitGridItem from '@/custom/HitGridItem.vue' import MzContext from '@/custom/MzContext.js' import Vue from 'vue' import VueBus from 'vue-bus' import VueCurrencyFilter from 'vue-currency-filter' import VueScrollTo from 'vue-scrollto' import PortalVue from 'portal-vue' import LineClamp from 'vue-line-clamp' import ChDrawer from 'ch-drawer' import VueLazyload from 'vue-lazyload' import { mapState } from 'vuex' import Translation from '@/plugins/translation.js' import MzAutocomplete from './custom/MzAutocomplete.vue' import VueObserveVisibility from 'vue-observe-visibility' // import styles for ui-components import '@mezereon/ui-components-vue/dist/ui-components-vue.css' import '@/style/index.scss' import '@/plugins/QueryState.js' import '@/plugins/filters.js' // import custom content import '@/custom/style.scss' import { MzActionBar, MzSortBy, MzFilterBtn, MzPaging, MzToggleLayout, MzHitsInfo, MzBanner, MzList, MzTree, MzHitsGrid, MzHitsList, MzPagination, MzSlider, MzRefinements, MzSearchBox, MzSelections } from '@mezereon/ui-components-vue' import Recommendations from './Recommendations.vue' Vue.use(VueCurrencyFilter, { symbol: '$', thousandsSeparator: ',', fractionCount: 2, fractionSeparator: '.', symbolPosition: 'front', symbolSpacing: false }) Vue.use(VueScrollTo) Vue.use(VueBus) Vue.use(Axios) Vue.use(Store) Vue.use(Cookies) Vue.use(Translation) Vue.use(PortalVue) Vue.use(LineClamp) Vue.config.productionTip = false Vue.use(ChDrawer, { zIndex: 99999 }) Vue.use(VueLazyload) Vue.use(VueObserveVisibility) if (document.getElementById('mz-autocomplete')) { window.mz.suggest = new Vue({ components: { MzAutocomplete, MzSearchBox }, mixins: [Autocomplete] }).$mount('#mz-autocomplete') } if (document.getElementById('mz-app')) { window.mz.app = new Vue({ components: { 'mz-search-box': MzSearchBox, MzHitListItem, HitGridItem, MzContext, MzActionBar, MzSortBy, MzFilterBtn, MzPaging, MzToggleLayout, MzHitsInfo, MzBanner, MzList, MzTree, MzHitsGrid, MzHitsList, MzPagination, MzSlider, MzRefinements, MzSelections }, mixins: [Search], data() { return { portalNav: false } }, computed: { filterLayoutClass() { return `mz-filter-layout-${this.filterLayout}` }, ...mapState('search', ['filterLayout']) }, methods: { togglePortalNav(show) { this.portalNav = show } } }).$mount('#mz-app') } // create mz-recs dynamically if (!document.getElementById('mz-recs')) { const mzRecs = document.createElement('div') mzRecs.id = 'mz-recs' document.body.insertBefore(mzRecs, document.body.firstChild) } if (document.getElementById('mz-recs')) { window.mz.recs = new Vue({ render: (h) => h(Recommendations), methods: { loadRecommendations(zones) { if (this.$children && this.$children.length) { this.$children[0].loadRecommendations(true, zones) } } } }).$mount('#mz-recs') } document.addEventListener('DOMContentLoaded', function () { // find all add-to-cart links and add click tracking const linkList = document.querySelectorAll('a.button') Array.from(linkList).forEach(function (link) { if (link.pathname !== '/cart.php') { return } link.addEventListener('click', function () { const match = link.search.match(/product_id=([0-9]*)/i) if (match) { window.mz.track('add2cart', { uid: match[1] }) } }) }) }) window.mz.enabled = true