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);
$.ajax({
type: "POST",
url: endpointUrl + request.type,
data: requestStringified,
success: response => {
// Pass the response to Flexmonster:
successCallback(response);
// Handle empty data:
if ((response.aggs && response.aggs.length === 0) ||
(response.hits && response.hits.length === 0)) {
handleEmptyData();
}
},
error: error => {
// Notify Flexmonster about the error:
errorCallback(error);
},
dataType: "json",
contentType: "application/json"
});
}
function handleEmptyData() {
pivot.alert({
title: "No data found",
message: "No data is available for the selected filters.",
type: "info",
blocking: false
});
}