From a1124a885d62fe7e71c484c9aae5c2878f158c14 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Sat, 5 Oct 2024 15:03:40 +0200 Subject: [PATCH] feat: project search on frontend --- app/Models/Project.php | 4 +- resources/views/livewire/dashboard.blade.php | 6 +- .../views/livewire/project/index.blade.php | 76 ++++++++++++------- .../livewire/project/resource/index.blade.php | 4 + 4 files changed, 60 insertions(+), 30 deletions(-) diff --git a/app/Models/Project.php b/app/Models/Project.php index 18481751c..03900485e 100644 --- a/app/Models/Project.php +++ b/app/Models/Project.php @@ -24,6 +24,8 @@ class Project extends BaseModel { protected $guarded = []; + protected $appends = ['default_environment']; + public static function ownedByCurrentTeam() { return Project::whereTeamId(currentTeam()->id)->orderBy('name'); @@ -131,7 +133,7 @@ class Project extends BaseModel return $this->postgresqls()->get()->merge($this->redis()->get())->merge($this->mongodbs()->get())->merge($this->mysqls()->get())->merge($this->mariadbs()->get())->merge($this->keydbs()->get())->merge($this->dragonflies()->get())->merge($this->clickhouses()->get()); } - public function default_environment() + public function getDefaultEnvironmentAttribute() { $default = $this->environments()->where('name', 'production')->first(); if ($default) { diff --git a/resources/views/livewire/dashboard.blade.php b/resources/views/livewire/dashboard.blade.php index b81666a63..2e4f8fc99 100644 --- a/resources/views/livewire/dashboard.blade.php +++ b/resources/views/livewire/dashboard.blade.php @@ -23,7 +23,7 @@
@foreach ($projects as $project)
+ onclick="gotoProject('{{ $project->uuid }}','{{ $project->default_environment }}')">
{{ $project->name }}
@@ -33,7 +33,7 @@
All your projects are here.
-
- @forelse ($projects as $project) -
-
-
{{ $project->name }}
-
- {{ $project->description }}
+
+ +
+ + + +
+ + function searchComponent() { + return { + search: '', + projects: @js($projects), + filterAndSort(items) { + if (this.search === '') { + return Object.values(items).sort(sortFn); + } + const searchLower = this.search.toLowerCase(); + return Object.values(items).filter(item => { + return (item.name?.toLowerCase().includes(searchLower) || + item.description?.toLowerCase().includes(searchLower)) + }).sort(sortFn); + }, + get allFilteredItems() { + return [ + this.projects, + ].flatMap((items) => this.filterAndSort(items)); + } + } + } + + function gotoProject(item) { + if (item.default_environment) { + window.location.href = '/project/' + item.uuid + '/' + item.default_environment; + } else { + window.location.href = '/project/' + item.uuid; + } + } +
diff --git a/resources/views/livewire/project/resource/index.blade.php b/resources/views/livewire/project/resource/index.blade.php index 3a4744ac3..f6502762a 100644 --- a/resources/views/livewire/project/resource/index.blade.php +++ b/resources/views/livewire/project/resource/index.blade.php @@ -50,6 +50,10 @@
+ +