query('q')); $results = mb_strlen($q) >= 2 ? $this->results($q) : []; if ($request->expectsJson() || $request->ajax() || $request->wantsJson()) { return response()->json(['results' => $results]); } return view('search.index', [ 'query' => $q, 'results' => $results, ]); } /** @return list */ private function results(string $q): array { $account = ladill_account(); $like = '%'.$q.'%'; $results = []; Transfer::query() ->where('user_id', $account->id) ->where('status', '!=', Transfer::STATUS_DELETED) ->where(function ($query) use ($like) { $query->where('title', 'like', $like) ->orWhere('message', 'like', $like) ->orWhere('recipient_email', 'like', $like); }) ->withCount('files') ->latest() ->limit(8) ->get() ->each(function (Transfer $transfer) use (&$results) { $results[] = [ 'type' => 'transfer', 'title' => $transfer->title, 'subtitle' => $transfer->files_count.' file'.($transfer->files_count === 1 ? '' : 's').' · '.$transfer->billingStatusLabel(), 'url' => route('transfer.transfers.show', $transfer), ]; }); TransferFile::query() ->whereHas('transfer', fn ($inner) => $inner ->where('user_id', $account->id) ->where('status', '!=', Transfer::STATUS_DELETED)) ->where('original_name', 'like', $like) ->with('transfer') ->latest() ->limit(8) ->get() ->each(function (TransferFile $file) use (&$results) { $params = $file->transfer->is_folder ? ['folder' => $file->transfer_id, 'q' => $file->original_name] : ['q' => $file->original_name]; $results[] = [ 'type' => 'file', 'title' => $file->original_name, 'subtitle' => $file->humanSize().($file->transfer->is_folder ? ' · '.$file->transfer->title : ''), 'url' => route('transfer.files.index', $params), ]; }); return array_slice($results, 0, 15); } }