@@ -384,36 +384,49 @@ async function addMembers (currentUser, id, criteria, data) {
384
384
const handles = data . handles || [ ]
385
385
const emails = data . emails || [ ]
386
386
387
- const membersByHandle = await helper . getMemberDetailsByHandles ( handles )
388
- . then ( members => {
389
- return _ . groupBy ( members , 'handle' )
390
- } )
391
-
392
- const membersByEmail = await helper . getMemberDetailsByEmails ( emails )
393
- . then ( members => {
394
- return _ . groupBy ( members , 'email' )
395
- } )
387
+ const handleMembers = await helper . getMemberDetailsByHandles ( handles )
388
+ . then ( ( members ) => _ . map ( members , ( member ) => ( {
389
+ ...member ,
390
+ // populate members with lower-cased handle for case insensitive search
391
+ handleLowerCase : member . handle . toLowerCase ( )
392
+ } ) ) )
393
+
394
+ const emailMembers = await helper . getMemberDetailsByEmails ( emails )
395
+ . then ( ( members ) => _ . map ( members , ( member ) => ( {
396
+ ...member ,
397
+ // populate members with lower-cased email for case insensitive search
398
+ emailLowerCase : member . email . toLowerCase ( )
399
+ } ) ) )
396
400
397
401
await Promise . all ( [
398
402
Promise . all ( handles . map ( handle => {
399
- if ( ! membersByHandle [ handle ] ) {
403
+ const memberDetails = _ . find ( handleMembers , { handleLowerCase : handle . toLowerCase ( ) } )
404
+
405
+ if ( ! memberDetails ) {
400
406
result . failed . push ( { error : 'User doesn\'t exist' , handle } )
401
407
return
402
408
}
403
- return _addMemberToProjectAsCustomer ( id , membersByHandle [ handle ] [ 0 ] . userId , criteria . fields )
409
+
410
+ return _addMemberToProjectAsCustomer ( id , memberDetails . userId , criteria . fields )
404
411
. then ( member => {
412
+ // note, that we return `handle` in the same case it was in request
405
413
result . success . push ( ( { ...member , handle } ) )
406
414
} ) . catch ( err => {
407
415
result . failed . push ( { error : err . message , handle } )
408
416
} )
409
417
} ) ) ,
418
+
410
419
Promise . all ( emails . map ( email => {
411
- if ( ! membersByEmail [ email ] ) {
420
+ const memberDetails = _ . find ( emailMembers , { emailLowerCase : email . toLowerCase ( ) } )
421
+
422
+ if ( ! memberDetails ) {
412
423
result . failed . push ( { error : 'User doesn\'t exist' , email } )
413
424
return
414
425
}
415
- return _addMemberToProjectAsCustomer ( id , membersByEmail [ email ] [ 0 ] . id , criteria . fields )
426
+
427
+ return _addMemberToProjectAsCustomer ( id , memberDetails . id , criteria . fields )
416
428
. then ( member => {
429
+ // note, that we return `email` in the same case it was in request
417
430
result . success . push ( ( { ...member , email } ) )
418
431
} ) . catch ( err => {
419
432
result . failed . push ( { error : err . message , email } )
0 commit comments