diff --git a/modules/promotion/commerce_promotion.links.action.yml b/modules/promotion/commerce_promotion.links.action.yml
index 85149571..ebd9826c 100644
--- a/modules/promotion/commerce_promotion.links.action.yml
+++ b/modules/promotion/commerce_promotion.links.action.yml
@@ -3,6 +3,7 @@ entity.commerce_promotion.add_form:
   title: 'Add promotion'
   appears_on:
     - entity.commerce_promotion.collection
+    - entity.commerce_promotion.reorder
 
 entity.commerce_promotion_coupon.add_form:
   route_name: entity.commerce_promotion_coupon.add_form
diff --git a/modules/promotion/commerce_promotion.links.task.yml b/modules/promotion/commerce_promotion.links.task.yml
index 08ba93a2..ec00b35e 100644
--- a/modules/promotion/commerce_promotion.links.task.yml
+++ b/modules/promotion/commerce_promotion.links.task.yml
@@ -2,3 +2,13 @@ entity.commerce_promotion_coupon.collection:
   route_name: entity.commerce_promotion_coupon.collection
   base_route: entity.commerce_promotion.edit_form
   title: Coupons
+
+entity.commerce_promotion.collection:
+  route_name: entity.commerce_promotion.collection
+  base_route: entity.commerce_promotion.collection
+  title: List
+
+entity.commerce_promotion.reorder_form:
+  route_name: entity.commerce_promotion.reorder
+  base_route: entity.commerce_promotion.collection
+  title: Reorder
diff --git a/modules/promotion/commerce_promotion.post_update.php b/modules/promotion/commerce_promotion.post_update.php
index 20bb8ed3..8e35d805 100644
--- a/modules/promotion/commerce_promotion.post_update.php
+++ b/modules/promotion/commerce_promotion.post_update.php
@@ -498,3 +498,15 @@ function commerce_promotion_post_update_12() {
   ]);
   return implode('<br>', $result->getFailed());
 }
