diff --git a/modules/product/src/Plugin/Field/FieldWidget/ProductVariationAttributesWidget.php b/modules/product/src/Plugin/Field/FieldWidget/ProductVariationAttributesWidget.php index 58d9ff2..e30dd19 100644 --- a/modules/product/src/Plugin/Field/FieldWidget/ProductVariationAttributesWidget.php +++ b/modules/product/src/Plugin/Field/FieldWidget/ProductVariationAttributesWidget.php @@ -34,6 +34,8 @@ use Symfony\Component\DependencyInjection\ContainerInterface; */ class ProductVariationAttributesWidget extends WidgetBase implements ContainerFactoryPluginInterface { + use VariationAjaxRefreshTrait; + /** * The attribute field manager. * @@ -337,28 +339,4 @@ class ProductVariationAttributesWidget extends WidgetBase implements ContainerFa return $values; } - /** - * Ajax callback. - */ - public static function ajaxRefresh(array $form, FormStateInterface $form_state) { - /** @var \Drupal\Core\Render\MainContent\MainContentRendererInterface $ajax_renderer */ - $ajax_renderer = \Drupal::service('main_content_renderer.ajax'); - $request = \Drupal::request(); - $route_match = \Drupal::service('current_route_match'); - /** @var \Drupal\Core\Ajax\AjaxResponse $response */ - $response = $ajax_renderer->renderResponse($form, $request, $route_match); - - $variation = ProductVariation::load($form_state->get('selected_variation')); - /** @var \Drupal\commerce_product\ProductVariationFieldRendererInterface $variation_field_renderer */ - $variation_field_renderer = \Drupal::service('commerce_product.variation_field_renderer'); - $view_mode = $form_state->get('form_display')->getMode(); - $variation_field_renderer->replaceRenderedFields($response, $variation, $view_mode); - // Allow modules to add arbitrary ajax commands to the response. - $event = new ProductVariationAjaxChangeEvent($variation, $response, $view_mode); - $event_dispatcher = \Drupal::service('event_dispatcher'); - $event_dispatcher->dispatch(ProductEvents::PRODUCT_VARIATION_AJAX_CHANGE, $event); - - return $response; - } - } diff --git a/modules/product/src/Plugin/Field/FieldWidget/ProductVariationTitleWidget.php b/modules/product/src/Plugin/Field/FieldWidget/ProductVariationTitleWidget.php index c2198dc..6af1498 100644 --- a/modules/product/src/Plugin/Field/FieldWidget/ProductVariationTitleWidget.php +++ b/modules/product/src/Plugin/Field/FieldWidget/ProductVariationTitleWidget.php @@ -2,9 +2,6 @@ namespace Drupal\commerce_product\Plugin\Field\FieldWidget; -use Drupal\commerce_product\Entity\ProductVariation; -use Drupal\commerce_product\Event\ProductEvents; -use Drupal\commerce_product\Event\ProductVariationAjaxChangeEvent; use Drupal\Component\Utility\Html; use Drupal\Component\Utility\NestedArray; use Drupal\Core\Entity\EntityTypeManagerInterface; @@ -32,6 +29,8 @@ use Symfony\Component\DependencyInjection\ContainerInterface; */ class ProductVariationTitleWidget extends WidgetBase implements ContainerFactoryPluginInterface { + use VariationAjaxRefreshTrait; + /** * The product variation storage. * @@ -98,7 +97,7 @@ class ProductVariationTitleWidget extends WidgetBase implements ContainerFactory public static function defaultSettings() { return [ 'label_display' => TRUE, - 'label_text' => 'Variation:', + 'label_text' => 'Please select', ] + parent::defaultSettings(); } @@ -116,6 +115,11 @@ class ProductVariationTitleWidget extends WidgetBase implements ContainerFactory '#type' => 'textfield', '#title' => $this->t('Label text'), '#default_value' => $this->getSetting('label_text'), + '#states' => [ + 'visible' => [ + 'input[name="fields[purchased_entity][settings_edit_form][settings][label_display]"]' => ['checked' => TRUE] + ] + ] ]; return $element; @@ -240,28 +244,4 @@ class ProductVariationTitleWidget extends WidgetBase implements ContainerFactory return $current_variation; } - /** - * Ajax callback. - */ - public static function ajaxRefresh(array $form, FormStateInterface $form_state) { - /** @var \Drupal\Core\Render\MainContent\MainContentRendererInterface $ajax_renderer */ - $ajax_renderer = \Drupal::service('main_content_renderer.ajax'); - $request = \Drupal::request(); - $route_match = \Drupal::service('current_route_match'); - /** @var \Drupal\Core\Ajax\AjaxResponse $response */ - $response = $ajax_renderer->renderResponse($form, $request, $route_match); - - $variation = ProductVariation::load($form_state->get('selected_variation')); - /** @var \Drupal\commerce_product\ProductVariationFieldRendererInterface $variation_field_renderer */ - $variation_field_renderer = \Drupal::service('commerce_product.variation_field_renderer'); - $view_mode = $form_state->get('form_display')->getMode(); - $variation_field_renderer->replaceRenderedFields($response, $variation, $view_mode); - // Allow modules to add arbitrary ajax commands to the response. - $event = new ProductVariationAjaxChangeEvent($variation, $response, $view_mode); - $event_dispatcher = \Drupal::service('event_dispatcher'); - $event_dispatcher->dispatch(ProductEvents::PRODUCT_VARIATION_AJAX_CHANGE, $event); - - return $response; - } - } diff --git a/modules/product/src/Plugin/Field/FieldWidget/VariationAjaxRefreshTrait.php b/modules/product/src/Plugin/Field/FieldWidget/VariationAjaxRefreshTrait.php new file mode 100644 index 0000000..861db16 --- /dev/null +++ b/modules/product/src/Plugin/Field/FieldWidget/VariationAjaxRefreshTrait.php @@ -0,0 +1,39 @@ +renderResponse($form, $request, $route_match); + + $variation = ProductVariation::load($form_state->get('selected_variation')); + /** @var \Drupal\commerce_product\ProductVariationFieldRendererInterface $variation_field_renderer */ + $variation_field_renderer = \Drupal::service('commerce_product.variation_field_renderer'); + $view_mode = $form_state->get('form_display')->getMode(); + $variation_field_renderer->replaceRenderedFields($response, $variation, $view_mode); + // Allow modules to add arbitrary ajax commands to the response. + $event = new ProductVariationAjaxChangeEvent($variation, $response, $view_mode); + $event_dispatcher = \Drupal::service('event_dispatcher'); + $event_dispatcher->dispatch(ProductEvents::PRODUCT_VARIATION_AJAX_CHANGE, $event); + + return $response; + } + +}