Skip to content

Commit

Permalink
Merge pull request #1538 from moonshine-software/fix-profile-user-fields
Browse files Browse the repository at this point in the history
fix: Profile user fields
  • Loading branch information
lee-to authored Feb 12, 2025
2 parents cf1272a + 1f4aea1 commit 31cfd4b
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 37 deletions.
32 changes: 29 additions & 3 deletions src/Laravel/src/Components/Layout/Profile.php
Original file line number Diff line number Diff line change
Expand Up @@ -86,17 +86,43 @@ protected function viewData(): array

private function getDefaultName(): string
{
return $this->user?->{moonshineConfig()->getUserField('name')} ?? '';
$userField = moonshineConfig()->getUserField('name');

if($userField === '') {
return $this->getDefaultUsername();
}

if($userField === false) {
return '';
}

return $this->user?->{$userField} ?? '';
}

private function getDefaultUsername(): string
{
return $this->user?->{moonshineConfig()->getUserField('username', 'email')} ?? '';
$userField = moonshineConfig()->getUserField('username', 'email');

if($userField === false) {
return '';
}

return $this->user?->{$userField} ?? '';
}

private function getDefaultAvatar(): string
{
$avatar = $this->user?->{moonshineConfig()->getUserField('avatar')};
$userField = moonshineConfig()->getUserField('avatar');

if($userField === '') {
return $this->getAvatarPlaceholder();
}

if($userField === false) {
return '';
}

$avatar = $this->user?->{$userField};

return $avatar
? Storage::disk(moonshineConfig()->getDisk())->url($avatar)
Expand Down
17 changes: 11 additions & 6 deletions src/Laravel/src/Http/Requests/ProfileFormRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,22 @@ public function authorize(): bool

public function rules(): array
{
return [
moonshineConfig()->getUserField('name') => ['required'],
moonshineConfig()->getUserField('username') => [
$name = moonshineConfig()->getUserField('name');
$username = moonshineConfig()->getUserField('username');
$avatar = moonshineConfig()->getUserField('avatar');
$password = moonshineConfig()->getUserField('password');

return array_filter([
$name => blank($name) ? null : ['required'],
$username => blank($username) ? null : [
'required',
Rule::unique(
MoonShineAuth::getModel()?->getTable(),
moonshineConfig()->getUserField('username')
)->ignore(MoonShineAuth::getGuard()->id()),
],
moonshineConfig()->getUserField('avatar') => ['image'],
moonshineConfig()->getUserField('password') => 'sometimes|nullable|min:6|required_with:password_repeat|same:password_repeat',
];
$avatar => blank($avatar) ? null : ['image'],
$password => blank($password) ? null : 'sometimes|nullable|min:6|required_with:password_repeat|same:password_repeat',
]);
}
}
67 changes: 39 additions & 28 deletions src/Laravel/src/Pages/ProfilePage.php
Original file line number Diff line number Diff line change
Expand Up @@ -42,37 +42,48 @@ public function getTitle(): string

protected function fields(): iterable
{
$userFields = array_filter([
ID::make()->sortable(),

moonshineConfig()->getUserField('name')
? Text::make(__('moonshine::ui.resource.name'), moonshineConfig()->getUserField('name'))
->required()
: null,

moonshineConfig()->getUserField('username')
? Text::make(__('moonshine::ui.login.username'), moonshineConfig()->getUserField('username'))
->required()
: null,

moonshineConfig()->getUserField('avatar')
? Image::make(__('moonshine::ui.resource.avatar'), moonshineConfig()->getUserField('avatar'))
->disk(moonshineConfig()->getDisk())
->options(moonshineConfig()->getDiskOptions())
->dir('moonshine_users')
->removable()
->allowedExtensions(['jpg', 'png', 'jpeg', 'gif'])
: null,
]);

$userPasswordsFields = moonshineConfig()->getUserField('password') ? [
Heading::make(__('moonshine::ui.resource.change_password')),

Password::make(__('moonshine::ui.resource.password'), moonshineConfig()->getUserField('password'))
->customAttributes(['autocomplete' => 'new-password'])
->eye(),

PasswordRepeat::make(__('moonshine::ui.resource.repeat_password'), 'password_repeat')
->customAttributes(['autocomplete' => 'confirm-password'])
->eye(),
] : [];

return [
Box::make([
Tabs::make([
Tab::make(__('moonshine::ui.resource.main_information'), [
ID::make()->sortable(),

Text::make(__('moonshine::ui.resource.name'), moonshineConfig()->getUserField('name'))
->required(),

Text::make(__('moonshine::ui.login.username'), moonshineConfig()->getUserField('username'))
->required(),

Image::make(__('moonshine::ui.resource.avatar'), moonshineConfig()->getUserField('avatar'))
->disk(moonshineConfig()->getDisk())
->options(moonshineConfig()->getDiskOptions())
->dir('moonshine_users')
->removable()
->allowedExtensions(['jpg', 'png', 'jpeg', 'gif']),
]),

Tab::make(__('moonshine::ui.resource.password'), [
Heading::make(__('moonshine::ui.resource.change_password')),

Password::make(__('moonshine::ui.resource.password'), moonshineConfig()->getUserField('password'))
->customAttributes(['autocomplete' => 'new-password'])
->eye(),

PasswordRepeat::make(__('moonshine::ui.resource.repeat_password'), 'password_repeat')
->customAttributes(['autocomplete' => 'confirm-password'])
->eye(),
]),
Tab::make(__('moonshine::ui.resource.main_information'), $userFields),
Tab::make(__('moonshine::ui.resource.password'), $userPasswordsFields)->canSee(
fn() => $userPasswordsFields !== [],
),
]),
]),
];
Expand Down

0 comments on commit 31cfd4b

Please sign in to comment.