3 namespace Drupal\paragraphs\Element;
5 use Drupal\Core\Render\Element;
6 use Drupal\Core\Render\Element\RenderElement;
9 * Provides a render element for a paragraphs actions.
11 * Paragraphs actions can have two type of actions
12 * - actions - this are default actions that are always visible.
13 * - dropdown_actions - actions that are in dropdown sub component.
18 * $form['actions'] = [
19 * '#type' => 'paragraphs_actions',
20 * 'actions' => $actions,
21 * 'dropdown_actions' => $dropdown_actions,
23 * $dropdown_actions['button'] = array(
24 * '#type' => 'submit',
28 * @FormElement("paragraphs_actions")
30 class ParagraphsActions extends RenderElement {
35 public function getInfo() {
36 $class = get_class($this);
40 [$class, 'preRenderParagraphsActions'],
42 '#theme' => 'paragraphs_actions',
47 * Pre render callback for #type 'paragraphs_actions'.
49 * @param array $element
50 * Element arrar of a #type 'paragraphs_actions'.
53 * The processed element.
55 public static function preRenderParagraphsActions(array $element) {
56 $element['#attached']['library'][] = 'paragraphs/drupal.paragraphs.actions';
58 if (!empty($element['dropdown_actions'])) {
59 foreach (Element::children($element['dropdown_actions']) as $key) {
60 $dropdown_action = &$element['dropdown_actions'][$key];
61 if (isset($dropdown_action['#ajax'])) {
62 $dropdown_action = RenderElement::preRenderAjaxForm($dropdown_action);
64 if (empty($dropdown_action['#attributes'])) {
65 $dropdown_action['#attributes'] = ['class' => ['paragraphs-dropdown-action']];
68 $dropdown_action['#attributes']['class'][] = 'paragraphs-dropdown-action';