import app from "./app.js"
import {
getPostById
} from "./api/posts.js"
import {
formatPostDate
} from "./utils.js"
import store from "./store.js"
var $ = Dom7
export function renderPost(post) {
const user = store.getters.user.value
let post_actions = `
<div class="media-post-actions">
<div class="media-post-like" data-post-id="${post.id}">
<i class="icon f7-icons ${post.is_liked ? 'text-red' : ''}" data-post-id="${post.id}">${post.is_liked ? 'heart_fill' : 'heart'}</i>
</div>
<div class="media-post-comment popup-open" data-popup=".comments-popup" data-post-id="${post.id}">
<i class="icon f7-icons">chat_bubble</i>
</div>
<div class="media-post-share popup-open" data-popup=".share-popup">
<i class="icon f7-icons">paperplane</i>
</div>
`
if (post.user_id == user.id) {
post_actions += `
<div class="media-post-edit popup-open" data-popup=".edit-post-popup" data-post-id="${post.id}">
<i class="icon f7-icons">gear_alt</i>
</div>
`
}
post_actions += `</div>`
const date = formatPostDate(post.post_date)
const maxDescriptionLength = 10; // Set your character limit here
const isLongDescription = post.caption.length > maxDescriptionLength;
const shortDescription = isLongDescription ? post.caption.slice(0, maxDescriptionLength) : post.caption;
let imageHeight = 400;
if (post.media.length > 0) {
imageHeight = post.media[0].media_height;
if (imageHeight > 800) {
imageHeight = 'auto';
}
}
let profile_link;
if (post.user_id == user.id) {
profile_link = `
<a href="#" class="view-profile">
<div class="media-post-avatar" style="background-image: url('${post.user_profile_image || 'assets/img/profile-placeholder.jpg'}');"></div>
<div class="media-post-user">${post.username}</div>
</a>`
} else {
profile_link = `
<a href="/profile-view/${post.user_id}">
<div class="media-post-avatar" style="background-image: url('${post.user_profile_image || 'assets/img/profile-placeholder.jpg'}');"></div>
<div class="media-post-user">${post.username}</div>
</a>`
}
const postItem = `
<div class="media-post single" data-post-id="${post.id}" data-is-liked="${post.is_liked}">
<div class="media-single-post-content">
<div class="media-post-header">
${profile_link}
<div class="media-post-date">${date}</div>
</div>
<div class="media-single-post-content">
<div class="swiper-container">
<div class="swiper-wrapper">
${post.media.map(mediaItem => `
<div class="swiper-slide post-media" style="height: ${imageHeight};">
${mediaItem.media_type === 'video' ? `
<video autoplay loop muted playsinline class="video-background media-post-video" id="${mediaItem.id}">
<source src="${mediaItem.media_url}" type="${mediaItem.media_mime_type}" />
</video>
` : `
<img src="${mediaItem.media_url}" alt="${mediaItem.media_alt}" />
`}
</div>
`).join('')}
</div>
<div class="swiper-pagination"></div>
</div>
</div>
${post_actions}
<div class="media-post-likecount" data-like-count="${post.likes_count}">${post.likes_count} likes</div>
<div class="media-post-description">
<strong>${post.username}</strong> <br/> <span class="post-caption">${shortDescription}</span>
<span class="full-description hidden">${post.caption}</span>
${isLongDescription ? `<span class="media-post-readmore">... more</span>` : ''}
</div>
${post.comments_count > 0 ? `<div class="media-post-commentcount popup-open" data-popup=".comments-popup" data-post-id="${post.id}">View ${post.comments_count} comments</div>` : ''}
</div>
</div>`
return postItem
}
export function displayPost(post) {
const postsContainer = document.getElementById('post-view-container')
postsContainer.innerHTML = '' // Clear any existing posts
const user = store.getters.user.value
let post_actions = `
<div class="media-post-actions">
<div class="media-post-like" data-post-id="${post.id}">
<i class="icon f7-icons ${post.is_liked ? 'text-red' : ''}" data-post-id="${post.id}">${post.is_liked ? 'heart_fill' : 'heart'}</i>
</div>
<div class="media-post-comment popup-open" data-popup=".comments-popup" data-post-id="${post.id}">
<i class="icon f7-icons">chat_bubble</i>
</div>
<div class="media-post-share popup-open" data-popup=".share-popup">
<i class="icon f7-icons">paperplane</i>
</div>
`
if (post.user_id == user.id) {
post_actions += `
<div class="media-post-edit popup-open" data-popup=".edit-post-popup" data-post-id="${post.id}">
<i class="icon f7-icons">gear_alt</i>
</div>
`
}
post_actions += `</div>`
const date = formatPostDate(post.post_date)
const maxDescriptionLength = 10; // Set your character limit here
const isLongDescription = post.caption.length > maxDescriptionLength;
const shortDescription = isLongDescription ? post.caption.slice(0, maxDescriptionLength) : post.caption;
let imageHeight = 400;
if (post.media.length > 0) {
imageHeight = post.media[0].media_height;
if (imageHeight > 800) {
imageHeight = 'auto';
}
}
let profile_link;
if (post.user_id == user.id) {
profile_link = `
<a href="#" class="view-profile">
<div class="media-post-avatar" style="background-image: url('${post.user_profile_image || 'assets/img/profile-placeholder.jpg'}');"></div>
<div class="media-post-user">${post.username}</div>
</a>`
} else {
profile_link = `
<a href="/profile-view/${post.user_id}">
<div class="media-post-avatar" style="background-image: url('${post.user_profile_image || 'assets/img/profile-placeholder.jpg'}');"></div>
<div class="media-post-user">${post.username}</div>
</a>`
}
const postItem = `
<div class="media-post single" data-post-id="${post.id}" data-is-liked="${post.is_liked}">
<div class="media-single-post-content">
<div class="media-post-header">
${profile_link}
<div class="media-post-date">${date}</div>
</div>
<div class="media-single-post-content">
<div class="swiper-container">
<div class="swiper-wrapper">
${post.media.map(mediaItem => `
<div class="swiper-slide post-media" style="height: ${imageHeight};">
${mediaItem.media_type === 'video' ? `
<video autoplay loop muted playsinline class="video-background media-post-video" id="${mediaItem.id}">
<source src="${mediaItem.media_url}" type="${mediaItem.media_mime_type}" />
</video>
` : `
<img src="${mediaItem.media_url}" alt="${mediaItem.media_alt}" />
`}
</div>
`).join('')}
</div>
<div class="swiper-pagination"></div>
</div>
</div>
${post_actions}
<div class="media-post-likecount" data-like-count="${post.likes_count}">${post.likes_count} likes</div>
<div class="media-post-description">
<strong>${post.username}</strong> <br/> <span class="post-caption">${shortDescription}</span>
<span class="full-description hidden">${post.caption}</span>
${isLongDescription ? `<span class="media-post-readmore">... more</span>` : ''}
</div>
${post.comments_count > 0 ? `<div class="media-post-commentcount popup-open" data-popup=".comments-popup" data-post-id="${post.id}">View ${post.comments_count} comments</div>` : ''}
</div>
</div>`
postsContainer.insertAdjacentHTML('beforeend', postItem)
}
// $(document).on('touchstart', '.media-single-post-content .swiper-wrapper', detectDoubleTapClosure((e) => {
// const parent = e.closest('.media-post')
// const postId = parent.getAttribute('data-post-id')
// const isLiked = parent.getAttribute('data-is-liked') === 'true'
// if (isLiked) {
// return
// }
// togglePostLike(postId, true)
// }), {
// passive: false
// })
$(document).on('page:beforein', '.page[data-name="post-view"]', async function (e) {
var pathStore = store.getters.getPathData
var postId = e.detail.route.params.id
var query = e.detail.route.query
let commentId;
if (query && query.commentId) {
commentId = query.commentId
}
if (!postId || postId === '-1') {
return
}
let cachedData = null
try {
if (pathStore && pathStore.value[`/post/${postId}`]) {
cachedData = pathStore.value[`/post/${postId}`]
}
} catch (error) {
console.error('Error fetching cached data:', error)
}
if (!cachedData) {
$('.loading-fullscreen.post-view').show()
const post = await getPostById(postId)
if (!post) {
app.dialog.alert('Post not found', 'Error')
return
}
store.dispatch('setPathData', {
path: `/post/${postId}`,
data: post,
})
cachedData = post
} else {
$('.loading-fullscreen.post-view').hide()
}
displayPost(cachedData)
if (commentId) {
$('.media-post-comment').click()
}
setTimeout(() => {
// find .comment data-comment-id="${comment.id}" and animate it to glow#
if (commentId) {
const comment = $(`.comment[data-comment-id="${commentId}"]`)
console.log('Comment:', comment);
if (comment.length > 0) {
comment.addClass('target-highlight')
// Scroll to the comment
document.querySelector(`.comment[data-comment-id="${commentId}"]`).scrollIntoView({
behavior: 'smooth', // Optional, adds smooth scrolling
block: 'start', // Aligns the element to the top of the view
inline: 'nearest' // Aligns the element horizontally in the viewport
});
}
setTimeout(() => {
comment.removeClass('target-highlight')
}, 3000)
}
}, 2000)
})