What seems to be the problem:
I am trying to check the amount of selectedCourses and when the count is 0 then update a different property to 0.
Steps to Reproduce:
Are you using the latest version of Livewire: Yes
Do you have any screenshots or code examples:
<?php
namespace App\Http\Livewire;
use App\Models\Course;
use App\Models\Semester;
use Livewire\Component;
class CreateSemesterCourses extends Component
{
protected $listeners = [‘courseRemoved’ => ‘countRemainingCourses’];
/**
* @var App\Models\Semester
*/
public Semester $semester;
/**
* List of all courses.
*
* @var array
*/
public $courses;
/**
* Semester that will duplicated.
*
* @var int
*/
public $semesterIdToDuplicate;
/**
* List of courses of semester to duplicate.
*
* @var array
*/
public $selectedCourses;
/**
* Apply properties to the instance.
*
* @param App\Models\Semester $semester
* @return void
*/
public function mount(Semester $semester)
{
$this->semester = $semester;
$this->courses = Course::allForDropdown()->toArray();
}
/**
* Display a list of resources.
*
* @return \Illuminate\View\View
*/
public function render()
{
return view('livewire.semesters.create-semester-courses', [
'semesters' => Semester::orderBy('start_date')->pluck('name', 'id')->prepend('Please choose a semester', '0'),
'semester' => $this->semester,
'courses' => $this->courses,
]);
}
/**
* Updates selected courses of semester to duplicate.
*
* @param int $value
* @return array
*/
public function updatedSemesterIdToDuplicate($value)
{
if ($value == 0) {
$this->dispatchBrowserEvent('livewire:load');
return $this->selectedCourses = [];
}
$duplicateSemester = Semester::find($value);
$courses = $duplicateSemester->courseSections->map(function ($section) {
return $section->course;
});
$uniqueCourses = $courses->unique(function ($course) {
return $course->name;
});
$uniqueCourses->map(function ($course) {
return [
'label' => $course->name,
'value' => $course->id,
];
})->toArray();
$this->selectedCourses = $uniqueCourses->pluck('id')->toArray();
$this->dispatchBrowserEvent('livewire:load');
}
public function countRemainingCourses()
{
if (count($this->selectedCourses) == 0) {
$this->semesterIdToDuplicate = 0;
$this->dispatchBrowserEvent('livewire:load');
}
$this->dispatchBrowserEvent('livewire:load');
}
}
@push(‘scripts’)
// Class definition
var KTDualListbox = function() {
// Private functions
var coursesListBox = function () {
// Dual Listbox
var _this = document.getElementById(‘courses_listbox’);
// init dual listbox
var dualListBox = new DualListbox(_this, {
addEvent: function (value) {
},
removeEvent: function (value) {
Livewire.emit('courseRemoved')
},
availableTitle: 'Available courses',
selectedTitle: 'Selected courses',
addButtonText: 'Add',
removeButtonText: 'Remove',
addAllButtonText: 'Add All',
removeAllButtonText: 'Remove All',
});
};
return {
// public functions
init: function() {
coursesListBox();
},
};
}();
window.addEventListener('livewire:load', function() {
KTDualListbox.init();
});
</script>