From 9841e2eeceeecb252b3f47ea1d0c171efb99dcb5 Mon Sep 17 00:00:00 2001 From: Tobias Klika Date: Wed, 16 Sep 2020 10:51:26 +0200 Subject: [PATCH] user picker --- zero.Core/Api/UserApi.cs | 26 +++++-- .../pickers/userPicker/userpicker.vue | 78 +++++++++++++++++++ zero.Web.UI/App/resources/users.js | 33 ++++---- zero.Web/Controllers/UsersController.cs | 21 +++++ 4 files changed, 137 insertions(+), 21 deletions(-) create mode 100644 zero.Web.UI/App/components/pickers/userPicker/userpicker.vue diff --git a/zero.Core/Api/UserApi.cs b/zero.Core/Api/UserApi.cs index a582c251..2ab01024 100644 --- a/zero.Core/Api/UserApi.cs +++ b/zero.Core/Api/UserApi.cs @@ -36,12 +36,19 @@ namespace zero.Core.Api /// - public async Task> GetAll(string appId = null) + public async Task> GetByIds(params string[] ids) + { + return await GetByIds(ids); + } + + + /// + public async Task> GetAll() { using (IAsyncDocumentSession session = Raven.OpenAsyncSession()) { return await session.Query() - .Scope(appId) + .Scope(Scope) .OrderByDescending(x => x.CreatedDate) .ToListAsync(); } @@ -49,14 +56,14 @@ namespace zero.Core.Api /// - public async Task> GetByQuery(ListQuery query, string appId = null) + public async Task> GetByQuery(ListQuery query) { query.SearchSelector = user => user.Name; using (IAsyncDocumentSession session = Raven.OpenAsyncSession()) { return await session.Query() - .Scope(appId) + .Scope(Scope) .ToQueriedListAsync(query); } } @@ -160,17 +167,22 @@ namespace zero.Core.Api /// /// Find user by email /// - Task GetUserByEmail(string email); + Task GetUserByEmail(string email); + + /// + /// Get users by ids + /// + Task> GetByIds(params string[] ids); /// /// Get all users for the selected application /// - Task> GetAll(string appId = null); + Task> GetAll(); /// /// Get all available users (with query) /// - Task> GetByQuery(ListQuery query, string appId = null); + Task> GetByQuery(ListQuery query); /// /// Creates or updates a user diff --git a/zero.Web.UI/App/components/pickers/userPicker/userpicker.vue b/zero.Web.UI/App/components/pickers/userPicker/userpicker.vue new file mode 100644 index 00000000..2cb11f54 --- /dev/null +++ b/zero.Web.UI/App/components/pickers/userPicker/userpicker.vue @@ -0,0 +1,78 @@ + + + + + + \ No newline at end of file diff --git a/zero.Web.UI/App/resources/users.js b/zero.Web.UI/App/resources/users.js index 0688a73e..1d676345 100644 --- a/zero.Web.UI/App/resources/users.js +++ b/zero.Web.UI/App/resources/users.js @@ -1,47 +1,52 @@ import Axios from 'axios'; import AuthApi from 'zero/services/auth'; +const base = 'users/'; + export default { - // get user by id getById(id) { - return Axios.get('users/getById', { params: { id } }).then(res => Promise.resolve(res.data)); + return Axios.get(base + 'getById', { params: { id } }).then(res => Promise.resolve(res.data)); }, - // get all users getAll(query) { - return Axios.get('users/getAll', { params: query }).then(res => Promise.resolve(res.data)); + return Axios.get(base + 'getAll', { params: query }).then(res => Promise.resolve(res.data)); + }, + + getPreviews(ids) + { + return Axios.get(base + 'getPreviews', { params: { ids } }).then(res => Promise.resolve(res.data)); + }, + + getForPicker() + { + return Axios.get(base + 'getForPicker').then(res => Promise.resolve(res.data)); }, - // save a user save(model) { - return Axios.post('users/save', model).then(res => Promise.resolve(res.data)); + return Axios.post(base + 'save', model).then(res => Promise.resolve(res.data)); }, - // deletes a user delete(id) { - return Axios.delete('users/delete', { params: { id } }).then(res => Promise.resolve(res.data)); + return Axios.delete(base + 'delete', { params: { id } }).then(res => Promise.resolve(res.data)); }, - // change password updatePassword(model) { - return Axios.post('users/updatePassword', model).then(res => Promise.resolve(res.data)); + return Axios.post(base + 'updatePassword', model).then(res => Promise.resolve(res.data)); }, - // disable user disable(model) { - return Axios.post('users/disable', model).then(res => Promise.resolve(res.data)); + return Axios.post(base + 'disable', model).then(res => Promise.resolve(res.data)); }, - // enable user enable(model) { - return Axios.post('users/enable', model).then(res => Promise.resolve(res.data)); + return Axios.post(base + 'enable', model).then(res => Promise.resolve(res.data)); } }; \ No newline at end of file diff --git a/zero.Web/Controllers/UsersController.cs b/zero.Web/Controllers/UsersController.cs index aa89218a..47ea0470 100644 --- a/zero.Web/Controllers/UsersController.cs +++ b/zero.Web/Controllers/UsersController.cs @@ -1,4 +1,6 @@ using Microsoft.AspNetCore.Mvc; +using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; using zero.Core.Api; using zero.Core.Entities; @@ -32,6 +34,25 @@ namespace zero.Web.Controllers public IActionResult GetAllPermissions() => Json(PermissionsApi.GetAll()); + public async Task GetForPicker() => Json((await Api.GetAll()).Select(x => new SelectModel() + { + Id = x.Id, + Name = x.Name, + IsActive = x.IsActive + })); + + + public async Task GetPreviews(List ids) + { + return JsonPreviews(await Api.GetByIds(ids.ToArray()), item => new PreviewModel() + { + Id = item.Id, + Icon = item.AvatarId, + Name = item.Name + }); + } + + [ZeroAuthorize] public async Task UpdatePassword([FromBody] UserPasswordEditModel model) {