mirror of
https://github.com/ToolJet/ToolJet
synced 2026-04-27 08:27:23 +00:00
* add custom resolvers info and editable row selection info (#9057) * fix system requirements icon * add auth info for webhooks and fix casing * add regex custom validation info (#9068) * [docs]: Marketplace 1.7 updates (#9085) * [docs] Amazon redshift plugin * make minor improvements * add and update docs for marketplace 1.7 * update order of plugins in overview to match sidebar * create new version --------- Co-authored-by: Shubhendra <withshubh@gmail.com> * add the latest version in the versions.json file (#9094) * [docs]: Update PDF component (#9088) * update PDF component * merged with develop and added changes to the new version * update docs favicon: (#9118) * [docs] SSO revamp (#9031) * add method to set default language * update image settings through custom css and update screenshots for getting started and tooljet concepts (#9158) * fix read documentation button * fix formatting for setup icons (#9172) * fix sidebar link for aws lambda * Update static media (#9175) * updated the screenshots * reduced the gif size * reverted the package.json file * edited the zoomed in images and replaced some gifs with screenshots * removed one gif * update static media * update file names * update toolbar * fix file names * fix: dynamodb img path * update media for org management dashboard * fix: casing and formatting * update workspace constant media * update media in workspace settings and github * update github sso * minor change to github sso docs * minor fix * update google sso * change includeCurrentVersion flag to false --------- Co-authored-by: Asjad Ahmed Khan <iitasjad2001@gmail.com> Co-authored-by: Asjad Ahmed Khan <60435499+2001asjad@users.noreply.github.com> Co-authored-by: Karan Rathod <karan.altcampus@gmail.com> * Feature: Engagespot plugin (#9012) * feat(plugins): added engagespot plugin * feat(docs): added engagespot plugin docs * chore(engagespot-plugin): revised copywritings * Feature: Databricks data source (#9174) * plugin-created * Databricks integration * icon, error handling * removed unrelated changes from marketplace and frontend package-lock.json removed runAsync and maxRows timeouts pending * timeout implementation * socket timeout and error handling * resolve comments * resolve comments2 * solved render issue test connection improvements * solved undefined error * fix TJDB not null value fail for is operation (#9055) * fix TJDB not null value fail for is operation * handling not null and null case insenstive values * Support for marketplace plugin deploy on render preview app (#9221) * Fix for marketplace error on render preview app * add marketplace build command * Adding new workflow for building marketplace plugin * removed render app creation * [:docs] Add documentation for Databricks plugin (#9224) * add docs for databricks * update databricks docs * update docs * remove ref to clusters * bump to v2.34.0 * Fixed data source cypress failure (#9227) * updated spec with required text * updated mongodb and import spec * updated import spec --------- Co-authored-by: Karan Rathod <karan.altcampus@gmail.com> Co-authored-by: Adish M <44204658+adishM98@users.noreply.github.com> Co-authored-by: Midhun G S <gsmithun4@gmail.com> Co-authored-by: Shubhendra <withshubh@gmail.com> Co-authored-by: Aman Regu <amanregu@gmail.com> Co-authored-by: Asjad Ahmed Khan <iitasjad2001@gmail.com> Co-authored-by: Asjad Ahmed Khan <60435499+2001asjad@users.noreply.github.com> Co-authored-by: Jobin Jose <129726530+jobin-logidots@users.noreply.github.com> Co-authored-by: Syed Mohammad Akhtar Rizvi <85864291+ShazanRizvi@users.noreply.github.com> Co-authored-by: blank0537 <111295371+blank0537@users.noreply.github.com> Co-authored-by: Mekhla Asopa <59684099+Mekhla-Asopa@users.noreply.github.com>
277 lines
No EOL
8.2 KiB
Markdown
277 lines
No EOL
8.2 KiB
Markdown
---
|
|
id: use-events-on-chart
|
|
title: Use Events on Chart
|
|
---
|
|
|
|
Currently, the chart component does not support events. However, you can use the Custom Component to create a chart using a third-party library that supports events. Plotly is one of the libraries that supports events. In this tutorial, we will build a chart using Plotly and add events to it.
|
|
|
|
<div style={{textAlign: 'center'}}>
|
|
<img style={{ border:'0'}} className="screenshot-full" src="/img/how-to/events-chart/plotly-chart.png" alt="Plotly Chart" />
|
|
</div>
|
|
|
|
## Step 1: Add a Custom Component
|
|
|
|
Open the App Builder and add a Custom Component to the page. Then, click on the Custom Component to open the Properties panel.
|
|
|
|
Note: If you are not familiar with the Custom Component, please read the [Custom Component](/docs/widgets/custom-component/) doc.
|
|
|
|
## Step 2: Add the code to the Custom Component
|
|
|
|
```js
|
|
import React from 'https://cdn.skypack.dev/react';
|
|
import ReactDOM from 'https://cdn.skypack.dev/react-dom';
|
|
import { Button, Container } from 'https://cdn.skypack.dev/@material-ui/core';
|
|
import Plotly from 'https://cdn.skypack.dev/plotly.js-basic-dist-min';
|
|
import createPlotlyComponent from 'https://cdn.skypack.dev/react-plotly.js/factory';
|
|
|
|
const MyCustomComponent = ({data, updateData, runQuery}) => {
|
|
const Plot = createPlotlyComponent(Plotly);
|
|
|
|
const barOnClick = ({points}) => {
|
|
alert('A bar is clicked')
|
|
}
|
|
return (
|
|
<Container>
|
|
<Plot data={[
|
|
{
|
|
"name": "Inbound",
|
|
"type": "bar",
|
|
"x": [
|
|
20,
|
|
14,
|
|
23,
|
|
22,
|
|
30,
|
|
12,
|
|
15,
|
|
26,
|
|
31,
|
|
16,
|
|
18,
|
|
29
|
|
],
|
|
"y": [
|
|
"Jan",
|
|
"Feb",
|
|
"Mar",
|
|
"Apr",
|
|
"May",
|
|
"Jun",
|
|
"Jul",
|
|
"Aug",
|
|
"Sep",
|
|
"Oct",
|
|
"Nov",
|
|
"Dec"
|
|
],
|
|
"marker": {
|
|
"line": {
|
|
"color": "rgba(55, 128, 191, 1.0)",
|
|
"width": 1
|
|
},
|
|
"color": "rgba(55, 128, 191, 0.6)"
|
|
},
|
|
"orientation": "h"
|
|
},
|
|
{
|
|
"name": "Outbound",
|
|
"type": "bar",
|
|
"x": [
|
|
12,
|
|
18,
|
|
29,
|
|
22,
|
|
14,
|
|
23,
|
|
15,
|
|
23,
|
|
26,
|
|
13,
|
|
27,
|
|
12
|
|
],
|
|
"y": [
|
|
"Jan",
|
|
"Feb",
|
|
"Mar",
|
|
"Apr",
|
|
"May",
|
|
"Jun",
|
|
"Jul",
|
|
"Aug",
|
|
"Sep",
|
|
"Oct",
|
|
"Nov",
|
|
"Dec"
|
|
],
|
|
"marker": {
|
|
"line": {
|
|
"color": "rgba(255, 153, 51, 1.0)",
|
|
"width": 1
|
|
},
|
|
"color": "rgba(255, 153, 51, 0.6)"
|
|
},
|
|
"orientation": "h"
|
|
}
|
|
]}
|
|
layout={{
|
|
width: 840,
|
|
height: 800,
|
|
title: "Tickets Resolved: Inbound & Outbound",
|
|
showlegend: false,
|
|
}}
|
|
onClick={barOnClick}
|
|
/>
|
|
</Container>
|
|
)}
|
|
const ConnectedComponent = Tooljet.connectComponent(MyCustomComponent);
|
|
ReactDOM.render(<ConnectedComponent />, document.body);
|
|
```
|
|
|
|
Let's understand the code above in detail. First, we imported the required libraries.
|
|
|
|
```js
|
|
import React from 'https://cdn.skypack.dev/react'; // React library
|
|
import ReactDOM from 'https://cdn.skypack.dev/react-dom'; // React DOM library
|
|
import { Button, Container } from 'https://cdn.skypack.dev/@material-ui/core'; // Material UI library
|
|
import Plotly from 'https://cdn.skypack.dev/plotly.js-basic-dist-min'; // Plotly library
|
|
import createPlotlyComponent from 'https://cdn.skypack.dev/react-plotly.js/factory'; // Plotly React library
|
|
```
|
|
|
|
|
|
Then, we created a function component called `MyCustomComponent`. This component will render the chart. We use the `createPlotlyComponent` function to create a Plotly component. Then, we create a function called `barOnClick` that will be called when the user clicks on the bar. This function will display an alert message.
|
|
|
|
```js
|
|
const MyCustomComponent = ({data, updateData, runQuery}) => { // function component
|
|
const Plot = createPlotlyComponent(Plotly); // create a Plotly component
|
|
|
|
const barOnClick = ({points}) => { // function that will be called when the user clicks on the bar
|
|
alert('A bar is clicked') // display an alert message
|
|
}
|
|
```
|
|
|
|
Next, we render the chart using the `Plot` component. We pass the data and layout to the `Plot` component. We also pass the `barOnClick` function to the `onClick` prop of the `Plot` component.
|
|
|
|
```js
|
|
return ( // return the Plot component
|
|
<Container> // Material UI Container component
|
|
<Plot data={[ // Plot component
|
|
{ // data for the first bar
|
|
"name": "Inbound",
|
|
"type": "bar",
|
|
"x": [
|
|
20,
|
|
14,
|
|
23,
|
|
22,
|
|
30,
|
|
12,
|
|
15,
|
|
26,
|
|
31,
|
|
16,
|
|
18,
|
|
29
|
|
],
|
|
"y": [
|
|
"Jan",
|
|
"Feb",
|
|
"Mar",
|
|
"Apr",
|
|
"May",
|
|
"Jun",
|
|
"Jul",
|
|
"Aug",
|
|
"Sep",
|
|
"Oct",
|
|
"Nov",
|
|
"Dec"
|
|
],
|
|
"marker": {
|
|
"line": {
|
|
"color": "rgba(55, 128, 191, 1.0)",
|
|
"width": 1
|
|
},
|
|
"color": "rgba(55, 128, 191, 0.6)"
|
|
},
|
|
"orientation": "h"
|
|
},
|
|
{ // data for the second bar
|
|
"name": "Outbound",
|
|
"type": "bar",
|
|
"x": [
|
|
12,
|
|
18,
|
|
29,
|
|
22,
|
|
14,
|
|
23,
|
|
15,
|
|
23,
|
|
26,
|
|
13,
|
|
27,
|
|
12
|
|
],
|
|
"y": [
|
|
"Jan",
|
|
"Feb",
|
|
"Mar",
|
|
"Apr",
|
|
"May",
|
|
"Jun",
|
|
"Jul",
|
|
"Aug",
|
|
"Sep",
|
|
"Oct",
|
|
"Nov",
|
|
"Dec"
|
|
],
|
|
"marker": {
|
|
"line": {
|
|
"color": "rgba(255, 153, 51, 1.0)",
|
|
"width": 1
|
|
},
|
|
"color": "rgba(255, 153, 51, 0.6)"
|
|
},
|
|
"orientation": "h"
|
|
}
|
|
]}
|
|
layout={{ // layout for the chart
|
|
width: 840,
|
|
height: 800,
|
|
title: "Tickets Resolved: Inbound & Outbound",
|
|
showlegend: false,
|
|
}}
|
|
onClick={barOnClick} // pass the barOnClick function to the onClick prop
|
|
/>
|
|
</Container>
|
|
)}
|
|
```
|
|
|
|
Finally, we render the `MyCustomComponent` component using the `ReactDOM.render` function.
|
|
|
|
```js
|
|
const ConnectedComponent = Tooljet.connectComponent(MyCustomComponent); // connect the component to the Tooljet store
|
|
ReactDOM.render(<ConnectedComponent />, document.body); // render the component
|
|
```
|
|
|
|
## Step 3: Using events from the Custom Component
|
|
|
|
In the code above, we created a function called `barOnClick` that will be called when the user clicks on the bar. This function holds the code that will be executed when the user clicks on the bar.
|
|
|
|
```js
|
|
const barOnClick = ({points}) => {
|
|
alert('A bar is clicked')
|
|
}
|
|
```
|
|
|
|
Instead of displaying an alert message, you can use the `runQuery` function to run a query.
|
|
|
|
```js
|
|
const barOnClick = ({points}) => {
|
|
runQuery('queryName')
|
|
}
|
|
```
|
|
|
|
`runQuery` is a function which accepts a query name as a string used to run the query from the custom component. Learn more about the custom component [here](/docs/widgets/custom-component/). |