+
+/**
+ * Import the promotions view.
+ */
+function commerce_promotion_post_update_13() {
+  /** @var \Drupal\commerce\Config\ConfigUpdaterInterface $config_updater */
+  $config_updater = \Drupal::service('commerce.config_updater');
+  $result = $config_updater->import([
+    'views.view.commerce_promotions',
+  ]);
+  return implode('<br>', $result->getFailed());
+}
diff --git a/modules/promotion/config/install/views.view.commerce_promotions.yml b/modules/promotion/config/install/views.view.commerce_promotions.yml
new file mode 100644
index 00000000..07d88edc
--- /dev/null
+++ b/modules/promotion/config/install/views.view.commerce_promotions.yml
@@ -0,0 +1,884 @@
+langcode: en
+status: true
+dependencies:
+  module:
+    - commerce
+    - commerce_promotion
+    - commerce_store
+    - options
+    - user
+id: commerce_promotions
+label: Promotions
+module: views
+description: ''
+tag: ''
+base_table: commerce_promotion_field_data
+base_field: promotion_id
+display:
+  default:
+    display_plugin: default
+    id: default
+    display_title: Default
+    position: 0
+    display_options:
+      access:
+        type: perm
+        options:
+          perm: 'access commerce_promotion overview'
+      cache:
+        type: none
+        options: {  }
+      query:
+        type: views_query
+        options:
+          disable_sql_rewrite: false
+          distinct: false
+          replica: false
+          query_comment: ''
+          query_tags: {  }
+      exposed_form:
+        type: basic
+        options:
+          submit_button: Apply
+          reset_button: true
+          reset_button_label: Reset
+          exposed_sorts_label: 'Sort by'
+          expose_sort_order: true
+          sort_asc_label: Asc
+          sort_desc_label: Desc
+      pager:
+        type: full
+        options:
+          items_per_page: 50
+          offset: 0
+          id: 0
+          total_pages: null
+          tags:
+            previous: ‹‹
+            next: ››
+            first: '« First'
+            last: 'Last »'
+          expose:
+            items_per_page: false
+            items_per_page_label: 'Items per page'
+            items_per_page_options: '5, 10, 25, 50'
+            items_per_page_options_all: false
+            items_per_page_options_all_label: '- All -'
+            offset: false
+            offset_label: Offset
+          quantity: 9
+      style:
+        type: table
+        options:
+          grouping: {  }
+          row_class: ''
+          default_row_class: true
+          override: true
+          sticky: false
+          caption: ''
+          summary: ''
+          description: ''
+          columns:
+            name: name
+            offer__target_plugin_id: offer__target_plugin_id
+            usage_limit: usage_limit
+            usage_limit_customer: usage_limit_customer
+            start_date: start_date
+            end_date: end_date
+            operations: operations
+          info:
+            name:
+              sortable: true
+              default_sort_order: asc
+              align: ''
+              separator: ''
+              empty_column: false
+              responsive: ''
+            offer__target_plugin_id:
+              sortable: true
+              default_sort_order: asc
+              align: ''
+              separator: ''
+              empty_column: false
+              responsive: ''
+            usage_limit:
+              sortable: false
+              default_sort_order: asc
+              align: ''
+              separator: ''
+              empty_column: false
+              responsive: ''
+            usage_limit_customer:
+              sortable: true
+              default_sort_order: asc
+              align: ''
+              separator: ''
+              empty_column: false
+              responsive: ''
+            start_date:
+              sortable: false
+              default_sort_order: asc
+              align: ''
+              separator: ''
+              empty_column: false
+              responsive: ''
+            end_date:
+              sortable: false
+              default_sort_order: asc
+              align: ''
+              separator: ''
+              empty_column: false
+              responsive: ''
+            operations:
+              align: ''
+              separator: ''
+              empty_column: false
+              responsive: ''
+          default: '-1'
+          empty_table: true
+      row:
+        type: fields
+      fields:
+        name:
+          id: name
+          table: commerce_promotion_field_data
+          field: name
+          relationship: none
+          group_type: group
+          admin_label: ''
+          label: Name
+          exclude: false
+          alter:
+            alter_text: false
+            text: ''
+            make_link: false
+            path: ''
+            absolute: false
+            external: false
+            replace_spaces: false
+            path_case: none
+            trim_whitespace: false
+            alt: ''
+            rel: ''
+            link_class: ''
+            prefix: ''
+            suffix: ''
+            target: ''
+            nl2br: false
+            max_length: 0
+            word_boundary: true
+            ellipsis: true
+            more_link: false
+            more_link_text: ''
+            more_link_path: ''
+            strip_tags: false
+            trim: false
+            preserve_tags: ''
+            html: false
+          element_type: ''
+          element_class: ''
+          element_label_type: ''
+          element_label_class: ''
+          element_label_colon: true
+          element_wrapper_type: ''
+          element_wrapper_class: ''
+          element_default_classes: true
+          empty: ''
+          hide_empty: false
+          empty_zero: false
+          hide_alter_empty: true
+          click_sort_column: value
+          type: string
+          settings: {  }
+          group_column: value
+          group_columns:
+            entity_id: entity_id
+          group_rows: true
+          delta_limit: 0
+          delta_offset: 0
+          delta_reversed: false
+          delta_first_last: false
+          multi_type: separator
+          separator: ', '
+          field_api_classes: false
+          entity_type: null
+          entity_field: name
+          plugin_id: field
+        offer__target_plugin_id:
+          id: offer__target_plugin_id
+          table: commerce_promotion_field_data
+          field: offer__target_plugin_id
+          relationship: none
+          group_type: group
+          admin_label: ''
+          label: 'Offer type'
+          exclude: false
+          alter:
+            alter_text: false
+            text: ''
+            make_link: false
+            path: ''
+            absolute: false
+            external: false
+            replace_spaces: false
+            path_case: none
+            trim_whitespace: false
+            alt: ''
+            rel: ''
+            link_class: ''
+            prefix: ''
+            suffix: ''
+            target: ''
+            nl2br: false
+            max_length: 0
+            word_boundary: true
+            ellipsis: true
+            more_link: false
+            more_link_text: ''
+            more_link_path: ''
+            strip_tags: false
+            trim: false
+            preserve_tags: ''
+            html: false
+          element_type: ''
+          element_class: ''
+          element_label_type: ''
+          element_label_class: ''
+          element_label_colon: true
+          element_wrapper_type: ''
+          element_wrapper_class: ''
+          element_default_classes: true
+          empty: ''
+          hide_empty: false
+          empty_zero: false
+          hide_alter_empty: true
+          click_sort_column: target_plugin_id
+          type: commerce_plugin_item_default
+          settings: {  }
+          group_column: entity_id
+          group_columns: {  }
+          group_rows: true
+          delta_limit: 0
+          delta_offset: 0
+          delta_reversed: false
+          delta_first_last: false
+          multi_type: separator
+          separator: ', '
+          field_api_classes: false
+          entity_type: commerce_promotion
+          entity_field: offer
+          plugin_id: field
+        usage_limit:
+          id: usage_limit
+          table: commerce_promotion_field_data
+          field: usage_limit
+          relationship: none
+          group_type: group
+          admin_label: ''
+          label: Usage
+          exclude: false
+          alter:
+            alter_text: false
+            text: ''
+            make_link: false
+            path: ''
+            absolute: false
+            external: false
+            replace_spaces: false
+            path_case: none
+            trim_whitespace: false
+            alt: ''
+            rel: ''
+            link_class: ''
+            prefix: ''
+            suffix: ''
+            target: ''
+            nl2br: false
+            max_length: 0
+            word_boundary: true
+            ellipsis: true
+            more_link: false
+            more_link_text: ''
+            more_link_path: ''
+            strip_tags: false
+            trim: false
+            preserve_tags: ''
+            html: false
+          element_type: ''
+          element_class: ''
+          element_label_type: ''
+          element_label_class: ''
+          element_label_colon: true
+          element_wrapper_type: ''
+          element_wrapper_class: ''
+          element_default_classes: true
+          empty: ''
+          hide_empty: false
+          empty_zero: false
+          hide_alter_empty: true
+          click_sort_column: value
+          type: commerce_usage_limit
+          settings: {  }
+          group_column: value
+          group_columns: {  }
+          group_rows: true
+          delta_limit: 0
+          delta_offset: 0
+          delta_reversed: false
+          delta_first_last: false
+          multi_type: separator
+          separator: ', '
+          field_api_classes: false
+          entity_type: commerce_promotion
+          entity_field: usage_limit
+          plugin_id: field
+        usage_limit_customer:
+          id: usage_limit_customer
+          table: commerce_promotion_field_data
+          field: usage_limit_customer
+          relationship: none
+          group_type: group
+          admin_label: ''
+          label: 'Per customer limit'
+          exclude: false
+          alter:
+            alter_text: false
+            text: ''
+            make_link: false
+            path: ''
+            absolute: false
+            external: false
+            replace_spaces: false
+            path_case: none
+            trim_whitespace: false
+            alt: ''
+            rel: ''
+            link_class: ''
+            prefix: ''
+            suffix: ''
+            target: ''
+            nl2br: false
+            max_length: 0
+            word_boundary: true
+            ellipsis: true
+            more_link: false
+            more_link_text: ''
+            more_link_path: ''
+            strip_tags: false
+            trim: false
+            preserve_tags: ''
+            html: false
+          element_type: ''
+          element_class: ''
+          element_label_type: ''
+          element_label_class: ''
+          element_label_colon: true
+          element_wrapper_type: ''
+          element_wrapper_class: ''
+          element_default_classes: true
+          empty: ''
+          hide_empty: false
+          empty_zero: false
+          hide_alter_empty: true
+          click_sort_column: value
+          type: commerce_usage_limit
+          settings: {  }
+          group_column: value
+          group_columns: {  }
+          group_rows: true
+          delta_limit: 0
+          delta_offset: 0
+          delta_reversed: false
+          delta_first_last: false
+          multi_type: separator
+          separator: ', '
+          field_api_classes: false
+          entity_type: commerce_promotion
+          entity_field: usage_limit_customer
+          plugin_id: field
+        start_date:
+          id: start_date
+          table: commerce_promotion_field_data
+          field: start_date
+          relationship: none
+          group_type: group
+          admin_label: ''
+          label: 'Start date'
+          exclude: false
+          alter:
+            alter_text: false
+            text: ''
+            make_link: false
+            path: ''
+            absolute: false
+            external: false
+            replace_spaces: false
+            path_case: none
+            trim_whitespace: false
+            alt: ''
+            rel: ''
+            link_class: ''
+            prefix: ''
+            suffix: ''
+            target: ''
+            nl2br: false
+            max_length: 0
+            word_boundary: true
+            ellipsis: true
+            more_link: false
+            more_link_text: ''
+            more_link_path: ''
+            strip_tags: false
+            trim: false
+            preserve_tags: ''
+            html: false
+          element_type: ''
+          element_class: ''
+          element_label_type: ''
+          element_label_class: ''
+          element_label_colon: true
+          element_wrapper_type: ''
+          element_wrapper_class: ''
+          element_default_classes: true
+          empty: ''
+          hide_empty: false
+          empty_zero: false
+          hide_alter_empty: true
+          click_sort_column: value
+          type: commerce_store_datetime
+          settings:
+            date_format: medium
+          group_column: value
+          group_columns: {  }
+          group_rows: true
+          delta_limit: 0
+          delta_offset: 0
+          delta_reversed: false
+          delta_first_last: false
+          multi_type: separator
+          separator: ', '
+          field_api_classes: false
+          entity_type: commerce_promotion
+          entity_field: start_date
+          plugin_id: field
+        end_date:
+          id: end_date
+          table: commerce_promotion_field_data
+          field: end_date
+          relationship: none
+          group_type: group
+          admin_label: ''
+          label: 'End date'
+          exclude: false
+          alter:
+            alter_text: false
+            text: ''
+            make_link: false
+            path: ''
+            absolute: false
+            external: false
+            replace_spaces: false
+            path_case: none
+            trim_whitespace: false
+            alt: ''
+            rel: ''
+            link_class: ''
+            prefix: ''
+            suffix: ''
+            target: ''
+            nl2br: false
+            max_length: 0
+            word_boundary: true
+            ellipsis: true
+            more_link: false
+            more_link_text: ''
+            more_link_path: ''
+            strip_tags: false
+            trim: false
+            preserve_tags: ''
+            html: false
+          element_type: ''
+          element_class: ''
+          element_label_type: ''
+          element_label_class: ''
+          element_label_colon: true
+          element_wrapper_type: ''
+          element_wrapper_class: ''
+          element_default_classes: true
+          empty: ''
+          hide_empty: false
+          empty_zero: false
+          hide_alter_empty: true
+          click_sort_column: value
+          type: commerce_store_datetime
+          settings:
+            date_format: medium
+          group_column: value
+          group_columns: {  }
+          group_rows: true
+          delta_limit: 0
+          delta_offset: 0
+          delta_reversed: false
+          delta_first_last: false
+          multi_type: separator
+          separator: ', '
+          field_api_classes: false
+          entity_type: commerce_promotion
+          entity_field: end_date
+          plugin_id: field
+        operations:
+          id: operations
+          table: commerce_promotion
+          field: operations
+          relationship: none
+          group_type: group
+          admin_label: ''
+          label: Operations
+          exclude: false
+          alter:
+            alter_text: false
+            text: ''
+            make_link: false
+            path: ''
+            absolute: false
+            external: false
+            replace_spaces: false
+            path_case: none
+            trim_whitespace: false
+            alt: ''
+            rel: ''
+            link_class: ''
+            prefix: ''
+            suffix: ''
+            target: ''
+            nl2br: false
+            max_length: 0
+            word_boundary: true
+            ellipsis: true
+            more_link: false
+            more_link_text: ''
+            more_link_path: ''
+            strip_tags: false
+            trim: false
+            preserve_tags: ''
+            html: false
+          element_type: ''
+          element_class: ''
+          element_label_type: ''
+          element_label_class: ''
+          element_label_colon: true
+          element_wrapper_type: ''
+          element_wrapper_class: ''
+          element_default_classes: true
+          empty: ''
+          hide_empty: false
+          empty_zero: false
+          hide_alter_empty: true
+          destination: false
+          entity_type: commerce_promotion
+          plugin_id: entity_operations
+      filters:
+        name:
+          id: name
+          table: commerce_promotion_field_data
+          field: name
+          relationship: none
+          group_type: group
+          admin_label: ''
+          operator: starts
+          value: ''
+          group: 1
+          exposed: true
+          expose:
+            operator_id: name_op
+            label: Name
+            description: ''
+            use_operator: false
+            operator: name_op
+            operator_limit_selection: false
+            operator_list: {  }
+            identifier: name
+            required: false
+            remember: false
+            multiple: false
+            remember_roles:
+              authenticated: authenticated
+              anonymous: '0'
+              administrator: '0'
+              store_admin: '0'
+              api_consumer: '0'
+              customer_service: '0'
+              site_admin: '0'
+            placeholder: ''
+          is_grouped: false
+          group_info:
+            label: ''
+            description: ''
+            identifier: ''
+            optional: true
+            widget: select
+            multiple: false
+            remember: false
+            default_group: All
+            default_group_multiple: {  }
+            group_items: {  }
+          entity_type: commerce_promotion
+          entity_field: name
+          plugin_id: string
+        offer__target_plugin_id:
+          id: offer__target_plugin_id
+          table: commerce_promotion_field_data
+          field: offer__target_plugin_id
+          relationship: none
+          group_type: group
+          admin_label: ''
+          operator: or
+          value: {  }
+          group: 1
+          exposed: true
+          expose:
+            operator_id: offer__target_plugin_id_op
+            label: 'Offer type'
+            description: ''
+            use_operator: false
+            operator: offer__target_plugin_id_op
+            operator_limit_selection: false
+            operator_list: {  }
+            identifier: offer__target_plugin_id
+            required: false
+            remember: false
+            multiple: false
+            remember_roles:
+              authenticated: authenticated
+              anonymous: '0'
+              administrator: '0'
+            reduce: false
+          is_grouped: false
+          group_info:
+            label: ''
+            description: ''
+            identifier: ''
+            optional: true
+            widget: select
+            multiple: false
+            remember: false
+            default_group: All
+            default_group_multiple: {  }
+            group_items: {  }
+          reduce_duplicates: false
+          entity_type: commerce_promotion
+          entity_field: offer
+          plugin_id: list_field
+        code:
+          id: code
+          table: commerce_promotion_coupon
+          field: code
+          relationship: coupons_target_id
+          group_type: group
+          admin_label: ''
+          operator: '='
+          value: ''
+          group: 1
+          exposed: true
+          expose:
+            operator_id: code_op
+            label: 'Coupon code'
+            description: ''
+            use_operator: false
+            operator: code_op
+            operator_limit_selection: false
+            operator_list: {  }
+            identifier: code
+            required: false
+            remember: false
+            multiple: false
+            remember_roles:
+              authenticated: authenticated
+              anonymous: '0'
+              administrator: '0'
+              store_admin: '0'
+              api_consumer: '0'
+              customer_service: '0'
+              site_admin: '0'
+            placeholder: ''
+          is_grouped: false
+          group_info:
+            label: ''
+            description: ''
+            identifier: ''
+            optional: true
+            widget: select
+            multiple: false
+            remember: false
+            default_group: All
+            default_group_multiple: {  }
+            group_items: {  }
+          entity_type: commerce_promotion_coupon
+          entity_field: code
+          plugin_id: string
+        status:
+          id: status
+          table: commerce_promotion_field_data
+          field: status
+          relationship: none
+          group_type: group
+          admin_label: ''
+          operator: '='
+          value: All
+          group: 1
+          exposed: true
+          expose:
+            operator_id: ''
+            label: Status
+            description: ''
+            use_operator: false
+            operator: status_op
+            operator_limit_selection: false
+            operator_list: {  }
+            identifier: status
+            required: false
+            remember: false
+            multiple: false
+            remember_roles:
+              authenticated: authenticated
+              anonymous: '0'
+              administrator: '0'
+              store_admin: '0'
+              api_consumer: '0'
+              customer_service: '0'
+              site_admin: '0'
+          is_grouped: false
+          group_info:
+            label: ''
+            description: ''
+            identifier: ''
+            optional: true
+            widget: select
+            multiple: false
+            remember: false
+            default_group: All
+            default_group_multiple: {  }
+            group_items: {  }
+          entity_type: commerce_promotion
+          entity_field: status
+          plugin_id: boolean
+      sorts:
+        status:
+          id: status
+          table: commerce_promotion_field_data
+          field: status
+          relationship: none
+          group_type: group
+          admin_label: ''
+          order: DESC
+          exposed: false
+          expose:
+            label: ''
+          entity_type: commerce_promotion
+          entity_field: status
+          plugin_id: standard
+        weight:
+          id: weight
+          table: commerce_promotion_field_data
+          field: weight
+          relationship: none
+          group_type: group
+          admin_label: ''
+          order: ASC
+          exposed: false
+          expose:
+            label: ''
+          entity_type: commerce_promotion
+          entity_field: weight
+          plugin_id: standard
+        promotion_id:
+          id: promotion_id
+          table: commerce_promotion_field_data
+          field: promotion_id
+          relationship: none
+          group_type: group
+          admin_label: ''
+          order: DESC
+          exposed: false
+          expose:
+            label: ''
+          entity_type: commerce_promotion
+          entity_field: promotion_id
+          plugin_id: standard
+      title: Promotions
+      header: {  }
+      footer: {  }
+      empty:
+        area:
+          id: area
+          table: views
+          field: area
+          relationship: none
+          group_type: group
+          admin_label: ''
+          empty: true
+          tokenize: false
+          content:
+            value: 'There are no promotions yet.'
+            format: basic_html
+          plugin_id: text
+      relationships:
+        coupons_target_id:
+          id: coupons_target_id
+          table: commerce_promotion__coupons
+          field: coupons_target_id
+          relationship: none
+          group_type: group
+          admin_label: Coupon
+          required: false
+          entity_type: commerce_promotion
+          entity_field: coupons
+          plugin_id: standard
+      arguments: {  }
+      display_extenders: {  }
+      use_ajax: false
+      group_by: true
+      filter_groups:
+        operator: AND
+        groups:
+          1: AND
+    cache_metadata:
+      max-age: -1
+      contexts:
+        - 'languages:language_content'
+        - 'languages:language_interface'
+        - url
+        - url.query_args
+        - user.permissions
+      tags: {  }
+  admin:
+    display_plugin: page
+    id: admin
+    display_title: Page
+    position: 1
+    display_options:
+      display_extenders: {  }
+      path: admin/commerce/promotions/list
+      menu:
+        type: 'default tab'
+        title: List
+        description: ''
+        expanded: false
+        parent: ''
+        weight: 0
+        context: '0'
+        menu_name: main
+      tab_options:
+        type: normal
+        title: List
+        description: ''
+        weight: 0
+    cache_metadata:
+      max-age: -1
+      contexts:
+        - 'languages:language_content'
+        - 'languages:language_interface'
+        - url
+        - url.query_args
+        - user.permissions
+      tags: {  }
diff --git a/modules/promotion/src/Entity/Promotion.php b/modules/promotion/src/Entity/Promotion.php
index e120d947..bd1804ee 100644
--- a/modules/promotion/src/Entity/Promotion.php
+++ b/modules/promotion/src/Entity/Promotion.php
@@ -84,6 +84,7 @@ use Drupal\datetime\Plugin\Field\FieldType\DateTimeItemInterface;
  *     "delete-form" = "/promotion/{commerce_promotion}/delete",
  *     "delete-multiple-form" = "/admin/commerce/promotions/delete",
  *     "collection" = "/admin/commerce/promotions",
