feat: quote detail modal, SteelERP favicon, and notification navigation
- Pipeline page: clicking a supplier quote card opens a modal with full
line-item breakdown, lead time, payment terms, notes, awarded status,
and a Compare All Quotes button
- Eager-load supplierQuotes.supplier and supplierQuotes.items in pipeline
controller to avoid N+1 on the modal data
- Browser tab now shows SteelERP first (SteelERP — Page Name)
- Added SVG favicon matching the sidebar blue-square logo
- Notification clicks now navigate to the relevant page via a dedicated
/notifications/{id}/go route that marks only that notification as read
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
This commit is contained in:
1 parent
30b2fb3958
commit
9c4c752800
6 files changed
+244
-15
No files matched your search
+8
-1
@@ -49,11 +49,18 @@ Route::middleware(['auth', 'verified'])->group(function () {
|
||||
'items' => auth()->user()->unreadNotifications()->latest()->take(10)->get()->map(fn($n) => [
|
||||
'id' => $n->id,
|
||||
'message' => $n->data['message'] ?? '',
|
||||
'url' => $n->data['url'] ?? null,
|
||||
'go_url' => route('notifications.go', $n->id),
|
||||
'ago' => $n->created_at->diffForHumans(),
|
||||
]),
|
||||
]))->name('notifications.unread');
|
||||
|
||||
Route::get('/notifications/{id}/go', function (string $id) {
|
||||
$n = auth()->user()->notifications()->findOrFail($id);
|
||||
$n->markAsRead();
|
||||
$dest = $n->data['url'] ?? route('dashboard');
|
||||
return redirect($dest);
|
||||
})->name('notifications.go');
|
||||
|
||||
Route::post('/notifications/read-all', fn() => response()->json(
|
||||
tap(auth()->user()->unreadNotifications()->update(['read_at' => now()]))
|
||||
))->name('notifications.read-all');
|
||||
|
||||
Reference in new issue
Block a user