Skip to content

Commit fef0c7a

Browse files
authored
Merge pull request #345 from mekanix/feature/update-dragged-services
Update cluster's services on drag and drop
2 parents 75c6f57 + 6e05bf8 commit fef0c7a

File tree

5 files changed

+44
-14
lines changed

5 files changed

+44
-14
lines changed

src/components/molecules/dragable-service/actions/add.js

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
import { createAction } from 'redux-actions';
22
import { fetch } from '../../../../utils';
33
import { API_URL } from '../../../../backend_url';
4-
import { ADD_SERVICE } from '../constants';
4+
import { CLUSTER_SERVICE_ADD } from '../constants';
55

6-
export const reset = createAction(ADD_SERVICE, () => ({
6+
export const reset = createAction(CLUSTER_SERVICE_ADD, () => ({
77
status: 'initial',
88
}));
99

10-
export const begin = createAction(ADD_SERVICE, () => ({
10+
export const begin = createAction(CLUSTER_SERVICE_ADD, () => ({
1111
status: 'pending',
1212
}));
1313

14-
export const success = createAction(ADD_SERVICE, service => ({
14+
export const success = createAction(CLUSTER_SERVICE_ADD, service => ({
1515
service,
1616
status: 'success',
1717
}));
1818

19-
export const fail = createAction(ADD_SERVICE, error => ({
19+
export const fail = createAction(CLUSTER_SERVICE_ADD, error => ({
2020
status: 'error',
2121
error,
2222
}));
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export const ADD_SERVICE = 'ADD_SERVICE';
1+
export const CLUSTER_SERVICE_ADD = 'CLUSTER_SERVICE_ADD';

src/components/molecules/dragable-service/reducers/add.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import { ADD_SERVICE } from '../constants';
1+
import { CLUSTER_SERVICE_ADD } from '../constants';
22

3-
export default function applicationList(
3+
export default function clusterServiceAdd(
44
state = { status: 'initial' },
55
action
66
) {
77
switch (action.type) {
8-
case ADD_SERVICE:
8+
case CLUSTER_SERVICE_ADD:
99
return action.payload;
1010
default:
1111
return state;

src/components/organisms/cluster-service-list/index.js

+35-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
import React from 'react';
22
import { Link } from 'react-router';
33
import { DropTarget } from 'react-dnd';
4+
import { connect as reduxConnect } from 'react-redux';
5+
import store from '../../../store';
46
import Service from '../../molecules/service';
57
import List from '../../molecules/transition-appear';
8+
import actions from '../../molecules/dragable-service/actions/add';
69
import removeActions from './actions/remove';
710
import ItemTypes from '../../molecules/dragable-service/item-types';
811

@@ -16,9 +19,15 @@ const clusterTarget = {
1619
};
1720

1821

22+
const mapStateToProps = (state) => ({
23+
addService: state.clusterServiceAdd.service,
24+
});
25+
26+
1927
const ClusterServiceList = React.createClass({
2028
propTypes: {
2129
services: React.PropTypes.array,
30+
addService: React.PropTypes.object,
2231
children: React.PropTypes.node,
2332
clusterId: React.PropTypes.string.isRequired,
2433
connectDropTarget: React.PropTypes.func.isRequired,
@@ -32,9 +41,28 @@ const ClusterServiceList = React.createClass({
3241
};
3342
},
3443

44+
getInitialState() {
45+
return {
46+
services: [],
47+
};
48+
},
49+
50+
componentWillReceiveProps(nextProps) {
51+
const services = nextProps.services;
52+
if (nextProps.addService) {
53+
services.push(nextProps.addService);
54+
}
55+
if (services !== this.state.services) {
56+
this.setState({ services });
57+
}
58+
if (nextProps.addService) {
59+
store.dispatch(actions.reset());
60+
}
61+
},
62+
3563
render() {
3664
const clusterUrl = `clusters/${this.props.clusterId}`;
37-
const serviceContent = this.props.services.map(service => {
65+
const serviceContent = this.state.services.map(service => {
3866
const url = `${clusterUrl}/services/${service.id}/provision`;
3967
const iconId = `${clusterUrl}/services/${service.id}`;
4068
return (
@@ -47,7 +75,7 @@ const ClusterServiceList = React.createClass({
4775
</Link>
4876
);
4977
});
50-
const content = this.props.services ? serviceContent : this.props.children;
78+
const content = this.state.services ? serviceContent : this.props.children;
5179
const { canDrop, isOver, connectDropTarget } = this.props;
5280
const isActive = canDrop && isOver;
5381

@@ -73,9 +101,13 @@ const ClusterServiceList = React.createClass({
73101

74102

75103
/* eslint-disable new-cap */
76-
export default DropTarget(ItemTypes.SERVICE, clusterTarget, (connect, monitor) => ({
104+
const ClusterServiceDNDList = DropTarget(ItemTypes.SERVICE, clusterTarget, (connect, monitor) => ({
77105
/* eslint-enable */
78106
connectDropTarget: connect.dropTarget(),
79107
isOver: monitor.isOver(),
80108
canDrop: monitor.canDrop(),
81109
}))(ClusterServiceList);
110+
const ClusterServiceConnect = reduxConnect(mapStateToProps, actions)(ClusterServiceDNDList);
111+
112+
113+
export default ClusterServiceConnect;

src/components/pages/cluster/index.js

-2
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,6 @@ const ClusterDetail = React.createClass({
8080
},
8181

8282
componentWillMount() {
83-
console.log(store.getState());
8483
store.dispatch(actions.get(this.props.params.clusterId));
8584
store.dispatch(pluginActions.get());
8685
},
@@ -99,7 +98,6 @@ const ClusterDetail = React.createClass({
9998
} else if (nextProps.addServiceStatus === 'success') {
10099
store.dispatch(actions.get(this.props.params.clusterId));
101100
store.dispatch(addService.reset());
102-
console.log('here');
103101
}
104102
},
105103

0 commit comments

Comments
 (0)