Skip to content

Commit 52e8d48

Browse files
authored
Merge pull request #1 from shevl-dev/moonshine-update
feat: MoonShine update
2 parents f2eb4ab + ad948e6 commit 52e8d48

17 files changed

Lines changed: 1257 additions & 812 deletions

app/MoonShine/Layouts/MoonShineLayout.php

Lines changed: 7 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -5,34 +5,18 @@
55
namespace App\MoonShine\Layouts;
66

77
use MoonShine\Laravel\Layouts\AppLayout;
8+
use MoonShine\ColorManager\Palettes\DefaultPalette;
89
use MoonShine\ColorManager\ColorManager;
910
use MoonShine\Contracts\ColorManager\ColorManagerContract;
10-
use MoonShine\Laravel\Components\Layout\{Locales, Notifications, Profile, Search};
11-
use MoonShine\UI\Components\{Breadcrumbs,
12-
Components,
13-
Layout\Flash,
14-
Layout\Div,
15-
Layout\Body,
16-
Layout\Burger,
17-
Layout\Content,
18-
Layout\Footer,
19-
Layout\Head,
20-
Layout\Favicon,
21-
Layout\Assets,
22-
Layout\Meta,
23-
Layout\Header,
24-
Layout\Html,
25-
Layout\Layout,
26-
Layout\Logo,
27-
Layout\Menu,
28-
Layout\Sidebar,
29-
Layout\ThemeSwitcher,
30-
Layout\TopBar,
31-
Layout\Wrapper,
32-
When};
11+
use MoonShine\Contracts\ColorManager\PaletteContract;
3312

