dealhub/resources/js/interaction.js
kusowl e5ebe21ed1 feature (external link redirection count of deal):
bind the link with the view deal button
show the total redirection count
reflect the total redirect count immediately
add arch test so that dump statements are not left out
2026-01-19 16:39:49 +05:30

88 lines
2.4 KiB
JavaScript

import {showToast} from "./toast.js";
async function like(button, id) {
// Instant feedback for user
let likeBtns = button.querySelectorAll('.like');
let likeBadge = document.getElementById("likeBadge".concat(id));
toggleHidden(likeBtns);
// Check if user liked the deal
let isLiked = button.classList.contains('liked');
updateLikeCount(likeBadge, isLiked ? -1 : 1) ;
button.classList.toggle('liked')
try {
let response = await axios.post('/like/' + id);
if (response.status !== 200) {
showToast(response.data.message)
// Revert the ui
toggleHidden(likeBtns);
}
else{
showToast(response.data.message)
}
} catch (e) {
showToast(e.response.data.message)
toggleHidden(likeBtns);
console.error(e);
}
}
async function favorite(e, id) {
// Instant feedback for user
let favoriteBtns = e.querySelectorAll('.favorite');
toggleHidden(favoriteBtns);
try {
let response = await axios.post('/favorite/' + id);
if (response.status !== 200) {
showToast(response.data.message)
// Revert the ui
toggleHidden(favoriteBtns);
}else{
showToast(response.data.message);
}
} catch (e) {
showToast(e.response.data.message)
toggleHidden(favoriteBtns);
console.error(e);
}
}
function toggleHidden(nodelist) {
nodelist.forEach((node) => node.classList.toggle('hidden'))
}
function updateLikeCount(badge, change){
try{
let likeCount = Math.max(parseInt( badge.dataset.count) + change, 0)
badge.querySelector('p').innerText = likeCount;
badge.dataset.count = likeCount.toString();
}
catch(e) {
console.error(e);
}
}
function redirect(url, id){
window.open(url, '_blank');
let redirectBadge = document.getElementById("redirectBadge".concat(id));
updateRedirectCount(redirectBadge, 1);
// increment the count in ui
}
function updateRedirectCount(badge, change){
try{
let likeCount = Math.max(parseInt( badge.dataset.count) + change, 0)
badge.querySelector('p').innerText = likeCount;
badge.dataset.count = likeCount.toString();
}
catch(e) {
console.error(e);
}
}
document.like = like;
document.favorite = favorite;
document.redirect = redirect;