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
var pivot = new Flexmonster({
container: "pivot-container",
componentFolder: "https://cdn.flexmonster.com/",
toolbar: true,
report: {
dataSource: {
type: "api",
url: pivotEndpoint,
index: "fm-product-sales",
},
slice: {
rows: [{
uniqueName: "Country",
}, {
uniqueName: "City",
}, {
uniqueName: "Product code",
}],
columns: [{
uniqueName: "[Measures]"
}],
measures: [{
uniqueName: "Price",
aggregation: "sum"
},
{
uniqueName: "Unique customers",
aggregation: "sum"
}
]
},
}
});
function pivotEndpoint(request, successCallback, errorCallback) {
request = JSON.parse(request);
var result = null;
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") {
if (request.querytype == "expand") {
result = getExpandedSelectResult(request.index, request.query, request.page);
} else {
result = getSelectResult(request.index, request.query, request.page);
}
}
successCallback(result);
}
function getSchema(index) {
return {
fields: [{
"uniqueName": "Country",
"type": "string",
"flagForUsers": true
},
{
"uniqueName": "City",
"type": "string",
"flagForUsers": true
},
{
"uniqueName": "Product code",
"type": "string"
},
{
"uniqueName": "Price",
"type": "number"
},
{
"uniqueName": "Unique customers",
"type": "number"
}
],
aggregations: {
"any": ["count", "distinctcount"],
"date": ["count", "distinctcount", "min", "max"],
"number": ["sum", "average", "count",
"distinctcount", "min", "max"
]
},
filters: {
...