diff --git a/apps/web/package.json b/apps/web/package.json index d5ac91d..7061285 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -44,6 +44,7 @@ "emoji-picker-element": "^1.27.0", "jspdf": "^3.0.3", "jspdf-autotable": "^5.0.2", + "lucide-svelte": "^0.552.0", "papaparse": "^5.4.1", "svelte-sonner": "^1.0.5", "zod": "^4.1.12" diff --git a/apps/web/src/lib/components/Sidebar.svelte b/apps/web/src/lib/components/Sidebar.svelte index 6c0fc37..0df953f 100644 --- a/apps/web/src/lib/components/Sidebar.svelte +++ b/apps/web/src/lib/components/Sidebar.svelte @@ -230,7 +230,7 @@ {#if authStore.autenticado}
- +
{:else}
- - - +

{searchQuery.trim() ? "Nenhum usuário encontrado" : "Nenhum usuário disponível"}

@@ -391,9 +356,7 @@ Criando grupo... {:else} - - - + Criar Grupo {/if} @@ -413,9 +376,7 @@ Criando sala... {:else} - - - + Criar Sala de Reunião {/if} @@ -425,5 +386,8 @@
{/if} - + + diff --git a/apps/web/src/lib/components/chat/SalaReuniaoManager.svelte b/apps/web/src/lib/components/chat/SalaReuniaoManager.svelte index 104efb9..56b776f 100644 --- a/apps/web/src/lib/components/chat/SalaReuniaoManager.svelte +++ b/apps/web/src/lib/components/chat/SalaReuniaoManager.svelte @@ -4,6 +4,7 @@ import type { Id } from "@sgse-app/backend/convex/_generated/dataModel"; import UserAvatar from "./UserAvatar.svelte"; import UserStatusBadge from "./UserStatusBadge.svelte"; + import { X, Users, UserPlus, ArrowUp, ArrowDown, Trash2, Search } from "lucide-svelte"; interface Props { conversaId: Id<"conversas">; @@ -151,19 +152,15 @@ } -
{ - if (e.target === e.currentTarget) { - onClose(); - } -}}> -
e.stopPropagation()} - > + e.target === e.currentTarget && onClose()}> + @@ -312,13 +304,14 @@
{:else if activeTab === "adicionar" && isAdmin} -
+
+
@@ -356,7 +349,7 @@ {#if isLoading} {:else} - + + {/if} {/each} @@ -376,5 +369,8 @@
-
+ + diff --git a/apps/web/src/lib/components/chat/ScheduleMessageModal.svelte b/apps/web/src/lib/components/chat/ScheduleMessageModal.svelte index 7ed6791..03dbf74 100644 --- a/apps/web/src/lib/components/chat/ScheduleMessageModal.svelte +++ b/apps/web/src/lib/components/chat/ScheduleMessageModal.svelte @@ -99,70 +99,21 @@ } - - -
e.key === 'Escape' && onClose()} -> - -
e.stopPropagation()} - role="dialog" - aria-modal="true" - aria-labelledby="modal-title" - tabindex="-1" - > - -
- -
- -
- - - + + diff --git a/apps/web/vite.config.ts b/apps/web/vite.config.ts index e13ff68..e43a543 100644 --- a/apps/web/vite.config.ts +++ b/apps/web/vite.config.ts @@ -4,4 +4,7 @@ import { defineConfig } from "vite"; export default defineConfig({ plugins: [tailwindcss(), sveltekit()], + resolve: { + dedupe: ["lucide-svelte"], + }, }); diff --git a/bun.lock b/bun.lock index 16a9a59..fca6f51 100644 --- a/bun.lock +++ b/bun.lock @@ -6,7 +6,7 @@ "dependencies": { "@tanstack/svelte-form": "^1.23.8", "chart.js": "^4.5.1", - "lucide-svelte": "^0.548.0", + "lucide-svelte": "^0.552.0", "svelte-chartjs": "^3.1.5", "svelte-sonner": "^1.0.5", }, @@ -61,7 +61,7 @@ "version": "1.0.0", "dependencies": { "@dicebear/avataaars": "^9.2.4", - "convex": "^1.17.4", + "convex": "catalog:", "nodemailer": "^7.0.10", }, "devDependencies": { @@ -624,7 +624,7 @@ "locate-character": ["locate-character@3.0.0", "", {}, "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA=="], - "lucide-svelte": ["lucide-svelte@0.548.0", "", { "peerDependencies": { "svelte": "^3 || ^4 || ^5.0.0-next.42" } }, "sha512-aW2BfHWBLWf/XPSKytTPV16AWfFeFIJeUyOg7eHY2rhzVQ0u0LIvoS4pm2oskr+OJVw+NsS8fPvlBVqPfUO1XQ=="], + "lucide-svelte": ["lucide-svelte@0.552.0", "", { "peerDependencies": { "svelte": "^3 || ^4 || ^5.0.0-next.42" } }, "sha512-zynJ64KOsuQG3I4tSqfvvl7Kc9x4mWkppbxsuyrbegQwma9HFhBp4aE6HuQNF4c3pS0AHWHki5CAMs5m3QXA5w=="], "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], diff --git a/package.json b/package.json index f8b266d..9088df1 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "dependencies": { "@tanstack/svelte-form": "^1.23.8", "chart.js": "^4.5.1", - "lucide-svelte": "^0.548.0", + "lucide-svelte": "^0.552.0", "svelte-chartjs": "^3.1.5", "svelte-sonner": "^1.0.5" }, diff --git a/packages/backend/convex/chat.ts b/packages/backend/convex/chat.ts index 28978fe..127b3bf 100644 --- a/packages/backend/convex/chat.ts +++ b/packages/backend/convex/chat.ts @@ -369,6 +369,7 @@ export const enviarMensagem = mutation({ await ctx.db.patch(args.conversaId, { ultimaMensagem: args.conteudo.substring(0, 100), ultimaMensagemTimestamp: Date.now(), + ultimaMensagemRemetenteId: usuarioAtual._id, // Guardar ID do remetente da última mensagem }); // Criar notificações para participantes (com tratamento de erro) @@ -1815,10 +1816,10 @@ export const listarAgendamentosChat = query({ return mensagensEnriquecidas .filter((m): m is NonNullable => m !== null) .sort((a, b) => { - const dataA = a.agendadaPara ?? 0; - const dataB = b.agendadaPara ?? 0; - return dataA - dataB; - }); + const dataA = a.agendadaPara ?? 0; + const dataB = b.agendadaPara ?? 0; + return dataA - dataB; + }); }, }); @@ -2071,7 +2072,7 @@ export const buscarMensagens = query({ // Filtrar por remetente (já verificado acima, mas garantir novamente) if (args.remetenteId) { if (m.remetenteId !== args.remetenteId) { - return false; + return false; } // Verificar novamente se o remetente é participante da conversa específica desta mensagem if (!conversaDaMensagem.participantes.includes(args.remetenteId)) { @@ -2269,6 +2270,7 @@ export const enviarMensagensAgendadas = internalMutation({ await ctx.db.patch(mensagem.conversaId, { ultimaMensagem: mensagem.conteudo.substring(0, 100), ultimaMensagemTimestamp: agora, + ultimaMensagemRemetenteId: mensagem.remetenteId, // Guardar ID do remetente }); // Criar notificações para outros participantes diff --git a/packages/backend/convex/schema.ts b/packages/backend/convex/schema.ts index 28bfdae..7a3fb75 100644 --- a/packages/backend/convex/schema.ts +++ b/packages/backend/convex/schema.ts @@ -626,6 +626,7 @@ export default defineSchema({ administradores: v.optional(v.array(v.id("usuarios"))), // IDs dos administradores (apenas para sala_reuniao) ultimaMensagem: v.optional(v.string()), ultimaMensagemTimestamp: v.optional(v.number()), + ultimaMensagemRemetenteId: v.optional(v.id("usuarios")), // ID do remetente da última mensagem criadoPor: v.id("usuarios"), criadoEm: v.number(), })