First commit - backup RDOC
This commit is contained in:
147
src/stores/index.ts
Normal file
147
src/stores/index.ts
Normal file
@@ -0,0 +1,147 @@
|
||||
// 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
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user