Chatwoot/app/javascript/widget/store/modules/contacts.js
Sojan Jose f71980bd95
chore: Enhance contact merge action for identified users (#4886)
- Discard conflicting keys 
- Do not merge if there is already an identified contact

Co-authored-by: Pranav Raj S <pranav@chatwoot.com>
2022-06-23 15:48:56 +05:30

119 lines
3 KiB
JavaScript

import { sendMessage } from 'widget/helpers/utils';
import ContactsAPI from '../../api/contacts';
import { SET_USER_ERROR } from '../../constants/errorTypes';
import { setHeader } from '../../helpers/axios';
const state = {
currentUser: {},
};
const SET_CURRENT_USER = 'SET_CURRENT_USER';
const parseErrorData = error =>
error && error.response && error.response.data ? error.response.data : error;
export const updateWidgetAuthToken = widgetAuthToken => {
if (widgetAuthToken) {
setHeader(widgetAuthToken);
sendMessage({
event: 'setAuthCookie',
data: { widgetAuthToken },
});
}
};
export const getters = {
getCurrentUser(_state) {
return _state.currentUser;
},
};
export const actions = {
get: async ({ commit }) => {
try {
const { data } = await ContactsAPI.get();
commit(SET_CURRENT_USER, data);
} catch (error) {
// Ignore error
}
},
update: async ({ dispatch }, { user }) => {
try {
await ContactsAPI.update(user);
dispatch('get');
} catch (error) {
// Ignore error
}
},
setUser: async ({ dispatch }, { identifier, user: userObject }) => {
try {
const {
email,
name,
avatar_url,
identifier_hash: identifierHash,
phone_number,
company_name,
city,
country_code,
description,
custom_attributes,
social_profiles,
} = userObject;
const user = {
email,
name,
avatar_url,
identifier_hash: identifierHash,
phone_number,
additional_attributes: {
company_name,
city,
description,
country_code,
social_profiles,
},
custom_attributes,
};
const {
data: { widget_auth_token: widgetAuthToken },
} = await ContactsAPI.setUser(identifier, user);
updateWidgetAuthToken(widgetAuthToken);
dispatch('get');
if (identifierHash || widgetAuthToken) {
dispatch('conversation/clearConversations', {}, { root: true });
dispatch('conversation/fetchOldConversations', {}, { root: true });
dispatch('conversationAttributes/getAttributes', {}, { root: true });
}
} catch (error) {
const data = parseErrorData(error);
sendMessage({ event: 'error', errorType: SET_USER_ERROR, data });
}
},
setCustomAttributes: async (_, customAttributes = {}) => {
try {
await ContactsAPI.setCustomAttributes(customAttributes);
} catch (error) {
// Ignore error
}
},
deleteCustomAttribute: async (_, customAttribute) => {
try {
await ContactsAPI.deleteCustomAttribute(customAttribute);
} catch (error) {
// Ignore error
}
},
};
export const mutations = {
[SET_CURRENT_USER]($state, user) {
const { currentUser } = $state;
$state.currentUser = { ...currentUser, ...user };
},
};
export default {
namespaced: true,
state,
getters,
actions,
mutations,
};