diff --git a/app/Http/Controllers/SearchController.php b/app/Http/Controllers/SearchController.php index 5480bf6..490f167 100644 --- a/app/Http/Controllers/SearchController.php +++ b/app/Http/Controllers/SearchController.php @@ -5,6 +5,7 @@ namespace App\Http\Controllers; use App\Models\Aircraft; use App\Models\Airline; use App\Models\Airport; +use App\Models\User; use Illuminate\Http\Request; class SearchController extends Controller @@ -82,4 +83,23 @@ class SearchController extends Controller ]) ->values(); } + + + + public function users() + { + $q = request('q', ''); + + if (strlen($q) < 2) return []; + + return User::where('name', 'ilike', "%{$q}%") + ->orderBy('name') + ->limit(50) + ->get(['id', 'name']) + ->map(fn($user) => [ + 'value' => $user->id, + 'title' => $user->name, + ]) + ->values(); + } } diff --git a/resources/js/Components/FlightsGoneBy/MainHeader.vue b/resources/js/Components/FlightsGoneBy/MainHeader.vue index 3ad0c77..44f1479 100644 --- a/resources/js/Components/FlightsGoneBy/MainHeader.vue +++ b/resources/js/Components/FlightsGoneBy/MainHeader.vue @@ -5,6 +5,7 @@ import type { SharedProps } from '@/Types/types' import { ref, onMounted, onUnmounted } from 'vue' import NotificationMenu from "@/Components/FlightsGoneBy/NotificationMenu.vue"; import Logo from "@/Components/FlightsGoneBy/Logo.vue"; +import UserSearchBox from "@/Components/UserSearchBox.vue"; const page = usePage() const menuOpen = ref(false) @@ -30,6 +31,7 @@ onUnmounted(() => document.removeEventListener('click', handleClickOutside)) + diff --git a/resources/js/Components/UserSearchBox.vue b/resources/js/Components/UserSearchBox.vue new file mode 100644 index 0000000..f932b01 --- /dev/null +++ b/resources/js/Components/UserSearchBox.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/resources/js/Pages/Feed.vue b/resources/js/Pages/Feed.vue index 50bc385..3c2e9eb 100644 --- a/resources/js/Pages/Feed.vue +++ b/resources/js/Pages/Feed.vue @@ -9,6 +9,7 @@ import PlaneLoader from "@/Components/FlightsGoneBy/PlaneLoader.vue"; import { useFlights } from "@/Composables/useFlights"; import { useApiResource } from "@/Composables/useApiResource"; import Avatar from "@/Components/FlightsGoneBy/Feed/Avatar.vue"; +import UserSearchBox from "@/Components/UserSearchBox.vue"; defineOptions({ layout: MainLayout }) @@ -46,8 +47,9 @@ const { data: following, loading: followingLoading } = useApiResource('/ + +
-