forked from community/device-mgt-core
Merge pull request #1029 from menakaj/application-mgt
Platform create steps and improvements.feature/appm-store/pbac
commit
747fe5d8c2
@ -0,0 +1,198 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import React, {Component} from 'react';
|
||||||
|
import {Button, FormFeedback, FormGroup, Input, Label, ModalBody, ModalFooter} from "reactstrap";
|
||||||
|
import {FormattedMessage} from "react-intl";
|
||||||
|
import Switch from "../../../UIComponents/Switch/Switch";
|
||||||
|
import Chip from "../../../UIComponents/Chip/Chip";
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enable : switch
|
||||||
|
* Share between tenants: switch
|
||||||
|
* Tags: input
|
||||||
|
* */
|
||||||
|
class Configure extends Component {
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
this.onCancelClick = this.onCancelClick.bind(this);
|
||||||
|
this.onBackClick = this.onBackClick.bind(this);
|
||||||
|
this.setStepData = this.setStepData.bind(this);
|
||||||
|
this.state = {
|
||||||
|
defValue: "",
|
||||||
|
tags: [],
|
||||||
|
enabled: false,
|
||||||
|
shared: false,
|
||||||
|
defaultTenantMapping: true,
|
||||||
|
errors: {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a tag on Enter key press and set it to the state.
|
||||||
|
* Clears the tags text field.
|
||||||
|
* Chip gets two parameters: Key and value.
|
||||||
|
* */
|
||||||
|
addTags(event) {
|
||||||
|
let tags = this.state.tags;
|
||||||
|
if (event.charCode === 13) {
|
||||||
|
event.preventDefault();
|
||||||
|
tags.push({key: Math.floor(Math.random() * 1000), value: event.target.value});
|
||||||
|
this.setState({tags, defValue: ""}, console.log(tags));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the value for tag.
|
||||||
|
* */
|
||||||
|
handleTagChange(event) {
|
||||||
|
let defaultValue = this.state.defValue;
|
||||||
|
defaultValue = event.target.value;
|
||||||
|
this.setState({defValue: defaultValue})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles Chip delete function.
|
||||||
|
* Removes the tag from state.tags
|
||||||
|
* */
|
||||||
|
handleRequestDelete(key) {
|
||||||
|
let chipData = this.state.tags;
|
||||||
|
const chipToDelete = chipData.map((chip) => chip.key).indexOf(key);
|
||||||
|
chipData.splice(chipToDelete, 1);
|
||||||
|
this.setState({tags: chipData});
|
||||||
|
};
|
||||||
|
|
||||||
|
onCancelClick() {
|
||||||
|
this.props.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
onBackClick() {
|
||||||
|
this.props.handlePrev();
|
||||||
|
}
|
||||||
|
|
||||||
|
setStepData() {
|
||||||
|
const {shared, enabled, tags, defaultTenantMapping} = this.state;
|
||||||
|
|
||||||
|
let config = {
|
||||||
|
shared: shared,
|
||||||
|
enabled: enabled,
|
||||||
|
defaultTenantMapping: defaultTenantMapping,
|
||||||
|
tags: tags
|
||||||
|
};
|
||||||
|
|
||||||
|
this.props.setStepData("configure", config);
|
||||||
|
}
|
||||||
|
|
||||||
|
onEnabledChanged() {
|
||||||
|
let enabled = this.state.enabled;
|
||||||
|
this.setState({enabled: !enabled});
|
||||||
|
}
|
||||||
|
|
||||||
|
onAllTenantsChanged() {
|
||||||
|
let allTenants = this.state.allTenants;
|
||||||
|
this.setState({allTenants: !allTenants});
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<ModalBody>
|
||||||
|
<FormGroup>
|
||||||
|
<div id="app-release-switch-content">
|
||||||
|
<div id="app-release-switch-label">
|
||||||
|
<Label for="app-release-switch">
|
||||||
|
<FormattedMessage id="Platform.Enable" defaultMessage="Platform.Enable"/>
|
||||||
|
</Label>
|
||||||
|
</div>
|
||||||
|
<div id="app-release-switch">
|
||||||
|
<Switch
|
||||||
|
name="enabled"
|
||||||
|
id="app-release-switch"
|
||||||
|
onChange={this.onEnabledChanged.bind(this)}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</FormGroup>
|
||||||
|
<br/>
|
||||||
|
<FormGroup>
|
||||||
|
<div id="app-release-switch-content">
|
||||||
|
<div id="app-release-switch-label">
|
||||||
|
<Label for="app-release-switch">
|
||||||
|
<FormattedMessage id="Share.with.Tenants" defaultMessage="Share.with.Tenants"/>
|
||||||
|
</Label>
|
||||||
|
</div>
|
||||||
|
<div id="app-release-switch">
|
||||||
|
<Switch
|
||||||
|
name="share"
|
||||||
|
id="app-release-switch"
|
||||||
|
onChange={this.onAllTenantsChanged.bind(this)}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</FormGroup>
|
||||||
|
<br/>
|
||||||
|
<FormGroup>
|
||||||
|
<Label for="app-tags"><FormattedMessage id='Tags' defaultMessage='Tags'/>*</Label>
|
||||||
|
<Input
|
||||||
|
required
|
||||||
|
type="text"
|
||||||
|
value={this.state.defValue}
|
||||||
|
name="app-tags"
|
||||||
|
id="app-tags"
|
||||||
|
onChange={this.handleTagChange.bind(this)}
|
||||||
|
onKeyPress={this.addTags.bind(this)}
|
||||||
|
/>
|
||||||
|
<div id="batch-content">
|
||||||
|
{this.state.tags.map(tag => {
|
||||||
|
return (
|
||||||
|
<Chip
|
||||||
|
key={tag.key}
|
||||||
|
content={tag}
|
||||||
|
onDelete={this.handleRequestDelete.bind(this)}
|
||||||
|
/>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
<FormFeedback id="form-error">{this.state.errors.tags}</FormFeedback>
|
||||||
|
</FormGroup>
|
||||||
|
</ModalBody>
|
||||||
|
<ModalFooter className="custom-footer row">
|
||||||
|
<div className="footer-back-btn col">
|
||||||
|
<Button className="custom-flat primary-flat" onClick={this.onBackClick}>
|
||||||
|
<FormattedMessage id="Back" defaultMessage="Back"/>
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
<div className="footer-main-btn col">
|
||||||
|
<Button className="custom-flat danger-flat" onClick={this.onCancelClick}>
|
||||||
|
<FormattedMessage id="Cancel" defaultMessage="Cancel"/>
|
||||||
|
</Button>
|
||||||
|
<Button className="custom-flat primary-flat" onClick={this.setStepData}>
|
||||||
|
<FormattedMessage id="Next" defaultMessage="Next"/>
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
</ModalFooter>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Configure;
|
@ -0,0 +1,191 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import React, {Component} from 'react';
|
||||||
|
import {Button, FormFeedback, FormGroup, Input, Label, ModalBody, ModalFooter} from "reactstrap";
|
||||||
|
import {FormattedMessage} from "react-intl";
|
||||||
|
import * as validator from '../../../../common/validator';
|
||||||
|
import Dropzone from "react-dropzone";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Name
|
||||||
|
* Description
|
||||||
|
* Identifier
|
||||||
|
* Icon
|
||||||
|
* */
|
||||||
|
class General extends Component {
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
this.onTextFieldChange = this.onTextFieldChange.bind(this);
|
||||||
|
this.onNextClick = this.onNextClick.bind(this);
|
||||||
|
this.onCancelClick = this.onCancelClick.bind(this);
|
||||||
|
this.state = {
|
||||||
|
name: "",
|
||||||
|
description: "",
|
||||||
|
identifier: "",
|
||||||
|
errors: {},
|
||||||
|
icon: []
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
onNextClick() {
|
||||||
|
const {name, description, identifier, icon} = this.state;
|
||||||
|
|
||||||
|
console.log("Next")
|
||||||
|
|
||||||
|
let general = {
|
||||||
|
name: name,
|
||||||
|
description: description,
|
||||||
|
identifier: identifier,
|
||||||
|
icon: icon
|
||||||
|
};
|
||||||
|
|
||||||
|
let {errorCount, errors} = this.validate();
|
||||||
|
|
||||||
|
if (errorCount !== 0) {
|
||||||
|
this.setState({errors: errors});
|
||||||
|
} else {
|
||||||
|
this.props.setStepData("general", general);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
onCancelClick() {
|
||||||
|
this.props.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
onTextFieldChange(event) {
|
||||||
|
let field = event.target.name;
|
||||||
|
let value = event.target.value;
|
||||||
|
|
||||||
|
console.log(field, value)
|
||||||
|
|
||||||
|
switch (field) {
|
||||||
|
case("platformName") : {
|
||||||
|
this.setState({name: value});
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case("platformDescription") : {
|
||||||
|
this.setState({description: value});
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case("platformId") : {
|
||||||
|
this.setState({identifier: value});
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
validate() {
|
||||||
|
|
||||||
|
const {name, identifier, description} = this.state;
|
||||||
|
let errorCount = 0;
|
||||||
|
let errors = {};
|
||||||
|
|
||||||
|
if (validator.validateNull(name)) {
|
||||||
|
errorCount++;
|
||||||
|
errors.name = "Platform Name is Required!"
|
||||||
|
}
|
||||||
|
|
||||||
|
if (validator.validateNull(identifier)) {
|
||||||
|
errorCount++;
|
||||||
|
errors.identifier = "Platform Identifier is Required!"
|
||||||
|
}
|
||||||
|
|
||||||
|
if (validator.validateNull(description)) {
|
||||||
|
errorCount++;
|
||||||
|
errors.description = "Platform Desciption is Required!"
|
||||||
|
}
|
||||||
|
|
||||||
|
return {errorCount, errors};
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<ModalBody>
|
||||||
|
<FormGroup>
|
||||||
|
<Label for="platform-name">
|
||||||
|
<FormattedMessage id="Name" defaultMessage="Name"/>*
|
||||||
|
</Label>
|
||||||
|
<Input required type="text" name="platformName" id="platform-name"
|
||||||
|
onChange={this.onTextFieldChange}/>
|
||||||
|
<FormFeedback id="form-error">{this.state.errors.name}</FormFeedback>
|
||||||
|
</FormGroup>
|
||||||
|
<FormGroup>
|
||||||
|
<Label for="platform-description">
|
||||||
|
<FormattedMessage id="Description" defaultMessage="Description"/>*
|
||||||
|
</Label>
|
||||||
|
<Input required type="textarea" name="platformDescription" id="platform-description"
|
||||||
|
onChange={this.onTextFieldChange}/>
|
||||||
|
<FormFeedback id="form-error">{this.state.errors.description}</FormFeedback>
|
||||||
|
</FormGroup>
|
||||||
|
<FormGroup>
|
||||||
|
<Label for="platform-id">
|
||||||
|
<FormattedMessage id="Identifier" defaultMessage="Identifier"/>*
|
||||||
|
</Label>
|
||||||
|
<Input
|
||||||
|
required
|
||||||
|
type="text"
|
||||||
|
name="platformId"
|
||||||
|
id="platform-id"
|
||||||
|
onChange={this.onTextFieldChange}/>
|
||||||
|
<FormFeedback id="form-error">{this.state.errors.identifier}</FormFeedback>
|
||||||
|
</FormGroup>
|
||||||
|
<FormGroup>
|
||||||
|
<Label for="app-icon">
|
||||||
|
<FormattedMessage id='Icon' defaultMessage='Icon'/>
|
||||||
|
</Label>
|
||||||
|
<span className="image-sub-title"> (512 X 512 32 bit PNG)</span>
|
||||||
|
<div id="app-icon-container">
|
||||||
|
{this.state.icon.map((tile) => (
|
||||||
|
<div id="app-image-icon">
|
||||||
|
<img src={tile.preview} height={200} width={200}/>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
|
||||||
|
{this.state.icon.length === 0 ?
|
||||||
|
<Dropzone
|
||||||
|
className="application-create-icon-dropzone"
|
||||||
|
accept="image/jpeg, image/png"
|
||||||
|
onDrop={(icon, rejected) => {
|
||||||
|
this.setState({icon, rejected});
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<i className="fw fw-add"></i>
|
||||||
|
</Dropzone> : <div/>}
|
||||||
|
</div>
|
||||||
|
<FormFeedback id="form-error">{this.state.errors.icon}</FormFeedback>
|
||||||
|
</FormGroup>
|
||||||
|
</ModalBody>
|
||||||
|
<ModalFooter>
|
||||||
|
<Button className="custom-flat danger-flat" onClick={this.onCancelClick}>
|
||||||
|
<FormattedMessage id="Cancel" defaultMessage="Cancel"/>
|
||||||
|
</Button>
|
||||||
|
<Button className="custom-raised primary" onClick={this.onNextClick}>
|
||||||
|
<FormattedMessage id="Next" defaultMessage="Next"/>
|
||||||
|
</Button>
|
||||||
|
</ModalFooter>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export default General;
|
@ -0,0 +1,169 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import React, {Component} from 'react';
|
||||||
|
import {Button, Col, FormGroup, Input, Label, ModalBody, ModalFooter, Row} from "reactstrap";
|
||||||
|
import {FormattedMessage} from "react-intl";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* key : value +
|
||||||
|
* */
|
||||||
|
class Properties extends Component {
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
this.onCancelClick = this.onCancelClick.bind(this);
|
||||||
|
this.onBackClick = this.onBackClick.bind(this);
|
||||||
|
this.submitForm = this.submitForm.bind(this);
|
||||||
|
this.onAddPropertyClick = this.onAddPropertyClick.bind(this);
|
||||||
|
this.onKeyFieldChange = this.onKeyFieldChange.bind(this);
|
||||||
|
this.onValueFieldChange = this.onValueFieldChange.bind(this);
|
||||||
|
this.onPropertyDelete = this.onPropertyDelete.bind(this);
|
||||||
|
this.state = {
|
||||||
|
key: "",
|
||||||
|
value: "",
|
||||||
|
properties: []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onCancelClick() {
|
||||||
|
this.props.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
onBackClick() {
|
||||||
|
this.props.handlePrev();
|
||||||
|
}
|
||||||
|
|
||||||
|
submitForm() {
|
||||||
|
let platformProps = {
|
||||||
|
"properties": this.state.properties
|
||||||
|
};
|
||||||
|
this.props.onSubmit(platformProps);
|
||||||
|
}
|
||||||
|
|
||||||
|
onAddPropertyClick() {
|
||||||
|
let {key, value, properties} = this.state;
|
||||||
|
let property = {
|
||||||
|
name: key,
|
||||||
|
defaultValue: value,
|
||||||
|
optional: false
|
||||||
|
};
|
||||||
|
|
||||||
|
properties.push(property);
|
||||||
|
|
||||||
|
this.setState({property: properties, key: "", value: ""})
|
||||||
|
}
|
||||||
|
|
||||||
|
onKeyFieldChange(event) {
|
||||||
|
this.setState({key: event.target.value});
|
||||||
|
}
|
||||||
|
|
||||||
|
onValueFieldChange(event) {
|
||||||
|
this.setState({value: event.target.value});
|
||||||
|
}
|
||||||
|
|
||||||
|
onPropertyDelete(key) {
|
||||||
|
let properties = this.state.properties;
|
||||||
|
const propertyToDelete = properties.map((property) => property.name).indexOf(key);
|
||||||
|
properties.splice(propertyToDelete, 1);
|
||||||
|
this.setState({properties: properties});
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<ModalBody>
|
||||||
|
<FormGroup>
|
||||||
|
<Label for="platform-properties">
|
||||||
|
<FormattedMessage id="Platform.Properties" defaultMessage="Platform.Properties"/></Label>
|
||||||
|
<Row>
|
||||||
|
<Col>
|
||||||
|
<Input
|
||||||
|
placeholder="Key"
|
||||||
|
type="text"
|
||||||
|
name="app-tags"
|
||||||
|
id="app-tags"
|
||||||
|
value={this.state.key}
|
||||||
|
onChange={this.onKeyFieldChange}
|
||||||
|
/>
|
||||||
|
</Col>
|
||||||
|
<Col>
|
||||||
|
<Input
|
||||||
|
placeholder="value"
|
||||||
|
type="text"
|
||||||
|
name="app-tags"
|
||||||
|
id="app-tags"
|
||||||
|
value={this.state.value}
|
||||||
|
onChange={this.onValueFieldChange}
|
||||||
|
/>
|
||||||
|
</Col>
|
||||||
|
<Col>
|
||||||
|
<Button className="custom-flat circle-btn-add" onClick={this.onAddPropertyClick}>
|
||||||
|
<i className="fw fw-add"></i>
|
||||||
|
</Button>
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
|
<div className="platform-property-container">
|
||||||
|
{this.state.properties.map(
|
||||||
|
property => {
|
||||||
|
return (
|
||||||
|
<Row key={property.name} className="platform-property-row">
|
||||||
|
<Col key={property.name}>
|
||||||
|
{property.name}
|
||||||
|
</Col>
|
||||||
|
<Col>
|
||||||
|
{property.defaultValue}
|
||||||
|
</Col>
|
||||||
|
<Col>
|
||||||
|
<Button
|
||||||
|
className="custom-flat circle-btn-clear"
|
||||||
|
onClick={() => {
|
||||||
|
this.onPropertyDelete(property.name)
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<i className="fw fw-error"></i>
|
||||||
|
</Button>
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
</FormGroup>
|
||||||
|
</ModalBody>
|
||||||
|
<ModalFooter className="custom-footer row">
|
||||||
|
<div className="footer-back-btn col">
|
||||||
|
<Button className="custom-flat primary-flat" onClick={this.onBackClick}>
|
||||||
|
<FormattedMessage id="Back" defaultMessage="Back"/>
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
<div className="footer-main-btn col">
|
||||||
|
<Button className="custom-flat danger-flat" onClick={this.onCancelClick}>
|
||||||
|
<FormattedMessage id="Cancel" defaultMessage="Cancel"/>
|
||||||
|
</Button>
|
||||||
|
<Button className="custom-flat primary-flat" onClick={this.submitForm}>
|
||||||
|
<FormattedMessage id="Create" defaultMessage="Create"/>
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
</ModalFooter>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Properties;
|
@ -0,0 +1,23 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Configure from './Configure';
|
||||||
|
import General from './General';
|
||||||
|
import Properties from './Properties';
|
||||||
|
|
||||||
|
export {Configure, General, Properties}
|
@ -0,0 +1,221 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
import React, {Component} from 'react';
|
||||||
|
import {Modal, ModalHeader} from "reactstrap";
|
||||||
|
import {FormattedMessage} from "react-intl";
|
||||||
|
import Stepper from "../../UIComponents/StepprHeader/Stepper";
|
||||||
|
import PlatformMgtApi from "../../../api/platformMgtApi";
|
||||||
|
import AuthHandler from "../../../api/authHandler";
|
||||||
|
import {General, Configure, Properties} from "./CreateSteps";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Platform view component.
|
||||||
|
* */
|
||||||
|
class PlatformCreate extends Component {
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
this.onClose = this.onClose.bind(this);
|
||||||
|
this.setStepData = this.setStepData.bind(this);
|
||||||
|
this.onSubmit = this.onSubmit.bind(this);
|
||||||
|
this.onPrevClick = this.onPrevClick.bind(this);
|
||||||
|
this.onNextClick = this.onNextClick.bind(this);
|
||||||
|
this.state = {
|
||||||
|
finished: false,
|
||||||
|
stepIndex: 0,
|
||||||
|
stepData: [],
|
||||||
|
general: {},
|
||||||
|
configure: {},
|
||||||
|
platformProps: {},
|
||||||
|
open: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
componentWillReceiveProps(props, nextprops) {
|
||||||
|
this.setState({open: props.open})
|
||||||
|
}
|
||||||
|
|
||||||
|
componentWillMount() {
|
||||||
|
this.setState({open: this.props.open});
|
||||||
|
}
|
||||||
|
|
||||||
|
onClose() {
|
||||||
|
this.setState({open: false, stepIndex: 0, general: {}, configure: {}, platformProps: {}})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles next button click event.
|
||||||
|
* */
|
||||||
|
onNextClick() {
|
||||||
|
// console.log(this.state); //TODO: Remove this
|
||||||
|
const {stepIndex} = this.state;
|
||||||
|
|
||||||
|
if (stepIndex + 1 > 2) {
|
||||||
|
console.log(this.state);
|
||||||
|
this.onSubmit();
|
||||||
|
} else {
|
||||||
|
this.setState({
|
||||||
|
stepIndex: stepIndex + 1,
|
||||||
|
finished: stepIndex + 1 > 1
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles form submit.
|
||||||
|
* platform.identifier = this.state.identifier;
|
||||||
|
platform.name = this.state.name;
|
||||||
|
platform.description = this.state.description;
|
||||||
|
platform.tags = this.state.tags;
|
||||||
|
platform.properties = this.state.platformProperties;
|
||||||
|
platform.icon = this.state.icon;
|
||||||
|
platform.enabled = this.state.enabled;
|
||||||
|
platform.allTenants = this.state.allTenants;
|
||||||
|
platform.defaultTenantMapping = true;
|
||||||
|
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* */
|
||||||
|
onSubmit(platformProps) {
|
||||||
|
let {general, configure} = this.state;
|
||||||
|
|
||||||
|
console.log(general);
|
||||||
|
|
||||||
|
let platformCreatePromise = PlatformMgtApi.createPlatform(general, configure, platformProps);
|
||||||
|
platformCreatePromise.then(response => {
|
||||||
|
console.log(response.data)
|
||||||
|
}
|
||||||
|
).catch(
|
||||||
|
function (err) {
|
||||||
|
AuthHandler.unauthorizedErrorHandler(err);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Saves form data in each step in to the state.
|
||||||
|
* @param step: The step number of the step data.
|
||||||
|
* @param data: The form data of the step.
|
||||||
|
* */
|
||||||
|
setStepData(step, data) {
|
||||||
|
console.log(data); //TODO: Remove this
|
||||||
|
switch (step) {
|
||||||
|
case "general": {
|
||||||
|
this.setState({general: data}, this.onNextClick());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "configure": {
|
||||||
|
this.setState({configure: data}, this.onNextClick());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "platformProps": {
|
||||||
|
this.setState({platformProps: data}, this.onNextClick());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handled [ < Prev ] button click.
|
||||||
|
* This clears the data in the current step and returns to the previous step.
|
||||||
|
* */
|
||||||
|
onPrevClick() {
|
||||||
|
console.log(this.state.stepIndex);
|
||||||
|
const {stepIndex} = this.state;
|
||||||
|
if (stepIndex > 0) {
|
||||||
|
this.setState({stepIndex: stepIndex - 1, finished: false});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines all the Steps in the stepper. (Wizard)
|
||||||
|
*
|
||||||
|
* Extension Point: If any extra steps needed, follow the instructions below.
|
||||||
|
* 1. Create the required form ./Forms directory.
|
||||||
|
* 2. Add defined case statements.
|
||||||
|
* 3. Define the Step in render function.
|
||||||
|
*
|
||||||
|
* */
|
||||||
|
getStepContent(stepIndex) {
|
||||||
|
switch (stepIndex) {
|
||||||
|
case 0:
|
||||||
|
return (
|
||||||
|
<General
|
||||||
|
defaultData={this.state.general}
|
||||||
|
setStepData={this.setStepData}
|
||||||
|
close={this.onClose}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
case 1:
|
||||||
|
return (
|
||||||
|
<Configure
|
||||||
|
defaultData={this.state.configure}
|
||||||
|
handlePrev={this.onPrevClick}
|
||||||
|
setStepData={this.setStepData}
|
||||||
|
close={this.onClose}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
case 2:
|
||||||
|
return (
|
||||||
|
<Properties
|
||||||
|
defaultData={this.state.properties}
|
||||||
|
handlePrev={this.onPrevClick}
|
||||||
|
onSubmit={this.onSubmit}
|
||||||
|
close={this.onClose}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
default:
|
||||||
|
return <div/>;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
getStepperHeaders() {
|
||||||
|
return (
|
||||||
|
[{index: 1, text: "General"},
|
||||||
|
{index: 2, text: "Configure"},
|
||||||
|
{index: 3, text: "Properties"},
|
||||||
|
]
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
const {stepIndex} = this.state;
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<Modal isOpen={this.state.open} toggle={this.toggle} id="app-create-modal" backdrop={'static'}>
|
||||||
|
<ModalHeader className="app-create-modal-header">
|
||||||
|
<FormattedMessage id="Create.Platform" defaultMessage="Create.Platform"/>
|
||||||
|
</ModalHeader>
|
||||||
|
<Stepper
|
||||||
|
activeStep={stepIndex + 1}
|
||||||
|
previousStep={stepIndex}
|
||||||
|
stepContent={this.getStepperHeaders()}
|
||||||
|
/>
|
||||||
|
{this.getStepContent(stepIndex)}
|
||||||
|
</Modal>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default PlatformCreate;
|
@ -1,83 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
|
||||||
*
|
|
||||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
|
||||||
* in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing,
|
|
||||||
* software distributed under the License is distributed on an
|
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
* KIND, either express or implied. See the License for the
|
|
||||||
* specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*/
|
|
||||||
import React, {Component} from 'react';
|
|
||||||
import {Button, FormGroup, Input, Label, Modal, ModalBody, ModalFooter, ModalHeader} from "reactstrap";
|
|
||||||
import {FormattedMessage} from "react-intl";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Platform view component.
|
|
||||||
* */
|
|
||||||
class PlatformCreate extends Component {
|
|
||||||
|
|
||||||
constructor() {
|
|
||||||
super();
|
|
||||||
this.onCancelClick = this.onCancelClick.bind(this);
|
|
||||||
this.state = {
|
|
||||||
open: false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
componentWillReceiveProps(props, nextprops) {
|
|
||||||
this.setState({open: props.open})
|
|
||||||
}
|
|
||||||
|
|
||||||
componentWillMount() {
|
|
||||||
this.setState({open: this.props.open});
|
|
||||||
}
|
|
||||||
|
|
||||||
onCancelClick() {
|
|
||||||
this.setState({open: false})
|
|
||||||
}
|
|
||||||
|
|
||||||
render() {
|
|
||||||
return (
|
|
||||||
<div>
|
|
||||||
<Modal isOpen={this.state.open} toggle={this.toggle} id="platform-create-modal" backdrop={'static'}>
|
|
||||||
<ModalHeader>
|
|
||||||
<FormattedMessage id="Create.Platform" defaultMessage="Create.Platform"/>
|
|
||||||
</ModalHeader>
|
|
||||||
<ModalBody>
|
|
||||||
<FormGroup>
|
|
||||||
<Label for="platform-name">
|
|
||||||
<FormattedMessage id="Name" defaultMessage="Name"/>*
|
|
||||||
</Label>
|
|
||||||
<Input required type="text" name="appName" id="platform-name"/>
|
|
||||||
</FormGroup>
|
|
||||||
<FormGroup>
|
|
||||||
<Label for="platform-description">
|
|
||||||
<FormattedMessage id="Description" defaultMessage="Description"/>*
|
|
||||||
</Label>
|
|
||||||
<Input required type="textarea" name="appName" id="platform-description"/>
|
|
||||||
</FormGroup>
|
|
||||||
</ModalBody>
|
|
||||||
<ModalFooter>
|
|
||||||
<Button className="custom-flat danger-flat" onClick={this.onCancelClick}>
|
|
||||||
<FormattedMessage id="Cancel" defaultMessage="Cancel"/>
|
|
||||||
</Button>
|
|
||||||
<Button className="custom-raised primary">
|
|
||||||
<FormattedMessage id="Create" defaultMessage="Create"/>
|
|
||||||
</Button>
|
|
||||||
</ModalFooter>
|
|
||||||
</Modal>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default PlatformCreate;
|
|
@ -0,0 +1,23 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import PlatformCreate from './Create/PlatformCreate';
|
||||||
|
import Platform from './Platform';
|
||||||
|
import PlatformListing from './PlatformListing';
|
||||||
|
|
||||||
|
export {PlatformListing, PlatformCreate, Platform};
|
Loading…
Reference in new issue