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>
 |