@@ -37,7 +37,7 @@ import {
3737import settingsService from '../services/settings'
3838import * as memberService from '../../../api/users'
3939import { uploadFileToS3 } from '../../../api/s3'
40- import { applyProfileSettingsToTraits } from '../helpers/settings'
40+ import { applyProfileSettingsToTraits , customerTraitId } from '../helpers/settings'
4141import 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