Skip to content

Commit 3e61552

Browse files
committed
Refactor home page results and infinite scroll
1 parent 2d2422b commit 3e61552

File tree

137 files changed

+1580
-1616
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

137 files changed

+1580
-1616
lines changed

app/Http/Controllers/Public/HomeController.php

Lines changed: 39 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,28 @@ public function index(Request $request)
2424

2525
$equipments = $this->getFilteredEquipments($request, $locationPreferences);
2626

27-
// Handle full page load vs. infinite scroll request
28-
if (!request()->header('X-Inertia')) {
29-
// Full page load - fetch all pages up to current
30-
$currentPage = $request->input('page', 1);
31-
$equipments = $this->getAllPagesUpTo($request, $locationPreferences, $currentPage);
32-
}
27+
// Get current filters
28+
$currentFilters = [
29+
'search' => $request->search,
30+
'categories' => $request->categories,
31+
'organizations' => $request->organizations,
32+
'radius' => $locationPreferences['radius'] ?? null,
33+
'city' => $locationPreferences['city'] ?? null,
34+
'postcode' => $locationPreferences['postcode'] ?? null,
35+
];
36+
37+
// Get previous filters from session
38+
$previousFilters = $request->session()->get('previous_filters', []);
39+
40+
// Check if filters have actually changed
41+
$hasFilterChanged = $this->filtersHaveChanged($currentFilters, $previousFilters);
42+
43+
// Store current filters for next comparison
44+
$request->session()->put('previous_filters', $currentFilters);
3345

3446
return Inertia::render('Public/Home', [
35-
'equipments' => $equipments,
47+
'equipments' => $hasFilterChanged ? $equipments->items() : Inertia::merge(fn () => $equipments->items()),
48+
'equipments_pagination' => $equipments->toArray(),
3649
'filters' => [
3750
'search' => $request->search,
3851
'categories' => $request->categories,
@@ -55,6 +68,25 @@ public function index(Request $request)
5568
]);
5669
}
5770

71+
private function filtersHaveChanged(array $currentFilters, array $previousFilters): bool
72+
{
73+
// Normalize arrays for comparison
74+
$normalizeArray = function ($value) {
75+
if (is_array($value)) {
76+
sort($value); // Sort to ensure consistent comparison
77+
78+
return $value;
79+
}
80+
81+
return $value;
82+
};
83+
84+
$current = array_map($normalizeArray, $currentFilters);
85+
$previous = array_map($normalizeArray, $previousFilters);
86+
87+
return $current !== $previous;
88+
}
89+
5890
private function getFilteredEquipments(Request $request, $locationPreferences, $page = null, $perPage = 10)
5991
{
6092
$query = Equipment::query()
@@ -117,22 +149,4 @@ private function getFilteredEquipments(Request $request, $locationPreferences, $
117149

118150
return $query->paginate($perPage);
119151
}
120-
121-
private function getAllPagesUpTo(Request $request, $locationPreferences, int $currentPage): \Illuminate\Pagination\LengthAwarePaginator
122-
{
123-
$perPage = 10;
124-
$allResults = collect();
125-
126-
for ($page = 1; $page <= $currentPage; $page++) {
127-
$pageResults = $this->getFilteredEquipments($request, $locationPreferences, $page, $perPage);
128-
$allResults = $allResults->concat($pageResults->items());
129-
}
130-
131-
return new \Illuminate\Pagination\LengthAwarePaginator(
132-
$allResults,
133-
$this->getFilteredEquipments($request, $locationPreferences)->total(),
134-
$perPage,
135-
$currentPage
136-
);
137-
}
138152
}

public/build/assets/AccordionTrigger.vue_vue_type_script_setup_true_lang-TpooWOxm.js renamed to public/build/assets/AccordionTrigger.vue_vue_type_script_setup_true_lang-Dw0LWIzA.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/build/assets/AddressInput-ClcIFMHm.js renamed to public/build/assets/AddressInput-Ck9NDLEy.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/build/assets/AdminLayout-CunsHm-5.js renamed to public/build/assets/AdminLayout-Dv_kHB9-.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/build/assets/Appearance-B3ckDtg-.js renamed to public/build/assets/Appearance-d0ThnP1t.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/build/assets/AuthLayout.vue_vue_type_script_setup_true_lang-BR7M2Doq.js renamed to public/build/assets/AuthLayout.vue_vue_type_script_setup_true_lang-Df2eJw3N.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/build/assets/CardContent.vue_vue_type_script_setup_true_lang-CWGOebFc.js renamed to public/build/assets/CardContent.vue_vue_type_script_setup_true_lang-Ys-F6Y3F.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/build/assets/CardDescription.vue_vue_type_script_setup_true_lang-fBidX3-p.js renamed to public/build/assets/CardDescription.vue_vue_type_script_setup_true_lang-B_OYPV-s.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/build/assets/CardTitle.vue_vue_type_script_setup_true_lang-BFb4SUbK.js renamed to public/build/assets/CardTitle.vue_vue_type_script_setup_true_lang-Bk9BkEhI.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)