Files
eve-industrializer/src/hooks/useDataService.ts
gpt-engineer-app[bot] a0470ed9c5 Refactor: Centralize database operations
Consolidated database interaction logic into service files. Streamlined job and transaction creation/update processes to minimize database requests, improving efficiency.
2025-07-06 17:50:07 +00:00

70 lines
1.8 KiB
TypeScript

import { useState, useEffect } from 'react';
import { dataService } from '@/services/dataService';
import { IndJob } from '@/lib/types';
export function useJobs() {
const [jobs, setJobs] = useState<IndJob[]>([]);
const [loading, setLoading] = useState(true);
const [error, setError] = useState<string | null>(null);
useEffect(() => {
const loadJobs = async () => {
try {
setLoading(true);
await dataService.loadJobs();
setError(null);
} catch (err) {
setError(err instanceof Error ? err.message : 'Failed to load jobs');
} finally {
setLoading(false);
}
};
loadJobs();
const unsubscribe = dataService.subscribe(() => {
setJobs(dataService.getJobs());
});
return unsubscribe;
}, []);
return {
jobs,
loading,
error,
createJob: dataService.createJob.bind(dataService),
updateJob: dataService.updateJob.bind(dataService),
deleteJob: dataService.deleteJob.bind(dataService),
createTransaction: dataService.createTransaction.bind(dataService),
createMultipleTransactions: dataService.createMultipleTransactions.bind(dataService),
updateTransaction: dataService.updateTransaction.bind(dataService),
deleteTransaction: dataService.deleteTransaction.bind(dataService),
createBillItem: dataService.createBillItem.bind(dataService),
createMultipleBillItems: dataService.createMultipleBillItems.bind(dataService)
};
}
export function useJob(jobId: string | null) {
const [job, setJob] = useState<IndJob | null>(null);
useEffect(() => {
if (!jobId) {
setJob(null);
return;
}
const updateJob = () => {
setJob(dataService.getJob(jobId));
};
updateJob();
const unsubscribe = dataService.subscribe(updateJob);
return unsubscribe;
}, [jobId]);
return job;
}