I am working on some custom functionality inside of a views table view that enables a ‘quick edit’ form as an available field via views field plugin.
The form is rendered to each row separately using a unique sub_id passed to the form builder for each row.
I have the form working, and it does the submit stuff correctly, but the problem is I need to do two things on ajax callback, so I am using the AjaxResponse() system to do two different actions.
The first action is updating the ‘value’ of a specific column in the views row. The second is essentially just doing return $form; to return the form.
The problem is, when the form does validation the validation works, except the messages do not show up until I refresh the page. I can’t figure out how to tell it which wrapper to use to display the form message, as I am passing two different ones to the ajax response since I need to do two changes.
The code I am using inside of my ajax callback is this:
public function quickEditAjax(&$form, FormStateInterface $form_state) { $values = $form_state->getValues(); $response = new AjaxResponse(); $status = Drupal::entityTypeManager()->getStorage('taxonomy_term')->load($values['status']); $response->addCommand(new ReplaceCommand('.request-status-'. $values['id'],$status->getName())); $response->addCommand(new ReplaceCommand('#quick-edit-wrapper-'. $this->sub_id,$form)); return $response; }
In where #quick-edit-wrapper-$this->sub_id is the unique #id set on the form, and .request-status-$values['id'] is the class attached to the table view column I am trying to change.
The validation error messages do not show up in either wrapper, but I would like it to show up in the #quick-edit-wrapper wrapper. If there are no validation errors and the submit goes through, I also pass a success message and that message doesn’t show up either until I refresh the page.
Is there a way I can specifically tell the messages what wrapper to render in? The ajax response seems to be getting confused with which one to use.