* feat(README): add InterviewPal sponsorship link and corresponding SVG icon * chore(versions): update coolify version to 4.0.0-beta.413 and nightly version to 4.0.0-beta.414 in configuration files * fix(terminal): enhance WebSocket client verification with authorized IPs in terminal server * chore(versions): update realtime version to 1.0.8 in versions.json * chore(versions): update realtime version to 1.0.8 in versions.json * chore(docker): update soketi image version to 1.0.8 in production configuration files * chore(versions): update coolify version to 4.0.0-beta.414 and nightly version to 4.0.0-beta.415 in configuration files * fix(ApplicationDeploymentJob): ensure source is an object before checking GitHub app properties * fix(ui): Disable livewire navigate feature (causing spam of setInterval()) * fix(ui): Remove required attribute from image input in service application view * fix(ui): Change application image validation to be nullable in service application view * fix(Server): Correct proxy path formatting for Traefik proxy type
58 lines
2.3 KiB
PHP
58 lines
2.3 KiB
PHP
<div>
|
|
<x-slot:title>
|
|
Projects | Coolify
|
|
</x-slot>
|
|
<div class="flex gap-2">
|
|
<h1>Projects</h1>
|
|
<x-modal-input buttonTitle="+ Add" title="New Project">
|
|
<livewire:project.add-empty />
|
|
</x-modal-input>
|
|
</div>
|
|
<div class="subtitle">All your projects are here.</div>
|
|
<div x-data="searchComponent()">
|
|
<x-forms.input placeholder="Search for name, description..." x-model="search" id="null" />
|
|
<div class="grid grid-cols-2 gap-4 pt-4">
|
|
<template x-if="filteredProjects.length === 0">
|
|
<div>No project found with the search term "<span x-text="search"></span>".</div>
|
|
</template>
|
|
|
|
<template x-for="project in filteredProjects" :key="project.uuid">
|
|
<div class="box group cursor-pointer" @click="$wire.navigateToProject(project.uuid)">
|
|
<div class="flex flex-col justify-center flex-1 mx-6">
|
|
<div class="box-title" x-text="project.name"></div>
|
|
<div class="box-description">
|
|
<div x-text="project.description"></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">
|
|
<a class="mx-4 font-bold hover:underline" wire:click.stop
|
|
:href="`/project/${project.uuid}/edit`">
|
|
Settings
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</div>
|
|
</div>
|
|
|
|
<script>
|
|
function searchComponent() {
|
|
return {
|
|
search: '',
|
|
get filteredProjects() {
|
|
const projects = @js($projects);
|
|
if (this.search === '') {
|
|
return projects;
|
|
}
|
|
const searchLower = this.search.toLowerCase();
|
|
return projects.filter(project => {
|
|
return (project.name?.toLowerCase().includes(searchLower) ||
|
|
project.description?.toLowerCase().includes(searchLower))
|
|
});
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
</div>
|