complete story 7.6 with qa tests
This commit is contained in:
@@ -16,8 +16,11 @@ new class extends Component
|
||||
|
||||
public array $availableSlots = [];
|
||||
|
||||
public function mount(): void
|
||||
public array $bookedDates = [];
|
||||
|
||||
public function mount(array $bookedDates = []): void
|
||||
{
|
||||
$this->bookedDates = $bookedDates;
|
||||
$this->year = now()->year;
|
||||
$this->month = now()->month;
|
||||
$this->loadMonthAvailability();
|
||||
@@ -57,6 +60,11 @@ new class extends Component
|
||||
|
||||
public function selectDate(string $date): void
|
||||
{
|
||||
// Prevent selecting user's already booked dates
|
||||
if (in_array($date, $this->bookedDates)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$status = $this->monthAvailability[$date] ?? 'unavailable';
|
||||
|
||||
if (in_array($status, ['available', 'partial'])) {
|
||||
@@ -119,10 +127,16 @@ new class extends Component
|
||||
$current = $firstDay->copy();
|
||||
while ($current->lte($lastDay)) {
|
||||
$dateStr = $current->format('Y-m-d');
|
||||
|
||||
// Check if user has already booked this date
|
||||
$status = in_array($dateStr, $this->bookedDates)
|
||||
? 'user_booked'
|
||||
: ($this->monthAvailability[$dateStr] ?? 'unavailable');
|
||||
|
||||
$days[] = [
|
||||
'date' => $dateStr,
|
||||
'day' => $current->day,
|
||||
'status' => $this->monthAvailability[$dateStr] ?? 'unavailable',
|
||||
'status' => $status,
|
||||
];
|
||||
$current->addDay();
|
||||
}
|
||||
@@ -136,6 +150,7 @@ new class extends Component
|
||||
'monthName' => Carbon::create($this->year, $this->month, 1)->translatedFormat('F Y'),
|
||||
'calendarDays' => $this->buildCalendarDays(),
|
||||
'dayHeaders' => $this->getDayHeaders(),
|
||||
'bookedDates' => $this->bookedDates,
|
||||
];
|
||||
}
|
||||
}; ?>
|
||||
@@ -175,10 +190,11 @@ new class extends Component
|
||||
'h-12 rounded-lg text-center transition-colors font-medium',
|
||||
'bg-emerald-100 text-emerald-700 hover:bg-emerald-200 dark:bg-emerald-900/30 dark:text-emerald-400 dark:hover:bg-emerald-900/50' => $dayData['status'] === 'available',
|
||||
'bg-amber-100 text-amber-700 hover:bg-amber-200 dark:bg-amber-900/30 dark:text-amber-400 dark:hover:bg-amber-900/50' => $dayData['status'] === 'partial',
|
||||
'bg-sky-100 text-sky-700 cursor-not-allowed dark:bg-sky-900/30 dark:text-sky-400' => $dayData['status'] === 'user_booked',
|
||||
'bg-zinc-100 text-zinc-400 cursor-not-allowed dark:bg-zinc-800 dark:text-zinc-600' => in_array($dayData['status'], ['past', 'closed', 'blocked', 'full']),
|
||||
'ring-2 ring-amber-500 dark:ring-amber-400' => $selectedDate === $dayData['date'],
|
||||
])
|
||||
@disabled(in_array($dayData['status'], ['past', 'closed', 'blocked', 'full']))
|
||||
@disabled(in_array($dayData['status'], ['past', 'closed', 'blocked', 'full', 'user_booked']))
|
||||
>
|
||||
{{ $dayData['day'] }}
|
||||
</button>
|
||||
@@ -221,6 +237,12 @@ new class extends Component
|
||||
<div class="w-4 h-4 rounded bg-amber-100 dark:bg-amber-900/30"></div>
|
||||
<span class="text-zinc-600 dark:text-zinc-400">{{ __('booking.partial') }}</span>
|
||||
</div>
|
||||
@if(count($bookedDates) > 0)
|
||||
<div class="flex items-center gap-2">
|
||||
<div class="w-4 h-4 rounded bg-sky-100 dark:bg-sky-900/30"></div>
|
||||
<span class="text-zinc-600 dark:text-zinc-400">{{ __('booking.user_booked') }}</span>
|
||||
</div>
|
||||
@endif
|
||||
<div class="flex items-center gap-2">
|
||||
<div class="w-4 h-4 rounded bg-zinc-100 dark:bg-zinc-800"></div>
|
||||
<span class="text-zinc-600 dark:text-zinc-400">{{ __('booking.unavailable') }}</span>
|
||||
|
||||
Reference in New Issue
Block a user