Chris@0: entity; Chris@0: Chris@0: $form['#prefix'] = '
'; Chris@0: $form['#suffix'] = '
'; Chris@0: $form['#id'] = 'views-ui-preview-form'; Chris@0: Chris@0: $form_state->disableCache(); Chris@0: Chris@0: $form['controls']['#attributes'] = ['class' => ['clearfix']]; Chris@0: Chris@0: $form['controls']['title'] = [ Chris@0: '#prefix' => '

', Chris@0: '#markup' => $this->t('Preview'), Chris@0: '#suffix' => '

', Chris@0: ]; Chris@0: Chris@0: // Add a checkbox controlling whether or not this display auto-previews. Chris@0: $form['controls']['live_preview'] = [ Chris@0: '#type' => 'checkbox', Chris@0: '#id' => 'edit-displays-live-preview', Chris@0: '#title' => $this->t('Auto preview'), Chris@0: '#default_value' => \Drupal::config('views.settings')->get('ui.always_live_preview'), Chris@0: ]; Chris@0: Chris@0: // Add the arguments textfield Chris@0: $form['controls']['view_args'] = [ Chris@0: '#type' => 'textfield', Chris@0: '#title' => $this->t('Preview with contextual filters:'), Chris@0: '#description' => $this->t('Separate contextual filter values with a "/". For example, %example.', ['%example' => '40/12/10']), Chris@0: '#id' => 'preview-args', Chris@0: ]; Chris@0: Chris@0: $args = []; Chris@0: if (!$form_state->isValueEmpty('view_args')) { Chris@0: $args = explode('/', $form_state->getValue('view_args')); Chris@0: } Chris@0: Chris@0: $user_input = $form_state->getUserInput(); Chris@0: if ($form_state->get('show_preview') || !empty($user_input['js'])) { Chris@0: $form['preview'] = [ Chris@0: '#weight' => 110, Chris@0: '#theme_wrappers' => ['container'], Chris@0: '#attributes' => ['id' => 'views-live-preview', 'class' => ['views-live-preview']], Chris@0: 'preview' => $view->renderPreview($this->displayID, $args), Chris@0: ]; Chris@0: } Chris@18: $uri = $view->toUrl('preview-form'); Chris@0: $uri->setRouteParameter('display_id', $this->displayID); Chris@0: $form['#action'] = $uri->toString(); Chris@0: Chris@0: return $form; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: protected function actions(array $form, FormStateInterface $form_state) { Chris@0: $view = $this->entity; Chris@0: return [ Chris@0: '#attributes' => [ Chris@0: 'id' => 'preview-submit-wrapper', Chris@17: 'class' => ['preview-submit-wrapper'], Chris@0: ], Chris@0: 'button' => [ Chris@0: '#type' => 'submit', Chris@0: '#value' => $this->t('Update preview'), Chris@0: '#attributes' => ['class' => ['arguments-preview']], Chris@0: '#submit' => ['::submitPreview'], Chris@0: '#id' => 'preview-submit', Chris@0: '#ajax' => [ Chris@0: 'url' => Url::fromRoute('entity.view.preview_form', ['view' => $view->id(), 'display_id' => $this->displayID]), Chris@0: 'wrapper' => 'views-preview-wrapper', Chris@0: 'event' => 'click', Chris@0: 'progress' => ['type' => 'fullscreen'], Chris@0: 'method' => 'replaceWith', Chris@0: 'disable-refocus' => TRUE, Chris@0: ], Chris@0: ], Chris@0: ]; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Form submission handler for the Preview button. Chris@0: */ Chris@0: public function submitPreview($form, FormStateInterface $form_state) { Chris@0: $form_state->set('show_preview', TRUE); Chris@0: $form_state->setRebuild(); Chris@0: } Chris@0: Chris@0: }