mirror of
https://github.com/lingble/chatwoot.git
synced 2025-11-04 13:07:55 +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();
|