kullanıcı avatar denemesi.

This commit is contained in:
2026-07-28 06:04:42 +02:00
parent 0875348bbd
commit f34f8ea764
+30 -8
View File
@@ -10,13 +10,17 @@ let activeTab = "desktop";
async function render() { async function render() {
const user = pb.authStore.model; const user = pb.authStore.model;
const avatar = pb.authStore.model?avatar;
if (!user) { if (!user) {
renderLogin(); renderLogin();
return; return;
} }
// Avatar resminin tam URL'ini oluşturuyoruz
const avatarUrl = user?.avatar
? `https://pocketbase.iontalp.com/api/files/${user.collectionId}/${user.id}/${user.avatar}`
: null;
let currentBg = let currentBg =
user.selected_bg || user.selected_bg ||
"https://images.unsplash.com/photo-1618005182384-a83a8bd57fbe?q=80&w=1920"; "https://images.unsplash.com/photo-1618005182384-a83a8bd57fbe?q=80&w=1920";
@@ -25,7 +29,6 @@ async function render() {
let currentPage; let currentPage;
if (activeTab === "settings") { if (activeTab === "settings") {
currentPage = await renderSettings(pb, currentBg, (newBg) => { currentPage = await renderSettings(pb, currentBg, (newBg) => {
// Veritabanı güncellendiğinde yerel kullanıcı modelini tazeleyip render ediyoruz
pb.authStore.model.selected_bg = newBg; pb.authStore.model.selected_bg = newBg;
render(); render();
}); });
@@ -35,11 +38,13 @@ async function render() {
app.innerHTML = ` app.innerHTML = `
<div class="relative w-full h-screen overflow-hidden bg-slate-950 text-slate-100 flex"> <div class="relative w-full h-screen overflow-hidden bg-slate-950 text-slate-100 flex">
<!-- Arka Plan Görseli -->
<div class="absolute inset-0 z-0 bg-center bg-no-repeat transition-all duration-700" <div class="absolute inset-0 z-0 bg-center bg-no-repeat transition-all duration-700"
style="background-image: url('${currentBg}'); background-size: 1920px 1080px;"> style="background-image: url('${currentBg}'); background-size: 1920px 1080px;">
</div> </div>
<div class="absolute inset-0 z-1 bg-slate-950/50 "></div> <div class="absolute inset-0 z-10 bg-slate-950/50 backdrop-blur-[2px]"></div>
<!-- Sol Menü (Sidebar) -->
<aside class="relative z-30 w-72 h-screen bg-slate-900/80 backdrop-blur-xl border-r border-white/10 p-6 flex flex-col justify-between"> <aside class="relative z-30 w-72 h-screen bg-slate-900/80 backdrop-blur-xl border-r border-white/10 p-6 flex flex-col justify-between">
<div> <div>
<h1 class="font-bold text-white mb-6 text-xl">Dashboard OS</h1> <h1 class="font-bold text-white mb-6 text-xl">Dashboard OS</h1>
@@ -48,11 +53,28 @@ async function render() {
<button id="navSettings" class="w-full flex items-center gap-3 px-4 py-3 rounded-xl font-medium ${activeTab === "settings" ? "bg-white/10 text-white" : "text-slate-400 hover:text-white"}">⚙️ Ayarlar</button> <button id="navSettings" class="w-full flex items-center gap-3 px-4 py-3 rounded-xl font-medium ${activeTab === "settings" ? "bg-white/10 text-white" : "text-slate-400 hover:text-white"}">⚙️ Ayarlar</button>
</nav> </nav>
</div> </div>
<button id="profileBtn" class="bg-rose-500/20 text-rose-300 py-2 rounded-xl border border-rose-500/30">
<image: url('${user&&user.avatar}');> <!-- Profil / Çıkış Alanı -->
</button> <div class="space-y-3 pt-4 border-t border-white/10">
<div id="profileBtn" class="flex items-center gap-3 p-2 rounded-xl hover:bg-white/5 cursor-pointer transition-all">
${
avatarUrl
? `<img src="${avatarUrl}" alt="Avatar" class="w-10 h-10 rounded-full object-cover border border-white/20" />`
: `<div class="w-10 h-10 rounded-full bg-indigo-600/30 border border-indigo-500/30 flex items-center justify-center font-bold text-indigo-400">${(user.username || user.email).charAt(0).toUpperCase()}</div>`
}
<div class="overflow-hidden">
<p class="text-sm font-medium text-white truncate">${user.username || user.email}</p>
<p class="text-xs text-slate-400">Profili Gör</p>
</div>
</div>
<button id="logoutBtn" class="w-full bg-rose-500/20 text-rose-300 hover:bg-rose-500/30 py-2 rounded-xl border border-rose-500/30 text-sm font-medium transition-all">
🚪 Çıkış Yap
</button>
</div>
</aside> </aside>
<!-- Ana İçerik -->
<main id="mainContent" class="relative z-20 flex-1 h-screen p-8 flex items-center justify-center"> <main id="mainContent" class="relative z-20 flex-1 h-screen p-8 flex items-center justify-center">
${currentPage.html} ${currentPage.html}
</main> </main>
@@ -71,8 +93,8 @@ async function render() {
activeTab = "settings"; activeTab = "settings";
render(); render();
}); });
document.getElementById("profileBtn").addEventListener("click", () => { document.getElementById("logoutBtn").addEventListener("click", () => {
activeTab = "profile"; pb.authStore.clear();
render(); render();
}); });
} }