diff --git a/app/Http/Controllers/Fo/ProductController.php b/app/Http/Controllers/Fo/ProductController.php index 17dc8a8c..6d57faac 100644 --- a/app/Http/Controllers/Fo/ProductController.php +++ b/app/Http/Controllers/Fo/ProductController.php @@ -15,6 +15,7 @@ use Illuminate\Contracts\Pagination\LengthAwarePaginator; use Illuminate\Database\Eloquent\Builder; use Illuminate\Http\Request; use Illuminate\Support\Collection; +use Illuminate\Support\Facades\Cache; class ProductController extends Controller { @@ -78,18 +79,73 @@ class ProductController extends Controller if (is_null($productModel)) { abort(404); } + $productModelSibling = $this->getSiblingModels($productModel); /** @var \App\Models\GeneralSetting|null $generalSettingModel Current general setting */ $generalSettingModel = GeneralSetting::query()->where('type', SettingsType::product)->first(); return view('fo.pages.products.show', [ 'productModel' => $productModel, + 'prevProductModel' => $productModelSibling[0], + 'nextProductModel' => $productModelSibling[1], 'productModels' => $this->getProductsFiltered($productModel), 'recipeModels' => $this->getRecipesFiltered($productModel), 'generalSettingModel' => $generalSettingModel, ]); } + /** + * Get product models titles for search input propositions. + * + * @param \App\Models\Product $productModel + * @return array + */ + public function getSiblingModels(Product $productModel): array + { + $slug = (Cache::get('productsFilter')) + ? (((is_null($productModel->{Cache::get('productsFilter')})) + ? $productModel->{"sub" . Cache::get('productsFilter')}->{Cache::get('productsFilter')} + : $productModel->{Cache::get('productsFilter')})->slug) + : ""; + $productModelsList = Product::query() + ->with('range', 'subrange', 'meat', 'submeat') + ->when(in_array(Cache::get('productsFilter'), ['range', 'meat']), function (Builder $q) use ($slug) { + $q->where('published', true) + ->whereHas(Cache::get('productsFilter'), function (Builder $q) use ($slug) { + $q->where('published', true)->where('slug', $slug); + }) + ->orWhereHas('sub' . Cache::get('productsFilter'), function (Builder $q) use ($slug) { + $q->where('published', true) + ->whereHas(Cache::get('productsFilter'), function (Builder $q) use ($slug) { + $q->where('published', true)->where('slug', $slug); + }); + }); + }) + ->when(in_array(Cache::get('productsFilter'), ['subrange', 'submeat']), function (Builder $q) use ($slug) { + $q->where('published', true) + ->whereHas(Cache::get('productsFilter'), function (Builder $q) use ($slug) { + $q->where('published', true)->where('slug', $slug); + }); + }) + ->where('published', true) + ->orderBy('slug', 'ASC') + ->get(); + + $collectionIndex = $productModelsList->search(function ($productModelItem, $key) use ($productModel) { + if ($productModelItem->getKey() === $productModel->getKey()) { + return $key; + }; + }); + + $productModelSibling[0] = (is_null($productModelsList->get($collectionIndex - 1))) + ? $productModelsList->last() + : $productModelsList->get($collectionIndex - 1); + $productModelSibling[1] = (is_null($productModelsList->get($collectionIndex + 1))) + ? $productModelsList->first() + : $productModelsList->get($collectionIndex + 1); + return $productModelSibling; + } + /** * Get product models titles for search input propositions. * @@ -159,6 +215,7 @@ class ProductController extends Controller public function getProductsByRange( Request $request ): \Illuminate\Http\JsonResponse|\Illuminate\Contracts\View\View { + Cache::put('productsFilter', 'range'); $rangeModel = Range::query() ->where('slug', $request->model_slug) ->where('published', true) @@ -202,6 +259,7 @@ class ProductController extends Controller public function getProductsBySubrange( Request $request ): \Illuminate\Http\JsonResponse|\Illuminate\Contracts\View\View { + Cache::put('productsFilter', 'subrange'); $rangeModel = Range::query() ->where('slug', $request->model_slug) ->where('published', true) @@ -249,6 +307,7 @@ class ProductController extends Controller public function getProductsByMeat( Request $request ): \Illuminate\Http\JsonResponse|\Illuminate\Contracts\View\View { + Cache::put('productsFilter', 'meat'); $meatModel = Meat::query() ->where('slug', $request->model_slug) ->where('published', true) @@ -291,6 +350,7 @@ class ProductController extends Controller public function getProductsBySubmeat( Request $request ): \Illuminate\Http\JsonResponse|\Illuminate\Contracts\View\View { + Cache::put('productsFilter', 'submeat'); $meatModel = Meat::query() ->where('slug', $request->model_slug) ->where('published', true) diff --git a/resources/assets/images/common/arrow.svg b/resources/assets/images/common/arrow-brown.svg similarity index 100% rename from resources/assets/images/common/arrow.svg rename to resources/assets/images/common/arrow-brown.svg diff --git a/resources/assets/images/common/arrow-white.svg b/resources/assets/images/common/arrow-white.svg new file mode 100644 index 00000000..2a1455fc --- /dev/null +++ b/resources/assets/images/common/arrow-white.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/sass/fo/pages/product.scss b/resources/sass/fo/pages/product.scss index 104defe5..08a5897c 100644 --- a/resources/sass/fo/pages/product.scss +++ b/resources/sass/fo/pages/product.scss @@ -6,6 +6,46 @@ height: 110%; } + &-next-desktop { + top: 40%; + padding-top: 6rem; + transform: translateY(-50%) rotate(-3deg); + transition: .3s; + + @include media-breakpoint-up(lg) { + top: 60%; + } + + @include media-breakpoint-up(xl) { + top: 70%; + } + + .img-fluid { + top: 100%; + left: 1rem; + height: 6.1rem !important; + transition: .6s; + } + + &:hover { + transform: translateY(-50%) rotate(0deg); + + .img-fluid { + top: 0; + } + } + } + + .product-header-next-mobile { + width: 2rem; + height: 2rem; + padding: 0.4rem; + + &:first-of-type .img-fluid { + transform: rotate(180deg); + } + } + .product-paper { &:nth-child(1), &:nth-child(2) { diff --git a/resources/sass/fo/utilities/_mixins.scss b/resources/sass/fo/utilities/_mixins.scss index 538c1ccc..adc02bb3 100644 --- a/resources/sass/fo/utilities/_mixins.scss +++ b/resources/sass/fo/utilities/_mixins.scss @@ -82,7 +82,7 @@ display: block; width: 0.75rem; height: 0.75rem; - background-image: url('@/images/common/arrow.svg'); + background-image: url('@/images/common/arrow-brown.svg'); background-position: center; background-repeat: no-repeat; background-size: contain; diff --git a/resources/ts/fo/components/RangesSliderComponent.vue b/resources/ts/fo/components/RangesSliderComponent.vue index eaa25d44..eacc245d 100644 --- a/resources/ts/fo/components/RangesSliderComponent.vue +++ b/resources/ts/fo/components/RangesSliderComponent.vue @@ -41,7 +41,7 @@ @@ -258,12 +258,12 @@ diff --git a/resources/views/fo/pages/products/index.blade.php b/resources/views/fo/pages/products/index.blade.php index 68da75d0..b14de850 100644 --- a/resources/views/fo/pages/products/index.blade.php +++ b/resources/views/fo/pages/products/index.blade.php @@ -53,12 +53,12 @@ diff --git a/resources/views/fo/pages/products/show.blade.php b/resources/views/fo/pages/products/show.blade.php index 782d45a9..5757c35d 100644 --- a/resources/views/fo/pages/products/show.blade.php +++ b/resources/views/fo/pages/products/show.blade.php @@ -13,11 +13,37 @@
-
+ @if ($productModel->getKey() !== $nextProductModel->getKey()) +
+ {{ $nextProductModel->packaging_alt }} + +
+ {{ __('models.classes.product') }}
+ {{ __('suivant') }} +
+ {{ __('Flèche blanche') }} +
+
+ @endif +
-
- {{-- FIXME: wait feedback JM for this button (prev product) --}} -
+
+ @if ($productModel->getKey() !== $prevProductModel->getKey()) + + {{ __('Flèche marron') }} + + @endif +
@if ($productModel->new) {{ $productModel->packaging_alt }} - {{ $productModel->picture_alt }}
- {{-- FIXME: wait feedback JM for this button (next product) --}} + @if ($productModel->getKey() !== $nextProductModel->getKey()) + + {{ __('Flèche marron') }} + + @endif
@@ -253,13 +287,13 @@
diff --git a/resources/views/fo/pages/recruitment.blade.php b/resources/views/fo/pages/recruitment.blade.php index 6e52259c..85be8ef3 100644 --- a/resources/views/fo/pages/recruitment.blade.php +++ b/resources/views/fo/pages/recruitment.blade.php @@ -47,12 +47,12 @@
diff --git a/resources/views/fo/partials/cards-slider.blade.php b/resources/views/fo/partials/cards-slider.blade.php index 73d41414..122514ba 100644 --- a/resources/views/fo/partials/cards-slider.blade.php +++ b/resources/views/fo/partials/cards-slider.blade.php @@ -21,12 +21,12 @@
diff --git a/resources/views/fo/partials/videos-slider.blade.php b/resources/views/fo/partials/videos-slider.blade.php index d32bf738..7866d89c 100644 --- a/resources/views/fo/partials/videos-slider.blade.php +++ b/resources/views/fo/partials/videos-slider.blade.php @@ -28,12 +28,12 @@