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

the field BelongsTo is reset when reactivy #1165

Closed ramir1 closed 1 month ago

ramir1 commented 1 month ago

Description

When changing a BelongsTo, the data is added to currency_multiple, but is reset in the first one. In the server response currency_id = null BelongsTo::make('currency')->reactive(), Text::make('currency_multiple')->reactive( function (Fields $fields, ?int $value, Text $field, array $values) { $field->setValue(100); return $fields; }),

lee-to commented 1 month ago

the BelongsTo doesn't work with integers, it works with models, you need to assign a model

ramir1 commented 1 month ago

Это поле и работает с моделю. И список для выбора отображается. И все сохраняется нормально. Но, когда добавляю реактивность, то выбранное поле сбрасывается после перезагрузки реактивных полей.

lee-to commented 1 month ago

Это поле и работает с моделю. И список для выбора отображается. И все сохраняется нормально. Но, когда добавляю реактивность, то выбранное поле сбрасывается после перезагрузки реактивных полей.

Понял, на днях попробую воспроизвести у себя и если что сделаю фикс либо открою задачу заного

lee-to commented 1 month ago

ну или сделаю рецепт решения

lee-to commented 1 month ago

Я нашел проблему и решение, скоро будет фикс релиз но если нет времени ждать то можно применить вот такой хак

BelongsTo::make(
    __('moonshine::ui.resource.role'),
    'moonshineUserRole',
    static fn (MoonshineUserRole $model) => $model->name,
    new MoonShineUserRoleResource(),
)
    ->reactive(),

Email::make(__('moonshine::ui.resource.email'), 'email')
    ->reactive(function(Fields $fields, ?string $value, Email $field, array $values) {
        $fields
            ->findByColumn('moonshine_user_role_id')
            ?->setValue((new MoonshineUserRole())->forceFill($values['moonshine_user_role_id']));

        $field->setValue('test@ya.ru');

        return $fields;
    })
ramir1 commented 1 month ago

спасибо. Подожду.