Skip to content

Commit 5fc4f85

Browse files
authored
Merge pull request #2671 from appirio-tech/support-profile-update-for-old-profiles
Support profile update for old profiles
2 parents c0b01bc + 9eeb729 commit 5fc4f85

File tree

7 files changed

+452
-57
lines changed

7 files changed

+452
-57
lines changed

package-lock.json

Lines changed: 61 additions & 43 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/api/users.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,21 @@ export const updateMemberTraits = (handle, updatedTraits) => {
6161
.then(resp => _.get(resp.data, 'result.content', {}))
6262
}
6363

64+
/**
65+
* Create member traits
66+
*
67+
* @param {String} handle member handle
68+
* @param {Array} traits list of traits to create
69+
*
70+
* @returns {Promise<Array>} member traits
71+
*/
72+
export const createMemberTraits = (handle, traits) => {
73+
return axios.post(`${TC_API_URL}/v3/members/${handle}/traits`, {
74+
param: traits
75+
})
76+
.then(resp => _.get(resp.data, 'result.content', {}))
77+
}
78+
6479
/**
6580
* Update member photo
6681
*

src/routes/settings/actions/index.js

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ import {
3737
import settingsService from '../services/settings'
3838
import * as memberService from '../../../api/users'
3939
import { uploadFileToS3 } from '../../../api/s3'
40-
import { applyProfileSettingsToTraits } from '../helpers/settings'
40+
import { applyProfileSettingsToTraits, customerTraitId } from '../helpers/settings'
4141
import Alert from 'react-s-alert'
4242

4343

@@ -201,9 +201,28 @@ export const saveProfileSettings = (settings) => (dispatch, getState) => {
201201
const state = getState()
202202
const handle = _.get(state, 'loadUser.user.handle')
203203
const traits = _.get(state, 'settings.profile.traits')
204+
const existentTraitIds = _.map(traits, 'traitId')
204205
const updatedTraits = applyProfileSettingsToTraits(traits, settings)
205206

206-
memberService.updateMemberTraits(handle, updatedTraits)
207+
// we will only update on server traits which can be updated on the settings page
208+
const traitsForServer = updatedTraits.filter((trait) =>
209+
// TODO Revert to 'connect_info' again when PROD supports it
210+
_.includes(['basic_info', customerTraitId], trait.traitId)
211+
)
212+
213+
const traitsToUpdate = traitsForServer.filter((trait) =>
214+
_.includes(existentTraitIds, trait.traitId)
215+
)
216+
const traitsToCreate= traitsForServer.filter((trait) =>
217+
!_.includes(existentTraitIds, trait.traitId)
218+
)
219+
220+
Promise.all(_.compact([
221+
// update existent traits
222+
traitsToUpdate.length > 0 && memberService.updateMemberTraits(handle, traitsToUpdate),
223+
// create non-existent traits
224+
traitsToCreate.length > 0 && memberService.createMemberTraits(handle, traitsToCreate),
225+
]))
207226
// TODO, now we don't update store with the data from server as backend returns wrong
208227
// data when we update see https://github.com/appirio-tech/ap-member-microservice/issues/165.
209228
// So we update the store with the data we sent to the server.
@@ -216,7 +235,8 @@ export const saveProfileSettings = (settings) => (dispatch, getState) => {
216235
})
217236
})
218237
.catch((err) => {
219-
Alert.error(`Failed to save settings. ${err.message}`)
238+
const errorMsg = _.get(err, 'response.data.result.content', err.message)
239+
Alert.error(`Failed to save settings. ${errorMsg}`)
220240
dispatch({
221241
type: SAVE_PROFILE_SETTINGS_FAILURE
222242
})

0 commit comments

Comments
 (0)