JSFiddle - React, Tailwind, and code Playground
by Flexmonster Pivot Table
HTML
<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/",
width: "100%",
height: 550,
toolbar: true,
report: {
dataSource: {
type: "api",
url: pivotEndpoint,
index: "fm-product-sales",
mapping: {
Category: {
hierarchy: "Item",
},
"Business Type": {
hierarchy: "Item",
parent: "Category",
},
},
},
slice: {
rows: [
{
uniqueName: "Item",
},
],
columns: [
{
uniqueName: "[Measures]",
},
],
measures: [
{
uniqueName: "Price",
aggregation: "sum",
},
],
drills: {
rows: [
{
tuple: ["item.[accessories]"],
},
],
},
},
},
});
function pivotEndpoint(requestStringified, successCallback, errorCallback) {
let request = JSON.parse(requestStringified);
var result = null;
if (request.type == "handshake") {
result = {
version: "2.8.22",
};
} else if (request.type == "fields") {
result = getFields();
} else if (request.type == "members") {
if (request.field.uniqueName == "Category") {
result = getCategories();
} else {
result = getBusinessTypes();
}
} else if (request.type == "select") {
console.log(request)
if (request.querytype == "select") {
result = getSelectResult();
} else if (request.querytype == "drillDown") {
result = getDrillDownResult();
}
}
successCallback(result);
}
function getFields() {
return {
fields: [
{ uniqueName: "Price", type: "number" },
{ uniqueName: "Category", type: "string" },
{ uniqueName: "Business Type", type: "string" },
{ uniqueName: "Discount", type: "number" },
{ uniqueName: "Quantity", type:...