Skip to content

Commit e6c691c

Browse files
refactor(Nodes): migrate reducer to ts
1 parent b29af06 commit e6c691c

File tree

5 files changed

+61
-22
lines changed

5 files changed

+61
-22
lines changed

src/components/UptimeFIlter/UptimeFilter.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,14 @@ import {RadioButton} from '@gravity-ui/uikit';
33
import {NodesUptimeFilterValues, NodesUptimeFilterTitles} from '../../utils/nodes';
44

55
interface UptimeFilterProps {
6-
value: keyof typeof NodesUptimeFilterValues;
6+
value: NodesUptimeFilterValues;
77
onChange: (value: string) => void;
8+
className?: string;
89
}
910

10-
export const UptimeFilter = ({value, onChange}: UptimeFilterProps) => {
11+
export const UptimeFilter = ({value, onChange, className}: UptimeFilterProps) => {
1112
return (
12-
<RadioButton value={value} onUpdate={onChange}>
13+
<RadioButton value={value} onUpdate={onChange} className={className}>
1314
<RadioButton.Option value={NodesUptimeFilterValues.All}>
1415
{NodesUptimeFilterTitles[NodesUptimeFilterValues.All]}
1516
</RadioButton.Option>

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

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
1-
import {createRequestActionTypes, createApiRequest} from '../utils';
1+
import type {Reducer} from 'redux';
2+
23
import '../../services/api';
34
import {NodesUptimeFilterValues} from '../../utils/nodes';
5+
import {INodesAction, INodesRootStateSlice, INodesState} from '../../types/store/nodes';
6+
7+
import {createRequestActionTypes, createApiRequest} from '../utils';
48

5-
const FETCH_NODES = createRequestActionTypes('nodes', 'FETCH_NODES');
9+
export const FETCH_NODES = createRequestActionTypes('nodes', 'FETCH_NODES');
610

711
const CLEAR_NODES = 'nodes/CLEAR_NODES';
812
const SET_NODES_UPTIME_FILTER = 'nodes/SET_NODES_UPTIME_FILTER';
@@ -14,13 +18,12 @@ const initialState = {
1418
nodesUptimeFilter: NodesUptimeFilterValues.All,
1519
};
1620

17-
const nodes = (state = initialState, action) => {
21+
const nodes: Reducer<INodesState, INodesAction> = (state = initialState, action) => {
1822
switch (action.type) {
1923
case FETCH_NODES.REQUEST: {
2024
return {
2125
...state,
2226
loading: true,
23-
requestTime: new Date().getTime(),
2427
};
2528
}
2629
case FETCH_NODES.SUCCESS: {
@@ -45,13 +48,15 @@ const nodes = (state = initialState, action) => {
4548
loading: true,
4649
data: undefined,
4750
wasLoaded: false,
48-
requestTime: new Date().getTime(),
4951
error: undefined,
5052
};
5153
}
5254

5355
case SET_NODES_UPTIME_FILTER: {
54-
return {...state, nodesUptimeFilter: action.data};
56+
return {
57+
...state,
58+
nodesUptimeFilter: action.data,
59+
};
5560
}
5661
case SET_DATA_WAS_NOT_LOADED: {
5762
return {
@@ -64,26 +69,27 @@ const nodes = (state = initialState, action) => {
6469
}
6570
};
6671

67-
export function getNodes(path) {
72+
export function getNodes(path: string) {
6873
return createApiRequest({
6974
request: window.api.getNodes(path),
7075
actions: FETCH_NODES,
7176
});
7277
}
7378

74-
export const clearNodes = () => ({type: CLEAR_NODES});
79+
export const clearNodes = () => ({type: CLEAR_NODES} as const);
7580

76-
export const setNodesUptimeFilter = (value) => ({
77-
type: SET_NODES_UPTIME_FILTER,
78-
data: value,
79-
});
81+
export const setNodesUptimeFilter = (value: NodesUptimeFilterValues) =>
82+
({
83+
type: SET_NODES_UPTIME_FILTER,
84+
data: value,
85+
} as const);
8086

8187
export const setDataWasNotLoaded = () => {
8288
return {
8389
type: SET_DATA_WAS_NOT_LOADED,
84-
};
90+
} as const;
8591
};
8692

87-
export const getNodesUptimeFilter = (state) => state.nodes.nodesUptimeFilter;
93+
export const getNodesUptimeFilter = (state: INodesRootStateSlice) => state.nodes.nodesUptimeFilter;
8894

8995
export default nodes;

src/types/api/nodes.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export interface TNodesInfo {
1212
FoundNodes: string;
1313
}
1414

15-
interface TNodeInfo {
15+
export interface TNodeInfo {
1616
NodeId: number;
1717
SystemState: TSystemStateInfo;
1818
PDisks?: TPDiskStateInfo[];

src/types/store/nodes.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import {NodesUptimeFilterValues} from '../../utils/nodes';
2+
import {
3+
FETCH_NODES,
4+
clearNodes,
5+
setDataWasNotLoaded,
6+
setNodesUptimeFilter,
7+
} from '../../store/reducers/nodes';
8+
import {ApiRequestAction} from '../../store/utils';
9+
import {IResponseError} from '../api/error';
10+
import {TNodesInfo} from '../api/nodes';
11+
12+
export interface INodesState {
13+
loading: boolean;
14+
wasLoaded: boolean;
15+
nodesUptimeFilter: NodesUptimeFilterValues;
16+
data?: TNodesInfo;
17+
error?: IResponseError;
18+
}
19+
20+
type INodesApiRequestAction = ApiRequestAction<typeof FETCH_NODES, TNodesInfo, IResponseError>;
21+
22+
export type INodesAction =
23+
| INodesApiRequestAction
24+
| (
25+
| ReturnType<typeof clearNodes>
26+
| ReturnType<typeof setDataWasNotLoaded>
27+
| ReturnType<typeof setNodesUptimeFilter>
28+
);
29+
30+
export interface INodesRootStateSlice {
31+
nodes: INodesState;
32+
}

src/utils/nodes.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
export const NodesUptimeFilterValues = {
2-
All: 'All',
3-
SmallUptime: 'SmallUptime',
4-
};
1+
export enum NodesUptimeFilterValues {
2+
'All' = 'All',
3+
'SmallUptime' = 'SmallUptime',
4+
}
55

66
export const NodesUptimeFilterTitles = {
77
[NodesUptimeFilterValues.All]: 'All',

0 commit comments

Comments
 (0)