88 lines
2.7 KiB
PHP
88 lines
2.7 KiB
PHP
<?php
|
|
|
|
namespace App\Livewire\Notifications;
|
|
|
|
use Livewire\Component;
|
|
use Illuminate\Support\Facades\Http;
|
|
use Jantinnerezo\LivewireAlert\LivewireAlert;
|
|
|
|
class NotificationsCreate extends Component
|
|
{
|
|
use LivewireAlert;
|
|
|
|
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']);
|
|
}
|
|
}
|