diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.ui/react-app/public/conf/config.json b/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.ui/react-app/public/conf/config.json
index 5d9f074d94..1411e8bef6 100644
--- a/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.ui/react-app/public/conf/config.json
+++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.ui/react-app/public/conf/config.json
@@ -11,7 +11,7 @@
"uri": "/publisher-ui-request-handler/invoke",
"publisher": "/application-mgt-publisher/v1.0",
"store": "/application-mgt-store/v1.0",
- "admin" : ""
+ "deviceMgt" : "/device-mgt/v1.0"
},
"loginUri": "/publisher-ui-request-handler/login",
"platform": "publisher"
diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.ui/react-app/src/components/apps/list-apps/AppsTable.js b/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.ui/react-app/src/components/apps/list-apps/AppsTable.js
index 56d5b5a70d..9a8441802c 100644
--- a/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.ui/react-app/src/components/apps/list-apps/AppsTable.js
+++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.ui/react-app/src/components/apps/list-apps/AppsTable.js
@@ -66,15 +66,30 @@ class AppsTable extends React.Component {
constructor(props) {
super(props);
this.state = {
- pagination: {
- total: 100
- },
- apps: []
+ pagination: {},
+ apps: [],
+ filters: {}
};
}
componentDidMount() {
- this.fetch();
+ const {filters} =this.props;
+ this.setState({
+ filters
+ });
+ this.fetch(filters);
+
+ }
+
+ componentDidUpdate(prevProps, prevState, snapshot) {
+ const {filters} =this.props;
+ if (prevProps.filters !== this.props.filters) {
+ console.log("d",this.props.filters);
+ this.setState({
+ filters
+ });
+ this.fetch(filters);
+ }
}
handleTableChange = (pagination, filters, sorter) => {
@@ -84,7 +99,7 @@ class AppsTable extends React.Component {
this.setState({
pagination: pager,
});
- this.fetch({
+ this.fetch(this.state.filters,{
results: pagination.pageSize,
page: pagination.current,
sortField: sorter.field,
@@ -93,7 +108,7 @@ class AppsTable extends React.Component {
});
};
- fetch = (params = {}) => {
+ fetch = (filters,params = {}) => {
this.setState({loading: true});
if(!params.hasOwnProperty("page")){
@@ -102,8 +117,10 @@ class AppsTable extends React.Component {
const data = {
offset: 10 * (params.page - 1),
- limit: 10
+ limit: 10,
+ ...filters
};
+ console.log("f", data);
axios.post(
config.serverConfig.protocol + "://"+config.serverConfig.hostname + ':' + config.serverConfig.httpsPort + config.serverConfig.invoker.uri +config.serverConfig.invoker.publisher+"/applications",
@@ -111,15 +128,16 @@ class AppsTable extends React.Component {
).then(res => {
if (res.status === 200) {
+ const data = res.data.data;
let apps = [];
if (res.data.data.hasOwnProperty("applications")) {
- apps = res.data.data.applications;
+ apps = data.applications;
}
const pagination = {...this.state.pagination};
// Read total count from server
// pagination.total = data.totalCount;
- pagination.total = 200;
+ pagination.total = data.pagination.count;
this.setState({
loading: false,
apps: apps,
diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.ui/react-app/src/components/apps/list-apps/Filters.js b/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.ui/react-app/src/components/apps/list-apps/Filters.js
index 8604140a62..eba53ee793 100644
--- a/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.ui/react-app/src/components/apps/list-apps/Filters.js
+++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.ui/react-app/src/components/apps/list-apps/Filters.js
@@ -1,74 +1,277 @@
import React from "react";
-import {Avatar, Card, Col, Row, Table, Typography, Input, Divider, Checkbox, Select, Button} from "antd";
+import {Avatar, Card, Col, Row, Table, Typography, Input, Divider, Checkbox, Select, Button, Form, message} from "antd";
+import axios from "axios";
+import config from "../../../../public/conf/config.json";
const {Option} = Select;
const {Title, Text} = Typography;
-class Filters extends React.Component {
+
+class FiltersForm extends React.Component {
constructor(props) {
super(props);
+ this.state = {
+ categories: [],
+ tags: [],
+ deviceTypes: []
+ };
+ }
+
+ handleSubmit = e => {
+ e.preventDefault();
+ this.props.form.validateFields((err, values) => {
+ for (const [key, value] of Object.entries(values)) {
+ if (value === undefined) {
+ delete values[key];
+ }
+ }
+
+ this.props.setFilters(values);
+ });
+ };
+
+ componentDidMount() {
+ this.getCategories();
+ this.getTags();
+ this.getDeviceTypes();
}
+ getCategories = () => {
+ axios.get(
+ config.serverConfig.protocol + "://" + config.serverConfig.hostname + ':' + config.serverConfig.httpsPort + config.serverConfig.invoker.uri + config.serverConfig.invoker.publisher + "/applications/categories",
+ {
+ headers: {'X-Platform': config.serverConfig.platform}
+ }).then(res => {
+ if (res.status === 200) {
+ let categories = JSON.parse(res.data.data);
+ this.setState({
+ categories: categories,
+ loading: false
+ });
+ }
+
+ }).catch((error) => {
+ if (error.response.status === 401) {
+ window.location.href = config.serverConfig.protocol + "://" + config.serverConfig.hostname + ':' + config.serverConfig.httpsPort + '/publisher/login';
+ } else {
+ message.warning('Something went wrong');
+
+ }
+ this.setState({
+ loading: false
+ });
+ });
+ };
+
+ getTags = () => {
+ axios.get(
+ config.serverConfig.protocol + "://" + config.serverConfig.hostname + ':' + config.serverConfig.httpsPort + config.serverConfig.invoker.uri + config.serverConfig.invoker.publisher + "/applications/tags",
+ {
+ headers: {'X-Platform': config.serverConfig.platform}
+ }).then(res => {
+ if (res.status === 200) {
+ let tags = JSON.parse(res.data.data);
+ this.setState({
+ tags: tags,
+ loading: false,
+ });
+ }
+
+ }).catch((error) => {
+ if (error.response.status === 401) {
+ window.location.href = config.serverConfig.protocol + "://" + config.serverConfig.hostname + ':' + config.serverConfig.httpsPort + '/publisher/login';
+ } else {
+ message.warning('Something went wrong');
+
+ }
+ this.setState({
+ loading: false
+ });
+ });
+ };
+
+
+ getDeviceTypes = () => {
+ axios.get(
+ config.serverConfig.protocol + "://" + config.serverConfig.hostname + ':' + config.serverConfig.httpsPort + config.serverConfig.invoker.uri + config.serverConfig.invoker.deviceMgt + "/device-types",
+ {
+ headers: {'X-Platform': config.serverConfig.platform}
+ }).then(res => {
+ if (res.status === 200) {
+ const deviceTypes = JSON.parse(res.data.data);
+ this.setState({
+ deviceTypes,
+ loading: false,
+ });
+ }
+
+ }).catch((error) => {
+ if (error.response.status === 401) {
+ window.location.href = config.serverConfig.protocol + "://" + config.serverConfig.hostname + ':' + config.serverConfig.httpsPort + '/publisher/login';
+ } else {
+ message.warning('Something went wrong');
+
+ }
+ this.setState({
+ loading: false
+ });
+ });
+ };
+
render() {
+ const {categories, tags, deviceTypes} = this.state;
+ const {getFieldDecorator} = this.props.form;
+
return (
-
-
- Filter
-
-
-
-
- Category
-
-
-
-
- Platform
-
- Android
- iOS
- Windows
- Default
-
-
- Tags
-
-
-
-
- Type
-
- Enterprise
- Public
- Web APP
- Web Clip
-
-
- Subscription
-
- Free
- Paid
-
+
+ {getFieldDecorator('categories', {
+ rules: [{
+ required: false,
+ message: 'Please select categories'
+ }],
+ })(
+
+ )}
+
+ {/**/}
+
+
+
+ {getFieldDecorator('deviceTypes', {
+ rules: [{
+ required: false,
+ message: 'Please select device types'
+ }],
+ })(
+
+ )}
+
+
+ {/*Tags*/}
+
+ {getFieldDecorator('tags', {
+ rules: [{
+ required: false,
+ message: 'Please select tags'
+ }],
+ })(
+
+ )}
+
+
+
+
+ {getFieldDecorator('appType', {})(
+
+ )}
+
+
+
+
+ {getFieldDecorator('subscriptionType', {})(
+
+ Free
+ Paid
+ ,
+ )}
+
+
+
);
}
}
+const Filters = Form.create({name: 'filter-apps'})(FiltersForm);
+
+
export default Filters;
\ No newline at end of file
diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.ui/react-app/src/components/apps/list-apps/ListApps.js b/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.ui/react-app/src/components/apps/list-apps/ListApps.js
index 8100a25a05..ea60b48481 100644
--- a/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.ui/react-app/src/components/apps/list-apps/ListApps.js
+++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.ui/react-app/src/components/apps/list-apps/ListApps.js
@@ -20,11 +20,12 @@ class ListApps extends React.Component {
super(props);
this.state = {
isDrawerVisible: false,
- selectedApp: null
+ selectedApp: null,
+ filters: {}
}
}
- //handler to show app drawer
+ //handler to show app drawer
showDrawer = (app) => {
this.setState({
isDrawerVisible: true,
@@ -39,12 +40,18 @@ class ListApps extends React.Component {
})
};
+ setFilters = (filters) => {
+ this.setState({
+ filters
+ });
+ };
+
render() {
- const {isDrawerVisible} = this.state;
+ const {isDrawerVisible, filters} = this.state;
return (
-
+
@@ -61,8 +68,9 @@ class ListApps extends React.Component {
-
-
+
+