Skip to content

Product Listing Overview – Mobile

Atomic Design

Level: Organism · Atomic Design methodology

The mobile variant displays the Product Listing Overview in a vertical stacked layout where filters are hidden inside a slide-out drawer overlay, optimized for screens under 1024px width.

The Mobile Product Listing Overview variant handles the category browsing and searching experience for touch-focused mobile and tablet devices. Due to restricted screen width, it hides the complex filter menu behind a floating trigger button. Clicking the trigger opens a full-screen slide-over drawer containing the accordions.

For the general composition and the default desktop variant, see the Product Listing Overview index.


Composition

Used inside: Category Page Template · Search Results Page Template

Composed of: Product Card Molecule · Filter Block (Refinement List · Rangeslider · Size selection · Color selection · Clearrefinement inside slide-out drawer) · Toolbar Block (Sortby · Pagination)


Preview

Product Listing Overview – Mobile Viewport Preview

The mobile view of the PLP layout showing the vertical scroll layout and the filter drawer trigger button.

Product Listing Overview – Mobile Filter Drawer Preview

Close-up of the mobile slide-out filter drawer overlay containing refinement options and the results confirmation button.


Props

Top-level props (Mobile Overrides)

Prop Type Required Description
products Product[] Yes Array of product data records matching active filters to populate the grid (usually rendered in a 2-column flex layout)
filters FilterGroup[] Yes List of available filter groups for rendering inside the slide-out drawer
activeFilters Record<string, string[]> Yes Key-value mapping of active filter groups and selected options
isFilterDrawerOpen boolean Yes Controls the visibility of the slide-over filter drawer
activeFiltersCount number Yes Total count of all selected checkbox values (drives the floating badge count)
hitsPerPage number Yes Number of products displayed per page (inherited from parent Toolbar config)
pagination PaginationData Yes Pagination state details

Visual States

State Condition Visual effect
Filter Drawer Open isFilterDrawerOpen: true The filter drawer slides in from the right edge. A dark semi-transparent overlay (50% opacity backdrop) covers the background grid.
Sticky Action Bar Scrolling down the product grid A floating toolbar containing the "Filter" trigger and the active filter badge sticks to the bottom or top of the viewport.
Scroll Lock Active isFilterDrawerOpen: true The body element gets overflow: hidden applied to prevent background page scrolling while interacting with the filter drawer.
Grid Column Adapt Screen width < 480px The product grid columns automatically switch from 2 columns to a single vertical card stack.

Behaviour

Slide Drawer Interactivity

The filter drawer is built with native touch gestures in mind. Swiping right from the left edge of the drawer panel triggers a close transition, sliding the menu back off the screen.

Instantly Applied vs. Batched Filters

Unlike the desktop default view which applies filters instantly on checkbox click, the mobile drawer batches filter selections. Checking boxes updates the internal state and shows a count, but the API request is only triggered when the user clicks the "Bekijk resultaten" (View results) confirmation button at the bottom of the drawer.

Sticky Drawer Headers

To maintain clear navigation within long filter lists, the drawer header (containing the "Close" and "Reset filters" buttons) remains sticky at the top, and the confirmation button remains sticky at the bottom, while the middle accordions scroll vertically.


Example

Full example JSON
{
  "products": [
    {
      "id": "scarpa-ribelle-run-gtx",
      "name": "Scarpa Ribelle Run GTX",
      "category": "Trailrunning schoenen",
      "inWishlist": true,
      "inCompare": false,
      "price": {
        "currency": "EUR",
        "symbol": "€",
        "regular": 249.95,
        "sale": 224.95
      },
      "spec": {
        "type": "weight",
        "value": 180,
        "unit": "gr",
        "icon": null
      },
      "stock": {
        "available": true,
        "label": "Op voorraad"
      },
      "variants": [
        {
          "id": "forest-green",
          "color": "#4A7C59",
          "label": "Forest Green",
          "active": true,
          "images": [
            {
              "src": "/images/scarpa-ribelle-run-gtx-forest-green-1.jpg",
              "alt": "Scarpa Ribelle Run GTX – Forest Green"
            }
          ]
        }
      ]
    }
  ],
  "filters": [
    {
      "id": "soorten",
      "name": "Soorten",
      "type": "list",
      "collapsed": false,
      "options": [
        { "value": "lage-wandelschoenen", "label": "Lage wandelschoenen", "count": 458 },
        { "value": "trailrunning-schoenen", "label": "Trailrunning schoenen", "count": 58 }
      ]
    }
  ],
  "activeFilters": {
    "soorten": ["trailrunning-schoenen"]
  },
  "activeFiltersCount": 1,
  "isFilterDrawerOpen": true,
  "hitsPerPage": 24,
  "pagination": {
    "currentPage": 1,
    "totalPages": 3,
    "totalItems": 58,
    "itemsPerPage": 24
  }
}