refactor: like and unlike

This commit is contained in:
barredterra 2024-03-19 19:42:12 +01:00
parent cc2c39d583
commit e7b65db73a

View file

@ -2,21 +2,15 @@
// MIT License. See license.txt
frappe.ui.is_liked = function (doc) {
var liked = frappe.ui.get_liked_by(doc);
return liked.indexOf(frappe.session.user) === -1 ? false : true;
return frappe.ui.get_liked_by(doc).includes(frappe.session.user);
};
frappe.ui.get_liked_by = function (doc) {
var liked = doc._liked_by;
if (liked) {
liked = JSON.parse(liked);
}
return liked || [];
return doc._liked_by ? JSON.parse(doc._liked_by) : [];
};
frappe.ui.toggle_like = function ($btn, doctype, name, callback) {
var add = $btn.hasClass("not-liked") ? "Yes" : "No";
const add = $btn.hasClass("not-liked") ? "Yes" : "No";
// disable click
$btn.css("pointer-events", "none");
@ -32,32 +26,31 @@ frappe.ui.toggle_like = function ($btn, doctype, name, callback) {
// renable click
$btn.css("pointer-events", "auto");
if (!r.exc) {
for (const like of document.querySelectorAll(".like-action")) {
if (like.dataset.name === name && like.dataset.doctype === doctype) {
like.classList.toggle("not-liked", add === "No");
like.classList.toggle("liked", add === "Yes");
}
if (r.exc) {
return;
}
$btn.toggleClass("not-liked", add === "No");
$btn.toggleClass("liked", add === "Yes");
// update in locals (form)
const doc = locals[doctype] && locals[doctype][name];
if (doc) {
let liked_by = frappe.ui.get_liked_by(doc);
if (add === "Yes" && !liked_by.includes(frappe.session.user)) {
liked_by.push(frappe.session.user);
}
// update in locals (form)
var doc = locals[doctype] && locals[doctype][name];
if (doc) {
var liked_by = JSON.parse(doc._liked_by || "[]"),
idx = liked_by.indexOf(frappe.session.user);
if (add === "Yes") {
if (idx === -1) liked_by.push(frappe.session.user);
} else {
if (idx !== -1) {
liked_by = liked_by.slice(0, idx).concat(liked_by.slice(idx + 1));
}
}
doc._liked_by = JSON.stringify(liked_by);
if (add === "No" && liked_by.includes(frappe.session.user)) {
liked_by = liked_by.filter((user) => user !== frappe.session.user);
}
if (callback) {
callback();
}
doc._liked_by = JSON.stringify(liked_by);
}
if (callback) {
callback();
}
},
});