79 lines
2.5 KiB
PHP
79 lines
2.5 KiB
PHP
@php
|
|
use Illuminate\Support\Str;
|
|
@endphp
|
|
|
|
@props([
|
|
'id' => '', // ID único para el offcanvas
|
|
'title' => '', // Título del offcanvas
|
|
'position' => 'end', // Posición: 'start', 'end', 'top', 'bottom'
|
|
'size' => 'md', // Tamaño: sm, md, lg, xl
|
|
'backdrop' => true, // Si se debe mostrar backdrop
|
|
'wireIgnore' => true, // Ignorar eventos wire (Livewire)
|
|
'listener' => '', // Nombre del listener para reload
|
|
'tagName' => '', // Etiqueta del formHelpers
|
|
])
|
|
|
|
@php
|
|
$offcanvasClasses = "offcanvas offcanvas-{$position}";
|
|
|
|
$offcanvasSize = match ($size) {
|
|
'sm' => 'offcanvas-sm',
|
|
'lg' => 'offcanvas-lg',
|
|
'xl' => 'offcanvas-xl',
|
|
default => '',
|
|
};
|
|
|
|
$helperTag = Str::kebab($tagName);
|
|
@endphp
|
|
|
|
<div
|
|
class="{{ $offcanvasClasses }} {{ $offcanvasSize }}"
|
|
tabindex="-1"
|
|
id="{{ $id }}"
|
|
aria-labelledby="{{ $id }}Label"
|
|
{{ $wireIgnore ? 'wire:ignore.self' : '' }}
|
|
data-bs-backdrop="{{ $backdrop ? 'true' : 'false' }}">
|
|
|
|
{{-- HEADER --}}
|
|
<div class="offcanvas-header border-bottom">
|
|
<h5 class="offcanvas-title">{{ $title }}</h5>
|
|
<button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="Cerrar"></button>
|
|
</div>
|
|
|
|
{{-- BODY --}}
|
|
<div class="offcanvas-body p-4">
|
|
{{ $slot }}
|
|
</div>
|
|
|
|
{{-- FOOTER SLOT OPCIONAL --}}
|
|
@if (isset($footer))
|
|
<div class="offcanvas-footer border-top p-3">
|
|
{{ $footer }}
|
|
</div>
|
|
@endif
|
|
</div>
|
|
|
|
@push('page-script')
|
|
<script>
|
|
// Evento para inicializar el formulario cuando se carga la página
|
|
window.addEventListener("DOMContentLoaded", () => {
|
|
const register{{ $tagName }}FormEvents = () => {
|
|
document.addEventListener("refresh-{{ $helperTag }}-offcanvas", () => {
|
|
window.formHelpers['{{ $helperTag }}'].refresh();
|
|
});
|
|
|
|
var myOffcanvas = document.getElementById('{{ $id }}')
|
|
|
|
myOffcanvas.addEventListener('show.bs.offcanvas', function () {
|
|
setTimeout(() => window.formHelpers['{{ $helperTag }}'].reloadOffcanvas(), 20);
|
|
});
|
|
}
|
|
|
|
window.formHelpers = window.formHelpers || {};
|
|
window.formHelpers['{{ $helperTag }}'] = new FormCanvasHelper('{{ $id }}', @this);
|
|
|
|
register{{ $tagName }}FormEvents();
|
|
});
|
|
</script>
|
|
@endpush
|