placeholder = implode(', ', array_map(function ($class) { return __(strtolower(class_basename($class))); }, $this->typesAvailable)); } public function selectProfile($value) { $profile = collect($this->searchResults)->firstWhere('id', $value); if (!$profile) { return; } $this->dispatch($this->eventName, profiles: $profile); $this->search = ''; $this->searchResults = []; } public function updatedSearch($newValue) { if (strlen($newValue) <= 2) { $this->searchResults = []; return; } $search = $newValue; $results = collect(); $locationRelations = ['locations.city.translations', 'locations.district.translations', 'locations.division.translations']; foreach ($this->typesAvailable as $type) { if ($type === User::class) { $results = $results->merge( User::where('name', 'like', '%' . $search . '%') ->with($locationRelations) ->limit(6)->get() ->map(fn($item) => [ 'id' => $item->id, 'type' => User::class, 'name' => $item->name, 'description' => '', 'location' => $item->getLocationFirstShort(), 'profile_photo_path' => url(Storage::url($item->profile_photo_path)), ]) ); } if ($type === Organization::class) { $results = $results->merge( Organization::where('name', 'like', '%' . $search . '%') ->with($locationRelations) ->limit(6)->get() ->map(fn($item) => [ 'id' => $item->id, 'type' => Organization::class, 'name' => $item->name, 'description' => __('Organization'), 'location' => $item->getLocationFirstShort(), 'profile_photo_path' => url(Storage::url($item->profile_photo_path)), ]) ); } if (class_exists('App\\Models\\Bank') && $type === Bank::class) { $results = $results->merge( Bank::where('name', 'like', '%' . $search . '%') ->with($locationRelations) ->limit(6)->get() ->map(fn($item) => [ 'id' => $item->id, 'type' => Bank::class, 'name' => $item->name, 'description' => __('Bank'), 'location' => $item->getLocationFirstShort(), 'profile_photo_path' => url(Storage::url($item->profile_photo_path)), ]) ); } if (class_exists('App\\Models\\Admin') && $type === Admin::class) { $results = $results->merge( Admin::where('name', 'like', '%' . $search . '%') ->with($locationRelations) ->limit(6)->get() ->map(fn($item) => [ 'id' => $item->id, 'type' => Admin::class, 'name' => $item->name, 'description' => __('Admin'), 'location' => $item->getLocationFirstShort(), 'profile_photo_path' => url(Storage::url($item->profile_photo_path)), ]) ); } } $this->searchResults = $results->take(6)->values()->all(); } public function render() { return view('livewire.profile.select-multiple-profiles'); } }