From b6174243c6911f4961f383cf5104f8ea021550d6 Mon Sep 17 00:00:00 2001 From: Jayasanka Weerasinghe Date: Wed, 29 May 2019 09:20:08 +0000 Subject: [PATCH] Add component to display reviews in APPM Store --- .../mgt/common/EnterpriseApplication.java | 57 -------- .../mgt/core/impl/ReviewManagerImpl.java | 1 + .../util/AndroidApplicationOperationUtil.java | 53 -------- .../api/services/ReviewManagementAPI.java | 4 +- .../admin/ReviewManagementAdminAPI.java | 4 +- .../src/main/webapp/WEB-INF/cxf-servlet.xml | 2 + .../react-app/package.json | 3 + .../react-app/public/images/avatar-2.png | Bin 0 -> 28482 bytes .../react-app/public/images/avatar-3.png | Bin 0 -> 7626 bytes .../react-app/public/images/avatar.png | Bin 0 -> 3450 bytes .../components/apps/release/ReleaseView.js | 2 + .../apps/release/review/Reviews.css | 16 +++ .../components/apps/release/review/Reviews.js | 127 ++++++++++++++++++ .../apps/release/review/SingleReview.js | 46 +++++++ 14 files changed, 201 insertions(+), 114 deletions(-) delete mode 100644 components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/EnterpriseApplication.java delete mode 100644 components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/util/AndroidApplicationOperationUtil.java create mode 100644 components/application-mgt/org.wso2.carbon.device.application.mgt.store.ui/react-app/public/images/avatar-2.png create mode 100644 components/application-mgt/org.wso2.carbon.device.application.mgt.store.ui/react-app/public/images/avatar-3.png create mode 100644 components/application-mgt/org.wso2.carbon.device.application.mgt.store.ui/react-app/public/images/avatar.png create mode 100644 components/application-mgt/org.wso2.carbon.device.application.mgt.store.ui/react-app/src/components/apps/release/review/Reviews.css create mode 100644 components/application-mgt/org.wso2.carbon.device.application.mgt.store.ui/react-app/src/components/apps/release/review/Reviews.js create mode 100644 components/application-mgt/org.wso2.carbon.device.application.mgt.store.ui/react-app/src/components/apps/release/review/SingleReview.js diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/EnterpriseApplication.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/EnterpriseApplication.java deleted file mode 100644 index 9fa337a284..0000000000 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.common/src/main/java/org/wso2/carbon/device/application/mgt/common/EnterpriseApplication.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (c) 2018, 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. - * - */ -package org.wso2.carbon.device.application.mgt.common; - -import java.io.Serializable; - -/** - * This class represents the Enterprise ApplicationDTO information. - */ -public class EnterpriseApplication extends AndroidApplication implements Serializable { - - private String url; - private String schedule; - private String packageName; - - private static final long serialVersionUID = 660343716452348222L; - - public String getSchedule() { - return schedule; - } - - public void setSchedule(String schedule) { - this.schedule = schedule; - } - - public String getUrl() { - return url; - } - - public void setUrl(String url) { - this.url = url; - } - - public String getPackageName() { - return packageName; - } - - public void setPackageName(String packageName) { - this.packageName = packageName; - } -} diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ReviewManagerImpl.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ReviewManagerImpl.java index 8c0a41ac6f..f7eb2d2408 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ReviewManagerImpl.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/impl/ReviewManagerImpl.java @@ -224,6 +224,7 @@ public class ReviewManagerImpl implements ReviewManager { review.setCreatedAt(reviewDTO.getCreatedAt()); review.setModifiedAt(reviewDTO.getModifiedAt()); review.setRating(reviewDTO.getRating()); + review.setUsername(reviewDTO.getUsername()); review.setReplies(new ArrayList<>()); return review; } diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/util/AndroidApplicationOperationUtil.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/util/AndroidApplicationOperationUtil.java deleted file mode 100644 index bb1f5d955a..0000000000 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.core/src/main/java/org/wso2/carbon/device/application/mgt/core/util/AndroidApplicationOperationUtil.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (c) 2018, 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. - * - */ -package org.wso2.carbon.device.application.mgt.core.util; - -import org.wso2.carbon.device.application.mgt.common.AppOperation; -import org.wso2.carbon.device.application.mgt.common.EnterpriseApplication; -import org.wso2.carbon.device.mgt.common.operation.mgt.Operation; -import org.wso2.carbon.device.mgt.core.operation.mgt.ProfileOperation; - -public class AndroidApplicationOperationUtil { -// public static Operation installApp(AppOperation appOperation) { -// ProfileOperation operation = new ProfileOperation(); -// operation.setCode(MDMAppConstants.AndroidConstants.OPCODE_INSTALL_APPLICATION); -// operation.setType(Operation.Type.PROFILE); -// switch (appOperation.getApplication().getType()) { -// case "ENTERPRISE"://TODO: fix with ENUM -// EnterpriseApplication enterpriseApplication = new EnterpriseApplication(); -// enterpriseApplication.setType(appOperation.getApplication().toString()); -// enterpriseApplication.setUrl(application.getLocation()); -// enterpriseApplication.setSchedule(appOperation.getScheduledDateTime()); -// enterpriseApplication.setPackageName(appOperation.getApplication().get); -// operation.setPayLoad(enterpriseApplication.toJSON()); -// break; -// case "PUBLIC": -// setOperationForPublicApp(operation, application); -// break; -// case "WEBAPP": -// setOperationForWebApp(operation, application); -// break; -// default: -// String errorMessage = "Invalid application type."; -// throw new DeviceApplicationException(errorMessage); -// } -// return operation; -// } - -} diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.store.api/src/main/java/org/wso2/carbon/device/application/mgt/store/api/services/ReviewManagementAPI.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.store.api/src/main/java/org/wso2/carbon/device/application/mgt/store/api/services/ReviewManagementAPI.java index 1776364de3..29ba58fb3e 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.store.api/src/main/java/org/wso2/carbon/device/application/mgt/store/api/services/ReviewManagementAPI.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.store.api/src/main/java/org/wso2/carbon/device/application/mgt/store/api/services/ReviewManagementAPI.java @@ -56,7 +56,7 @@ import java.util.List; @SwaggerDefinition( info = @Info( version = "1.0.0", - title = "Store Management Service", + title = "Review Management Service", extensions = { @Extension(properties = { @ExtensionProperty(name = "name", value = "ReviewManagementService"), @@ -86,7 +86,7 @@ import java.util.List; ) @Path("/reviews") -@Api(value = "Review Management") +@Api(value = "Review Management API") @Produces(MediaType.APPLICATION_JSON) public interface ReviewManagementAPI { String SCOPE = "scope"; diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.store.api/src/main/java/org/wso2/carbon/device/application/mgt/store/api/services/admin/ReviewManagementAdminAPI.java b/components/application-mgt/org.wso2.carbon.device.application.mgt.store.api/src/main/java/org/wso2/carbon/device/application/mgt/store/api/services/admin/ReviewManagementAdminAPI.java index df2780fcd1..765419cf22 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.store.api/src/main/java/org/wso2/carbon/device/application/mgt/store/api/services/admin/ReviewManagementAdminAPI.java +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.store.api/src/main/java/org/wso2/carbon/device/application/mgt/store/api/services/admin/ReviewManagementAdminAPI.java @@ -49,7 +49,7 @@ import javax.ws.rs.core.Response; @SwaggerDefinition( info = @Info( version = "1.0.0", - title = "Store Management Admin Service", + title = "Admin Review Management Admin Service", extensions = { @Extension(properties = { @ExtensionProperty(name = "name", value = "ReviewManagementAdminService"), @@ -73,7 +73,7 @@ scopes = { ) @Path("/admin/reviews") -@Api(value = "Review Management") +@Api(value = "Review Management Admin API") @Produces(MediaType.APPLICATION_JSON) public interface ReviewManagementAdminAPI { String SCOPE = "scope"; diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.store.api/src/main/webapp/WEB-INF/cxf-servlet.xml b/components/application-mgt/org.wso2.carbon.device.application.mgt.store.api/src/main/webapp/WEB-INF/cxf-servlet.xml index da9e97ccea..da49a119c7 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.store.api/src/main/webapp/WEB-INF/cxf-servlet.xml +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.store.api/src/main/webapp/WEB-INF/cxf-servlet.xml @@ -26,6 +26,7 @@ + @@ -55,6 +56,7 @@ + diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.store.ui/react-app/package.json b/components/application-mgt/org.wso2.carbon.device.application.mgt.store.ui/react-app/package.json index 5075b4fe03..388f4ef0fd 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.store.ui/react-app/package.json +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.store.ui/react-app/package.json @@ -22,12 +22,15 @@ "react-dom": "^16.8.4", "react-highlight-words": "^0.16.0", "react-image-viewer-zoom": "^1.0.36", + "react-infinite-scroller": "^1.2.4", "react-router": "latest", "react-router-config": "^5.0.0", "react-router-dom": "latest", "react-scripts": "2.1.8", "react-star-ratings": "^2.3.0", + "react-virtualized": "^9.21.1", "redux-thunk": "^2.3.0", + "reqwest": "^2.0.5", "storm-react-diagrams": "^5.2.1" }, "devDependencies": { diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.store.ui/react-app/public/images/avatar-2.png b/components/application-mgt/org.wso2.carbon.device.application.mgt.store.ui/react-app/public/images/avatar-2.png new file mode 100644 index 0000000000000000000000000000000000000000..9467f5eb764088b0e148708895331bda41c61395 GIT binary patch literal 28482 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˂Q?&$snbOaUlZ6T>Omyq{S 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 J)JT~I{|||6w(I}^ literal 0 HcmV?d00001 diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.store.ui/react-app/public/images/avatar-3.png b/components/application-mgt/org.wso2.carbon.device.application.mgt.store.ui/react-app/public/images/avatar-3.png new file mode 100644 index 0000000000000000000000000000000000000000..f1d980e55ce8b694170f3e7b2cd72f3d8fb5533d GIT binary patch literal 7626 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 TYsXMpuR#CY6?~!g&EWq7E*fkx literal 0 HcmV?d00001 diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.store.ui/react-app/public/images/avatar.png b/components/application-mgt/org.wso2.carbon.device.application.mgt.store.ui/react-app/public/images/avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..5fab5dee57d1aacd6edd273d7f1f0e7c64f8670e GIT binary patch literal 3450 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 literal 0 HcmV?d00001 diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.store.ui/react-app/src/components/apps/release/ReleaseView.js b/components/application-mgt/org.wso2.carbon.device.application.mgt.store.ui/react-app/src/components/apps/release/ReleaseView.js index 3a87ac38b8..b86bc1516f 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.store.ui/react-app/src/components/apps/release/ReleaseView.js +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.store.ui/react-app/src/components/apps/release/ReleaseView.js @@ -4,6 +4,7 @@ import "../../../App.css"; import ImgViewer from "../../apps/release/images/ImgViewer"; import StarRatings from "react-star-ratings"; import DetailedRating from "./DetailedRating"; +import Reviews from "./review/Reviews"; const {Title, Text, Paragraph} = Typography; class ReleaseView extends React.Component { @@ -52,6 +53,7 @@ class ReleaseView extends React.Component { + ); diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.store.ui/react-app/src/components/apps/release/review/Reviews.css b/components/application-mgt/org.wso2.carbon.device.application.mgt.store.ui/react-app/src/components/apps/release/review/Reviews.css new file mode 100644 index 0000000000..8678c63891 --- /dev/null +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.store.ui/react-app/src/components/apps/release/review/Reviews.css @@ -0,0 +1,16 @@ +.demo-infinite-container { + overflow: auto; + padding: 8px 24px; +} +.demo-loading-container { + position: absolute; + bottom: 40px; + width: 100%; + text-align: center; +} + +.demo-loading { + position: absolute; + bottom: -40px; + left: 50%; +} \ No newline at end of file diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.store.ui/react-app/src/components/apps/release/review/Reviews.js b/components/application-mgt/org.wso2.carbon.device.application.mgt.store.ui/react-app/src/components/apps/release/review/Reviews.js new file mode 100644 index 0000000000..5d45e4cbc7 --- /dev/null +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.store.ui/react-app/src/components/apps/release/review/Reviews.js @@ -0,0 +1,127 @@ +import React from "react"; +import {List, message, Avatar, Spin, Button} from 'antd'; +import "./Reviews.css"; + +import InfiniteScroll from 'react-infinite-scroller'; +import SingleReview from "./SingleReview"; +import axios from "axios"; +import config from "../../../../../public/conf/config.json"; + +const limit = 5; + +class Reviews extends React.Component { + state = { + data: [], + loading: false, + hasMore: false, + loadMore: false + }; + + + componentDidMount() { + this.fetchData(0, limit, res => { + this.setState({ + data: res, + }); + }); + } + + fetchData = (offset, limit, callback) => { + const request = "method=get&content-type=application/json&payload={}&api-endpoint=/application-mgt-store/v1.0/reviews/" + this.props.uuid+"?offset="+offset+"%26limit="+limit; + axios.post('https://' + config.serverConfig.hostname + ':' + config.serverConfig.httpsPort + config.serverConfig.invokerUri, request + ).then(res => { + if (res.status === 200) { + let reviews = res.data.data.data; + callback(reviews); + } + + }).catch(function (error) { + if (error.response.status === 401) { + window.location.href = 'https://localhost:9443/store/login'; + message.warning('Something went wrong'); + } + }); + }; + + handleInfiniteOnLoad = (count) => { + const offset = count*limit; + let data = this.state.data; + this.setState({ + loading: true, + }); + if (data.length > 149) { + this.setState({ + hasMore: false, + loading: false, + }); + return; + } + this.fetchData(offset, limit, res => { + if(res.length>0){ + data = data.concat(res); + this.setState({ + data, + loading: false, + }); + }else { + this.setState({ + hasMore: false, + loading: false + }); + } + }); + }; + + enableLoading = () => { + this.setState({ + hasMore: true, + loadMore: true + }); + }; + + render() { + const review = { + id: 2, + content: "Btw, it was clear to me that I can cancel the 1 year subscription before the free trial week and so I did. Dont understand the negative reviews about that. It has a good collection of excercises, meditations etc. You just answer 5 questions and you get challenges assigned to you. I would have liked something even more personalized. I didnt like the interface. It is a bit messy and difficult to follow your tasks. So, I didnt want to do a full-year subscription. There could be more options.", + rootParentI: -1, + immediateParentId: -1, + createdAt: "Fri, 24 May 2019 17:27:22 IST", + modifiedAt: "Fri, 24 May 2019 17:27:22 IST", + rating: 4, + replies: [] + }; + console.log(this.state.loadMore); + console.log(this.state.data.length); + return ( +
+ + ( + + + + )} + > + {this.state.loading && this.state.hasMore && ( +
+ +
+ )} +
+
+ {!this.state.loadMore && (this.state.data.length >= limit) && (
+ +
)} +
+ ); + } +} + +export default Reviews; \ No newline at end of file diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.store.ui/react-app/src/components/apps/release/review/SingleReview.js b/components/application-mgt/org.wso2.carbon.device.application.mgt.store.ui/react-app/src/components/apps/release/review/SingleReview.js new file mode 100644 index 0000000000..3834b3ff2e --- /dev/null +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.store.ui/react-app/src/components/apps/release/review/SingleReview.js @@ -0,0 +1,46 @@ +import React from "react"; +import {Avatar} from "antd"; +import {List,Typography} from "antd"; +import StarRatings from "react-star-ratings"; + +const {Text, Paragraph} = Typography; +const colorList = ['#f0932b','#badc58','#6ab04c','#eb4d4b','#0abde3', '#9b59b6','#3498db','#22a6b3']; + +class SingleReview extends React.Component { + + render() { + const review = this.props.review; + const randomColor = colorList[Math.floor(Math.random() * (colorList.length))]; + const avatarLetter = review.username.charAt(0).toUpperCase(); + const content = ( +
+ + {review.createdAt}
+ {review.content} +
+ ); + + return ( +
+ + {avatarLetter} + + } + title={review.username} + description={content} + /> +
+ ); + } +} + +export default SingleReview; \ No newline at end of file