project = $project->load('rootFolders'); $this->currentFolder = $this->project->rootFolders->first() ?? null; } public function selectFolder($folderId) { $this->selectedFolderId = $folderId; $this->currentFolder = Folder::with('children')->find($folderId); } public function toggleFolder($folderId): void { if (in_array($folderId, $this->expandedFolders)) { $this->expandedFolders = array_diff($this->expandedFolders, [$folderId]); } else { $this->expandedFolders[] = $folderId; } } public function createFolder(): void { $this->validate([ 'folderName' => [ 'required', 'max:255', Rule::unique('folders', 'name')->where(function ($query) { return $query->where('project_id', $this->project->id) ->where('parent_id', $this->currentFolder?->id); }) ] ]); Folder::create([ 'name' => $this->folderName, 'project_id' => $this->project->id, 'parent_id' => $this->currentFolder?->id, ]); $this->hideCreateFolderModal(); $this->reset('folderName'); $this->project->load('rootFolders'); // Recargar carpetas raíz if ($this->currentFolder) { $this->currentFolder->load('children'); // Recargar hijos si está en una subcarpeta } $this->project->refresh(); } /*public function uploadFiles(): void { $this->validate([ 'files.*' => 'file|max:10240|mimes:pdf,docx,xlsx,jpg,png' ]); dd($this->files); foreach ($this->files as $file) { Document::create([ 'name' => $file->getClientOriginalName(), 'file_path' => $file->store("projects/{$this->project->id}/documents"), 'project_id' => $this->project->id, 'folder_id' => $this->currentFolder?->id ]); } $this->reset('files'); if ($this->currentFolder) { $this->currentFolder->refresh(); // Recargar documentos } $this->reset('files'); }*/ public function getDocumentsProperty() { return $this->currentFolder ? $this->currentFolder->documents()->with('versions')->get() : Document::whereNull('folder_id')->where('project_id', $this->project->id)->with('versions')->get(); } public function getBreadcrumbsProperty() { if (!$this->currentFolder) return collect(); $breadcrumbs = collect(); $folder = $this->currentFolder; while ($folder) { $breadcrumbs->prepend($folder); $folder = $folder->parent; } return $breadcrumbs; } public function showCreateFolderModal() { $this->folderName = ''; $this->showFolderModal = true; } public function hideCreateFolderModal() { $this->showFolderModal = false; } // Método para abrir el modal public function openUploadModal(): void { $this->showUploadModal = true; } // Método para manejar archivos seleccionados public function selectFiles($files): void { $this->validate([ 'selectedFiles.*' => 'file|max:10240|mimes:pdf,docx,xlsx,jpg,png' ]); $this->selectedFiles = array_merge($this->selectedFiles, $files); } // Método para eliminar un archivo de la lista public function removeFile($index): void { unset($this->selectedFiles[$index]); $this->selectedFiles = array_values($this->selectedFiles); // Reindexar array } // Método para confirmar y guardar public function uploadFiles(): void { foreach ($this->selectedFiles as $file) { Document::create([ 'name' => $file->getClientOriginalName(), 'file_path' => $file->store("projects/{$this->project->id}/documents"), 'project_id' => $this->project->id, // Asegurar que se envía 'folder_id' => $this->currentFolder?->id, //'user_id' => Auth::id(), //'status' => 'active' // Añadir si tu modelo lo requiere ]); } $this->resetUpload(); $this->project->refresh(); } // Método para procesar los archivos protected function processFiles(): void { foreach ($this->files as $file) { Document::create([ 'name' => $file->getClientOriginalName(), 'file_path' => $file->store("projects/{$this->project->id}/documents"), 'project_id' => $this->project->id, // Asegurar que se envía 'folder_id' => $this->currentFolder?->id, //'user_id' => Auth::id(), //'status' => 'active' // Añadir si tu modelo lo requiere ]); } } // Método para resetear public function resetUpload(): void { $this->reset(['selectedFiles', 'showUploadModal', 'uploadProgress']); } #[On('upload-progress')] public function updateProgress($name, $progress) { $this->uploadProgress[$name] = $progress; } public function addFiles($files) { $this->validate([ 'selectedFiles.*' => 'file|max:10240|mimes:pdf,docx,xlsx,jpg,png' ]); $this->selectedFiles = array_merge($this->selectedFiles, $files); } public function startUpload() { foreach ($this->selectedFiles as $file) { try { $path = $file->store( "projects/{$this->project->id}/".($this->currentFolder ? "folders/{$this->currentFolder->id}" : ""), 'public' ); Document::create([ 'name' => $file->getClientOriginalName(), 'file_path' => $path, 'project_id' => $this->project->id, 'folder_id' => $this->currentFolder?->id, 'user_id' => Auth::id() ]); } catch (\Exception $e) { $this->addError('upload', "Error subiendo {$file->getClientOriginalName()}: {$e->getMessage()}"); } } $this->resetUpload(); $this->project->refresh(); } public function render() { return view('livewire.project.show'); } }