mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-11-04 04:57:51 +00:00 
			
		
		
		
	* feat: sort by position * chore: whitespace change * feat: add border bottom color to list item * feat: allow dragging articles * feat: add migration to reorder all articles * feat: add onsort method * feat: finish UI sorting * feat: show 50 per page in articles list * feat: add article sorting methods * feat: patch up reorder action with the API * refactor: better naming * chore: add comments * feat: attach position to article before create * feat: move article to end if moved between categories * chore: add comments * chore: update version * fix: don't change position if previous category was nil * fix: condition to trigger update on category change * refactor: store new_position * refactor: use grid instead of table * feat: add snug spacing * feat: add grab-icon * feat: add grab icon to list * refactor: show draggable only for category page * feat: add update_positions as a class method --------- Co-authored-by: Nithin David Thomas <1277421+nithindavid@users.noreply.github.com>
		
			
				
	
	
		
			73 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* global axios */
 | 
						|
 | 
						|
import PortalsAPI from './portals';
 | 
						|
 | 
						|
class ArticlesAPI extends PortalsAPI {
 | 
						|
  constructor() {
 | 
						|
    super('articles', { accountScoped: true });
 | 
						|
  }
 | 
						|
 | 
						|
  getArticles({
 | 
						|
    pageNumber,
 | 
						|
    portalSlug,
 | 
						|
    locale,
 | 
						|
    status,
 | 
						|
    author_id,
 | 
						|
    category_slug,
 | 
						|
  }) {
 | 
						|
    let baseUrl = `${this.url}/${portalSlug}/articles?page=${pageNumber}&locale=${locale}`;
 | 
						|
    if (status !== undefined) baseUrl += `&status=${status}`;
 | 
						|
    if (author_id) baseUrl += `&author_id=${author_id}`;
 | 
						|
    if (category_slug) baseUrl += `&category_slug=${category_slug}`;
 | 
						|
    return axios.get(baseUrl);
 | 
						|
  }
 | 
						|
 | 
						|
  getArticle({ id, portalSlug }) {
 | 
						|
    return axios.get(`${this.url}/${portalSlug}/articles/${id}`);
 | 
						|
  }
 | 
						|
 | 
						|
  updateArticle({ portalSlug, articleId, articleObj }) {
 | 
						|
    return axios.patch(
 | 
						|
      `${this.url}/${portalSlug}/articles/${articleId}`,
 | 
						|
      articleObj
 | 
						|
    );
 | 
						|
  }
 | 
						|
 | 
						|
  createArticle({ portalSlug, articleObj }) {
 | 
						|
    const { content, title, author_id, category_id } = articleObj;
 | 
						|
    return axios.post(`${this.url}/${portalSlug}/articles`, {
 | 
						|
      content,
 | 
						|
      title,
 | 
						|
      author_id,
 | 
						|
      category_id,
 | 
						|
    });
 | 
						|
  }
 | 
						|
 | 
						|
  deleteArticle({ articleId, portalSlug }) {
 | 
						|
    return axios.delete(`${this.url}/${portalSlug}/articles/${articleId}`);
 | 
						|
  }
 | 
						|
 | 
						|
  uploadImage({ portalSlug, file }) {
 | 
						|
    let formData = new FormData();
 | 
						|
    formData.append('background_image', file);
 | 
						|
    return axios.post(
 | 
						|
      `${this.url}/${portalSlug}/articles/attach_file`,
 | 
						|
      formData,
 | 
						|
      {
 | 
						|
        headers: {
 | 
						|
          'Content-Type': 'multipart/form-data',
 | 
						|
        },
 | 
						|
      }
 | 
						|
    );
 | 
						|
  }
 | 
						|
 | 
						|
  reorderArticles({ portalSlug, reorderedGroup, categorySlug }) {
 | 
						|
    return axios.post(`${this.url}/${portalSlug}/articles/reorder`, {
 | 
						|
      positions_hash: reorderedGroup,
 | 
						|
      category_slug: categorySlug,
 | 
						|
    });
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
export default new ArticlesAPI();
 |