diff --git a/config/log-viewer.php b/config/log-viewer.php index d207c3ea..0557e8d1 100644 --- a/config/log-viewer.php +++ b/config/log-viewer.php @@ -231,4 +231,14 @@ 'lazy_scan_chunk_size_in_mb' => 50, 'strip_extracted_context' => true, + + /* + |-------------------------------------------------------------------------- + | Per page options + |-------------------------------------------------------------------------- + | Define the available options for number of results per page + | + */ + + 'per_page_options' => [10, 25, 50, 100, 250, 500], ]; diff --git a/resources/js/components/PaginationOptions.vue b/resources/js/components/PaginationOptions.vue index b7e0b99f..324db531 100644 --- a/resources/js/components/PaginationOptions.vue +++ b/resources/js/components/PaginationOptions.vue @@ -2,6 +2,7 @@ import {useLogViewerStore} from "../stores/logViewer"; const logViewerStore = useLogViewerStore(); +const paginationOptions = window.LogViewer.per_page_options || [10, 25, 50, 100, 250, 500]; diff --git a/src/Http/Controllers/IndexController.php b/src/Http/Controllers/IndexController.php index bce6ad87..07071692 100644 --- a/src/Http/Controllers/IndexController.php +++ b/src/Http/Controllers/IndexController.php @@ -27,6 +27,7 @@ public function __invoke() 'supports_hosts' => LogViewer::supportsHostsFeature(), 'hosts' => LogViewer::getHosts(), + 'per_page_options' => config('log-viewer.per_page_options') ?? [10, 25, 50, 100, 250, 500], ], ]); } diff --git a/tests/Feature/IndexControllerTest.php b/tests/Feature/IndexControllerTest.php new file mode 100644 index 00000000..b7f318d3 --- /dev/null +++ b/tests/Feature/IndexControllerTest.php @@ -0,0 +1,42 @@ +set('log-viewer.per_page_options', [10, 25, 50, 100, 250, 500]); + + $response = get(route('log-viewer.index')); + + $response->assertStatus(200); + $response->assertViewHas('logViewerScriptVariables'); + + $scriptVars = $response->viewData('logViewerScriptVariables'); + expect($scriptVars)->toHaveKey('per_page_options'); + expect($scriptVars['per_page_options'])->toBe([10, 25, 50, 100, 250, 500]); +}); + +test('custom per page options are passed to the view', function () { + config()->set('log-viewer.per_page_options', [5, 15, 30, 60, 120]); + + $response = get(route('log-viewer.index')); + + $response->assertStatus(200); + $response->assertViewHas('logViewerScriptVariables'); + + $scriptVars = $response->viewData('logViewerScriptVariables'); + expect($scriptVars)->toHaveKey('per_page_options'); + expect($scriptVars['per_page_options'])->toBe([5, 15, 30, 60, 120]); +}); + +test('per page options fallback to defaults if not set in config', function () { + config()->set('log-viewer.per_page_options', null); + + $response = get(route('log-viewer.index')); + + $response->assertStatus(200); + $response->assertViewHas('logViewerScriptVariables'); + + $scriptVars = $response->viewData('logViewerScriptVariables'); + expect($scriptVars)->toHaveKey('per_page_options'); + expect($scriptVars['per_page_options'])->toBe([10, 25, 50, 100, 250, 500]); +});