Skip to content

Commit e57dd67

Browse files
authored
feat: persist more info around the query builder (#4873)
1 parent bbe23b7 commit e57dd67

File tree

4 files changed

+60
-21
lines changed

4 files changed

+60
-21
lines changed

src/dataExplorer/components/Results.tsx

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,20 @@ const Results: FC = () => {
168168
</>
169169
) : null
170170

171+
const updateViewState = state => {
172+
if (state === 'graph') {
173+
setView({
174+
state: 'graph',
175+
properties: SUPPORTED_VISUALIZATIONS['xy'].initial,
176+
})
177+
} else {
178+
setView({
179+
state: 'table',
180+
properties: SUPPORTED_VISUALIZATIONS['simple-table'].initial,
181+
})
182+
}
183+
}
184+
171185
return (
172186
<div className="data-explorer-results">
173187
<FlexBox direction={FlexDirection.Column} style={{height: '100%'}}>
@@ -183,7 +197,7 @@ const Results: FC = () => {
183197
name="viz-setting"
184198
value="table"
185199
active={view.state === 'table'}
186-
onClick={state => setView({...view, state})}
200+
onClick={updateViewState}
187201
>
188202
Table
189203
</SelectGroup.Option>
@@ -192,7 +206,7 @@ const Results: FC = () => {
192206
name="viz-setting"
193207
value="graph"
194208
active={view.state === 'graph'}
195-
onClick={state => setView({...view, state})}
209+
onClick={updateViewState}
196210
>
197211
Graph
198212
</SelectGroup.Option>

src/dataExplorer/components/ResultsContext.tsx

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,30 @@
11
import React, {FC, createContext, useState, useRef, useEffect} from 'react'
2+
import {createLocalStorageStateHook} from 'use-local-storage-state'
3+
24
import {FluxResult} from 'src/types/flows'
3-
import {RemoteDataState, ViewProperties} from 'src/types'
5+
import {
6+
RemoteDataState,
7+
ViewProperties,
8+
SimpleTableViewProperties,
9+
} from 'src/types'
410
import {SUPPORTED_VISUALIZATIONS} from 'src/visualization'
511

612
interface View {
713
state: 'table' | 'graph'
814
properties: ViewProperties
915
}
1016

17+
const useLocalStorageState = createLocalStorageStateHook(
18+
'dataExplorer.results',
19+
{
20+
state: 'table',
21+
properties: {
22+
type: 'simple-table',
23+
showAll: false,
24+
} as SimpleTableViewProperties,
25+
} as View
26+
)
27+
1128
interface ResultsContextType {
1229
status: RemoteDataState
1330
result: FluxResult
@@ -44,9 +61,7 @@ export const ResultsProvider: FC = ({children}) => {
4461
)
4562

4663
// for display, should be moved
47-
const [view, setView] = useState<View>(
48-
JSON.parse(JSON.stringify(DEFAULT_STATE.view))
49-
)
64+
const [view, setView] = useLocalStorageState()
5065

5166
useEffect(() => {
5267
let running = false

src/dataExplorer/components/ResultsPane.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ const FluxMonacoEditor = lazy(() =>
3535
import('src/shared/components/FluxMonacoEditor')
3636
)
3737
const useLocalStorageState = createLocalStorageStateHook(
38-
'dataExplorerQuery',
38+
'dataExplorer.query',
3939
''
4040
)
4141

src/dataExplorer/context/fluxQueryBuilder.tsx

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import React, {
66
useContext,
77
useCallback,
88
} from 'react'
9+
import {createLocalStorageStateHook} from 'use-local-storage-state'
910

1011
// Context
1112
import {MeasurementsContext} from 'src/dataExplorer/context/measurements'
@@ -15,6 +16,14 @@ import {TagsContext} from 'src/dataExplorer/context/tags'
1516
// Types
1617
import {Bucket} from 'src/types'
1718

19+
const useLocalStorageState = createLocalStorageStateHook(
20+
'dataExplorer.schema',
21+
{
22+
bucket: null,
23+
measurement: null,
24+
}
25+
)
26+
1827
const DEBOUNCE_TIMEOUT = 500
1928
let timer
2029
type NOOP = () => void
@@ -57,15 +66,15 @@ export const FluxQueryBuilderProvider: FC = ({children}) => {
5766
const {getTagKeys, resetTags} = useContext(TagsContext)
5867

5968
// States
60-
const [selectedBucket, setSelectedBucket] = useState(null)
61-
const [selectedMeasurement, setSelectedMeasurement] = useState('')
69+
const [selection, setSelection] = useLocalStorageState()
6270
const [searchTerm, setSearchTerm] = useState('')
6371

6472
const handleSelectBucket = (bucket: Bucket): void => {
65-
setSelectedBucket(bucket)
73+
selection.bucket = bucket
74+
selection.measurement = ''
75+
setSelection({...selection})
6676

6777
// Reset measurement, tags, and fields
68-
setSelectedMeasurement('')
6978
resetFields()
7079
resetTags()
7180

@@ -74,35 +83,36 @@ export const FluxQueryBuilderProvider: FC = ({children}) => {
7483
}
7584

7685
const handleSelectMeasurement = (measurement: string): void => {
77-
setSelectedMeasurement(measurement)
86+
selection.measurement = measurement
87+
setSelection({...selection})
7888

7989
// Reset fields and tags
8090
resetFields()
8191
resetTags()
8292

8393
// Get fields and tags
84-
getFields(selectedBucket, measurement)
85-
getTagKeys(selectedBucket, measurement)
94+
getFields(selection.bucket, measurement)
95+
getTagKeys(selection.bucket, measurement)
8696
}
8797

8898
const handleSearchTerm = useCallback(
8999
(searchTerm: string): void => {
90100
setSearchTerm(searchTerm)
91101
debouncer(() => {
92-
getFields(selectedBucket, selectedMeasurement, searchTerm)
93-
getTagKeys(selectedBucket, selectedMeasurement, searchTerm)
102+
getFields(selection.bucket, selection.measurement, searchTerm)
103+
getTagKeys(selection.bucket, selection.measurement, searchTerm)
94104
})
95105
},
96-
[getFields, getTagKeys, selectedBucket, selectedMeasurement]
106+
[getFields, getTagKeys, selection.bucket, selection.measurement]
97107
)
98108

99109
return useMemo(
100110
() => (
101111
<FluxQueryBuilderContext.Provider
102112
value={{
103113
// Schema
104-
selectedBucket,
105-
selectedMeasurement,
114+
selectedBucket: selection.bucket,
115+
selectedMeasurement: selection.measurement,
106116
searchTerm,
107117
selectBucket: handleSelectBucket,
108118
selectMeasurement: handleSelectMeasurement,
@@ -114,8 +124,8 @@ export const FluxQueryBuilderProvider: FC = ({children}) => {
114124
),
115125
[
116126
// Schema
117-
selectedBucket,
118-
selectedMeasurement,
127+
selection.bucket,
128+
selection.measurement,
119129
searchTerm,
120130

121131
children,

0 commit comments

Comments
 (0)