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
let endpointUrl = "https://olap.flexmonster.com:9500/";
let index = "fm-product-sales";
var pivot = new Flexmonster({
container: "#pivot-container",
componentFolder: "https://cdn.flexmonster.com/",
width: "100%",
height: 550,
toolbar: true,
report: {
"dataSource": {
"type": "api",
"url": pivotEndpoint,
"index": index
},
slice: {
reportFilters: [{
uniqueName: "Color",
filter: {
members: ["green"]
}
}, {
uniqueName: "Destination",
filter: {
members: ["Australia"]
}
}, {
uniqueName: "Country",
filter: {
members: ["Germany"]
}
}],
rows: [{
uniqueName: "Category"
}],
columns: [{
uniqueName: "[Measures]"
}],
measures: [{
uniqueName: "Price",
aggregation: "sum"
}]
}
}
});
function pivotEndpoint(requestStringified, successCallback, errorCallback) {
let request = JSON.parse(requestStringified);
// Construct the request:
const fmRequest = new Request(endpointUrl + request.type, {
method: "POST",
headers: {
'Content-Type': 'application/json',
'Data-Type': 'json'
},
body: requestStringified
});
// Send the request and handle the response:
fetch(fmRequest)
.then(response => {
if (!response.ok) {
throw new Error('Network response was not OK');
}
return response.json();
})
.then(JSONResponse => {
// Pass the response to Flexmonster:
successCallback(JSONResponse);
// Handle empty data:
if ((JSONResponse.aggs && JSONResponse.aggs.length === 0) ||
(JSONResponse.hits && JSONResponse.hits.length === 0)) {
handleEmptyData();
}
})
.catch(error => {
// Notify Flexmonster about the error:
errorCallback(error);
});
}
function handleEmptyData() {
pivot.alert({
title: "No data found",
...