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