fix: add table existence checks in Onboarding components to prevent errors and improve modal behavior

This commit is contained in:
2025-12-03 22:31:30 -05:00
parent 09c2ca33d7
commit ea471aa6a9
3 changed files with 28 additions and 9 deletions

View File

@@ -6,6 +6,7 @@ use Livewire\Component;
use Paymenter\Extensions\Others\Onboarding\Models\OnboardingSlide;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Schema;
use App\Helpers\ExtensionHelper;
class Modal extends Component
@@ -16,6 +17,12 @@ class Modal extends Component
public function mount()
{
// Guard: ensure table exists before querying
if (!Schema::hasTable('ext_onboarding_slides')) {
$this->showModal = false;
return;
}
// Check if test mode and per session mode are enabled
$extension = ExtensionHelper::getExtension('other', 'Onboarding');
$testMode = $extension->config('test_mode', false);
@@ -35,10 +42,15 @@ class Modal extends Component
}
// Only show if user hasn't seen it and there are slides
$this->slides = OnboardingSlide::where('enabled', true)
->orderBy('sort', 'asc')
->get()
->toArray();
try {
$this->slides = OnboardingSlide::where('enabled', true)
->orderBy('sort', 'asc')
->get()
->toArray();
} catch (\Exception $e) {
// If query fails (e.g., missing columns), don't show modal
$this->slides = [];
}
$this->showModal = !$hasSeenOnboarding && count($this->slides) > 0 && $this->currentSlide < count($this->slides);
}

View File

@@ -4,6 +4,7 @@ namespace Paymenter\Extensions\Others\Onboarding;
use App\Classes\Extension\Extension;
use App\Helpers\ExtensionHelper;
use Illuminate\Support\Facades\Schema;
class Onboarding extends Extension
{
@@ -84,6 +85,11 @@ class Onboarding extends Extension
});
// Only register body hook if the table exists
if (!Schema::hasTable('ext_onboarding_slides')) {
return;
}
\Illuminate\Support\Facades\Event::listen('body', function () {
if (!request()->is('admin/*') &&
@@ -96,7 +102,7 @@ class Onboarding extends Extension
!request()->is('/') &&
\Illuminate\Support\Facades\Auth::check()) {
return [
'view' => view('onboarding::widget'),
'view' => view('onboarding::widget')->render(),
];
}
});

View File

@@ -11,22 +11,23 @@
document.documentElement.style.overflow = '';
}
})"
class="fixed inset-0 z-50 flex items-center justify-center overflow-hidden">
class="fixed inset-0 z-50 flex items-center justify-center overflow-hidden pointer-events-none">
@if($this->showBackdrop)
<div class="absolute inset-0 bg-black/50 transition-opacity duration-300"
<div class="absolute inset-0 bg-black/50 transition-opacity duration-300 pointer-events-auto"
x-show="open"
x-transition:enter="transition ease-out duration-300"
x-transition:enter-start="opacity-0"
x-transition:enter-end="opacity-100"
x-transition:leave="transition ease-in duration-300"
x-transition:leave-start="opacity-100"
x-transition:leave-end="opacity-0"></div>
x-transition:leave-end="opacity-0"
wire:click="finish"></div>
@endif
<div class="w-full max-w-xl mx-4 md:mx-auto bg-background-secondary border border-neutral rounded-lg shadow-2xl overflow-hidden h-[500px] flex flex-col relative z-10"
<div class="w-full max-w-xl mx-4 md:mx-auto bg-background-secondary border border-neutral rounded-lg shadow-2xl overflow-hidden h-[500px] flex flex-col relative z-10 pointer-events-auto"
x-show="open"
x-transition:enter="transition ease-out duration-300"
x-transition:enter-start="opacity-0 scale-90"