Conflicts resolved
This commit is contained in:
commit
87b3f2acdc
|
|
@ -2,10 +2,13 @@
|
|||
|
||||
namespace Webkul\API\Http\Controllers\Shop;
|
||||
|
||||
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
|
||||
use Illuminate\Support\Facades\Password;
|
||||
|
||||
class ForgotPasswordController extends Controller
|
||||
{
|
||||
use SendsPasswordResetEmails;
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -1,4 +1,4 @@
|
|||
{
|
||||
"/js/admin.js": "/js/admin.js?id=a14c779523092ac32b88",
|
||||
"/css/admin.css": "/css/admin.css?id=e824b5c352609d2e9b66"
|
||||
"/css/admin.css": "/css/admin.css?id=88c7c29cf850edc4bfb3"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -416,6 +416,26 @@ return [
|
|||
'name' => 'admin::app.acl.delete',
|
||||
'route' => 'admin.cart-rules.delete',
|
||||
'sort' => 3,
|
||||
], [
|
||||
'key' => 'promotions.catalog-rules',
|
||||
'name' => 'admin::app.acl.catalog-rules',
|
||||
'route' => 'admin.catalog-rules.index',
|
||||
'sort' => 1,
|
||||
], [
|
||||
'key' => 'promotions.catalog-rules.create',
|
||||
'name' => 'admin::app.acl.create',
|
||||
'route' => 'admin.catalog-rules.index',
|
||||
'sort' => 1,
|
||||
], [
|
||||
'key' => 'promotions.catalog-rules.edit',
|
||||
'name' => 'admin::app.acl.edit',
|
||||
'route' => 'admin.catalog-rules.edit',
|
||||
'sort' => 2,
|
||||
], [
|
||||
'key' => 'promotions.catalog-rules.delete',
|
||||
'name' => 'admin::app.acl.delete',
|
||||
'route' => 'admin.catalog-rules.delete',
|
||||
'sort' => 3,
|
||||
],
|
||||
];
|
||||
|
||||
|
|
|
|||
|
|
@ -319,4 +319,15 @@ body {
|
|||
margin-top: 10px;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
.ticket-list {
|
||||
.control-group {
|
||||
&.date {
|
||||
&::after {
|
||||
left: unset;
|
||||
right: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -244,12 +244,19 @@
|
|||
|
||||
.control-group.date {
|
||||
&::after {
|
||||
margin-right: -34px;
|
||||
right: 70%;
|
||||
position: absolute;
|
||||
right: calc(70% - 40px);
|
||||
}
|
||||
}
|
||||
|
||||
.pagination .page-item .icon {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
|
||||
.slot-list {
|
||||
.control-group.date::after {
|
||||
top: 18px;
|
||||
right: calc(100% - 40px);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -75,7 +75,7 @@
|
|||
<label class="ticket-label">{{ __('bookingproduct::app.admin.catalog.products.special-price-from') }}</label>
|
||||
|
||||
<datetime>
|
||||
<input type="text" v-validate="'date_format:yyyy-MM-dd HH:mm:ss|after:{{\Carbon\Carbon::yesterday()->format('Y-m-d 23:59:59')}}'" :name="controlName + '[special_price_from]'" v-model="ticketItem.special_price_from" class="control" data-vv-as=""{{ __('bookingproduct::app.admin.catalog.products.special-price-from') }}"" ref="special_price_from" style="width:70%"/>
|
||||
<input type="text" v-validate="'date_format:yyyy-MM-dd HH:mm:ss|after:{{\Carbon\Carbon::yesterday()->format('Y-m-d 23:59:59')}}'" :name="controlName + '[special_price_from]'" v-model="ticketItem.special_price_from" class="control" data-vv-as=""{{ __('bookingproduct::app.admin.catalog.products.special-price-from') }}"" ref="special_price_from" style="width:100%"/>
|
||||
</datetime>
|
||||
|
||||
<span class="control-error" v-if="errors.has(controlName + '[special_price_from]')">@{{ errors.first(controlName + '[special_price_from]') }}</span>
|
||||
|
|
@ -96,7 +96,7 @@
|
|||
<label class="ticket-label">{{ __('bookingproduct::app.admin.catalog.products.special-price-to') }}</label>
|
||||
|
||||
<datetime>
|
||||
<input type="text" v-validate="'date_format:yyyy-MM-dd HH:mm:ss|after:special_price_from'" :name="controlName + '[special_price_to]'" v-model="ticketItem.special_price_to" class="control" data-vv-as=""{{ __('bookingproduct::app.admin.catalog.products.special-price-to') }}"" ref="special_price_to" style="width:70%"/>
|
||||
<input type="text" v-validate="'date_format:yyyy-MM-dd HH:mm:ss|after:special_price_from'" :name="controlName + '[special_price_to]'" v-model="ticketItem.special_price_to" class="control" data-vv-as=""{{ __('bookingproduct::app.admin.catalog.products.special-price-to') }}"" ref="special_price_to" style="width:100%"/>
|
||||
</datetime>
|
||||
|
||||
<span class="control-error" v-if="errors.has(controlName + '[special_price_to]')">@{{ errors.first(controlName + '[special_price_to]') }}</span>
|
||||
|
|
|
|||
|
|
@ -2,10 +2,13 @@
|
|||
|
||||
namespace Webkul\Customer\Http\Controllers;
|
||||
|
||||
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
|
||||
use Illuminate\Support\Facades\Password;
|
||||
|
||||
class ForgotPasswordController extends Controller
|
||||
{
|
||||
use SendsPasswordResetEmails;
|
||||
|
||||
/**
|
||||
* Contains route related configuration
|
||||
*
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ $factory->define(OrderItem::class, function (Faker $faker, array $attributes) {
|
|||
'qty_invoiced' => 0,
|
||||
'qty_canceled' => 0,
|
||||
'qty_refunded' => 0,
|
||||
'additional' => [],
|
||||
'order_id' => function () {
|
||||
return factory(Order::class)->create()->id;
|
||||
},
|
||||
|
|
|
|||
|
|
@ -2,10 +2,13 @@
|
|||
|
||||
namespace Webkul\User\Http\Controllers;
|
||||
|
||||
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
|
||||
use Illuminate\Support\Facades\Password;
|
||||
|
||||
class ForgetPasswordController extends Controller
|
||||
{
|
||||
use SendsPasswordResetEmails;
|
||||
|
||||
/**
|
||||
* Contains route related configuration
|
||||
*
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"/js/velocity.js": "/js/velocity.js?id=8800d2830d2fa9f0254d",
|
||||
"/js/velocity.js": "/js/velocity.js?id=2fdb2d6210b201deb11c",
|
||||
"/css/velocity-admin.css": "/css/velocity-admin.css?id=612d35e452446366eef7",
|
||||
"/css/velocity.css": "/css/velocity.css?id=aaf9dc15817e6b912dd2"
|
||||
"/css/velocity.css": "/css/velocity.css?id=37c5d44764a05752f863"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -221,10 +221,15 @@ $(document).ready(function () {
|
|||
miniCartKey: 0,
|
||||
quickView: false,
|
||||
productDetails: [],
|
||||
showPageLoader: false,
|
||||
}
|
||||
},
|
||||
|
||||
created: function () {
|
||||
setTimeout(() => {
|
||||
document.body.classList.remove("modal-open");
|
||||
}, 0);
|
||||
|
||||
window.addEventListener('click', () => {
|
||||
let modals = document.getElementsByClassName('sensitive-modal');
|
||||
|
||||
|
|
@ -331,6 +336,20 @@ $(document).ready(function () {
|
|||
})
|
||||
});
|
||||
},
|
||||
|
||||
showLoader: function () {
|
||||
$('#loader').show();
|
||||
$('.overlay-loader').show();
|
||||
|
||||
document.body.classList.add("modal-open");
|
||||
},
|
||||
|
||||
hideLoader: function () {
|
||||
$('#loader').hide();
|
||||
$('.overlay-loader').hide();
|
||||
|
||||
document.body.classList.remove("modal-open");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
|||
85
packages/Webkul/Velocity/src/Resources/assets/sass/components/app.scss
vendored
Normal file → Executable file
85
packages/Webkul/Velocity/src/Resources/assets/sass/components/app.scss
vendored
Normal file → Executable file
|
|
@ -2445,3 +2445,88 @@
|
|||
display: inline-block;
|
||||
}
|
||||
}
|
||||
|
||||
//CSS for loader
|
||||
.cp-spinner {
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
position: absolute;
|
||||
display: inline-block;
|
||||
box-sizing: border-box;
|
||||
left: calc(50% - 24px);
|
||||
margin-top: calc(40% - 24px);
|
||||
}
|
||||
|
||||
.overlay-loader {
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
z-index: 11;
|
||||
position: fixed;
|
||||
margin-top: -24px;
|
||||
margin-left: -24px;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 720px) {
|
||||
.cp-spinner {
|
||||
left: 50%;
|
||||
margin-left: -24px;
|
||||
top: 50%;
|
||||
margin-top: -24px;
|
||||
}
|
||||
}
|
||||
|
||||
//Spinner style
|
||||
.cp-round:before {
|
||||
border-radius: 50%;
|
||||
content: " ";
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
display: inline-block;
|
||||
box-sizing: border-box;
|
||||
border-top: solid 6px grey;
|
||||
border-right: solid 6px grey;
|
||||
border-bottom: solid 6px grey;
|
||||
border-left: solid 6px grey;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.cp-round:after {
|
||||
border-radius: 50%;
|
||||
content: " ";
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
display: inline-block;
|
||||
box-sizing: border-box;
|
||||
border-top: solid 6px $theme-color;
|
||||
border-right: solid 6px transparent;
|
||||
border-bottom: solid 6px transparent;
|
||||
border-left: solid 6px transparent;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
animation: spin 1s ease-in-out infinite;
|
||||
}
|
||||
|
||||
@keyframes spin {
|
||||
0% { transform: rotate(0deg); }
|
||||
100% { transform: rotate(360deg); }
|
||||
}
|
||||
|
||||
.image-search-container {
|
||||
top: 9px;
|
||||
right: 45px;
|
||||
z-index: 10;
|
||||
cursor: pointer;
|
||||
position: absolute;
|
||||
background: #fff;
|
||||
height: 24px !important;
|
||||
}
|
||||
|
||||
.camera-icon {
|
||||
width: 24px;
|
||||
display: inline-block;
|
||||
background-size: cover;
|
||||
background-image: url(/vendor/webkul/ui/assets/images/Camera.svg);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -138,6 +138,13 @@ body {
|
|||
|
||||
#cart-modal-content {
|
||||
left: 0;
|
||||
|
||||
.small-card-container {
|
||||
.rango-close {
|
||||
left: unset;
|
||||
right: -10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.category-list-container{
|
||||
|
|
@ -265,6 +272,58 @@ body {
|
|||
.modal-footer>:not(:last-child) {
|
||||
margin-left: .25rem;
|
||||
}
|
||||
|
||||
.compare-products {
|
||||
.wishlist-icon {
|
||||
left: 60px;
|
||||
right: unset;
|
||||
}
|
||||
|
||||
.material-icons.cross {
|
||||
left: 20px;
|
||||
right: unset;
|
||||
}
|
||||
}
|
||||
|
||||
#alert-container {
|
||||
right: unset;
|
||||
left: 15px;
|
||||
}
|
||||
|
||||
.mini-cart-content {
|
||||
~ .down-arrow-container {
|
||||
.rango-arrow-down {
|
||||
left: -15px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.alert-dismissible {
|
||||
.close {
|
||||
left: -8px;
|
||||
}
|
||||
}
|
||||
|
||||
.booking-information {
|
||||
.book-slots {
|
||||
.control-group-container {
|
||||
.form-group:not(.quantity).date:after {
|
||||
left: 40px;
|
||||
right: unset;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.full-content-wrapper {
|
||||
> .container-fluid {
|
||||
> .row {
|
||||
&.pl-26 {
|
||||
padding-right: 26% !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Shared
|
||||
.text-right {
|
||||
|
|
@ -299,5 +358,11 @@ body {
|
|||
.ml-5 {
|
||||
margin-right: 3rem !important;
|
||||
}
|
||||
.mr15 {
|
||||
margin-left: 15px !important;
|
||||
}
|
||||
.ml5 {
|
||||
margin-right: 5px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -103,8 +103,10 @@
|
|||
name="term"
|
||||
type="search"
|
||||
class="form-control"
|
||||
:value="searchedQuery.term ? searchedQuery.term.split('+').join(' ') : ''"
|
||||
placeholder="{{ __('velocity::app.header.search-text') }}" />
|
||||
placeholder="{{ __('velocity::app.header.search-text') }}"
|
||||
:value="searchedQuery.term ? searchedQuery.term.split('+').join(' ') : ''" />
|
||||
|
||||
{{-- <image-search-component></image-search-component> --}}
|
||||
|
||||
<button class="btn" type="submit" id="header-search-icon">
|
||||
<i class="fs16 fw6 rango-search"></i>
|
||||
|
|
@ -154,6 +156,9 @@
|
|||
</div>
|
||||
</script>
|
||||
|
||||
{{-- <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/mobilenet"></script> --}}
|
||||
|
||||
<script type="text/x-template" id="sidebar-categories-template">
|
||||
<div class="wrapper" v-if="rootCategories">
|
||||
Hello World
|
||||
|
|
@ -164,6 +169,26 @@
|
|||
</div>
|
||||
</script>
|
||||
|
||||
<script type="text/x-template" id="image-search-component-template">
|
||||
<div class="d-inline-block">
|
||||
<label class="image-search-container" for="image-search-container">
|
||||
<i class="icon camera-icon"></i>
|
||||
|
||||
<input
|
||||
type="file"
|
||||
class="d-none"
|
||||
ref="image_search_input"
|
||||
id="image-search-container"
|
||||
v-on:change="uploadImage()" />
|
||||
|
||||
<img
|
||||
class="d-none"
|
||||
id="uploaded-image-url"
|
||||
:src="uploadedImageUrl" />
|
||||
</label>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
(() => {
|
||||
Vue.component('cart-btn', {
|
||||
|
|
@ -319,5 +344,72 @@
|
|||
}
|
||||
}
|
||||
});
|
||||
|
||||
Vue.component('image-search-component', {
|
||||
template: '#image-search-component-template',
|
||||
data: function() {
|
||||
return {
|
||||
uploadedImageUrl: ''
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
uploadImage: function() {
|
||||
debugger
|
||||
this.$root.showLoader();
|
||||
var formData = new FormData();
|
||||
|
||||
formData.append('image', this.$refs.image_search_input.files[0]);
|
||||
|
||||
axios.post(
|
||||
"{{ route('shop.image.search.upload') }}",
|
||||
formData,
|
||||
{
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
}
|
||||
).then(response => {
|
||||
var net;
|
||||
this.uploadedImageUrl = response.data;
|
||||
|
||||
(async () => {
|
||||
try {
|
||||
var queryString = '';
|
||||
var analysedResult = [];
|
||||
net = await mobilenet.load();
|
||||
|
||||
const imgElement = document.getElementById('uploaded-image-url');
|
||||
|
||||
const result = await net.classify(imgElement);
|
||||
|
||||
result.forEach(value => {
|
||||
queryString = value.className.split(',');
|
||||
|
||||
if (queryString.length > 1) {
|
||||
analysedResult = analysedResult.concat(queryString)
|
||||
} else {
|
||||
analysedResult.push(queryString[0])
|
||||
}
|
||||
})
|
||||
|
||||
localStorage.searchedImageUrl = this.uploadedImageUrl;
|
||||
|
||||
queryString = localStorage.searched_terms = analysedResult.join('_');
|
||||
|
||||
this.$root.hideLoader();
|
||||
|
||||
window.location.href = "{{ route('shop.search.index') }}" + '?term=' + queryString + '&image-search=1';
|
||||
} catch (error) {
|
||||
this.$root.hideLoader();
|
||||
};
|
||||
})();
|
||||
}).catch(() => {
|
||||
debugger
|
||||
this.$root.hideLoader();
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
})()
|
||||
</script>
|
||||
|
|
@ -209,23 +209,22 @@
|
|||
this.$validator.validateAll(scope)
|
||||
.then(result => {
|
||||
if (result) {
|
||||
document.body.style.cursor = 'wait';
|
||||
this.$root.showLoader();
|
||||
|
||||
switch (scope) {
|
||||
case 'address-form':
|
||||
this.saveAddress();
|
||||
document.body.style.cursor = 'default';
|
||||
break;
|
||||
|
||||
case 'shipping-form':
|
||||
if (this.showShippingSection) {
|
||||
document.body.style.cursor = 'wait';
|
||||
this.$root.showLoader();
|
||||
this.saveShipping();
|
||||
break;
|
||||
}
|
||||
|
||||
case 'payment-form':
|
||||
document.body.style.cursor = 'wait';
|
||||
this.$root.showLoader();
|
||||
this.savePayment();
|
||||
|
||||
this.isPlaceOrderEnabled = ! this.validateAddressForm();
|
||||
|
|
@ -301,7 +300,7 @@
|
|||
console.log(this.is_customer_exist);
|
||||
|
||||
if (response.data)
|
||||
document.body.style.cursor = 'default';
|
||||
this.$root.hideLoader();
|
||||
})
|
||||
.catch(function (error) {})
|
||||
})
|
||||
|
|
@ -396,9 +395,12 @@
|
|||
shippingMethods = response.data.shippingMethods;
|
||||
|
||||
this.getOrderSummary();
|
||||
|
||||
this.$root.hideLoader();
|
||||
})
|
||||
.catch(error => {
|
||||
this.disable_button = false;
|
||||
this.$root.hideLoader();
|
||||
|
||||
this.handleErrorResponse(error.response, 'address-form')
|
||||
})
|
||||
|
|
@ -409,12 +411,10 @@
|
|||
|
||||
this.$http.post("{{ route('shop.checkout.save-shipping') }}", {'shipping_method': this.selected_shipping_method})
|
||||
.then(response => {
|
||||
this.$root.hideLoader();
|
||||
this.disable_button = false;
|
||||
|
||||
this.showPaymentSection = true;
|
||||
|
||||
document.body.style.cursor = 'default';
|
||||
|
||||
paymentHtml = Vue.compile(response.data.html)
|
||||
|
||||
this.completed_step = this.step_numbers[response.data.jump_to_section] + 1;
|
||||
|
|
@ -431,7 +431,7 @@
|
|||
})
|
||||
.catch(error => {
|
||||
this.disable_button = false;
|
||||
|
||||
this.$root.hideLoader();
|
||||
this.handleErrorResponse(error.response, 'shipping-form')
|
||||
})
|
||||
},
|
||||
|
|
@ -448,7 +448,7 @@
|
|||
this.disable_button = false;
|
||||
|
||||
this.showSummarySection = true;
|
||||
document.body.style.cursor = 'default';
|
||||
this.$root.hideLoader();
|
||||
|
||||
reviewHtml = Vue.compile(response.data.html)
|
||||
this.completed_step = this.step_numbers[response.data.jump_to_section] + 1;
|
||||
|
|
@ -460,6 +460,7 @@
|
|||
})
|
||||
.catch(error => {
|
||||
this.disable_button = false;
|
||||
this.$root.hideLoader();
|
||||
this.handleErrorResponse(error.response, 'payment-form')
|
||||
});
|
||||
}
|
||||
|
|
@ -470,18 +471,23 @@
|
|||
this.disable_button = false;
|
||||
this.isPlaceOrderEnabled = false;
|
||||
|
||||
this.$root.showLoader();
|
||||
|
||||
this.$http.post("{{ route('shop.checkout.save-order') }}", {'_token': "{{ csrf_token() }}"})
|
||||
.then(function(response) {
|
||||
.then(response => {
|
||||
if (response.data.success) {
|
||||
if (response.data.redirect_url) {
|
||||
this.$root.hideLoader();
|
||||
window.location.href = response.data.redirect_url;
|
||||
} else {
|
||||
this.$root.hideLoader();
|
||||
window.location.href = "{{ route('shop.checkout.success') }}";
|
||||
}
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
this.disable_button = true;
|
||||
this.$root.hideLoader();
|
||||
|
||||
window.showAlert(`alert-danger`, this.__('shop.general.alert.danger'), "{{ __('shop::app.common.error') }}");
|
||||
})
|
||||
|
|
|
|||
|
|
@ -10,7 +10,10 @@
|
|||
<shimmer-component v-if="isLoading && !isMobileView"></shimmer-component>
|
||||
|
||||
<template v-else-if="newProducts.length > 0">
|
||||
<card-list-header heading="{{ __('shop::app.home.new-products') }}">
|
||||
<card-list-header
|
||||
row-class="pl-26"
|
||||
heading="{{ __('shop::app.home.new-products') }}"
|
||||
>
|
||||
</card-list-header>
|
||||
|
||||
{!! view_render_event('bagisto.shop.new-products.before') !!}
|
||||
|
|
|
|||
4
packages/Webkul/Velocity/src/Resources/views/shop/layouts/master.blade.php
Normal file → Executable file
4
packages/Webkul/Velocity/src/Resources/views/shop/layouts/master.blade.php
Normal file → Executable file
|
|
@ -130,6 +130,10 @@
|
|||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal-parent" id="loader" style="top: 0" v-show="showPageLoader">
|
||||
<overlay-loader :is-open="true"></overlay-loader>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- below footer -->
|
||||
|
|
|
|||
|
|
@ -2,8 +2,12 @@
|
|||
@inject ('productRatingHelper', 'Webkul\Product\Helpers\Review')
|
||||
@inject ('productImageHelper', 'Webkul\Product\Helpers\ProductImage')
|
||||
|
||||
@php
|
||||
$direction = core()->getCurrentLocale()->direction;
|
||||
@endphp
|
||||
|
||||
<recently-viewed
|
||||
add-class="{{ isset($addClass) ? $addClass : '' }}"
|
||||
add-class="{{ isset($addClass) ? $addClass . " $direction": '' }}"
|
||||
quantity="{{ isset($quantity) ? $quantity : null }}"
|
||||
add-class-wrapper="{{ isset($addClassWrapper) ? $addClassWrapper : '' }}">
|
||||
</recently-viewed>
|
||||
|
|
|
|||
Loading…
Reference in New Issue