@salla.sa/twilight-components 2.11.110 → 2.11.112
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +48 -42
- package/dist/cjs/{app-globals-c392da62.js → app-globals-38ac4fe8.js} +2 -2
- package/dist/cjs/{app-globals-c392da62.js.map → app-globals-38ac4fe8.js.map} +1 -1
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/salla-add-product-button_40.cjs.entry.js +74 -24
- package/dist/cjs/salla-add-product-button_40.cjs.entry.js.map +1 -1
- package/dist/cjs/salla-filters-widget.cjs.entry.js +5 -27
- package/dist/cjs/salla-filters-widget.cjs.entry.js.map +1 -1
- package/dist/cjs/salla-filters.cjs.entry.js +8 -4
- package/dist/cjs/salla-filters.cjs.entry.js.map +1 -1
- package/dist/cjs/salla-price-range.cjs.entry.js +109 -37
- package/dist/cjs/salla-price-range.cjs.entry.js.map +1 -1
- package/dist/cjs/salla-products-list.cjs.entry.js +85 -59
- package/dist/cjs/salla-products-list.cjs.entry.js.map +1 -1
- package/dist/cjs/salla-products-slider.cjs.entry.js +12 -4
- package/dist/cjs/salla-products-slider.cjs.entry.js.map +1 -1
- package/dist/cjs/twilight.cjs.js +2 -2
- package/dist/collection/components/salla-filters/salla-filters.js +8 -4
- package/dist/collection/components/salla-filters/salla-filters.js.map +1 -1
- package/dist/collection/components/salla-filters-widget/salla-filters-widget.js +5 -27
- package/dist/collection/components/salla-filters-widget/salla-filters-widget.js.map +1 -1
- package/dist/collection/components/salla-login-modal/intefaces.js.map +1 -1
- package/dist/collection/components/salla-login-modal/salla-login-modal.js +1 -1
- package/dist/collection/components/salla-login-modal/salla-login-modal.js.map +1 -1
- package/dist/collection/components/salla-maintenance-alert/salla-maintenance-alert.js +14 -1
- package/dist/collection/components/salla-maintenance-alert/salla-maintenance-alert.js.map +1 -1
- package/dist/collection/components/salla-price-range/salla-price-range.js +152 -148
- package/dist/collection/components/salla-price-range/salla-price-range.js.map +1 -1
- package/dist/collection/components/salla-products-list/salla-products-list.js +85 -59
- package/dist/collection/components/salla-products-list/salla-products-list.js.map +1 -1
- package/dist/collection/components/salla-products-slider/salla-products-slider.js +29 -5
- package/dist/collection/components/salla-products-slider/salla-products-slider.js.map +1 -1
- package/dist/collection/components/salla-verify/salla-verify.css +12 -0
- package/dist/collection/components/salla-verify/salla-verify.js +59 -21
- package/dist/collection/components/salla-verify/salla-verify.js.map +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/index.js.map +1 -1
- package/dist/components/salla-filters-widget2.js +5 -27
- package/dist/components/salla-filters-widget2.js.map +1 -1
- package/dist/components/salla-filters.js +8 -4
- package/dist/components/salla-filters.js.map +1 -1
- package/dist/components/salla-login-modal.js +1 -1
- package/dist/components/salla-login-modal.js.map +1 -1
- package/dist/components/salla-maintenance-alert.js +14 -1
- package/dist/components/salla-maintenance-alert.js.map +1 -1
- package/dist/components/salla-price-range2.js +113 -43
- package/dist/components/salla-price-range2.js.map +1 -1
- package/dist/components/salla-products-list.js +85 -59
- package/dist/components/salla-products-list.js.map +1 -1
- package/dist/components/salla-products-slider.js +13 -5
- package/dist/components/salla-products-slider.js.map +1 -1
- package/dist/components/salla-verify2.js +60 -22
- package/dist/components/salla-verify2.js.map +1 -1
- package/dist/esm/{app-globals-663240cc.js → app-globals-3a81b4f2.js} +2 -2
- package/dist/esm/{app-globals-663240cc.js.map → app-globals-3a81b4f2.js.map} +1 -1
- package/dist/esm/loader.js +2 -2
- package/dist/esm/salla-add-product-button_40.entry.js +74 -24
- package/dist/esm/salla-add-product-button_40.entry.js.map +1 -1
- package/dist/esm/salla-filters-widget.entry.js +5 -27
- package/dist/esm/salla-filters-widget.entry.js.map +1 -1
- package/dist/esm/salla-filters.entry.js +8 -4
- package/dist/esm/salla-filters.entry.js.map +1 -1
- package/dist/esm/salla-price-range.entry.js +109 -37
- package/dist/esm/salla-price-range.entry.js.map +1 -1
- package/dist/esm/salla-products-list.entry.js +85 -59
- package/dist/esm/salla-products-list.entry.js.map +1 -1
- package/dist/esm/salla-products-slider.entry.js +12 -4
- package/dist/esm/salla-products-slider.entry.js.map +1 -1
- package/dist/esm/twilight.js +2 -2
- package/dist/esm-es5/{app-globals-663240cc.js → app-globals-3a81b4f2.js} +2 -2
- package/dist/{twilight/p-dcfa0f39.system.js.map → esm-es5/app-globals-3a81b4f2.js.map} +1 -1
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/loader.js.map +1 -1
- package/dist/esm-es5/salla-add-product-button_40.entry.js +4 -4
- package/dist/esm-es5/salla-add-product-button_40.entry.js.map +1 -1
- package/dist/esm-es5/salla-filters-widget.entry.js +1 -1
- package/dist/esm-es5/salla-filters-widget.entry.js.map +1 -1
- package/dist/esm-es5/salla-filters.entry.js +1 -1
- package/dist/esm-es5/salla-filters.entry.js.map +1 -1
- package/dist/esm-es5/salla-price-range.entry.js +2 -2
- package/dist/esm-es5/salla-price-range.entry.js.map +1 -1
- package/dist/esm-es5/salla-products-list.entry.js +2 -2
- package/dist/esm-es5/salla-products-list.entry.js.map +1 -1
- package/dist/esm-es5/salla-products-slider.entry.js +1 -1
- package/dist/esm-es5/salla-products-slider.entry.js.map +1 -1
- package/dist/esm-es5/twilight.js +1 -1
- package/dist/esm-es5/twilight.js.map +1 -1
- package/dist/twilight/{p-6948b825.js → p-1edec127.js} +2 -2
- package/dist/twilight/{p-6948b825.js.map → p-1edec127.js.map} +1 -1
- package/dist/twilight/{p-7c6638f5.system.entry.js → p-2739ddc5.system.entry.js} +2 -2
- package/dist/twilight/p-2739ddc5.system.entry.js.map +1 -0
- package/dist/twilight/p-3212e42c.entry.js +5 -0
- package/dist/twilight/p-3212e42c.entry.js.map +1 -0
- package/dist/twilight/{p-6404a9a5.system.js → p-37389934.system.js} +2 -2
- package/dist/twilight/{p-6404a9a5.system.js.map → p-37389934.system.js.map} +1 -1
- package/dist/twilight/{p-dcfa0f39.system.js → p-38496eab.system.js} +2 -2
- package/dist/{esm-es5/app-globals-663240cc.js.map → twilight/p-38496eab.system.js.map} +1 -1
- package/dist/twilight/p-3f03d17c.system.entry.js +5 -0
- package/dist/twilight/p-3f03d17c.system.entry.js.map +1 -0
- package/dist/twilight/p-46b7f931.system.entry.js +5 -0
- package/dist/twilight/p-46b7f931.system.entry.js.map +1 -0
- package/dist/twilight/p-54783694.system.entry.js +5 -0
- package/dist/twilight/p-54783694.system.entry.js.map +1 -0
- package/dist/twilight/{p-1e4abb42.system.entry.js → p-9a1231a6.system.entry.js} +2 -2
- package/dist/twilight/p-9a1231a6.system.entry.js.map +1 -0
- package/dist/twilight/{p-9713044b.entry.js → p-b766115a.entry.js} +2 -2
- package/dist/twilight/p-b766115a.entry.js.map +1 -0
- package/dist/twilight/p-cd5cb2f7.entry.js +5 -0
- package/dist/twilight/p-cd5cb2f7.entry.js.map +1 -0
- package/dist/twilight/p-d7a62fb3.system.entry.js +5 -0
- package/dist/twilight/p-d7a62fb3.system.entry.js.map +1 -0
- package/dist/twilight/p-def222e1.entry.js +5 -0
- package/dist/twilight/p-def222e1.entry.js.map +1 -0
- package/dist/twilight/p-e393f123.entry.js +5 -0
- package/dist/twilight/p-e393f123.entry.js.map +1 -0
- package/dist/twilight/p-e3dc0687.entry.js +5 -0
- package/dist/twilight/p-e3dc0687.entry.js.map +1 -0
- package/dist/twilight/twilight.esm.js +1 -1
- package/dist/twilight/twilight.esm.js.map +1 -1
- package/dist/twilight/twilight.js +1 -1
- package/dist/types/components/salla-filters-widget/salla-filters-widget.d.ts +0 -7
- package/dist/types/components/salla-login-modal/intefaces.d.ts +1 -0
- package/dist/types/components/salla-maintenance-alert/salla-maintenance-alert.d.ts +3 -0
- package/dist/types/components/salla-price-range/salla-price-range.d.ts +16 -10
- package/dist/types/components/salla-products-list/salla-products-list.d.ts +2 -2
- package/dist/types/components/salla-products-slider/salla-products-slider.d.ts +5 -1
- package/dist/types/components/salla-verify/salla-verify.d.ts +6 -1
- package/dist/types/components.d.ts +14 -8
- package/package.json +4 -4
- package/dist/twilight/p-1e4abb42.system.entry.js.map +0 -1
- package/dist/twilight/p-3b1a0059.entry.js +0 -5
- package/dist/twilight/p-3b1a0059.entry.js.map +0 -1
- package/dist/twilight/p-41b3e09d.entry.js +0 -5
- package/dist/twilight/p-41b3e09d.entry.js.map +0 -1
- package/dist/twilight/p-4a743b5e.system.entry.js +0 -5
- package/dist/twilight/p-4a743b5e.system.entry.js.map +0 -1
- package/dist/twilight/p-62c1b309.entry.js +0 -5
- package/dist/twilight/p-62c1b309.entry.js.map +0 -1
- package/dist/twilight/p-6349125a.entry.js +0 -5
- package/dist/twilight/p-6349125a.entry.js.map +0 -1
- package/dist/twilight/p-7c6638f5.system.entry.js.map +0 -1
- package/dist/twilight/p-8ee37cc6.entry.js +0 -5
- package/dist/twilight/p-8ee37cc6.entry.js.map +0 -1
- package/dist/twilight/p-9713044b.entry.js.map +0 -1
- package/dist/twilight/p-9e27da8e.system.entry.js +0 -5
- package/dist/twilight/p-9e27da8e.system.entry.js.map +0 -1
- package/dist/twilight/p-b1f8b436.system.entry.js +0 -5
- package/dist/twilight/p-b1f8b436.system.entry.js.map +0 -1
- package/dist/twilight/p-c9cdaea6.system.entry.js +0 -5
- package/dist/twilight/p-c9cdaea6.system.entry.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"salla-products-list.js","sourceRoot":"","sources":["../../../src/components/salla-products-list/salla-products-list.tsx"],"names":[],"mappings":"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","sourcesContent":["import {Component, Host, h, Prop, State, Element, Method} from '@stencil/core';\nimport anime from 'animejs';\nimport ShoppingBag from '../../assets/svg/shopping-bag.svg';\n\n@Component({\n tag: 'salla-products-list',\n styleUrl: 'salla-products-list.scss'\n})\nexport class SallaProductsList {\n constructor() {\n salla.onReady(() => {\n this.hasCustomComponent = !!customElements.get('custom-salla-product-card');\n this.sourceValueIsValid = !!(this.getSourceValue() || this.isSourceWithoutValue());\n this.hasInfiniteScroll = !['json', 'selected', 'related', 'landing-page'].includes(this.getSource());\n\n this.buildNextPageUrl();\n this.createStatusDom();\n this.isReady = true;\n });\n\n if (!this.sourceValueIsValid) {\n salla.logger.warn(`source-value prop is required for source [${this.getSource()}]`);\n return;\n }\n salla.event.on('salla-filters::changed', filters => this.setFilters(filters))\n }\n\n connectedCallback() {\n try {\n let searchParams = new URLSearchParams(window.location.search);\n this.sortBy = this.sortBy || searchParams.get('sort') || searchParams.get('by');\n let filters = searchParams.get('filters')\n this.parsedFilters = filters ? JSON.parse(decodeURIComponent(filters)) : {};\n } catch (e) {\n salla.logger.warn('failed to get filters from url', e.message);\n }\n }\n\n @Method()\n async setFilters(filters) {\n this.parsedFilters = filters;\n return this.reload();\n }\n\n\n @Method()\n async reload() {\n this.buildNextPageUrl();\n this.wrapper.innerHTML = '';\n this.init();\n }\n\n\n private status: HTMLDivElement;\n private btnLoader: HTMLAnchorElement;\n @Element() host: HTMLElement;\n private wrapper: any;\n private infiniteScroll: any;\n /**\n * The source of the products list\n * @type {string}\n * */\n @Prop({\n reflect: true,\n mutable: true\n }) source: 'categories' | 'latest' | 'related' | 'brands' | 'json' | 'search' | 'tags' | 'selected' | 'offers' | 'landing-page' | 'sales';\n\n /**\n * The source value, cloud be different values as following:\n * - array of ids when `source` in ['categories', 'brands', 'tags', 'selected']\n * - keyword when `source` = 'search'\n * - products payload when `source` = 'json'\n * - product_id when `source` = 'related'\n *\n * @type {string}\n * */\n @Prop({mutable: true}) sourceValue: any;\n\n /**\n * Limit for number of products in the list.\n */\n @Prop({mutable: true}) limit: number;\n\n /**\n * Sorting the list of products\n */\n @Prop({mutable: true}) sortBy?: string | 'ourSuggest' | 'bestSell' | 'topRated' | 'priceFromTopToLow' | 'priceFromLowToTop';\n\n /**\n * should listen to filters events `salla-filters::changed` and re-render\n */\n @Prop({reflect: true, mutable: true}) filtersResults: boolean;\n\n /**\n * Horizontal cards\n */\n @Prop({reflect: true}) horizontalCards: boolean\n\n // State\n @State() page: number = 1;\n @State() nextPage: string;\n @State() hasInfiniteScroll: boolean;\n @State() hasCustomComponent: boolean;\n @State() sourceValueIsValid: boolean;\n @State() placeholderText: string;\n @State() isReady: boolean;\n @State() showPlaceholder: boolean;\n @State() parsedFilters: any;\n\n private isFilterable() {\n return salla.config.get('store.settings.product.filters') && this.filtersResults;\n }\n\n private isSourceWithoutValue() {\n return ['offers', 'latest', 'sales'].includes(this.getSource());\n }\n\n private animateItems() {\n anime({\n targets: 'salla-products-list salla-product-card',\n opacity: [0, 1],\n duration: 1200,\n translateY: [20, 0],\n delay: function (_el, i) {\n return i * 100;\n },\n })\n }\n\n private createStatusDom() {\n this.status = document.createElement('div');\n this.status.className = 's-infinite-scroll-wrapper';\n this.status.innerHTML = `<div class=\"s-infinite-scroll-status\">\n <p class=\"s-infinite-scroll-last infinite-scroll-last s-hidden\" >${salla.lang.get('common.elements.end_of_content')}</p>\n <p class=\"s-infinite-scroll-error infinite-scroll-error s-hidden\">${salla.lang.get('common.elements.failed_to_load_more')}</p>\n </div>\n <a href=\"#\" class=\"s-infinite-scroll-btn s-button-btn\">\n <span class=\"s-button-loader s-button-loader-center s-infinite-scroll-btn-loader\" style=\"display: none\"></span>\n </a>`;\n this.btnLoader = this.status.querySelector('.s-button-loader');\n salla.lang.onLoaded(() => {\n this.status.querySelector('.s-infinite-scroll-last').innerHTML = salla.lang.get('common.elements.end_of_content');\n this.status.querySelector('.s-infinite-scroll-error').innerHTML = salla.lang.get('common.elements.failed_to_load_more');\n this.placeholderText = salla.lang.get('pages.categories.no_products');\n });\n }\n\n private buildNextPageUrl() {\n let source = this.getSource();\n if (source === 'json') {\n return;\n }\n let urlPrefix = this.getUrlPrefix();\n if (this.isSourceWithoutValue()) {\n this.nextPage = salla.url.api(`products?source=${source}${urlPrefix}`);\n return;\n }\n\n if (['search', 'related', 'landing-page'].includes(source)) {\n this.nextPage = salla.url.api(`products?source=${source}&source_value=${this.getSourceValue()}${urlPrefix}`);\n return;\n }\n\n try {\n this.nextPage = salla.url.api(`products?source=${source}&source_value[]=${this.getSourceValue().join('&source_value[]=')}${urlPrefix}`);\n } catch (e) {\n salla.logger.warn(`source-value prop should be array of ids ex source-value=\"[1,2,3]\" for the source [${source}]`);\n this.sourceValueIsValid = false;\n }\n }\n\n private getUrlPrefix() {\n let urlPrefix = '';\n if (this.limit) {\n urlPrefix = `&per_page=${this.limit > 32 ? 32 : this.limit}`;\n }\n if (this.sortBy) {\n urlPrefix = `&sort=${this.sortBy}`;\n }\n if (!this.isFilterable()) {\n return urlPrefix;\n }\n urlPrefix += '&filterable=1';\n for (const [key, value] of Object.entries(this.parsedFilters || {})) {\n if (typeof value == \"string\") {\n urlPrefix += `&filters[${key}]=${value}`;\n } else if (Array.isArray(value)) {\n (value as any).forEach(item => {\n urlPrefix += `&filters[${key}][]=${item}}`\n })\n }\n }\n return urlPrefix;\n }\n\n private getSource() {\n return {\n 'brands.single': 'brands',\n 'product.index': 'categories',\n 'product.index.latest': 'latest',\n 'product.index.offers': 'offers',\n 'product.index.search': 'search',\n 'landing-page': 'landing-page',\n 'product.index.tag': 'tags',\n 'product.index.sales': 'sales',\n 'components.most_sales_products': 'sales',//temporary, delete it after two days from now\n }[this.source || salla.config.get('page.slug')] || this.source || 'latest';\n }\n\n private getSourceValue() {\n let source = this.getSource();\n\n //todo:: enhance this code, it call JSON.parse too many times.\n if (!['search', 'json', 'offers', 'latest', 'sales'].includes(source)) {\n if (this.sourceValue && Array.isArray(JSON.parse(this.sourceValue)) && JSON.parse(this.sourceValue).length) {\n return JSON.parse(this.sourceValue);\n }\n\n if (this.sourceValue && typeof JSON.parse(this.sourceValue) == 'number') {\n return [JSON.parse(this.sourceValue)];\n }\n if (!this.sourceValue && ['categories', 'tags', 'brands', 'landing-page'].includes(this.getSource())) {\n return [salla.config.get('page.id')];\n }\n }\n\n if (this.sourceValue) {\n return this.sourceValue;\n }\n\n\n if (source === 'search') {\n return (new URLSearchParams(window.location.search)).get('q');\n }\n\n return salla.config.get('page.id');\n }\n\n\n private loading(isLoading = true) {\n this.btnLoader.style.display = isLoading ? 'inherit' : 'none';\n }\n\n private getItemHTML(product) {\n let customComponentTag: string = this.hasCustomComponent ? 'custom-salla-product-card' : 'salla-product-card';\n let customComponent: HTMLSallaProductCardElement = document.createElement(customComponentTag) as HTMLSallaProductCardElement;\n customComponent.product = product;\n // customComponent.setAttribute('product', JSON.stringify(product));\n if (this.getSource() == 'landing-page' && !this.hasCustomComponent) {\n customComponent.toggleAttribute('hide-add-btn', true);\n customComponent.classList.add('s-product-card-fit-height');\n }\n if (this.horizontalCards && !this.hasCustomComponent) {\n customComponent.toggleAttribute('horizontal', true);\n }\n customComponent.toggleAttribute('shadow-on-hover', true);\n return customComponent;\n }\n\n private initiateInfiniteScroll() {\n if (!this.hasInfiniteScroll) {\n return;\n }\n\n this.host.insertAdjacentElement('beforeend', this.status);\n this.infiniteScroll = salla.infiniteScroll.initiate(this.wrapper, this.wrapper, {\n path: () => this.nextPage,\n history: false,\n nextPage: this.nextPage,\n scrollThreshold: 100,\n }, /* infinite via api*/true);\n this.infiniteScroll.on('request', () => this.loading())\n this.infiniteScroll.on('load', response => this.infiniteScroll.appendItems(this.handleResponse(response)))\n this.infiniteScroll.on('error', () => {\n this.status.querySelector('.s-infinite-scroll-error').classList.remove('s-hidden')\n this.loading(false);\n });\n }\n\n private canRender() {\n return this.sourceValueIsValid && this.isReady;\n }\n\n render() {\n if (!this.canRender()) {\n return '';\n }\n if (this.showPlaceholder) {\n return <div class=\"s-products-list-placeholder\">\n <span innerHTML={ShoppingBag}/>\n <p>{this.placeholderText}</p>\n </div>;\n }\n return (\n <Host class=\"s-products-list\">\n <div class={{\n \"s-products-list-wrapper\": true,\n 's-products-list-horizontal-cards': this.horizontalCards && !this.filtersResults,\n 's-products-list-vertical-cards': !this.horizontalCards && !this.filtersResults,\n 's-products-list-filters-results': this.filtersResults,\n }}\n ref={wrapper => this.wrapper = wrapper}/>\n </Host>\n );\n }\n\n componentDidLoad() {\n if (!this.canRender()) {\n return;\n }\n if (this.getSource() === 'json') {\n if (!this.getSourceValue().length) {\n this.showPlaceholder = true;\n return;\n }\n this.getSourceValue().map(product => this.wrapper.append(this.getItemHTML(product)));\n return;\n }\n this.init();\n }\n\n private init() {\n this.initiateInfiniteScroll();\n this.loading();\n salla.product.fetch({\n source: this.getSource(),\n source_value: this.getSourceValue(),\n filters: this.parsedFilters,\n limit: this.limit,\n filterable: this.isFilterable() ? 1 : 0,\n sort: this.sortBy,\n })\n .then(res => {\n if (!res.data?.length) {\n this.showPlaceholder = true;\n this.loading(false);\n return;\n }\n this.handleResponse(res).forEach(card => this.wrapper.append(card));\n this.animateItems();\n })\n }\n\n private handleResponse(response): Array<HTMLElement> {\n //💡 when source is related, cursor will not be existed\n if (response.filters && this.isFilterable()) {\n salla.event.emit('filters::fetched', {filters: response.filters});\n } else if (this.isFilterable()) {\n salla.event.emit('filters::hidden');\n }\n this.nextPage = response.cursor ? response.cursor.next : this.nextPage;\n this.loading(false);\n if (this.hasInfiniteScroll && !this.nextPage) {\n this.infiniteScroll.option({scrollThreshold: false, loadOnScroll: false});\n this.status.querySelector('.s-infinite-scroll-last').classList.remove('s-hidden');\n }\n return response.data?.map(product => this.getItemHTML(product)) || [];\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"salla-products-list.js","sourceRoot":"","sources":["../../../src/components/salla-products-list/salla-products-list.tsx"],"names":[],"mappings":"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","sourcesContent":["import {Component, Host, h, Prop, State, Element, Method} from '@stencil/core';\nimport anime from 'animejs';\nimport ShoppingBag from '../../assets/svg/shopping-bag.svg';\n\n@Component({\n tag: 'salla-products-list',\n styleUrl: 'salla-products-list.scss'\n})\nexport class SallaProductsList {\n connectedCallback() {\n salla.onReady(() => {\n this.hasCustomComponent = !!customElements.get('custom-salla-product-card');\n this.sourceValueIsValid = !!(this.getSourceValue() || this.isSourceWithoutValue());\n this.hasInfiniteScroll = !['json', 'selected', 'related', 'landing-page'].includes(this.getSource());\n try {\n let searchParams = new URLSearchParams(window.location.search);\n this.sortBy = this.sortBy || searchParams.get('sort') || searchParams.get('by');\n let filters = searchParams.get('filters')\n this.parsedFilters = filters ? JSON.parse(decodeURIComponent(filters)) : {};\n } catch (e) {\n salla.logger.warn('failed to get filters from url', e.message);\n }\n this.buildNextPageUrl();\n this.createStatusDom();\n\n this.isReady = true;\n });\n\n if (!this.sourceValueIsValid) {\n salla.logger.warn(`source-value prop is required for source [${this.getSource()}]`);\n return;\n }\n salla.event.on('salla-filters::changed', filters => this.setFilters(filters))\n\n\n }\n\n @Method()\n async setFilters(filters) {\n this.parsedFilters = filters;\n return this.reload();\n }\n\n\n @Method()\n async reload() {\n salla.infiniteScroll.destroy(this.infiniteScroll);\n this.buildNextPageUrl();\n this.wrapper.innerHTML = '';\n this.init();\n }\n\n\n private status: HTMLDivElement;\n private btnLoader: HTMLAnchorElement;\n @Element() host: HTMLElement;\n private wrapper: any;\n private infiniteScroll: any;\n /**\n * The source of the products list\n * @type {string}\n * */\n @Prop({\n reflect: true,\n mutable: true\n }) source: 'categories' | 'latest' | 'related' | 'brands' | 'json' | 'search' | 'tags' | 'selected' | 'offers' | 'landing-page' | 'sales';\n\n /**\n * The source value, cloud be different values as following:\n * - array of ids when `source` in ['categories', 'brands', 'tags', 'selected']\n * - keyword when `source` = 'search'\n * - products payload when `source` = 'json'\n * - product_id when `source` = 'related'\n *\n * @type {string}\n * */\n @Prop({mutable: true}) sourceValue: any;\n\n /**\n * Limit for number of products in the list.\n */\n @Prop({mutable: true}) limit: number;\n\n /**\n * Sorting the list of products\n */\n @Prop({mutable: true}) sortBy?: string | 'ourSuggest' | 'bestSell' | 'topRated' | 'priceFromTopToLow' | 'priceFromLowToTop';\n\n /**\n * should listen to filters events `salla-filters::changed` and re-render\n */\n @Prop({reflect: true, mutable: true}) filtersResults: boolean;\n\n /**\n * Horizontal cards\n */\n @Prop({reflect: true}) horizontalCards: boolean\n\n // State\n @State() page: number = 1;\n @State() nextPage: string;\n @State() hasInfiniteScroll: boolean;\n @State() hasCustomComponent: boolean;\n @State() sourceValueIsValid: boolean;\n @State() placeholderText: string;\n @State() isReady: boolean;\n @State() showPlaceholder: boolean;\n @State() parsedFilters: any;\n\n private isFilterable() {\n return salla.config.get('store.settings.product.filters') && this.filtersResults;\n }\n\n private isSourceWithoutValue() {\n return ['offers', 'latest', 'sales'].includes(this.getSource());\n }\n\n private animateItems() {\n anime({\n targets: 'salla-products-list salla-product-card',\n opacity: [0, 1],\n duration: 1200,\n translateY: [20, 0],\n delay: function (_el, i) {\n return i * 100;\n },\n })\n }\n\n private createStatusDom() {\n this.status = document.createElement('div');\n this.status.className = 's-infinite-scroll-wrapper';\n this.status.innerHTML = `<div class=\"s-infinite-scroll-status\">\n <p class=\"s-infinite-scroll-last infinite-scroll-last s-hidden\" >${salla.lang.get('common.elements.end_of_content')}</p>\n <p class=\"s-infinite-scroll-error infinite-scroll-error s-hidden\">${salla.lang.get('common.elements.failed_to_load_more')}</p>\n </div>\n <a href=\"#\" class=\"s-infinite-scroll-btn s-button-btn\">\n <span class=\"s-button-loader s-button-loader-center s-infinite-scroll-btn-loader\" style=\"display: none\"></span>\n </a>`;\n this.btnLoader = this.status.querySelector('.s-button-loader');\n salla.lang.onLoaded(() => {\n this.status.querySelector('.s-infinite-scroll-last').innerHTML = salla.lang.get('common.elements.end_of_content');\n this.status.querySelector('.s-infinite-scroll-error').innerHTML = salla.lang.get('common.elements.failed_to_load_more');\n this.placeholderText = salla.lang.get('pages.categories.no_products');\n });\n }\n\n private initBaseNextPageUrl(source: string) {\n\n this.nextPage = salla.url.api(`products?source=${source}`);\n\n if (this.limit) {\n this.nextPage += `&per_page=${this.limit > 32 ? 32 : this.limit}`;\n }\n if (this.sortBy) {\n this.nextPage += `&sort=${this.sortBy}`;\n }\n // if (!this.isFilterable()) {\n // return this.nextPage;\n // }\n this.nextPage += '&filterable=1';\n for (const [key, value] of Object.entries(this.parsedFilters || {})) {\n if ([\"string\", \"number\"].includes(typeof value)) {\n this.nextPage += `&filters[${key}]=${value}`;\n } else if (Array.isArray(value)) {\n (value as any).forEach(item => this.nextPage += `&filters[${key}][]=${item}`)\n } else if (typeof value === 'object') {\n for (const [k, v] of Object.entries(value)) {\n this.nextPage += `&filters[${key}][${k}]=${v}`;\n }\n }\n }\n }\n\n private buildNextPageUrl() {\n let source = this.getSource();\n if (source === 'json') {\n return;\n }\n this.initBaseNextPageUrl(source);\n if (this.isSourceWithoutValue()) {\n return;\n }\n\n if (['search', 'related', 'landing-page'].includes(source)) {\n this.nextPage += `&source_value=${this.getSourceValue()}`;\n return;\n }\n\n try {\n this.nextPage += `&source_value[]=${this.getSourceValue().join('&source_value[]=')}`;\n } catch (e) {\n salla.logger.warn(`source-value prop should be array of ids ex source-value=\"[1,2,3]\" for the source [${source}]`);\n this.sourceValueIsValid = false;\n }\n }\n\n private getSource() {\n return {\n 'brands.single': 'brands',\n 'product.index': 'categories',\n 'product.index.latest': 'latest',\n 'product.index.offers': 'offers',\n 'product.index.search': 'search',\n 'landing-page': 'landing-page',\n 'product.index.tag': 'tags',\n 'product.index.sales': 'sales',\n 'components.most_sales_products': 'sales',//temporary, delete it after two days from now\n }[this.source || salla.config.get('page.slug')] || this.source || 'latest';\n }\n\n private getSourceValue() {\n let source = this.getSource();\n\n //todo:: enhance this code, it call JSON.parse too many times.\n if (!['search', 'json', 'offers', 'latest', 'sales'].includes(source)) {\n if (this.sourceValue && Array.isArray(JSON.parse(this.sourceValue)) && JSON.parse(this.sourceValue).length) {\n return JSON.parse(this.sourceValue);\n }\n\n if (this.sourceValue && typeof JSON.parse(this.sourceValue) == 'number') {\n return [JSON.parse(this.sourceValue)];\n }\n if (!this.sourceValue && ['categories', 'tags', 'brands', 'landing-page'].includes(this.getSource())) {\n return [salla.config.get('page.id')];\n }\n }\n\n if (this.sourceValue) {\n return this.sourceValue;\n }\n\n\n if (source === 'search') {\n return (new URLSearchParams(window.location.search)).get('q');\n }\n\n return salla.config.get('page.id');\n }\n\n\n private loading(isLoading = true) {\n this.btnLoader.style.display = isLoading ? 'inherit' : 'none';\n }\n\n private getItemHTML(product) {\n let customComponentTag: string = this.hasCustomComponent ? 'custom-salla-product-card' : 'salla-product-card';\n let customComponent: HTMLSallaProductCardElement = document.createElement(customComponentTag) as HTMLSallaProductCardElement;\n customComponent.product = product;\n // customComponent.setAttribute('product', JSON.stringify(product));\n if (this.getSource() == 'landing-page' && !this.hasCustomComponent) {\n customComponent.toggleAttribute('hide-add-btn', true);\n customComponent.classList.add('s-product-card-fit-height');\n }\n if (this.horizontalCards && !this.hasCustomComponent) {\n customComponent.toggleAttribute('horizontal', true);\n customComponent.toggleAttribute('shadow-on-hover', true);\n }\n return customComponent;\n }\n\n private fetchProducts() {\n salla.product.fetch({\n source: this.getSource(),\n source_value: this.getSourceValue(),\n limit: this.limit\n })\n .then(res => {\n if (!res.data.length) {\n this.showPlaceholder = true;\n this.loading(false);\n return;\n }\n this.handleResponse(res).forEach(card => this.wrapper.append(card));\n })\n }\n \n private initiateInfiniteScroll() {\n if (!this.hasInfiniteScroll) {\n return;\n }\n\n this.host.insertAdjacentElement('beforeend', this.status);\n this.infiniteScroll = salla.infiniteScroll.initiate(this.wrapper, this.wrapper, {\n path: () => this.nextPage,\n history: false,\n nextPage: this.nextPage,\n scrollThreshold: 100,\n }, /* infinite via api*/true);\n this.infiniteScroll.on('request', () => this.loading())\n this.infiniteScroll.on('load', response => {\n if (!response.data?.length) {\n this.showPlaceholder = true;\n salla.infiniteScroll.destroy(this.infiniteScroll);\n this.loading(false);\n return;\n }else{\n this.showPlaceholder = false;\n\n }\n this.infiniteScroll.appendItems(this.handleResponse(response))\n if (this.infiniteScroll.pageIndex == 2) {\n this.animateItems();\n }\n })\n this.infiniteScroll.on('error', () => {\n this.status.querySelector('.s-infinite-scroll-error').classList.remove('s-hidden')\n this.loading(false);\n });\n salla.onReady(() => salla.infiniteScroll.loadNextPage(this.infiniteScroll))\n }\n\n private canRender() {\n return this.sourceValueIsValid && this.isReady;\n }\n\n render() {\n if (!this.canRender()) {\n return '';\n }\n if (this.showPlaceholder) {\n return <div class=\"s-products-list-placeholder\">\n <span innerHTML={ShoppingBag}/>\n <p>{this.placeholderText}</p>\n </div>;\n }\n return (\n <Host class=\"s-products-list\">\n <div class={{\n \"s-products-list-wrapper\": true,\n 's-products-list-horizontal-cards': this.horizontalCards && !this.filtersResults,\n 's-products-list-vertical-cards': !this.horizontalCards && !this.filtersResults,\n 's-products-list-filters-results': this.filtersResults,\n }}\n ref={wrapper => this.wrapper = wrapper}/>\n </Host>\n );\n }\n\n componentDidLoad() {\n if (!this.canRender()) {\n return;\n }\n\n // Handle json source\n if (this.getSource() === 'json') {\n if (!this.getSourceValue().length) {\n this.showPlaceholder = true;\n return;\n }\n this.getSourceValue().map(product => this.wrapper.append(this.getItemHTML(product)));\n return;\n }\n // Handle selected source\n if (this.getSource() === 'selected') {\n if (!this.getSourceValue().length) {\n this.showPlaceholder = true;\n return;\n }\n this.fetchProducts()\n return;\n }\n this.init();\n }\n\n private init() {\n this.initiateInfiniteScroll();\n this.loading();\n }\n\n private handleResponse(response): Array<HTMLElement> {\n //💡 when source is related, cursor will not be existed\n if (response.filters && this.isFilterable()) {\n this.filtersResults = true;\n salla.event.emit('filters::fetched', {filters: response.filters});\n } else if (this.isFilterable()) {\n salla.event.emit('filters::hidden');\n }\n this.nextPage = response.cursor ? response.cursor.next : this.nextPage;\n this.loading(false);\n if (this.hasInfiniteScroll && !this.nextPage) {\n this.infiniteScroll.option({scrollThreshold: false, loadOnScroll: false});\n this.status.querySelector('.s-infinite-scroll-last').classList.remove('s-hidden');\n }\n return response.data?.map(product => this.getItemHTML(product)) || [];\n }\n}\n"]}
|
|
@@ -10,11 +10,11 @@ export class SallaProductsSlider {
|
|
|
10
10
|
this.displayAllUrl = undefined;
|
|
11
11
|
this.source = undefined;
|
|
12
12
|
this.sourceValue = undefined;
|
|
13
|
+
this.limit = undefined;
|
|
13
14
|
this.productsData = undefined;
|
|
14
15
|
this.isReady = undefined;
|
|
15
16
|
this.sourceValueIsValid = undefined;
|
|
16
17
|
this.hasCustomComponent = undefined;
|
|
17
|
-
this.urlPrefix = '';
|
|
18
18
|
this.apiUrl = '';
|
|
19
19
|
this.parsedSourceValue = undefined;
|
|
20
20
|
salla.onReady(() => {
|
|
@@ -32,18 +32,26 @@ export class SallaProductsSlider {
|
|
|
32
32
|
}
|
|
33
33
|
return h("div", { class: "s-products-slider-card" }, h("salla-product-card", { "show-quantity": this.getSource() == 'landing-page', "hide-add-btn": this.getSource() == 'landing-page', "shadow-on-hover": true, product: product }));
|
|
34
34
|
}
|
|
35
|
+
getUrlPrefix() {
|
|
36
|
+
let urlPrefix = '';
|
|
37
|
+
if (this.limit) {
|
|
38
|
+
urlPrefix = `&per_page=${this.limit > 32 ? 32 : this.limit}`;
|
|
39
|
+
}
|
|
40
|
+
return urlPrefix;
|
|
41
|
+
}
|
|
35
42
|
getApiUrl() {
|
|
36
43
|
if (this.getSource() === 'json') {
|
|
37
44
|
return;
|
|
38
45
|
}
|
|
46
|
+
let prefixes = this.getUrlPrefix();
|
|
39
47
|
if (['offers', 'latest'].includes(this.getSource())) {
|
|
40
|
-
return salla.url.api(`products?source=${this.getSource()}${
|
|
48
|
+
return salla.url.api(`products?source=${this.getSource()}${prefixes}`);
|
|
41
49
|
}
|
|
42
50
|
if (['related', 'landing-page'].includes(this.getSource())) {
|
|
43
|
-
return salla.url.api(`products?source=${this.getSource()}&source_value=${this.getSourceValue()}${
|
|
51
|
+
return salla.url.api(`products?source=${this.getSource()}&source_value=${this.getSourceValue()}${prefixes}`);
|
|
44
52
|
}
|
|
45
53
|
try {
|
|
46
|
-
return salla.url.api(`products?source=${this.getSource()}&source_value[]=${this.getSourceValue().join('&source_value[]=')}${
|
|
54
|
+
return salla.url.api(`products?source=${this.getSource()}&source_value[]=${this.getSourceValue().join('&source_value[]=')}${prefixes}`);
|
|
47
55
|
}
|
|
48
56
|
catch (e) {
|
|
49
57
|
salla.logger.warn(`source-value prop should be array of ids ex source-value="[1,2,3]" for the source [${this.getSource()}]`);
|
|
@@ -240,6 +248,23 @@ export class SallaProductsSlider {
|
|
|
240
248
|
},
|
|
241
249
|
"attribute": "source-value",
|
|
242
250
|
"reflect": false
|
|
251
|
+
},
|
|
252
|
+
"limit": {
|
|
253
|
+
"type": "number",
|
|
254
|
+
"mutable": true,
|
|
255
|
+
"complexType": {
|
|
256
|
+
"original": "number",
|
|
257
|
+
"resolved": "number",
|
|
258
|
+
"references": {}
|
|
259
|
+
},
|
|
260
|
+
"required": false,
|
|
261
|
+
"optional": false,
|
|
262
|
+
"docs": {
|
|
263
|
+
"tags": [],
|
|
264
|
+
"text": "Limit for number of products in the list."
|
|
265
|
+
},
|
|
266
|
+
"attribute": "limit",
|
|
267
|
+
"reflect": false
|
|
243
268
|
}
|
|
244
269
|
};
|
|
245
270
|
}
|
|
@@ -249,7 +274,6 @@ export class SallaProductsSlider {
|
|
|
249
274
|
"isReady": {},
|
|
250
275
|
"sourceValueIsValid": {},
|
|
251
276
|
"hasCustomComponent": {},
|
|
252
|
-
"urlPrefix": {},
|
|
253
277
|
"apiUrl": {},
|
|
254
278
|
"parsedSourceValue": {}
|
|
255
279
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"salla-products-slider.js","sourceRoot":"","sources":["../../../src/components/salla-products-slider/salla-products-slider.tsx"],"names":[],"mappings":"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","sourcesContent":["import {Component, Host, h, Prop, Element, State} from '@stencil/core';\n\n@Component({\n tag: 'salla-products-slider',\n styleUrl: 'salla-products-slider.scss'\n})\nexport class SallaProductsSlider {\n constructor() {\n salla.onReady(() => {\n this.sourceValueIsValid = !!(this.sourceValue || ['latest', 'offers'].includes(this.getSource()));\n });\n if (!this.sourceValueIsValid) {\n salla.logger.warn(`source-value prop is required for source [${this.getSource()}]`);\n return;\n }\n this.hasCustomComponent = !!customElements.get('custom-salla-product-card');\n }\n\n @Element() host: HTMLElement;\n //todo:: support limit, default =10, make sure that maximum is 32,\n\n /**\n * Title of the block - works only if slider is true\n * @type {string}\n * @default ''\n * */\n @Prop() blockTitle: string;\n\n /**\n * Sub title of the block - works only if slider is true\n * @type {string}\n * @default ''\n * */\n @Prop() subTitle: string;\n\n /**\n * Slider Id, if not provided will be generated automatically\n * @type {string}\n * @default ''\n * */\n @Prop() sliderId: string;\n\n /**\n * Display 'ALL' URL\n * @type {string}\n * @default ''\n * */\n @Prop() displayAllUrl: string;\n\n /**\n * Source of the products, if api will get the products from the API, if json will get the products from the products prop\n * @type {string}\n * @default ''\n * */\n @Prop({\n reflect: true,\n mutable: true\n }) source: 'categories' | 'latest' | 'related' | 'brands' | 'json' | 'tags' | 'selected' | 'offers' | 'landing-page';\n\n /**\n * The source value, cloud be different values as following:\n * - array of ids when `source` in ['categories', 'brands', 'tags', 'selected']\n * - products payload when `source` = 'json'\n * - product_id when `source` = 'related'\n *\n * @type {string}\n * */\n @Prop() sourceValue: string;\n @State() productsData: any;\n @State() isReady: boolean;\n @State() sourceValueIsValid: boolean;\n @State() hasCustomComponent: boolean;\n @State() urlPrefix: string = '';\n @State() apiUrl: string = '';\n @State() parsedSourceValue: any;\n\n private getItemHTML(product) {\n if (this.hasCustomComponent) {\n return <div class=\"s-products-slider-card\">\n <custom-salla-product-card product={product} source={this.getSource()} source-value={this.getSourceValue()}/>\n </div>;\n }\n\n return <div class=\"s-products-slider-card\">\n <salla-product-card\n show-quantity={this.getSource() == 'landing-page'}\n hide-add-btn={this.getSource() == 'landing-page'}\n shadow-on-hover={true}\n product={product}/>\n </div>;\n }\n\n getApiUrl() {\n if (this.getSource() === 'json') {\n return;\n }\n if (['offers', 'latest'].includes(this.getSource())) {\n return salla.url.api(`products?source=${this.getSource()}${this.urlPrefix}`);\n }\n if (['related', 'landing-page'].includes(this.getSource())) {\n return salla.url.api(`products?source=${this.getSource()}&source_value=${this.getSourceValue()}${this.urlPrefix}`);\n }\n\n try {\n return salla.url.api(`products?source=${this.getSource()}&source_value[]=${this.getSourceValue().join('&source_value[]=')}${this.urlPrefix}`);\n } catch (e) {\n salla.logger.warn(`source-value prop should be array of ids ex source-value=\"[1,2,3]\" for the source [${this.getSource()}]`);\n this.sourceValueIsValid = false;\n }\n }\n private getSource(){\n return {\n 'brands.single': 'brands',\n 'product.index': 'categories',\n 'product.index.latest': 'latest',\n 'product.index.offers': 'offers',\n 'product.index.search': 'search',\n 'landing-page': 'landing-page',\n 'product.index.tag': 'tags',\n }[this.source || salla.config.get('page.slug')] || this.source ||'latest';\n }\n\n private getSourceValue() {\n if (!['search', 'json'].includes(this.getSource())) {\n if (Array.isArray(JSON.parse(this.sourceValue)) && JSON.parse(this.sourceValue).length) {\n return JSON.parse(this.sourceValue);\n }\n\n if (typeof JSON.parse(this.sourceValue) == 'number') {\n return [JSON.parse(this.sourceValue)];\n }\n }\n return this.sourceValue || salla.config.get('page.id');\n }\n private canRender() {\n return this.sourceValueIsValid && this.isReady;\n }\n\n componentWillLoad() {\n if (this.source === 'json') {\n this.productsData = this.getSourceValue();\n this.isReady = true\n return;\n }\n salla.api.request(this.getApiUrl(), null, 'get').then(res => {\n this.productsData = res.data\n this.isReady = true\n })\n }\n\n render() {\n if ((this.getSource() == 'related' && !salla.config.get('store.settings.product.related_products_enabled')) || !this.canRender()) {\n return;\n }\n return (\n <Host class=\"s-products-slider-wrapper\">\n <salla-slider\n class=\"s-products-slider-slider\"\n id={this.sliderId || `s-products-slider-${Math.random().toString(36).substr(2, 9)}`}\n type=\"carousel\"\n block-title={this.blockTitle}\n block-subTitle={this.subTitle}\n display-all-url={this.displayAllUrl}\n >\n <div slot=\"items\">\n {this.productsData?.map((product) =>\n this.getItemHTML(product)\n )}\n </div>\n </salla-slider>\n </Host>\n );\n }\n\n}\n"]}
|
|
1
|
+
{"version":3,"file":"salla-products-slider.js","sourceRoot":"","sources":["../../../src/components/salla-products-slider/salla-products-slider.tsx"],"names":[],"mappings":"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","sourcesContent":["import {Component, Host, h, Prop, Element, State} from '@stencil/core';\n\n@Component({\n tag: 'salla-products-slider',\n styleUrl: 'salla-products-slider.scss'\n})\nexport class SallaProductsSlider {\n constructor() {\n salla.onReady(() => {\n this.sourceValueIsValid = !!(this.sourceValue || ['latest', 'offers'].includes(this.getSource()));\n });\n if (!this.sourceValueIsValid) {\n salla.logger.warn(`source-value prop is required for source [${this.getSource()}]`);\n return;\n }\n this.hasCustomComponent = !!customElements.get('custom-salla-product-card');\n }\n\n @Element() host: HTMLElement;\n //todo:: support limit, default =10, make sure that maximum is 32,\n\n /**\n * Title of the block - works only if slider is true\n * @type {string}\n * @default ''\n * */\n @Prop() blockTitle: string;\n\n /**\n * Sub title of the block - works only if slider is true\n * @type {string}\n * @default ''\n * */\n @Prop() subTitle: string;\n\n /**\n * Slider Id, if not provided will be generated automatically\n * @type {string}\n * @default ''\n * */\n @Prop() sliderId: string;\n\n /**\n * Display 'ALL' URL\n * @type {string}\n * @default ''\n * */\n @Prop() displayAllUrl: string;\n\n /**\n * Source of the products, if api will get the products from the API, if json will get the products from the products prop\n * @type {string}\n * @default ''\n * */\n @Prop({\n reflect: true,\n mutable: true\n }) source: 'categories' | 'latest' | 'related' | 'brands' | 'json' | 'tags' | 'selected' | 'offers' | 'landing-page';\n\n /**\n * The source value, cloud be different values as following:\n * - array of ids when `source` in ['categories', 'brands', 'tags', 'selected']\n * - products payload when `source` = 'json'\n * - product_id when `source` = 'related'\n *\n * @type {string}\n * */\n @Prop() sourceValue: string;\n\n /**\n * Limit for number of products in the list.\n */\n @Prop({mutable: true}) limit: number;\n\n \n @State() productsData: any;\n @State() isReady: boolean;\n @State() sourceValueIsValid: boolean;\n @State() hasCustomComponent: boolean;\n @State() apiUrl: string = '';\n @State() parsedSourceValue: any;\n\n private getItemHTML(product) {\n if (this.hasCustomComponent) {\n return <div class=\"s-products-slider-card\">\n <custom-salla-product-card product={product} source={this.getSource()} source-value={this.getSourceValue()}/>\n </div>;\n }\n\n return <div class=\"s-products-slider-card\">\n <salla-product-card\n show-quantity={this.getSource() == 'landing-page'}\n hide-add-btn={this.getSource() == 'landing-page'}\n shadow-on-hover={true}\n product={product}/>\n </div>;\n }\n\n private getUrlPrefix() {\n let urlPrefix = '';\n if (this.limit) {\n urlPrefix = `&per_page=${this.limit > 32 ? 32 : this.limit}`;\n }\n return urlPrefix;\n }\n\n getApiUrl() {\n if (this.getSource() === 'json') {\n return;\n }\n let prefixes = this.getUrlPrefix();\n if (['offers', 'latest'].includes(this.getSource())) {\n return salla.url.api(`products?source=${this.getSource()}${prefixes}`);\n }\n if (['related', 'landing-page'].includes(this.getSource())) {\n return salla.url.api(`products?source=${this.getSource()}&source_value=${this.getSourceValue()}${prefixes}`);\n }\n\n try {\n return salla.url.api(`products?source=${this.getSource()}&source_value[]=${this.getSourceValue().join('&source_value[]=')}${prefixes}`);\n } catch (e) {\n salla.logger.warn(`source-value prop should be array of ids ex source-value=\"[1,2,3]\" for the source [${this.getSource()}]`);\n this.sourceValueIsValid = false;\n }\n }\n private getSource(){\n return {\n 'brands.single': 'brands',\n 'product.index': 'categories',\n 'product.index.latest': 'latest',\n 'product.index.offers': 'offers',\n 'product.index.search': 'search',\n 'landing-page': 'landing-page',\n 'product.index.tag': 'tags',\n }[this.source || salla.config.get('page.slug')] || this.source ||'latest';\n }\n\n private getSourceValue() {\n if (!['search', 'json'].includes(this.getSource())) {\n if (Array.isArray(JSON.parse(this.sourceValue)) && JSON.parse(this.sourceValue).length) {\n return JSON.parse(this.sourceValue);\n }\n\n if (typeof JSON.parse(this.sourceValue) == 'number') {\n return [JSON.parse(this.sourceValue)];\n }\n }\n return this.sourceValue || salla.config.get('page.id');\n }\n private canRender() {\n return this.sourceValueIsValid && this.isReady;\n }\n\n componentWillLoad() {\n if (this.source === 'json') {\n this.productsData = this.getSourceValue();\n this.isReady = true\n return;\n }\n salla.api.request(this.getApiUrl(), null, 'get').then(res => {\n this.productsData = res.data\n this.isReady = true\n })\n }\n\n render() {\n if ((this.getSource() == 'related' && !salla.config.get('store.settings.product.related_products_enabled')) || !this.canRender()) {\n return;\n }\n return (\n <Host class=\"s-products-slider-wrapper\">\n <salla-slider\n class=\"s-products-slider-slider\"\n id={this.sliderId || `s-products-slider-${Math.random().toString(36).substr(2, 9)}`}\n type=\"carousel\"\n block-title={this.blockTitle}\n block-subTitle={this.subTitle}\n display-all-url={this.displayAllUrl}\n >\n <div slot=\"items\">\n {this.productsData?.map((product) =>\n this.getItemHTML(product)\n )}\n </div>\n </salla-slider>\n </Host>\n );\n }\n\n}\n"]}
|
|
@@ -4,4 +4,16 @@
|
|
|
4
4
|
*/
|
|
5
5
|
salla-verify {
|
|
6
6
|
display: block;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.s-verify-input {
|
|
10
|
+
/* Chrome, Safari, Edge, Opera */
|
|
11
|
+
/* Firefox */
|
|
12
|
+
}
|
|
13
|
+
.s-verify-input::-webkit-outer-spin-button, .s-verify-input::-webkit-inner-spin-button {
|
|
14
|
+
-webkit-appearance: none;
|
|
15
|
+
margin: 0;
|
|
16
|
+
}
|
|
17
|
+
.s-verify-input[type=number] {
|
|
18
|
+
-moz-appearance: textfield;
|
|
7
19
|
}
|
|
@@ -41,7 +41,32 @@ export class SallaVerify {
|
|
|
41
41
|
this.resendAfter = 0;
|
|
42
42
|
this.timer.innerHTML = '30 : 00';
|
|
43
43
|
});
|
|
44
|
-
|
|
44
|
+
}
|
|
45
|
+
splitNumber(e) {
|
|
46
|
+
let data = e.data || e.target.value; // Chrome doesn't get the e.data, it's always empty, fallback to value then.
|
|
47
|
+
if (!data)
|
|
48
|
+
return; // Shouldn't happen, just in case.
|
|
49
|
+
if (data.length === 1)
|
|
50
|
+
return; // Here is a normal behavior, not a paste action.
|
|
51
|
+
this.modifyNext(e.target, data);
|
|
52
|
+
}
|
|
53
|
+
modifyNext(el, data) {
|
|
54
|
+
el.value = data[0]; // Apply first item to first input
|
|
55
|
+
data = data.substring(1); // remove the first char.
|
|
56
|
+
if (el.nextElementSibling && data.length) {
|
|
57
|
+
// Do the same with the next element and next data
|
|
58
|
+
this.modifyNext(el.nextElementSibling, data);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
;
|
|
62
|
+
checkAllInputs() {
|
|
63
|
+
let allFilled = true;
|
|
64
|
+
for (let i = 0; i < this.otpInputs.length; i++) {
|
|
65
|
+
if (this.otpInputs[i].value === '') {
|
|
66
|
+
allFilled = false;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return allFilled;
|
|
45
70
|
}
|
|
46
71
|
handleKeyUp(ev) {
|
|
47
72
|
var _a, _b, _c, _d;
|
|
@@ -57,16 +82,43 @@ export class SallaVerify {
|
|
|
57
82
|
(_c = ev.target.previousElementSibling) === null || _c === void 0 ? void 0 : _c.focus();
|
|
58
83
|
(_d = ev.target.previousElementSibling) === null || _d === void 0 ? void 0 : _d.select();
|
|
59
84
|
}
|
|
60
|
-
|
|
85
|
+
// If the target is populated to quickly, value length can be > 1
|
|
86
|
+
if (ev.target.value.length > 1) {
|
|
87
|
+
this.splitNumber(ev);
|
|
88
|
+
}
|
|
61
89
|
}
|
|
62
90
|
handlePaste(ev) {
|
|
63
91
|
let text = salla.helpers.number(ev.clipboardData.getData('text'))
|
|
64
92
|
.replace(/[^0-9.]/g, '')
|
|
65
93
|
.replace('..', '.');
|
|
66
94
|
this.otpInputs.forEach((input, i) => input.value = text[i] || '');
|
|
67
|
-
this.toggleOTPSubmit();
|
|
95
|
+
// this.toggleOTPSubmit();
|
|
68
96
|
setTimeout(() => this.otpInputs[3].focus(), 100);
|
|
69
97
|
}
|
|
98
|
+
handleInput(ev) {
|
|
99
|
+
salla.helpers.inputDigitsOnly(ev.target);
|
|
100
|
+
// check if all otpInputs has values then send the request
|
|
101
|
+
if (this.checkAllInputs()) {
|
|
102
|
+
setTimeout(() => {
|
|
103
|
+
this.toggleOTPSubmit();
|
|
104
|
+
}, 100);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
handleFocus(ev) {
|
|
108
|
+
var _a;
|
|
109
|
+
// If the focus element is the first one, do nothing
|
|
110
|
+
if (ev.target === this.firstOtpInput)
|
|
111
|
+
return;
|
|
112
|
+
// If value of input 1 is empty, focus it.
|
|
113
|
+
if (((_a = this.firstOtpInput) === null || _a === void 0 ? void 0 : _a.value) == '') {
|
|
114
|
+
this.firstOtpInput.focus();
|
|
115
|
+
}
|
|
116
|
+
// If value of a previous input is empty, focus it.
|
|
117
|
+
// To remove if you don't wanna force user respecting the fields order.
|
|
118
|
+
if (ev.target.previousElementSibling.value == '') {
|
|
119
|
+
ev.target.previousElementSibling.focus();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
70
122
|
/**
|
|
71
123
|
* Get current code
|
|
72
124
|
* @return {string}
|
|
@@ -79,15 +131,17 @@ export class SallaVerify {
|
|
|
79
131
|
* @param data
|
|
80
132
|
*/
|
|
81
133
|
async open(data) {
|
|
82
|
-
var _a;
|
|
134
|
+
var _a, _b;
|
|
83
135
|
this.data = data;
|
|
84
136
|
this.data.type = this.data.type || this.type;
|
|
85
137
|
this.type = this.data.type;
|
|
86
138
|
this.resendTimer();
|
|
87
139
|
this.otpInputs = this.body.querySelectorAll('.s-verify-input');
|
|
140
|
+
this.firstOtpInput = this.body.querySelector('#otp-1');
|
|
88
141
|
this.reset();
|
|
89
142
|
this.display == 'modal' && ((_a = this.modal) === null || _a === void 0 ? void 0 : _a.setTitle(this.title));
|
|
90
143
|
this.modal.open();
|
|
144
|
+
(_b = this.firstOtpInput) === null || _b === void 0 ? void 0 : _b.addEventListener('input', e => this.splitNumber(e));
|
|
91
145
|
// focus the first input after opening the modal
|
|
92
146
|
setTimeout(() => this.otpInputs[0].focus(), 100);
|
|
93
147
|
}
|
|
@@ -157,24 +211,8 @@ export class SallaVerify {
|
|
|
157
211
|
return this.display == 'inline' ? h(Host, null, this.myBody()) :
|
|
158
212
|
h("salla-modal", { width: "xs", class: "s-verify", ref: modal => this.modal = modal, "modal-title": this.title }, h("span", { slot: 'icon', class: "s-verify-header-icon", innerHTML: this.type == "mobile" ? AndroidPhoneIcon : MailIcon }), this.myBody());
|
|
159
213
|
}
|
|
160
|
-
otpHandler() {
|
|
161
|
-
if (!window.OTPCredential) {
|
|
162
|
-
return;
|
|
163
|
-
}
|
|
164
|
-
const ac = new AbortController();
|
|
165
|
-
let o = {
|
|
166
|
-
otp: { transport: ['sms'] },
|
|
167
|
-
signal: ac.signal
|
|
168
|
-
};
|
|
169
|
-
navigator.credentials.get(o)
|
|
170
|
-
.then(otp => {
|
|
171
|
-
// @ts-ignore
|
|
172
|
-
this.otpInputs.forEach((input, index) => input.value = otp.code[index]);
|
|
173
|
-
return this.submit();
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
214
|
myBody() {
|
|
177
|
-
return (h("div", { class: "s-verify-body", ref: body => this.body = body }, h("div", { class: "s-verify-message", innerHTML: salla.lang.get('pages.profile.verify_message') }), h("input", { type: "hidden", name: "code", maxlength: "4", required: true, ref: code => this.code = code }), h("div", { class: "s-verify-codes", dir: "ltr" }, [1, 2, 3, 4].map(() => h("input", { type: "
|
|
215
|
+
return (h("div", { class: "s-verify-body", ref: body => this.body = body }, h("div", { class: "s-verify-message", innerHTML: salla.lang.get('pages.profile.verify_message') }), h("input", { type: "hidden", name: "code", maxlength: "4", required: true, ref: code => this.code = code }), h("div", { class: "s-verify-codes", dir: "ltr" }, [1, 2, 3, 4].map((i) => h("input", { type: "number", autocomplete: "one-time-code", pattern: "[0-9]*", inputmode: "numeric", maxlength: "1", value: "", id: `otp-${i}`, class: "s-verify-input", onInput: e => this.handleInput(e), onPaste: e => this.handlePaste(e), onKeyUp: e => this.handleKeyUp(e), onFocus: e => this.handleFocus(e), required: true }))), h("div", { slot: "footer", class: "s-verify-footer" }, h("salla-button", { class: "s-verify-submit", "loader-position": 'center', disabled: true, onClick: () => this.submit(), ref: b => this.btn = b }, salla.lang.get('pages.profile.verify')), h("p", { class: "s-verify-resend-message", ref: el => this.resendMessage = el }, salla.lang.get('blocks.header.resend_after'), h("b", { class: "s-verify-timer", ref: el => this.timer = el })), h("a", { href: "#", class: "s-verify-resend", onClick: () => this.resendCode(), ref: el => this.resend = el }, salla.lang.get('blocks.comments.submit'))), h("slot", { name: "after-footer" })));
|
|
178
216
|
}
|
|
179
217
|
static get is() { return "salla-verify"; }
|
|
180
218
|
static get originalStyleUrls() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"salla-verify.js","sourceRoot":"","sources":["../../../src/components/salla-verify/salla-verify.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Host, Element, Event, EventEmitter, h, Method, Prop, State } from '@stencil/core';\nimport AndroidPhoneIcon from '../../assets/svg/android-phone.svg';\nimport MailIcon from '../../assets/svg/mail.svg';\n\n/**\n * @slot footer - Replaces the footer, by default it contains: verify button, resend, and timer\n * @slot after-footer - placeholder position\n */\n@Component({ tag: 'salla-verify', styleUrl: 'salla-verify.scss' })\n\nexport class SallaVerify {\n constructor() {\n salla.lang.onLoaded(() => {\n this.translationLoaded = true;\n this.title = salla.lang.get('pages.profile.verify_title') + salla.lang.get('common.elements.' + this.type);\n this.modal?.setTitle(this.title);\n });\n\n if (this.display == 'inline') {\n this.modal = { open: () => '', close: () => '', setTitle: () => '' };\n return;\n }\n\n //todo:: change this way, now we fire the event from the backend, we should listen to salla.profile.event.onUpdated\n salla.event.on('profile::verification', data => {\n let payload = Array.isArray(data) ? data[0] : data;\n this.isProfileVerify = true;\n this.open(payload);\n this.title = salla.lang.get('pages.profile.verify_title') + salla.lang.get('common.elements.' + payload.type);\n this.modal?.setTitle(this.title);\n });\n\n salla.event.on('modalClosed', () => {\n this.resendAfter = 0;\n this.timer.innerHTML = '30 : 00';\n });\n\n this.otpHandler();\n }\n\n private modal: HTMLSallaModalElement | any;\n private body: HTMLDivElement;\n private code: HTMLInputElement;\n private btn: HTMLSallaButtonElement;\n private resendMessage: HTMLParagraphElement;\n private timer: HTMLElement;\n private resend: HTMLAnchorElement;\n private otpInputs: NodeListOf<HTMLInputElement>;\n private data: { type: 'mobile' | 'email', phone?: string, country_code?: string, email?: string };\n\n @State() translationLoaded: boolean = false;\n\n @Element() host: HTMLElement;\n /**\n * Should render component without modal\n */\n @Prop() display: 'inline' | 'modal' = 'modal';\n\n /**\n * Verifying method\n */\n @Prop({ mutable: true }) type: 'mobile' | 'email' = 'mobile';\n /**\n * should auto reloading the page after success verification\n */\n @Prop() autoReload: boolean = true;\n\n /**\n * Once the api verify success, it will be login the customer in web pages\n */\n @Prop() supportWebAuth: boolean = true;\n\n /**\n * Event when success verification\n */\n @Event() verified: EventEmitter;\n\n @State() title: string;\n\n @State() resendAfter: number = 30;\n /**\n * to use: `salla.api.auth.verify` or `salla.profile.verify`\n */\n @State() isProfileVerify: boolean = false;\n\n private handleKeyUp(ev) {\n if (['Alt', 'Shift', 'Control', 'AltGraph', 'Ctrl'].includes(ev.key)) {\n return;\n }\n let key = ev.keyCode || ev.charCode;\n if (ev.target.value) {\n ev.target.nextElementSibling?.focus();\n ev.target.nextElementSibling?.select();\n } else if ([8, 46].includes(key)) {\n ev.target.previousElementSibling?.focus();\n ev.target.previousElementSibling?.select();\n }\n this.toggleOTPSubmit();\n }\n\n private handlePaste(ev) {\n let text = salla.helpers.number(ev.clipboardData.getData('text'))\n .replace(/[^0-9.]/g, '')\n .replace('..', '.');\n this.otpInputs.forEach((input, i) => input.value = text[i] || '');\n this.toggleOTPSubmit();\n setTimeout(() => this.otpInputs[3].focus(), 100);\n }\n\n /**\n * Get current code\n * @return {string}\n */\n @Method()\n async getCode() {\n return this.code.value;\n }\n\n /**\n * Open verifying modal\n * @param data\n */\n @Method()\n async open(data) {\n this.data = data;\n this.data.type = this.data.type || this.type;\n this.type = this.data.type;\n this.resendTimer();\n this.otpInputs = this.body.querySelectorAll('.s-verify-input');\n\n this.reset();\n this.display == 'modal' && this.modal?.setTitle(this.title);\n this.modal.open();\n\n // focus the first input after opening the modal\n setTimeout(() => this.otpInputs[0].focus(), 100);\n }\n\n private toggleOTPSubmit() {\n let otp = []\n this.otpInputs.forEach(input => input.value && otp.push(input.value));\n\n this.code.value = otp.join('');\n\n if (otp.length === 4) {\n this.btn.disable()\n this.btn.click();\n return;\n }\n\n this.btn.enable()\n }\n\n private reset() {\n this.otpInputs.forEach((input) => input.value = '');\n this.code.value = '';\n this.otpInputs[0].focus();\n }\n\n private resendTimer() {\n this.resendMessage.style.display = 'block';\n this.resend.style.display = 'none';\n this.resendAfter = 30;\n\n let timerId = setInterval(() => {\n if (this.resendAfter <= 0) {\n clearInterval(timerId);\n this.resend.style.display = 'block';\n this.resendMessage.style.display = 'none';\n } else {\n this.timer.innerHTML = `${this.resendAfter >= 10 ? this.resendAfter : '0' + this.resendAfter} : 00`;\n this.resendAfter--;\n }\n }, 1000);\n }\n\n private resendCode() {\n return this.btn.stop()\n .then(() => this.btn.disable())\n .then(() => {\n this.otpInputs.forEach(input => input.value = '');\n this.otpInputs[0].focus();\n })\n .then(() => salla.api.auth.resend(this.data))\n .finally(() => this.resendTimer());\n }\n\n private submit() {\n //if code not 4 digits, focus on the after filled input,\n if (this.code.value.length < 4) {\n this.otpInputs[this.code.value.length].focus();\n salla.log('Trying to submit without 4 digits!');\n return;\n }\n\n let data = { code: this.code.value, ...this.data };\n\n return this.btn.load()\n .then(() => this.btn.disable())\n .then(() => this.isProfileVerify ? salla.profile.verify(data) : salla.auth.verify(data, this.supportWebAuth))\n .then(response => this.verified.emit(response))\n .then(() => this.btn.stop() && this.btn.disable())\n .then(() => this.modal.close())\n .then(() => this.autoReload && window.location.reload())\n .catch((error) => {\n salla.logger.error(error);\n this.btn.stop() && this.btn.enable() && this.reset()\n });\n }\n\n render() {\n return this.display == 'inline' ? <Host>{this.myBody()}</Host> :\n <salla-modal width=\"xs\" class=\"s-verify\" ref={modal => this.modal = modal}\n modal-title={this.title}>\n <span slot='icon' class=\"s-verify-header-icon\" innerHTML={this.type == \"mobile\" ? AndroidPhoneIcon : MailIcon}></span>\n {this.myBody()}\n </salla-modal>;\n }\n\n private otpHandler() {\n if (!window.OTPCredential) {\n return;\n }\n\n const ac = new AbortController();\n\n let o = {\n otp: {transport: ['sms']},\n signal: ac.signal\n }\n\n navigator.credentials.get(o)\n .then(otp => {\n // @ts-ignore\n this.otpInputs.forEach((input, index) => input.value = otp.code[index])\n return this.submit()\n });\n }\n\n private myBody() {\n return (\n <div class=\"s-verify-body\" ref={body => this.body = body}>\n <div class=\"s-verify-message\" innerHTML={salla.lang.get('pages.profile.verify_message')} />\n <input type=\"hidden\" name=\"code\" maxlength=\"4\" required ref={code => this.code = code} />\n <div class=\"s-verify-codes\" dir=\"ltr\">\n {[1, 2, 3, 4].map(() => <input type=\"tel\" autocomplete=\"one-time-code\" pattern=\"[0-9]*\" inputmode=\"numeric\"\n maxlength=\"1\" class=\"s-verify-input\"\n onInput={e => salla.helpers.inputDigitsOnly(e.target)}\n onPaste={e => this.handlePaste(e)}\n onKeyUp={e => this.handleKeyUp(e)}\n required />)}\n </div>\n <div slot=\"footer\" class=\"s-verify-footer\">\n <salla-button class=\"s-verify-submit\" loader-position='center' disabled={true}\n onClick={() => this.submit()}\n ref={b => this.btn = b}>\n {salla.lang.get('pages.profile.verify')}\n </salla-button>\n <p class=\"s-verify-resend-message\" ref={el => this.resendMessage = el}>\n {salla.lang.get('blocks.header.resend_after')}\n <b class=\"s-verify-timer\" ref={el => this.timer = el}></b></p>\n <a href=\"#\" class=\"s-verify-resend\" onClick={() => this.resendCode()}\n ref={el => this.resend = el}>{salla.lang.get('blocks.comments.submit')}</a>\n </div>\n <slot name=\"after-footer\" />\n </div>\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"salla-verify.js","sourceRoot":"","sources":["../../../src/components/salla-verify/salla-verify.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Host, Element, Event, EventEmitter, h, Method, Prop, State } from '@stencil/core';\nimport AndroidPhoneIcon from '../../assets/svg/android-phone.svg';\nimport MailIcon from '../../assets/svg/mail.svg';\n\n/**\n * @slot footer - Replaces the footer, by default it contains: verify button, resend, and timer\n * @slot after-footer - placeholder position\n */\n@Component({ tag: 'salla-verify', styleUrl: 'salla-verify.scss' })\n\nexport class SallaVerify {\n constructor() {\n salla.lang.onLoaded(() => {\n this.translationLoaded = true;\n this.title = salla.lang.get('pages.profile.verify_title') + salla.lang.get('common.elements.' + this.type);\n this.modal?.setTitle(this.title);\n });\n\n if (this.display == 'inline') {\n this.modal = { open: () => '', close: () => '', setTitle: () => '' };\n return;\n }\n\n //todo:: change this way, now we fire the event from the backend, we should listen to salla.profile.event.onUpdated\n salla.event.on('profile::verification', data => {\n let payload = Array.isArray(data) ? data[0] : data;\n this.isProfileVerify = true;\n this.open(payload);\n this.title = salla.lang.get('pages.profile.verify_title') + salla.lang.get('common.elements.' + payload.type);\n this.modal?.setTitle(this.title);\n });\n\n salla.event.on('modalClosed', () => {\n this.resendAfter = 0;\n this.timer.innerHTML = '30 : 00';\n });\n\n }\n\n private modal: HTMLSallaModalElement | any;\n private body: HTMLDivElement;\n private code: HTMLInputElement;\n private btn: HTMLSallaButtonElement;\n private resendMessage: HTMLParagraphElement;\n private timer: HTMLElement;\n private resend: HTMLAnchorElement;\n private otpInputs: NodeListOf<HTMLInputElement>;\n private firstOtpInput: HTMLInputElement;\n private data: { type: 'mobile' | 'email', phone?: string, country_code?: string, email?: string };\n\n @State() translationLoaded: boolean = false;\n\n @Element() host: HTMLElement;\n /**\n * Should render component without modal\n */\n @Prop() display: 'inline' | 'modal' = 'modal';\n\n /**\n * Verifying method\n */\n @Prop({ mutable: true }) type: 'mobile' | 'email' = 'mobile';\n /**\n * should auto reloading the page after success verification\n */\n @Prop() autoReload: boolean = true;\n\n /**\n * Once the api verify success, it will be login the customer in web pages\n */\n @Prop() supportWebAuth: boolean = true;\n\n /**\n * Event when success verification\n */\n @Event() verified: EventEmitter;\n\n @State() title: string;\n\n @State() resendAfter: number = 30;\n /**\n * to use: `salla.api.auth.verify` or `salla.profile.verify`\n */\n @State() isProfileVerify: boolean = false;\n\n private splitNumber(e) {\n let data = e.data || e.target.value; // Chrome doesn't get the e.data, it's always empty, fallback to value then.\n if (!data) return; // Shouldn't happen, just in case.\n if (data.length === 1) return; // Here is a normal behavior, not a paste action.\n this.modifyNext(e.target, data);\n }\n\n private modifyNext(el, data) {\n el.value = data[0]; // Apply first item to first input\n data = data.substring(1); // remove the first char.\n if (el.nextElementSibling && data.length) {\n // Do the same with the next element and next data\n this.modifyNext(el.nextElementSibling, data);\n }\n };\n\n private checkAllInputs() {\n let allFilled = true;\n for (let i = 0; i < this.otpInputs.length; i++) {\n if (this.otpInputs[i].value === '') {\n allFilled = false;\n }\n }\n return allFilled;\n }\n\n private handleKeyUp(ev) {\n if (['Alt', 'Shift', 'Control', 'AltGraph', 'Ctrl'].includes(ev.key)) {\n return;\n }\n let key = ev.keyCode || ev.charCode;\n if (ev.target.value) {\n ev.target.nextElementSibling?.focus();\n ev.target.nextElementSibling?.select();\n } else if ([8, 46].includes(key)) {\n ev.target.previousElementSibling?.focus();\n ev.target.previousElementSibling?.select();\n }\n // If the target is populated to quickly, value length can be > 1\n if (ev.target.value.length > 1) {\n this.splitNumber(ev);\n }\n }\n\n private handlePaste(ev) {\n let text = salla.helpers.number(ev.clipboardData.getData('text'))\n .replace(/[^0-9.]/g, '')\n .replace('..', '.');\n this.otpInputs.forEach((input, i) => input.value = text[i] || '');\n // this.toggleOTPSubmit();\n setTimeout(() => this.otpInputs[3].focus(), 100);\n }\n\n private handleInput(ev) {\n salla.helpers.inputDigitsOnly(ev.target)\n // check if all otpInputs has values then send the request\n if (this.checkAllInputs()) {\n setTimeout(() => {\n this.toggleOTPSubmit();\n }, 100);\n }\n }\n\n private handleFocus(ev) {\n // If the focus element is the first one, do nothing\n if (ev.target === this.firstOtpInput) return;\n // If value of input 1 is empty, focus it.\n if (this.firstOtpInput?.value == '') {\n this.firstOtpInput.focus();\n }\n // If value of a previous input is empty, focus it.\n // To remove if you don't wanna force user respecting the fields order.\n if (ev.target.previousElementSibling.value == '') {\n ev.target.previousElementSibling.focus();\n }\n }\n\n /**\n * Get current code\n * @return {string}\n */\n @Method()\n async getCode() {\n return this.code.value;\n }\n\n /**\n * Open verifying modal\n * @param data\n */\n @Method()\n async open(data) {\n this.data = data;\n this.data.type = this.data.type || this.type;\n this.type = this.data.type;\n this.resendTimer();\n this.otpInputs = this.body.querySelectorAll('.s-verify-input');\n this.firstOtpInput = this.body.querySelector('#otp-1');\n this.reset();\n this.display == 'modal' && this.modal?.setTitle(this.title);\n this.modal.open();\n this.firstOtpInput?.addEventListener('input', e => this.splitNumber(e));\n\n // focus the first input after opening the modal\n setTimeout(() => this.otpInputs[0].focus(), 100);\n }\n\n private toggleOTPSubmit() {\n let otp = []\n this.otpInputs.forEach(input => input.value && otp.push(input.value));\n\n this.code.value = otp.join('');\n\n if (otp.length === 4) {\n this.btn.disable()\n this.btn.click();\n return;\n }\n\n this.btn.enable()\n }\n\n private reset() {\n this.otpInputs.forEach((input) => input.value = '');\n this.code.value = '';\n this.otpInputs[0].focus();\n }\n\n private resendTimer() {\n this.resendMessage.style.display = 'block';\n this.resend.style.display = 'none';\n this.resendAfter = 30;\n\n let timerId = setInterval(() => {\n if (this.resendAfter <= 0) {\n clearInterval(timerId);\n this.resend.style.display = 'block';\n this.resendMessage.style.display = 'none';\n } else {\n this.timer.innerHTML = `${this.resendAfter >= 10 ? this.resendAfter : '0' + this.resendAfter} : 00`;\n this.resendAfter--;\n }\n }, 1000);\n }\n\n private resendCode() {\n return this.btn.stop()\n .then(() => this.btn.disable())\n .then(() => {\n this.otpInputs.forEach(input => input.value = '');\n this.otpInputs[0].focus();\n })\n .then(() => salla.api.auth.resend(this.data))\n .finally(() => this.resendTimer());\n }\n\n private submit() {\n //if code not 4 digits, focus on the after filled input,\n if (this.code.value.length < 4) {\n this.otpInputs[this.code.value.length].focus();\n salla.log('Trying to submit without 4 digits!');\n return;\n }\n\n let data = { code: this.code.value, ...this.data };\n\n return this.btn.load()\n .then(() => this.btn.disable())\n .then(() => this.isProfileVerify ? salla.profile.verify(data) : salla.auth.verify(data, this.supportWebAuth))\n .then(response => this.verified.emit(response))\n .then(() => this.btn.stop() && this.btn.disable())\n .then(() => this.modal.close())\n .then(() => this.autoReload && window.location.reload())\n .catch((error) => {\n salla.logger.error(error);\n this.btn.stop() && this.btn.enable() && this.reset()\n });\n }\n\n render() {\n return this.display == 'inline' ? <Host>{this.myBody()}</Host> :\n <salla-modal width=\"xs\" class=\"s-verify\" ref={modal => this.modal = modal}\n modal-title={this.title}>\n <span slot='icon' class=\"s-verify-header-icon\" innerHTML={this.type == \"mobile\" ? AndroidPhoneIcon : MailIcon}></span>\n {this.myBody()}\n </salla-modal>;\n }\n\n\n private myBody() {\n return (\n <div class=\"s-verify-body\" ref={body => this.body = body}>\n <div class=\"s-verify-message\" innerHTML={salla.lang.get('pages.profile.verify_message')} />\n <input type=\"hidden\" name=\"code\" maxlength=\"4\" required ref={code => this.code = code} />\n <div class=\"s-verify-codes\" dir=\"ltr\">\n {[1, 2, 3, 4].map((i) => <input type=\"number\" autocomplete=\"one-time-code\" pattern=\"[0-9]*\" inputmode=\"numeric\"\n maxlength=\"1\" value=\"\" id={`otp-${i}`} class=\"s-verify-input\"\n onInput={e => this.handleInput(e)}\n onPaste={e => this.handlePaste(e)}\n onKeyUp={e => this.handleKeyUp(e)}\n onFocus={e => this.handleFocus(e)}\n required />)}\n </div>\n <div slot=\"footer\" class=\"s-verify-footer\">\n <salla-button class=\"s-verify-submit\" loader-position='center' disabled={true}\n onClick={() => this.submit()}\n ref={b => this.btn = b}>\n {salla.lang.get('pages.profile.verify')}\n </salla-button>\n <p class=\"s-verify-resend-message\" ref={el => this.resendMessage = el}>\n {salla.lang.get('blocks.header.resend_after')}\n <b class=\"s-verify-timer\" ref={el => this.timer = el}></b></p>\n <a href=\"#\" class=\"s-verify-resend\" onClick={() => this.resendCode()}\n ref={el => this.resend = el}>{salla.lang.get('blocks.comments.submit')}</a>\n </div>\n <slot name=\"after-footer\" />\n </div>\n );\n }\n}\n"]}
|