-
Notifications
You must be signed in to change notification settings - Fork 3.7k
/
searchCriteria.tsx
126 lines (120 loc) · 3.55 KB
/
searchCriteria.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
// Copyright 2021 The Cockroach Authors.
//
// Use of this software is governed by the Business Source License
// included in the file licenses/BSL.txt.
//
// As of the Change Date specified in that file, in accordance with
// the Business Source License, use of this software will be governed
// by the Apache License, Version 2.0, included in the file
// licenses/APL.txt.
import React from "react";
import classNames from "classnames/bind";
import styles from "./searchCriteria.module.scss";
import {
Button,
commonStyles,
PageConfig,
PageConfigItem,
selectCustomStyles,
TimeScale,
timeScale1hMinOptions,
TimeScaleDropdown,
} from "src";
import { applyBtn } from "../queryFilter/filterClasses";
import Select from "react-select";
import { limitOptions } from "../util/sqlActivityConstants";
import { SqlStatsSortType } from "src/api/statementsApi";
const cx = classNames.bind(styles);
type SortOption = {
label: string;
value: SqlStatsSortType;
};
export interface SearchCriteriaProps {
sortOptions: SortOption[];
currentScale: TimeScale;
topValue: number;
byValue: SqlStatsSortType;
onChangeTimeScale: (ts: TimeScale) => void;
onChangeTop: (top: number) => void;
onChangeBy: (by: SqlStatsSortType) => void;
onApply: () => void;
}
export function SearchCriteria(props: SearchCriteriaProps): React.ReactElement {
const {
topValue,
byValue,
currentScale,
onChangeTop,
onChangeBy,
onChangeTimeScale,
sortOptions,
} = props;
const customStyles = { ...selectCustomStyles };
customStyles.indicatorSeparator = (provided: any) => ({
...provided,
display: "none",
});
const customStylesTop = { ...customStyles };
customStylesTop.container = (provided: any) => ({
...provided,
width: "80px",
border: "none",
});
const customStylesBy = { ...customStyles };
customStylesBy.container = (provided: any) => ({
...provided,
width: "170px",
border: "none",
});
return (
<div className={cx("search-area")}>
<h5 className={commonStyles("base-heading")}>Search Criteria</h5>
<PageConfig className={cx("top-area")}>
<PageConfigItem>
<label>
<span className={cx("label")}>Top</span>
<Select
options={limitOptions}
value={limitOptions.filter(top => top.value === topValue)}
onChange={event => onChangeTop(event.value)}
styles={customStylesTop}
/>
</label>
</PageConfigItem>
<PageConfigItem>
<label>
<span className={cx("label")}>By</span>
<Select
options={sortOptions}
value={sortOptions.filter(
(top: SortOption) => top.value === byValue,
)}
onChange={event => onChangeBy(event.value as SqlStatsSortType)}
styles={customStylesBy}
/>
</label>
</PageConfigItem>
<PageConfigItem>
<label>
<span className={cx("label")}>Time Range</span>
<TimeScaleDropdown
options={timeScale1hMinOptions}
currentScale={currentScale}
setTimeScale={onChangeTimeScale}
className={cx("timescale-small")}
/>
</label>
</PageConfigItem>
<PageConfigItem>
<Button
className={`${applyBtn.btn} ${cx("margin-top-btn")}`}
textAlign="center"
onClick={props.onApply}
>
Apply
</Button>
</PageConfigItem>
</PageConfig>
</div>
);
}