From c5b83d0533b3dbf59700040e7da77d602da2e0a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=9Cmit=20Tun=C3=A7?= Date: Mon, 3 Nov 2025 17:14:53 -0300 Subject: [PATCH] Enhance User Guide and Template Services: Added max content width configuration to UserGuide page for improved layout. Updated TemplateService to always replace placeholders, ensuring custom components are handled correctly even with empty default data. Enhanced error handling for custom component rendering, providing user-friendly error messages in the preview. Introduced a new guide for website setup, detailing installation steps and features. --- app/Filament/Admin/Pages/UserGuide.php | 6 +++++ .../Controllers/TemplatePreviewController.php | 6 ++--- app/Services/TemplateService.php | 27 ++++++++++++++++--- .../filament/admin/pages/user-guide.blade.php | 16 ++--------- .../views/guide/WEBSITE_SETUP.md | 0 5 files changed, 34 insertions(+), 21 deletions(-) rename WEBSITE_SETUP.md => resources/views/guide/WEBSITE_SETUP.md (100%) diff --git a/app/Filament/Admin/Pages/UserGuide.php b/app/Filament/Admin/Pages/UserGuide.php index e2c461d..df08ebd 100644 --- a/app/Filament/Admin/Pages/UserGuide.php +++ b/app/Filament/Admin/Pages/UserGuide.php @@ -5,6 +5,7 @@ namespace App\Filament\Admin\Pages; use App\Services\GuideService; use BackedEnum; use Filament\Pages\Page; +use Filament\Support\Enums\Width; use Filament\Support\Icons\Heroicon; class UserGuide extends Page @@ -37,6 +38,11 @@ class UserGuide extends Page return __('user-guide.title'); } + public function getMaxContentWidth(): Width | string | null + { + return Width::Full; + } + public function getGuides(): array { $guideService = app(GuideService::class); diff --git a/app/Http/Controllers/TemplatePreviewController.php b/app/Http/Controllers/TemplatePreviewController.php index b10a2e2..6b66ddd 100644 --- a/app/Http/Controllers/TemplatePreviewController.php +++ b/app/Http/Controllers/TemplatePreviewController.php @@ -48,9 +48,9 @@ class TemplatePreviewController extends Controller } // Replace placeholders with default data - if (!empty($defaultData)) { - $content = TemplateService::replacePlaceholders($content, $defaultData); - } + // Always call replacePlaceholders to handle custom components and special placeholders + // even if defaultData is empty + $content = TemplateService::replacePlaceholders($content, $defaultData ?? []); $html = TemplatePreviewService::getPreviewHtml($content, $type); diff --git a/app/Services/TemplateService.php b/app/Services/TemplateService.php index 119eea0..099f997 100644 --- a/app/Services/TemplateService.php +++ b/app/Services/TemplateService.php @@ -295,18 +295,37 @@ class TemplateService foreach ($customMatches[0] as $index => $fullMatch) { $componentName = $customMatches[1][$index] ?? null; if ($componentName) { + // Normalize component name to lowercase for consistent file system access + $componentName = strtolower($componentName); $viewPath = "components.custom.{$componentName}"; if (view()->exists($viewPath)) { try { $renderedComponent = view($viewPath)->render(); + // Ensure rendered component is properly formatted + $renderedComponent = trim($renderedComponent); $html = str_replace($fullMatch, $renderedComponent, $html); } catch (\Exception $e) { - // If rendering fails, remove the placeholder or show error - $html = str_replace($fullMatch, "", $html); + // Log the error for debugging + \Log::error("Custom component render error: {$viewPath}", [ + 'error' => $e->getMessage(), + 'trace' => $e->getTraceAsString() + ]); + + // Show error message in preview (visible in development) + $errorMessage = htmlspecialchars($e->getMessage(), ENT_QUOTES, 'UTF-8'); + $errorHtml = "
" . + "Custom Component Error: {$viewPath}
" . + "{$errorMessage}" . + "
"; + $html = str_replace($fullMatch, $errorHtml, $html); } } else { - // Component doesn't exist, remove placeholder or show notice - $html = str_replace($fullMatch, "", $html); + // Component doesn't exist - show notice in preview + $noticeHtml = "
" . + "Custom Component Not Found: {$viewPath}
" . + "Create the file at: resources/views/components/custom/{$componentName}.blade.php" . + "
"; + $html = str_replace($fullMatch, $noticeHtml, $html); } } } diff --git a/resources/views/filament/admin/pages/user-guide.blade.php b/resources/views/filament/admin/pages/user-guide.blade.php index bb92313..bb34e76 100644 --- a/resources/views/filament/admin/pages/user-guide.blade.php +++ b/resources/views/filament/admin/pages/user-guide.blade.php @@ -45,7 +45,7 @@ :color="$selectedGuide === $guide['slug'] ? 'primary' : 'gray'" :variant="$selectedGuide === $guide['slug'] ? 'filled' : 'outline'" > -
+
@endif
- @if(isset($guide['modified_date'])) -
-
- - - {{ \Carbon\Carbon::parse($guide['modified_date'])->locale(app()->getLocale())->diffForHumans() }} - -
-
- @endif +
@endforeach diff --git a/WEBSITE_SETUP.md b/resources/views/guide/WEBSITE_SETUP.md similarity index 100% rename from WEBSITE_SETUP.md rename to resources/views/guide/WEBSITE_SETUP.md