moonshine-software / moonshine

Laravel Admin panel and more. Simple for beginners and powerful for experts. Using Blade, Alpine.js and Tailwind CSS.
https://moonshine-laravel.com
MIT License
714 stars 94 forks source link

feat: dynamic profile username, nameOfUser and avatar #1174

Closed finagin closed 1 month ago

finagin commented 1 month ago

С трудом представляю себе ситуацию, в которой нужно было бы вы водить статичную строку вместо имени или логина (это даже не имя проперти, тогда хотя бы муматорами можно было бы управлять значениями)

Поэтому предлагаю изменить тип поля на Closure для подобного использования:

Profile::make(
    username: fn() => auth()->user()?->role == Role::admin || auth()->isImpersonate()
        ? auth()->id() . ' | ' . auth()->user()?->email
        : auth()->user()?->email,
    withBorder: true
),

Оставил тип string для обратной совместимости или если вдруг кому-то действительно нужно выводить статику

lee-to commented 1 month ago

Раз такая пьянка то давай и аватар сделаем, а то в голову может придти кейс что надо добавить будет Storage::url

finagin commented 1 month ago

Рад, что ты это предложил, но с аватаркой хотел отдельным МРом разобраться

lee-to commented 1 month ago

Здесь я думаю такая же история, если же мы переопределяем значения то зачем мы обращаемся к дефолтам на основе конфига

finagin commented 1 month ago

На случай, если замыкание вернет null. Кейс такой: для одной роли хочу кастомный вывод, а для остальных дефолтный муншайновский, даже если под капотом он изменится в новых версиях

Profile::make(
    username: fn() => auth()->user()?->role == Role::admin
        ? auth()->id() . ' | ' . auth()->user()?->email
        : null,
    withBorder: true
),

Другое дело, что дефолт вызывается всегда, но это уже рефакторинг и его стоит отделить от фитчи. Но сделать его могу

lee-to commented 1 month ago

Жду изменений и потом буду готов принять