Added responsive styling.

feature/appm-store/pbac
Menaka Jayawardena 7 years ago
parent 55f3b4d0ee
commit b3bd70ad61

1
.gitignore vendored

@ -26,3 +26,4 @@ target
hs_err_pid* hs_err_pid*
components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.ui/src/main/resources/publisher/node_modules/ components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.ui/src/main/resources/publisher/node_modules/
components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.ui/src/main/resources/publisher/build/ components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.ui/src/main/resources/publisher/build/
components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.ui/src/main/resources/publisher/package-lock.json

@ -22,7 +22,29 @@ package org.wso2.carbon.device.application.mgt.auth.handler.util;
public class Constants { public class Constants {
public static final String SCOPES = "perm:application:get perm:application:create perm:application:update " + public static final String SCOPES = "perm:application:get perm:application:create perm:application:update " +
"perm:application-mgt:login perm:application:delete perm:platform:add perm:platform:remove " + "perm:application-mgt:login perm:application:delete perm:platform:add perm:platform:remove " +
"perm:roles:view perm:devices:view perm:platform:get"; "perm:roles:view perm:devices:view perm:platform:get perm:admin:devices:view perm:roles:add " +
"perm:roles:add-users perm:roles:update perm:roles:permissions perm:roles:details perm:roles:view" +
" perm:roles:create-combined-role perm:roles:delete perm:dashboard:vulnerabilities " +
"perm:dashboard:non-compliant-count perm:dashboard:non-compliant perm:dashboard:by-groups " +
"perm:dashboard:device-counts perm:dashboard:feature-non-compliant perm:dashboard:count-overview " +
"perm:dashboard:filtered-count perm:dashboard:details perm:get-activity perm:devices:delete " +
"perm:devices:applications perm:devices:effective-policy perm:devices:compliance-data " +
"perm:devices:features perm:devices:operations perm:devices:search perm:devices:details " +
"perm:devices:update perm:devices:view perm:view-configuration perm:manage-configuration " +
"perm:policies:remove perm:policies:priorities perm:policies:deactivate perm:policies:get-policy-details" +
" perm:policies:manage perm:policies:activate perm:policies:update perm:policies:changes " +
"perm:policies:get-details perm:users:add perm:users:details perm:users:count perm:users:delete " +
"perm:users:roles perm:users:user-details perm:users:credentials perm:users:search perm:users:is-exist " +
"perm:users:update perm:users:send-invitation perm:admin-users:view perm:groups:devices perm:groups:update " +
"perm:groups:add perm:groups:device perm:groups:devices-count perm:groups:remove perm:groups:groups " +
"perm:groups:groups-view perm:groups:share perm:groups:count perm:groups:roles perm:groups:devices-remove " +
"perm:groups:devices-add perm:groups:assign perm:device-types:features perm:device-types:types " +
"perm:applications:install perm:applications:uninstall perm:admin-groups:count perm:admin-groups:view" +
" perm:notifications:mark-checked perm:notifications:view perm:admin:certificates:delete " +
"perm:admin:certificates:details perm:admin:certificates:view perm:admin:certificates:add " +
"perm:admin:certificates:verify perm:admin perm:devicetype:deployment perm:device-types:events " +
"perm:device-types:events:view perm:admin:device-type perm:device:enroll perm:geo-service:analytics-view " +
"perm:geo-service:alerts-manage";
public static final String[] TAGS = {"device_management"}; public static final String[] TAGS = {"device_management"};
public static final String USER_NAME = "userName"; public static final String USER_NAME = "userName";

@ -23,6 +23,7 @@
<meta name="theme-color" content="#000000"> <meta name="theme-color" content="#000000">
<link rel="stylesheet" type="text/css" href="/css/font-wso2.css"> <link rel="stylesheet" type="text/css" href="/css/font-wso2.css">
<link rel="stylesheet" type="text/css" href="/themes/default/default-theme.css"> <link rel="stylesheet" type="text/css" href="/themes/default/default-theme.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500">
<!-- <!--
manifest.json provides metadata used when your web app is added to the manifest.json provides metadata used when your web app is added to the
homescreen on Android. See https://developers.google.com/web/fundamentals/engage-and-retain/web-app-manifest/ homescreen on Android. See https://developers.google.com/web/fundamentals/engage-and-retain/web-app-manifest/

@ -16,10 +16,46 @@
* under the License. * under the License.
*/ */
@font-face {
font-family: "Roboto-Medium";
src: url('../../fonts/Roboto-Medium.woff');
src: local("Roboto-Medium"), url("../../fonts/Roboto-Medium.ttf") format("ttf");
src: local("Roboto-Medium"), url("../../fonts/Roboto-Medium.woff") format("woff");
src: local("Roboto-Medium"), url("../../fonts/Roboto-Medium.woff2") format("woff2");
}
@font-face {
font-family: "Roboto-Regular";
src: url("../../fonts/Roboto-Regular.woff");
src: local("Roboto-Regular"), url("../../fonts/Roboto-Regular.ttf") format("ttf");
src: local("Roboto-Regular"), url("../../fonts/Roboto-Regular.woff") format("woff");
src: local("Roboto-Regular"), url("../../fonts/Roboto-Regular.woff2") format("woff2");
}
/* Body Styling */ /* Body Styling */
body { body {
width: 100%; width: 100%;
font-family: Roboto sans-serif; font-family: "Roboto-Regular" !important;
background-color: #dfdfdf !important;
}
.app-manager-title {
font-family: "Roboto-Medium";
font-size: 20px;
}
.app-manager-sub-title {
font-family: "Roboto-Regular";
font-size: 18px;
}
#app-mgt-footer {
clear: both;
position: relative;
height: 50px;
width: 100%;
color: white;
background-color: #334d88;
} }
/* Login page styles*/ /* Login page styles*/
@ -53,16 +89,16 @@ body {
/* Base layout container */ /* Base layout container */
#container { #container {
background-color: #ffffff; background-color: #ededed;
padding: 0; padding: 0;
} }
/* Base layout header content*/ /* Base layout header content*/
#header-content { #header-content {
height: 125px; height: 128px;
width: 100%; width: 100%;
margin: 0 10px 0 0; margin: 0 10px 0 0;
background-color: #3b33bd; background-color: #3f50b5;
position: fixed; /* Set the navbar to fixed position */ position: fixed; /* Set the navbar to fixed position */
top: 0; /* Position the navbar at the top of the page */ top: 0; /* Position the navbar at the top of the page */
z-index: 2; z-index: 2;
@ -71,14 +107,15 @@ body {
/* Contains the header styles.*/ /* Contains the header styles.*/
#header { #header {
margin: 16px 16px 20px 16px; padding: 24px;
height: 100%; /*margin: 16px 16px 20px 16px;*/
position: relative; position: relative;
} }
#header-text { #header-text {
color: #ffffff; color: #ffffff;
font-size: 25px; font-size: 20px;
font-family: Roboto-Medium;
top: 10px; top: 10px;
margin-left: 10px; margin-left: 10px;
} }
@ -96,6 +133,7 @@ body {
width: 50px; width: 50px;
margin-right: 10px; margin-right: 10px;
position: relative; position: relative;
outline: none;
} }
#header-button:hover { #header-button:hover {
@ -109,16 +147,20 @@ body {
left: 17px; left: 17px;
} }
#header-button {
outline: none;
}
.btn-header { .btn-header {
margin-top: 15px; margin-top: 15px;
margin-right: 20px; margin-right: 20px;
color: white; color: white;
} }
#sub-title {
font-family: Roboto-Regular;
font-size: 18px;
padding-top: 5px;
padding-left: 18px;
color: RGBA(0, 0, 0, 1);
}
/* Search box styles */ /* Search box styles */
.search-icon { .search-icon {
position: absolute; position: absolute;
@ -151,22 +193,31 @@ body {
/* Application Add button */ /* Application Add button */
#add-btn-container { #add-btn-container {
position: absolute; position: absolute;
left: 11%; top: 98px;
top: 100px;
} }
#app-main-content { #app-main-content {
margin-top: 140px; margin: 0 auto;
max-width: 98%; }
#sub-title-container {
height: 100px;
padding: 50px 0 20px 0;
}
.application-container {
padding: 0 !important;
min-height: 100% !important;
margin-top: 128px !important;
} }
/* Holds the app publisher pages. */ /* Holds the app publisher pages. */
#application-content { #application-content {
height: auto; height: auto;
width: 80%; background-color: white;
margin: 20px auto; width: 100%;
box-shadow: 2px 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); box-shadow: 2px 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
padding: 0 10px 10px 10px; padding: 24px;
} }
.stepper-header { .stepper-header {
@ -176,11 +227,20 @@ body {
margin-bottom: 10px; margin-bottom: 10px;
} }
#application-tag {
margin: 0 2px 0 2px;
background-color: blue;
height: 20px;
}
#application-tag:hover {
cursor: pointer;
background-color: #007bff;
}
.platform-link-placeholder { .platform-link-placeholder {
color: #888888; color: #888888;
width: 80%;
float: right; float: right;
margin: 10px auto;
padding-bottom: 10px; padding-bottom: 10px;
} }
@ -276,7 +336,6 @@ body {
} }
#secondary-button { #secondary-button {
float: right;
color: #979797; color: #979797;
background-color: transparent; background-color: transparent;
border: none; border: none;
@ -343,6 +402,7 @@ body {
#application-view-content { #application-view-content {
width: 100%; width: 100%;
} }
#application-view-row { #application-view-row {
margin: 10px 10px 0 20px; margin: 10px 10px 0 20px;
} }
@ -386,6 +446,7 @@ body {
margin-bottom: 20px; margin-bottom: 20px;
font-size: 25px; font-size: 25px;
} }
.application-header-text { .application-header-text {
margin: 10px 0px 0px 10px; margin: 10px 0px 0px 10px;
} }
@ -417,6 +478,7 @@ div.tab {
border-right: 1px solid #d8d8d8; border-right: 1px solid #d8d8d8;
height: 100%; height: 100%;
} }
/* Style the tab buttons */ /* Style the tab buttons */
div.tab button { div.tab button {
@ -431,31 +493,27 @@ div.tab button {
cursor: pointer; cursor: pointer;
transition: 0.3s; transition: 0.3s;
} }
/* Change background color of buttons on hover */ /* Change background color of buttons on hover */
div.tab button:hover { div.tab button:hover {
background-color: #ddd6d7; background-color: #ddd6d7;
cursor: pointer; cursor: pointer;
} }
/* Create an active/current "tab button" class */ /* Create an active/current "tab button" class */
div.tab button.active { div.tab button.active {
background-color: #1b3bcc; background-color: #1b3bcc;
color: white; color: white;
} }
#application-edit-main-container { #application-edit-main-container {
display: flex; display: flex;
} }
#application-edit-outer-content { #application-edit-outer-content {
height: auto; height: auto;
width: 100%;
}
#application-edit-content {
margin: 5px 10px 5px 10px;
width: 90%;
} }
#app-edit-content { #app-edit-content {
@ -486,6 +544,7 @@ div.tab button.active {
margin-top: 20px; margin-top: 20px;
margin-bottom: 20px; margin-bottom: 20px;
} }
.release-create { .release-create {
height: 150px; height: 150px;
margin-bottom: 20px; margin-bottom: 20px;
@ -540,6 +599,7 @@ div.tab button.active {
margin-top: 20px; margin-top: 20px;
max-width: 100%; max-width: 100%;
} }
.save-info { .save-info {
float: right; float: right;
margin-bottom: 10px; margin-bottom: 10px;
@ -550,8 +610,8 @@ div.tab button.active {
margin: 10px; margin: 10px;
} }
.create-platform { .create-platform i {
padding-left: 90%; margin-right: 10px;
} }
#platform-list { #platform-list {

@ -35,8 +35,8 @@ export default class ApplicationMgtApi {
* *
* From applicationData, the proper application object will be created and send it to the api. * From applicationData, the proper application object will be created and send it to the api.
* */ * */
static createApplication(applicationData) { static createApplication(generalInfo, platform, screenshots, release) {
let {application, images} = Helper.buildApplication(applicationData); let {application, images} = Helper.buildApplication(generalInfo, platform, screenshots, release);
const headers = AuthHandler.createAuthenticationHeaders("application/json"); const headers = AuthHandler.createAuthenticationHeaders("application/json");
console.log(application); console.log(application);
console.log(images); console.log(images);

@ -25,26 +25,22 @@ export default class Helper {
/** /**
* Generate application object from form data passed. * Generate application object from form data passed.
* @param appData: Application data from the application creation form. * @param generalInfo: Application data from the application creation form.
* @param platform
* @param screenshots
* @param release
* @return {Object, Object}: The application object and the set of images related to the application. * @return {Object, Object}: The application object and the set of images related to the application.
* */ * */
static buildApplication(appData) { static buildApplication(generalInfo, platform, screenshots, release) {
let application = {}; let images = screenshots;
let images = {}; let application = Object.assign({}, generalInfo, platform);
for (let prop in application) {
for (let step in appData) { if (prop === 'tags') {
let tmpData = appData[step].data.step; application[prop] = Helper.stringifyTags(generalInfo[prop]);
for (let prop in tmpData) {
if (prop === 'banner' || prop === 'screenshots' || prop === 'icon') {
images[prop] = tmpData[prop];
} else if(prop === 'tags') {
application[prop] = Helper.stringifyTags(tmpData[prop]);
} else {
application[prop] = tmpData[prop];
}
} }
} }
console.log(application);
return {application, images}; return {application, images};
} }

@ -35,13 +35,16 @@ class BaseLayout extends Component {
constructor() { constructor() {
super(); super();
this.logout = this.logout.bind(this);
this.closeModal = this.closeModal.bind(this);
this.onClickPlatforms = this.onClickPlatforms.bind(this);
this.state = { this.state = {
notifications: 0, notifications: 0,
user: 'Admin', user: 'Admin',
openModal: false openModal: false,
currentPage: "Applications"
}; };
this.logout = this.logout.bind(this);
this.closeModal = this.closeModal.bind(this);
} }
handleApplicationClick() { handleApplicationClick() {
@ -71,46 +74,58 @@ class BaseLayout extends Component {
} }
onClickPlatforms() { onClickPlatforms() {
window.location.href = "/assets/platforms"; window.location.href = "/publisher/assets/platforms";
this.setState({currentPage: "Platforms"});
} }
render() { render() {
return ( return (
<div> <div>
<div id="header-content"> <div id="header-content">
<div id="header">
<div id="header">
<span id="header-text"> <span id="header-text">
WSO2 IoT <FormattedMessage id="App.Publisher" defaultMessage="Application Publisher"/> WSO2 IoT <FormattedMessage id="App.Publisher" defaultMessage="Application Publisher"/>
</span> </span>
<div id="header-btn-container"> <div id="header-btn-container">
<Button id="header-button"><i className="fw fw-notification btn-header"></i></Button> <Button id="header-button"><i className="fw fw-notification btn-header"></i></Button>
<Button id="header-button"><i className="fw fw-user btn-header"></i></Button> <Button id="header-button"><i className="fw fw-user btn-header"></i></Button>
</div>
<div id="search-box">
<i className="fw fw-search search-icon">
</i>
<Input
id="search"
name="search"
placeholder={'Search for Applications'}
onChange={(event) => console.log(event.target.value)} //TODO: Remove this
/>
</div>
</div> </div>
<div id="search-box"> <Container>
<i className="fw fw-search search-icon"> <div id="add-btn-container">
</i> <FloatingButton
<Input className="add-btn small"
id="search" onClick={this.handleApplicationCreateClick.bind(this)}
name="search"
placeholder={'Search for Applications'}
onChange={(event) => console.log(event.target.value)} //TODO: Remove this
/> />
</div> </div>
</div> </Container>
<div id="add-btn-container">
<FloatingButton
className="add-btn small"
onClick={this.handleApplicationCreateClick.bind(this)}
/>
</div>
</div> </div>
<Container fluid> <Container className="application-container">
<div id="app-main-content" style={this.state.style}> <div id="app-main-content">
<Row> <Row id="sub-title-container">
<div className="platform-link-placeholder"> <Col>
<Button id="secondary-button" onClick={this.onClickPlatforms}> <div id="sub-title">
<i className="fw fw-settings"></i> Platforms</Button> {this.state.currentPage}
</div> </div>
</Col>
<Col>
<div className="platform-link-placeholder">
<Button id="secondary-button" onClick={this.onClickPlatforms}>
<i className="fw fw-settings"></i> Platforms</Button>
</div>
</Col>
</Row> </Row>
<Row> <Row>
<div id="application-content"> <div id="application-content">

@ -24,6 +24,7 @@ import ApplicationMgtApi from '../../../api/applicationMgtApi';
import {Col, Modal, ModalBody, ModalHeader, Row} from 'reactstrap'; import {Col, Modal, ModalBody, ModalHeader, Row} from 'reactstrap';
import {FormattedMessage} from 'react-intl'; import {FormattedMessage} from 'react-intl';
/** /**
* The App Create Component. * The App Create Component.
* *
@ -88,8 +89,8 @@ class ApplicationCreate extends Component {
* Handles form submit. * Handles form submit.
* */ * */
onSubmit() { onSubmit() {
let stepData = this.state.stepData; let {generalInfo, platform, screenshots, release} = this.state;
let applicationCreationPromise = ApplicationMgtApi.createApplication(stepData); let applicationCreationPromise = ApplicationMgtApi.createApplication(generalInfo, platform, screenshots, release);
applicationCreationPromise.then(response => { applicationCreationPromise.then(response => {
this.handleYes(); this.handleYes();
} }
@ -217,7 +218,7 @@ class ApplicationCreate extends Component {
<Step4 <Step4
defaultData={this.state.release} defaultData={this.state.release}
handlePrev={this.onPrevClick} handlePrev={this.onPrevClick}
setStepData={this.setStepData} onSubmit={this.onSubmit}
close={this.onClose} close={this.onClose}
/> />
) )

@ -55,9 +55,10 @@ class Step1 extends Component {
name: "", name: "",
errors: {}, errors: {},
defValue: "", defValue: "",
category: 0, category: {},
visibility: "", visibility: {type: "PUBLIC", allowedList: []},
description: "" description: "",
shortDescription: ""
}; };
} }
@ -108,12 +109,14 @@ class Step1 extends Component {
* Creates an object with the current step data and persist in the parent. * Creates an object with the current step data and persist in the parent.
* */ * */
setStepData() { setStepData() {
const {name, description, tags, visibility} = this.state; const {name, description, tags, visibility, shortDescription} = this.state;
let stepData = { let stepData = {
name: name, name: name,
description: description, description: description,
tags: tags, tags: tags,
visibility: visibility visibility: visibility,
shortDescription: shortDescription,
category: {id: 1, name: "business"}
}; };
let {errorCount, errors} = this.validate(); let {errorCount, errors} = this.validate();
@ -133,7 +136,7 @@ class Step1 extends Component {
* Validate the form fields. * Validate the form fields.
* */ * */
validate() { validate() {
const {name, description, tags} = this.state; const {name, description, tags, shortDescription} = this.state;
let errorCount = 0; let errorCount = 0;
let errors = {}; let errors = {};
if (validator.validateNull(name)) { if (validator.validateNull(name)) {
@ -146,6 +149,11 @@ class Step1 extends Component {
errors.description = "Description is Required!" errors.description = "Description is Required!"
} }
if (validator.validateNull(shortDescription)) {
errorCount++;
errors.shortDescription = "Short Description is Required!"
}
if (!validator.validateEmpty(tags)) { if (!validator.validateEmpty(tags)) {
errorCount++; errorCount++;
errors.tags = "You need to enter at least one tag!" errors.tags = "You need to enter at least one tag!"
@ -167,6 +175,9 @@ class Step1 extends Component {
this.setState({description: event.target.value}); this.setState({description: event.target.value});
break; break;
} }
case "appShortDescription": {
this.setState({shortDescription: event.target.value});
}
} }
}; };
@ -240,6 +251,18 @@ class Step1 extends Component {
/> />
<FormFeedback id="form-error">{this.state.errors.name}</FormFeedback> <FormFeedback id="form-error">{this.state.errors.name}</FormFeedback>
</FormGroup> </FormGroup>
<FormGroup>
<Label for="app-short-description">Short Description*</Label>
<Input
required
type="textarea"
name="appShortDescription"
id="app-short-description"
value={this.state.shortDescription}
onChange={this.onTextFieldChange}
/>
<FormFeedback id="form-error">{this.state.errors.shortDescription}</FormFeedback>
</FormGroup>
<FormGroup> <FormGroup>
<Label for="app-description"> <Label for="app-description">
<FormattedMessage id='Description' defaultMessage='Description'/>* <FormattedMessage id='Description' defaultMessage='Description'/>*
@ -258,8 +281,12 @@ class Step1 extends Component {
<Label for="app-category"> <Label for="app-category">
<FormattedMessage id='Category' defaultMessage='Category'/> <FormattedMessage id='Category' defaultMessage='Category'/>
</Label> </Label>
<Input type="select" name="category" id="app-category"> <Input
<option>Business</option> type="select"
name="category"
id="app-category"
>
<option key={0} value={{id: 0, name: "business"}}>Business</option>
</Input> </Input>
</FormGroup> </FormGroup>
<FormGroup> <FormGroup>
@ -302,7 +329,7 @@ class Step1 extends Component {
{this.state.tags.map(tag => { {this.state.tags.map(tag => {
return ( return (
<Badge <Badge
style={{margin: '0 2px 0 2px', backgroundColor: 'blue', height: '20px'}} id="application-tag"
value={tag.key} value={tag.key}
key={tag.key} key={tag.key}
onClick={() => this.handleRequestDelete(tag.key)} onClick={() => this.handleRequestDelete(tag.key)}
@ -318,7 +345,7 @@ class Step1 extends Component {
</div> </div>
</div> </div>
<ModalFooter> <ModalFooter>
<Button color="danger" onClick={this.onCancelClick}>Cancel</Button> <Button id="material-btn" onClick={this.onCancelClick}>Cancel</Button>
<Button color="primary" onClick={this.setStepData}>Continue</Button> <Button color="primary" onClick={this.setStepData}>Continue</Button>
</ModalFooter> </ModalFooter>
</div> </div>

@ -50,6 +50,7 @@ class Step4 extends Component {
this.onCancelClick = this.onCancelClick.bind(this); this.onCancelClick = this.onCancelClick.bind(this);
this.onBackClick = this.onBackClick.bind(this); this.onBackClick = this.onBackClick.bind(this);
this.handleFinish = this.handleFinish.bind(this); this.handleFinish = this.handleFinish.bind(this);
this.onSubmit = this.onSubmit.bind(this);
this.state = { this.state = {
showForm: false, showForm: false,
releaseChannel: 1, releaseChannel: 1,
@ -75,7 +76,7 @@ class Step4 extends Component {
} }
onSubmit() { onSubmit() {
this.props.onSubmit();
} }
/** /**
@ -159,7 +160,7 @@ Step4.propTypes = {
handleFinish: PropTypes.func, handleFinish: PropTypes.func,
handlePrev: PropTypes.func, handlePrev: PropTypes.func,
setData: PropTypes.func, setData: PropTypes.func,
removeData: PropTypes.func onSubmit: PropTypes.func
}; };
export default Step4; export default Step4;

@ -105,17 +105,9 @@ class ApplicationEdit extends Component {
</div> </div>
</Col> </Col>
<Col xs="9"> <Col xs="9">
<div id="app-edit-content"> {/* Application edit content */}
<Row> <div id="application-edit-content">
<Col xs="12"> {this.getTabContent(this.state.activeTab)}
<div id="application-edit-outer-content">
{/* Application edit content */}
<div id="application-edit-content">
{this.getTabContent(this.state.activeTab)}
</div>
</div>
</Col>
</Row>
</div> </div>
</Col> </Col>
</Row> </Row>

@ -102,12 +102,14 @@ class GeneralInfo extends Component {
<span className="image-sub-title"> (600 X 800 32 bit PNG)</span> <span className="image-sub-title"> (600 X 800 32 bit PNG)</span>
<div id="screenshot-container"> <div id="screenshot-container">
{this.state.screenshots.map((tile) => ( {this.state.screenshots.map((tile) => (
<button id="img-btn-screenshot" style={{height: '210px', width: '410px'}} <button id="img-btn-screenshot"
style={{height: '210px', width: '410px'}}
onMouseEnter={() => { onMouseEnter={() => {
console.log("Mouse Entered") console.log("Mouse Entered")
}}> }}>
{console.log(tile[0].preview)} {console.log(tile[0].preview)}
<img style={{height: '200px', width: '400px'}} src={tile[0].preview}/> <img style={{height: '200px', width: '400px'}}
src={tile[0].preview}/>
</button> </button>
))} ))}
{this.state.screenshots.length < 3 ? {this.state.screenshots.length < 3 ?
@ -140,7 +142,8 @@ class GeneralInfo extends Component {
<button onMouseEnter={() => { <button onMouseEnter={() => {
console.log("Mouse Entered") console.log("Mouse Entered")
}}> }}>
<img style={{height: '200px', width: '200px'}} src={tile.preview}/> <img style={{height: '200px', width: '200px'}}
src={tile.preview}/>
</button> </button>
))} ))}
{this.state.icon.length === 0 ? {this.state.icon.length === 0 ?
@ -167,7 +170,8 @@ class GeneralInfo extends Component {
<button onMouseEnter={() => { <button onMouseEnter={() => {
console.log("Mouse Entered") console.log("Mouse Entered")
}}> }}>
<img style={{height: '200px', width: '400px'}} src={tile.preview}/> <img style={{height: '200px', width: '400px'}}
src={tile.preview}/>
</button> </button>
))} ))}
{this.state.banner.length === 0 ? {this.state.banner.length === 0 ?
@ -186,9 +190,7 @@ class GeneralInfo extends Component {
</div> </div>
</div> </div>
<div className="save-info"> <div className="save-info">
<Button> <Button>Save</Button>
<FormattedMessage id="Save" defaultMessage="Save"/>
</Button>
</div> </div>
</form> </form>
</Row> </Row>

@ -54,7 +54,9 @@ class PlatformListing extends Component {
<div id="platform-listing"> <div id="platform-listing">
<Row> <Row>
<div className="create-platform"> <div className="create-platform">
<Button id="create-platform-btn" onClick={this.onPlatformCreateClick}>Create Platform</Button> <Button id="secondary-button" onClick={this.onPlatformCreateClick}>
<i className="fw fw-add"></i>Create Platform
</Button>
</div> </div>
</Row> </Row>
<Row> <Row>

@ -329,12 +329,6 @@
<type>zip</type> <type>zip</type>
<version>${carbon.device.mgt.version}</version> <version>${carbon.device.mgt.version}</version>
</dependency> </dependency>
<dependency>
<groupId>org.wso2.carbon.devicemgt</groupId>
<artifactId>org.wso2.carbon.device.application.mgt.auth.handler.feature</artifactId>
<type>zip</type>
<version>${carbon.device.mgt.version}</version>
</dependency>
<dependency> <dependency>
<groupId>org.wso2.carbon.devicemgt</groupId> <groupId>org.wso2.carbon.devicemgt</groupId>
<artifactId>org.wso2.carbon.device.application.mgt.publisher.ui.feature</artifactId> <artifactId>org.wso2.carbon.device.application.mgt.publisher.ui.feature</artifactId>

Loading…
Cancel
Save