Repository navigation
Expand file tree
/
Copy pathchartUtils.ts
More file actions
71 lines (61 loc) · 2.07 KB
/
Copy pathchartUtils.ts
File metadata and controls
71 lines (61 loc) · 2.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import type { NavigateFunction } from 'react-router-dom-v5-compat';
import { ChartThemeColor, getTheme } from '@patternfly/react-charts/victory';
import type { ChartBarProps, ChartLabelProps } from '@patternfly/react-charts/victory';
import merge from 'lodash/merge';
import { policySeverityColorMap } from 'constants/severityColors';
export const solidBlueChartColor = 'var(--pf-t--color--blue--40)';
export const severityColorScale = Object.values(policySeverityColorMap);
// Clone default PatternFly chart themes
const defaultTheme = getTheme(ChartThemeColor.multi);
export const defaultChartHeight = 260;
export const defaultChartBarWidth = 18;
const pointerStyles = {
data: { cursor: 'pointer' },
labels: { cursor: 'pointer' },
};
/** A Victory chart theme based on grey/yellow/orange/red colors to indicate severity */
export const patternflySeverityTheme = {
...defaultTheme,
bar: {
style: merge(defaultTheme?.bar?.style ?? {}, pointerStyles),
},
stack: {
...defaultTheme.stack,
colorScale: [...severityColorScale],
},
legend: {
...defaultTheme.legend,
colorScale: [...severityColorScale],
style: merge(defaultTheme?.legend?.style ?? {}, pointerStyles),
},
tooltip: {
style: {
...(defaultTheme.tooltip?.style ?? {}),
fontWeight: '600',
textAnchor: 'start',
},
flyoutPadding: { top: 8, bottom: 8, left: 12, right: 12 },
},
};
type ChartEventProp = NonNullable<ChartBarProps['events']>[number];
/**
* A helper function to generate a chart onClick event that initiates navigation to another page.
*/
export function navigateOnClickEvent(
navigate: NavigateFunction,
linkWith: (props: ChartLabelProps) => string
): ChartEventProp {
return {
target: 'data',
eventHandlers: {
onClick: () => [
{
mutation: (props) => {
navigate(linkWith(props));
return null;
},
},
],
},
};
}