cms-laravel/app/Livewire/Notifications/NotificationsCreate.php

87 lines
2.7 KiB
PHP

<?php
namespace App\Livewire\Notifications;
use Livewire\Component;
use Illuminate\Support\Facades\Http;
class NotificationsCreate extends Component
{
public $subject = '';
public $content = '';
public $isScheduled = 'false';
public $schedule = '';
public $expiration = '';
public $loading = false;
protected $rules = [
'subject' => 'required|string|max:255',
'content' => 'required|string',
'isScheduled' => 'required|in:true,false',
'schedule' => 'required_if:isScheduled,true|nullable|date',
'expiration' => 'required_if:isScheduled,true|nullable|date|after_or_equal:schedule',
];
protected $messages = [
'subject.required' => 'Subject is required!',
'content.required' => 'Content is required!',
'isScheduled.required' => 'Schedule selection is required!',
'schedule.required_if' => 'Schedule date is required when scheduled!',
'expiration.required_if' => 'Expiration date is required when scheduled!',
'expiration.after_or_equal' => 'Expiration must be on or after the schedule date!',
];
public function mount()
{
// Placeholder role check
// if (auth()->user()->role != 1) {
// $this->alert('error', 'Unauthorized access.');
// return redirect('/notifications');
// }
}
public function save()
{
$this->validate();
$this->loading = true;
try {
$data = [
'subject' => $this->subject,
'content' => $this->content,
'isScheduled' => $this->isScheduled === 'true',
'schedule' => $this->isScheduled === 'true' ? $this->schedule : null,
'expiration' => $this->isScheduled === 'true' ? $this->expiration : null,
];
$response = Http::post('https://api.example.com/notification', $data);
if ($response->successful()) {
$this->alert('success', 'Notification created successfully!');
return redirect('/notifications');
} else {
$this->alert('error', 'Failed to create notification.');
}
} catch (\Exception $e) {
$this->alert('error', 'An error occurred: ' . $e->getMessage());
} finally {
$this->loading = false;
}
}
public function cancel()
{
if (confirm('Are you sure you want to discard changes?')) {
return redirect('/notifications');
}
}
public function render()
{
return view('livewire.notifications.notifications-create')->layout('layouts.app', ['title' => 'Add Notification']);
}
}