diff --git a/modules/content_moderation/src/Plugin/views/filter/ContentStates.php b/modules/content_moderation/src/Plugin/views/filter/ContentStates.php
new file mode 100644
index 0000000..817b661
--- /dev/null
+++ b/modules/content_moderation/src/Plugin/views/filter/ContentStates.php
@@ -0,0 +1,134 @@
+<?php
+
+namespace Drupal\content_moderation\Plugin\views\filter;
+
+use Drupal\Core\Entity\EntityTypeManagerInterface;
+use Drupal\views\Plugin\views\filter\InOperator;
+use Drupal\views\ViewExecutable;
+use Drupal\views\Plugin\views\display\DisplayPluginBase;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Filter class which allows filtering by entity bundles.
+ *
+ * @ingroup views_filter_handlers
+ *
+ * @ViewsFilter("content_states")
+ */
+class ContentStates extends InOperator {
+
+  /**
+   * The entity type for the filter.
+   *
+   * @var string
+   */
+  protected $entityTypeId;
+
+  /**
+   * The entity type definition.
+   *
+   * @var \Drupal\Core\Entity\EntityTypeInterface
+   */
+  protected $entityType;
+
+  /**
+   * The entity type manager.
+   *
+   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
+   */
+  protected $entityTypeManager;
+
+  /**
+   * Constructs a Bundle object.
+   *
+   * @param array $configuration
+   *   A configuration array containing information about the plugin instance.
+   * @param string $plugin_id
+   *   The plugin_id for the plugin instance.
+   * @param mixed $plugin_definition
+   *   The plugin implementation definition.
+   * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
+   *   The entity manager.
+   */
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+
+    $this->entityTypeManager = $entity_type_manager;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $container->get('entity_type.manager')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function init(ViewExecutable $view, DisplayPluginBase $display, array &$options = NULL) {
+    parent::init($view, $display, $options);
+
+    $this->entityTypeId = $this->getEntityType();
+    $this->entityType = $this->entityTypeManager->getDefinition($this->entityTypeId);
+    $this->real_field = $this->entityType->getKey('bundle');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getValueOptions() {
+    if (!isset($this->valueOptions)) {
+      $this->valueTitle = $this->t('Workflow states');
+
+      $storage = $this->entityTypeManager->getStorage('workflow');
+      $workflows = $storage->loadMultiple();
+      $options = [];
+      foreach ($workflows as $workflow) {
+        $states = $workflow->getStates();
+
+        foreach ($states as $state_id => $state) {
+          $options[$state_id] = $state->label();
+        }
+      }
+
+      asort($options);
+      $this->valueOptions = $options;
+    }
+
+    return $this->valueOptions;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function query() {
+    // Make sure that the entity base table is in the query.
+    $this->ensureMyTable();
+    parent::query();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function calculateDependencies() {
+    $dependencies = parent::calculateDependencies();
+
+    $bundle_entity_type = $this->entityType->getBundleEntityType();
+    $bundle_entity_storage = $this->entityTypeManager->getStorage($bundle_entity_type);
+
+    foreach (array_keys($this->value) as $bundle) {
+      if ($bundle_entity = $bundle_entity_storage->load($bundle)) {
+        $dependencies[$bundle_entity->getConfigDependencyKey()][] = $bundle_entity->getConfigDependencyName();
+      }
+    }
+
+    return $dependencies;
+  }
+
+}
diff --git a/modules/content_moderation/src/ViewsData.php b/modules/content_moderation/src/ViewsData.php
index dbef193..3d4801f 100644
--- a/modules/content_moderation/src/ViewsData.php
+++ b/modules/content_moderation/src/ViewsData.php
@@ -201,6 +201,9 @@ class ViewsData {
           ],
         ],
         'field' => ['default_formatter' => 'content_moderation_state'],
+        'filter' => [
+          'id' => 'content_states',
+        ],
       ];
 
       $revision_table = $entity_type->getRevisionDataTable() ?: $entity_type->getRevisionTable();
@@ -220,6 +223,9 @@ class ViewsData {
           ],
         ],
         'field' => ['default_formatter' => 'content_moderation_state'],
+        'filter' => [
+          'id' => 'content_states',
+        ],
       ];
     }
 
