Skip to content

Commit 7d67428

Browse files
committed
Use date-fns, add types, move interfaces to interfaces file, remove deadcode
1 parent de4984f commit 7d67428

File tree

9 files changed

+62
-331
lines changed

9 files changed

+62
-331
lines changed

redisinsight/ui/src/packages/redistimeseries-app/package.json

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,6 @@
4747
"@parcel/compressor-gzip": "^2.0.0",
4848
"@parcel/transformer-less": "^2.0.1",
4949
"@parcel/transformer-sass": "2.3.2",
50-
"@types/d3-scale": "^4.0.2",
51-
"@types/d3-scale-chromatic": "^3.0.0",
5250
"@types/file-saver": "^2.0.5",
5351
"@types/plotly.js-dist-min": "^2.3.0",
5452
"concurrently": "^6.3.0",
@@ -61,8 +59,7 @@
6159
"@elastic/eui": "34.6.0",
6260
"@emotion/react": "^11.7.1",
6361
"classnames": "^2.3.1",
64-
"d3-scale": "^4.0.2",
65-
"d3-scale-chromatic": "^3.0.0",
62+
"date-fns": "^2.28.0",
6663
"file-saver": "^2.0.5",
6764
"fscreen": "^1.2.0",
6865
"plotly.js-dist-min": "^2.9.0",

redisinsight/ui/src/packages/redistimeseries-app/src/App.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
/* eslint-disable react/jsx-filename-extension */
21
import React from 'react'
3-
42
import ChartResultView from './components/Chart/ChartResultView'
53

