JSFiddle - React, Tailwind, and code Playground

by Flexmonster Pivot Table

HTML

<link rel="stylesheet" href="https://s3.amazonaws.com/flexmonster/2.3/demo.css">
<script src="https://cdn.flexmonster.com/flexmonster.js"></script>

<div id="pivot-container"></div>

CSS

/* #pivot-container .fm-scroll-pane{
  overflow: hidden !important;
} */

JavaScript

let preFilterScrollState;

let pivot = new Flexmonster({
  container: "pivot-container",
  componentFolder: "https://cdn.flexmonster.com/",
  width: "100%",
  toolbar: true,
  height: 430,
  filteropen: (params) => {
    preFilterScrollState = document.querySelector("#pivot-container .fm-scroll-pane").scrollLeft;
  },
  filterclose: () => {
    setTimeout(() => {
      document.querySelector("#pivot-container .fm-scroll-pane").scroll({
        left: preFilterScrollState
      })
    }, 50)
  },
  report: {
    dataSource: {
      "type": "api",
      "url": "https://olap.flexmonster.com:9500",
      "index": "fm-product-sales"
    },
    options: {
      grid: {
        type: "flat"
      }
    },
    slice: {
      "rows": [{
          "uniqueName": "Category"
        },
        {
          "uniqueName": "Size"
        },
        {
          "uniqueName": "Color"
        },
        {
          "uniqueName": "Destination"
        },
        {
          "uniqueName": "Business Type"
        },
        {
          "uniqueName": "Country"
        }
      ],
      "columns": [{
        "uniqueName": "[Measures]"
      }],
      "measures": [{
          "uniqueName": "Price",
          "aggregation": "sum"
        },
        {
          "uniqueName": "Quantity",
          "aggregation": "sum"
        },
        {
          "uniqueName": "Discount",
          "aggregation": "sum"
        }
      ],
      "flatOrder": [
        "Category",
        "Size",
        "Color",
        "Destination",
        "Business Type",
        "Country",
        "Price",
        "Quantity",
        "Discount"
      ]
    }
  }
});