Skip to content

Commit b3b02a5

Browse files
committed
Ability to configure items per page
1 parent 5f47687 commit b3b02a5

File tree

4 files changed

+55
-6
lines changed

4 files changed

+55
-6
lines changed

config/log-viewer.php

+10
Original file line numberDiff line numberDiff line change
@@ -231,4 +231,14 @@
231231
'lazy_scan_chunk_size_in_mb' => 50,
232232

233233
'strip_extracted_context' => true,
234+
235+
/*
236+
|--------------------------------------------------------------------------
237+
| Per page options
238+
|--------------------------------------------------------------------------
239+
| Define the available options for number of results per page
240+
|
241+
*/
242+
243+
'per_page_options' => [10, 25, 50, 100, 250, 500],
234244
];

resources/js/components/PaginationOptions.vue

+2-6
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import {useLogViewerStore} from "../stores/logViewer";
33
44
const logViewerStore = useLogViewerStore();
5+
const paginationOptions = window.LogViewer.per_page_options || [10, 25, 50, 100, 250, 500];
56
</script>
67

78
<template>
@@ -13,12 +14,7 @@ const logViewerStore = useLogViewerStore();
1314
</select>
1415
<label for="items-per-page" class="sr-only">Items per page</label>
1516
<select id="items-per-page" v-model="logViewerStore.resultsPerPage" class="select">
16-
<option value="10">10 items per page</option>
17-
<option value="25">25 items per page</option>
18-
<option value="50">50 items per page</option>
19-
<option value="100">100 items per page</option>
20-
<option value="250">250 items per page</option>
21-
<option value="500">500 items per page</option>
17+
<option v-for="option in paginationOptions" :key="option" :value="option">{{ option }} items per page</option>
2218
</select>
2319
</div>
2420
</template>

src/Http/Controllers/IndexController.php

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ public function __invoke()
2727

2828
'supports_hosts' => LogViewer::supportsHostsFeature(),
2929
'hosts' => LogViewer::getHosts(),
30+
'per_page_options' => config('log-viewer.per_page_options') ?? [10, 25, 50, 100, 250, 500],
3031
],
3132
]);
3233
}

tests/Feature/IndexControllerTest.php

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
3+
use function Pest\Laravel\get;
4+
5+
test('default per page options are passed to the view', function () {
6+
config()->set('log-viewer.per_page_options', [10, 25, 50, 100, 250, 500]);
7+
8+
$response = get(route('log-viewer.index'));
9+
10+
$response->assertStatus(200);
11+
$response->assertViewHas('logViewerScriptVariables');
12+
13+
$scriptVars = $response->viewData('logViewerScriptVariables');
14+
expect($scriptVars)->toHaveKey('per_page_options');
15+
expect($scriptVars['per_page_options'])->toBe([10, 25, 50, 100, 250, 500]);
16+
});
17+
18+
test('custom per page options are passed to the view', function () {
19+
config()->set('log-viewer.per_page_options', [5, 15, 30, 60, 120]);
20+
21+
$response = get(route('log-viewer.index'));
22+
23+
$response->assertStatus(200);
24+
$response->assertViewHas('logViewerScriptVariables');
25+
26+
$scriptVars = $response->viewData('logViewerScriptVariables');
27+
expect($scriptVars)->toHaveKey('per_page_options');
28+
expect($scriptVars['per_page_options'])->toBe([5, 15, 30, 60, 120]);
29+
});
30+
31+
test('per page options fallback to defaults if not set in config', function () {
32+
config()->set('log-viewer.per_page_options', null);
33+
34+
$response = get(route('log-viewer.index'));
35+
36+
$response->assertStatus(200);
37+
$response->assertViewHas('logViewerScriptVariables');
38+
39+
$scriptVars = $response->viewData('logViewerScriptVariables');
40+
expect($scriptVars)->toHaveKey('per_page_options');
41+
expect($scriptVars['per_page_options'])->toBe([10, 25, 50, 100, 250, 500]);
42+
});

0 commit comments

Comments
 (0)