Implment functions to send and display flash messages

This commit is contained in:
Matt Young 2024-05-31 22:46:01 -05:00
parent 9f57c930fc
commit e71919f35f
8 changed files with 96 additions and 3 deletions

View File

@ -51,6 +51,9 @@ class StudentController extends Controller
'grade' => request('grade'), 'grade' => request('grade'),
'school_id' => Auth::user()->school_id 'school_id' => Auth::user()->school_id
]); ]);
$request->session()->put('auditionMessages',['success','I did it again ma']);
return redirect('/students'); return redirect('/students');
} }

View File

@ -0,0 +1,19 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Session;
class TestController extends Controller
{
public function flashTest(Request $request)
{
Session::flash('msg|this is the message','success');
Session::flash('msg|another message','caution');
Session::flash('msg|you better be careful','danger');
return view('test');
}
}

View File

@ -1,4 +1,7 @@
<?php <?php
use Illuminate\Support\Facades\Session;
function tw_max_width_class_array() :Array { function tw_max_width_class_array() :Array {
$return = [ $return = [
"xs" => "max-w-xs", "xs" => "max-w-xs",
@ -19,3 +22,19 @@ function tw_max_width_class_array() :Array {
]; ];
return $return; return $return;
} }
function getMessages() {
$flash = Session::get('_flash');
$messages = $flash['new'];
$return = [];
foreach ($messages as $message) {
if (substr($message, 0,4) != 'msg|') continue;
$type = Session::get($message);
$return[] = ['message' => substr($message,4), 'type' => $type];
}
return $return;
}
function sendMessage(String $message, String $type) {
Session::flash('msg|'.$message,$type);
}

View File

@ -0,0 +1,39 @@
{{--Send messages with Session::flash('msg|MESSAGE HERE','success, caution or danger');--}}
{{--Can also use helper fuction: sendMessage('Test Message','danger')--}}
@props(['message','messageType'])
@php
$div_classes = 'flex justify-between mx-auto max-w-2xl text-sm rounded-md px-3 py-1 mb-2 font-medium ring-1 ring-inset ';
$button_classes = 'group relative mr-1 h-5 w-5 rounded-sm ';
$svg_classes = 'h-5 w-5 ';
switch($messageType) {
case 'caution':
$div_classes .= 'bg-yellow-50 text-yellow-800 ring-yellow-600/40';
$button_classes .= 'hover:bg-yellow-600/20';
$svg_classes .= 'stroke-yellow-700/50 group-hover:stroke-yellow-700/75';
break;
case 'danger':
$div_classes .= 'bg-red-50 text-red-700 ring-red-600/40';
$button_classes .= 'hover:bg-red-600/20';
$svg_classes .= 'stroke-red-600/50 group-hover:stroke-red-600/75';
break;
default:
$div_classes .= 'bg-green-50 text-green-700 ring-green-600/40 ';
$button_classes .= 'hover:bg-green-600/20';
$svg_classes .= 'stroke-green-700/50 group-hover:stroke-green-700/75';
break;
}
@endphp
<div class="{{ $div_classes }}" x-data="{ shown: true }" x-show="shown">
<div>{{ $message }}</div>
<div>
<button type="button" class="{{ $button_classes }}" x-on:click=" shown = false">
<span class="sr-only">Remove</span>
<svg viewBox="0 0 14 14" class="{{ $svg_classes }}">
<path d="M4 4l6 6m0-6l-6 6" />
</svg>
<span class="absolute -inset-1"></span>
</button>
</div>
</div>

View File

@ -25,8 +25,14 @@
<x-layout.page-header>{{ $page_title }}</x-layout.page-header> <x-layout.page-header>{{ $page_title }}</x-layout.page-header>
@endif @endif
<main> <main>
<div class="mx-auto max-w-7xl py-6 sm:px-6 lg:px-8"> <div class="mx-auto max-w-7xl py-6 sm:px-6 lg:px-8">
@foreach(getMessages() as $message)
<x-flash_message :message="$message['message']" :messageType="$message['type']" />
@endforeach
{{ $slot }} {{ $slot }}
</div> </div>
</main> </main>

View File

@ -1,3 +1,4 @@
<x-layout.app> <x-layout.app>
<x-slot:page_title>Dashboard</x-slot:page_title> <x-slot:page_title>Dashboard</x-slot:page_title>
</x-layout.app> </x-layout.app>

View File

@ -1,11 +1,16 @@
@php use App\Models\Audition;use App\Models\School;use App\Models\SchoolEmailDomain;use App\Models\User;use Illuminate\Support\Facades\Auth; @endphp @php use App\Models\Audition;use App\Models\School;use App\Models\SchoolEmailDomain;use App\Models\User;use Illuminate\Support\Facades\Auth;use Illuminate\Support\Facades\Session; @endphp
<x-layout.app> <x-layout.app>
<x-slot:page_title>Test Page</x-slot:page_title> <x-slot:page_title>Test Page</x-slot:page_title>
@php @php
// $flash = Session::get('_flash');
// $messages = $flash['new'];
$messages = getMessages();
@endphp @endphp
@foreach($messages as $message)
The message "{{ $message['message'] }}" is of type "{{ $message['type'] }}"<br />
@endforeach
</x-layout.app> </x-layout.app>

View File

@ -4,11 +4,12 @@ use App\Http\Controllers\DashboardController;
use App\Http\Controllers\EntryController; use App\Http\Controllers\EntryController;
use App\Http\Controllers\SchoolController; use App\Http\Controllers\SchoolController;
use App\Http\Controllers\StudentController; use App\Http\Controllers\StudentController;
use App\Http\Controllers\TestController;
use App\Http\Controllers\UserController; use App\Http\Controllers\UserController;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
Route::view('/test','test')->middleware('auth','verified'); Route::get('/test',[TestController::class,'flashTest'])->middleware('auth','verified');
Route::view('/','welcome')->middleware('guest'); Route::view('/','welcome')->middleware('guest');