Skip to content

Commit 63b9d8a

Browse files
committed
big commit
1 parent 81e0ddb commit 63b9d8a

38 files changed

Lines changed: 2978 additions & 114 deletions

File tree

packages/category/src/Models/Category.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use Kalnoy\Nestedset\NodeTrait;
1515
use Moox\Category\Database\Factories\CategoryFactory;
1616
use Moox\Core\Entities\Items\Draft\BaseDraftModel;
17+
use Moox\Core\Models\Concerns\HasScopedModel;
1718
use Moox\Localization\Models\Localization;
1819
use Moox\Media\Traits\HasMediaUsable;
1920
use Override;
@@ -48,6 +49,7 @@ class Category extends BaseDraftModel implements HasMedia
4849
{
4950
use HasFactory;
5051
use HasMediaUsable;
52+
use HasScopedModel;
5153
use InteractsWithMedia;
5254
use NodeTrait;
5355
use SoftDeletes;

packages/category/src/Moox/Entities/Categories/Category/CategoryResource.php

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
use Moox\Category\Moox\Entities\Categories\Category\Resources\CategoryResource\Pages\ListCategories;
2929
use Moox\Category\Moox\Entities\Categories\Category\Resources\CategoryResource\Pages\ViewCategory;
3030
use Moox\Core\Entities\Items\Draft\BaseDraftResource;
31+
use Moox\Core\Support\Resources\Concerns\HasScopedChildResource;
3132
use Moox\Core\Traits\Tabs\HasResourceTabs;
3233
use Moox\Localization\Filament\Tables\Columns\TranslationColumn;
3334
use Moox\Media\Forms\Components\MediaPicker;
@@ -36,7 +37,7 @@
3637

3738
class CategoryResource extends BaseDraftResource
3839
{
39-
use HasResourceTabs;
40+
use HasResourceTabs, HasScopedChildResource;
4041

4142
protected static ?string $model = Category::class;
4243

@@ -90,13 +91,15 @@ public static function form(Schema $schema): Schema
9091
relationship: 'parent',
9192
titleAttribute: 'title',
9293
parentAttribute: 'parent_id',
93-
modifyQueryUsing: fn (Builder $query, $get) => $query->where('id', '!=', $get('id'))
94+
modifyQueryUsing: fn (Builder $query, $get) => static::scopeQuery(
95+
$query->where('id', '!=', $get('id'))
96+
)
9497
)
9598
->label('Parent Category')
9699
->searchable()
97100
->disabledOptions(fn ($get): array => [$get('id')])
98101
->enableBranchNode()
99-
->visible(fn () => Category::count() > 0),
102+
->visible(fn () => static::scopeQuery(Category::query())->count() > 0),
100103
Grid::make(2)
101104
->schema([
102105
static::getFooterActions()->columnSpan(1),
@@ -291,7 +294,7 @@ public static function getPluralModelLabel(): string
291294
#[Override]
292295
public static function getNavigationLabel(): string
293296
{
294-
return config('category.resources.category.plural');
297+
return static::resolveScopedNavigationLabel(config('category.resources.category.plural'));
295298
}
296299

297300
#[Override]
@@ -303,13 +306,25 @@ public static function getBreadcrumb(): string
303306
#[Override]
304307
public static function shouldRegisterNavigation(): bool
305308
{
306-
return true;
309+
return static::resolveScopedNavigationRegistration(true);
307310
}
308311

309312
#[Override]
310313
public static function getNavigationGroup(): ?string
311314
{
312-
return config('category.navigation_group');
315+
return static::resolveScopedNavigationGroup(config('category.navigation_group'));
316+
}
317+
318+
#[Override]
319+
public static function getNavigationParentItem(): ?string
320+
{
321+
return static::resolveScopedNavigationParentItem(parent::getNavigationParentItem());
322+
}
323+
324+
#[Override]
325+
public static function getNavigationSort(): ?int
326+
{
327+
return static::resolveScopedNavigationSort(parent::getNavigationSort());
313328
}
314329

315330
public static function setCurrentTab(?string $tab): void

packages/category/src/Moox/Plugins/CategoryPlugin.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use Filament\Contracts\Plugin;
88
use Filament\Panel;
99
use Filament\Support\Concerns\EvaluatesClosures;
10+
use Moox\Core\Support\Resources\ResourceNavigationRegistrar;
1011
use Moox\Category\Moox\Entities\Categories\Category\CategoryResource;
1112

1213
class CategoryPlugin implements Plugin
@@ -20,7 +21,7 @@ public function getId(): string
2021

2122
public function register(Panel $panel): void
2223
{
23-
$panel->resources([
24+
ResourceNavigationRegistrar::register($panel, [
2425
CategoryResource::class,
2526
]);
2627
}

packages/core/config/core.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -482,4 +482,29 @@
482482
'prompt_when_all_published' => true,
483483
'prompt_when_any_published' => false,
484484
],
485+
486+
/*
487+
|--------------------------------------------------------------------------
488+
| Scopes
489+
|--------------------------------------------------------------------------
490+
|
491+
| Scopes stay plain strings in the database using the format
492+
| "origin:target:context:mode". The registry maps origin and target
493+
| segments to model classes inside the codebase.
494+
|
495+
*/
496+
'scopes' => [
497+
'origins' => [
498+
'media' => \Moox\Media\Models\Media::class,
499+
'draft' => \Moox\Draft\Models\Draft::class,
500+
'category' => \Moox\Category\Models\Category::class,
501+
'tag' => \Moox\Tag\Models\Tag::class,
502+
'record' => \Moox\Record\Models\Record::class,
503+
],
504+
'sources' => [
505+
'draft' => \Moox\Draft\Models\Draft::class,
506+
'global' => null,
507+
],
508+
],
509+
485510
];
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?php
2+
3+
use Illuminate\Database\Migrations\Migration;
4+
use Illuminate\Database\Schema\Blueprint;
5+
use Illuminate\Support\Facades\Schema;
6+
7+
return new class extends Migration
8+
{
9+
public function up(): void
10+
{
11+
Schema::create('scopes', function (Blueprint $table): void {
12+
$table->id();
13+
14+
$table->string('scope')->unique();
15+
$table->string('label')->nullable();
16+
17+
$table->string('origin')->index();
18+
$table->string('source')->index();
19+
$table->string('context')->index();
20+
$table->string('boundary')->index();
21+
22+
$table->boolean('is_active')->default(true)->index();
23+
24+
$table->timestamps();
25+
});
26+
}
27+
28+
public function down(): void
29+
{
30+
Schema::dropIfExists('scopes');
31+
}
32+
};
33+

0 commit comments

Comments
 (0)