feat: add UserAvatar component to display employee profile pictures in various HR pages, enhancing visual representation of employee data

This commit is contained in:
2025-12-01 22:13:01 -03:00
parent c19c8c859e
commit 95c3b48ae6
6 changed files with 178 additions and 34 deletions

View File

@@ -985,8 +985,28 @@ export const listarRegistrosPeriodo = query({
console.log('[listarRegistrosPeriodo] Total de registros a retornar:', registrosFiltrados.length);
// Buscar fotos de perfil dos funcionários
const funcionariosComFoto = await Promise.all(
funcionarios.map(async (funcionario) => {
if (!funcionario) return { funcionario: null, fotoPerfilUrl: null };
let fotoPerfilUrl: string | null = null;
const usuario = await ctx.db
.query('usuarios')
.withIndex('by_funcionarioId', (q) => q.eq('funcionarioId', funcionario._id))
.first();
if (usuario?.fotoPerfil) {
fotoPerfilUrl = await ctx.storage.getUrl(usuario.fotoPerfil);
}
return { funcionario, fotoPerfilUrl };
})
);
return registrosFiltrados.map((registro) => {
const funcionario = funcionarios.find((f) => f?._id === registro.funcionarioId);
const funcionarioComFoto = funcionariosComFoto.find((f) => f.funcionario?._id === registro.funcionarioId);
const funcionario = funcionarioComFoto?.funcionario;
const fotoPerfilUrl = funcionarioComFoto?.fotoPerfilUrl || null;
const chave = `${registro.funcionarioId}-${registro.data}`;
const saldoMinutos = saldosPorDataFuncionario[chave] || 0;
const horas = Math.floor(Math.abs(saldoMinutos) / 60);
@@ -1002,6 +1022,7 @@ export const listarRegistrosPeriodo = query({
descricaoCargo: funcionario.descricaoCargo,
}
: null,
fotoPerfilUrl,
saldoDiario: {
saldoMinutos,
horas,
@@ -1618,6 +1639,18 @@ export const listarHomologacoes = query({
const gestor = await ctx.db.get(h.gestorId);
const registro = h.registroId ? await ctx.db.get(h.registroId) : null;
// Buscar foto do perfil do funcionário através do usuário associado
let fotoPerfilUrl: string | null = null;
if (funcionario) {
const usuario = await ctx.db
.query('usuarios')
.withIndex('by_funcionarioId', (q) => q.eq('funcionarioId', funcionario._id))
.first();
if (usuario?.fotoPerfil) {
fotoPerfilUrl = await ctx.storage.getUrl(usuario.fotoPerfil);
}
}
return {
...h,
funcionario: funcionario
@@ -1626,6 +1659,7 @@ export const listarHomologacoes = query({
matricula: funcionario.matricula,
}
: null,
fotoPerfilUrl,
gestor: gestor
? {
nome: gestor.nome,
@@ -1862,6 +1896,18 @@ export const listarDispensas = query({
const funcionario = await ctx.db.get(d.funcionarioId);
const gestor = await ctx.db.get(d.gestorId);
// Buscar foto do perfil do funcionário através do usuário associado
let fotoPerfilUrl: string | null = null;
if (funcionario) {
const usuario = await ctx.db
.query('usuarios')
.withIndex('by_funcionarioId', (q) => q.eq('funcionarioId', funcionario._id))
.first();
if (usuario?.fotoPerfil) {
fotoPerfilUrl = await ctx.storage.getUrl(usuario.fotoPerfil);
}
}
// Verificar se expirou (se não for isento)
let expirada = false;
if (!d.isento) {
@@ -1880,6 +1926,7 @@ export const listarDispensas = query({
matricula: funcionario.matricula,
}
: null,
fotoPerfilUrl,
gestor: gestor
? {
nome: gestor.nome,