This repository has been archived by the owner on Mar 21, 2023. It is now read-only.
/
PipelineDetailsPage.jsx
126 lines (106 loc) · 3.88 KB
/
PipelineDetailsPage.jsx
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
123
124
125
126
import React from 'react';
import Reflux from 'reflux';
import { Row, Col, Button } from 'react-bootstrap';
import { LinkContainer } from 'react-router-bootstrap';
import { PageHeader, Spinner } from 'components/common';
import Pipeline from './Pipeline';
import NewPipeline from './NewPipeline';
import SourceGenerator from 'logic/SourceGenerator';
import ObjectUtils from 'util/ObjectUtils';
import PipelinesActions from 'pipelines/PipelinesActions';
import PipelinesStore from 'pipelines/PipelinesStore';
import RulesStore from 'rules/RulesStore';
import Routes from 'routing/Routes';
function filterPipeline(state) {
return state.pipelines ? state.pipelines.filter(p => p.id === this.props.params.pipelineId)[0] : undefined;
}
const PipelineDetailsPage = React.createClass({
propTypes: {
params: React.PropTypes.object.isRequired,
history: React.PropTypes.object.isRequired,
},
mixins: [Reflux.connectFilter(PipelinesStore, 'pipeline', filterPipeline)],
componentDidMount() {
if (!this._isNewPipeline(this.props.params.pipelineId)) {
PipelinesActions.get(this.props.params.pipelineId);
}
RulesStore.list();
},
componentWillReceiveProps(nextProps) {
if (!this._isNewPipeline(nextProps.params.pipelineId)) {
PipelinesActions.get(nextProps.params.pipelineId);
}
},
_onStagesChange(newStages, callback) {
const newPipeline = ObjectUtils.clone(this.state.pipeline);
newPipeline.stages = newStages;
const pipelineSource = SourceGenerator.generatePipeline(newPipeline);
newPipeline.source = pipelineSource;
PipelinesActions.update(newPipeline);
if (typeof callback === 'function') {
callback();
}
},
_savePipeline(pipeline, callback) {
const requestPipeline = ObjectUtils.clone(pipeline);
requestPipeline.source = SourceGenerator.generatePipeline(pipeline);
let promise;
if (requestPipeline.id) {
promise = PipelinesActions.update(requestPipeline);
} else {
promise = PipelinesActions.save(requestPipeline);
}
promise.then(p => callback(p));
},
_isNewPipeline(pipelineId) {
return pipelineId === 'new';
},
_isLoading() {
return !this._isNewPipeline(this.props.params.pipelineId) && !this.state.pipeline;
},
render() {
if (this._isLoading()) {
return <Spinner />;
}
let title;
if (this._isNewPipeline(this.props.params.pipelineId)) {
title = 'New pipeline';
} else {
title = <span>Pipeline <em>{this.state.pipeline.title}</em></span>;
}
let content;
if (this._isNewPipeline(this.props.params.pipelineId)) {
content = <NewPipeline onChange={this._savePipeline} history={this.props.history} />;
} else {
content = <Pipeline pipeline={this.state.pipeline} rules={this.state.rules} onStagesChange={this._onStagesChange} onPipelineChange={this._savePipeline} />;
}
return (
<div>
<PageHeader title={title} experimental>
<span>
Pipelines let you transform and process messages coming from streams. Pipelines consist of stages where{' '}
rules are evaluated and applied. Messages can go through one or more stages.
</span>
<span>
After each stage is completed, you can decide if messages matching all or one of the rules continue to the next stage.
</span>
<span>
<LinkContainer to={Routes.pluginRoute('SYSTEM_PIPELINES')}>
<Button bsStyle="info">Manage connections</Button>
</LinkContainer>
{' '}
<LinkContainer to={Routes.pluginRoute('SYSTEM_PIPELINES_RULES')}>
<Button bsStyle="info">Manage rules</Button>
</LinkContainer>
</span>
</PageHeader>
<Row className="content">
<Col md={12}>
{content}
</Col>
</Row>
</div>
);
},
});
export default PipelineDetailsPage;