@@ -87,6 +87,10 @@ export default class MemberOrganizationsService extends LoggerBase {
8787 memberOrganizations . map ( ( mo ) => mo . id ) ,
8888 )
8989
90+ const overridesByMemberOrganizationId = new Map (
91+ affiliationOverrides . map ( ( override ) => [ override . memberOrganizationId , override ] ) ,
92+ )
93+
9094 // Create mapping by id to speed up the processing
9195 const orgById : Record < string , IOrganizationSummary > = organizations . reduce (
9296 ( obj : Record < string , IOrganizationSummary > , org ) => ( {
@@ -100,7 +104,7 @@ export default class MemberOrganizationsService extends LoggerBase {
100104 const groupedMemberOrganizations = groupMemberOrganizations ( memberOrganizations )
101105
102106 const allOrganizations = groupedMemberOrganizations
103- . filter ( ( mo ) => orgById [ mo . organizationId ] ) // Only include non-deleted organizations
107+ . filter ( ( mo ) : mo is typeof mo & { id : string } => ! ! mo . id && ! ! orgById [ mo . organizationId ] )
104108 . map ( ( mo ) => {
105109 const overlappingEmailDomainRows = getOverlappingEmailDomainMemberOrganizations (
106110 memberOrganizations ,
@@ -110,10 +114,9 @@ export default class MemberOrganizationsService extends LoggerBase {
110114 const relatedIds = [ mo . id , ...overlappingEmailDomainRows . map ( ( row ) => row . id ) ]
111115
112116 const relatedOverrides = relatedIds . map ( ( memberOrganizationId ) =>
113- affiliationOverrides . find (
114- ( override ) => override . memberOrganizationId === memberOrganizationId ,
115- ) ,
117+ overridesByMemberOrganizationId . get ( memberOrganizationId ) ,
116118 )
119+
117120 const resolvedOverrides = relatedOverrides . filter ( ( override ) => ! ! override )
118121
119122 // Merge override flags from rows that are displayed as one work experience
@@ -132,7 +135,7 @@ export default class MemberOrganizationsService extends LoggerBase {
132135 ...mo ,
133136 affiliationOverride : {
134137 memberId,
135- memberOrganizationId : mo . id as string ,
138+ memberOrganizationId : mo . id ,
136139 allowAffiliation,
137140 isPrimaryWorkExperience,
138141 } ,
@@ -289,9 +292,11 @@ export default class MemberOrganizationsService extends LoggerBase {
289292
290293 const memberOrganizations = await fetchMemberOrganizations ( qx , memberId )
291294
295+ const overlapBasis = { ...existing , ...update }
296+
292297 const overlappingEmailDomainRows = getOverlappingEmailDomainMemberOrganizations (
293298 memberOrganizations ,
294- existing ,
299+ overlapBasis ,
295300 )
296301
297302 const groupedUpdate = lodash . pickBy (
@@ -306,7 +311,11 @@ export default class MemberOrganizationsService extends LoggerBase {
306311
307312 if ( overlappingEmailDomainRows . length > 0 && Object . keys ( groupedUpdate ) . length > 0 ) {
308313 for ( const overlappingRow of overlappingEmailDomainRows ) {
309- await updateMemberOrganization ( qx , memberId , overlappingRow . id as string , groupedUpdate )
314+ if ( ! overlappingRow . id ) {
315+ continue
316+ }
317+
318+ await updateMemberOrganization ( qx , memberId , overlappingRow . id , groupedUpdate )
310319 }
311320 }
312321
@@ -353,7 +362,7 @@ export default class MemberOrganizationsService extends LoggerBase {
353362
354363 const memberOrganizationIdsToDelete = [
355364 id ,
356- ...overlappingEmailDomainRows . map ( ( row ) => row . id as string ) ,
365+ ...overlappingEmailDomainRows . flatMap ( ( row ) => ( row . id ? [ row . id ] : [ ] ) ) ,
357366 ]
358367
359368 // Delete hidden grouped rows with the visible row so list responses stay consistent
0 commit comments