From 3955fd6da336379d92f44764068a3df7514244b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20Faruk=20Demirel?= Date: Sun, 21 Dec 2025 20:35:59 +0300 Subject: [PATCH] refactor(admin)!: migrate filament structures to modules --- composer.json | 3 +- composer.lock | 80 ++++++++++++++++++- config/filament-activitylog.php | 2 +- config/filament-modules.php | 10 +++ modules/Admin/app/Filament/AdminPlugin.php | 27 +++++++ modules/Admin/app/Filament/Clusters/Admin.php | 29 +++++++ .../SpatieMediaLibraryFileUpload.php | 2 +- .../SpatieMediaLibraryMarkdownEditor.php | 2 +- .../Admin/app}/Filament/Pages/ActivityLog.php | 2 +- .../Filament/Pages/Auth/EmailVerification.php | 2 +- .../Admin/app}/Filament/Pages/Auth/Login.php | 2 +- .../app}/Filament/Pages/Auth/Register.php | 2 +- .../Filament/Pages/Auth/ResetPassword.php | 2 +- .../Admin/app}/Filament/Pages/Dashboard.php | 2 +- .../Admin/app}/Filament/Pages/MyProfile.php | 2 +- .../Admin/app}/Filament/Pages/Settings.php | 10 +-- .../Pages/Settings/SecuritySettings.php | 2 +- .../Filament/Pages/Settings/SeoSettings.php | 2 +- .../Filament/Pages/Settings/SiteSettings.php | 2 +- .../app/Providers}/AdminPanelProvider.php | 32 +++----- .../app/Providers/AdminServiceProvider.php | 22 +++++ modules/Admin/composer.json | 26 ++++++ modules/Admin/module.json | 15 ++++ modules/Admin/package.json | 15 ++++ modules/Admin/vite.config.js | 57 +++++++++++++ .../Article/app/Filament/ArticlePlugin.php | 27 +++++++ .../Article/app/Filament/Clusters/Article.php | 29 +++++++ .../Filament/Resources/ArticleResource.php | 8 +- .../ArticleResource/Pages/CreateArticle.php | 4 +- .../ArticleResource/Pages/EditArticle.php | 4 +- .../ArticleResource/Pages/ListArticles.php | 4 +- .../Widgets/ArticleStatsOverview.php | 4 +- .../app/Filament}/Widgets/RecentArticles.php | 4 +- .../Category/app/Filament/CategoryPlugin.php | 27 +++++++ .../app/Filament/Clusters/Category.php | 29 +++++++ .../Filament/Resources/CategoryResource.php | 4 +- .../CategoryResource/Pages/CreateCategory.php | 4 +- .../CategoryResource/Pages/EditCategory.php | 4 +- .../CategoryResource/Pages/ListCategories.php | 4 +- .../Course/app/Filament/Clusters/Course.php | 29 +++++++ modules/Course/app/Filament/CoursePlugin.php | 27 +++++++ .../Resources/CourseChapterResource.php | 6 +- .../Pages/CreateCourseChapter.php | 4 +- .../Pages/EditCourseChapter.php | 4 +- .../Pages/ListCourseChapters.php | 4 +- .../LessonsRelationManager.php | 2 +- .../Resources/CourseLessonResource.php | 6 +- .../Pages/CreateCourseLesson.php | 4 +- .../Pages/EditCourseLesson.php | 4 +- .../Pages/ListCourseLessons.php | 4 +- .../Filament/Resources/CourseResource.php | 10 +-- .../CourseResource/Pages/CreateCourse.php | 4 +- .../CourseResource/Pages/EditCourse.php | 4 +- .../CourseResource/Pages/ListCourses.php | 4 +- .../ChaptersRelationManager.php | 2 +- modules/Entry/app/Filament/Clusters/Entry.php | 29 +++++++ modules/Entry/app/Filament/EntryPlugin.php | 27 +++++++ .../app}/Filament/Resources/EntryResource.php | 8 +- .../EntryResource/Pages/CreateEntry.php | 4 +- .../EntryResource/Pages/EditEntry.php | 4 +- .../EntryResource/Pages/ListEntries.php | 4 +- .../Filament}/Widgets/EntryStatsOverview.php | 4 +- .../app/Filament}/Widgets/RecentEntries.php | 4 +- modules/News/app/Filament/Clusters/News.php | 29 +++++++ modules/News/app/Filament/NewsPlugin.php | 27 +++++++ .../app}/Filament/Resources/NewsResource.php | 8 +- .../NewsResource/Pages/CreateNews.php | 4 +- .../Resources/NewsResource/Pages/EditNews.php | 4 +- .../Resources/NewsResource/Pages/ListNews.php | 4 +- modules/Page/app/Filament/Clusters/Page.php | 29 +++++++ modules/Page/app/Filament/PagePlugin.php | 27 +++++++ .../app}/Filament/Resources/PageResource.php | 8 +- .../PageResource/Pages/CreatePage.php | 4 +- .../Resources/PageResource/Pages/EditPage.php | 4 +- .../PageResource/Pages/ListPages.php | 4 +- modules/React/app/Filament/Clusters/React.php | 29 +++++++ modules/React/app/Filament/ReactPlugin.php | 27 +++++++ .../Filament/Resources/CommentResource.php | 4 +- .../CommentResource/Pages/CreateComment.php | 4 +- .../CommentResource/Pages/EditComment.php | 4 +- .../CommentResource/Pages/ListComments.php | 4 +- .../Filament/Resources/DislikeResource.php | 2 +- .../Filament/Resources/FollowResource.php | 2 +- .../app}/Filament/Resources/LikeResource.php | 2 +- .../app}/Filament/Resources/SaveResource.php | 2 +- .../Widgets/CommentStatsOverview.php | 4 +- modules/Tag/app/Filament/Clusters/Tag.php | 29 +++++++ .../app}/Filament/Resources/TagResource.php | 4 +- .../Resources/TagResource/Pages/CreateTag.php | 4 +- .../Resources/TagResource/Pages/EditTag.php | 4 +- .../Resources/TagResource/Pages/ListTags.php | 4 +- modules/Tag/app/Filament/TagPlugin.php | 27 +++++++ modules/User/app/Filament/Clusters/User.php | 29 +++++++ .../app}/Filament/Exports/UserExporter.php | 2 +- .../app}/Filament/Imports/UserImporter.php | 2 +- .../app}/Filament/Resources/RoleResource.php | 4 +- .../RoleResource/Pages/CreateRole.php | 4 +- .../Resources/RoleResource/Pages/EditRole.php | 4 +- .../RoleResource/Pages/ListRoles.php | 4 +- .../Resources/RoleResource/Pages/ViewRole.php | 4 +- .../app}/Filament/Resources/UserResource.php | 10 +-- .../UserResource/Pages/CreateUser.php | 4 +- .../Resources/UserResource/Pages/EditUser.php | 4 +- .../UserResource/Pages/ListUsers.php | 4 +- modules/User/app/Filament/UserPlugin.php | 27 +++++++ modules_statuses.json | 3 +- 106 files changed, 949 insertions(+), 174 deletions(-) create mode 100644 config/filament-modules.php create mode 100644 modules/Admin/app/Filament/AdminPlugin.php create mode 100644 modules/Admin/app/Filament/Clusters/Admin.php rename {app/Forms => modules/Admin/app/Filament}/Components/SpatieMediaLibraryFileUpload.php (97%) rename {app/Forms => modules/Admin/app/Filament}/Components/SpatieMediaLibraryMarkdownEditor.php (96%) rename {app => modules/Admin/app}/Filament/Pages/ActivityLog.php (84%) rename {app => modules/Admin/app}/Filament/Pages/Auth/EmailVerification.php (97%) rename {app => modules/Admin/app}/Filament/Pages/Auth/Login.php (97%) rename {app => modules/Admin/app}/Filament/Pages/Auth/Register.php (98%) rename {app => modules/Admin/app}/Filament/Pages/Auth/ResetPassword.php (97%) rename {app => modules/Admin/app}/Filament/Pages/Dashboard.php (82%) rename {app => modules/Admin/app}/Filament/Pages/MyProfile.php (83%) rename {app => modules/Admin/app}/Filament/Pages/Settings.php (97%) rename {app => modules/Admin/app}/Filament/Pages/Settings/SecuritySettings.php (99%) rename {app => modules/Admin/app}/Filament/Pages/Settings/SeoSettings.php (99%) rename {app => modules/Admin/app}/Filament/Pages/Settings/SiteSettings.php (99%) rename {app/Providers/Filament => modules/Admin/app/Providers}/AdminPanelProvider.php (81%) create mode 100644 modules/Admin/app/Providers/AdminServiceProvider.php create mode 100644 modules/Admin/composer.json create mode 100644 modules/Admin/module.json create mode 100644 modules/Admin/package.json create mode 100644 modules/Admin/vite.config.js create mode 100644 modules/Article/app/Filament/ArticlePlugin.php create mode 100644 modules/Article/app/Filament/Clusters/Article.php rename {app => modules/Article/app}/Filament/Resources/ArticleResource.php (97%) rename {app => modules/Article/app}/Filament/Resources/ArticleResource/Pages/CreateArticle.php (56%) rename {app => modules/Article/app}/Filament/Resources/ArticleResource/Pages/EditArticle.php (71%) rename {app => modules/Article/app}/Filament/Resources/ArticleResource/Pages/ListArticles.php (71%) rename {app/Filament/Resources/ArticleResource => modules/Article/app/Filament}/Widgets/ArticleStatsOverview.php (88%) rename {app/Filament/Resources/ArticleResource => modules/Article/app/Filament}/Widgets/RecentArticles.php (96%) create mode 100644 modules/Category/app/Filament/CategoryPlugin.php create mode 100644 modules/Category/app/Filament/Clusters/Category.php rename {app => modules/Category/app}/Filament/Resources/CategoryResource.php (96%) rename {app => modules/Category/app}/Filament/Resources/CategoryResource/Pages/CreateCategory.php (56%) rename {app => modules/Category/app}/Filament/Resources/CategoryResource/Pages/EditCategory.php (70%) rename {app => modules/Category/app}/Filament/Resources/CategoryResource/Pages/ListCategories.php (71%) create mode 100644 modules/Course/app/Filament/Clusters/Course.php create mode 100644 modules/Course/app/Filament/CoursePlugin.php rename {app => modules/Course/app}/Filament/Resources/CourseChapterResource.php (91%) rename {app => modules/Course/app}/Filament/Resources/CourseChapterResource/Pages/CreateCourseChapter.php (56%) rename {app => modules/Course/app}/Filament/Resources/CourseChapterResource/Pages/EditCourseChapter.php (70%) rename {app => modules/Course/app}/Filament/Resources/CourseChapterResource/Pages/ListCourseChapters.php (70%) rename {app => modules/Course/app}/Filament/Resources/CourseChapterResource/RelationManagers/LessonsRelationManager.php (93%) rename {app => modules/Course/app}/Filament/Resources/CourseLessonResource.php (97%) rename {app => modules/Course/app}/Filament/Resources/CourseLessonResource/Pages/CreateCourseLesson.php (56%) rename {app => modules/Course/app}/Filament/Resources/CourseLessonResource/Pages/EditCourseLesson.php (70%) rename {app => modules/Course/app}/Filament/Resources/CourseLessonResource/Pages/ListCourseLessons.php (70%) rename {app => modules/Course/app}/Filament/Resources/CourseResource.php (96%) rename {app => modules/Course/app}/Filament/Resources/CourseResource/Pages/CreateCourse.php (56%) rename {app => modules/Course/app}/Filament/Resources/CourseResource/Pages/EditCourse.php (71%) rename {app => modules/Course/app}/Filament/Resources/CourseResource/Pages/ListCourses.php (72%) rename {app => modules/Course/app}/Filament/Resources/CourseResource/RelationManagers/ChaptersRelationManager.php (94%) create mode 100644 modules/Entry/app/Filament/Clusters/Entry.php create mode 100644 modules/Entry/app/Filament/EntryPlugin.php rename {app => modules/Entry/app}/Filament/Resources/EntryResource.php (93%) rename {app => modules/Entry/app}/Filament/Resources/EntryResource/Pages/CreateEntry.php (73%) rename {app => modules/Entry/app}/Filament/Resources/EntryResource/Pages/EditEntry.php (72%) rename {app => modules/Entry/app}/Filament/Resources/EntryResource/Pages/ListEntries.php (72%) rename {app/Filament/Resources/EntryResource => modules/Entry/app/Filament}/Widgets/EntryStatsOverview.php (88%) rename {app/Filament/Resources/EntryResource => modules/Entry/app/Filament}/Widgets/RecentEntries.php (95%) create mode 100644 modules/News/app/Filament/Clusters/News.php create mode 100644 modules/News/app/Filament/NewsPlugin.php rename {app => modules/News/app}/Filament/Resources/NewsResource.php (97%) rename {app => modules/News/app}/Filament/Resources/NewsResource/Pages/CreateNews.php (58%) rename {app => modules/News/app}/Filament/Resources/NewsResource/Pages/EditNews.php (73%) rename {app => modules/News/app}/Filament/Resources/NewsResource/Pages/ListNews.php (73%) create mode 100644 modules/Page/app/Filament/Clusters/Page.php create mode 100644 modules/Page/app/Filament/PagePlugin.php rename {app => modules/Page/app}/Filament/Resources/PageResource.php (97%) rename {app => modules/Page/app}/Filament/Resources/PageResource/Pages/CreatePage.php (58%) rename {app => modules/Page/app}/Filament/Resources/PageResource/Pages/EditPage.php (73%) rename {app => modules/Page/app}/Filament/Resources/PageResource/Pages/ListPages.php (73%) create mode 100644 modules/React/app/Filament/Clusters/React.php create mode 100644 modules/React/app/Filament/ReactPlugin.php rename {app => modules/React/app}/Filament/Resources/CommentResource.php (97%) rename {app => modules/React/app}/Filament/Resources/CommentResource/Pages/CreateComment.php (73%) rename {app => modules/React/app}/Filament/Resources/CommentResource/Pages/EditComment.php (72%) rename {app => modules/React/app}/Filament/Resources/CommentResource/Pages/ListComments.php (72%) rename {app => modules/React/app}/Filament/Resources/DislikeResource.php (87%) rename {app => modules/React/app}/Filament/Resources/FollowResource.php (87%) rename {app => modules/React/app}/Filament/Resources/LikeResource.php (87%) rename {app => modules/React/app}/Filament/Resources/SaveResource.php (87%) rename {app/Filament/Resources/CommentResource => modules/React/app/Filament}/Widgets/CommentStatsOverview.php (88%) create mode 100644 modules/Tag/app/Filament/Clusters/Tag.php rename {app => modules/Tag/app}/Filament/Resources/TagResource.php (97%) rename {app => modules/Tag/app}/Filament/Resources/TagResource/Pages/CreateTag.php (58%) rename {app => modules/Tag/app}/Filament/Resources/TagResource/Pages/EditTag.php (73%) rename {app => modules/Tag/app}/Filament/Resources/TagResource/Pages/ListTags.php (73%) create mode 100644 modules/Tag/app/Filament/TagPlugin.php create mode 100644 modules/User/app/Filament/Clusters/User.php rename {app => modules/User/app}/Filament/Exports/UserExporter.php (96%) rename {app => modules/User/app}/Filament/Imports/UserImporter.php (97%) rename {app => modules/User/app}/Filament/Resources/RoleResource.php (98%) rename {app => modules/User/app}/Filament/Resources/RoleResource/Pages/CreateRole.php (92%) rename {app => modules/User/app}/Filament/Resources/RoleResource/Pages/EditRole.php (93%) rename {app => modules/User/app}/Filament/Resources/RoleResource/Pages/ListRoles.php (72%) rename {app => modules/User/app}/Filament/Resources/RoleResource/Pages/ViewRole.php (72%) rename {app => modules/User/app}/Filament/Resources/UserResource.php (96%) rename {app => modules/User/app}/Filament/Resources/UserResource/Pages/CreateUser.php (58%) rename {app => modules/User/app}/Filament/Resources/UserResource/Pages/EditUser.php (77%) rename {app => modules/User/app}/Filament/Resources/UserResource/Pages/ListUsers.php (73%) create mode 100644 modules/User/app/Filament/UserPlugin.php diff --git a/composer.json b/composer.json index 7427576..f4cfc9d 100755 --- a/composer.json +++ b/composer.json @@ -13,6 +13,7 @@ "aws/aws-sdk-php": "^3.356", "bezhansalleh/filament-language-switch": "^3.1", "bezhansalleh/filament-shield": "^3.3", + "coolsam/modules": "^4.2", "filament/filament": "^3.3", "guzzlehttp/guzzle": "^7.10", "honeystone/laravel-seo": "^2.0", @@ -123,4 +124,4 @@ }, "minimum-stability": "stable", "prefer-stable": true -} \ No newline at end of file +} diff --git a/composer.lock b/composer.lock index a967635..821eb73 100755 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "898c7af4e415c97ef44c8bdb50b17e45", + "content-hash": "79a82df066235bc578efb1a8890e720c", "packages": [ { "name": "amphp/amp", @@ -1603,6 +1603,84 @@ ], "time": "2025-08-20T19:15:30+00:00" }, + { + "name": "coolsam/modules", + "version": "v4.2.2", + "source": { + "type": "git", + "url": "https://github.com/savannabits/filament-modules.git", + "reference": "fb40e63c8aa5920613e4db06002045167d03ee25" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/savannabits/filament-modules/zipball/fb40e63c8aa5920613e4db06002045167d03ee25", + "reference": "fb40e63c8aa5920613e4db06002045167d03ee25", + "shasum": "" + }, + "require": { + "filament/filament": "^3.0", + "nwidart/laravel-modules": "^11.0|^12.0", + "php": "^8.2", + "spatie/laravel-package-tools": "^1.15.0" + }, + "require-dev": { + "barryvdh/laravel-ide-helper": "^3.5", + "laravel/pint": "^1.0", + "nunomaduro/larastan": "^3.1.0", + "orchestra/testbench": "^9.12", + "pestphp/pest-plugin-laravel": "^3.1", + "pestphp/pest-plugin-livewire": "^3.0", + "phpstan/extension-installer": "^1.4.3", + "spatie/laravel-ray": "^1.39" + }, + "type": "library", + "extra": { + "laravel": { + "aliases": { + "FilamentModules": "FilamentModules" + }, + "providers": [ + "Coolsam\\Modules\\ModulesServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Coolsam\\Modules\\": "src/", + "Coolsam\\Modules\\Database\\Factories\\": "database/factories/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sam Maosa", + "email": "maosa.sam@gmail.com", + "role": "Developer" + } + ], + "description": "Organize your Filament Code into modules using nwidart/laravel-modules", + "homepage": "https://github.com/savannabits/filament-modules", + "keywords": [ + "FilamentModules", + "coolsam", + "filament", + "laravel" + ], + "support": { + "issues": "https://github.com/savannabits/filament-modules/issues", + "source": "https://github.com/savannabits/filament-modules" + }, + "funding": [ + { + "url": "https://github.com/coolsam", + "type": "github" + } + ], + "time": "2025-09-03T10:49:06+00:00" + }, { "name": "danharrin/date-format-converter", "version": "v0.3.1", diff --git a/config/filament-activitylog.php b/config/filament-activitylog.php index 78b577d..d446398 100644 --- a/config/filament-activitylog.php +++ b/config/filament-activitylog.php @@ -16,7 +16,7 @@ 'default_sort_column' => 'id', 'default_sort_direction' => 'desc', 'navigation_count_badge' => false, - 'resource' => App\Filament\Pages\ActivityLog::class, + 'resource' => Modules\Admin\Filament\Pages\ActivityLog::class, ], 'date_format' => 'd/m/Y', 'datetime_format' => 'd/m/Y H:i:s', diff --git a/config/filament-modules.php b/config/filament-modules.php new file mode 100644 index 0000000..008c279 --- /dev/null +++ b/config/filament-modules.php @@ -0,0 +1,10 @@ + true, // whether to auto-register plugins from various modules in the Panel + 'clusters' => [ + 'enabled' => true, // whether to enable the clusters feature which allows you to group each module's filament resources and pages into a cluster + 'use-top-navigation' => true, // display the main cluster menu in the top navigation and the sub-navigation in the side menu, which improves the UI + ], +]; diff --git a/modules/Admin/app/Filament/AdminPlugin.php b/modules/Admin/app/Filament/AdminPlugin.php new file mode 100644 index 0000000..7a72a7e --- /dev/null +++ b/modules/Admin/app/Filament/AdminPlugin.php @@ -0,0 +1,27 @@ +title(__('Cache successfully cleared')) diff --git a/app/Filament/Pages/Settings/SecuritySettings.php b/modules/Admin/app/Filament/Pages/Settings/SecuritySettings.php similarity index 99% rename from app/Filament/Pages/Settings/SecuritySettings.php rename to modules/Admin/app/Filament/Pages/Settings/SecuritySettings.php index a996bf2..8ad55b1 100755 --- a/app/Filament/Pages/Settings/SecuritySettings.php +++ b/modules/Admin/app/Filament/Pages/Settings/SecuritySettings.php @@ -1,6 +1,6 @@ siteSettings->theme_mode ?? $this->siteSettings->theme_mode === 'light' ? ThemeMode::Light : ThemeMode::System)) ->darkMode($this->siteSettings->dark_mode_enabled ?? true) - ->discoverResources(in: app_path('Filament/Resources'), for: 'App\\Filament\\Resources') - ->discoverPages(in: app_path('Filament/Pages'), for: 'App\\Filament\\Pages') - ->pages([]) - ->discoverWidgets(in: app_path('Filament/Widgets'), for: 'App\\Filament\\Widgets') - ->widgets([ - ArticleStatsOverview::class, - EntryStatsOverview::class, - CommentStatsOverview::class, - RecentArticles::class, - RecentEntries::class, - ]) ->middleware([ EncryptCookies::class, AddQueuedCookiesToResponse::class, @@ -148,6 +133,7 @@ protected function getPlugins(): array FilamentCookieConsent::make(), FilamentShieldPlugin::make(), ActivitylogPlugin::make(), + ModulesPlugin::make(), ]; } } diff --git a/modules/Admin/app/Providers/AdminServiceProvider.php b/modules/Admin/app/Providers/AdminServiceProvider.php new file mode 100644 index 0000000..b91b6e2 --- /dev/null +++ b/modules/Admin/app/Providers/AdminServiceProvider.php @@ -0,0 +1,22 @@ +|null */ diff --git a/modules/Category/app/Filament/CategoryPlugin.php b/modules/Category/app/Filament/CategoryPlugin.php new file mode 100644 index 0000000..ab831b6 --- /dev/null +++ b/modules/Category/app/Filament/CategoryPlugin.php @@ -0,0 +1,27 @@ +|null */ diff --git a/modules/News/app/Filament/Clusters/News.php b/modules/News/app/Filament/Clusters/News.php new file mode 100644 index 0000000..b6ffdf6 --- /dev/null +++ b/modules/News/app/Filament/Clusters/News.php @@ -0,0 +1,29 @@ +