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 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"
}]
},
}
});
function pivotEndpoint(request, successCallback, errorCallback) {
request = JSON.parse(request);
var result = null;
if (request.type == "handshake") {} else 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") {
result = getSelectResult(request.index, request.query, request.page);
} else {
errorCallback("Request type " + request.type + " is not implemented.");
}
successCallback(result);
}
function getSchema(index) {
return {
"fields": [{
"uniqueName": "Color",
"type": "string"
}, {
"uniqueName": "Country",
"type": "string"
}, {
"uniqueName": "Price",
"type": "number"
}, ],
"aggregations": {
"any": ["count", "distinctcount"],
"date": ["count", "distinctcount", "min", "max"],
"number": ["sum", "average", "count", "distinctcount", "min", "max"]
},
"filters": {
"number": {
"members": true,
},
"advanced": true
},
"sorted": false
}
}
function getMembers(index, field, page) {
if (field.uniqueName == "Country") {
return {
"members": [{
"value": "Australia"
}, {
"value": "Canada"
}],
"sorted": false,
"page": 0,
"pageTotal": 1
}
}
if (field.uniqueName ==...