diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/users.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/users.resource.js index 2b9e0c0fd5..91f00a36e3 100644 --- a/src/Umbraco.Web.UI.Client/src/common/resources/users.resource.js +++ b/src/Umbraco.Web.UI.Client/src/common/resources/users.resource.js @@ -295,6 +295,38 @@ "Failed to retrieve data for user " + userId); } + + /** + * @ngdoc method + * @name umbraco.resources.usersResource#getUsers + * @methodOf umbraco.resources.usersResource + * + * @description + * Gets users from ids + * + * ##usage + *
+ * usersResource.getUsers([1,2,3])
+ * .then(function(data) {
+ * alert("It's here");
+ * });
+ *
+ *
+ * @param {Array} userIds user ids.
+ * @returns {Promise} resourcePromise object containing the users array.
+ *
+ */
+ function getUsers(userIds) {
+
+ return umbRequestHelper.resourcePromise(
+ $http.get(
+ umbRequestHelper.getApiUrl(
+ "userApiBaseUrl",
+ "GetByIds",
+ { ids: userIds })),
+ "Failed to retrieve data for users " + userIds);
+ }
+
/**
* @ngdoc method
* @name umbraco.resources.usersResource#createUser
@@ -481,6 +513,7 @@
setUserGroupsOnUsers: setUserGroupsOnUsers,
getPagedResults: getPagedResults,
getUser: getUser,
+ getUsers: getUsers,
createUser: createUser,
inviteUser: inviteUser,
saveUser: saveUser,
diff --git a/src/Umbraco.Web.UI.Client/src/less/components/users/umb-user-preview.less b/src/Umbraco.Web.UI.Client/src/less/components/users/umb-user-preview.less
index f62f3afd37..d0dca54403 100644
--- a/src/Umbraco.Web.UI.Client/src/less/components/users/umb-user-preview.less
+++ b/src/Umbraco.Web.UI.Client/src/less/components/users/umb-user-preview.less
@@ -4,6 +4,11 @@
display: flex;
box-sizing: border-box;
border-bottom: 1px solid @gray-9;
+ flex-wrap: wrap;
+}
+
+.umb-editor-wrapper .umb-user-preview {
+ .umb-property-editor--limit-width();
}
.umb-user-preview:last-of-type {
@@ -29,22 +34,26 @@
flex: 0 0 auto;
display: flex;
align-items: center;
+ margin-left: auto;
}
.umb-user-preview__action {
+ background: transparent;
+ padding: 0;
+ border: 0 none;
margin-left: 5px;
margin-right: 5px;
font-size: 13px;
font-weight: bold;
- color: @gray-5;
+ color: @ui-action-type;
}
.umb-user-preview__action:hover {
- color: @turquoise;
+ color: @ui-action-type-hover;
text-decoration: none;
opacity: 1;
}
.umb-user-preview__action--red:hover {
color: @red;
-}
\ No newline at end of file
+}
diff --git a/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/userpicker/userpicker.controller.js b/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/userpicker/userpicker.controller.js
index 2bd73a5558..a7021b2867 100644
--- a/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/userpicker/userpicker.controller.js
+++ b/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/userpicker/userpicker.controller.js
@@ -1,7 +1,7 @@
(function () {
"use strict";
- function UserPickerController($scope, usersResource, localizationService) {
+ function UserPickerController($scope, usersResource, localizationService, eventsService) {
var vm = this;
@@ -15,15 +15,18 @@
vm.submit = submit;
vm.close = close;
- //////////
+ vm.multiPicker = $scope.model.multiPicker === false ? false : true;
function onInit() {
vm.loading = true;
// set default title
- if(!$scope.model.title) {
- localizationService.localize("defaultdialogs_selectUsers").then(function(value){
+ if (!$scope.model.title) {
+
+ var labelKey = vm.multiPicker ? "defaultdialogs_selectUsers" : "defaultdialogs_selectUser";
+
+ localizationService.localize(labelKey).then(function(value){
$scope.model.title = value;
});
}
@@ -35,12 +38,11 @@
// get users
getUsers();
-
}
function preSelect(selection, users) {
- angular.forEach(selection, function(selected){
- angular.forEach(users, function(user){
+ Utilities.forEach(selection, function(selected){
+ Utilities.forEach(users, function(user){
if(selected.id === user.id) {
user.selected = true;
}
@@ -50,22 +52,39 @@
function selectUser(user) {
- if(!user.selected) {
-
+ if (!user.selected) {
user.selected = true;
$scope.model.selection.push(user);
-
} else {
- angular.forEach($scope.model.selection, function(selectedUser, index){
- if(selectedUser.id === user.id) {
- user.selected = false;
- $scope.model.selection.splice(index, 1);
+ if (user.selected) {
+ Utilities.forEach($scope.model.selection, function (selectedUser, index) {
+ if (selectedUser.id === user.id) {
+ user.selected = false;
+ $scope.model.selection.splice(index, 1);
+ }
+ });
+ } else {
+ if (!vm.multiPicker) {
+ deselectAllUsers($scope.model.selection);
}
- });
-
+ eventsService.emit("dialogs.userPicker.select", user);
+ user.selected = true;
+ $scope.model.selection.push(user);
+ }
}
+ if (!vm.multiPicker) {
+ submit($scope.model);
+ }
+ }
+
+ function deselectAllUsers(users) {
+ for (var i = 0; i < users.length; i++) {
+ var user = users[i];
+ user.selected = false;
+ }
+ users.length = 0;
}
var search = _.debounce(function () {
@@ -95,7 +114,6 @@
preSelect($scope.model.selection, vm.users);
vm.loading = false;
-
});
}
@@ -105,14 +123,14 @@
}
function submit(model) {
- if($scope.model.submit) {
+ if ($scope.model.submit) {
$scope.model.submit(model);
}
}
function close() {
- if($scope.model.close) {
- $scope.model.close();
+ if ($scope.model.close) {
+ $scope.model.close();
}
}
diff --git a/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/userpicker/userpicker.html b/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/userpicker/userpicker.html
index e39d693b47..5536ce38c2 100644
--- a/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/userpicker/userpicker.html
+++ b/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/userpicker/userpicker.html
@@ -19,7 +19,7 @@