-
Notifications
You must be signed in to change notification settings - Fork 3.8k
/
Copy pathsqlActivityContentRoot.tsx
58 lines (51 loc) · 1.54 KB
/
sqlActivityContentRoot.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
// Copyright 2022 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, { useMemo } from "react";
import { viewAttr, tabAttr } from "src/util";
import { useHistory } from "react-router-dom";
import { useQueryParmeters } from "../hooks";
import {
SelectWithDescription,
Option,
} from "src/selectWithDescription/selectWithDescription";
export type SQLActivityContentRootProps = {
options: Option[];
};
export const SQLActivityContentRoot = ({
options,
}: SQLActivityContentRootProps): React.ReactElement => {
const history = useHistory();
const searchParams = useQueryParmeters();
const viewValue = searchParams.get(viewAttr) || options[0].value;
const onViewChange = (view: string): void => {
const newParams = new URLSearchParams({
[viewAttr]: view,
[tabAttr]: searchParams.get(tabAttr),
});
history.push({
...history.location,
search: newParams.toString(),
});
};
const Content = useMemo(() => {
return options.find((option: Option) => option.value === viewValue)
.component;
}, [options, viewValue]);
return (
<div>
<SelectWithDescription
options={options}
value={viewValue}
onChange={onViewChange}
/>
<Content />
</div>
);
};