diff --git a/apps/web/src/lib/components/Sidebar.svelte b/apps/web/src/lib/components/Sidebar.svelte index fe64cde..bc99b9f 100644 --- a/apps/web/src/lib/components/Sidebar.svelte +++ b/apps/web/src/lib/components/Sidebar.svelte @@ -9,7 +9,7 @@ import NotificationBell from '$lib/components/chat/NotificationBell.svelte'; import ChatWidget from '$lib/components/chat/ChatWidget.svelte'; import PresenceManager from '$lib/components/chat/PresenceManager.svelte'; - import { getAvatarUrl } from '$lib/utils/avatarGenerator'; + import { Menu, User, Home, UserPlus, XCircle, LogIn, Tag, Plus, Check } from 'lucide-svelte'; import { authClient } from '$lib/auth'; import { resolve } from '$app/paths'; @@ -33,8 +33,8 @@ return currentUser.data.avatar; } - // Fallback: gerar avatar baseado no nome - return getAvatarUrl(currentUser.data.nome); + // Fallback: retornar null para usar o ícone User do Lucide + return null; }); // Função para gerar classes do menu ativo @@ -328,8 +328,9 @@ >Contato - SuporteSuporte Dashboard - {#each setores as s} + {#each setores as s (s.link)} {@const isActive = currentPath.startsWith(s.link)}
  • -
    -
    +
    +
    -
    +
    - Logo SGSE + Logo SGSE

    Login

    @@ -441,7 +434,7 @@ {#if erroLogin}
    {erroLogin} @@ -453,16 +446,14 @@
    -
    +
    @@ -2338,18 +2325,16 @@
    {#if currentUser.data?.fotoPerfilUrl} - Foto atual - {:else if currentUser.data?.avatar} - Avatar atual + Foto atual {:else} -
    - {currentUser.data?.nome.substring(0, 2).toUpperCase()} -
    + {/if}
    @@ -2413,82 +2398,37 @@

    - Escolha um dos 30 avatares profissionais para seu + Escolha um dos avatares profissionais para seu perfil

    - {#each avatarGallery as avatar (avatar.id)} + {#each defaultAvatars as avatarPath, i (avatarPath)} {/each}
    - - - + - Dica: Clique uma vez para selecionar, clique duas vezes para aplicar - imediatamente! + Dica: Clique em um avatar para defini-lo como sua foto de perfil.
    - - {#if avatarSelecionado} -
    - -
    - {/if} {:else}
    diff --git a/apps/web/static/avatars/avatar-1.png b/apps/web/static/avatars/avatar-1.png new file mode 100644 index 0000000..ce3844a Binary files /dev/null and b/apps/web/static/avatars/avatar-1.png differ diff --git a/apps/web/static/avatars/avatar-10.png b/apps/web/static/avatars/avatar-10.png new file mode 100644 index 0000000..95c4ac2 Binary files /dev/null and b/apps/web/static/avatars/avatar-10.png differ diff --git a/apps/web/static/avatars/avatar-2.png b/apps/web/static/avatars/avatar-2.png new file mode 100644 index 0000000..6f62584 Binary files /dev/null and b/apps/web/static/avatars/avatar-2.png differ diff --git a/apps/web/static/avatars/avatar-3.png b/apps/web/static/avatars/avatar-3.png new file mode 100644 index 0000000..b4a3958 Binary files /dev/null and b/apps/web/static/avatars/avatar-3.png differ diff --git a/apps/web/static/avatars/avatar-4.png b/apps/web/static/avatars/avatar-4.png new file mode 100644 index 0000000..1bca315 Binary files /dev/null and b/apps/web/static/avatars/avatar-4.png differ diff --git a/apps/web/static/avatars/avatar-5.png b/apps/web/static/avatars/avatar-5.png new file mode 100644 index 0000000..da6419a Binary files /dev/null and b/apps/web/static/avatars/avatar-5.png differ diff --git a/apps/web/static/avatars/avatar-6.png b/apps/web/static/avatars/avatar-6.png new file mode 100644 index 0000000..0cbfd8c Binary files /dev/null and b/apps/web/static/avatars/avatar-6.png differ diff --git a/apps/web/static/avatars/avatar-7.png b/apps/web/static/avatars/avatar-7.png new file mode 100644 index 0000000..dd3f712 Binary files /dev/null and b/apps/web/static/avatars/avatar-7.png differ diff --git a/apps/web/static/avatars/avatar-8.png b/apps/web/static/avatars/avatar-8.png new file mode 100644 index 0000000..1abc883 Binary files /dev/null and b/apps/web/static/avatars/avatar-8.png differ diff --git a/apps/web/static/avatars/avatar-9.png b/apps/web/static/avatars/avatar-9.png new file mode 100644 index 0000000..bf769cc Binary files /dev/null and b/apps/web/static/avatars/avatar-9.png differ diff --git a/packages/backend/convex/chat.ts b/packages/backend/convex/chat.ts index 7be20da..6354215 100644 --- a/packages/backend/convex/chat.ts +++ b/packages/backend/convex/chat.ts @@ -70,8 +70,7 @@ export const criarConversa = mutation({ args: { tipo: v.union(v.literal('individual'), v.literal('grupo'), v.literal('sala_reuniao')), participantes: v.array(v.id('usuarios')), - nome: v.optional(v.string()), - avatar: v.optional(v.string()) + nome: v.optional(v.string()) }, handler: async (ctx, args) => { const usuarioAtual = await getUsuarioAutenticado(ctx); @@ -103,7 +102,6 @@ export const criarConversa = mutation({ const dadosConversa: Omit, '_id' | '_creationTime'> = { tipo: args.tipo, nome: args.nome, - avatar: args.avatar, participantes: args.participantes, criadoPor: usuarioAtual._id, criadoEm: Date.now() @@ -152,8 +150,7 @@ export const criarConversa = mutation({ export const criarSalaReuniao = mutation({ args: { nome: v.string(), - participantes: v.array(v.id('usuarios')), - avatar: v.optional(v.string()) + participantes: v.array(v.id('usuarios')) }, handler: async (ctx, args) => { const usuarioAtual = await getUsuarioAutenticado(ctx); @@ -174,7 +171,6 @@ export const criarSalaReuniao = mutation({ const dadosConversa: Omit, '_id' | '_creationTime'> = { tipo: 'sala_reuniao' as const, nome: args.nome.trim(), - avatar: args.avatar, participantes: participantesUnicos, criadoPor: usuarioAtual._id, criadoEm: Date.now(), @@ -2010,7 +2006,6 @@ export const obterUsuariosOnline = query({ _id: u._id, nome: u.nome, email: u.email, - avatar: u.avatar, fotoPerfil: u.fotoPerfil, statusPresenca: u.statusPresenca, statusMensagem: u.statusMensagem, @@ -2055,7 +2050,6 @@ export const listarTodosUsuarios = query({ nome: u.nome, email: u.email, matricula, - avatar: u.avatar, fotoPerfil: u.fotoPerfil, fotoPerfilUrl, statusPresenca: u.statusPresenca, diff --git a/packages/backend/convex/schema.ts b/packages/backend/convex/schema.ts index 62d4632..705e1f1 100644 --- a/packages/backend/convex/schema.ts +++ b/packages/backend/convex/schema.ts @@ -535,7 +535,7 @@ export default defineSchema({ ultimaTentativaLogin: v.optional(v.number()), // timestamp da última tentativa // Campos de Chat e Perfil - avatar: v.optional(v.string()), // "avatar-1" até "avatar-15" ou storageId + fotoPerfil: v.optional(v.id("_storage")), setor: v.optional(v.string()), statusMensagem: v.optional(v.string()), // max 100 chars @@ -761,7 +761,7 @@ export default defineSchema({ v.literal("sala_reuniao") ), nome: v.optional(v.string()), // nome do grupo/sala - avatar: v.optional(v.string()), // avatar do grupo/sala + participantes: v.array(v.id("usuarios")), // IDs dos participantes administradores: v.optional(v.array(v.id("usuarios"))), // IDs dos administradores (apenas para sala_reuniao) ultimaMensagem: v.optional(v.string()), diff --git a/packages/backend/convex/usuarios.ts b/packages/backend/convex/usuarios.ts index cd62bac..6816947 100644 --- a/packages/backend/convex/usuarios.ts +++ b/packages/backend/convex/usuarios.ts @@ -476,11 +476,10 @@ export const alterarRole = mutation({ }); /** - * Atualizar perfil do usuário (foto, avatar, setor, status, preferências) + * Atualizar perfil do usuário (foto, setor, status, preferências) */ export const atualizarPerfil = mutation({ args: { - avatar: v.optional(v.string()), fotoPerfil: v.optional(v.id('_storage')), setor: v.optional(v.string()), statusMensagem: v.optional(v.string()), @@ -511,7 +510,6 @@ export const atualizarPerfil = mutation({ atualizadoEm: Date.now() }; - if (args.avatar !== undefined) updates.avatar = args.avatar; if (args.fotoPerfil !== undefined) updates.fotoPerfil = args.fotoPerfil; if (args.setor !== undefined) updates.setor = args.setor; if (args.statusMensagem !== undefined) updates.statusMensagem = args.statusMensagem; @@ -541,7 +539,6 @@ export const obterPerfil = query({ email: v.string(), matricula: v.optional(v.string()), funcionarioId: v.optional(v.id('funcionarios')), - avatar: v.optional(v.string()), fotoPerfil: v.optional(v.id('_storage')), fotoPerfilUrl: v.union(v.string(), v.null()), setor: v.optional(v.string()), @@ -582,7 +579,6 @@ export const obterPerfil = query({ email: usuarioAtual.email, matricula: matricula || undefined, funcionarioId: usuarioAtual.funcionarioId, - avatar: usuarioAtual.avatar, fotoPerfil: usuarioAtual.fotoPerfil, fotoPerfilUrl, setor: usuarioAtual.setor, @@ -595,7 +591,7 @@ export const obterPerfil = query({ }); /** - * Listar todos usuários para o chat (com avatar, foto e status) + * Listar todos usuários para o chat (com foto e status) */ export const listarParaChat = query({ args: {}, @@ -605,7 +601,6 @@ export const listarParaChat = query({ nome: v.string(), email: v.string(), matricula: v.optional(v.string()), - avatar: v.optional(v.string()), fotoPerfil: v.optional(v.id('_storage')), fotoPerfilUrl: v.union(v.string(), v.null()), statusPresenca: v.optional( @@ -656,7 +651,6 @@ export const listarParaChat = query({ nome: usuario.nome, email: usuario.email, matricula: matricula || undefined, - avatar: usuario.avatar, fotoPerfil: usuario.fotoPerfil, fotoPerfilUrl, statusPresenca: usuario.statusPresenca || 'offline',