import {
getSessionUser,
getUserById
} from "./api/auth.js"
import {
getUserGarage
} from "./api/garage.js"
import {
maybeFollowUser
} from "./api/profile.js"
import app from "./app.js"
import {
createGarageContent,
displayProfile,
fillGridWithPosts
} from "./profile.js"
import store from "./store.js"
var $ = Dom7
var totalPostPages = 1
var totalFPostPages = 1
var currentPostPage = 1
var currentFPostPage = 1
var isFetchingPosts = false
var refreshed = false;
var userId = null
$(document).on(\'page:init\', \'.page[data-name="profile-view"]\', async function (e) {
userId = e.detail.route.params.id
currentPostPage = 1
currentFPostPage = 1
isFetchingPosts = false
refreshed = false
store.dispatch(\'getUserPosts\', {
user_id: userId,
clear: true
})
store.dispatch(\'getUserTags\', {
user_id: userId,
clear: true
})
})
$(document).on(\'page:beforein\', \'.page[data-name="profile-view"]\', async function (e) {
$(\'.loading-fullscreen\').show()
var pathStore = store.getters.getPathData
userId = e.detail.route.params.id
const sessionUser = await getSessionUser()
if (!sessionUser || !sessionUser.id) {
return;
}
// Follow button
const followButton = $(\'.user-follow-btn\')
const sessionFollowings = sessionUser.following;
if (sessionFollowings.includes(`${userId}`)) {
followButton.text(\'Following\')
} else {
followButton.text(\'Follow\')
}
followButton.attr(\'data-user-id\', userId)
let cachedData = null
try {
if (pathStore && pathStore.value[`/user/${userId}`]) {
cachedData = pathStore.value[`/user/${userId}`]
}
} catch (error) {
console.error(\'Error fetching cached data:\', error)
}
await renderProfileData(cachedData, userId)
})
$(document).on(\'click\', \'.user-follow-btn\', async function () {
const followButton = $(this)
const isFollowing = followButton.text() === \'Following\'
// change the button text
followButton.text(isFollowing ? \'Follow\' : \'Following\')
const response = await maybeFollowUser(followButton.attr(\'data-user-id\'))
if (response && response.success) {
store.dispatch(\'updateUserDetails\', {
external: true
})
}
})
async function renderProfileData(cachedData, userId) {
// if (!refreshed && !cachedData) {
// }
refreshed = false
if (!cachedData) {
const data = await getUserById(userId)
console.log(\'User data:\', data);
if (!data || data.error) {
$(\'.loading-fullscreen\').hide()
app.dialog.alert(\'User not found\', \'Error\')
view.router.back(view.history[0], {
force: true
})
return
}
const garage = await getUserGarage(userId)
if (garage) {
createGarageContent(garage, \'.pview-current-vehicles-list\', \'.pview-past-vehicles-list\')
}
// Assuming `path` is a dynamic path like \'/garage/2\'
store.dispatch(\'setPathData\', {
path: `/user/${userId}`,
data: {
user: data.user,
garage: garage,
},
})
displayProfile(data.user, \'profile-view\')
} else {
displayProfile(cachedData.user, \'profile-view\')
if (cachedData.garage) {
createGarageContent(cachedData.garage, \'.pview-current-vehicles-list\', \'.pview-past-vehicles-list\')
}
}
$(\'.loading-fullscreen\').hide()
}
function populateUsersPosts(data) {
if (data) {
const postsKey = `user-${userId}-posts`
//const tagsKey = `user-${userId}-tags`
// Handle posts
if (data[postsKey]) {
totalPostPages = data[postsKey].total_pages || 0
let reset = data[postsKey].cleared || false
console.log(reset);
// Only update the DOM if there are new posts
if (data[postsKey].new_data && data[postsKey].new_data.length > 0) {
fillGridWithPosts(data[postsKey].new_data, \'profile-view-grid-posts\', reset)
// Clear new_data after processing to avoid re-rendering
data[postsKey].new_data = []
}
if ((data[postsKey].page === totalPostPages) || (totalPostPages == 0)) {
// hide preloader
$(\'.infinite-scroll-preloader.posts-tab.view-profile\').hide()
}
if (data[postsKey].data.length === 0) {
const profileGrid = document.getElementById(\'profile-view-grid-posts\')
profileGrid.innerHTML = \'<p></p><p>No posts</p>\'
return;
}
}
// Handle tags
/*
if (data[tagsKey]) {
totalFPostPages = data[tagsKey].total_pages || 0
let reset = data[tagsKey].cleared || false
// Only update the DOM if there are new tags
if (data[tagsKey].new_data && data[tagsKey].new_data.length > 0) {
fillGridWithPosts(data[tagsKey].new_data, \'profile-view-grid-tags\', reset)
// Clear new_data after processing to avoid re-rendering
data[tagsKey].new_data = []
}
if ((data[tagsKey].page === totalFPostPages) || (totalFPostPages == 0)) {
// hide preloader
$(\'.infinite-scroll-preloader.tags-tab.view-profile\').hide()
}
/*
if (data[tagsKey].data.length === 0) {
const profileGrid = document.getElementById(\'profile-view-grid-tags\')
profileGrid.innerHTML = \'<p></p><p>No tagged posts</p>\'
return;
}
--
}*/
}
}
store.getters.getUserPathUpdated.onUpdated(() => {
const data = store.getters.getUserPathData.value
populateUsersPosts(data)
})
$(document).on(\'infinite\', \'.profile-landing-page.infinite-scroll-content.view-page\', async function (e) {
if (isFetchingPosts) return
const activeTab = document.querySelector(\'.profile-tabs .tab-link-active\')
const activeTabId = activeTab.id
if (!activeTabId || activeTabId === \'my-garage\') return
const getterFunc = activeTabId === \'my-posts\' ? \'getUserPosts\' : \'getUserTags\'
isFetchingPosts = true
if (activeTabId === \'my-posts\') {
currentPostPage++
if (currentPostPage <= totalPostPages) {
await store.dispatch(getterFunc, {
user_id: userId,
page: currentPostPage
})
isFetchingPosts = false
}
} else {
currentFPostPage++
if (currentFPostPage <= totalFPostPages) {
await store.dispatch(getterFunc, {
user_id: userId,
page: currentFPostPage
})
isFetchingPosts = false
}
}
})
$(document).on(\'ptr:refresh\', \'.profile-landing-page.view-page.ptr-content\', async function (e) {
try {
currentPostPage = 1
currentFPostPage = 1
store.dispatch(\'removePathData\', `/user/${userId}`)
await renderProfileData(null, userId)
store.dispatch(\'getUserPosts\', {
user_id: userId,
clear: true
})
store.dispatch(\'getUserTags\', {
user_id: userId,
clear: true
})
refreshed = true
} catch (error) {
console.log(\'Error refreshing profile page:\', error);
}
app.ptr.get(\'.profile-landing-page.view-page.ptr-content\').done()
})