Site::orderBy('name')->get(), 'cmsTypes' => Site::CMS_TYPES, 'tones' => Site::TONES, ]); } public function create(): void { $this->resetForm(); $this->showForm = true; } public function edit(int $id): void { $site = Site::findOrFail($id); $this->editingId = $site->id; $this->name = $site->name; $this->url = $site->url; $this->description = $site->description; $this->cmsType = $site->cms_type; $this->wpUsername = $site->wp_username ?? ''; $this->wpAppPassword = $site->wp_app_password ?? ''; $this->apiInstructions = $site->api_instructions; $this->tone = $site->tone; $this->showForm = true; } public function save(): void { $validated = $this->validate([ 'name' => ['required', 'string', 'max:255'], 'url' => ['required', 'string', 'max:255'], 'description' => ['nullable', 'string'], 'cmsType' => ['required', 'string', 'in:' . implode(',', Site::CMS_TYPES)], 'wpUsername' => ['required_if:cmsType,wordpress', 'nullable', 'string', 'max:255'], 'wpAppPassword' => ['required_if:cmsType,wordpress', 'nullable', 'string', 'max:255'], 'apiInstructions' => ['nullable', 'string'], 'tone' => ['nullable', 'string'], ]); Site::updateOrCreate(['id' => $this->editingId], [ 'name' => $validated['name'], 'url' => $validated['url'], 'description' => $validated['description'], 'cms_type' => $validated['cmsType'], 'wp_username' => $validated['cmsType'] === 'wordpress' ? $validated['wpUsername'] : null, 'wp_app_password' => $validated['cmsType'] === 'wordpress' ? $validated['wpAppPassword'] : null, 'api_instructions' => $validated['apiInstructions'], 'tone' => $validated['tone'], ]); $this->resetForm(); $this->showForm = false; } public function delete(int $id): void { Site::findOrFail($id)->delete(); } public function toggleReveal(int $id): void { $this->revealedId = $this->revealedId === $id ? null : $id; } public function resetForm(): void { $this->editingId = null; $this->name = ''; $this->url = ''; $this->description = null; $this->cmsType = 'custom'; $this->wpUsername = ''; $this->wpAppPassword = ''; $this->apiInstructions = null; $this->tone = null; $this->resetValidation(); } }