Skip to content

Commit 761ec12

Browse files
authored
feat(webui): Replace FROM input on guided Presto UI with a dataset selector. (#1314)
1 parent 41f5c3c commit 761ec12

File tree

3 files changed

+78
-86
lines changed

3 files changed

+78
-86
lines changed
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
import {useEffect} from "react";
2+
import {useQuery} from "@tanstack/react-query";
3+
import {message, Select, SelectProps} from "antd";
4+
import useSearchStore from "../../SearchState/index";
5+
import {SEARCH_UI_STATE} from "../../SearchState/typings";
6+
import {fetchDatasetNames} from "./sql";
7+
8+
const DatasetSelect = (selectProps: SelectProps) => {
9+
const dataset = useSearchStore((state) => state.selectDataset);
10+
const updateDataset = useSearchStore((state) => state.updateSelectDataset);
11+
const searchUiState = useSearchStore((state) => state.searchUiState);
12+
13+
const [messageApi, contextHolder] = message.useMessage();
14+
15+
const {data, isPending, isSuccess, error} = useQuery({
16+
queryKey: ["datasets"],
17+
queryFn: fetchDatasetNames,
18+
});
19+
20+
useEffect(() => {
21+
if (isSuccess) {
22+
if ("undefined" !== typeof data[0] && null === dataset) {
23+
updateDataset(data[0]);
24+
}
25+
}
26+
}, [isSuccess, data, dataset, updateDataset]);
27+
28+
useEffect(() => {
29+
if (error) {
30+
messageApi.error({
31+
key: "fetchError",
32+
content: "Error fetching datasets.",
33+
});
34+
}
35+
}, [error, messageApi]);
36+
37+
useEffect(() => {
38+
if (isSuccess && 0 === data.length) {
39+
messageApi.warning({
40+
key: "noData",
41+
content: "No data has been ingested. Please ingest data to search.",
42+
});
43+
updateDataset(null);
44+
}
45+
}, [data, isSuccess, messageApi, updateDataset]);
46+
47+
const handleDatasetChange = (value: string) => {
48+
updateDataset(value);
49+
};
50+
51+
return (
52+
<>
53+
{contextHolder}
54+
<Select
55+
loading={isPending}
56+
options={(data || []).map((option) => ({label: option, value: option}))}
57+
value={dataset}
58+
size="middle"
59+
disabled={
60+
searchUiState === SEARCH_UI_STATE.QUERY_ID_PENDING ||
61+
searchUiState === SEARCH_UI_STATE.QUERYING
62+
}
63+
onChange={handleDatasetChange}
64+
{...selectProps}
65+
/>
66+
</>
67+
);
68+
};
69+
70+
export default DatasetSelect;

components/webui/client/src/pages/SearchPage/SearchControls/Dataset/index.tsx

Lines changed: 2 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,6 @@
1-
import {useEffect} from "react";
2-
3-
import {useQuery} from "@tanstack/react-query";
4-
import {
5-
message,
6-
Select,
7-
} from "antd";
8-
91
import InputLabel from "../../../../components/InputLabel";
10-
import useSearchStore from "../../SearchState/index";
11-
import {SEARCH_UI_STATE} from "../../SearchState/typings";
122
import styles from "./index.module.css";
13-
import {fetchDatasetNames} from "./sql";
3+
import DatasetSelect from "./DatasetSelect";
144

155

166
/**
@@ -19,80 +9,10 @@ import {fetchDatasetNames} from "./sql";
199
* @return
2010
*/
2111
const Dataset = () => {
22-
const dataset = useSearchStore((state) => state.selectDataset);
23-
const updateDataset = useSearchStore((state) => state.updateSelectDataset);
24-
const searchUiState = useSearchStore((state) => state.searchUiState);
25-
26-
const [messageApi, contextHolder] = message.useMessage();
27-
28-
const {data, isPending, isSuccess, error} = useQuery({
29-
queryKey: ["datasets"],
30-
queryFn: fetchDatasetNames,
31-
});
32-
33-
// Update the selected dataset to the first dataset in the response. The dataset is only
34-
// updated if it isn't already set (i.e., on initial response).
35-
useEffect(() => {
36-
if (isSuccess) {
37-
if ("undefined" !== typeof data[0] && null === dataset) {
38-
updateDataset(data[0]);
39-
}
40-
}
41-
}, [isSuccess,
42-
data,
43-
dataset,
44-
updateDataset]);
45-
46-
// Display error message if the query fails since user querying is disabled if no datasets.
47-
useEffect(() => {
48-
if (error) {
49-
messageApi.error({
50-
key: "fetchError",
51-
content: "Error fetching datasets.",
52-
});
53-
}
54-
}, [error,
55-
messageApi]);
56-
57-
// Display warning message if response empty since user querying is disabled if no
58-
// datasets.
59-
useEffect(() => {
60-
if (isSuccess && 0 === data.length) {
61-
messageApi.warning({
62-
key: "noData",
63-
content: "No data has been ingested. Please ingest data to search.",
64-
});
65-
66-
// If all datasets were deleted, the dataset state must be reset to null to disable
67-
// submit button since dataset option required to query clp-s.
68-
updateDataset(null);
69-
}
70-
}, [data,
71-
isSuccess,
72-
messageApi,
73-
updateDataset]);
74-
75-
const handleDatasetChange = (value: string) => {
76-
updateDataset(value);
77-
};
78-
7912
return (
8013
<div className={styles["datasetContainer"]}>
81-
{contextHolder}
8214
<InputLabel>Dataset</InputLabel>
83-
<Select
84-
className={styles["select"] || ""}
85-
loading={isPending}
86-
options={(data || []).map((option) => ({label: option, value: option}))}
87-
placeholder={"None"}
88-
showSearch={true}
89-
size={"middle"}
90-
value={dataset}
91-
disabled={
92-
searchUiState === SEARCH_UI_STATE.QUERY_ID_PENDING ||
93-
searchUiState === SEARCH_UI_STATE.QUERYING
94-
}
95-
onChange={handleDatasetChange}/>
15+
<DatasetSelect className={styles["select"] || ""} />
9616
</div>
9717
);
9818
};

components/webui/client/src/pages/SearchPage/SearchControls/Presto/GuidedControls/From.tsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import InputLabel from "../../../../../components/InputLabel";
2-
import SqlInput from "../../../../../components/SqlInput";
2+
import DatasetSelect from "../../Dataset/DatasetSelect";
33
import guidedGrid from "./index.module.css";
44

55

@@ -11,9 +11,11 @@ import guidedGrid from "./index.module.css";
1111
const From = () => (
1212
<div className={guidedGrid["from"]}>
1313
<InputLabel>FROM</InputLabel>
14-
<SqlInput
15-
className={guidedGrid["noLeftBorderRadius"] || ""}
16-
disabled={false}/>
14+
<DatasetSelect
15+
className={
16+
`${guidedGrid["noLeftBorderRadiusSelect"]} ${
17+
guidedGrid["widthSelect"]}`
18+
}/>
1719
</div>
1820
);
1921

0 commit comments

Comments
 (0)