Skip to content

Commit 80fdb78

Browse files
authored
feat(webui): Reset states when switching between freeform and guided. (#1482)
1 parent fdd2f82 commit 80fdb78

File tree

5 files changed

+88
-9
lines changed

5 files changed

+88
-9
lines changed

components/webui/client/src/pages/SearchPage/SearchControls/Presto/SqlInterfaceButton/FreeformButton/index.tsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@ import {EditOutlined} from "@ant-design/icons";
22
import {Button} from "antd";
33

44
import useSearchStore from "../../../../SearchState/index";
5-
import usePrestoSearchState from "../../../../SearchState/Presto";
6-
import {PRESTO_SQL_INTERFACE} from "../../../../SearchState/Presto/typings";
75
import {SEARCH_UI_STATE} from "../../../../SearchState/typings";
6+
import {handleSwitchToFreeform} from "../../presto-guided-search-requests";
87

98

109
/**
@@ -13,13 +12,12 @@ import {SEARCH_UI_STATE} from "../../../../SearchState/typings";
1312
* @return
1413
*/
1514
const FreeformButton = () => {
16-
const setSqlInterface = usePrestoSearchState((state) => state.setSqlInterface);
1715
const searchUiState = useSearchStore((state) => state.searchUiState);
1816
const disabled = searchUiState === SEARCH_UI_STATE.QUERY_ID_PENDING ||
1917
searchUiState === SEARCH_UI_STATE.QUERYING;
2018

2119
const handleClick = () => {
22-
setSqlInterface(PRESTO_SQL_INTERFACE.FREEFORM);
20+
handleSwitchToFreeform();
2321
};
2422

2523
return (

components/webui/client/src/pages/SearchPage/SearchControls/Presto/SqlInterfaceButton/GuidedButton/index.tsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@ import {AppstoreOutlined} from "@ant-design/icons";
22
import {Button} from "antd";
33

44
import useSearchStore from "../../../../SearchState/index";
5-
import usePrestoSearchState from "../../../../SearchState/Presto";
6-
import {PRESTO_SQL_INTERFACE} from "../../../../SearchState/Presto/typings";
75
import {SEARCH_UI_STATE} from "../../../../SearchState/typings";
6+
import {handleSwitchToGuided} from "../../presto-search-requests";
87

98

109
/**
@@ -13,13 +12,12 @@ import {SEARCH_UI_STATE} from "../../../../SearchState/typings";
1312
* @return
1413
*/
1514
const GuidedButton = () => {
16-
const setSqlInterface = usePrestoSearchState((state) => state.setSqlInterface);
1715
const searchUiState = useSearchStore((state) => state.searchUiState);
1816
const disabled = searchUiState === SEARCH_UI_STATE.QUERY_ID_PENDING ||
1917
searchUiState === SEARCH_UI_STATE.QUERYING;
2018

2119
const handleClick = () => {
22-
setSqlInterface(PRESTO_SQL_INTERFACE.GUIDED);
20+
handleSwitchToGuided();
2321
};
2422

2523
return (

components/webui/client/src/pages/SearchPage/SearchControls/Presto/presto-guided-search-requests.ts

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ import {
1111
buildTimelineQuery,
1212
} from "../../../../sql-parser";
1313
import useSearchStore, {SEARCH_STATE_DEFAULT} from "../../SearchState";
14-
import usePrestoSearchState from "../../SearchState/Presto";
14+
import usePrestoSearchState, {PRESTO_SEARCH_STATE_DEFAULT} from "../../SearchState/Presto";
15+
import {PRESTO_SQL_INTERFACE} from "../../SearchState/Presto/typings";
1516
import {SEARCH_UI_STATE} from "../../SearchState/typings";
1617

1718

@@ -209,8 +210,53 @@ const handlePrestoGuidedQueryCancel = (searchJobId: string, aggregationJobId: st
209210
});
210211
};
211212

213+
/**
214+
* Handles switching to freeform SQL interface by clearing results and resetting states.
215+
*/
216+
const handleSwitchToFreeform = () => {
217+
const {
218+
searchUiState,
219+
updateSearchUiState,
220+
updateSearchJobId,
221+
updateAggregationJobId,
222+
updateNumSearchResultsTable,
223+
updateNumSearchResultsTimeline,
224+
updateNumSearchResultsMetadata,
225+
} = useSearchStore.getState();
226+
const {
227+
setSqlInterface,
228+
updateErrorMsg,
229+
updateErrorName,
230+
updateCachedGuidedSearchQueryString,
231+
updateQueryDrawerOpen,
232+
} = usePrestoSearchState.getState();
233+
234+
setSqlInterface(PRESTO_SQL_INTERFACE.FREEFORM);
235+
236+
// If already in default state, nothing to clear
237+
if (searchUiState === SEARCH_UI_STATE.DEFAULT) {
238+
return;
239+
}
240+
241+
handlePrestoGuidedClearResults();
242+
243+
updateSearchJobId(SEARCH_STATE_DEFAULT.searchJobId);
244+
updateAggregationJobId(SEARCH_STATE_DEFAULT.aggregationJobId);
245+
updateNumSearchResultsTable(SEARCH_STATE_DEFAULT.numSearchResultsTable);
246+
updateNumSearchResultsTimeline(SEARCH_STATE_DEFAULT.numSearchResultsTimeline);
247+
updateNumSearchResultsMetadata(SEARCH_STATE_DEFAULT.numSearchResultsMetadata);
248+
249+
updateSearchUiState(SEARCH_UI_STATE.DEFAULT);
250+
251+
updateErrorMsg(PRESTO_SEARCH_STATE_DEFAULT.errorMsg);
252+
updateErrorName(PRESTO_SEARCH_STATE_DEFAULT.errorName);
253+
updateCachedGuidedSearchQueryString(PRESTO_SEARCH_STATE_DEFAULT.cachedGuidedSearchQueryString);
254+
updateQueryDrawerOpen(PRESTO_SEARCH_STATE_DEFAULT.queryDrawerOpen);
255+
};
256+
212257
export {
213258
buildPrestoGuidedQueries,
214259
handlePrestoGuidedQueryCancel,
215260
handlePrestoGuidedQuerySubmit,
261+
handleSwitchToFreeform,
216262
};

components/webui/client/src/pages/SearchPage/SearchControls/Presto/presto-search-requests.ts

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import {
99
submitQuery,
1010
} from "../../../../api/presto-search";
1111
import useSearchStore, {SEARCH_STATE_DEFAULT} from "../../SearchState";
12+
import usePrestoSearchState from "../../SearchState/Presto";
13+
import {PRESTO_SQL_INTERFACE} from "../../SearchState/Presto/typings";
1214
import {SEARCH_UI_STATE} from "../../SearchState/typings";
1315

1416

@@ -107,7 +109,36 @@ const handlePrestoQueryCancel = (payload: PrestoQueryJob) => {
107109
});
108110
};
109111

112+
/**
113+
* Handles switching to guided SQL interface by clearing results and resetting states.
114+
*/
115+
const handleSwitchToGuided = () => {
116+
const {
117+
searchUiState,
118+
updateSearchUiState,
119+
updateSearchJobId,
120+
updateNumSearchResultsTable,
121+
updateNumSearchResultsMetadata,
122+
} = useSearchStore.getState();
123+
const {setSqlInterface} = usePrestoSearchState.getState();
124+
125+
setSqlInterface(PRESTO_SQL_INTERFACE.GUIDED);
126+
127+
if (searchUiState === SEARCH_UI_STATE.DEFAULT) {
128+
return;
129+
}
130+
131+
handlePrestoClearResults();
132+
133+
updateSearchJobId(SEARCH_STATE_DEFAULT.searchJobId);
134+
updateNumSearchResultsTable(SEARCH_STATE_DEFAULT.numSearchResultsTable);
135+
updateNumSearchResultsMetadata(SEARCH_STATE_DEFAULT.numSearchResultsMetadata);
136+
137+
updateSearchUiState(SEARCH_UI_STATE.DEFAULT);
138+
};
139+
110140
export {
111141
handlePrestoQueryCancel,
112142
handlePrestoQuerySubmit,
143+
handleSwitchToGuided,
113144
};

components/webui/client/src/pages/SearchPage/SearchState/useUpdateStateWithMetadata.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ const useUpdateStateWithMetadata = () => {
2929
const {
3030
updateNumSearchResultsMetadata,
3131
updateSearchUiState,
32+
searchUiState,
3233
} = useSearchStore();
3334
const {updateErrorMsg, updateErrorName, sqlInterface} = usePrestoSearchState();
3435
const resultsMetadata = useResultsMetadata();
@@ -38,6 +39,10 @@ const useUpdateStateWithMetadata = () => {
3839
return;
3940
}
4041

42+
if (searchUiState === SEARCH_UI_STATE.DEFAULT) {
43+
return;
44+
}
45+
4146
if ("undefined" !== typeof resultsMetadata.numTotalResults) {
4247
updateNumSearchResultsMetadata(resultsMetadata.numTotalResults);
4348
}
@@ -84,6 +89,7 @@ const useUpdateStateWithMetadata = () => {
8489
updateNumSearchResultsMetadata,
8590
updateErrorMsg,
8691
updateErrorName,
92+
searchUiState,
8793
updateSearchUiState,
8894
sqlInterface,
8995
]);

0 commit comments

Comments
 (0)