Skip to content

Commit fc095a7

Browse files
authored
Merge pull request #950 from topcoder-platform/issue-949
Can't fully remove profile traits
2 parents 3d4bd4d + 27c4188 commit fc095a7

File tree

5 files changed

+61
-8
lines changed

5 files changed

+61
-8
lines changed

src/apps/profiles/src/member-profile/education-and-certifications/ModifyEducationModal/ModifyEducationModal.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import classNames from 'classnames'
66

77
import { BaseModal, Button, IconOutline, InputSelect, InputText } from '~/libs/ui'
88
import {
9-
updateOrCreateMemberTraitsAsync,
9+
updateDeleteOrCreateMemberTraitAsync,
1010
UserProfile,
1111
UserTrait,
1212
UserTraitCategoryNames,
@@ -72,13 +72,13 @@ const ModifyEducationModal: FC<ModifyEducationModalProps> = (props: ModifyEducat
7272

7373
setIsSaving(true)
7474

75-
updateOrCreateMemberTraitsAsync(props.profile.handle, [{
75+
updateDeleteOrCreateMemberTraitAsync(props.profile.handle, {
7676
categoryName: UserTraitCategoryNames.education,
7777
traitId: UserTraitIds.education,
7878
traits: {
7979
data: memberEducation || [],
8080
},
81-
}])
81+
}, props.education)
8282
.then(() => {
8383
toast.success('Education updated successfully.', { position: toast.POSITION.BOTTOM_RIGHT })
8484
props.onSave()

src/apps/profiles/src/member-profile/work-expirence/ModifyWorkExpirenceModal/ModifyWorkExpirenceModal.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import classNames from 'classnames'
66

77
import { BaseModal, Button, IconOutline, InputDatePicker, InputSelect, InputText } from '~/libs/ui'
88
import {
9-
updateOrCreateMemberTraitsAsync,
9+
updateDeleteOrCreateMemberTraitAsync,
1010
UserProfile, UserTrait,
1111
UserTraitCategoryNames,
1212
UserTraitIds,
@@ -71,13 +71,13 @@ const ModifyWorkExpirenceModal: FC<ModifyWorkExpirenceModalProps> = (props: Modi
7171

7272
setIsSaving(true)
7373

74-
updateOrCreateMemberTraitsAsync(props.profile.handle, [{
74+
updateDeleteOrCreateMemberTraitAsync(props.profile.handle, {
7575
categoryName: UserTraitCategoryNames.work,
7676
traitId: UserTraitIds.work,
7777
traits: {
7878
data: workExpirence || [],
7979
},
80-
}])
80+
}, props.workExpirence)
8181
.then(() => {
8282
toast.success('Work Experience updated successfully.', { position: toast.POSITION.BOTTOM_RIGHT })
8383
props.onSave()

src/libs/core/lib/profile/profile-functions/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ export {
1616
updateMemberProfileAsync,
1717
updateMemberPhotoAsync,
1818
updateOrCreateMemberTraitsAsync,
19+
updateDeleteOrCreateMemberTraitAsync,
1920
} from './profile.functions'
2021
export * from './profile-store'
2122
export * from './rating.functions'

src/libs/core/lib/profile/profile-functions/profile-store/profile-xhr.store.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { xhrGetAsync, xhrPatchAsync, xhrPostAsync, xhrPutAsync } from '../../../xhr'
1+
import { xhrDeleteAsync, xhrGetAsync, xhrPatchAsync, xhrPostAsync, xhrPutAsync } from '../../../xhr'
22
import { CountryLookup } from '../../country-lookup.model'
33
import { EditNameRequest } from '../../edit-name-request.model'
44
import { ModifyTracksRequest } from '../../modify-tracks.request'
@@ -95,6 +95,14 @@ export async function createMemberTraits(
9595
return xhrPostAsync<UserTraits[], UserTraits[]>(`${profileUrl(handle)}/traits`, traits)
9696
}
9797

98+
export async function deleteMemberTrait(
99+
handle: string,
100+
traitIds: string,
101+
): Promise<UserTraits[]> {
102+
await xhrDeleteAsync<UserTraits[]>(`${profileUrl(handle)}/traits?traitIds=${traitIds}`)
103+
return []
104+
}
105+
98106
export async function modifyTracks(handle: string, request: ModifyTracksRequest): Promise<UserProfile> {
99107
return xhrPutAsync<ModifyTracksRequest, UserProfile>(profileUrl(handle), request)
100108
}

src/libs/core/lib/profile/profile-functions/profile.functions.ts

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,14 @@ import { ModifyUserPropertyResponse } from '../modify-user-role.model'
99
import { UserEmailPreferences } from '../user-email-preference.model'
1010
import { UserProfile } from '../user-profile.model'
1111
import { UserStats } from '../user-stats.model'
12-
import { UserTraits } from '../user-traits.model'
12+
import { UserTrait, UserTraits } from '../user-traits.model'
1313
import { UserVerify } from '../user-verify.model'
1414

1515
import { profileFactoryCreate } from './profile-factory'
1616
import { getMemberStats, getVerification, profileStoreGet, profileStorePatchName } from './profile-store'
1717
import {
1818
createMemberTraits,
19+
deleteMemberTrait,
1920
getCountryLookup,
2021
modifyTracks,
2122
updateMemberEmailPreferences,
@@ -135,6 +136,13 @@ export async function createMemberTraitsAsync(
135136
return createMemberTraits(handle, traits)
136137
}
137138

139+
export async function deleteMemberTraitAsync(
140+
handle: string,
141+
traitIds: string,
142+
): Promise<UserTraits[]> {
143+
return deleteMemberTrait(handle, traitIds)
144+
}
145+
138146
export async function modifyTracksAsync(handle: string, tracks: ModifyTracksRequest): Promise<UserProfile> {
139147
return modifyTracks(handle, tracks)
140148
}
@@ -159,3 +167,39 @@ export async function updateOrCreateMemberTraitsAsync(
159167
return createdTraitsRsp
160168
}
161169
}
170+
171+
export async function updateDeleteOrCreateMemberTraitAsync(
172+
handle: string,
173+
trait: UserTraits,
174+
previousTraitsData: Array<UserTrait> | undefined,
175+
): Promise<UserTraits[]> {
176+
if (!trait.traits.data.length) {
177+
if (!previousTraitsData) {
178+
return [] // no need to delete trait if trait data is null
179+
}
180+
181+
try {
182+
await deleteMemberTraitAsync(handle, trait.traitId)
183+
return []
184+
} catch (error) {
185+
}
186+
}
187+
188+
if (!previousTraitsData) {
189+
try {
190+
// call request to create trait data if trait data is null
191+
const createdTraitsRsp = await createMemberTraitsAsync(handle, [trait])
192+
return createdTraitsRsp
193+
} catch (error) {
194+
}
195+
}
196+
197+
try {
198+
// call request to update trait data if trait data is not null
199+
const updatedTraitsRsp = await updateMemberTraitsAsync(handle, [trait])
200+
return updatedTraitsRsp
201+
} catch (error) {
202+
const createdTraitsRsp = await createMemberTraitsAsync(handle, [trait])
203+
return createdTraitsRsp
204+
}
205+
}

0 commit comments

Comments
 (0)