Skip to content

Commit 97bfee5

Browse files
authored
feat: normalize table experience (#4950)
1 parent b093483 commit 97bfee5

File tree

3 files changed

+80
-8
lines changed

3 files changed

+80
-8
lines changed

src/flows/pipes/Table/view.scss

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
11
@import '@influxdata/clockface/dist/variables.scss';
22

3+
.flow-visualization--header {
4+
.search-widget-input {
5+
flex: 0 1 500px;
6+
}
7+
}
8+
39
.query-stat {
410
padding: $cf-space-2xs 0;
11+
white-space: nowrap;
512
}
613

714
.query-stat--bold {

src/flows/pipes/Table/view.tsx

Lines changed: 66 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,17 @@ import React, {
77
useState,
88
useRef,
99
} from 'react'
10-
11-
// Styles
12-
import './view.scss'
10+
import {Icon, IconFont} from '@influxdata/clockface'
1311

1412
// Components
15-
import {Icon, IconFont} from '@influxdata/clockface'
13+
import SearchWidget from 'src/shared/components/search_widget/SearchWidget'
1614

1715
// Utilities
1816
import {View} from 'src/visualization'
1917

2018
// Types
2119
import {RemoteDataState, SimpleTableViewProperties} from 'src/types'
22-
import {PipeProp} from 'src/types/flows'
20+
import {PipeProp, FluxResult} from 'src/types/flows'
2321

2422
import {PipeContext} from 'src/flows/context/pipe'
2523
import {FlowQueryContext} from 'src/flows/context/flow.query'
@@ -31,6 +29,9 @@ import {downloadTextFile} from 'src/shared/utils/download'
3129
// Constants
3230
import {UNPROCESSED_PANEL_TEXT} from 'src/flows'
3331

32+
// Styles
33+
import './view.scss'
34+
3435
const QueryStat: FC = () => {
3536
const {loading, results} = useContext(PipeContext)
3637
const queryStart = useRef(0)
@@ -93,6 +94,7 @@ const Table: FC<PipeProp> = ({Context}) => {
9394
const {id, data, range, loading, results} = useContext(PipeContext)
9495
const {basic, getPanelQueries} = useContext(FlowQueryContext)
9596
const {register} = useContext(SidebarContext)
97+
const [search, setSearch] = useState('')
9698

9799
const dataExists = !!(results?.parsed?.table || []).length
98100

@@ -108,6 +110,56 @@ const Table: FC<PipeProp> = ({Context}) => {
108110
})
109111
}
110112

113+
const res = useMemo(() => {
114+
if (!search.trim() || !results?.parsed) {
115+
return results?.parsed
116+
}
117+
118+
const dupped = {
119+
fluxGroupKeyUnion: [...results.parsed.fluxGroupKeyUnion],
120+
resultColumnNames: [...results.parsed.resultColumnNames],
121+
table: {
122+
length: 0,
123+
columns: Object.entries(results.parsed.table.columns).reduce(
124+
(acc, [k, v]) => {
125+
acc[k] = {...v, data: []}
126+
return acc
127+
},
128+
{}
129+
),
130+
},
131+
}
132+
133+
const len = results.parsed.table.length
134+
const keys = Object.keys(results.parsed.table.columns)
135+
let newLen = 0,
136+
ni = 0
137+
138+
const _search = search.toLocaleLowerCase()
139+
const oldCols = results.parsed.table.columns
140+
const newCols = dupped.table.columns
141+
142+
for (; ni < len; ni++) {
143+
if (
144+
!keys.reduce(
145+
(acc, curr) =>
146+
acc ||
147+
('' + oldCols[curr].data[ni]).toLocaleLowerCase().includes(_search),
148+
false
149+
)
150+
) {
151+
continue
152+
}
153+
154+
keys.forEach(k => (newCols[k].data[newLen] = oldCols[k].data[ni]))
155+
newLen++
156+
}
157+
158+
dupped.table.length = newLen
159+
160+
return dupped as FluxResult['parsed']
161+
}, [search, results?.parsed])
162+
111163
const loadingText = useMemo(() => {
112164
if (loading === RemoteDataState.Loading) {
113165
return 'Loading'
@@ -182,8 +234,15 @@ const Table: FC<PipeProp> = ({Context}) => {
182234
return (
183235
<Context resizes controls={caveat}>
184236
<div className="flow-visualization" id={id}>
185-
<div className="flow-visualization--view">
237+
<div className="flow-visualization--header">
238+
<SearchWidget
239+
placeholderText="Search results..."
240+
onSearch={setSearch}
241+
searchTerm={search}
242+
/>
186243
<QueryStat />
244+
</div>
245+
<div className="flow-visualization--view">
187246
<View
188247
loading={loading}
189248
properties={
@@ -192,7 +251,7 @@ const Table: FC<PipeProp> = ({Context}) => {
192251
showAll: false,
193252
} as SimpleTableViewProperties
194253
}
195-
result={results.parsed}
254+
result={res}
196255
timeRange={range}
197256
/>
198257
</div>

src/flows/pipes/Visualization/style.scss

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,22 @@
44
background-color: $cf-grey-5;
55
border-radius: $cf-radius;
66
display: flex;
7+
flex-direction: column;
78
align-items: stretch;
89
height: 100%;
10+
padding: $cf-space-2xs + $cf-space-3xs;
11+
}
12+
13+
.flow-visualization--header {
14+
display: flex;
915
}
1016

1117
.flow-visualization--view-error,
1218
.flow-visualization--view {
19+
flex-grow: 1;
1320
width: 100%;
1421
border-radius: $cf-radius-sm;
1522
background-color: $cf-grey-5;
16-
padding: $cf-space-2xs + $cf-space-3xs;
1723

1824
.empty-graph-error {
1925
height: 200px;

0 commit comments

Comments
 (0)