mirror of
https://github.com/pacnpal/thrillwiki_laravel.git
synced 2025-12-20 11:51:11 -05:00
Add enums for ReviewStatus, TrackMaterial, LaunchType, RideCategory, and RollerCoasterType; implement Designer and RideModel models; create migrations for ride_models and helpful_votes tables; enhance RideGalleryComponent documentation
This commit is contained in:
88
app/Livewire/RideDetailComponent.php
Normal file
88
app/Livewire/RideDetailComponent.php
Normal file
@@ -0,0 +1,88 @@
|
||||
<?php
|
||||
|
||||
namespace App\Livewire;
|
||||
|
||||
use App\Models\Ride;
|
||||
use Livewire\Component;
|
||||
|
||||
class RideDetailComponent extends Component
|
||||
{
|
||||
/** @var Ride */
|
||||
public Ride $ride;
|
||||
|
||||
/** @var bool */
|
||||
public bool $showCoasterStats = false;
|
||||
|
||||
public function mount(Ride $ride): void
|
||||
{
|
||||
$this->ride = $ride->load([
|
||||
'park',
|
||||
'parkArea',
|
||||
'manufacturer',
|
||||
'designer',
|
||||
'rideModel',
|
||||
'coasterStats',
|
||||
]);
|
||||
|
||||
$this->showCoasterStats = $ride->category === 'RC' && $ride->coasterStats !== null;
|
||||
}
|
||||
|
||||
public function toggleCoasterStats(): void
|
||||
{
|
||||
$this->showCoasterStats = !$this->showCoasterStats;
|
||||
}
|
||||
|
||||
public function render()
|
||||
{
|
||||
return view('livewire.ride-detail');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the opening year of the ride.
|
||||
*/
|
||||
public function getOpeningYearAttribute(): ?string
|
||||
{
|
||||
return $this->ride->opening_date?->format('Y');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a formatted date range for the ride's operation.
|
||||
*/
|
||||
public function getOperatingPeriodAttribute(): string
|
||||
{
|
||||
$start = $this->ride->opening_date?->format('Y');
|
||||
$end = $this->ride->closing_date?->format('Y');
|
||||
|
||||
if (!$start) {
|
||||
return 'Unknown dates';
|
||||
}
|
||||
|
||||
return $end ? "{$start} - {$end}" : "{$start} - Present";
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the ride's status badge color classes.
|
||||
*/
|
||||
public function getStatusColorClasses(): string
|
||||
{
|
||||
return match($this->ride->status) {
|
||||
'OPERATING' => 'bg-green-100 text-green-800',
|
||||
'CLOSED_TEMP' => 'bg-yellow-100 text-yellow-800',
|
||||
'SBNO' => 'bg-red-100 text-red-800',
|
||||
'CLOSING' => 'bg-orange-100 text-orange-800',
|
||||
'CLOSED_PERM' => 'bg-gray-100 text-gray-800',
|
||||
'UNDER_CONSTRUCTION' => 'bg-blue-100 text-blue-800',
|
||||
'DEMOLISHED' => 'bg-gray-100 text-gray-800',
|
||||
'RELOCATED' => 'bg-purple-100 text-purple-800',
|
||||
default => 'bg-gray-100 text-gray-800',
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Format a measurement value with units.
|
||||
*/
|
||||
public function formatMeasurement(?float $value, string $unit): string
|
||||
{
|
||||
return $value !== null ? number_format($value, 2) . ' ' . $unit : 'N/A';
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user