64
interface Props {

redisinsight/ui/src/packages/redistimeseries-app/src/components/Chart/Chart.tsx

Lines changed: 21 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,15 @@
11
import React, { useRef, useEffect } from 'react'
2-
import Plotly, { Layout } from 'plotly.js-dist-min'
3-
import { Legend, LayoutAxis, PlotData } from 'plotly.js'
4-
import moment from 'moment'
5-
import * as d3Scale from 'd3-scale'
6-
import * as d3ScaleColor from 'd3-scale-chromatic'
7-
import { hexToRGBA, IGoodColor, GoodColorPicker, NODE_COLORS, NODE_COLORS_DARK, EDGE_COLORS, EDGE_COLORS_DARK } from './utils'
8-
9-
import { Datapoint, TimeSeries, ChartConfig, GraphMode } from './interfaces'
10-
11-
interface ChartProps {
12-
data: TimeSeries[]
13-
chartConfig: ChartConfig
14-
onRelayout: () => void
15-
onDoubleClick: () => void
16-
}
2+
import Plotly from 'plotly.js-dist-min'
3+
import { Legend, LayoutAxis, PlotData, PlotMouseEvent, Layout, PlotRelayoutEvent } from 'plotly.js'
4+
import { format } from 'date-fns'
5+
import { hexToRGBA, IGoodColor, GoodColorPicker, COLORS, COLORS_DARK } from './utils'
6+
7+
import {
8+
Datapoint,
9+
GraphMode,
10+
ChartProps,
11+
PlotlyEvents,
12+
} from './interfaces'
1713

1814
const GRAPH_MODE_MAP: { [mode: string]: 'lines' | 'markers' } = {
1915
[GraphMode.line]: 'lines',
@@ -27,10 +23,9 @@ const colorPicker = (COLORS: IGoodColor[]) => {
2723
return (label: string) => color.getColor(label).color
2824
}
2925

30-
const labelColors = colorPicker(isDarkTheme ? NODE_COLORS_DARK : NODE_COLORS)
31-
const edgeColors = colorPicker(isDarkTheme ? EDGE_COLORS_DARK : EDGE_COLORS)
26+
const labelColors = colorPicker(isDarkTheme ? COLORS_DARK : COLORS)
3227

33-
export default function Chart(props: any) {
28+
export default function Chart(props: ChartProps) {
3429
const chartContainer = useRef<any>()
3530

3631
const colorPicker = labelColors
@@ -39,12 +34,12 @@ export default function Chart(props: any) {
3934
Plotly.newPlot(
4035
chartContainer.current,
4136
getData(props),
42-
getLayout(props) as any,
37+
getLayout(props),
4338
{ displayModeBar: false, autosizable: true, responsive: true, setBackground: () => 'transparent', },
4439
)
45-
chartContainer.current.on('plotly_hover', function (eventdata) {
46-
var points = eventdata.points[0]
47-
var pointNum = points.pointNumber
40+
chartContainer.current.on(PlotlyEvents.PLOTLY_HOVER, function (eventdata: PlotMouseEvent) {
41+
const points = eventdata.points[0]
42+
const pointNum = points.pointNumber
4843
Plotly.Fx.hover(
4944
chartContainer.current,
5045
props.data.map((_, i) => ({
@@ -53,37 +48,26 @@ export default function Chart(props: any) {
5348
})),
5449
Object.keys((chartContainer.current)._fullLayout._plots))
5550
})
56-
chartContainer.current.on('plotly_relayout', function (eventdata) {
51+
chartContainer.current.on(PlotlyEvents.PLOTLY_RELAYOUT, function (eventdata: PlotRelayoutEvent) {
5752
if (eventdata.autosize === undefined && eventdata['xaxis.autorange'] === undefined) {
5853
props.onRelayout()
5954
}
6055
})
6156

62-
chartContainer.current.on('plotly_doubleclick', function(eventdata) {
63-
props.onDoubleClick()
64-
})
57+
chartContainer.current.on(PlotlyEvents.PLOTLY_DBLCLICK, () => props.onDoubleClick())
6558
}, [props.chartConfig])
6659

67-
function getPlotArgs(props: ChartProps) {
68-
return [
69-
chartContainer.current,
70-
getData(props),
71-
getLayout(props),
72-
{ displayModeBar: false },
73-
]
74-
}
75-
7660
function getData(props: ChartProps): Partial<PlotData>[] {
7761
return props.data.map((timeSeries, i) => {
7862

79-
const currentData = (chartContainer.current as any).data
63+
const currentData = chartContainer.current.data
8064
const dataUnchanged = currentData && props.data === props.data
8165
/*
8266
* Time format for inclusion of milliseconds:
8367
* https://github.com/moment/moment/issues/4864#issuecomment-440142542
8468
*/
8569
const x = dataUnchanged ? currentData[i].x
86-
: selectCol(timeSeries.datapoints, 0).map((time: number) => moment(time).format('YYYY-MM-DD[T]HH:mm:ss.SSS[Z]'))
70+
: selectCol(timeSeries.datapoints, 0).map((time: number) => format(time, 'yyyy-MM-dd HH:mm:ss.SSS'))
8771
const y = dataUnchanged ? currentData[i].y : selectCol(timeSeries.datapoints, 1)
8872

8973
return {

redisinsight/ui/src/packages/redistimeseries-app/src/components/Chart/ChartConfigForm.tsx

Lines changed: 2 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,15 @@
11
import React, { CSSProperties } from 'react'
2-
32
import {
43
EuiFieldText,
54
EuiSwitch,
6-
EuiForm,
75
EuiFormFieldset,
8-
EuiSpacer,
9-
EuiSelectProps,
106
EuiButtonGroup,
117
EuiAccordion,
128
EuiButtonGroupProps,
139
} from '@elastic/eui'
14-
15-
import { ChartConfig, AxisScale, GraphMode } from './interfaces'
10+
import { AxisScale, GraphMode, ChartConfigFormProps, ChartConfigFormState } from './interfaces'
1611
import { X_LABEL_MAX_LENGTH, Y_LABEL_MAX_LENGTH, TITLE_MAX_LENGTH } from './constants'
1712

18-
const styles = {
19-
mainToggle: {
20-
marginTop: '20px'
21-
},
22-
rightYAxis: {
23-
display: 'flex',
24-
justifyContent: 'space-between',
25-
width: '100%',
26-
} as CSSProperties,
27-
}
28-
29-
30-
interface ChartConfigFormProps {
31-
value: ChartConfig
32-
onChange: (control: string, value: any) => void
33-
}
34-
35-
interface ChartConfigFormState {
36-
moreOptions: boolean
37-
}
38-
3913
export default class ChartConfigForm extends React.Component<ChartConfigFormProps, ChartConfigFormState> {
4014
state = {
4115
moreOptions: false,
@@ -97,7 +71,7 @@ export default class ChartConfigForm extends React.Component<ChartConfigFormProp
9771
</EuiFormFieldset>
9872
</section>
9973
<section>
100-
<div style={styles.rightYAxis as CSSProperties}>
74+
<div className="right-y-axis">
10175
<div style={{ width: '100%' }}>
10276
<EuiSwitch
10377
compressed

redisinsight/ui/src/packages/redistimeseries-app/src/components/Chart/interfaces.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,26 @@ export interface ChartConfig {
4545
}
4646

4747
export type ChartImageExportOption = 'png' | 'svg'
48+
49+
export interface ChartProps {
50+
data: TimeSeries[]
51+
chartConfig: ChartConfig
52+
onRelayout: () => void
53+
onDoubleClick: () => void
54+
}
55+
56+
57+
export enum PlotlyEvents {
58+
PLOTLY_HOVER = 'plotly_hover',
59+
PLOTLY_RELAYOUT = 'plotly_relayout',
60+
PLOTLY_DBLCLICK = 'plotly_doubleclick',
61+
}
62+
63+
export interface ChartConfigFormProps {
64+
value: ChartConfig
65+
onChange: (control: string, value: any) => void
66+
}
67+
68+
export interface ChartConfigFormState {
69+
moreOptions: boolean
70+
}

0 commit comments

Comments
 (0)