-
Notifications
You must be signed in to change notification settings - Fork 3.8k
/
sessionsPage.tsx
100 lines (90 loc) · 3.06 KB
/
sessionsPage.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
// Copyright 2020 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 { Pick } from "src/util/pick";
import { RouteComponentProps, withRouter } from "react-router-dom";
import { connect } from "react-redux";
import { AdminUIState } from "src/redux/state";
import { LocalSetting } from "src/redux/localsettings";
import { CachedDataReducerState, refreshSessions } from "src/redux/apiReducers";
import { createSelector } from "reselect";
import { SessionsResponseMessage } from "src/util/api";
import {
defaultFilters,
Filters,
SessionsPage,
} from "@cockroachlabs/cluster-ui";
import {
terminateQueryAction,
terminateSessionAction,
} from "src/redux/sessions/sessionsSagas";
import { nodeRegionsByIDSelector } from "oss/src/redux/nodes";
type SessionsState = Pick<AdminUIState, "cachedData", "sessions">;
export const selectSessions = createSelector(
(state: SessionsState) => state.cachedData.sessions,
(_state: SessionsState, props: RouteComponentProps) => props,
(
state: CachedDataReducerState<SessionsResponseMessage>,
_: RouteComponentProps<any>,
) => {
if (!state.data) {
return null;
}
return state.data.sessions.map(session => {
return { session };
});
},
);
export const sortSettingLocalSetting = new LocalSetting(
"sortSetting/SessionsPage",
(state: AdminUIState) => state.localSettings,
{ ascending: false, columnTitle: "statementAge" },
);
export const sessionColumnsLocalSetting = new LocalSetting(
"showColumns/SessionsPage",
(state: AdminUIState) => state.localSettings,
null,
);
export const filtersLocalSetting = new LocalSetting(
"filters/SessionsPage",
(state: AdminUIState) => state.localSettings,
defaultFilters,
);
const SessionsPageConnected = withRouter(
connect(
(state: AdminUIState, props: RouteComponentProps) => ({
columns: sessionColumnsLocalSetting.selectorToArray(state),
filters: filtersLocalSetting.selector(state),
nodeRegions: nodeRegionsByIDSelector(state),
sessions: selectSessions(state, props),
sessionsError: state.cachedData.sessions.lastError,
sortSetting: sortSettingLocalSetting.selector(state),
}),
{
refreshSessions,
cancelSession: terminateSessionAction,
cancelQuery: terminateQueryAction,
onSortingChange: (
_tableName: string,
columnName: string,
ascending: boolean,
) =>
sortSettingLocalSetting.set({
ascending: ascending,
columnTitle: columnName,
}),
onColumnsChange: (value: string[]) =>
sessionColumnsLocalSetting.set(
value.length === 0 ? " " : value.join(","),
),
onFilterChange: (filters: Filters) => filtersLocalSetting.set(filters),
},
)(SessionsPage),
);
export default SessionsPageConnected;