Skip to content

Commit

Permalink
Added in some logic to show and hide a custom tooltip when hovering o…
Browse files Browse the repository at this point in the history
…ver the legend items in the traffic stops by stop purpose graph. Not working yet.
  • Loading branch information
janelle-caktus committed Jul 24, 2023
1 parent 2196508 commit a4b9eec
Show file tree
Hide file tree
Showing 3 changed files with 96 additions and 24 deletions.
49 changes: 49 additions & 0 deletions frontend/src/Components/Charts/TrafficStops/TrafficStops.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ import TrafficStopsStyled, {
import * as S from '../ChartSections/ChartsCommon.styled';
import { useTheme } from 'styled-components';
import cloneDeep from 'lodash.clonedeep';
import { usePopper } from 'react-popper';
import { TooltipStyled } from '../../Elements/Tooltip/Tooltip.styled';
import { tooltipLanguage } from '../../../util/tooltipLanguage';

// Util
import {
Expand Down Expand Up @@ -62,6 +65,31 @@ function TrafficStops(props) {
const [pickerXAxis, setPickerXAxis] = useState(null);
const [forcePickerRerender, setForcePickerRerender] = useState(false);
const [reasonChartYearSet, setReasonChartYearSet] = useState(reasonChartState.yearSet);
const [referenceElement, setReferenceElement] = useState(null);
const [tooltipText, setTooltipText] = useState('');
const [popperElement, setPopperElement] = useState(null);
const { styles, attributes } = usePopper(referenceElement, popperElement, {
placement: 'top',
modifiers: [
{
name: 'offset',
options: {
offset: [0, 10],
},
},
],
});

const showTooltip = (e) => {
setReferenceElement(e.currentTarget);
setTooltipText(tooltipLanguage(e.target.parentElement.id));
popperElement.setAttribute('data-show', true);
};

const hideTooltip = () => {
setTooltipText('');
popperElement.removeAttribute('data-show');
};

const [year, setYear] = useState(YEARS_DEFAULT);

Expand Down Expand Up @@ -533,10 +561,31 @@ function TrafficStops(props) {
/>
<LineWrapper>
<StopGroupsContainer>
<TooltipStyled
ref={setPopperElement}
id="TooltipStyled"
style={{
...styles.popper,
maxWidth: '500px',
zIndex: 1000,
display: tooltipText !== '' ? 'block' : 'none',
}}
{...attributes.popper}
>
{tooltipText}
</TooltipStyled>
<LineChart
data={stopPurposeGroupsData}
title="Stop Purposes By Group"
maintainAspectRatio={false}
options={{
plugins: {
legend: {
onHover: (e) => showTooltip(e),
onLeave: () => hideTooltip(),
},
},
}}
/>
</StopGroupsContainer>
</LineWrapper>
Expand Down
17 changes: 17 additions & 0 deletions frontend/src/Components/NewCharts/LineChart.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import React from 'react';
import { Line } from 'react-chartjs-2';
import { tooltipLanguage } from '../../util/tooltipLanguage';

export default function LineChart({
data,
Expand All @@ -10,6 +11,9 @@ export default function LineChart({
yAxisMax = null,
yAxisShowLabels = true,
}) {
let hovering = false;
const styledtooltip = document.getElementById('TooltipStyled');
const tooltips = tooltipLanguage;
const options = {
responsive: true,
maintainAspectRatio,
Expand All @@ -21,6 +25,19 @@ export default function LineChart({
legend: {
display: displayLegend,
position: 'top',
onHover: function (event, legendItem) {
if (hovering) {
return;
}
hovering = true;
styledtooltip.innerHTML = tooltips[legendItem.datasetIndex];
styledtooltip.style.left = event.x + 'px';
styledtooltip.style.top = event.y + 'px';
},
onLeave: function () {
hovering = false;
styledtooltip.innerHTML = '';
},
},
tooltip: {
mode: 'nearest',
Expand Down
54 changes: 30 additions & 24 deletions frontend/src/util/tooltipLanguage.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit a4b9eec

Please sign in to comment.