Skip to content

Commit 4824fa0

Browse files
committed
✨ Add pagination.
1 parent 4ca37d7 commit 4824fa0

File tree

15 files changed

+231
-167
lines changed

15 files changed

+231
-167
lines changed

Diff for: app/Http/Controllers/Autentikasi.php

+3-2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use App\Http\Controllers\Controller;
66
use Exception;
7+
use Illuminate\Http\RedirectResponse;
78
use Illuminate\Http\Request;
89
use Illuminate\Support\Facades\Auth;
910
use Illuminate\Support\Facades\DB;
@@ -12,7 +13,7 @@
1213

1314
class Autentikasi extends Controller
1415
{
15-
public function login(Request $request)
16+
public function login(Request $request): RedirectResponse
1617
{
1718
try {
1819
$request->validate([
@@ -40,7 +41,7 @@ public function login(Request $request)
4041
}
4142
}
4243

43-
public function logout(Request $request)
44+
public function logout(Request $request): RedirectResponse
4445
{
4546
Auth::logout();
4647
$request->session()->invalidate();

Diff for: app/Http/Controllers/Dasbor.php

+11-15
Original file line numberDiff line numberDiff line change
@@ -15,30 +15,26 @@ class Dasbor extends Controller
1515
public function show(): RedirectResponse|View
1616
{
1717
$user = Auth::user();
18-
$kecamatan = $user->kecamatan ?? collect();
19-
$keluarga = $user->keluarga ?? collect();
20-
$data = KeluargaModel::where('id_kader', $user->kader->id_kader)
21-
->get()
22-
->map(fn($item) => (object) [
23-
'id' => $item->id_keluarga,
24-
'nama' => $item->nama_kepala_keluarga,
25-
'desa' => $item->desa->nama_desa,
26-
]);
18+
$data = KeluargaModel::where('id_kader', $user->kader->id_kader ?? null)->paginate(request()->input('per_page', 10));
19+
$data->through(fn($item) => (object) [
20+
'id' => $item->id_keluarga,
21+
'nama' => $item->nama_kepala_keluarga,
22+
'desa' => $item->desa->nama_desa,
23+
]);
2724

2825
if (!$user) return redirect()->route('masuk');
2926
if (!in_array($user->tipe, ['admin', 'kader'])) abort(403, 'Anda tidak memiliki akses.');
3027

3128
return match ($user->tipe) {
3229
'admin' => view('pages.admin.dasbor', [
33-
'jumlah_kecamatan' => $kecamatan->count(),
34-
'jumlah_keluarga' => $keluarga->count(),
35-
'jumlah_desa' => $keluarga->unique('id_desa')->count(),
30+
'jumlah_desa' => KeluargaModel::distinct('id_desa')->count('id_desa'),
31+
'jumlah_kecamatan' => KeluargaModel::distinct('id_kecamatan')->count('id_kecamatan'),
32+
'jumlah_keluarga' => KeluargaModel::count(),
3633
]),
3734
'kader' => view('pages.surveyor.dasbor', [
3835
'data' => $data,
39-
'jumlah_desa' => $keluarga->unique('id_desa')->count(),
40-
'jumlah_keluarga' => $keluarga->count(),
41-
'penomoran_halaman' => '',
36+
'jumlah_desa' => KeluargaModel::where('id_kader', $user->kader->id_kader ?? null)->distinct('id_desa')->count('id_desa'),
37+
'jumlah_keluarga' => KeluargaModel::where('id_kader', $user->kader->id_kader ?? null)->count(),
4238
]),
4339
default => abort(403),
4440
};

Diff for: app/Http/Controllers/Keluarga.php

+9-9
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
use App\Models\User;
1313
use Exception;
1414
use Illuminate\Database\Eloquent\ModelNotFoundException;
15+
use Illuminate\Http\JsonResponse;
1516
use Illuminate\Http\RedirectResponse;
1617
use Illuminate\Http\Request;
1718
use Illuminate\Support\Facades\Auth;
@@ -24,17 +25,16 @@ class Keluarga extends Controller
2425
/**
2526
* Views
2627
*/
27-
public function index($id = null): View|RedirectResponse
28+
public function index($id = null): RedirectResponse|View
2829
{
2930
try {
3031
$kader = Auth::user()->kader->id_kader;
31-
$data = KeluargaModel::where('id_kader', $kader)
32-
->get()
33-
->map(fn($item) => (object) [
34-
'id' => $item->id_keluarga,
35-
'nama' => $item->nama_kepala_keluarga,
36-
'desa' => $item->desa->nama_desa,
37-
]);
32+
$data = KeluargaModel::where('id_kader', $kader)->paginate(request()->input('per_page', 10));
33+
$data->through(fn($item) => (object) [
34+
'id' => $item->id_keluarga,
35+
'nama' => $item->nama_kepala_keluarga,
36+
'desa' => $item->desa->nama_desa,
37+
]);
3838

3939
return view('pages.surveyor.keluarga', ['data' => $data, 'keluarga' => $id ? KeluargaModel::with('desa')->findOrFail($id) : null]);
4040
} catch (Exception $exception) {
@@ -72,7 +72,7 @@ public function show(): View
7272
/**
7373
* Controllers
7474
*/
75-
public function create(Request $request)
75+
public function create(Request $request): JsonResponse
7676
{
7777
DB::beginTransaction();
7878
try {

Diff for: app/Http/Middleware/RemovePageOne.php

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
namespace App\Http\Middleware;
4+
5+
use Closure;
6+
use Illuminate\Http\Request;
7+
use Symfony\Component\HttpFoundation\Response;
8+
9+
class RemovePageOne
10+
{
11+
/**
12+
* Handle an incoming request.
13+
*
14+
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
15+
*/
16+
public function handle(Request $request, Closure $next): Response
17+
{
18+
if ($request->query('page') == 1) return redirect()->to($request->url() . '' . http_build_query($request->except('page')));
19+
return $next($request);
20+
}
21+
}

Diff for: app/Providers/AppServiceProvider.php

+6-1
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,20 @@
44

55
use App\Http\Middleware\Admin;
66
use App\Http\Middleware\Kader;
7+
use App\Http\Middleware\RemovePageOne;
8+
use Illuminate\Contracts\Http\Kernel;
9+
use Illuminate\Pagination\Paginator;
710
use Illuminate\Support\Facades\Route;
811
use Illuminate\Support\ServiceProvider;
912

1013
class AppServiceProvider extends ServiceProvider
1114
{
1215
public function register() {}
1316

14-
public function boot(): void
17+
public function boot(Kernel $kernel): void
1518
{
19+
$kernel->pushMiddleware(RemovePageOne::class);
20+
Paginator::defaultView('shared.navigation.pagination');
1621
Route::aliasMiddleware('admin', Admin::class);
1722
Route::aliasMiddleware('kader', Kader::class);
1823
}

Diff for: bootstrap/app.php

+2-6
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,5 @@
1111
commands: __DIR__ . '/../routes/console.php',
1212
health: '/up',
1313
)
14-
->withMiddleware(function (Middleware $middleware) {
15-
$middleware->alias([
16-
'admin' => Admin::class,
17-
]);
18-
})
19-
->withExceptions(function (Exceptions $exceptions) {})->create();
14+
->withMiddleware(fn(Middleware $middleware): Middleware => $middleware->alias(['admin' => Admin::class]))
15+
->withExceptions(fn(Exceptions $exceptions): Exceptions => $exceptions)->create();

Diff for: public/css/app.css

+42-53
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,46 @@
1-
:root {
2-
--bg-primary: #f4f1e8;
3-
--bg-secondary: #e5f5e6;
4-
--text-primary: #2c5e4f;
5-
--text-secondary: #3d8361;
6-
--text-light: #f4f1e8;
7-
--green-dark: #2c5e4f;
8-
--green-medium: #3d8361;
9-
--green-light: #e5f5e6;
10-
--accent-orange: #ff6b35;
11-
--logout-bg: #ff6b35;
12-
}
13-
14-
.bg-primary {
15-
background-color: var(--bg-primary);
16-
}
17-
18-
.bg-secondary {
19-
background-color: var(--bg-secondary);
20-
}
21-
22-
.text-primary {
23-
color: var(--text-primary);
24-
}
25-
26-
.text-secondary {
27-
color: var(--text-secondary);
28-
}
29-
30-
.bg-green-dark {
31-
background-color: var(--green-dark);
32-
}
33-
34-
.bg-green-medium {
35-
background-color: var(--green-medium);
36-
}
37-
38-
.bg-green-light {
39-
background-color: var(--green-light);
40-
}
41-
42-
.text-green-dark {
43-
color: var(--green-dark);
44-
}
45-
46-
.text-green-medium {
47-
color: var(--green-medium);
48-
}
49-
50-
.text-accent-orange {
51-
color: var(--accent-orange);
52-
}
53-
541
@media screen and (max-width: 3120px) {
2+
:root {
3+
--bg-primary: #f4f1e8;
4+
--bg-secondary: #e5f5e6;
5+
--text-primary: #2c5e4f;
6+
--text-secondary: #3d8361;
7+
--text-light: #f4f1e8;
8+
--green-dark: #2c5e4f;
9+
--green-medium: #3d8361;
10+
--green-light: #e5f5e6;
11+
--accent-orange: #ff6b35;
12+
--logout-bg: #ff6b35;
13+
}
14+
.bg-primary {
15+
background-color: var(--bg-primary);
16+
}
17+
.bg-secondary {
18+
background-color: var(--bg-secondary);
19+
}
20+
.text-primary {
21+
color: var(--text-primary);
22+
}
23+
.text-secondary {
24+
color: var(--text-secondary);
25+
}
26+
.bg-green-dark {
27+
background-color: var(--green-dark);
28+
}
29+
.bg-green-medium {
30+
background-color: var(--green-medium);
31+
}
32+
.bg-green-light {
33+
background-color: var(--green-light);
34+
}
35+
.text-green-dark {
36+
color: var(--green-dark);
37+
}
38+
.text-green-medium {
39+
color: var(--green-medium);
40+
}
41+
.text-accent-orange {
42+
color: var(--accent-orange);
43+
}
5544
::-webkit-scrollbar {
5645
display: none !important;
5746
}

Diff for: public/img/panah-bawah.svg

+5
Loading

Diff for: resources/css/app.css

+42-53
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,49 @@
11
@import "tailwindcss";
22
@source "../views";
33

4-
:root {
5-
--bg-primary: #f4f1e8;
6-
--bg-secondary: #e5f5e6;
7-
--text-primary: #2c5e4f;
8-
--text-secondary: #3d8361;
9-
--text-light: #f4f1e8;
10-
--green-dark: #2c5e4f;
11-
--green-medium: #3d8361;
12-
--green-light: #e5f5e6;
13-
--accent-orange: #ff6b35;
14-
--logout-bg: #ff6b35;
15-
}
16-
17-
.bg-primary {
18-
background-color: var(--bg-primary);
19-
}
20-
21-
.bg-secondary {
22-
background-color: var(--bg-secondary);
23-
}
24-
25-
.text-primary {
26-
color: var(--text-primary);
27-
}
28-
29-
.text-secondary {
30-
color: var(--text-secondary);
31-
}
32-
33-
.bg-green-dark {
34-
background-color: var(--green-dark);
35-
}
36-
37-
.bg-green-medium {
38-
background-color: var(--green-medium);
39-
}
40-
41-
.bg-green-light {
42-
background-color: var(--green-light);
43-
}
44-
45-
.text-green-dark {
46-
color: var(--green-dark);
47-
}
48-
49-
.text-green-medium {
50-
color: var(--green-medium);
51-
}
52-
53-
.text-accent-orange {
54-
color: var(--accent-orange);
55-
}
56-
574
@media screen and (max-width: 3120px) {
5+
:root {
6+
--bg-primary: #f4f1e8;
7+
--bg-secondary: #e5f5e6;
8+
--text-primary: #2c5e4f;
9+
--text-secondary: #3d8361;
10+
--text-light: #f4f1e8;
11+
--green-dark: #2c5e4f;
12+
--green-medium: #3d8361;
13+
--green-light: #e5f5e6;
14+
--accent-orange: #ff6b35;
15+
--logout-bg: #ff6b35;
16+
}
17+
.bg-primary {
18+
background-color: var(--bg-primary);
19+
}
20+
.bg-secondary {
21+
background-color: var(--bg-secondary);
22+
}
23+
.text-primary {
24+
color: var(--text-primary);
25+
}
26+
.text-secondary {
27+
color: var(--text-secondary);
28+
}
29+
.bg-green-dark {
30+
background-color: var(--green-dark);
31+
}
32+
.bg-green-medium {
33+
background-color: var(--green-medium);
34+
}
35+
.bg-green-light {
36+
background-color: var(--green-light);
37+
}
38+
.text-green-dark {
39+
color: var(--green-dark);
40+
}
41+
.text-green-medium {
42+
color: var(--green-medium);
43+
}
44+
.text-accent-orange {
45+
color: var(--accent-orange);
46+
}
5847
::-webkit-scrollbar {
5948
display: none !important;
6049
}

0 commit comments

Comments
 (0)