3413
final class MoonShineLayout extends AppLayout
3514
{
15+
/**
16+
* @var null|class-string<PaletteContract>
17+
*/
18+
protected ?string $palette = DefaultPalette::class;
19+
3620
protected function assets(): array
3721
{
3822
return [
@@ -56,9 +40,4 @@ protected function colors(ColorManagerContract $colorManager): void
5640

5741
// $colorManager->primary('#00000');
5842
}
59-
60-
public function build(): Layout
61-
{
62-
return parent::build();
63-
}
6443
}

app/MoonShine/Pages/Dashboard.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66

77
use MoonShine\Laravel\Pages\Page;
88
use MoonShine\Contracts\UI\ComponentContract;
9-
#[\MoonShine\MenuManager\Attributes\SkipMenu]
109

10+
#[\MoonShine\MenuManager\Attributes\SkipMenu]
1111
class Dashboard extends Page
1212
{
1313
/**
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\MoonShine\Resources\MoonShineUser;
6+
7+
use MoonShine\Laravel\Models\MoonshineUser;
8+
use MoonShine\Laravel\Resources\ModelResource;
9+
use App\MoonShine\Resources\MoonShineUser\Pages\MoonShineUserFormPage;
10+
use App\MoonShine\Resources\MoonShineUser\Pages\MoonShineUserIndexPage;
11+
use MoonShine\MenuManager\Attributes\Group;
12+
use MoonShine\MenuManager\Attributes\Order;
13+
use MoonShine\Support\Attributes\Icon;
14+
use MoonShine\Support\Enums\Action;
15+
use MoonShine\Support\ListOf;
16+
17+
/**
18+
* @extends ModelResource<MoonshineUser, MoonShineUserIndexPage, MoonShineUserFormPage, null>
19+
*/
20+
#[Icon('users')]
21+
#[Group('moonshine::ui.resource.system', 'users', translatable: true)]
22+
#[Order(0)]
23+
class MoonShineUserResource extends ModelResource
24+
{
25+
protected string $model = MoonshineUser::class;
26+
27+
protected string $column = 'name';
28+
29+
protected array $with = ['moonshineUserRole'];
30+
31+
protected bool $simplePaginate = true;
32+
33+
public function getTitle(): string
34+
{
35+
return __('moonshine::ui.resource.admins_title');
36+
}
37+
38+
protected function activeActions(): ListOf
39+
{
40+
return parent::activeActions()->except(Action::VIEW);
41+
}
42+
43+
protected function pages(): array
44+
{
45+
return [
46+
MoonShineUserIndexPage::class,
47+
MoonShineUserFormPage::class,
48+
];
49+
}
50+
51+
protected function search(): array
52+
{
53+
return [
54+
'id',
55+
'name',
56+
];
57+
}
58+
}

app/MoonShine/Resources/MoonShineUserResource.php renamed to app/MoonShine/Resources/MoonShineUser/Pages/MoonShineUserFormPage.php

Lines changed: 23 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,20 @@
22

33
declare(strict_types=1);
44

5-
namespace App\MoonShine\Resources;
5+
namespace App\MoonShine\Resources\MoonShineUser\Pages;
66

77
use Illuminate\Contracts\Database\Eloquent\Builder;
88
use Illuminate\Validation\Rule;
9-
use MoonShine\Laravel\Enums\Action;
9+
use Illuminate\Validation\Rules\Password as PasswordRule;
10+
use MoonShine\Contracts\Core\TypeCasts\DataWrapperContract;
11+
use MoonShine\Contracts\UI\ComponentContract;
12+
use MoonShine\Contracts\UI\FieldContract;
1013
use MoonShine\Laravel\Fields\Relationships\BelongsTo;
1114
use MoonShine\Laravel\Models\MoonshineUser;
12-
use MoonShine\Laravel\Resources\ModelResource;
1315
use MoonShine\Laravel\Models\MoonshineUserRole;
14-
use MoonShine\MenuManager\Attributes\Group;
15-
use MoonShine\MenuManager\Attributes\Order;
16-
use MoonShine\Support\Attributes\Icon;
17-
use MoonShine\Support\Enums\Color;
18-
use MoonShine\Support\ListOf;
16+
use MoonShine\Laravel\Pages\Crud\FormPage;
17+
use App\MoonShine\Resources\MoonShineUser\MoonShineUserResource;
18+
use App\MoonShine\Resources\MoonShineUserRole\MoonShineUserRoleResource;
1919
use MoonShine\UI\Components\Collapse;
2020
use MoonShine\UI\Components\Layout\Box;
2121
use MoonShine\UI\Components\Layout\Flex;
@@ -29,67 +29,15 @@
2929
use MoonShine\UI\Fields\PasswordRepeat;
3030
use MoonShine\UI\Fields\Text;
3131

32-
#[Icon('users')]
33-
#[Group('moonshine::ui.resource.system', 'users', translatable: true)]
34-
#[Order(1)]
3532
/**
36-
* @extends ModelResource<MoonshineUser>
33+
* @extends FormPage<MoonShineUserResource, MoonShineUser>
3734
*/
38-
class MoonShineUserResource extends ModelResource
35+
final class MoonShineUserFormPage extends FormPage
3936
{
40-
protected string $model = MoonshineUser::class;
41-
42-
protected string $column = 'name';
43-
44-
protected array $with = ['moonshineUserRole'];
45-
46-
protected bool $simplePaginate = true;
47-
48-
protected bool $columnSelection = true;
49-
50-
public function getTitle(): string
51-
{
52-
return __('moonshine::ui.resource.admins_title');
53-
}
54-
55-
protected function activeActions(): ListOf
56-
{
57-
return parent::activeActions()->except(Action::VIEW);
58-
}
59-
60-
protected function indexFields(): iterable
61-
{
62-
return [
63-
ID::make()->sortable(),
64-
65-
BelongsTo::make(
66-
__('moonshine::ui.resource.role'),
67-
'moonshineUserRole',
68-
formatted: static fn (MoonshineUserRole $model) => $model->name,
69-
resource: MoonShineUserRoleResource::class,
70-
)->badge(Color::PURPLE),
71-
72-
Text::make(__('moonshine::ui.resource.name'), 'name'),
73-
74-
Image::make(__('moonshine::ui.resource.avatar'), 'avatar')->modifyRawValue(fn (
75-
?string $raw
76-
): string => $raw ?? ''),
77-
78-
Date::make(__('moonshine::ui.resource.created_at'), 'created_at')
79-
->format("d.m.Y")
80-
->sortable(),
81-
82-
Email::make(__('moonshine::ui.resource.email'), 'email')
83-
->sortable(),
84-
];
85-
}
86-
87-
protected function detailFields(): iterable
88-
{
89-
return $this->indexFields();
90-
}
91-
92-
protected function formFields(): iterable
37+
/**
38+
* @return list<ComponentContract|FieldContract>
39+
*/
40+
protected function fields(): iterable
9341
{
9442
return [
9543
Box::make([
@@ -103,7 +51,6 @@ protected function formFields(): iterable
10351
formatted: static fn (MoonshineUserRole $model) => $model->name,
10452
resource: MoonShineUserRoleResource::class,
10553
)
106-
->reactive()
10754
->creatable()
10855
->valuesQuery(static fn (Builder $q) => $q->select(['id', 'name'])),
10956

@@ -131,7 +78,7 @@ protected function formFields(): iterable
13178
->customAttributes(['autocomplete' => 'new-password'])
13279
->eye(),
13380

134-
PasswordRepeat::make(__('moonshine::ui.resource.repeat_password'), 'password_repeat')
81+
PasswordRepeat::make(__('moonshine::ui.resource.repeat_password'), 'password_confirmation')
13582
->customAttributes(['autocomplete' => 'confirm-password'])
13683
->eye(),
13784
])->icon('lock-closed'),
@@ -141,10 +88,7 @@ protected function formFields(): iterable
14188
];
14289
}
14390

144-
/**
145-
* @return array{name: array|string, moonshine_user_role_id: array|string, email: array|string, password: array|string}
146-
*/
147-
protected function rules($item): array
91+
protected function rules(DataWrapperContract $item): array
14892
{
14993
return [
15094
'name' => 'required',
@@ -154,33 +98,14 @@ protected function rules($item): array
15498
'bail',
15599
'required',
156100
'email',
157-
Rule::unique('moonshine_users')->ignoreModel($item),
101+
Rule::unique('moonshine_users')->ignoreModel($item->getOriginal()),
102+
],
103+
'avatar' => ['sometimes', 'nullable', 'image', 'mimes:jpeg,jpg,png,gif'],
104+
'password' => [
105+
...$item->getKey() !== null ? ['sometimes', 'nullable'] : ['required'],
106+
PasswordRule::defaults(),
107+
'confirmed',
158108
],
159-
'password' => $item->exists
160-
? 'sometimes|nullable|min:6|required_with:password_repeat|same:password_repeat'
161-
: 'required|min:6|required_with:password_repeat|same:password_repeat',
162-
];
163-
}
164-
165-
protected function search(): array
166-
{
167-
return [
168-
'id',
169-
'name',
170-
];
171-
}
172-
173-
protected function filters(): iterable
174-
{
175-
return [
176-
BelongsTo::make(
177-
__('moonshine::ui.resource.role'),
178-
'moonshineUserRole',
179-
formatted: static fn (MoonshineUserRole $model) => $model->name,
180-
resource: MoonShineUserRoleResource::class,
181-
)->valuesQuery(static fn (Builder $q) => $q->select(['id', 'name'])),
182-
183-
Email::make('E-mail', 'email'),
184109
];
185110
}
186111
}
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\MoonShine\Resources\MoonShineUser\Pages;
6+
7+
use Illuminate\Contracts\Database\Eloquent\Builder;
8+
use MoonShine\Contracts\UI\ComponentContract;
9+
use MoonShine\Contracts\UI\FieldContract;
10+
use MoonShine\Laravel\Fields\Relationships\BelongsTo;
11+
use MoonShine\Laravel\Models\MoonshineUserRole;
12+
use MoonShine\Laravel\Pages\Crud\IndexPage;
13+
use App\MoonShine\Resources\MoonShineUser\MoonShineUserResource;
14+
use App\MoonShine\Resources\MoonShineUserRole\MoonShineUserRoleResource;
15+
use MoonShine\Support\Enums\Color;
16+
use MoonShine\UI\Components\Table\TableBuilder;
17+
use MoonShine\UI\Fields\Date;
18+
use MoonShine\UI\Fields\Email;
19+
use MoonShine\UI\Fields\ID;
20+
use MoonShine\UI\Fields\Image;
21+
use MoonShine\UI\Fields\Text;
22+
23+
/**
24+
* @extends IndexPage<MoonShineUserResource>
25+
*/
26+
final class MoonShineUserIndexPage extends IndexPage
27+
{
28+
/**
29+
* @return list<FieldContract>
30+
*/
31+
protected function fields(): iterable
32+
{
33+
return [
34+
ID::make()->sortable(),
35+
36+
BelongsTo::make(
37+
__('moonshine::ui.resource.role'),
38+
'moonshineUserRole',
39+
formatted: static fn (MoonshineUserRole $model) => $model->name,
40+
resource: MoonShineUserRoleResource::class,
41+
)->badge(Color::PURPLE),
42+
43+
Text::make(__('moonshine::ui.resource.name'), 'name'),
44+
45+
Image::make(__('moonshine::ui.resource.avatar'), 'avatar')->modifyRawValue(fn (
46+
?string $raw
47+
): string => $raw ?? ''),
48+
49+
Date::make(__('moonshine::ui.resource.created_at'), 'created_at')
50+
->format("d.m.Y")
51+
->sortable(),
52+
53+
Email::make(__('moonshine::ui.resource.email'), 'email')
54+
->sortable(),
55+
];
56+
}
57+
58+
protected function filters(): iterable
59+
{
60+
return [
61+
BelongsTo::make(
62+
__('moonshine::ui.resource.role'),
63+
'moonshineUserRole',
64+
formatted: static fn (MoonshineUserRole $model) => $model->name,
65+
resource: MoonShineUserRoleResource::class,
66+
)->valuesQuery(static fn (Builder $q) => $q->select(['id', 'name'])),
67+
68+
Email::make('E-mail', 'email'),
69+
];
70+
}
71+
72+
/**
73+
* @param TableBuilder $component
74+
*
75+
* @return TableBuilder
76+
*/
77+
protected function modifyListComponent(ComponentContract $component): TableBuilder
78+
{
79+
return $component->columnSelection();
80+
}
81+
}

0 commit comments

Comments
 (0)