Table of Contents
npm install -g react-cli react Step 1.2 To install the create-react-app modules for React globally, execute the command given below on the command line: npm install -g create-react-app Step 1.3.1 From the cmd shell, navigate to the directory where you want to save your project. Step 1.3.2 To create the project skeleton, execute the following command on the command line: create-react-app my-app Step 1.4 To install FusionCharts on your system, execute the command given below: npm install fusioncharts --save Step 1.5 To install the React-FusionCharts plugin, execute the command given below: npm install react-fusioncharts --save app.js file: import fusioncharts from 'fusioncharts'; import charts from 'fusioncharts/fusioncharts.charts'; import ReactFC from 'react-fusioncharts'; import theme from 'fusioncharts/themes/fusioncharts.theme.fint';To pass these files as dependencies, use the code snippet given below:
charts(fusioncharts) theme(fusioncharts)
function grabUsers(query) {
const promises = [];
let i = 1;
for(; i<=12; i++) {
const promise = fetch("https://api.github.com/graphql", {
method: "POST",
async: false,
headers: {
"Authorization": 'bearer d23e97911c0554fe8e1e13010cea0e7e85580781',
"Content-Type": 'application/json'
},
body: JSON.stringify({
query: `
{
search(type: USER, query: "created:<2017-${i < 10 ? ('0' + i) : i + ''}-01 ${query}") {
userCount
}
}
`
})
})
.then((r) => r.json())
promises.push(promise);
}
return Promise.all(promises);
}
Click here to read more about the JavaScript Fetch API. function generateChartConfig(data,chartAttr,chartType){
const monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
];
const chartData = data.map((d, i) => {
return {
label: monthNames[i],
value: d.data.search.userCount
};
});
const dataSource = {
"chart": chartAttr,
"data": chartData
};
var revenueChartConfigs = {
type: chartType,
width:800,
height: 400,
dataFormat: 'json',
dataSource: dataSource
};
return revenueChartConfigs;
}
class App extends Component {
constructor(props) {
super(props);
this.state = {
msg: "Loading....."
};
render() {
return (
// code to be written
);
}
}
}
Next, to load the chart data from the methods defined above, we will call the componentDidMount() method from the component life cycle using the code given below: componentDidMount(){
grabUsers("")
.then((data) => {
var chartConfig= generateChartConfig(data,{
"caption":"GitHub Users - 2017",
"captionfontsize":"20",
"theme":"fint",
"logoURL":"https://19386-presscdn-pagely.netdna-ssl.com/wp-content/uploads/2017/10/github-logo-1.png",
"logoAlpha": "80",
"logoScale": "8",
"canvastopmargin":"75",
"logoPosition": "TR",
"logoleftmargin":"-20",
"logotopmargin":"10",
"yaxisminvalue":"12000000"
},"column2d");
ReactDOM.unmountComponentAtNode(document.getElementById('chart-viewer'));
ReactDOM.render(<ReactFC {...chartConfig} />, document.getElementById('chart-viewer'));
//ReactDOM.render(<radio/> , document.getElementById('radio'));
})
.catch((err) => {
console.log(err);
this.setState({
msg: String(err)
});
});
}
Click here to know more about the componentDidMount() method: Finally, to render the chart, we will create the chart container inside the render() method using the <div> element as shown in the code below: render() {
return (
<div>
<div id="chart-viewer">
{this.state.msg}
</div>
);
}
render() {
return (
<div>
<div id="chart-viewer">
{this.state.msg}
</div>
<br />
<div id="radio" onChange= {this.setlang.bind(this)}>
<label id="container">Java
<input type="radio" value="java" name="lang" />
<span id="checkmark"></span>
</label>
<label id="container">C
<input type="radio" value="C" name="lang" />
<span id="checkmark"></span>
</label>
<label id="container">C++
<input type="radio" value="cplus" name="lang" />
<span id="checkmark"></span>
</label>
<label id="container">JavaScript
<input type="radio" value="javascript" name="lang" />
<span id="checkmark"></span>
</label>
<label id="container">All
<input type="radio" value="all" name="lang" defaultChecked="true"/>
<span id="checkmark"></span>
</label>
</div>
</div>
);
}
The above code will render simple radio buttons. You can customize the radio buttons’ cosmetics according to your requirements using an external CSS file. setlang(event) {
console.log(event.target.value);
if(event.target.value==="java"){
console.log("Hi I am on Java");
grabUsers("language:java")
.then((data) => {
var chartConfig= generateChartConfig(data,{
"caption":"Java Users - 2017",
"captionfontsize":"20",
"theme":"fint",
"logoURL":"https://19386-presscdn-pagely.netdna-ssl.com/wp-content/uploads/2017/10/github-logo-1.png",
"logoAlpha": "80",
"logoScale": "8",
"canvastopmargin":"75",
"logoPosition": "TR",
"logoleftmargin":"-20",
"logotopmargin":"10",
"yaxisminvalue":"1000000"
},"column2d");
ReactDOM.unmountComponentAtNode(document.getElementById('chart-viewer'));
ReactDOM.render(<ReactFC {...chartConfig} />, document.getElementById('chart-viewer'));
//ReactDOM.render(<radio/> , document.getElementById('radio'));
})
.catch((err) => {
console.log(err);
this.setState({
msg: String(err)
});
});
}
else if (event.target.value==="C"){
console.log("Hi I am on C");
grabUsers("language:C")
.then((data) => {
var chartConfig= generateChartConfig(data,{
"caption":"C Users - 2017",
"captionfontsize":"20",
"theme":"fint",
"logoURL":"https://19386-presscdn-pagely.netdna-ssl.com/wp-content/uploads/2017/10/github-logo-1.png",
"logoAlpha": "80",
"logoScale": "8",
"canvastopmargin":"75",
// "valueFontColor":"#000000",
"logoPosition": "TR",
"logoleftmargin":"-20",
"logotopmargin":"10",
"yaxisminvalue":"245000",
"plotfillalpha":"90",
},"column2d");
ReactDOM.unmountComponentAtNode(document.getElementById('chart-viewer'));
ReactDOM.render(<ReactFC {...chartConfig} />, document.getElementById('chart-viewer'));
//ReactDOM.render(<radio/> , document.getElementById('radio'));
})
.catch((err) => {
console.log(err);
this.setState({
msg: String(err)
});
});
}
else if(event.target.value==="cplus"){
console.log("Hi I am on C++")
grabUsers("language:C++")
.then((data) => {
var chartConfig= generateChartConfig(data,{
"caption":"C++ Users - 2017",
"captionfontsize":"20",
"theme":"fint",
"logoURL":"https://19386-presscdn-pagely.netdna-ssl.com/wp-content/uploads/2017/10/github-logo-1.png",
"logoAlpha": "80",
"logoScale": "8",
"canvastopmargin":"75",
// "valueFontColor":"#000000",
"logoPosition": "TR",
"logoleftmargin":"-20",
"logotopmargin":"10",
"yaxisminvalue":"350000"
},"column2d");
ReactDOM.unmountComponentAtNode(document.getElementById('chart-viewer'));
ReactDOM.render(<ReactFC {...chartConfig} />, document.getElementById('chart-viewer'));
//ReactDOM.render(<radio/> , document.getElementById('radio'));
})
.catch((err) => {
console.log(err);
this.setState({
msg: String(err)
});
});
}
else if (event.target.value==="javascript"){
console.log("Hi I am on JavaScript")
grabUsers("language:JavaScript")
.then((data) => {
var chartConfig= generateChartConfig(data,{
"caption":"JavaScript Users - 2017",
"captionfontsize":"20",
"subCaption":"Of 2017",
"theme":"fint",
"logoURL":"https://19386-presscdn-pagely.netdna-ssl.com/wp-content/uploads/2017/10/github-logo-1.png",
"logoAlpha": "80",
"logoScale": "8",
"canvastopmargin":"75",
// "valueFontColor":"#000000",
"logoPosition": "TR",
"logoleftmargin":"-20",
"logotopmargin":"10",
"yaxisminvalue":"1200000"
},"column2d");
ReactDOM.unmountComponentAtNode(document.getElementById('chart-viewer'));
ReactDOM.render(<ReactFC {...chartConfig} />, document.getElementById('chart-viewer'));
//ReactDOM.render(<radio/> , document.getElementById('radio'));
})
.catch((err) => {
console.log(err);
this.setState({
msg: String(err)
});
});
}
else{
grabUsers("")
.then((data) => {
var chartConfig= generateChartConfig(data,{
"caption":"GitHub Users - 2017",
"captionfontsize":"20",
"theme":"fint",
"logoURL":"https://19386-presscdn-pagely.netdna-ssl.com/wp-content/uploads/2017/10/github-logo-1.png",
"logoAlpha": "80",
"logoScale": "8",
"canvastopmargin":"75",
"logoPosition": "TR",
"logoleftmargin":"-20",
"logotopmargin":"10",
"yaxisminvalue":"12000000"
},"column2d");
ReactDOM.unmountComponentAtNode(document.getElementById('chart-viewer'));
ReactDOM.render(<ReactFC {...chartConfig} />, document.getElementById('chart-viewer'));
//ReactDOM.render(<radio/> , document.getElementById('radio'));
})
.catch((err) => {
console.log(err);
this.setState({
msg: String(err)
});
});
}
}
And that’s it! The dashboard is complete. npm start. Doing this will start the server. If everything has been done as explained in the steps above, then this is how your dashboard will render. You can try the live example here. To create pie charts and generate statistical data, you’ll find this list of the best…
To implement FusionCharts in a dynamically resizing flexbox layout, ensure that the chart's dimensions are…
At FusionCharts, we believe in empowering developers and businesses with cutting-edge data visualization tools that…
Ever had a data set that seemed more complicated than a Rubik's cube? You’re not…
We’ve all seen them in textbooks or presentations—those overlapping circles that simplify complex information into…
We’re excited to announce the upcoming release of FusionCharts v4.1—a groundbreaking step forward in the…