amount != null) { // Ensure hours is a positive integer or set to null if (!is_null($this->hours) && (!is_numeric($this->hours) || $this->hours <= 0 || intval($this->hours) != $this->hours)) { $this->hours = null; } // Ensure minutes is a positive integer or set to null if (!is_null($this->minutes) && (!is_numeric($this->minutes) || $this->minutes < 0 || intval($this->minutes) != $this->minutes)) { $this->minutes = null; $this->calculateAmount(); } elseif (!is_null($this->minutes) && is_numeric($this->minutes)) { $minutesInt = (int) $this->minutes; // Handle minutes overflow (e.g., 65 minutes → 1 hour 5 minutes, 1230 minutes → 20 hours 30 minutes) if ($minutesInt > 59) { $additionalHours = intdiv($minutesInt, 60); $remainingMinutes = $minutesInt % 60; $this->hours = is_null($this->hours) || !is_numeric($this->hours) ? 0 : (int) $this->hours; $this->hours += $additionalHours; $this->minutes = $remainingMinutes; } // Add leading zero to minutes if less than 10 if (!is_null($this->minutes) && (int) $this->minutes < 10) { $this->minutes = str_pad((int) $this->minutes, 2, '0', STR_PAD_LEFT); } $this->calculateAmount(); } $this->amount = 0; } $this->amount = $this->amount; } public function resetForm() { $this->reset(); } public function updatedHours() { $this->calculateAmount(); } public function updatedMinutes() { // Handle minutes overflow (e.g., 65 minutes → 1 hour 5 minutes) if (!is_null($this->minutes) && is_numeric($this->minutes)) { $minutesInt = (int) $this->minutes; if ($minutesInt > 59) { // Calculate additional hours from overflow $additionalHours = intdiv($minutesInt, 60); $remainingMinutes = $minutesInt % 60; // Add to hours (default to 0 if hours is null) $this->hours = is_null($this->hours) || !is_numeric($this->hours) ? 0 : (int) $this->hours; $this->hours += $additionalHours; // Set remaining minutes with leading zero if needed $this->minutes = $remainingMinutes < 10 ? str_pad($remainingMinutes, 2, '0', STR_PAD_LEFT) : $remainingMinutes; } elseif ($minutesInt < 10 && $minutesInt >= 0) { // Add leading zero to single digit minutes $this->minutes = str_pad($minutesInt, 2, '0', STR_PAD_LEFT); } } $this->calculateAmount(); } protected function calculateAmount() { $hours = is_numeric($this->hours) ? (int) $this->hours : 0; $minutes = is_numeric($this->minutes) ? (int) $this->minutes : 0; $this->amount = $hours * 60 + $minutes; $this->dispatch('amount', $this->amount); // Format the inputs for empty values if ($this->amount === 0) { $this->reset(['hours', 'minutes']); } else { if ($this->amount < 60) { $this->hours = 0; } if ($this->amount % 60 === 0) { $this->minutes = '00'; } } } public function render() { return view('livewire.amount'); } }