From 8884e28ed78ae808a63e9add7f5857c21eb41fab Mon Sep 17 00:00:00 2001 From: Carlos Date: Fri, 10 Jul 2026 21:59:55 +0200 Subject: [PATCH] feat: update dashboard to use NextAuth session, show user name, fix avatar component usage --- pages/dashboard.jsx | 203 ++++++++++++++++++++++++++------------------ 1 file changed, 119 insertions(+), 84 deletions(-) diff --git a/pages/dashboard.jsx b/pages/dashboard.jsx index f3c50ef..469a23b 100644 --- a/pages/dashboard.jsx +++ b/pages/dashboard.jsx @@ -1,74 +1,81 @@ -import { useSession, signOut } from "next-auth/react" +import { useState } from "react" import { useRouter } from "next/router" -import { useState, useEffect } from "react" +import { useSession, signOut } from "next-auth/react" import AvatarSelector from "../components/AvatarSelector" import CategoryMenu from "../components/CategoryMenu" -// Apps organizados por categoria -const ALL_APPS = [ - // Produtividade - { id: 1, name: "Tendências Semanais", desc: "Notícias em alta • Top 100", path: "/apps/trendsnews", icon: "📈", category: "produtividade", favorite: false }, - { id: 2, name: "Conversor", desc: "Conversão de unidades", path: "/apps/converter", icon: "🔄", category: "produtividade", favorite: false }, - { id: 3, name: "Calculadora", desc: "Calculos rápidos", path: "/apps/calculator", icon: "🧮", category: "produtividade", favorite: false }, - - // Utilidades - { id: 4, name: "Relógio", desc: "Relógio mundial", path: "/apps/clock", icon: "⏰", category: "utilidades", favorite: false }, - { id: 5, name: "Gerador Senhas", desc: "Senhas seguras", path: "/apps/password-generator", icon: "🔐", category: "utilidades", favorite: false }, - { id: 6, name: "QR Code", desc: "Gerador QR", path: "/apps/qrcode", icon: "📱", category: "utilidades", favorite: false }, - { id: 7, name: "Cronômetro", desc: "Tempo e alarmes", path: "/apps/timer", icon: "⏱️", category: "utilidades", favorite: false }, - - // Games - { id: 8, name: "Jogo da Velha", desc: "Jogo da velha clássico 2 jogadores", path: "/apps/tictactoe", icon: "⭕", category: "games", favorite: false }, - { id: 14, name: "Expedição Gold", path: "/apps/expedicao", icon: "🗺️", category: "games", desc: "Expedições para conquistar ouro" }, - { id: 15, name: "Human City", path: "/apps/humancity", icon: "🏙️", category: "games", desc: "Simulação de cidade estilo Sims" }, - { id: 16, name: "Aurea", path: "/apps/aurea", icon: "👑", category: "games", desc: "Simulador de vida e riqueza" }, - { id: 17, name: "TerraVerse", path: "/apps/terraverse", icon: "🌍", category: "games", desc: "Game de realidade aumentada" }, - - // Ferramentas - { id: 9, name: "Editor Texto", desc: "Texto simples", path: "/apps/text-editor", icon: "📝", category: "ferramentas", favorite: false }, - { id: 10, name: "Conversor Moedas", desc: "Câmbio em tempo real", path: "/apps/currency", icon: "💱", category: "ferramentas", favorite: false }, - - // Educação - { id: 11, name: "Dicionário", desc: "Significados", path: "/apps/dictionary", icon: "📖", category: "educacao", favorite: false }, - { id: 12, name: "Tradutor", desc: "Multi-idiomas", path: "/apps/translator", icon: "🌐", category: "educacao", favorite: false }, - - // Esportes - { id: 13, name: "Copa do Mundo 2026", desc: "Tabela, grupos, notícias", path: "/apps/worldcup2026", icon: "⚽", category: "esportes", favorite: false } -] - export default function Dashboard() { const { data: session } = useSession() const router = useRouter() const [selectedAvatar, setSelectedAvatar] = useState("😀") const [selectedCategory, setSelectedCategory] = useState("all") const [favorites, setFavorites] = useState([]) - const [apps, setApps] = useState(ALL_APPS) + const [confirmPassword, setConfirmPassword] = useState("") + const [loading, setLoading] = useState(false) + + // Apps organized by category + const ALL_APPS = [ + // Produtividade + { id: 1, name: "Tendências Semanais", desc: "Notícias em alta • Top 100", path: "/apps/trendsnews", icon: "📈", category: "produtividade", favorite: false }, + { id: 2, name: "Conversor", desc: "Conversão de unidades", path: "/apps/converter", icon: "🔄", category: "produtividade", favorite: false }, + { id: 3, name: "Calculadora", desc: "Cálculos rápidos", path: "/apps/calculator", icon: "🧮", category: "produtividade", favorite: false }, + + // Utilidades + { id: 4, name: "Relógio", desc: "Relógio mundial", path: "/apps/clock", icon: "⏰", category: "utilidades", favorite: false }, + { id: 5, name: "Gerador Senhas", desc: "Senhas seguras", path: "/apps/password-generator", icon: "🔐", category: "utilidades", favorite: false }, + { id: 6, name: "QR Code", desc: "Gerador QR", path: "/apps/qrcode", icon: "📱", category: "utilidades", favorite: false }, + { id: 7, name: "Cronômetro", desc: "Tempo e alarmes", path: "/apps/timer", icon: "⏱️", category: "utilidades", favorite: false }, + + // Games + { id: 8, name: "Jogo da Velha", desc: "Jogo da velha clássico 2 jogadores", path: "/apps/tictactoe", icon: "⭕", category: "games", favorite: false }, + { id: 14, name: "Expedição Gold", desc: "Expedições para conquistar ouro", path: "/apps/expedicao", icon: "🗺️", category: "games", favorite: false }, + { id: 15, name: "Human City", desc: "Simulação de cidade estilo Sims", path: "/apps/humancity", icon: "🏙️", category: "games", favorite: false }, + { id: 16, name: "Aurea", desc: "Simulador de vida e riqueza", path: "/apps/aurea", icon: "👑", category: "games", favorite: false }, + { id: 17, name: "TerraVerse", desc: "Game de realidade aumentada", path: "/apps/terraverse", icon: "🌍", category: "games", favorite: false }, + + // Ferramentas + { id: 9, name: "Editor Texto", desc: "Texto simples", path: "/apps/text-editor", icon: "📝", category: "ferramentas", favorite: false }, + { id: 10, name: "Conversor Moedas", desc: "Câmbio em tempo real", path: "/apps/currency", icon: "💱", category: "ferramentas", favorite: false }, + + // Educação + { id: 11, name: "Dicionário", desc: "Significados", path: "/apps/dictionary", icon: "📖", category: "educacao", favorite: false }, + { id: 12, name: "Tradutor", desc: "Multi-idiomas", path: "/apps/translator", icon: "🌐", category: "educacao", favorite: false }, + + // Esportes + { id: 13, name: "Copa do Mundo 2026", desc: "Tabela, grupos, notícias", path: "/apps/worldcup2026", icon: "⚽", category: "esportes", favorite: false } + ] // Carregar favoritos do localStorage - useEffect(() => { - const savedFavorites = localStorage.getItem("favorites") - const savedAvatar = localStorage.getItem("selectedAvatar") - if (savedFavorites) { - setFavorites(JSON.parse(savedFavorites)) - } - if (savedAvatar) { - setSelectedAvatar(savedAvatar) + React.useEffect(() => { + const saved = localStorage.getItem("favorites") + if (saved) { + try { + setFavorites(JSON.parse(saved)) + } catch (e) { + console.warn("Failed to parse favorites from localStorage", e) + } } }, []) // Salvar favoritos no localStorage - useEffect(() => { + React.useEffect(() => { localStorage.setItem("favorites", JSON.stringify(favorites)) }, [favorites]) // Salvar avatar no localStorage - useEffect(() => { + React.useEffect(() => { localStorage.setItem("selectedAvatar", selectedAvatar) }, [selectedAvatar]) + // Carregar avatar do localStorage + React.useEffect(() => { + const saved = localStorage.getItem("selectedAvatar") + if (saved) setSelectedAvatar(saved) + }, []) + const toggleFavorite = (appId) => { - setFavorites(prev => - prev.includes(appId) + setFavorites(prev => + prev.includes(appId) ? prev.filter(id => id !== appId) : [...prev, appId] ) @@ -76,11 +83,11 @@ export default function Dashboard() { // Filtrar apps const filteredApps = selectedCategory === "all" - ? apps - : apps.filter(app => app.category === selectedCategory) + ? ALL_APPS + : ALL_APPS.filter(app => app.category === selectedCategory) // Apps favoritos - const favoriteApps = apps.filter(app => favorites.includes(app.id)) + const favoriteApps = ALL_APPS.filter(app => favorites.includes(app.id)) return (
@@ -88,15 +95,27 @@ export default function Dashboard() { - +
{/* Favoritos Section */} {favorites.length > 0 && ( @@ -105,45 +124,67 @@ export default function Dashboard() { Favoritos
- {favoriteApps.map(app => ( - - ))} + {favorites.map((favId) => { + const app = ALL_APPS.find((a) => a.id === favId) + if (!app) return null + return ( +
+ + +
+ ) + })}
)} {/* Category Filter */} - + {/* Apps Grid */}

- {selectedCategory === "all" ? "Todos os Apps" : - selectedCategory === "produtividade" ? "Produtividade" : - selectedCategory === "utilidades" ? "Utilidades" : - selectedCategory === "games" ? "Games" : - selectedCategory === "ferramentas" ? "Ferramentas" : - selectedCategory === "educacao" ? "Educação" : - selectedCategory === "entretenimento" ? "Entretenimento" : - selectedCategory === "esportes" ? "Esportes" : "Apps"} + {selectedCategory === "all" + ? "Todos os Apps" + : selectedCategory === "produtividade" + ? "Produtividade" + : selectedCategory === "utilidades" + ? "Utilidades" + : selectedCategory === "games" + ? "Games" + : selectedCategory === "ferramentas" + ? "Ferramentas" + : selectedCategory === "educacao" + ? "Educação" + : selectedCategory === "esportes" + ? "Esportes" + : "Apps"}

- {selectedCategory === "all" - ? `${apps.length} apps disponíveis` + {selectedCategory === "all" + ? `${ALL_APPS.length} apps disponíveis` : `${filteredApps.length} apps nesta categoria`}

- {filteredApps.map(app => ( + {filteredApps.map((app) => (
) -} - -export async function getServerSideProps() { - return { - props: {}, - } } \ No newline at end of file