PageLayout.php 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. namespace App\Enums;
  3. use App\Filament\Resources\Pages\Schemas\LayoutForms;
  4. use App\ViewModels\Pages as ViewModels;
  5. enum PageLayout: string
  6. {
  7. case Default = 'default';
  8. case FrontPage = 'front_page';
  9. public function label(): string
  10. {
  11. return match($this) {
  12. self::Default => 'Default',
  13. self::FrontPage => 'Front Page',
  14. };
  15. }
  16. public function route(): string
  17. {
  18. return match($this) {
  19. self::Default => 'Default',
  20. self::FrontPage => 'Front Page',
  21. };
  22. }
  23. public function handlerClass(): string
  24. {
  25. return match($this) {
  26. self::Default => '',
  27. self::FrontPage => '',
  28. };
  29. }
  30. public function formClass(): string
  31. {
  32. return match($this) {
  33. self::Default => 'default',
  34. self::FrontPage => 'front_page',
  35. };
  36. }
  37. public function formPath(): string
  38. {
  39. return match($this) {
  40. self::Default => 'layouts/default.php',
  41. self::FrontPage => 'layouts/front_page.php',
  42. };
  43. }
  44. public function viewPath(): string
  45. {
  46. return match($this) {
  47. self::Default => 'pages/default.php',
  48. self::FrontPage => 'home.php',
  49. };
  50. }
  51. public function description(): string
  52. {
  53. return match($this) {
  54. self::Default => 'Basic page layout with standard content structure',
  55. self::FrontPage => 'Homepage layout with hero section and featured content',
  56. };
  57. }
  58. public static function selectOptions(): array
  59. {
  60. $options = [];
  61. foreach (self::cases() as $case) {
  62. $options[$case->value] = $case->label();
  63. }
  64. return $options;
  65. }
  66. public static function isValid(string $layout): bool
  67. {
  68. foreach (self::cases() as $case) {
  69. if ($case->value === $layout) {
  70. return true;
  71. }
  72. }
  73. return false;
  74. }
  75. }