147 lines
4.3 KiB
TypeScript
147 lines
4.3 KiB
TypeScript
// Exportar stores principais
|
|
export { useUserStore } from './useUserStore';
|
|
export { useObraStore } from './useObraStore';
|
|
export { useTaskStore } from './useTaskStore';
|
|
export { useAppStore } from './useAppStore';
|
|
|
|
// Tipos para os stores
|
|
export type { UserState } from './useUserStore';
|
|
export type { ObraState } from './useObraStore';
|
|
export type { TaskState } from './useTaskStore';
|
|
export type { AppState } from './useAppStore';
|
|
|
|
// Hook combinado para inicialização dos stores
|
|
import { useEffect } from 'react';
|
|
import { useUserStore } from './useUserStore';
|
|
import { useObraStore } from './useObraStore';
|
|
import { useTaskStore } from './useTaskStore';
|
|
import { useAppStore } from './useAppStore';
|
|
// import { useAuthContext } from '../contexts/AuthContext'; // Comentado temporariamente
|
|
|
|
/**
|
|
* Hook para inicializar todos os stores da aplicação
|
|
* Deve ser usado no componente raiz da aplicação
|
|
*/
|
|
export const useInitializeStores = () => {
|
|
// const { user } = useAuthContext(); // Comentado temporariamente
|
|
const user = null; // Placeholder
|
|
const { fetchUsers } = useUserStore();
|
|
const { fetchObras } = useObraStore();
|
|
const { fetchTasks } = useTaskStore();
|
|
const { startSync, settings } = useAppStore();
|
|
|
|
useEffect(() => {
|
|
if (user) {
|
|
// Inicializar dados quando o usuário estiver autenticado
|
|
const initializeData = async () => {
|
|
try {
|
|
// Buscar dados em paralelo
|
|
await Promise.all([
|
|
fetchUsers(),
|
|
fetchObras(),
|
|
fetchTasks(),
|
|
]);
|
|
|
|
// Sincronização inicial se habilitada
|
|
if (settings.autoSync) {
|
|
await startSync();
|
|
}
|
|
} catch (error) {
|
|
console.error('Erro ao inicializar dados:', error);
|
|
}
|
|
};
|
|
|
|
initializeData();
|
|
}
|
|
}, [user, fetchUsers, fetchObras, fetchTasks, startSync, settings.autoSync]);
|
|
};
|
|
|
|
/**
|
|
* Hook para limpar todos os stores (útil no logout)
|
|
*/
|
|
export const useClearStores = () => {
|
|
const userStore = useUserStore();
|
|
const obraStore = useObraStore();
|
|
const taskStore = useTaskStore();
|
|
const appStore = useAppStore();
|
|
|
|
return () => {
|
|
userStore.reset();
|
|
obraStore.reset();
|
|
taskStore.reset();
|
|
// Não resetar completamente o appStore para manter configurações
|
|
appStore.clearNotifications();
|
|
};
|
|
};
|
|
|
|
/**
|
|
* Hook para sincronização manual de todos os dados
|
|
*/
|
|
export const useSyncAllData = () => {
|
|
const { fetchUsers } = useUserStore();
|
|
const { fetchObras } = useObraStore();
|
|
const { fetchTasks } = useTaskStore();
|
|
const { startSync } = useAppStore();
|
|
|
|
return async () => {
|
|
try {
|
|
await startSync();
|
|
|
|
// Recarregar todos os dados após sincronização
|
|
await Promise.all([
|
|
fetchUsers(),
|
|
fetchObras(),
|
|
fetchTasks(),
|
|
]);
|
|
|
|
return true;
|
|
} catch (error) {
|
|
console.error('Erro na sincronização:', error);
|
|
return false;
|
|
}
|
|
};
|
|
};
|
|
|
|
/**
|
|
* Hook para obter estatísticas gerais da aplicação
|
|
*/
|
|
export const useAppStats = () => {
|
|
const { users } = useUserStore();
|
|
const { obras } = useObraStore();
|
|
const { tasks } = useTaskStore();
|
|
|
|
return {
|
|
totalUsers: users.length,
|
|
activeUsers: users.filter(u => u.ativo).length,
|
|
totalObras: obras.length,
|
|
obrasEmAndamento: obras.filter(o => o.status === 'ativa').length,
|
|
totalTasks: tasks.length,
|
|
tasksPendentes: tasks.filter(t => t.status === 'pendente').length,
|
|
tasksEmAndamento: tasks.filter(t => t.status === 'em_andamento').length,
|
|
tasksConcluidas: tasks.filter(t => t.status === 'concluida').length,
|
|
tasksAtrasadas: tasks.filter(t => {
|
|
const now = new Date().toISOString();
|
|
return t.data_fim < now && t.status !== 'concluida' && t.status !== 'cancelada';
|
|
}).length,
|
|
};
|
|
};
|
|
|
|
/**
|
|
* Hook para obter dados do dashboard
|
|
*/
|
|
export const useDashboardData = () => {
|
|
const stats = useAppStats();
|
|
const { tasks: allTasks } = useTaskStore();
|
|
const { obras: allObras } = useObraStore();
|
|
const { notifications } = useAppStore();
|
|
const recentTasks = allTasks.slice(0, 5); // 5 tarefas mais recentes
|
|
const recentObras = allObras.slice(0, 5); // 5 obras mais recentes
|
|
const unreadNotifications = notifications.filter(n => !n.read);
|
|
|
|
return {
|
|
stats,
|
|
recentTasks,
|
|
recentObras,
|
|
notifications: unreadNotifications.slice(0, 10), // 10 notificações mais recentes
|
|
};
|
|
}; |