![gpt-engineer-app[bot]](/assets/img/avatar_default.png)
Consolidated database interaction logic into service files. Streamlined job and transaction creation/update processes to minimize database requests, improving efficiency.
70 lines
1.8 KiB
TypeScript
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;
|
|
}
|