{"version":3,"file":"app.js","mappings":"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","sources":["webpack://VirtoCommerce.CustomerReviews/./Scripts/VirtoCommerce.CustomerReviews.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/blades/review-detail.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/blades/reviews-list.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/resources/CustomerReviews.Rating.WebApi.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/resources/CustomerReviews.WebApi.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/services/entityTypesResolverService.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/widgets/product-rating-widget.js"],"sourcesContent":["//Call this to register our module to main application\nvar moduleTemplateName = \"VirtoCommerce.CustomerReviews\";\n\nif (AppDependencies != undefined) {\n AppDependencies.push(moduleTemplateName);\n}\n\nangular.module(moduleTemplateName, [])\n.config(['$stateProvider', '$urlRouterProvider',\n function ($stateProvider, $urlRouterProvider) {\n $stateProvider\n .state('workspace.customerReviews', {\n url: '/customerReviews',\n templateUrl: '$(Platform)/Scripts/common/templates/home.tpl.html',\n controller: [\n '$scope', 'platformWebApp.bladeNavigationService', function ($scope, bladeNavigationService) {\n var newBlade = {\n id: 'reviewsList',\n controller: 'VirtoCommerce.CustomerReviews.reviewsListController',\n template: 'Modules/$(VirtoCommerce.CustomerReviews)/Scripts/blades/reviews-list.tpl.html',\n isClosingDisabled: true,\n //filter: { reviewStatus: null }\n };\n bladeNavigationService.showBlade(newBlade);\n }\n ]\n });\n \n }\n])\n .run(['platformWebApp.mainMenuService', 'platformWebApp.widgetService', '$state',\n 'platformWebApp.authService', 'VirtoCommerce.CustomerReviews.entityTypesResolverService',\n 'virtoCommerce.catalogModule.items',\n function (mainMenuService, widgetService, $state, authService, entityTypesResolverService, items) {\n\n //Register reviews menu item\n var menuItemNewReviews = {\n path: 'browse/customerReviewsNew',\n icon: 'fa fa-comments',\n title: 'Rating and Reviews',\n priority: 100,\n action: function () { $state.go('workspace.customerReviews') },\n permission: 'customerReviews:read'\n };\n mainMenuService.addMenuItem(menuItemNewReviews);\n\n //Reviews widget inside product blade\n var itemReviewsWidget = {\n controller: 'VirtoCommerce.CustomerReviews.productRatingWidgetController',\n template: 'Modules/$(VirtoCommerce.CustomerReviews)/Scripts/widgets/product-rating-widget.tpl.html',\n isVisible: function (blade) { return authService.checkPermission('customerReviews:read'); }\n };\n widgetService.registerWidget(itemReviewsWidget, 'itemDetail');\n\n //Product entityType resolver\n entityTypesResolverService.registerType({\n entityType: 'Product',\n description: 'customerReviews.blades.product-detail.description',\n fullTypeName: 'VirtoCommerce.CatalogModule.Core.Model.CatalogProduct',\n icon: 'fas fa-shopping-bag',\n entityIdFieldName: 'itemId',\n detailBlade: {\n controller: 'virtoCommerce.catalogModule.itemDetailController',\n template: 'Modules/$(VirtoCommerce.Catalog)/Scripts/blades/item-detail.tpl.html'\n },\n getEntity: function (entityId, setEntityCallback) {\n items.get({ id: entityId, respGroup: 1 }, (data) => {\n setEntityCallback(data.name, data.imgSrc);\n });\n },\n knownChildrenTypes: []\n });\n\n }\n]);\n","angular.module('VirtoCommerce.CustomerReviews')\n .controller('VirtoCommerce.CustomerReviews.reviewDetailController',\n ['$scope', 'platformWebApp.bladeNavigationService', 'CustomerReviews.WebApi',\n 'VirtoCommerce.CustomerReviews.entityTypesResolverService', 'platformWebApp.dialogService',\n 'VirtoCommerce.RatingApi',\n function ($scope, bladeNavigationService, reviewsApi, entityTypesResolverService, dialogService, ratingApi) {\n var blade = $scope.blade;\n blade.updatePermission = 'customerReviews:update';\n\n blade.refresh = function () {\n blade.origEntity = blade.currentEntity;\n blade.securityScopes = blade.currentEntity.securityScopes;\n blade.currentEntity = angular.copy(blade.currentEntity);\n getEntityObject(blade.currentEntity.entityId);\n getEntityRating(blade.currentEntity.entityId, blade.currentEntity.entityType);\n blade.isLoading = false;\n }\n\n blade.ratingValidator = function (value) {\n var pattern = new RegExp(\"^([1-5])$\");\n return pattern.test(value);\n };\n\n blade.formScope = null;\n $scope.setForm = function (form) { blade.formScope = form; };\n\n blade.openReviewEntityDetails = function() {\n var foundTemplate = entityTypesResolverService.resolve(blade.currentEntity.entityType);\n if (foundTemplate) {\n var newBlade = angular.copy(foundTemplate.detailBlade);\n newBlade[foundTemplate.entityIdFieldName] = blade.currentEntity.entityId;\n bladeNavigationService.showBlade(newBlade, blade);\n } else {\n dialogService.showNotificationDialog({\n id: \"error\",\n title: \"customerReviews.dialogs.unknown-entity-type.title\",\n message: \"customerReviews.dialogs.unknown-entity-type.message\",\n messageValues: { entityType: blade.currentEntity.entityType }\n });\n }\n }\n\n function isDirty() {\n return !angular.equals(blade.currentEntity, blade.origEntity);\n };\n\n function canSave() {\n return isDirty() && blade.formScope && blade.formScope.$valid;\n }\n\n function saveChanges() {\n blade.isLoading = true;\n reviewsApi.update({}, [blade.currentEntity],\n function (data, headers) {\n blade.isLoading = false;\n blade.parentBlade.refresh(true);\n blade.origEntity = blade.currentEntity;\n $scope.bladeClose();\n },\n function (error) {\n bladeNavigationService.setError('Error ' + error.status, blade);\n blade.isLoading = false;\n });\n };\n\n function getEntityObject(entityId) {\n var foundTemplate = entityTypesResolverService.resolve(blade.currentEntity.entityType);\n if (foundTemplate && foundTemplate.getEntity) {\n return foundTemplate.getEntity(entityId, setEntityObjectCallback);\n }\n return {};\n }\n\n function setEntityObjectCallback(entityName, entityImage) {\n blade.entityObject = { name: entityName, image: entityImage };\n }\n\n function getEntityRating(entityId, entityType) {\n ratingApi.get({ entityIds: [entityId], entityType: entityType }, function (data) {\n const ratingValues = data.map(x => x.value);\n if (ratingValues.length > 0) {\n blade.ratingValue = ratingValues[0].toFixed(1) + '/5';\n }\n return 0;\n });\n }\n\n function approveReview() {\n reviewsApi.approve({}, [blade.currentEntity.id],\n function (data, headers) {\n blade.isLoading = false;\n blade.parentBlade.refresh(true);\n $scope.bladeClose();\n },\n function (error) {\n bladeNavigationService.setError('Error ' + error.status, blade);\n blade.isLoading = false;\n });\n }\n\n function rejectReview() {\n reviewsApi.reject({}, [blade.currentEntity.id],\n function (data, headers) {\n blade.isLoading = false;\n blade.parentBlade.refresh(true);\n $scope.bladeClose();\n },\n function (error) {\n bladeNavigationService.setError('Error ' + error.status, blade);\n blade.isLoading = false;\n });\n }\n\n function resetReviewStatus() {\n reviewsApi.resetReviewStatus({}, [blade.currentEntity.id],\n function (data, headers) {\n blade.isLoading = false;\n blade.parentBlade.refresh(true);\n $scope.bladeClose();\n },\n function (error) {\n bladeNavigationService.setError('Error ' + error.status, blade);\n blade.isLoading = false;\n });\n }\n\n blade.onClose = function (closeCallback) {\n bladeNavigationService.showConfirmationIfNeeded(isDirty(), canSave(), blade, saveChanges, closeCallback, \"customerReviews.dialogs.customerReview-save.title\", \"customerReviews.dialogs.customerReview-save.message\");\n };\n\n function canApprove() {\n return blade.currentEntity.reviewStatusId === 0;\n }\n\n function canReject() {\n return blade.currentEntity.reviewStatusId === 0;\n }\n\n function canReset() {\n return blade.currentEntity.reviewStatusId !== 0;\n }\n\n function deleteReview() {\n var dialog = {\n id: \"confirmDeleteReview\",\n title: \"customerReviews.dialogs.review-delete.title\",\n message: \"customerReviews.dialogs.review-delete.message\",\n callback: function (remove) {\n if (remove) {\n blade.isLoading = true;\n reviewsApi.delete({ ids: [blade.currentEntity.id] }, function () {\n $scope.bladeClose();\n blade.parentBlade.refresh();\n });\n }\n }\n };\n dialogService.showConfirmationDialog(dialog);\n }\n\n blade.toolbarCommands = [\n {\n name: \"customerReviews.blades.review-detail.commands.approve\", icon: 'fa fa-cloud-upload',\n executeMethod: approveReview,\n canExecuteMethod: canApprove,\n permission: blade.updatePermission\n },\n {\n name: \"customerReviews.blades.review-detail.commands.reject\", icon: 'fa fa-unlink',\n executeMethod: rejectReview,\n canExecuteMethod: canReject,\n permission: blade.updatePermission\n },\n {\n name: \"customerReviews.blades.review-detail.commands.resetReviewStatus\", icon: 'fa fa-edit',\n executeMethod: resetReviewStatus,\n canExecuteMethod: canReset,\n permission: blade.updatePermission\n },\n {\n name: \"platform.commands.delete\", icon: 'fas fa-trash-alt',\n executeMethod: deleteReview,\n canExecuteMethod: function () {\n return true;\n }\n }\n ];\n\n blade.refresh();\n\n }]);\n","angular.module('VirtoCommerce.CustomerReviews')\n .controller('VirtoCommerce.CustomerReviews.reviewsListController',\n ['$scope', 'CustomerReviews.WebApi', 'platformWebApp.bladeUtils', 'uiGridConstants',\n 'platformWebApp.uiGridHelper', 'platformWebApp.authService', 'VirtoCommerce.CustomerReviews.entityTypesResolverService',\n function ($scope, reviewsApi, bladeUtils, uiGridConstants, uiGridHelper, authService, entityTypesResolverService) {\n $scope.uiGridConstants = uiGridConstants;\n\n var blade = $scope.blade;\n var bladeNavigationService = bladeUtils.bladeNavigationService;\n \n\n blade.refresh = function () {\n blade.isLoading = true;\n var reviewStatus = filter.reviewStatusObj ? filter.reviewStatusObj.value : null;\n var statuses = null;\n if (reviewStatus != null) {\n statuses = [reviewStatus];\n }\n reviewsApi.search(angular.extend(filter, {\n searchPhrase: filter.keyword ? filter.keyword : undefined,\n reviewStatus: statuses,\n sort: uiGridHelper.getSortExpression($scope),\n skip: ($scope.pageSettings.currentPage - 1) * $scope.pageSettings.itemsPerPageCount,\n take: $scope.pageSettings.itemsPerPageCount\n }), function (data) {\n blade.isLoading = false;\n $scope.pageSettings.totalItems = data.totalCount;\n blade.currentEntities = data.results;\n });\n }\n\n blade.selectNode = function (data) {\n $scope.selectedNodeId = data.id;\n\n if (!authService.checkPermission('customerReviews:update')) {\n return;\n }\n\n var newBlade = {\n id: 'reviewDetails',\n currentEntityId: data.id,\n currentEntity: angular.copy(data),\n title: 'Customer review',\n controller: 'VirtoCommerce.CustomerReviews.reviewDetailController',\n template: 'Modules/$(VirtoCommerce.CustomerReviews)/Scripts/blades/review-detail.tpl.html'\n };\n bladeNavigationService.showBlade(newBlade, blade);\n } \n \n blade.headIcon = 'fa fa-comments';\n blade.title = 'Rating and Reviews';\n\n blade.toolbarCommands = [\n {\n name: \"platform.commands.refresh\", icon: 'fa fa-refresh',\n executeMethod: blade.refresh,\n canExecuteMethod: function () {\n return true;\n }\n }\n ];\n\n $scope.reviewStatusList = [\n {\n name: \"New\",\n value: 0\n },\n {\n name: \"Approved\",\n value: 1\n },\n {\n name: \"Rejected\",\n value: 2\n }\n ];\n\n $scope.entityTypesList = entityTypesResolverService.objects.map(x => x.entityType);\n\n // simple and advanced filtering\n var filter = $scope.filter = blade.filter || {};\n\n if (filter.reviewStatus >= 0) {\n filter.reviewStatusObj = $scope.reviewStatusList[filter.reviewStatus];\n }\n\n filter.criteriaChanged = function () {\n if ($scope.pageSettings.currentPage > 1) {\n $scope.pageSettings.currentPage = 1;\n } else {\n blade.refresh();\n }\n };\n\n // ui-grid\n $scope.setGridOptions = function (gridOptions) {\n uiGridHelper.initialize($scope, gridOptions, function (gridApi) {\n uiGridHelper.bindRefreshOnSortChanged($scope);\n });\n bladeUtils.initializePagination($scope);\n };\n\n }]);\n","angular.module('VirtoCommerce.CustomerReviews')\n.factory('VirtoCommerce.RatingApi', ['$resource', function ($resource) {\n return $resource('api/rating', {},\n {\n calculateStore: { method: 'POST', url: 'api/rating/calculateStore' },\n get: { method: 'POST', url: 'api/rating/entityRating', isArray: true }\n });\n}]);\n","angular.module('VirtoCommerce.CustomerReviews')\n.factory('CustomerReviews.WebApi', ['$resource', function ($resource) {\n return $resource('api/customerReviews', {}, {\n search: { method: 'POST', url: 'api/customerReviews/reviewList' },\n update: { method: 'POST' },\n delete: { method: 'DELETE' },\n approve: { method: 'POST', url: 'api/customerReviews/approve' },\n reject: { method: 'POST', url: 'api/customerReviews/reject' },\n resetReviewStatus: { method: 'POST', url: 'api/customerReviews/reset' },\n });\n }]);\n","angular.module('VirtoCommerce.CustomerReviews')\n .factory('VirtoCommerce.CustomerReviews.entityTypesResolverService', function () {\n return {\n objects: [],\n registerType: function (entityTypeDefinition) {\n entityTypeDefinition.detailBlade = angular.extend({\n id: \"entityDetail\",\n metaFields: [],\n entityTypeDefinition: entityTypeDefinition\n }, entityTypeDefinition.detailBlade);\n\n entityTypeDefinition.knownChildrenTypes = entityTypeDefinition.knownChildrenTypes || [];\n\n this.objects.push(entityTypeDefinition);\n },\n resolve: function (type) {\n return _.findWhere(this.objects, { entityType: type });\n }\n };\n });\n","angular.module('VirtoCommerce.CustomerReviews')\n .controller('VirtoCommerce.CustomerReviews.productRatingWidgetController',\n ['$scope', 'VirtoCommerce.RatingApi', 'platformWebApp.bladeNavigationService',\n function ($scope, ratingApi, bladeNavigationService) {\n var blade = $scope.blade;\n var productId = $scope.widget.blade.itemId;\n\n function init() {\n $scope.loading = false;\n $scope.ratingRange = '0';\n $scope.ratings = null;\n $scope.reviewsCount = 0;\n }\n\n function refresh() {\n $scope.loading = true;\n\n var params = {\n entityIds: [productId],\n entityType: 'Product'\n };\n\n ratingApi.get(params, function (data) {\n $scope.ratings = data;\n $scope.ratingRange = getRating(data);\n $scope.reviewsCount = getReviewsCount(data);\n $scope.loading = false;\n });\n }\n\n function getRating(ratings) {\n const ratingValues = ratings.map(x => x.value);\n if (ratingValues && ratingValues.length > 0) {\n return ratingValues[0].toFixed(1);\n }\n return 0;\n }\n\n function getReviewsCount(ratings) {\n const reviewsCounts = ratings.map(x => x.reviewCount);\n if (reviewsCounts && reviewsCounts.length > 0) {\n return reviewsCounts[0];\n }\n return 0;\n }\n\n $scope.openBlade = function () {\n if ($scope.loading) {\n return;\n }\n\n var newBlade = {\n id: 'sellerReviewsList',\n title: 'Customer review',\n controller: 'VirtoCommerce.CustomerReviews.reviewsListController',\n template: 'Modules/$(VirtoCommerce.CustomerReviews)/Scripts/blades/reviews-list.tpl.html',\n filter: { entityIds: [productId], entityType: 'Product' }\n };\n\n bladeNavigationService.showBlade(newBlade, blade);\n\n };\n\n $scope.$watch(\"blade.itemId\", function (id) {\n if (id) {\n refresh();\n }\n });\n\n init();\n\n }\n ]);\n"],"names":["moduleTemplateName","undefined","AppDependencies","push","angular","module","config","$stateProvider","$urlRouterProvider","state","url","templateUrl","controller","$scope","bladeNavigationService","showBlade","id","template","isClosingDisabled","run","mainMenuService","widgetService","$state","authService","entityTypesResolverService","items","menuItemNewReviews","path","icon","title","priority","action","go","permission","addMenuItem","itemReviewsWidget","isVisible","blade","checkPermission","registerWidget","registerType","entityType","description","fullTypeName","entityIdFieldName","detailBlade","getEntity","entityId","setEntityCallback","get","respGroup","data","name","imgSrc","knownChildrenTypes","reviewsApi","dialogService","ratingApi","isDirty","equals","currentEntity","origEntity","saveChanges","isLoading","update","headers","parentBlade","refresh","bladeClose","error","setError","status","setEntityObjectCallback","entityName","entityImage","entityObject","image","updatePermission","securityScopes","copy","foundTemplate","resolve","getEntityObject","entityIds","ratingValues","map","x","value","length","ratingValue","toFixed","ratingValidator","RegExp","test","formScope","setForm","form","openReviewEntityDetails","newBlade","showNotificationDialog","message","messageValues","onClose","closeCallback","showConfirmationIfNeeded","$valid","toolbarCommands","executeMethod","approve","canExecuteMethod","reviewStatusId","reject","resetReviewStatus","dialog","callback","remove","delete","ids","showConfirmationDialog","bladeUtils","uiGridConstants","uiGridHelper","reviewStatus","filter","reviewStatusObj","statuses","search","extend","searchPhrase","keyword","sort","getSortExpression","skip","pageSettings","currentPage","itemsPerPageCount","take","totalItems","totalCount","currentEntities","results","selectNode","selectedNodeId","currentEntityId","headIcon","reviewStatusList","entityTypesList","objects","criteriaChanged","setGridOptions","gridOptions","initialize","gridApi","bindRefreshOnSortChanged","initializePagination","factory","$resource","calculateStore","method","isArray","entityTypeDefinition","metaFields","this","type","_","findWhere","productId","widget","itemId","openBlade","loading","$watch","params","ratings","ratingRange","getRating","reviewsCount","reviewsCounts","reviewCount","getReviewsCount"],"sourceRoot":""}