Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 448cb03

Browse files
committedDec 21, 2021
issue #180 fixed duplicate addressbooks showing up when an adressbook is publicly shared and delegated to a user
1 parent 93672f3 commit 448cb03

File tree

4 files changed

+77
-14
lines changed

4 files changed

+77
-14
lines changed
 

‎src/esn.contact.libs/app/addressBook/constants.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,5 @@ angular.module('esn.contact.libs')
4343
public: 'public'
4444
})
4545

46-
.constant('CONTACT_SHARING_SHARE_PRIVILEGE', '{DAV:}share');
46+
.constant('CONTACT_SHARING_SHARE_PRIVILEGE', '{DAV:}share')
47+
.constant('CONTACT_SHARING_WRITE_PRIVILEGE', '{DAV:}write');

‎src/linagora.esn.contact/app/addressbook/settings/main/contact-addressbook-settings-main.controller.js

+18-6
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ function contactAddressbookSettingsMainController(
1313
CONTACT_SHARING_SHARE_ACCESS,
1414
CONTACT_SHARING_SUBSCRIPTION_TYPE,
1515
CONTACT_SHARING_SHARE_ACCESS_CHOICES,
16-
CONTACT_ADDRESSBOOK_MEMBERS_RIGHTS
16+
CONTACT_ADDRESSBOOK_MEMBERS_RIGHTS,
17+
CONTACT_SHARING_WRITE_PRIVILEGE
1718
) {
1819
var self = this;
1920

@@ -62,11 +63,22 @@ function contactAddressbookSettingsMainController(
6263
}
6364

6465
function _initShareAccess() {
65-
self.shareAccess = _.find(
66-
CONTACT_SHARING_SHARE_ACCESS_CHOICES, {
67-
value: self.addressbook.shareAccess
68-
}
69-
);
66+
const { READWRITE } = CONTACT_SHARING_SHARE_ACCESS_CHOICES;
67+
68+
const access = Object.values(CONTACT_SHARING_SHARE_ACCESS_CHOICES)
69+
.find(({ value }) => value === self.addressbook.shareAccess);
70+
71+
if (!access) return;
72+
73+
if (access.value >= READWRITE.value) {
74+
self.shareAccess = access;
75+
76+
return;
77+
}
78+
79+
self.shareAccess = self.addressbook.source.rights.public === CONTACT_SHARING_WRITE_PRIVILEGE ?
80+
READWRITE :
81+
access;
7082
}
7183

7284
function _getShareOwner(sharees) {

‎src/linagora.esn.contact/app/sidebar/sidebar.controller.js

+20-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ function ContactSidebarController(
1212
userUtils,
1313
contactAddressbookDisplayService,
1414
contactAddressbookService,
15-
CONTACT_ADDRESSBOOK_EVENTS
15+
CONTACT_ADDRESSBOOK_EVENTS,
16+
CONTACT_SHARING_SUBSCRIPTION_TYPE
1617
) {
1718
var self = this;
1819
var LOADING_STATUS = {
@@ -150,7 +151,24 @@ function ContactSidebarController(
150151
var categories = contactAddressbookDisplayService.categorizeDisplayShells(self.displayShells);
151152

152153
self.userAddressbooks = categories.userAddressbooks;
153-
self.sharedAddressbooks = categories.sharedAddressbooks;
154+
self.sharedAddressbooks = _getUniqueSharedAddressbooks(categories.sharedAddressbooks);
154155
self.virtualAddressbooks = categories.virtualAddressbooks;
155156
}
157+
158+
function _getUniqueSharedAddressbooks(addressbooks) {
159+
if (!addressbooks) return;
160+
161+
const uniqueAddressbookList = addressbooks.reduce((acc, current) => {
162+
const { source: { href }, subscriptionType } = current.shell;
163+
const { delegation } = CONTACT_SHARING_SUBSCRIPTION_TYPE;
164+
165+
if (!acc[href] || subscriptionType === delegation) {
166+
acc[href] = current;
167+
}
168+
169+
return acc;
170+
}, {});
171+
172+
return Object.values(uniqueAddressbookList);
173+
}
156174
}

‎src/linagora.esn.contact/app/sidebar/sidebar.controller.spec.js

+37-5
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,11 @@ describe('The ContactSidebarController controller', function() {
4646
userAPI = _userAPI_;
4747
userUtils = _userUtils_;
4848
CONTACT_ADDRESSBOOK_EVENTS = _CONTACT_ADDRESSBOOK_EVENTS_;
49-
50-
contactAddressbookDisplayService.categorizeDisplayShells = function() {
51-
return {
49+
contactAddressbookDisplayService.categorizeDisplayShells = sinon.stub()
50+
.returns({
5251
userAddressbooks: [],
5352
externalAddressbooks: []
54-
};
55-
};
53+
});
5654
});
5755
});
5856

@@ -260,6 +258,40 @@ describe('The ContactSidebarController controller', function() {
260258
]);
261259
});
262260

261+
it('should avoid listing duplicate entries when an adressbook is shared an delegated to the same user', () => {
262+
contactAddressbookService.listAddressbooks = sinon.stub().returns($q.when([]));
263+
contactAddressbookDisplayService.categorizeDisplayShells.returns({
264+
userAddressbooks: [
265+
{
266+
name: 'bookA',
267+
shell: {
268+
source: { bookId: 'user0', href: '0' }
269+
}
270+
}
271+
],
272+
sharedAddressbooks: [
273+
{
274+
name: 'bookB',
275+
shell: {
276+
source: { bookId: 'user1', href: '1' }
277+
}
278+
},
279+
{
280+
name: 'bookC',
281+
shell: {
282+
source: { bookId: 'user1', href: '1' }
283+
}
284+
}
285+
]
286+
});
287+
288+
const controller = initController();
289+
290+
$rootScope.$digest();
291+
292+
expect(controller.sharedAddressbooks.length).to.equal(1);
293+
});
294+
263295
describe('On updated address book event', function() {
264296
it('should update an address book when updated address book event is fired', function() {
265297
var addressbooks = [

0 commit comments

Comments
 (0)
Please sign in to comment.