+ *     "reorder" = "/admin/commerce/promotions/reorder",
  *     "drupal:content-translation-overview" = "/promotion/{commerce_promotion}/translations",
  *     "drupal:content-translation-add" = "/promotion/{commerce_promotion}/translations/add/{source}/{target}",
  *     "drupal:content-translation-edit" = "/promotion/{commerce_promotion}/translations/edit/{language}",
@@ -775,6 +776,7 @@ class Promotion extends CommerceContentEntityBase implements PromotionInterface
       ->setLabel(t('Offer type'))
       ->setCardinality(1)
       ->setRequired(TRUE)
+      ->setSetting('allowed_values_function', [static::class, 'getOfferOptions'])
       ->setDisplayOptions('form', [
         'type' => 'commerce_plugin_select',
         'weight' => 3,
@@ -935,4 +937,21 @@ class Promotion extends CommerceContentEntityBase implements PromotionInterface
     ];
   }
 
+  /**
+   * Gets the allowed values for the 'offer' base field.
+   *
+   * @return array
+   *   The allowed values.
+   */
+  public static function getOfferOptions() {
+    /** @var \Drupal\commerce_promotion\PromotionOfferManager $offer_manager */
+    $offer_manager = \Drupal::getContainer()->get('plugin.manager.commerce_promotion_offer');
+    $plugins = array_map(static function ($definition) {
+      return $definition['label'];
+    }, $offer_manager->getDefinitions());
+    asort($plugins);
+
+    return $plugins;
+  }
+
 }
