Skip to content

Commit dfb9254

Browse files
committed
Fixed table load and added live user search for scalability
1 parent 51c6c10 commit dfb9254

File tree

7 files changed

+85
-3
lines changed

7 files changed

+85
-3
lines changed

src/App/Http/Controllers/LaravelLoggerController.php

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,14 @@ public function showAccessLog(Request $request)
8686

8787
self::mapAdditionalDetails($activities);
8888

89-
$users = config('LaravelLogger.defaultUserModel')::all();
89+
90+
if(config('LaravelLogger.enableLiveSearch')){
91+
// We are querying only the paginated userIds because in a big application querying all user data is performance heavy
92+
$user_ids = array_unique($activities->pluck('userId')->toArray());
93+
$users = config('LaravelLogger.defaultUserModel')::whereIn(config('LaravelLogger.defaultUserIDField'), $user_ids)->get();
94+
}else{
95+
$users = config('LaravelLogger.defaultUserModel')::all();
96+
}
9097

9198
$data = [
9299
'activities' => $activities,
@@ -305,5 +312,22 @@ public function searchActivityLog($query, $request)
305312
}
306313

307314
return $query;
308-
}
315+
}
316+
/**
317+
* Search the database users according to specific criteria.
318+
*
319+
* @param request
320+
*
321+
* @return filtered user data
322+
*/
323+
public function liveSearch(Request $request){
324+
325+
$filteredUsers = config('LaravelLogger.defaultUserModel')::when(request('userid'), function ($q) {
326+
return $q->where(config('LaravelLogger.defaultUserIDField'), (int) request('userid', 0));
327+
})->when(request('email'), function ($q) {
328+
return $q->where('email', 'like', '%' . request('email') . '%');
329+
});
330+
331+
return response()->json($filteredUsers->get()->pluck('email', config('LaravelLogger.defaultUserIDField')), 200);
332+
}
309333
}

src/config/laravel-logger.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,4 +172,7 @@
172172
'enableFontAwesomeCDN' => env('LARAVEL_LOGGER_FONT_AWESOME_CDN_ENABLED', true),
173173
'fontAwesomeCDN' => env('LARAVEL_LOGGER_FONT_AWESOME_CDN_URL', 'https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css'),
174174

175+
// LiveSearch for scalability
176+
'enableLiveSearch' => env('LARAVEL_LOGGER_LIVE_SEARCH_ENABLED', true),
177+
175178
];

src/resources/views/logger/activity-log.blade.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
@include('LaravelLogger::partials.scripts', ['activities' => $activities])
2424
@include('LaravelLogger::scripts.confirm-modal', ['formTrigger' => '#confirmDelete'])
2525

26+
27+
2628
@if(config('LaravelLogger.enableDrillDown'))
2729
@include('LaravelLogger::scripts.clickable-row')
2830
@include('LaravelLogger::scripts.tooltip')
@@ -57,6 +59,11 @@
5759
@section('content')
5860

5961
<div class="container-fluid">
62+
63+
@if(config('LaravelLogger.enableLiveSearch'))
64+
@include('LaravelLogger::partials.form-live-search')
65+
@endif
66+
6067
@if(config('LaravelLogger.enableSearch'))
6168
@include('LaravelLogger::partials.form-search')
6269
@endif
@@ -131,6 +138,10 @@
131138
</div>
132139
</div>
133140

141+
@if(config('LaravelLogger.enableLiveSearch'))
142+
@include('LaravelLogger::scripts.live-search-script')
143+
@endif
144+
134145
@include('LaravelLogger::modals.confirm-modal', ['formTrigger' => 'confirmDelete', 'modalClass' => 'danger', 'actionBtnIcon' => 'fa-trash-o'])
135146

136147
@endsection
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<div class="row mb-3">
2+
<div class="col-12 col-sm-4 col-lg-6 mb-2">
3+
User Live Search <small>(use the search button before selecting the dropdown to search for a specific user)</small>
4+
</div>
5+
<div class="col-12 col-sm-4 col-lg-2 mb-2">
6+
<input type="text" id='live_search_email' name='live_search_email' placeholder='Email'>
7+
</div>
8+
<div class="col-12 col-sm-4 col-lg-2 mb-2">
9+
<input type="text" id='live_search_userid' name='live_search_userid' placeholder='UserId'>
10+
</div>
11+
<div class="col-12 col-sm-4 col-lg-2 mb-2">
12+
<input id="live_search_button" class="btn btn-primary btn-block" value="{{ trans('LaravelLogger::laravel-logger.dashboard.search.search') }}">
13+
</div>
14+
</div>

src/resources/views/partials/form-search.blade.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
@endif
1212
@if(in_array('user',explode(',', config('LaravelLogger.searchFields'))))
1313
<div class="col-12 col-sm-4 col-lg-2 mb-2">
14-
<select class="form-control" name="user">
14+
<select class="form-control" id="user_select" name="user">
1515
<option value="">{{ trans('LaravelLogger::laravel-logger.dashboard.search.all') }}</option>
1616
@foreach($users as $user)
1717
<option value="{{ $user->$userIdField }}"{{ request()->get('user') && request()->get('user') == $user->$userIdField ? ' selected':'' }}>{{ $user->name }}</option>
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/1.3.3/axios.min.js" integrity="sha512-wS6VWtjvRcylhyoArkahZUkzZFeKB7ch/MHukprGSh1XIidNvHG1rxPhyFnL73M0FC1YXPIXLRDAoOyRJNni/g==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
2+
<script src="https://code.jquery.com/jquery-3.6.3.slim.js" integrity="sha256-DKU1CmJ8kBuEwumaLuh9Tl/6ZB6jzGOBV/5YpNE2BWc=" crossorigin="anonymous"></script>
3+
<script type="text/javascript">
4+
// Script for submitting the livesearch via axios
5+
$( "#live_search_button" ).on( "click", function() {
6+
axios.post('/activity/live-search', {
7+
userid: document.getElementById('live_search_userid').value,
8+
email: document.getElementById('live_search_email').value
9+
})
10+
.then(function (response) {
11+
var newOptions = response.data;
12+
// console.log(newOptions)
13+
var $el = $("#user_select");
14+
$el.empty(); // remove old options
15+
$.each(newOptions, function(key,value) {
16+
$el.append($("<option></option>")
17+
.attr("value", key).text(value));
18+
});
19+
// console.log(response);
20+
})
21+
.catch(function (error) {
22+
console.log(error);
23+
});
24+
});
25+
26+
</script>
27+

src/routes/web.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,7 @@
2121
Route::delete('/clear-activity', ['uses' => 'LaravelLoggerController@clearActivityLog'])->name('clear-activity');
2222
Route::delete('/destroy-activity', ['uses' => 'LaravelLoggerController@destroyActivityLog'])->name('destroy-activity');
2323
Route::post('/restore-log', ['uses' => 'LaravelLoggerController@restoreClearedActivityLog'])->name('restore-activity');
24+
25+
// LiveSearch
26+
Route::post('/live-search', ['uses' => 'LaravelLoggerController@liveSearch'])->name('liveSearch');
2427
});

0 commit comments

Comments
 (0)