mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
Create action for change lifecycle
This commit is contained in:
parent
35a62ae52e
commit
b19c79bb44
@ -13,7 +13,8 @@ const mapDispatchToProps = dispatch => ({
|
|||||||
const mapStateToProps = state => {
|
const mapStateToProps = state => {
|
||||||
return {
|
return {
|
||||||
lifecycle: state.lifecycle,
|
lifecycle: state.lifecycle,
|
||||||
currentStatus : state.release.currentStatus.toUpperCase()
|
currentStatus : state.release.currentStatus.toUpperCase(),
|
||||||
|
uuid : state.release.uuid
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -38,9 +39,9 @@ class ConnectedLifeCycle extends React.Component {
|
|||||||
if (lifecycle != null) {
|
if (lifecycle != null) {
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<LifecycleModal currentStatus={this.props.currentStatus}/>
|
<LifecycleModal uuid={this.props.uuid} currentStatus={this.props.currentStatus}/>
|
||||||
<Button onClick={this.openModal}>aaaa</Button>
|
<Button onClick={this.openModal}>aaaa</Button>
|
||||||
<LifeCycleGraph currentStatus={this.props.currentStatus} lifecycle={this.props.lifecycle}/>
|
<LifeCycleGraph openModel={this.openModal} currentStatus={this.props.currentStatus} lifecycle={this.props.lifecycle}/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,11 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import {Graph} from 'react-d3-graph';
|
import {Graph} from 'react-d3-graph';
|
||||||
|
import {connect} from "react-redux";
|
||||||
|
import {getLifecycle, openLifecycleModal} from "../../../js/actions";
|
||||||
|
|
||||||
|
const mapDispatchToProps = dispatch => ({
|
||||||
|
openLifecycleModal: (nextState) => dispatch(openLifecycleModal(nextState))
|
||||||
|
});
|
||||||
|
|
||||||
// the graph configuration, you only need to pass down properties
|
// the graph configuration, you only need to pass down properties
|
||||||
// that you want to override, otherwise default ones will be used
|
// that you want to override, otherwise default ones will be used
|
||||||
@ -36,11 +41,23 @@ const myConfig = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const onClickNode = function(nodeId) {
|
|
||||||
window.alert(`Clicked node ${nodeId}`);
|
|
||||||
};
|
|
||||||
|
|
||||||
class LifeCycleGraph extends React.Component {
|
|
||||||
|
class ConnectedLifeCycleGraph extends React.Component {
|
||||||
|
|
||||||
|
|
||||||
|
constructor(props){
|
||||||
|
super(props);
|
||||||
|
this.nextStates = null;
|
||||||
|
this.onClickNode = this.onClickNode.bind(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
onClickNode = function(nodeId) {
|
||||||
|
const nextStates = this.nextStates;
|
||||||
|
if(nextStates.includes(nodeId)){
|
||||||
|
this.props.openLifecycleModal(nodeId);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
// graph payload (with minimalist structure)
|
// graph payload (with minimalist structure)
|
||||||
@ -48,7 +65,7 @@ class LifeCycleGraph extends React.Component {
|
|||||||
const lifecycle = this.props.lifecycle;
|
const lifecycle = this.props.lifecycle;
|
||||||
const nodes = [];
|
const nodes = [];
|
||||||
const links = [];
|
const links = [];
|
||||||
const nextStates = lifecycle[this.props.currentStatus].proceedingStates;
|
this.nextStates = lifecycle[this.props.currentStatus].proceedingStates;
|
||||||
|
|
||||||
|
|
||||||
Object.keys(lifecycle).forEach((stateName) => {
|
Object.keys(lifecycle).forEach((stateName) => {
|
||||||
@ -56,7 +73,7 @@ class LifeCycleGraph extends React.Component {
|
|||||||
let color = "rgb(83, 92, 104)";
|
let color = "rgb(83, 92, 104)";
|
||||||
if (stateName === this.props.currentStatus) {
|
if (stateName === this.props.currentStatus) {
|
||||||
color = "rgb(39, 174, 96)";
|
color = "rgb(39, 174, 96)";
|
||||||
} else if (nextStates.includes(stateName)) {
|
} else if (this.nextStates.includes(stateName)) {
|
||||||
color = "rgb(0,192,255)";
|
color = "rgb(0,192,255)";
|
||||||
}
|
}
|
||||||
let node = {
|
let node = {
|
||||||
@ -67,7 +84,6 @@ class LifeCycleGraph extends React.Component {
|
|||||||
|
|
||||||
//todo: remove checking property
|
//todo: remove checking property
|
||||||
if (state.hasOwnProperty("proceedingStates")) {
|
if (state.hasOwnProperty("proceedingStates")) {
|
||||||
|
|
||||||
state.proceedingStates.forEach((proceedingState) => {
|
state.proceedingStates.forEach((proceedingState) => {
|
||||||
let link = {
|
let link = {
|
||||||
source: stateName,
|
source: stateName,
|
||||||
@ -90,12 +106,12 @@ class LifeCycleGraph extends React.Component {
|
|||||||
id="graph-id" // id is mandatory, if no id is defined rd3g will throw an error
|
id="graph-id" // id is mandatory, if no id is defined rd3g will throw an error
|
||||||
data={data}
|
data={data}
|
||||||
config={myConfig}
|
config={myConfig}
|
||||||
onClickNode={onClickNode}
|
onClickNode={this.onClickNode}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const LifeCycleGraph = connect(null,mapDispatchToProps)(ConnectedLifeCycleGraph);
|
||||||
export default LifeCycleGraph;
|
export default LifeCycleGraph;
|
||||||
@ -1,7 +1,7 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import {Modal, Typography,Icon,Input} from 'antd';
|
import {Modal, Typography, Icon, Input, Form, Checkbox, Button} from 'antd';
|
||||||
import {connect} from 'react-redux';
|
import {connect} from 'react-redux';
|
||||||
import {closeLifecycleModal} from "../../../js/actions";
|
import {closeLifecycleModal, updateLifecycleState} from "../../../js/actions";
|
||||||
|
|
||||||
const { TextArea } = Input;
|
const { TextArea } = Input;
|
||||||
const { Title } = Typography;
|
const { Title } = Typography;
|
||||||
@ -15,7 +15,8 @@ const mapStateToProps = state => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const mapDispatchToProps = dispatch => ({
|
const mapDispatchToProps = dispatch => ({
|
||||||
closeLifecycleModal : () => dispatch(closeLifecycleModal())
|
closeLifecycleModal : () => dispatch(closeLifecycleModal()),
|
||||||
|
updateLifecycleState : (uuid, nextState, reason) => dispatch(updateLifecycleState(uuid, nextState, reason))
|
||||||
});
|
});
|
||||||
|
|
||||||
const Text = Typography;
|
const Text = Typography;
|
||||||
@ -24,6 +25,7 @@ class ConnectedLifecycleModal extends React.Component {
|
|||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props);
|
super(props);
|
||||||
this.state = {
|
this.state = {
|
||||||
|
loading: false,
|
||||||
visible: false
|
visible: false
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -46,14 +48,23 @@ class ConnectedLifecycleModal extends React.Component {
|
|||||||
this.setState({
|
this.setState({
|
||||||
visible: false,
|
visible: false,
|
||||||
});
|
});
|
||||||
|
this.props.closeLifecycleModal();
|
||||||
};
|
};
|
||||||
|
|
||||||
handleCancel = (e) => {
|
handleCancel = (e) => {
|
||||||
this.setState({
|
this.setState({
|
||||||
visible: false,
|
visible: false,
|
||||||
|
loading: false
|
||||||
});
|
});
|
||||||
this.props.closeLifecycleModal();
|
this.props.closeLifecycleModal();
|
||||||
};
|
};
|
||||||
|
handleSubmit = event => {
|
||||||
|
this.setState({ loading: true });
|
||||||
|
event.preventDefault();
|
||||||
|
console.log(this.reason);
|
||||||
|
console.log("uuid", this.props.uuid);
|
||||||
|
this.props.updateLifecycleState(this.props.uuid, this.props.nextState, this.reason.state.value)
|
||||||
|
};
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
if (this.props.nextState != null) {
|
if (this.props.nextState != null) {
|
||||||
@ -63,12 +74,31 @@ class ConnectedLifecycleModal extends React.Component {
|
|||||||
<Modal
|
<Modal
|
||||||
title="Change State"
|
title="Change State"
|
||||||
visible={this.state.visible}
|
visible={this.state.visible}
|
||||||
onOk={this.handleOk}
|
|
||||||
onCancel={this.handleCancel}
|
onCancel={this.handleCancel}
|
||||||
|
footer={null}
|
||||||
>
|
>
|
||||||
<Title level={4}>{this.props.currentStatus} <Icon type="arrow-right" /> {nextState}</Title>
|
<Title level={4}>{this.props.currentStatus} <Icon type="arrow-right" /> {nextState}</Title>
|
||||||
<p>Reason:</p>
|
<p>Reason:</p>
|
||||||
<TextArea placeholder="Please enter the reason..." autosize />
|
<form onSubmit={this.handleSubmit}>
|
||||||
|
<Form.Item>
|
||||||
|
<label htmlFor="username">username</label>
|
||||||
|
|
||||||
|
<Input placeholder="Basic usage" ref={(input) => this.reason = input}/>
|
||||||
|
</Form.Item>
|
||||||
|
{/*<Form.Item>*/}
|
||||||
|
{/*<TextArea*/}
|
||||||
|
{/*placeholder="Please enter the reason..."*/}
|
||||||
|
{/*ref={(input) => this.input = input}*/}
|
||||||
|
{/*autosize*/}
|
||||||
|
{/*/>*/}
|
||||||
|
{/*</Form.Item>*/}
|
||||||
|
<Button key="back" onClick={this.handleCancel}>
|
||||||
|
Cancel
|
||||||
|
</Button>,
|
||||||
|
<Button key="submit" type="primary" htmlType="submit" loading={this.state.loading}>
|
||||||
|
Submit
|
||||||
|
</Button>
|
||||||
|
</form>
|
||||||
</Modal>
|
</Modal>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -27,7 +27,7 @@ export const getApps = () => dispatch => {
|
|||||||
|
|
||||||
export const getRelease = (uuid) => dispatch => {
|
export const getRelease = (uuid) => dispatch => {
|
||||||
|
|
||||||
const request = "method=get&content-type=application/json&payload={}&api-endpoint=/application-mgt-publisher/v1.0/applications/release/"+uuid;
|
const request = "method=get&content-type=application/json&payload={}&api-endpoint=/application-mgt-publisher/v1.0/applications/release/" + uuid;
|
||||||
|
|
||||||
return axios.post('https://' + config.serverConfig.hostname + ':' + config.serverConfig.httpsPort + config.serverConfig.invokerUri, request
|
return axios.post('https://' + config.serverConfig.hostname + ':' + config.serverConfig.httpsPort + config.serverConfig.invokerUri, request
|
||||||
).then(res => {
|
).then(res => {
|
||||||
@ -49,7 +49,7 @@ export const openReleasesModal = (app) => dispatch => {
|
|||||||
dispatch({
|
dispatch({
|
||||||
type: ActionTypes.OPEN_RELEASES_MODAL,
|
type: ActionTypes.OPEN_RELEASES_MODAL,
|
||||||
payload: {
|
payload: {
|
||||||
app:app
|
app: app
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@ -70,7 +70,7 @@ export const closeLifecycleModal = () => dispatch => {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getLifecycle = ()=> dispatch =>{
|
export const getLifecycle = () => dispatch => {
|
||||||
const request = "method=get&content-type=application/json&payload={}&api-endpoint=/application-mgt-publisher/v1.0/applications/lifecycle-config";
|
const request = "method=get&content-type=application/json&payload={}&api-endpoint=/application-mgt-publisher/v1.0/applications/lifecycle-config";
|
||||||
|
|
||||||
return axios.post('https://' + config.serverConfig.hostname + ':' + config.serverConfig.httpsPort + config.serverConfig.invokerUri, request
|
return axios.post('https://' + config.serverConfig.hostname + ':' + config.serverConfig.httpsPort + config.serverConfig.invokerUri, request
|
||||||
@ -88,20 +88,31 @@ export const getLifecycle = ()=> dispatch =>{
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
export const updateLifecycleState = (uuid, nextState) => dispatch => {
|
export const updateLifecycleState = (uuid, nextState, reason) => dispatch => {
|
||||||
|
|
||||||
const request = "method=get&content-type=application/json&payload={}&api-endpoint=/applications/lifecycle-config/"+uuid+"?action="+nextState;
|
const payload = {
|
||||||
|
nextState: nextState,
|
||||||
|
reason: reason
|
||||||
|
};
|
||||||
|
|
||||||
|
const request = "method=get&content-type=application/json&payload=" + JSON.stringify(payload) + "&api-endpoint=/applications/lifecycle-config/" + uuid;
|
||||||
|
|
||||||
|
console.log(request);
|
||||||
|
|
||||||
return axios.post('https://' + config.serverConfig.hostname + ':' + config.serverConfig.httpsPort + config.serverConfig.invokerUri, request
|
return axios.post('https://' + config.serverConfig.hostname + ':' + config.serverConfig.httpsPort + config.serverConfig.invokerUri, request
|
||||||
).then(res => {
|
).then(res => {
|
||||||
if (res.status === 200) {
|
if (res.status === 200) {
|
||||||
let release = res.data.data;
|
dispatch({type: ActionTypes.UPDATE_LIFECYCLE_STATE, payload: {currentStatus: nextState}});
|
||||||
dispatch({type: ActionTypes.GET_RELEASE, payload: release});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}).catch(function (error) {
|
}).catch(function (error) {
|
||||||
if (error.response.status === 401) {
|
if (error.response.status === 401) {
|
||||||
window.location.href = 'https://localhost:9443/publisher/login';
|
window.location.href = 'https://localhost:9443/publisher/login';
|
||||||
|
} else if (error.response.status === 500) {
|
||||||
|
dispatch({
|
||||||
|
type: ActionTypes.CLOSE_LIFECYCLE_MODAL
|
||||||
|
});
|
||||||
|
alert("error");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -48,6 +48,17 @@ function rootReducer(state = initialState, action) {
|
|||||||
nextState: null
|
nextState: null
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
}else if (action.type === ActionTypes.UPDATE_LIFECYCLE_STATE) {
|
||||||
|
const release = {};
|
||||||
|
return Object.assign({}, state, {
|
||||||
|
lifecycleModal: {
|
||||||
|
visible: false,
|
||||||
|
nextState: null,
|
||||||
|
},
|
||||||
|
release:{
|
||||||
|
currentStatus : action.payload.currentStatus
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user