mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-10-31 19:17:48 +00:00 
			
		
		
		
	 827f977a37
			
		
	
	827f977a37
	
	
	
		
			
			Added the ability to update the contact's avatar via API and Dashboard. - Contact create and update APIs can now accept avatar attachment parameters [form data]. - Contact create and update endpoints can now accept the avatar_url parameter.[json] - API endpoint to remove a contact avatar. - Updated Contact create/edit UI components with avatar support Fixes: #3428
		
			
				
	
	
		
			81 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* global axios */
 | |
| import ApiClient from './ApiClient';
 | |
| 
 | |
| export const buildContactParams = (page, sortAttr, label, search) => {
 | |
|   let params = `include_contact_inboxes=false&page=${page}&sort=${sortAttr}`;
 | |
|   if (search) {
 | |
|     params = `${params}&q=${search}`;
 | |
|   }
 | |
|   if (label) {
 | |
|     params = `${params}&labels[]=${label}`;
 | |
|   }
 | |
|   return params;
 | |
| };
 | |
| 
 | |
| class ContactAPI extends ApiClient {
 | |
|   constructor() {
 | |
|     super('contacts', { accountScoped: true });
 | |
|   }
 | |
| 
 | |
|   get(page, sortAttr = 'name', label = '') {
 | |
|     let requestURL = `${this.url}?${buildContactParams(
 | |
|       page,
 | |
|       sortAttr,
 | |
|       label,
 | |
|       ''
 | |
|     )}`;
 | |
|     return axios.get(requestURL);
 | |
|   }
 | |
| 
 | |
|   getConversations(contactId) {
 | |
|     return axios.get(`${this.url}/${contactId}/conversations`);
 | |
|   }
 | |
| 
 | |
|   getContactableInboxes(contactId) {
 | |
|     return axios.get(`${this.url}/${contactId}/contactable_inboxes`);
 | |
|   }
 | |
| 
 | |
|   getContactLabels(contactId) {
 | |
|     return axios.get(`${this.url}/${contactId}/labels`);
 | |
|   }
 | |
| 
 | |
|   updateContactLabels(contactId, labels) {
 | |
|     return axios.post(`${this.url}/${contactId}/labels`, { labels });
 | |
|   }
 | |
| 
 | |
|   search(search = '', page = 1, sortAttr = 'name', label = '') {
 | |
|     let requestURL = `${this.url}/search?${buildContactParams(
 | |
|       page,
 | |
|       sortAttr,
 | |
|       label,
 | |
|       search
 | |
|     )}`;
 | |
|     return axios.get(requestURL);
 | |
|   }
 | |
| 
 | |
|   filter(page = 1, sortAttr = 'name', queryPayload) {
 | |
|     let requestURL = `${this.url}/filter?${buildContactParams(page, sortAttr)}`;
 | |
|     return axios.post(requestURL, queryPayload);
 | |
|   }
 | |
| 
 | |
|   importContacts(file) {
 | |
|     const formData = new FormData();
 | |
|     formData.append('import_file', file);
 | |
|     return axios.post(`${this.url}/import`, formData, {
 | |
|       headers: { 'Content-Type': 'multipart/form-data' },
 | |
|     });
 | |
|   }
 | |
| 
 | |
|   destroyCustomAttributes(contactId, customAttributes) {
 | |
|     return axios.post(`${this.url}/${contactId}/destroy_custom_attributes`, {
 | |
|       custom_attributes: customAttributes,
 | |
|     });
 | |
|   }
 | |
| 
 | |
|   destroyAvatar(contactId) {
 | |
|     return axios.delete(`${this.url}/${contactId}/avatar`);
 | |
|   }
 | |
| }
 | |
| 
 | |
| export default new ContactAPI();
 |