-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathExperimentFlowContainer.js
122 lines (100 loc) · 3.59 KB
/
ExperimentFlowContainer.js
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
import React, { useEffect } from 'react';
import { useDispatch } from 'react-redux';
import { useParams } from 'react-router-dom';
import { useStoreState } from 'react-flow-renderer';
import {
OPERATOR_TYPES,
deselectOperator,
saveOperatorPosition,
saveOperatorDependencies,
selectOperatorAndGetData,
removeOperatorRequest,
} from 'store/operator';
import { OPERATORS_TYPES } from 'store/operators';
import { useDeepEqualSelector, useIsLoading } from 'hooks';
import { hideLogsPanel, showLogsPanel } from 'store/ui/actions';
import { fetchExperimentRunStatusRequest } from 'store/projects/experiments/experimentRuns/actions';
import ExperimentFlow from './index';
const operatorsSelector = ({ operatorsReducer }) => {
return operatorsReducer;
};
const arrowConfigsSelector = ({ uiReducer }) => {
return uiReducer.operatorsDependencies;
};
const isShowingLogsPanelSelector = ({ uiReducer }) => {
return uiReducer.logsPanel.isShowing;
};
const numberOfLogsSelector = ({ experimentLogsReducer }) => {
return experimentLogsReducer.logs.length;
};
const operatorSelector = ({ operatorReducer }) => {
return operatorReducer;
};
const ExperimentFlowContainer = () => {
const dispatch = useDispatch();
const { projectId, experimentId } = useParams();
const operators = useDeepEqualSelector(operatorsSelector);
const operator = useDeepEqualSelector(operatorSelector);
const arrowConfigs = useDeepEqualSelector(arrowConfigsSelector);
const numberOfLogs = useDeepEqualSelector(numberOfLogsSelector);
const isShowingLogsPanel = useDeepEqualSelector(isShowingLogsPanelSelector);
const transformations = useStoreState((flowStore) => flowStore.transform);
const flowLoading = useIsLoading(OPERATORS_TYPES.FETCH_OPERATORS_REQUEST);
const operatorLoading = useIsLoading(OPERATOR_TYPES.CREATE_OPERATOR_REQUEST);
const selectOperatorHandler = (selectedOperator) => {
dispatch(
selectOperatorAndGetData(projectId, experimentId, selectedOperator)
);
};
const handleSavePosition = (operatorId, position) => {
dispatch(
saveOperatorPosition(projectId, experimentId, operatorId, position)
);
};
const handleRemoveOperator = () => {
dispatch(removeOperatorRequest(projectId, experimentId, operator));
};
const handleSaveDependencies = (operatorId, dependencies) => {
dispatch(
saveOperatorDependencies(
projectId,
experimentId,
operatorId,
dependencies,
operators
)
);
};
const handleDeselectOperator = () => {
dispatch(deselectOperator());
};
const handleToggleLogsPanel = () => {
if (isShowingLogsPanel) dispatch(hideLogsPanel());
else dispatch(showLogsPanel());
};
useEffect(() => {
dispatch(fetchExperimentRunStatusRequest(projectId, experimentId));
const polling = setInterval(() => {
dispatch(fetchExperimentRunStatusRequest(projectId, experimentId));
}, 5000);
return () => clearInterval(polling);
}, [dispatch, experimentId, projectId]);
return (
<ExperimentFlow
tasks={operators}
flowLoading={flowLoading}
numberOfLogs={numberOfLogs}
arrowConfigs={arrowConfigs}
operatorLoading={operatorLoading}
transformations={transformations}
isLogsPanelSelected={isShowingLogsPanel}
handleSavePosition={handleSavePosition}
handleTaskBoxClick={selectOperatorHandler}
handleToggleLogsPanel={handleToggleLogsPanel}
handleSaveDependencies={handleSaveDependencies}
handleDeselectOperator={handleDeselectOperator}
handleRemoveOperator={handleRemoveOperator}
/>
);
};
export default ExperimentFlowContainer;