Merge branch 'develop' into trunk
This commit is contained in:
commit
76b95c4b37
3 changed files with 50 additions and 27 deletions
|
|
@ -42,11 +42,11 @@ class ProductController extends Controller
|
|||
): \Illuminate\Contracts\View\View {
|
||||
|
||||
/** @var \Illuminate\Contracts\Pagination\LengthAwarePaginator $productModels */
|
||||
$productModels = $productModelsFiltered ?? Product::query()
|
||||
$productModels = $productModelsFiltered ?? Product::query()
|
||||
->where('published', true)
|
||||
->orderBy('slug')
|
||||
->paginate($this->productModelsPerPage);
|
||||
|
||||
|
||||
$productDiscoverModels = Product::getPublishedDiscovered();
|
||||
$staticPageModel = StaticPage::getCachedStaticPage(StaticPageType::products);
|
||||
$rangeModels = Range::getPublishedOrderedWithSubranges();
|
||||
|
|
@ -122,9 +122,9 @@ class ProductController extends Controller
|
|||
*/
|
||||
public function getSiblingModels(Product $productModel): array
|
||||
{
|
||||
$filter = Cache::get('productsFilter');
|
||||
$filter = Cache::get('productsFilter');
|
||||
$cleanedFilter = $this->cleanSubSubFilter($filter);
|
||||
|
||||
|
||||
/** @var string $slug */
|
||||
$slug = $filter
|
||||
? ((is_null($productModel->{$filter})
|
||||
|
|
@ -132,7 +132,7 @@ class ProductController extends Controller
|
|||
: $productModel->{$filter})->slug ?? "")
|
||||
: "";
|
||||
|
||||
// FIXME: the previous element are added on 30/10/24 to avoid error when productFilters was set on "submeat" for example and user access to product which not have submeat relation -> "Attempt to read property 'sub***' on null"
|
||||
// FIXME: the previous element are added on 30/10/24 to avoid error when productFilters was set on "submeat" for example and user access to product which not have submeat relation -> "Attempt to read property 'sub***' on null"
|
||||
// this fix will just avoid the error, but in this case, product.show have no previous or next product.
|
||||
|
||||
/** @var \Illuminate\Support\Collection $productModelsList */
|
||||
|
|
@ -159,7 +159,7 @@ class ProductController extends Controller
|
|||
->where('published', true)
|
||||
->orderBy('slug')
|
||||
->get();
|
||||
$collectionIndex = $productModelsList->search(function ($productModelItem, $key) use ($productModel) {
|
||||
$collectionIndex = $productModelsList->search(function ($productModelItem, $key) use ($productModel) {
|
||||
if ($productModelItem->getKey() === $productModel->getKey()) {
|
||||
return $key;
|
||||
};
|
||||
|
|
@ -260,15 +260,15 @@ class ProductController extends Controller
|
|||
->with(['range', 'subrange', 'meat', 'submeat'])
|
||||
->where('published', true)
|
||||
->when(!is_null($rangeModel), function (Builder $q) use ($rangeModel, $request) {
|
||||
if ($request->child_slug) {
|
||||
$q->whereHas('subrange', function (Builder $q) use ($request) {
|
||||
$q->whereHas('range', function (Builder $q) use ($rangeModel) {
|
||||
$q->where('published', true)->where('id', $rangeModel->getKey());
|
||||
})->orWhereHas('subrange', function (Builder $q) use ($rangeModel, $request) {
|
||||
if ($request->child_slug) {
|
||||
$q->where('published', true)->where("slug", $request->child_slug);
|
||||
});
|
||||
} else {
|
||||
$q->whereHas('range', function (Builder $q) use ($rangeModel) {
|
||||
$q->where('published', true)->where('id', $rangeModel->getKey());
|
||||
});
|
||||
}
|
||||
} else {
|
||||
$q->where('published', true)->whereIn('id', $rangeModel->subranges->pluck('id')->toArray());
|
||||
}
|
||||
});
|
||||
})
|
||||
->where('published', true)
|
||||
->orderBy('slug')
|
||||
|
|
@ -278,9 +278,10 @@ class ProductController extends Controller
|
|||
return response()->json([
|
||||
'viewsPaginate' => $this->getViewsFromPaginateModels($productModels),
|
||||
'children' => $subrangeModels,
|
||||
'productModels' => $productModels,
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
return $this->index($productModels, $subrangeModels);
|
||||
}
|
||||
|
||||
|
|
@ -295,17 +296,19 @@ class ProductController extends Controller
|
|||
Request $request
|
||||
): \Illuminate\Http\JsonResponse|\Illuminate\Contracts\View\View {
|
||||
Cache::put('productsFilter', 'subrange');
|
||||
$rangeModel = Range::query()
|
||||
$rangeModel = Range::query()
|
||||
->where('slug', $request->model_slug)
|
||||
->where('published', true)
|
||||
->first();
|
||||
$subrangeModel = Subrange::query()
|
||||
|
||||
$subrangeModel = Subrange::query()
|
||||
->when(!is_null($rangeModel), function (Builder $q) use ($rangeModel) {
|
||||
$q->where('range_id', $rangeModel->getKey());
|
||||
})
|
||||
->where('slug', $request->child_slug)
|
||||
->where('published', true)
|
||||
->first();
|
||||
|
||||
$subrangeModels = Subrange::query()
|
||||
->when(!is_null($rangeModel), function (Builder $q) use ($rangeModel) {
|
||||
$q->where('range_id', $rangeModel->getKey());
|
||||
|
|
@ -323,10 +326,12 @@ class ProductController extends Controller
|
|||
})
|
||||
->orderBy('slug')
|
||||
->paginate($this->productModelsPerPage);
|
||||
|
||||
if ($request->ajax()) {
|
||||
return response()->json([
|
||||
'productModels' => $productModels,
|
||||
'viewsPaginate' => $this->getViewsFromPaginateModels($productModels),
|
||||
'children' => [],
|
||||
'children' => $subrangeModels,
|
||||
]);
|
||||
}
|
||||
return $this->index($productModels, $subrangeModels);
|
||||
|
|
@ -417,7 +422,7 @@ class ProductController extends Controller
|
|||
if ($request->ajax()) {
|
||||
return response()->json([
|
||||
'viewsPaginate' => $this->getViewsFromPaginateModels($productModels),
|
||||
'children' => [],
|
||||
'children' => $submeatModels,
|
||||
]);
|
||||
}
|
||||
return $this->index($productModels, null, $submeatModels);
|
||||
|
|
@ -550,12 +555,15 @@ class ProductController extends Controller
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Delete the "sub" start filter to avoid "subsubrange" when user has some filters and hard visit a total different product filter
|
||||
* @var string $filter
|
||||
*
|
||||
*/
|
||||
private function cleanSubSubFilter($filter) {
|
||||
/**
|
||||
* Delete the "sub" start filter to avoid "subsubrange" when user has some filters
|
||||
* and hard visit a total different product filter
|
||||
*
|
||||
* @var string $filter
|
||||
* @return mixed
|
||||
*/
|
||||
private function cleanSubSubFilter($filter): mixed
|
||||
{
|
||||
return str_starts_with($filter, "sub") ? preg_replace('/^sub/', '', $filter) : $filter;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ return [
|
|||
],
|
||||
'complain' => [
|
||||
'label' => 'Une réclamation',
|
||||
'description' => 'Je souhaite envoyer une réclamation sur un produit acheté.',
|
||||
'description' => 'Je souhaite envoyer une réclamation sur un produit acheté (Service Consommateur Qualité).',
|
||||
],
|
||||
'club' => [
|
||||
'label' => 'Le Club des Gaulois',
|
||||
|
|
|
|||
|
|
@ -556,6 +556,17 @@ function initChildrenSwiper(): void {
|
|||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Choose between "sub" or root route.
|
||||
* e.g fo.search.subrange or fo.search.range
|
||||
* @return string
|
||||
*/
|
||||
const routeOrSubRouteSearch = () => {
|
||||
if(filtersDetailsParameters.selectedChildModel) {
|
||||
return filters.value[getFilterById(filtersDetailsParameters.selectedFilterId)].children?.route ?? filters.value[getFilterById(filtersDetailsParameters.selectedFilterId)].route;
|
||||
}
|
||||
return filters.value[getFilterById(filtersDetailsParameters.selectedFilterId)].route;
|
||||
};
|
||||
/**
|
||||
* Check if all models are loaded,
|
||||
* if not, get next models.
|
||||
|
|
@ -571,16 +582,19 @@ function checkScroll(): void {
|
|||
) {
|
||||
paginationParameters.page++;
|
||||
paginationParameters.loading = true;
|
||||
|
||||
|
||||
let routeCustom = (searchParameters.selectedList?.length)
|
||||
? (getRouteFilter(searchParameters.routeWords) + `?page=${paginationParameters.page}&words=${searchParameters.selectedList.join(",")}`)
|
||||
: getRouteFilter(
|
||||
filters.value[getFilterById(filtersDetailsParameters.selectedFilterId)].route,
|
||||
routeOrSubRouteSearch(),
|
||||
(filtersDetailsParameters.selectedChildFilter.length)
|
||||
? { model_slug: filtersDetailsParameters.selectedFilter, child_slug: filtersDetailsParameters.selectedChildFilter, page: paginationParameters.page }
|
||||
: (filtersDetailsParameters.selectedFilter.length)
|
||||
? { model_slug: filtersDetailsParameters.selectedFilter, page: paginationParameters.page }
|
||||
: { page: paginationParameters.page }
|
||||
);
|
||||
|
||||
let url = (filtersDetailsParameters.selectedChildFilter.length)
|
||||
? filtersDetailsParameters.selectedChildFilter
|
||||
: ((filtersDetailsParameters.selectedFilter.length)
|
||||
|
|
@ -693,6 +707,7 @@ function ajaxCall(
|
|||
filtersDetailsParameters.viewsPaginate = (concatResult)
|
||||
? filtersDetailsParameters.viewsPaginate.concat(newViewsPaginate)
|
||||
: newViewsPaginate;
|
||||
|
||||
if (updateChildren) {
|
||||
filters.value[getFilterById(filtersDetailsParameters.selectedFilterId)].children!.models = reponse.data.children;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue