JSFiddle - React, Tailwind, and code Playground

HTML

<link rel="stylesheet" href="https://s3.amazonaws.com/flexmonster/2.3/demo.css">
<script src="https://cdn.flexmonster.com/flexmonster.js"></script>
<div>
	<button onclick="refreshCustomData()">Refresh Custom DataSource</button>
</div>
<div id="pivot-container"></div>

JavaScript

let pivot = new Flexmonster({
  container: "pivot-container",
  componentFolder: "https://cdn.flexmonster.com/",

  height: 400,
  report: {
    "dataSource": {
      "type": "api",
      "url": pivotEndpoint,
      "index": "any"
    },
    "slice": {
      "rows": [{
          "uniqueName": "Color",

        },
        {
          "uniqueName": "[Measures]"
        }
      ],
      "columns": [{
        "uniqueName": "Country",

      }],
      "measures": [{
        "uniqueName": "Price",
        "aggregation": "sum"
      }]
    },
      options: {
                            grid: {
                                    title: "Plano",
                                    showHeaders: false,
                                    type: "classic",
                                    showGrandTotals: "off",
                                    //grandTotalsPosition: "top",
                                    showHierarchies: false,
                                    showHierarchyCaptions: true,
                                    //tem que desligar o filtro, pois se o usuários filtrar multiplas posições, o motar de cálculo tem que conseguir calcular múltolas posições de uma só vez
                                    showFilter: false
                                    //showTotals: "columns"
                                },
                            configuratorButton: false,
                            showAggregationLabels: false,
                            caseSensitiveMembers: true,
                            drillThrough: false,
                            showDrillThroughConfigurator: false,
                            //fieldListPosition: "right",
                            showEmptyValues: true,
                            //defaultHierarchySortName: "unsorted",
                            allowBrowsersCache: false
                }
  }
});

function pivotEndpoint(request, successCallback, errorCallback) {
  request = JSON.parse(request);
  var...