diff --git a/gui/app/components/folder/permission-admin.js b/gui/app/components/folder/permission-admin.js index c91010e9..d135faa6 100644 --- a/gui/app/components/folder/permission-admin.js +++ b/gui/app/components/folder/permission-admin.js @@ -11,6 +11,7 @@ import { inject as service } from '@ember/service'; import { A } from "@ember/array" +import { debounce } from '@ember/runloop'; import ModalMixin from '../../mixins/modal'; import Component from '@ember/component'; @@ -21,7 +22,9 @@ export default Component.extend(ModalMixin, { appMeta: service(), store: service(), spacePermissions: null, - + users: null, + searchText: '', + didReceiveAttrs() { let spacePermissions = A([]); let constants = this.get('constants'); @@ -32,9 +35,12 @@ export default Component.extend(ModalMixin, { groups.forEach((g) => { let pr = this.permissionRecord(constants.WhoType.Group, g.get('id'), g.get('name')); + pr.set('members', g.get('members')); spacePermissions.pushObject(pr); }); + let hasEveryoneId = false; + // get space permissions this.get('spaceSvc').getPermissions(this.get('folder.id')).then((permissions) => { permissions.forEach((perm, index) => { // eslint-disable-line no-unused-vars @@ -48,13 +54,25 @@ export default Component.extend(ModalMixin, { }); } else { // user permission + if (perm.get('whoId') === constants.EveryoneUserId) { + perm.set('name', ' ' + perm.get('name')); + hasEveryoneId = true; + } spacePermissions.pushObject(perm); } }); + // always show everyone + if (!hasEveryoneId) { + let pr = this.permissionRecord(constants.WhoType.User, constants.EveryoneUserId, ' ' + constants.EveryoneUserName); + spacePermissions.pushObject(pr); + } + this.set('spacePermissions', spacePermissions.sortBy('who', 'name')); }); }); + + this.set('searchText', ''); }, permissionRecord(who, whoId, name) { @@ -85,6 +103,24 @@ export default Component.extend(ModalMixin, { return "Hey there, I am sharing the " + this.get('folder.name') + " space (in " + this.get("appMeta.title") + ") with you so we can both collaborate on documents."; }, + matchUsers(s) { + let spacePermissions = this.get('spacePermissions'); + let filteredUsers = A([]); + + this.get('userSvc').matchUsers(s).then((users) => { + + users.forEach((user) => { + let exists = spacePermissions.findBy('whoId', user.get('id')); + + if (is.undefined(exists)) { + filteredUsers.pushObject(user); + } + }); + + this.set('filteredUsers', filteredUsers); + }); + }, + actions: { setPermissions() { let message = this.getDefaultInvitationMessage(); @@ -122,6 +158,31 @@ export default Component.extend(ModalMixin, { this.get('spaceSvc').savePermissions(folder.get('id'), payload).then(() => { this.modalClose('#space-permission-modal'); }); - } + }, + + onSearch() { + debounce(this, function() { + let searchText = this.get('searchText').trim(); + + if (searchText.length === 0) { + this.set('filteredUsers', A([])); + return; + } + + this.matchUsers(searchText); + }, 250); + }, + + onAdd(user) { + let spacePermissions = this.get('spacePermissions'); + let constants = this.get('constants'); + + let exists = spacePermissions.findBy('whoId', user.get('id')); + if (is.undefined(exists)) { + spacePermissions.pushObject(this.permissionRecord(constants.WhoType.User, user.get('id'), user.get('fullname'))); + this.set('spacePermissions', spacePermissions); + // this.set('spacePermissions', spacePermissions.sortBy('who', 'name')); + } + }, } }); diff --git a/gui/app/constants/constants.js b/gui/app/constants/constants.js index 72e0a3c3..82a5fa89 100644 --- a/gui/app/constants/constants.js +++ b/gui/app/constants/constants.js @@ -59,7 +59,8 @@ let constants = EmberObject.extend({ Group: 'role' }, - EveryoneUserId: "0" + EveryoneUserId: "0", + EveryoneUserName: "Everyone" }); export default { constants } \ No newline at end of file diff --git a/gui/app/models/space-permission.js b/gui/app/models/space-permission.js index 67b2b269..f5a06512 100644 --- a/gui/app/models/space-permission.js +++ b/gui/app/models/space-permission.js @@ -27,5 +27,6 @@ export default Model.extend({ documentCopy: attr('boolean'), documentTemplate: attr('boolean'), documentApprove: attr('boolean'), - name: attr('string') // read-only + name: attr('string'), // read-only + members: attr('number') // read-only }); diff --git a/gui/app/styles/color.scss b/gui/app/styles/color.scss index 12a4f471..bcf790a0 100644 --- a/gui/app/styles/color.scss +++ b/gui/app/styles/color.scss @@ -72,6 +72,9 @@ $color-stroke: #e1e1e1; .color-gray { color: $color-gray !important; } +.color-gold { + color: $color-goldy !important; +} .background-color-white { background-color: $color-white !important; diff --git a/gui/app/templates/components/folder/permission-admin.hbs b/gui/app/templates/components/folder/permission-admin.hbs index 8f60401d..1de15b38 100644 --- a/gui/app/templates/components/folder/permission-admin.hbs +++ b/gui/app/templates/components/folder/permission-admin.hbs @@ -3,9 +3,9 @@