55 lines
1.8 KiB
TypeScript
55 lines
1.8 KiB
TypeScript
|
|
/**
|
|
* Updates likes or dislikes for an article or comment dynamically.
|
|
* @param {string} type - 'article' or 'comment'.
|
|
* @param {string} action - 'like' or 'dislike'.
|
|
* @param {string} id - ID of the article or comment.
|
|
* @param {string} articleId - (Optional) ID of the parent article if updating a comment.
|
|
* @param {Array} articles - The articles array.
|
|
*/
|
|
export const updateLikeDislike = async ({ type, action, id, articleId = null, articles }) => {
|
|
try {
|
|
// Find the target item
|
|
let target;
|
|
if (type === 'article') {
|
|
target = articles.value.find((a) => a.id === id);
|
|
} else if (type === 'comment') {
|
|
const article = articles.value.find((a) => a.id === articleId);
|
|
if (article) {
|
|
target = article.comments.find((c) => c.id === id);
|
|
}
|
|
}
|
|
|
|
if (!target) {
|
|
console.error(`Target ${type} not found`);
|
|
return;
|
|
}
|
|
|
|
// Increment the likes or dislikes
|
|
if (action === 'like') {
|
|
target.likes += 1;
|
|
} else if (action === 'dislike') {
|
|
target.dislikes += 1;
|
|
} else {
|
|
console.error('Invalid action specified');
|
|
return;
|
|
}
|
|
|
|
// Determine API endpoint
|
|
const endpoint = type === 'article' ? `/api/articles/${id}` : `/api/comments/${id}`;
|
|
|
|
// Make the API call
|
|
await $fetch(endpoint, {
|
|
method: 'PUT',
|
|
body: {
|
|
[action === 'like' ? 'likes' : 'dislikes']: action === 'like' ? target.likes : target.dislikes,
|
|
...(type === 'comment' && { articleId }),
|
|
},
|
|
});
|
|
|
|
console.log(`${type} ${action} updated successfully`);
|
|
} catch (error) {
|
|
console.error(`Error updating ${type} ${action}:`, error);
|
|
}
|
|
};
|