Skip to content

Commit b29af06

Browse files
committed
refactor(TopShards): migrate reducer to ts
1 parent 8cda003 commit b29af06

File tree

3 files changed

+53
-20
lines changed

3 files changed

+53
-20
lines changed

src/containers/Tenant/Diagnostics/TopShards/TopShards.tsx

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -61,13 +61,12 @@ function stringToDataTableSortOrder(value: string): SortOrder[] | undefined {
6161
}
6262

6363
function stringToQuerySortOrder(value: string) {
64-
return (
65-
value &&
66-
value.split(',').map((columnId) => ({
67-
columnId,
68-
order: 'DESC',
69-
}))
70-
);
64+
return value
65+
? value.split(',').map((columnId) => ({
66+
columnId,
67+
order: 'DESC',
68+
}))
69+
: undefined;
7170
}
7271

7372
function dataTableToStringSortOrder(value: SortOrder | SortOrder[] = []) {

src/store/reducers/shardsWorkload.js renamed to src/store/reducers/shardsWorkload.ts

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,35 @@
1+
import type {Reducer} from 'redux';
2+
13
import '../../services/api';
4+
import type {IShardsWorkloadAction, IShardsWorkloadState} from '../../types/store/shardsWorkload';
25

36
import {parseQueryAPIExecuteResponse} from '../../utils/query';
47

58
import {createRequestActionTypes, createApiRequest} from '../utils';
69

7-
const SEND_SHARD_QUERY = createRequestActionTypes('query', 'SEND_SHARD_QUERY');
10+
export const SEND_SHARD_QUERY = createRequestActionTypes('query', 'SEND_SHARD_QUERY');
811
const SET_SHARD_QUERY_OPTIONS = 'query/SET_SHARD_QUERY_OPTIONS';
912

1013
const initialState = {
1114
loading: false,
1215
wasLoaded: false,
1316
};
1417

15-
function formatSortOrder({columnId, order}) {
18+
export interface SortOrder {
19+
columnId: string;
20+
order: string;
21+
}
22+
23+
function formatSortOrder({columnId, order}: SortOrder) {
1624
return `${columnId} ${order}`;
1725
}
1826

19-
function createShardQuery(path, sortOrder, tenantName) {
20-
const orderBy = Array.isArray(sortOrder) ?
21-
`ORDER BY ${sortOrder.map(formatSortOrder).join(', ')}` :
22-
'';
27+
function createShardQuery(path: string, sortOrder?: SortOrder[], tenantName?: string) {
28+
const orderBy = sortOrder ? `ORDER BY ${sortOrder.map(formatSortOrder).join(', ')}` : '';
2329

24-
const pathSelect = tenantName ?
25-
`CAST(SUBSTRING(CAST(Path AS String), ${tenantName.length}) AS Utf8) AS Path` :
26-
'Path';
30+
const pathSelect = tenantName
31+
? `CAST(SUBSTRING(CAST(Path AS String), ${tenantName.length}) AS Utf8) AS Path`
32+
: 'Path';
2733

2834
return `SELECT
2935
${pathSelect},
@@ -40,7 +46,10 @@ LIMIT 20`;
4046

4147
const queryAction = 'execute-scan';
4248

43-
const shardsWorkload = (state = initialState, action) => {
49+
const shardsWorkload: Reducer<IShardsWorkloadState, IShardsWorkloadAction> = (
50+
state = initialState,
51+
action,
52+
) => {
4453
switch (action.type) {
4554
case SEND_SHARD_QUERY.REQUEST: {
4655
return {
@@ -76,7 +85,13 @@ const shardsWorkload = (state = initialState, action) => {
7685
}
7786
};
7887

79-
export const sendShardQuery = ({database, path = '', sortOrder}) => {
88+
interface SendShardQueryParams {
89+
database?: string;
90+
path?: string;
91+
sortOrder?: SortOrder[];
92+
}
93+
94+
export const sendShardQuery = ({database, path = '', sortOrder}: SendShardQueryParams) => {
8095
return createApiRequest({
8196
request: window.api.sendQuery({
8297
schema: 'modern',
@@ -91,11 +106,11 @@ export const sendShardQuery = ({database, path = '', sortOrder}) => {
91106
});
92107
};
93108

94-
export function setShardQueryOptions(options) {
109+
export function setShardQueryOptions(options: Partial<IShardsWorkloadState>) {
95110
return {
96111
type: SET_SHARD_QUERY_OPTIONS,
97112
data: options,
98-
};
113+
} as const;
99114
}
100115

101116
export default shardsWorkload;

src/types/store/shardsWorkload.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import {SEND_SHARD_QUERY, setShardQueryOptions} from '../../store/reducers/shardsWorkload';
2+
import type {ApiRequestAction} from '../../store/utils';
3+
import type {IResponseError} from '../api/error';
4+
import type {IQueryResult} from './query';
5+
6+
export interface IShardsWorkloadState {
7+
loading: boolean;
8+
wasLoaded: boolean;
9+
data?: IQueryResult;
10+
error?: IResponseError;
11+
}
12+
13+
export type IShardsWorkloadAction =
14+
| ApiRequestAction<typeof SEND_SHARD_QUERY, IQueryResult, IResponseError>
15+
| ReturnType<typeof setShardQueryOptions>;
16+
17+
export interface IShardsWorkloadRootStateSlice {
18+
shardsWorkload: IShardsWorkloadState;
19+
}

0 commit comments

Comments
 (0)