use new route for dash and project
This commit is contained in:
@@ -8,6 +8,7 @@ use App\Models\Project;
|
|||||||
use App\Models\Server;
|
use App\Models\Server;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
use Illuminate\Support\Facades\Artisan;
|
use Illuminate\Support\Facades\Artisan;
|
||||||
|
use Illuminate\Support\Facades\Redirect;
|
||||||
use Livewire\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
class Dashboard extends Component
|
class Dashboard extends Component
|
||||||
@@ -49,6 +50,11 @@ class Dashboard extends Component
|
|||||||
])->sortBy('id')->groupBy('server_name')->toArray();
|
])->sortBy('id')->groupBy('server_name')->toArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function navigateToProject($projectUuid)
|
||||||
|
{
|
||||||
|
return Redirect::route('project.show', ['project_uuid' => $projectUuid]);
|
||||||
|
}
|
||||||
|
|
||||||
public function render()
|
public function render()
|
||||||
{
|
{
|
||||||
return view('livewire.dashboard');
|
return view('livewire.dashboard');
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ namespace App\Livewire\Project;
|
|||||||
use App\Models\PrivateKey;
|
use App\Models\PrivateKey;
|
||||||
use App\Models\Project;
|
use App\Models\Project;
|
||||||
use App\Models\Server;
|
use App\Models\Server;
|
||||||
|
use Illuminate\Support\Facades\Redirect;
|
||||||
use Livewire\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
class Index extends Component
|
class Index extends Component
|
||||||
@@ -30,4 +31,9 @@ class Index extends Component
|
|||||||
{
|
{
|
||||||
return view('livewire.project.index');
|
return view('livewire.project.index');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function navigateToProject($projectUuid)
|
||||||
|
{
|
||||||
|
return Redirect::route('project.show', ['project_uuid' => $projectUuid]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
<div class="grid grid-cols-1 gap-2 xl:grid-cols-2">
|
<div class="grid grid-cols-1 gap-2 xl:grid-cols-2">
|
||||||
@foreach ($projects as $project)
|
@foreach ($projects as $project)
|
||||||
<div class="gap-2 border border-transparent cursor-pointer box group"
|
<div class="gap-2 border border-transparent cursor-pointer box group"
|
||||||
onclick="gotoProject('{{ $project->uuid }}','{{ $project->default_environment }}')">
|
wire:click="navigateToProject('{{ $project->uuid }}')">
|
||||||
<div class="flex flex-1 mx-6">
|
<div class="flex flex-1 mx-6">
|
||||||
<div class="flex flex-col justify-center flex-1">
|
<div class="flex flex-col justify-center flex-1">
|
||||||
<div class="box-title">{{ $project->name }}</div>
|
<div class="box-title">{{ $project->name }}</div>
|
||||||
@@ -34,10 +34,15 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center justify-center gap-2 text-xs font-bold">
|
<div class="flex items-center justify-center gap-2 text-xs font-bold">
|
||||||
<a class="hover:underline"
|
@if($project->environments->first())
|
||||||
href="{{ route('project.resource.create', ['project_uuid' => $project->uuid, 'environment_name' => data_get($project, 'default_environment', 'production')]) }}">
|
<a class="hover:underline"
|
||||||
<span class="p-2 font-bold">+ Add Resource</span>
|
href="{{ route('project.resource.create', [
|
||||||
</a>
|
'project_uuid' => $project->uuid,
|
||||||
|
'environment_uuid' => $project->environments->first()->uuid
|
||||||
|
]) }}">
|
||||||
|
<span class="p-2 font-bold">+ Add Resource</span>
|
||||||
|
</a>
|
||||||
|
@endif
|
||||||
<a class="hover:underline"
|
<a class="hover:underline"
|
||||||
href="{{ route('project.edit', ['project_uuid' => $project->uuid]) }}">
|
href="{{ route('project.edit', ['project_uuid' => $project->uuid]) }}">
|
||||||
Settings
|
Settings
|
||||||
@@ -167,15 +172,4 @@
|
|||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
|
|
||||||
<script>
|
|
||||||
function gotoProject(uuid, environment) {
|
|
||||||
if (environment) {
|
|
||||||
window.location.href = '/project/' + uuid + '/' + environment;
|
|
||||||
} else {
|
|
||||||
window.location.href = '/project/' + uuid;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -12,21 +12,21 @@
|
|||||||
<div x-data="searchComponent()">
|
<div x-data="searchComponent()">
|
||||||
<x-forms.input placeholder="Search for name, description..." x-model="search" id="null" />
|
<x-forms.input placeholder="Search for name, description..." x-model="search" id="null" />
|
||||||
<div class="grid grid-cols-2 gap-4 pt-4">
|
<div class="grid grid-cols-2 gap-4 pt-4">
|
||||||
<template x-if="allFilteredItems.length === 0">
|
<template x-if="filteredProjects.length === 0">
|
||||||
<div>No project found with the search term "<span x-text="search"></span>".</div>
|
<div>No project found with the search term "<span x-text="search"></span>".</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template x-for="item in allFilteredItems" :key="item.uuid">
|
<template x-for="project in filteredProjects" :key="project.uuid">
|
||||||
<div class="box group" @click="gotoProject(item)">
|
<div class="box group cursor-pointer" @click="$wire.navigateToProject(project.uuid)">
|
||||||
<div class="flex flex-col justify-center flex-1 mx-6">
|
<div class="flex flex-col justify-center flex-1 mx-6">
|
||||||
<div class="box-title" x-text="item.name"></div>
|
<div class="box-title" x-text="project.name"></div>
|
||||||
<div class="box-description ">
|
<div class="box-description">
|
||||||
<div x-text="item.description"></div>
|
<div x-text="project.description"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center justify-center gap-2 pt-4 pb-2 mr-4 text-xs lg:py-0 lg:justify-normal">
|
<div class="flex items-center justify-center gap-2 pt-4 pb-2 mr-4 text-xs lg:py-0 lg:justify-normal">
|
||||||
<a class="mx-4 font-bold hover:underline"
|
<a class="mx-4 font-bold hover:underline"
|
||||||
:href="item.settingsRoute">
|
:href="project.settingsRoute">
|
||||||
Settings
|
Settings
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
@@ -36,38 +36,21 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
function sortFn(a, b) {
|
|
||||||
return a.name.localeCompare(b.name)
|
|
||||||
}
|
|
||||||
|
|
||||||
function searchComponent() {
|
function searchComponent() {
|
||||||
return {
|
return {
|
||||||
search: '',
|
search: '',
|
||||||
projects: @js($projects),
|
get filteredProjects() {
|
||||||
filterAndSort(items) {
|
const projects = @js($projects);
|
||||||
if (this.search === '') {
|
if (this.search === '') {
|
||||||
return Object.values(items).sort(sortFn);
|
return projects;
|
||||||
}
|
}
|
||||||
const searchLower = this.search.toLowerCase();
|
const searchLower = this.search.toLowerCase();
|
||||||
return Object.values(items).filter(item => {
|
return projects.filter(project => {
|
||||||
return (item.name?.toLowerCase().includes(searchLower) ||
|
return (project.name?.toLowerCase().includes(searchLower) ||
|
||||||
item.description?.toLowerCase().includes(searchLower))
|
project.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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user