'required|string|max:255', 'menuTitle' => 'required|string|max:255', 'menuMessage' => 'required|string', ]; } public function openMenuForm(?int $id = null): void { $this->resetMenuForm(); if ($id) { $menu = WhatsappMenu::findOrFail($id); $this->editMenuId = $id; $this->menuName = $menu->name; $this->menuTitle = $menu->title; $this->menuMessage = $menu->message; $this->menuParentId = $menu->parent_id; $this->menuIsMain = (bool) $menu->is_main; $this->menuIsActive = (bool) $menu->is_active; $this->menuSortOrder = $menu->sort_order; } $this->showMenuForm = true; } public function saveMenu(): void { $this->validate(); $data = [ 'name' => $this->menuName, 'title' => $this->menuTitle, 'message' => $this->menuMessage, 'parent_id' => $this->menuParentId ?: null, 'is_main' => $this->menuIsMain, 'is_active' => $this->menuIsActive, 'sort_order' => $this->menuSortOrder, ]; if ($this->editMenuId) { WhatsappMenu::findOrFail($this->editMenuId)->update($data); $this->alert('success', 'Menú actualizado correctamente.'); } else { WhatsappMenu::create($data); $this->alert('success', 'Menú creado correctamente.'); } $this->resetMenuForm(); } public function deleteMenu(int $id): void { WhatsappMenu::findOrFail($id)->delete(); $this->alert('success', 'Menú eliminado.'); if ($this->viewMenuId === $id) { $this->viewMenuId = null; } } public function openOptionForm(?int $optionId = null, ?int $menuId = null): void { $this->resetOptionForm(); $this->optionForMenuId = $menuId; if ($optionId) { $opt = WhatsappMenuOption::findOrFail($optionId); $this->editOptionId = $optionId; $this->optionForMenuId = $opt->menu_id; $this->optionNumber = $opt->option_number; $this->optionTitle = $opt->title; $this->optionAction = $opt->action_type; $this->optionValue = $opt->action_value ?? ''; $this->optionSort = $opt->sort_order; $this->optionIsActive = (bool) $opt->is_active; } $this->showOptionForm = true; } public function saveOption(): void { $this->validate([ 'optionTitle' => 'required|string|max:255', 'optionForMenuId' => 'required|integer', 'optionNumber' => 'required|integer|min:1', ]); $data = [ 'menu_id' => $this->optionForMenuId, 'option_number' => $this->optionNumber, 'title' => $this->optionTitle, 'action_type' => $this->optionAction, 'action_value' => $this->optionValue, 'sort_order' => $this->optionSort, 'is_active' => $this->optionIsActive, ]; if ($this->editOptionId) { WhatsappMenuOption::findOrFail($this->editOptionId)->update($data); $this->alert('success', 'Opción actualizada.'); } else { WhatsappMenuOption::create($data); $this->alert('success', 'Opción creada.'); } $this->resetOptionForm(); } public function deleteOption(int $id): void { WhatsappMenuOption::findOrFail($id)->delete(); $this->alert('success', 'Opción eliminada.'); } public function resetMenuForm(): void { $this->showMenuForm = false; $this->editMenuId = null; $this->menuName = ''; $this->menuTitle = ''; $this->menuMessage = ''; $this->menuParentId = null; $this->menuIsMain = false; $this->menuIsActive = true; $this->menuSortOrder = 0; } public function resetOptionForm(): void { $this->showOptionForm = false; $this->editOptionId = null; $this->optionForMenuId = null; $this->optionNumber = 1; $this->optionTitle = ''; $this->optionAction = 'message'; $this->optionValue = ''; $this->optionSort = 0; $this->optionIsActive = true; } public function render() { $menus = WhatsappMenu::when($this->search, fn($q) => $q->where('name', 'like', "%{$this->search}%") ->orWhere('title', 'like', "%{$this->search}%")) ->withCount('options') ->orderBy('sort_order') ->get(); $viewMenu = $this->viewMenuId ? WhatsappMenu::with('options')->find($this->viewMenuId) : null; $allMenus = WhatsappMenu::orderBy('title')->get(); return view('livewire.whatsapp.show-menus-bot', compact('menus', 'viewMenu', 'allMenus')); } }