Skip to content

Commit c38c8b4

Browse files
authored
feat: adding query experience toggle (#4425)
1 parent c416549 commit c38c8b4

File tree

8 files changed

+100
-26
lines changed

8 files changed

+100
-26
lines changed

src/dashboards/selectors/index.test.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ describe('Dashboards.Selector', () => {
109109
autoRefresh: 0,
110110
showTemplateControlBar: false,
111111
navBarState: 'expanded',
112+
newDataExplorer: false,
112113
timeZone: 'Local' as TimeZone,
113114
theme: 'dark',
114115
versionInfo: {version: '', commit: ''},
@@ -133,6 +134,7 @@ describe('Dashboards.Selector', () => {
133134
autoRefresh: 0,
134135
showTemplateControlBar: false,
135136
navBarState: 'expanded',
137+
newDataExplorer: false,
136138
timeZone: 'UTC' as TimeZone,
137139
theme: 'dark',
138140
versionInfo: {version: '', commit: ''},
@@ -165,6 +167,7 @@ describe('Dashboards.Selector', () => {
165167
autoRefresh: 0,
166168
showTemplateControlBar: false,
167169
navBarState: 'expanded',
170+
newDataExplorer: false,
168171
timeZone: 'UTC' as TimeZone,
169172
theme: 'dark',
170173
versionInfo: {version: '', commit: ''},
@@ -197,6 +200,7 @@ describe('Dashboards.Selector', () => {
197200
autoRefresh: 0,
198201
showTemplateControlBar: false,
199202
navBarState: 'expanded',
203+
newDataExplorer: false,
200204
timeZone: 'UTC' as TimeZone,
201205
theme: 'dark',
202206
versionInfo: {version: '', commit: ''},
@@ -225,6 +229,7 @@ describe('Dashboards.Selector', () => {
225229
autoRefresh: 0,
226230
showTemplateControlBar: false,
227231
navBarState: 'expanded',
232+
newDataExplorer: false,
228233
timeZone: 'UTC' as TimeZone,
229234
theme: 'dark',
230235
versionInfo: {version: '', commit: ''},

src/dataExplorer/components/DataExplorerPage.tsx

Lines changed: 46 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,15 @@ import {Switch, Route, Link} from 'react-router-dom'
44

55
// Components
66
import DataExplorer from 'src/dataExplorer/components/DataExplorer'
7-
import {Page, Icon, IconFont} from '@influxdata/clockface'
7+
import {
8+
Page,
9+
Icon,
10+
IconFont,
11+
FlexBox,
12+
ComponentSize,
13+
InputLabel,
14+
SlideToggle,
15+
} from '@influxdata/clockface'
816
import SaveAsButton from 'src/dataExplorer/components/SaveAsButton'
917
import VisOptionsButton from 'src/timeMachine/components/VisOptionsButton'
1018
import GetResources from 'src/resources/components/GetResources'
@@ -28,7 +36,12 @@ import {AppSettingContext} from 'src/shared/contexts/app'
2836
import {PROJECT_NAME} from 'src/flows'
2937

3038
const DataExplorerPage: FC = () => {
31-
const {flowsCTA, setFlowsCTA} = useContext(AppSettingContext)
39+
const {
40+
flowsCTA,
41+
newDataExplorer,
42+
setFlowsCTA,
43+
setNewDataExplorer,
44+
} = useContext(AppSettingContext)
3245
useLoadTimeReporting('DataExplorerPage load start')
3346

3447
const hideFlowsCTA = () => {
@@ -58,7 +71,20 @@ const DataExplorerPage: FC = () => {
5871
<GetResources resources={[ResourceType.Variables]}>
5972
<Page.Header fullWidth={true} testID="data-explorer--header">
6073
<Page.Title title="Data Explorer" />
61-
<RateLimitAlert location="data explorer" />
74+
<FlexBox margin={ComponentSize.Large}>
75+
<FeatureFlag name="newQueryBuilder">
76+
<FlexBox margin={ComponentSize.Medium}>
77+
<InputLabel>&#10024; Try new Data Explorer</InputLabel>
78+
<SlideToggle
79+
active={newDataExplorer}
80+
onChange={() => {
81+
setNewDataExplorer(!newDataExplorer)
82+
}}
83+
/>
84+
</FlexBox>
85+
</FeatureFlag>
86+
<RateLimitAlert location="data explorer" />
87+
</FlexBox>
6288
</Page.Header>
6389
{flowsCTA.explorer && (
6490
<FeatureFlag name="flowsCTA">
@@ -80,19 +106,23 @@ const DataExplorerPage: FC = () => {
80106
</div>
81107
</FeatureFlag>
82108
)}
83-
<Page.ControlBar fullWidth={true}>
84-
<Page.ControlBarLeft>
85-
<ViewTypeDropdown />
86-
<VisOptionsButton />
87-
</Page.ControlBarLeft>
88-
<Page.ControlBarRight>
89-
<TimeZoneDropdown />
90-
<SaveAsButton />
91-
</Page.ControlBarRight>
92-
</Page.ControlBar>
93-
<Page.Contents fullWidth={true} scrollable={false}>
94-
<DataExplorer />
95-
</Page.Contents>
109+
{!newDataExplorer && (
110+
<Page.ControlBar fullWidth={true}>
111+
<Page.ControlBarLeft>
112+
<ViewTypeDropdown />
113+
<VisOptionsButton />
114+
</Page.ControlBarLeft>
115+
<Page.ControlBarRight>
116+
<TimeZoneDropdown />
117+
<SaveAsButton />
118+
</Page.ControlBarRight>
119+
</Page.ControlBar>
120+
)}
121+
{!newDataExplorer && (
122+
<Page.Contents fullWidth={true} scrollable={false}>
123+
<DataExplorer />
124+
</Page.Contents>
125+
)}
96126
</GetResources>
97127
</Page>
98128
)

src/mockState.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ export const localState: LocalStorage = {
3030
navBarState: 'expanded',
3131
timeZone: 'Local' as TimeZone,
3232
theme: 'dark',
33+
newDataExplorer: false,
3334
versionInfo: {
3435
version: '',
3536
commit: '',

src/shared/actions/app.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ export enum ActionTypes {
66
EnableUpdatedTimeRangeInVEO = 'ENABLE_UPDATED_TIMERANGE_IN_VEO',
77
DisableUpdatedTimeRangeInVEO = 'DISABLE_UPDATED_TIMERANGE_IN_VEO',
88
SetNavBarState = 'SET_NAV_BAR_STATE',
9+
SetNewDataExplorer = 'SET_NEW_DATA_EXPLORER',
910
SetAutoRefresh = 'SET_AUTOREFRESH',
1011
SetTimeZone = 'SET_APP_TIME_ZONE',
1112
SetVersionInfo = 'SET_VERSION_INFO',
@@ -19,6 +20,7 @@ export type Action =
1920
| ReturnType<typeof disablePresentationMode>
2021
| ReturnType<typeof enableUpdatedTimeRangeInVEO>
2122
| ReturnType<typeof disableUpdatedTimeRangeInVEO>
23+
| ReturnType<typeof setNewDataExplorer>
2224
| ReturnType<typeof setNavBarState>
2325
| ReturnType<typeof setAutoRefresh>
2426
| ReturnType<typeof setTimeZone>
@@ -52,6 +54,12 @@ export const disableUpdatedTimeRangeInVEO = () =>
5254

5355
export const setTheme = (theme: Theme) => ({type: 'SET_THEME', theme} as const)
5456

57+
export const setNewDataExplorer = (active: boolean) =>
58+
({
59+
type: ActionTypes.SetNewDataExplorer,
60+
active,
61+
} as const)
62+
5563
export const setNavBarState = (navBarState: NavBarState) =>
5664
({
5765
type: ActionTypes.SetNavBarState,

src/shared/contexts/app.tsx

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
setTimeZone as setTimeZoneAction,
66
setTheme as setThemeAction,
77
setNavBarState as setNavbarModeAction,
8+
setNewDataExplorer as setNewDataExplorerAction,
89
enablePresentationMode,
910
disablePresentationMode,
1011
setFlowsCTA as setFlowsCTAAction,
@@ -13,6 +14,7 @@ import {
1314
timeZone as timeZoneFromState,
1415
theme as themeFromState,
1516
getPresentationMode as presentationModeFromState,
17+
newDataExplorer as newDataExplorerFromState,
1618
navbarMode as navbarModeFromState,
1719
getFlowsCTA,
1820
} from 'src/shared/selectors/app'
@@ -26,12 +28,14 @@ interface AppSettingContextType {
2628
timeZone: TimeZone
2729
theme: Theme
2830
presentationMode: boolean
31+
newDataExplorer: boolean
2932
navbarMode: NavBarState
3033
flowsCTA: FlowsCTA
3134

3235
setTimeZone: (zone: TimeZone) => void
3336
setTheme: (theme: Theme) => void
3437
setPresentationMode: (active: boolean) => void
38+
setNewDataExplorer: (active: boolean) => void
3539
setNavbarMode: (mode: NavBarState) => void
3640
setFlowsCTA: (flowsCTA: FlowsCTA) => void
3741
}
@@ -40,12 +44,14 @@ const DEFAULT_CONTEXT: AppSettingContextType = {
4044
timeZone: 'Local' as TimeZone,
4145
theme: 'dark' as Theme,
4246
presentationMode: false,
47+
newDataExplorer: false,
4348
navbarMode: 'collapsed' as NavBarState,
4449
flowsCTA: {alerts: true, explorer: true, tasks: true} as FlowsCTA,
4550

4651
setTimeZone: (_zone: TimeZone) => {},
4752
setTheme: (_theme: Theme) => {},
4853
setPresentationMode: (_active: boolean) => {},
54+
setNewDataExplorer: (_active: boolean) => {},
4955
setNavbarMode: (_mode: NavBarState) => {},
5056
setFlowsCTA: (_flowsCTA: FlowsCTA) => {},
5157
}
@@ -55,15 +61,21 @@ export const AppSettingContext = React.createContext<AppSettingContextType>(
5561
)
5662

5763
export const AppSettingProvider: FC = ({children}) => {
58-
const {timeZone, theme, presentationMode, navbarMode, flowsCTA} = useSelector(
59-
(state: AppState) => ({
60-
timeZone: timeZoneFromState(state),
61-
theme: themeFromState(state),
62-
presentationMode: presentationModeFromState(state),
63-
navbarMode: navbarModeFromState(state),
64-
flowsCTA: getFlowsCTA(state),
65-
})
66-
)
64+
const {
65+
timeZone,
66+
theme,
67+
presentationMode,
68+
newDataExplorer,
69+
navbarMode,
70+
flowsCTA,
71+
} = useSelector((state: AppState) => ({
72+
timeZone: timeZoneFromState(state),
73+
theme: themeFromState(state),
74+
presentationMode: presentationModeFromState(state),
75+
newDataExplorer: newDataExplorerFromState(state),
76+
navbarMode: navbarModeFromState(state),
77+
flowsCTA: getFlowsCTA(state),
78+
}))
6779
const dispatch = useDispatch()
6880

6981
const setTimeZone = useCallback(
@@ -91,6 +103,12 @@ export const AppSettingProvider: FC = ({children}) => {
91103
},
92104
[dispatch]
93105
)
106+
const setNewDataExplorer = useCallback(
107+
(_active: boolean) => {
108+
dispatch(setNewDataExplorerAction(_active))
109+
},
110+
[dispatch]
111+
)
94112
const setNavbarMode = useCallback(
95113
(_mode: NavBarState) => {
96114
dispatch(setNavbarModeAction(_mode))
@@ -110,12 +128,14 @@ export const AppSettingProvider: FC = ({children}) => {
110128
timeZone,
111129
theme,
112130
presentationMode,
131+
newDataExplorer,
113132
navbarMode,
114133
flowsCTA,
115134

116135
setTimeZone,
117136
setTheme,
118137
setPresentationMode,
138+
setNewDataExplorer,
119139
setNavbarMode,
120140
setFlowsCTA,
121141
}}

src/shared/reducers/app.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ describe('Shared.Reducers.appReducer', () => {
2020
autoRefresh: 0,
2121
showTemplateControlBar: false,
2222
navBarState: 'expanded',
23+
newDataExplorer: false,
2324
timeZone: 'Local' as TimeZone,
2425
theme: 'dark',
2526
versionInfo: {version: '', commit: ''},

src/shared/reducers/app.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ export interface AppState {
1515
showTemplateControlBar: boolean
1616
timeZone: TimeZone
1717
navBarState: NavBarState
18+
newDataExplorer: boolean
1819
theme: Theme
1920
versionInfo: VersionInfo
2021
flowsCTA: FlowsCTA
@@ -32,6 +33,7 @@ const initialState: AppState = {
3233
showTemplateControlBar: false,
3334
timeZone: 'Local',
3435
navBarState: 'collapsed',
36+
newDataExplorer: false,
3537
versionInfo: {version: '', commit: ''},
3638
flowsCTA: {explorer: true, tasks: true, alerts: true},
3739
},
@@ -109,7 +111,11 @@ const appPersistedReducer = (
109111
return {...state, timeZone}
110112
}
111113

112-
case 'SET_NAV_BAR_STATE': {
114+
case ActionTypes.SetNewDataExplorer: {
115+
return {...state, newDataExplorer: action.active}
116+
}
117+
118+
case ActionTypes.SetNavBarState: {
113119
const navBarState = action.navBarState
114120
return {
115121
...state,

src/shared/selectors/app.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ export const theme = (state: AppState): Theme =>
1717
export const navbarMode = (state: AppState): NavBarState =>
1818
state.app.persisted.navBarState || ('collapsed' as NavBarState)
1919

20+
export const newDataExplorer = (state: AppState): boolean =>
21+
state.app.persisted.newDataExplorer || false
22+
2023
export const getVersionInfo = (state: AppState): VersionInfo =>
2124
state.app.persisted.versionInfo || ({} as VersionInfo)
2225

0 commit comments

Comments
 (0)