diff --git a/packages/Webkul/Shop/src/Http/Controllers/CategoryController.php b/packages/Webkul/Shop/src/Http/Controllers/CategoryController.php index 168c5657a..cbb6c689e 100755 --- a/packages/Webkul/Shop/src/Http/Controllers/CategoryController.php +++ b/packages/Webkul/Shop/src/Http/Controllers/CategoryController.php @@ -2,7 +2,9 @@ namespace Webkul\Shop\Http\Controllers; +use Webkul\Attribute\Repositories\AttributeRepository; use Webkul\Category\Repositories\CategoryRepository; +use Webkul\Product\Repositories\ProductFlatRepository; class CategoryController extends Controller { @@ -10,10 +12,49 @@ class CategoryController extends Controller * Create a new controller instance. * * @param \Webkul\Category\Repositories\CategoryRepository $categoryRepository + * @param \Webkul\Product\Repositories\ProductFlatRepository $productFlatRepository * @return void */ - public function __construct(protected CategoryRepository $categoryRepository) + public function __construct( + protected CategoryRepository $categoryRepository, + protected ProductFlatRepository $productFlatRepository + + ) { parent::__construct(); } + + /** + * Get filter attributes for product. + * + * @return \Illuminate\Http\Response + */ + public function getFilterAttributes($categoryId = null, AttributeRepository $attributeRepository) + { + $category = $this->categoryRepository->findOrFail($categoryId); + + if (empty($filterAttributes = $category->filterableAttributes)) { + $filterAttributes = $attributeRepository->getFilterAttributes(); + } + + return response()->json([ + 'filter_attributes' => $filterAttributes, + ]); + } + + /** + * Get category product maximum price. + * + * @return \Illuminate\Http\Response + */ + public function getCategoryProductMaximumPrice($categoryId = null) + { + $category = $this->categoryRepository->findOrFail($categoryId); + + $maxPrice = $this->productFlatRepository->handleCategoryProductMaximumPrice($category); + + return response()->json([ + 'max_price' => $maxPrice, + ]); + } } diff --git a/packages/Webkul/Shop/src/Http/Controllers/ProductController.php b/packages/Webkul/Shop/src/Http/Controllers/ProductController.php index 41b419477..2ad14209c 100755 --- a/packages/Webkul/Shop/src/Http/Controllers/ProductController.php +++ b/packages/Webkul/Shop/src/Http/Controllers/ProductController.php @@ -4,33 +4,24 @@ namespace Webkul\Shop\Http\Controllers; use Illuminate\Support\Facades\Storage; use Webkul\Attribute\Repositories\AttributeRepository; -use Webkul\Category\Repositories\CategoryRepository; use Webkul\Product\Repositories\ProductAttributeValueRepository; use Webkul\Product\Repositories\ProductDownloadableLinkRepository; use Webkul\Product\Repositories\ProductDownloadableSampleRepository; -use Webkul\Product\Repositories\ProductFlatRepository; -use Webkul\Product\Repositories\ProductRepository; class ProductController extends Controller { /** * Create a new controller instance. * - * @param \Webkul\Product\Repositories\ProductRepository $productRepository - * @param \Webkul\Product\Repositories\ProductFlatRepository $productFlatRepository * @param \Webkul\Product\Repositories\ProductAttributeValueRepository $productAttributeValueRepository * @param \Webkul\Product\Repositories\ProductDownloadableSampleRepository $productDownloadableSampleRepository * @param \Webkul\Product\Repositories\ProductDownloadableLinkRepository $productDownloadableLinkRepository - * @param \Webkul\Category\Repositories\CategoryRepository $categoryRepository * @return void */ public function __construct( - protected ProductRepository $productRepository, - protected ProductFlatRepository $productFlatRepository, protected ProductAttributeValueRepository $productAttributeValueRepository, protected ProductDownloadableSampleRepository $productDownloadableSampleRepository, - protected ProductDownloadableLinkRepository $productDownloadableLinkRepository, - protected CategoryRepository $categoryRepository + protected ProductDownloadableLinkRepository $productDownloadableLinkRepository ) { parent::__construct(); @@ -100,40 +91,4 @@ class ProductController extends Controller abort(404); } } - - /** - * Get filter attributes for product. - * - * @return \Illuminate\Http\Response - */ - public function getFilterAttributes($categoryId = null, AttributeRepository $attributeRepository) - { - $category = $this->categoryRepository->findOrFail($categoryId); - - if (empty($filterAttributes = $category->filterableAttributes)) { - $filterAttributes = $attributeRepository->getFilterAttributes(); - } - - return response()->json([ - 'filter_attributes' => $filterAttributes, - ]); - } - - /** - * Get category product maximum price. - * - * @return \Illuminate\Http\Response - */ - public function getCategoryProductMaximumPrice($categoryId = null) - { - $maxPrice = 0; - - if ($category = $this->categoryRepository->find($categoryId)) { - $maxPrice = $this->productFlatRepository->handleCategoryProductMaximumPrice($category); - } - - return response()->json([ - 'max_price' => $maxPrice, - ]); - } } diff --git a/packages/Webkul/Shop/src/Resources/views/products/list/layered-navigation.blade.php b/packages/Webkul/Shop/src/Resources/views/products/list/layered-navigation.blade.php index 44bb9670b..c70477897 100755 --- a/packages/Webkul/Shop/src/Resources/views/products/list/layered-navigation.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/products/list/layered-navigation.blade.php @@ -2,8 +2,8 @@ {!! view_render_event('bagisto.shop.products.list.layered-nagigation.before') !!} + attribute-src="{{ route('catalog.categories.filterable-attributes', $category->id ?? null) }}" + max-price-src="{{ route('catalog.categories.maximum-price', $category->id ?? null) }}"> {!! view_render_event('bagisto.shop.products.list.layered-nagigation.after') !!} @@ -155,13 +155,18 @@ data: function() { return { appliedFilters: [], + active: false, + sliderConfig: { value: [0, 0], + max: 500, + processStyle: { "backgroundColor": "#FF6472" }, + tooltipStyle: { "backgroundColor": "#FF6472", "borderColor": "#FF6472" @@ -188,12 +193,20 @@ methods: { setMaxPrice: function () { + if (this.attribute['code'] != 'price') { + return; + } + axios .get(this.maxPriceSrc) .then((response) => { let maxPrice = response.data.max_price; - this.sliderConfig.max = maxPrice ? ((parseInt(maxPrice) !== 0 || maxPrice) ? parseInt(maxPrice) : 500) : 500; + + if (! this.appliedFilterValues) { + this.sliderConfig.value = [0, this.sliderConfig.max]; + this.sliderConfig.priceTo = this.sliderConfig.max; + } }); }, diff --git a/packages/Webkul/Shop/src/Routes/store-front-routes.php b/packages/Webkul/Shop/src/Routes/store-front-routes.php index 369f24361..8bd0b8690 100644 --- a/packages/Webkul/Shop/src/Routes/store-front-routes.php +++ b/packages/Webkul/Shop/src/Routes/store-front-routes.php @@ -4,6 +4,7 @@ use Illuminate\Support\Facades\Route; use Webkul\CMS\Http\Controllers\Shop\PagePresenterController; use Webkul\Shop\Http\Controllers\HomeController; use Webkul\Shop\Http\Controllers\ProductController; +use Webkul\Shop\Http\Controllers\CategoryController; use Webkul\Shop\Http\Controllers\ReviewController; use Webkul\Shop\Http\Controllers\SearchController; use Webkul\Shop\Http\Controllers\SubscriptionController; @@ -79,7 +80,7 @@ Route::group(['middleware' => ['web', 'locale', 'theme', 'currency']], function 'view' => 'shop.products.index', ])->name('shop.product.file.download'); - Route::get('products/get-filter-attributes/{categoryId?}', [ProductController::class, 'getFilterAttributes'])->name('admin.catalog.products.get-filter-attributes'); + Route::get('categories/filterable-attributes/{categoryId?}', [CategoryController::class, 'getFilterAttributes'])->name('catalog.categories.filterable-attributes'); - Route::get('products/get-category-product-maximum-price/{categoryId?}', [ProductController::class, 'getCategoryProductMaximumPrice'])->name('admin.catalog.products.get-category-product-maximum-price'); + Route::get('categories/maximum-price/{categoryId?}', [CategoryController::class, 'getCategoryProductMaximumPrice'])->name('catalog.categories.maximum-price'); }); diff --git a/packages/Webkul/Velocity/src/Resources/views/shop/products/list/layered-navigation.blade.php b/packages/Webkul/Velocity/src/Resources/views/shop/products/list/layered-navigation.blade.php index 1de0cd3ec..b6dd2927b 100644 --- a/packages/Webkul/Velocity/src/Resources/views/shop/products/list/layered-navigation.blade.php +++ b/packages/Webkul/Velocity/src/Resources/views/shop/products/list/layered-navigation.blade.php @@ -2,8 +2,8 @@ {!! view_render_event('bagisto.shop.products.list.layered-nagigation.before') !!} + attribute-src="{{ route('catalog.categories.filterable-attributes', $category->id ?? null) }}" + max-price-src="{{ route('catalog.categories.maximum-price', $category->id ?? null) }}"> {!! view_render_event('bagisto.shop.products.list.layered-nagigation.after') !!} @@ -176,18 +176,25 @@ data: function() { return { active: false, + appliedFilters: [], + sliderConfig: { max: 500, + value: [0, 0], + processStyle: { "backgroundColor": "#FF6472" }, + tooltipStyle: { "borderColor": "#FF6472", "backgroundColor": "#FF6472", }, + priceTo: 0, + priceFrom: 0, } } @@ -213,11 +220,14 @@ methods: { setMaxPrice: function () { + if (this.attribute['code'] != 'price') { + return; + } + axios .get(this.maxPriceSrc) .then((response) => { let maxPrice = response.data.max_price; - this.sliderConfig.max = maxPrice ? ((parseInt(maxPrice) !== 0 || maxPrice) ? parseInt(maxPrice) : 500) : 500; if (! this.appliedFilterValues) {