Hide a round trip's return leg from the Bookings list

Showing both legs as separate rows read as two unrelated bookings rather
than one round trip. The list now only queries outbound/primary legs; the
return leg is still reachable via the outbound leg's existing "Linked Leg"
link on the detail page.
This commit is contained in:
Nyan Lin Paing
2026-09-03 11:46:25 +07:00
parent b5b4fe06e6
commit 07545a883d
2 changed files with 26 additions and 3 deletions
@@ -28,9 +28,16 @@ class BookingsTable
public static function configure(Table $table): Table public static function configure(Table $table): Table
{ {
return $table return $table
->modifyQueryUsing(fn (Builder $query) => $query->with([ ->modifyQueryUsing(fn (Builder $query) => $query
'route.company', 'route.fromDestination', 'route.toDestination', 'timeSlot', 'vehicleOptions', // A round trip's return leg is its own Booking row, but
])) // showing both legs side by side in one list reads as two
// unrelated bookings rather than one round trip — hide it
// here; it's still reachable via the primary leg's "Linked
// Leg" link on the detail page (view its own row directly).
->where('is_return_leg', false)
->with([
'route.company', 'route.fromDestination', 'route.toDestination', 'timeSlot', 'vehicleOptions',
]))
->defaultSort('created_at', 'desc') ->defaultSort('created_at', 'desc')
->columns([ ->columns([
TextColumn::make('booking_ref') TextColumn::make('booking_ref')
@@ -344,6 +344,22 @@ test('a soft-deleted booking is hidden from the default list but visible via the
->assertCanSeeTableRecords([$active, $deleted]); ->assertCanSeeTableRecords([$active, $deleted]);
}); });
test('a round trip\'s return leg has no row of its own in the list, only its outbound leg', function () {
$outbound = Booking::factory()->create(['is_return_leg' => false]);
$return = Booking::factory()->create([
'is_return_leg' => true,
'linked_booking_id' => $outbound->id,
]);
$outbound->update(['linked_booking_id' => $return->id]);
// Showing both legs as separate rows read as two unrelated bookings
// rather than one round trip — the return leg is still reachable via
// the outbound leg's "Linked Leg" link on the detail page.
Livewire::test(ListBookings::class)
->assertCanSeeTableRecords([$outbound])
->assertCanNotSeeTableRecords([$return]);
});
test('the restore action is only visible for a trashed booking', function () { test('the restore action is only visible for a trashed booking', function () {
$active = Booking::factory()->create(); $active = Booking::factory()->create();
$deleted = Booking::factory()->create(); $deleted = Booking::factory()->create();