JSFiddle - React, Tailwind, and code Playground
Data source
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>
<button onclick="getFields()">Get fields</button>
<div id="pivot-container"></div>
<div class="output" id="output">Output will appear here</div>
CSS
.output {
width: 80%;
height: 300px;
margin-left: auto;
margin-right: auto;
padding: 20px;
background: rgba(242, 242, 242, 1);
font-family: Menlo, Monaco, "Courier New", Courier, monospace;
white-space: pre-wrap;
font-size: 16px;
font-weight: 400;
overflow-y: scroll;
margin-top: 20px;
margin-bottom: 10px;
}
code {
font-size: 105%;
color: #DF3800;
background-color: #f5f5f5;
padding: 1px 4px;
font-family: monospace !important;
border-radius: 4px;
}
p {
font-size: 15px;
line-height: 1.5;
padding-right: 10px;
padding-left: 10px;
}
a {
color: #00a45a;
text-decoration: none;
}
JavaScript
const pivot = new Flexmonster({
container: "pivot-container",
componentFolder: "https://cdn.flexmonster.com/",
toolbar: true,
report: {
options: {
configuratorActive: true,
},
dataSource: {
data: getData(),
},
},
})
let isFieldsListOpen = false
pivot.on("fieldslistopen", () => {
isFieldsListOpen = true
})
pivot.on("fieldslistclose", () => {
isFieldsListOpen = false
})
function getFields() {
if (isFieldsListOpen) {
let slice = {
rows: [],
columns: [],
reportFilters: [],
measures: [],
}
document
.querySelectorAll(".fm-lst-rows li")
.forEach((item) => slice.rows.push(item.innerText))
document
.querySelectorAll(".fm-lst-columns li")
.forEach((item) => slice.columns.push(item.innerText))
document
.querySelectorAll(".fm-lst-measures li")
.forEach((item) => slice.measures.push(item.innerText))
document
.querySelectorAll(".fm-lst-pages li")
.forEach((item) => slice.reportFilters.push(item.innerText))
showOutput(JSON.stringify(slice))
}
}
//Print fields
let outputInitialized = false
function showOutput(content) {
var log = "[" + new Date().toLocaleTimeString("en-US") + "] " + content
var outputElement = document.getElementById("output")
if (!outputInitialized) {
outputElement.innerText = ""
outputInitialized = true
}
outputElement.innerText += log + "\n"
outputElement.scrollTop = outputElement.scrollHeight
}
//JSON dataset
function getData() {
return [
{
Color: "green",
Country: "Canada",
State: "Ontario",
City: "Toronto",
Price: 174,
Quantity: 22,
},
{
Color: "red",
Country: "USA",
State: "California",
City: "Los Angeles",
Price: 166,
Quantity: 19,
},
{
Color: "blue",
Country: "USA",
State: "Florida",
City: "Tallahassee",
Price: 215,
Quantity: 25,
},
{
Color:...