bugfixing: update in realtime the posts vote
This commit is contained in:
parent
e2e63c28cd
commit
b3acd33c24
@ -6,7 +6,7 @@
|
|||||||
import Downvote from '$lib/components/Downvote.svelte';
|
import Downvote from '$lib/components/Downvote.svelte';
|
||||||
import Upvote from '$lib/components/Upvote.svelte';
|
import Upvote from '$lib/components/Upvote.svelte';
|
||||||
|
|
||||||
import {userRegion, tagList, postIdDeleted} from '$lib/store';
|
import {userRegion, postVote, tagList, postIdDeleted} from '$lib/store';
|
||||||
import toast from 'svelte-french-toast';
|
import toast from 'svelte-french-toast';
|
||||||
|
|
||||||
|
|
||||||
@ -144,6 +144,9 @@ const handleUpvote = async (event) => {
|
|||||||
} else {
|
} else {
|
||||||
upvoteCounter[postId]--;
|
upvoteCounter[postId]--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$postVote = {'id': postId, 'upvote': upvoteCounter[postId], 'downvote': downvoteCounter[postId], 'upvoteClicked': upvoteButtonClicked[postId], 'downvoteClicked': downvoteButtonClicked[postId]};
|
||||||
|
|
||||||
const response = await fetch(fastifyURL+'/upvote', {
|
const response = await fetch(fastifyURL+'/upvote', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
headers: {
|
headers: {
|
||||||
@ -178,6 +181,7 @@ const handleDownvote = async (event) => {
|
|||||||
downvoteCounter[postId]--;
|
downvoteCounter[postId]--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$postVote = {'id': postId, 'upvote': upvoteCounter[postId], 'downvote': downvoteCounter[postId], 'upvoteClicked': upvoteButtonClicked[postId], 'downvoteClicked': downvoteButtonClicked[postId]};
|
||||||
|
|
||||||
const response = await fetch(fastifyURL+'/downvote', {
|
const response = await fetch(fastifyURL+'/downvote', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
|
|||||||
@ -82,6 +82,7 @@ export const switchWatchList = writable(<boolean>(false));
|
|||||||
|
|
||||||
export const cachedPosts = writable(<Array<any>> {});
|
export const cachedPosts = writable(<Array<any>> {});
|
||||||
export const currentPagePosition = writable(<Number> (0));
|
export const currentPagePosition = writable(<Number> (0));
|
||||||
|
export const postVote = writable(<Array<any>> {});
|
||||||
|
|
||||||
export const similarTickerClicked = writable(<boolean>(false));
|
export const similarTickerClicked = writable(<boolean>(false));
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<script lang='ts'>
|
<script lang='ts'>
|
||||||
|
|
||||||
import { onMount,onDestroy } from 'svelte';
|
import { onMount,onDestroy } from 'svelte';
|
||||||
import { userRegion, discordMembers, setCache, getCache, cachedPosts, currentPagePosition, numberOfUnreadNotification, postIdDeleted } from '$lib/store';
|
import { userRegion, postVote, discordMembers, setCache, getCache, cachedPosts, currentPagePosition, numberOfUnreadNotification, postIdDeleted } from '$lib/store';
|
||||||
|
|
||||||
import { afterNavigate } from '$app/navigation';
|
import { afterNavigate } from '$app/navigation';
|
||||||
import { base } from '$app/paths'
|
import { base } from '$app/paths'
|
||||||
@ -236,7 +236,6 @@ onMount(async () => {
|
|||||||
//getTickerMentioning(),
|
//getTickerMentioning(),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
||||||
window.scrollTo(0, 0);
|
window.scrollTo(0, 0);
|
||||||
loading = false;
|
loading = false;
|
||||||
}
|
}
|
||||||
@ -263,6 +262,7 @@ onMount(async () => {
|
|||||||
|
|
||||||
onDestroy(async () => {
|
onDestroy(async () => {
|
||||||
$postIdDeleted ='';
|
$postIdDeleted ='';
|
||||||
|
$postVote = {};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
@ -304,6 +304,36 @@ afterNavigate(({from}) => {
|
|||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// Function to update the vote
|
||||||
|
function updateVote(posts, postVote) {
|
||||||
|
const { id, upvote, downvote, upvoteClicked, downvoteClicked } = postVote;
|
||||||
|
|
||||||
|
// Find the post by ID
|
||||||
|
const post = posts?.find(post => post?.id === id);
|
||||||
|
|
||||||
|
if (post) {
|
||||||
|
post.upvote = upvote;
|
||||||
|
post.downvote = downvote;
|
||||||
|
|
||||||
|
// Check if expand['alreadyVoted(post)'] exists
|
||||||
|
if (!post.expand['alreadyVoted(post)']) {
|
||||||
|
// Create the structure if it does not exist
|
||||||
|
post.expand['alreadyVoted(post)'] = [
|
||||||
|
{
|
||||||
|
type: upvoteClicked ? 'upvote' : downvoteClicked ? 'downvote' : 'neutral',
|
||||||
|
user: data?.user?.id
|
||||||
|
}
|
||||||
|
];
|
||||||
|
} else {
|
||||||
|
// Update the existing type based on the click flags
|
||||||
|
post.expand['alreadyVoted(post)'][0].type = upvoteClicked ? 'upvote' : downvoteClicked ? 'downvote' : 'neutral';
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
console.log("Post not found.");
|
||||||
|
}
|
||||||
|
return posts
|
||||||
|
}
|
||||||
|
|
||||||
$: {
|
$: {
|
||||||
if($postIdDeleted.length !== 0)
|
if($postIdDeleted.length !== 0)
|
||||||
@ -315,9 +345,24 @@ $: {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$: {
|
||||||
|
if($postVote && Object?.keys($postVote).length !== 0)
|
||||||
|
{
|
||||||
|
//Update in realtime the already downloaded posts list when user votes
|
||||||
|
posts = updateVote(posts, $postVote)
|
||||||
|
//console.log(posts?.at(0))
|
||||||
|
$postVote = {};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$: {
|
$: {
|
||||||
if(posts)
|
if(posts)
|
||||||
{
|
{
|
||||||
|
console.log('caching saved')
|
||||||
$cachedPosts = {"sortingPosts": sortingPosts,'currentPage': currentPage, 'seenPostId': seenPostId, 'posts': posts};
|
$cachedPosts = {"sortingPosts": sortingPosts,'currentPage': currentPage, 'seenPostId': seenPostId, 'posts': posts};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -341,7 +386,6 @@ $: {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
|
|
||||||
import { onMount, onDestroy } from 'svelte';
|
import { onMount, onDestroy } from 'svelte';
|
||||||
import {userRegion, screenWidth, scrollToComment, postIdDeleted, setCache, getCache, tagList, numberOfUnreadNotification, commentAdded, commentUpdated, commentIdDeleted } from '$lib/store';
|
import {userRegion, cachedPosts, postVote, screenWidth, scrollToComment, postIdDeleted, setCache, getCache, tagList, numberOfUnreadNotification, commentAdded, commentUpdated, commentIdDeleted } from '$lib/store';
|
||||||
import { goto, afterNavigate } from '$app/navigation';
|
import { goto, afterNavigate } from '$app/navigation';
|
||||||
import { base } from '$app/paths'
|
import { base } from '$app/paths'
|
||||||
|
|
||||||
@ -68,6 +68,9 @@
|
|||||||
} else {
|
} else {
|
||||||
upvoteCounter[postId]--;
|
upvoteCounter[postId]--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$postVote = {'id': postId, 'upvote': upvoteCounter[postId], 'downvote': downvoteCounter[postId], 'upvoteClicked': upvoteButtonClicked[postId], 'downvoteClicked': downvoteButtonClicked[postId]};
|
||||||
|
|
||||||
const response = await fetch(fastifyURL+'/upvote', {
|
const response = await fetch(fastifyURL+'/upvote', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
headers: {
|
headers: {
|
||||||
@ -102,7 +105,8 @@
|
|||||||
downvoteCounter[postId]--;
|
downvoteCounter[postId]--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$postVote = {'id': postId, 'upvote': upvoteCounter[postId], 'downvote': downvoteCounter[postId], 'upvoteClicked': upvoteButtonClicked[postId], 'downvoteClicked': downvoteButtonClicked[postId]};
|
||||||
|
|
||||||
const response = await fetch(fastifyURL+'/downvote', {
|
const response = await fetch(fastifyURL+'/downvote', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
headers: {
|
headers: {
|
||||||
@ -148,7 +152,7 @@
|
|||||||
|
|
||||||
const handleReport = async () => {
|
const handleReport = async () => {
|
||||||
|
|
||||||
dropdownOpen = !dropdownOpen;
|
dropdownOpen = !dropdownOpen;
|
||||||
toast.success('Post has been reported. Thank you!', {
|
toast.success('Post has been reported. Thank you!', {
|
||||||
style: 'border-radius: 200px; background: #333; color: #fff;'
|
style: 'border-radius: 200px; background: #333; color: #fff;'
|
||||||
});
|
});
|
||||||
@ -356,8 +360,41 @@
|
|||||||
$commentAdded = '';
|
$commentAdded = '';
|
||||||
$commentIdDeleted = '';
|
$commentIdDeleted = '';
|
||||||
$scrollToComment = '';
|
$scrollToComment = '';
|
||||||
|
$postVote = {};
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
// Function to update the vote when posts are cached
|
||||||
|
function updateVote(postVote) {
|
||||||
|
const { id, upvote, downvote, upvoteClicked, downvoteClicked } = postVote;
|
||||||
|
console.log(postVote)
|
||||||
|
// Find the post by ID
|
||||||
|
const item = $cachedPosts?.posts?.find(post => post?.id === id);
|
||||||
|
console.log(item)
|
||||||
|
if (item) {
|
||||||
|
item.upvote = upvote;
|
||||||
|
item.downvote = downvote;
|
||||||
|
|
||||||
|
// Check if expand['alreadyVoted(item)'] exists
|
||||||
|
if (!item.expand['alreadyVoted(item)']) {
|
||||||
|
// Create the structure if it does not exist
|
||||||
|
item.expand['alreadyVoted(post)'] = [
|
||||||
|
{
|
||||||
|
type: upvoteClicked ? 'upvote' : downvoteClicked ? 'downvote' : 'neutral',
|
||||||
|
user: data?.user?.id
|
||||||
|
}
|
||||||
|
];
|
||||||
|
} else {
|
||||||
|
// Update the existing type based on the click flags
|
||||||
|
item.expand['alreadyVoted(post)'][0].type = upvoteClicked ? 'upvote' : downvoteClicked ? 'downvote' : 'neutral';
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
console.log("Post not found.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function addCommentToParent(comments, newComment) {
|
function addCommentToParent(comments, newComment) {
|
||||||
// Helper function to handle the recursion
|
// Helper function to handle the recursion
|
||||||
@ -466,7 +503,17 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$: {
|
||||||
|
if($postVote && Object?.keys($postVote).length !== 0)
|
||||||
|
{
|
||||||
|
//Update in realtime the already downloaded posts list when user votes in cached posts
|
||||||
|
updateVote($postVote)
|
||||||
|
//console.log(posts?.at(0))
|
||||||
|
$postVote = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
@ -480,7 +527,6 @@
|
|||||||
<!-- Other meta tags -->
|
<!-- Other meta tags -->
|
||||||
<meta property="og:title" content="{post.title} · stocknear"/>
|
<meta property="og:title" content="{post.title} · stocknear"/>
|
||||||
<meta property="og:description" content="Your daily dose of stock market funny memes, GIFs, videos and weird news stories. We deliver hundreds of new stock market memes daily.">
|
<meta property="og:description" content="Your daily dose of stock market funny memes, GIFs, videos and weird news stories. We deliver hundreds of new stock market memes daily.">
|
||||||
<meta property="og:image" content="https://stocknear-pocketbase.s3.amazonaws.com/logo/meta_logo.jpg"/>
|
|
||||||
<meta property="og:type" content="website"/>
|
<meta property="og:type" content="website"/>
|
||||||
<!-- Add more Open Graph meta tags as needed -->
|
<!-- Add more Open Graph meta tags as needed -->
|
||||||
|
|
||||||
@ -488,7 +534,6 @@
|
|||||||
<meta name="twitter:card" content="summary_large_image"/>
|
<meta name="twitter:card" content="summary_large_image"/>
|
||||||
<meta name="twitter:title" content="{post.title} · stocknear"/>
|
<meta name="twitter:title" content="{post.title} · stocknear"/>
|
||||||
<meta name="twitter:description" content="Your daily dose of stock market funny memes, GIFs, videos and weird news stories. We deliver hundreds of new stock market memes daily.">
|
<meta name="twitter:description" content="Your daily dose of stock market funny memes, GIFs, videos and weird news stories. We deliver hundreds of new stock market memes daily.">
|
||||||
<meta name="twitter:image" content="https://stocknear-pocketbase.s3.amazonaws.com/logo/meta_logo.jpg"/>
|
|
||||||
<!-- Add more Twitter meta tags as needed -->
|
<!-- Add more Twitter meta tags as needed -->
|
||||||
</svelte:head>
|
</svelte:head>
|
||||||
|
|
||||||
@ -523,7 +568,7 @@
|
|||||||
</form>
|
</form>
|
||||||
<!--End Upvote-->
|
<!--End Upvote-->
|
||||||
<label class="px-6 py-4 w-14 rounded-lg bg-[#202020] text-[1rem] text-bold text-white">
|
<label class="px-6 py-4 w-14 rounded-lg bg-[#202020] text-[1rem] text-bold text-white">
|
||||||
{upvoteCounter[post?.id] - downvoteCounter[post?.id] }
|
{typeof upvoteCounter[post?.id] === 'number' || typeof downvoteCounter[post?.id] === 'number' ? (upvoteCounter[post?.id] - downvoteCounter[post?.id]) : '-' }
|
||||||
</label>
|
</label>
|
||||||
<!--Start Downvote-->
|
<!--Start Downvote-->
|
||||||
<form on:submit={handleDownvote}>
|
<form on:submit={handleDownvote}>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user