diff --git a/modules/promotion/src/PromotionListBuilder.php b/modules/promotion/src/PromotionListBuilder.php
index d25017fe..c0eca57f 100644
--- a/modules/promotion/src/PromotionListBuilder.php
+++ b/modules/promotion/src/PromotionListBuilder.php
@@ -32,25 +32,18 @@ class PromotionListBuilder extends EntityListBuilder implements FormInterface {
   protected $usage;
 
   /**
-   * The disabled promotions.
+   * The entities being listed.
    *
    * @var \Drupal\commerce_promotion\Entity\PromotionInterface[]
    */
-  protected $disabledEntities = [];
-
-  /**
-   * The enabled promotions.
-   *
-   * @var \Drupal\commerce_promotion\Entity\PromotionInterface[]
-   */
-  protected $enabledEntities = [];
+  protected $entities = [];
 
   /**
    * The usage counts.
    *
    * @var array
    */
-  protected $usageCounts = [];
+  protected $usageCounts;
 
   /**
    * Whether tabledrag is enabled.
@@ -59,20 +52,6 @@ class PromotionListBuilder extends EntityListBuilder implements FormInterface {
    */
   protected $hasTableDrag = TRUE;
 
-  /**
-   * Divide the limit by 2 (because we have 2 listings).
-   *
-   * @var int
-   */
-  protected $limit = 25;
-
-  /**
-   * The status condition value.
-   *
-   * @var bool
-   */
-  protected $statusCondition = TRUE;
-
   /**
    * Constructs a new PromotionListBuilder object.
    *
@@ -120,27 +99,11 @@ class PromotionListBuilder extends EntityListBuilder implements FormInterface {
     // Sort the entities using the entity class's sort() method.
     uasort($entities, [$this->entityType->getClass(), 'sort']);
     // Load the usage counts for each promotion.
-    $this->usageCounts += $this->usage->loadMultiple($entities);
+    $this->usageCounts = $this->usage->loadMultiple($entities);
 
     return $entities;
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  protected function getEntityIds() {
-    $query = $this->getStorage()->getQuery()
-      ->accessCheck(FALSE)
-      ->condition('status', $this->statusCondition)
-      ->sort($this->entityType->getKey('id'));
-
-    // Only add the pager if a limit is specified.
-    if ($this->limit) {
-      $query->pager($this->limit);
-    }
-    return $query->execute();
-  }
-
   /**
    * {@inheritdoc}
    */
@@ -169,11 +132,14 @@ class PromotionListBuilder extends EntityListBuilder implements FormInterface {
     $row['#attributes']['class'][] = 'draggable';
     $row['#weight'] = $entity->getWeight();
     $row['name'] = $entity->label();
+    if (!$entity->isEnabled()) {
+      $row['name'] .= ' (' . $this->t('Disabled') . ')';
+    }
     $row['usage'] = $current_usage . ' / ' . $usage_limit;
     $row['customer_limit'] = $customer_limit;
     $row['start_date'] = $entity->getStartDate()->format('M jS Y H:i:s');
     $row['end_date'] = $entity->getEndDate() ? $entity->getEndDate()->format('M jS Y H:i:s') : '—';
-    if ($this->hasTableDrag && $entity->isEnabled()) {
+    if ($this->hasTableDrag) {
       $row['weight'] = [
         '#type' => 'weight',
         '#title' => $this->t('Weight for @title', ['@title' => $entity->label()]),
@@ -191,7 +157,12 @@ class PromotionListBuilder extends EntityListBuilder implements FormInterface {
    */
   public function render() {
     $build = $this->formBuilder->getForm($this);
-    $build['#attached']['library'][] = 'commerce_promotion/admin_list';
+    // Only add the pager if a limit is specified.
+    if ($this->limit) {
+      $build['pager'] = [
+        '#type' => 'pager',
+      ];
+    }
 
     return $build;
   }
@@ -200,56 +171,23 @@ class PromotionListBuilder extends EntityListBuilder implements FormInterface {
    * {@inheritdoc}
    */
   public function buildForm(array $form, FormStateInterface $form_state) {
-    // Start by loading the enabled promotions.
-    $this->enabledEntities = $this->load();
-    if (count($this->enabledEntities) <= 1) {
+    $this->entities = $this->load();
+    if (count($this->entities) <= 1) {
       $this->hasTableDrag = FALSE;
     }
     $delta = 10;
     // Dynamically expand the allowed delta based on the number of entities.
-    $count = count($this->enabledEntities);
+    $count = count($this->entities);
     if ($count > 20) {
       $delta = ceil($count / 2);
     }
 
-    $table_header = $this->buildHeader();
-    $form['enabled_promotions'] = [
-      '#type' => 'table',
-      '#header' => $table_header,
-      '#empty' => $this->t('There are no enabled @label yet.', ['@label' => $this->entityType->getPluralLabel()]),
-      '#caption' => $this->t('Enabled'),
-    ];
-
-    // Only add the pager if a limit is specified.
-    if ($this->limit) {
-      $form['pager_enabled_promotions'] = [
-        '#type' => 'pager',
-        '#element' => 0,
-      ];
-    }
-
-    // Now load the disabled promotions.
-    $this->statusCondition = FALSE;
-    $this->disabledEntities = $this->load();
-    $form['disabled_promotions'] = [
+    $form['promotions'] = [
       '#type' => 'table',
-      // Table dragging is only enabled for enabled promotions, therefore,
-      // removing the "weight" header if present.
-      '#header' => array_diff_key($table_header, ['weight' => 'weight']),
-      '#empty' => $this->t('There are no disabled @label.', ['@label' => $this->entityType->getPluralLabel()]),
-      '#caption' => $this->t('Disabled'),
+      '#header' => $this->buildHeader(),
+      '#empty' => $this->t('There are no @label yet.', ['@label' => $this->entityType->getPluralLabel()]),
     ];
-
-    // Only add the pager if a limit is specified.
-    if ($this->limit) {
-      $form['pager_disabled_promotions'] = [
-        '#type' => 'pager',
-        '#element' => 1,
-      ];
-    }
-
-    $entities = array_merge($this->enabledEntities, $this->disabledEntities);
-    foreach ($entities as $entity) {
+    foreach ($this->entities as $entity) {
       $row = $this->buildRow($entity);
       $row['name'] = ['#markup' => $row['name']];
       $row['usage'] = ['#markup' => $row['usage']];
@@ -259,16 +197,11 @@ class PromotionListBuilder extends EntityListBuilder implements FormInterface {
       if (isset($row['weight'])) {
         $row['weight']['#delta'] = $delta;
       }
-      if ($entity->isEnabled()) {
-        $form['enabled_promotions'][$entity->id()] = $row;
-      }
-      else {
-        $form['disabled_promotions'][$entity->id()] = $row;
-      }
+      $form['promotions'][$entity->id()] = $row;
     }
 
     if ($this->hasTableDrag) {
-      $form['enabled_promotions']['#tabledrag'][] = [
+      $form['promotions']['#tabledrag'][] = [
         'action' => 'order',
         'relationship' => 'sibling',
         'group' => 'weight',
@@ -295,11 +228,11 @@ class PromotionListBuilder extends EntityListBuilder implements FormInterface {
    * {@inheritdoc}
    */
   public function submitForm(array &$form, FormStateInterface $form_state) {
-    foreach ($form_state->getValue('enabled_promotions') as $id => $value) {
-      if (isset($this->enabledEntities[$id]) && $this->enabledEntities[$id]->getWeight() != $value['weight']) {
+    foreach ($form_state->getValue('promotions') as $id => $value) {
+      if (isset($this->entities[$id]) && $this->entities[$id]->getWeight() != $value['weight']) {
         // Save entity only when its weight was changed.
-        $this->enabledEntities[$id]->setWeight($value['weight']);
-        $this->enabledEntities[$id]->save();
+        $this->entities[$id]->setWeight($value['weight']);
+        $this->entities[$id]->save();
       }
     }
   }
@@ -317,21 +250,6 @@ class PromotionListBuilder extends EntityListBuilder implements FormInterface {
           'commerce_promotion' => $entity->id(),
         ]),
       ];
-
-      if (!$entity->isEnabled() && $entity->hasLinkTemplate('enable-form')) {
-        $operations['enable'] = [
-          'title' => $this->t('Enable'),
-          'weight' => -10,
-          'url' => $this->ensureDestination($entity->toUrl('enable-form')),
-        ];
-      }
-      elseif ($entity->hasLinkTemplate('disable-form')) {
-        $operations['disable'] = [
-          'title' => $this->t('Disable'),
-          'weight' => 40,
-          'url' => $this->ensureDestination($entity->toUrl('disable-form')),
-        ];
-      }
     }
 
     return $operations;
diff --git a/modules/promotion/src/PromotionRouteProvider.php b/modules/promotion/src/PromotionRouteProvider.php
index 603d7c5b..142591bd 100644
--- a/modules/promotion/src/PromotionRouteProvider.php
+++ b/modules/promotion/src/PromotionRouteProvider.php
@@ -22,6 +22,11 @@ class PromotionRouteProvider extends AdminHtmlRouteProvider {
         $collection->add('entity.commerce_promotion.' . $operation . '_form', $form_route);
       }
     }
+    if ($entity_type->hasLinkTemplate('reorder')) {
+      $reorder_form_route = $this->getCollectionRoute($entity_type);
+      $reorder_form_route->setPath($entity_type->getLinkTemplate('reorder'));
+      $collection->add('entity.commerce_promotion.reorder', $reorder_form_route);
+    }
 
     return $collection;
   }
diff --git a/modules/promotion/src/PromotionViewsData.php b/modules/promotion/src/PromotionViewsData.php
index d9613273..9b9925ce 100644
--- a/modules/promotion/src/PromotionViewsData.php
+++ b/modules/promotion/src/PromotionViewsData.php
@@ -10,6 +10,22 @@ use Drupal\Core\Field\FieldDefinitionInterface;
  */
 class PromotionViewsData extends CommerceEntityViewsData {
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getViewsData() {
+    $data = parent::getViewsData();
+
+    // Use "enabled"/"disabled" rather than true/false for the promotion status.
+    $data_table = $this->tableMapping->getDataTable();
+    $data[$data_table]['status']['filter']['type'] = 'enabled-disabled';
+    // Expose the offer as a select list.
+    $data[$data_table]['offer__target_plugin_id']['filter']['id'] = 'list_field';
+    $data[$data_table]['offer__target_plugin_id']['argument']['id'] = 'string_list_field';
+
+    return $data;
+  }
+
   /**
    * {@inheritdoc}
    */
diff --git a/modules/promotion/tests/src/FunctionalJavascript/PromotionTest.php b/modules/promotion/tests/src/FunctionalJavascript/PromotionTest.php
index 1dfc69c2..d7af85c5 100644
--- a/modules/promotion/tests/src/FunctionalJavascript/PromotionTest.php
+++ b/modules/promotion/tests/src/FunctionalJavascript/PromotionTest.php
@@ -66,6 +66,7 @@ class PromotionTest extends CommerceWebDriverTestBase {
   protected function getAdministratorPermissions() {
     return array_merge([
       'administer commerce_promotion',
+      'access commerce_promotion overview',
     ], parent::getAdministratorPermissions());
   }
 
@@ -127,7 +128,7 @@ class PromotionTest extends CommerceWebDriverTestBase {
     $this->setRawFieldValue('start_date[0][value][time]', '10:30:00');
     $this->submitForm([], t('Save'));
     $this->assertSession()->pageTextContains("Saved the $name promotion.");
-    $rows = $this->getSession()->getPage()->findAll('xpath', '//table/tbody/tr/td[text()="' . $name . '"]');
+    $rows =  $this->getSession()->getPage()->findAll('xpath', "//table/tbody/tr/td[text()[contains(., '$name')]]");
     $this->assertCount(1, $rows);
 
     /** @var \Drupal\commerce_promotion\Entity\PromotionInterface $promotion */
@@ -260,7 +261,7 @@ class PromotionTest extends CommerceWebDriverTestBase {
     $this->submitForm($edit, t('Save'));
     $this->assertSession()->pageTextContains("Saved the $name promotion.");
 
-    $rows = $this->getSession()->getPage()->findAll('xpath', '//table/tbody/tr/td[text()="' . $name . '"]');
+    $rows =  $this->getSession()->getPage()->findAll('xpath', "//table/tbody/tr/td[text()[contains(., '$name')]]");
     $this->assertCount(1, $rows);
     /** @var \Drupal\commerce_promotion\Entity\PromotionInterface $promotion */
     $promotion = Promotion::load(1);
@@ -451,28 +452,6 @@ class PromotionTest extends CommerceWebDriverTestBase {
     $this->assertTrue($promotion->isEnabled());
   }
 
-  /**
-   * Tests viewing the admin/commerce/promotions page.
-   */
-  public function testAdminPromotions() {
-    /** @var \Drupal\commerce_promotion\Entity\PromotionInterface $promotion */
-    $promotion = $this->createEntity('commerce_promotion', [
-      'name' => $this->randomMachineName(8),
-    ]);
-    $this->drupalGet('admin/commerce/promotions');
-    $this->assertNotEmpty($this->getSession()->getPage()->hasLink('Add promotion'));
-    $this->assertSession()->pageTextNotContains('There are no enabled promotions yet.');
-    $this->assertSession()->pageTextContains('There are no disabled promotions.');
-    $this->assertTrue($this->getSession()->getPage()->hasLink('Disable'));
-    $this->assertFalse($this->getSession()->getPage()->hasLink('Enable'));
-    $this->assertTrue($this->getSession()->getPage()->hasLink('Delete'));
-    $this->drupalGet($promotion->toUrl('disable-form'));
-    $this->submitForm([], t('Disable'));
-    $this->assertSession()->pageTextContains('There are no enabled promotions yet.');
-    $this->assertSession()->pageTextNotContains('There are no disabled promotions.');
-    $this->assertTrue($this->getSession()->getPage()->hasLink('Enable'));
-  }
-
   /**
    * Tests creating a combination offer promotion.
    */
