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>

JavaScript

var pivot = new Flexmonster({
  container: "pivot-container",
  componentFolder: "https://cdn.flexmonster.com/",
  toolbar: true,
  report: {
    dataSource: {
      type: "api",
      url: pivotEndpoint,
      index: "fm-product-sales",
    },
    slice: {
      rows: [{
        uniqueName: "Country",
      }, {
        uniqueName: "City",
      }, {
        uniqueName: "Product code",
      }],
      columns: [{
        uniqueName: "[Measures]"
      }],
      measures: [{
          uniqueName: "Price",
          aggregation: "sum"
        },
        {
          uniqueName: "Unique customers",
          aggregation: "sum"
        }
      ]
    },
  }
});


function pivotEndpoint(request, successCallback, errorCallback) {
  request = JSON.parse(request);
  var result = null;
  if (request.type == "fields") {
    result = getSchema(request.index);
  } else if (request.type == "members") {
    result = getMembers(request.index, request.field, request.page);
  } else if (request.type == "select") {
    if (request.querytype == "expand") {
      result = getExpandedSelectResult(request.index, request.query, request.page);
    } else {
      result = getSelectResult(request.index, request.query, request.page);
    }
  }
  successCallback(result);
}

function getSchema(index) {
  return {
    fields: [{
        "uniqueName": "Country",
        "type": "string",
        "flagForUsers": true
      },
      {
        "uniqueName": "City",
        "type": "string",
        "flagForUsers": true
      },
      {
        "uniqueName": "Product code",
        "type": "string"
      },
      {
        "uniqueName": "Price",
        "type": "number"
      },
      {
        "uniqueName": "Unique customers",
        "type": "number"
      }
    ],
    aggregations: {
      "any": ["count", "distinctcount"],
      "date": ["count", "distinctcount", "min", "max"],
      "number": ["sum", "average", "count",
        "distinctcount", "min", "max"
      ]
    },
    filters: {
     ...