Skip to content

Commit b5a090e

Browse files
committed
Item wip
1 parent a1ebdcc commit b5a090e

File tree

25 files changed

+315
-352
lines changed

25 files changed

+315
-352
lines changed

app/Providers/Filament/AdminPanelProvider.php

Lines changed: 4 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
namespace App\Providers\Filament;
44

5-
use Awcodes\FilamentGravatar\GravatarPlugin;
65
use Filament\Http\Middleware\Authenticate;
76
use Filament\Http\Middleware\DisableBladeIconComponents;
87
use Filament\Http\Middleware\DispatchServingFilamentEvent;
@@ -20,25 +19,21 @@
2019
use Illuminate\Session\Middleware\StartSession;
2120
use Illuminate\View\Middleware\ShareErrorsFromSession;
2221
use Moox\Audit\AuditPlugin;
23-
use Moox\Builder\FullItemPlugin;
24-
use Moox\Builder\ItemPlugin;
25-
use Moox\Builder\NestedTaxonomyPlugin;
26-
use Moox\Builder\SimpleItemPlugin;
27-
use Moox\Builder\SimpleTaxonomyPlugin;
2822
use Moox\Category\CategoryPlugin;
2923
use Moox\Data\Filament\Plugins\StaticCountryPlugin;
3024
use Moox\Data\Filament\Plugins\StaticCurrencyPlugin;
3125
use Moox\Data\Filament\Plugins\StaticLanguagePlugin;
3226
use Moox\Data\Filament\Plugins\StaticLocalePlugin;
3327
use Moox\Data\Filament\Plugins\StaticTimezonePlugin;
3428
use Moox\Expiry\ExpiryPlugin;
29+
use Moox\Item\Moox\Plugins\ItemPlugin;
3530
use Moox\Jobs\JobsBatchesPlugin;
3631
use Moox\Jobs\JobsFailedPlugin;
3732
use Moox\Jobs\JobsPlugin;
3833
use Moox\Jobs\JobsWaitingPlugin;
3934
use Moox\Localization\Filament\Plugins\LocalizationPlugin;
40-
use Moox\Locate\AreaPlugin;
4135
use Moox\LoginLink\LoginLinkPlugin;
36+
use Moox\Media\MediaPlugin;
4237
use Moox\Notification\NotificationPlugin;
4338
use Moox\Page\PagePlugin;
4439
use Moox\Passkey\PasskeyPlugin;
@@ -99,62 +94,35 @@ public function panel(Panel $panel): Panel
9994
->spa()
10095
->plugins([
10196

102-
// Development
103-
// GravatarPlugin::make(), <- Remove!
97+
ItemPlugin::make(),
10498
AuditPlugin::make(),
105-
// AreaPlugin::make(), <- Remove!
106-
// \Moox\Locate\CountryPlugin::make(), <- Remove!
107-
// \Moox\Locate\LanguagePlugin::make(),
108-
// \Moox\Locate\TimezonePlugin::make(),
10999

110-
// Builder plugin - missing config, will be removed completely
111-
// SimpleTaxonomyPlugin::make(),
112-
// NestedTaxonomyPlugin::make(),
113-
// ItemPlugin::make(),
114-
// FullItemPlugin::make(),
115-
// SimpleItemPlugin::make(),
116-
117-
// CMS plugin
118100
PagePlugin::make(),
119101
CategoryPlugin::make(),
120102
TagPlugin::make(),
121103

122-
// Notification plugin
123104
NotificationPlugin::make(),
124105

125-
// Jobs plugins
126106
JobsPlugin::make(),
127107
JobsWaitingPlugin::make(),
128108
JobsFailedPlugin::make(),
129109
JobsBatchesPlugin::make(),
130110

131-
// Sync Plugins
132-
// \Moox\Sync\SyncPlugin::make(),
133-
// \Moox\Sync\PlatformPlugin::make(),
134-
135-
// User plugins
136111
UserPlugin::make(),
137112
UserDevicePlugin::make(),
138113
LoginLinkPlugin::make(),
139114
UserSessionPlugin::make(),
140115
PasskeyPlugin::make(),
141116
ResetPasswordPlugin::make(),
142117

143-
// Expiry plugin
144118
ExpiryPlugin::make(),
145-
146-
// Training plugins
147-
148-
// Builder plugin
149-
// \Moox\Builder\ItemPlugin::make(),
150-
\Moox\Media\MediaPlugin::make(),
119+
MediaPlugin::make(),
151120

152121
TrainingPlugin::make(),
153122
TrainingInvitationPlugin::make(),
154123
TrainingDatePlugin::make(),
155124
TrainingTypePlugin::make(),
156125

157-
// Localization plugin
158126
LocalizationPlugin::make(),
159127
StaticLocalePlugin::make(),
160128
StaticCountryPlugin::make(),

docs/_devlog/Alf.md

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,13 @@
22

33
## Todo
44

5+
- [ ] Implement Item Entity
6+
- [x] Item Model
7+
- [x] Item migration
8+
- [x] Item Resource
9+
- [x] Item Pages
10+
- [ ] Item Frontend
11+
512
Build now uses the new API from SP:
613
That is the rest of the old config:
714

@@ -150,17 +157,6 @@ return [
150157

151158
## Items
152159

153-
- Item
154-
1. ID
155-
2. Active - Bool
156-
3. Simple Status
157-
4. Title - String
158-
5. Slug - String
159-
6. Image - Media
160-
7. Description - Editor
161-
8. Data - JSON
162-
9. created_at
163-
10. updated_at
164160
- Archive Item from item
165161
1. ID
166162
2. Title - String

packages/core/README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -153,10 +153,10 @@ A pretty basic example:
153153
The `visible`-option is not necessary, as it defaults to true. But if you want to toggle the visibility of a Tab, you can use a Closure like this:
154154

155155
```php
156-
'visible' => in_array(rtrim(env('APP_URL'), '/'), [
157-
'https://visible.test',
158-
'http://localhost',
159-
]),
156+
'visible' => in_array(rtrim(env('APP_URL'), '/'), [
157+
'https://visible.test',
158+
'http://localhost',
159+
]),
160160
```
161161

162162
#### Queries

packages/core/docs/Implementation.md

Lines changed: 38 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -13,68 +13,83 @@ The Item Entity is implemented in our Single Entity Package [Moox Item](https://
1313
#### Item Model
1414

1515
```php
16-
use Moox\Core\Entities\Items\Item\MooxModel;
16+
use Moox\Core\Entities\Items\Item\ItemModel;
1717

18-
class Item extends MooxModel {}
18+
class Log extends ItemModel {
19+
// Your model
20+
}
1921
```
2022

2123
### Item Resource
2224

2325
```php
24-
use Moox\Core\Entities\BaseResource;
26+
use Moox\Core\Entities\Items\Item\ItemResource;
27+
use Illuminate\Database\Eloquent\Builder;
2528

26-
class ItemResource extends Resource
29+
class LogResource extends ItemResource
2730
{
28-
// your resource
31+
// Your resource
2932
}
3033
```
3134

3235
### Item Pages
3336

3437
```php
35-
use Moox\Core\Entities\Items\Item\Pages\MooxCreatePage;
36-
use Moox\Item\Moox\Entities\Items\ItemResource;
38+
use Moox\Core\Entities\Items\Item\Pages\ItemCreatePage;
39+
use App\Filament\Resources\LogResource;
3740

38-
class CreatePage extends MooxCreatePage
41+
class CreatePage extends ItemCreatePage
3942
{
40-
protected static string $resource = ItemResource::class;
43+
// Your create page
4144
}
4245
```
4346

4447
```php
45-
use Moox\Core\Entities\Items\Item\Pages\MooxEditPage;
46-
use Moox\Item\Moox\Entities\Items\ItemResource;
48+
use Moox\Core\Entities\Items\Item\Pages\ItemEditPage;
49+
use App\Filament\Resources\LogResource;
4750

48-
class EditPage extends MooxEditPage
51+
class EditPage extends ItemEditPage
4952
{
50-
protected static string $resource = ItemResource::class;
53+
// Your edit page
5154
}
5255
```
5356

5457
```php
55-
use Moox\Core\Entities\Items\Item\Pages\MooxListPage;
56-
use Moox\Item\Moox\Entities\Items\ItemResource;
58+
use Moox\Core\Entities\Items\Item\Pages\ItemListPage;
59+
use App\Filament\Resources\LogResource;
5760

58-
class ListPage extends MooxListPage
61+
class ListPage extends ItemListPage
5962
{
60-
protected static string $resource = ItemResource::class;
63+
// Your list page
6164
}
6265
```
6366

6467
```php
65-
use Moox\Core\Entities\Items\Item\Pages\MooxViewPage;
66-
use Moox\Item\Moox\Entities\Items\ItemResource;
68+
use Moox\Core\Entities\Items\Item\Pages\ItemViewPage;
69+
use App\Filament\Resources\LogResource;
6770

68-
class ViewPage extends MooxViewPage
71+
class ViewPage extends ItemViewPage
6972
{
70-
protected static string $resource = ItemResource::class;
73+
// Your view page
7174
}
7275
```
7376

7477
## Core Traits
7578

7679
Moox Core ships with multiple traits that can be used to add functionality to entities:
7780

78-
### Has Tabs
81+
### Tabs
82+
83+
The `HasTabs` trait can be used to add configurable tabs to a resource.
84+
85+
### Taxonomy
86+
87+
The `HasTaxonomy` trait can be used to add one or more taxonomies to a resource.
7988

80-
### Has Taxonomy
89+
```php
90+
// TODO: remove this boilerplate from models
91+
protected function getResourceName(): string
92+
{
93+
return 'log';
94+
}
95+
```

packages/core/src/Entities/Items/Item/ItemResource.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Moox\Core\Entities\Items\Item;
44

55
use Filament\Forms\Components\Actions;
6+
use Illuminate\Contracts\Database\Eloquent\Builder;
67
use Moox\Core\Entities\BaseResource;
78
use Moox\Core\Traits\Tabs\HasResourceTabs;
89

@@ -83,4 +84,9 @@ public static function getFormActions(): Actions
8384

8485
return Actions::make($actions);
8586
}
87+
88+
public static function query(): Builder
89+
{
90+
return parent::getEloquentQuery();
91+
}
8692
}

packages/core/src/Entities/Items/Item/Pages/ItemCreatePage.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,12 @@
66
use Illuminate\Database\Eloquent\Model;
77
use Illuminate\Database\Eloquent\SoftDeletes;
88
use Illuminate\Database\Eloquent\SoftDeletingScope;
9+
use Moox\Core\Traits\ResolveResourceClass;
910

1011
abstract class ItemCreatePage extends CreateRecord
1112
{
13+
use ResolveResourceClass;
14+
1215
protected function resolveRecord($key): Model
1316
{
1417
$model = static::getModel();

packages/core/src/Entities/Items/Item/Pages/ItemEditPage.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@
33
namespace Moox\Core\Entities\Items\Item\Pages;
44

55
use Filament\Resources\Pages\EditRecord;
6+
use Moox\Core\Traits\ResolveResourceClass;
67

78
abstract class ItemEditPage extends EditRecord
89
{
9-
// nothing for now
10+
use ResolveResourceClass;
1011
}

packages/core/src/Entities/Items/Item/Pages/ItemListPage.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33
namespace Moox\Core\Entities\Items\Item\Pages;
44

55
use Filament\Resources\Pages\ListRecords;
6-
use Moox\Core\Entities\Items\Item\MooxResource;
6+
use Moox\Core\Entities\Items\Item\ItemResource;
7+
use Moox\Core\Traits\ResolveResourceClass;
78
use Moox\Core\Traits\Tabs\HasListPageTabs;
89

910
abstract class ItemListPage extends ListRecords
1011
{
1112
use HasListPageTabs;
12-
13-
protected static string $resource = MooxResource::class;
13+
use ResolveResourceClass;
1414

1515
public function mount(): void
1616
{
@@ -20,6 +20,6 @@ public function mount(): void
2020

2121
public function getTabs(): array
2222
{
23-
return $this->getDynamicTabs('previews.simple-item.tabs', MooxResource::class);
23+
return $this->getDynamicTabs('previews.simple-item.tabs', ItemResource::class);
2424
}
2525
}

packages/core/src/Entities/Items/Item/Pages/ItemViewPage.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,12 @@
33
namespace Moox\Core\Entities\Items\Item\Pages;
44

55
use Filament\Resources\Pages\ViewRecord;
6+
use Moox\Core\Traits\ResolveResourceClass;
67

78
abstract class ItemViewPage extends ViewRecord
89
{
10+
use ResolveResourceClass;
11+
912
public function getFormActions(): array
1013
{
1114
return [];
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
<?php
2+
3+
namespace Moox\Core\Traits;
4+
5+
trait ResolveResourceClass
6+
{
7+
protected static function resolveResourceClass(): string
8+
{
9+
$className = static::class;
10+
11+
$resourceClass = preg_replace('/\\\\Pages\\\\[^\\\\]+$/', '', $className);
12+
13+
return class_exists($resourceClass) ? $resourceClass : parent::$resource;
14+
}
15+
16+
public static function getResource(): string
17+
{
18+
if (isset(static::$resource)) {
19+
return static::$resource;
20+
}
21+
22+
$className = static::class;
23+
24+
$parts = explode('\\', $className);
25+
$parts = explode('\\', $className);
26+
27+
array_pop($parts); // Remove ViewPage
28+
array_pop($parts); // Remove Pages
29+
30+
$entityName = end($parts);
31+
32+
reset($parts);
33+
34+
$resourceClass = implode('\\', $parts).'\\'.$entityName.'Resource';
35+
36+
if (class_exists($resourceClass)) {
37+
return $resourceClass;
38+
}
39+
40+
throw new \Exception(
41+
'Could not automatically determine resource class for '.static::class.
42+
'. Please define protected static string $resource property.'
43+
);
44+
}
45+
}

0 commit comments

Comments
 (0)