79 lines
2.5 KiB
PHP
Raw Permalink Normal View History

2025-03-05 20:28:54 -06:00
@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