feat: Implement Schedule Maintenance Management and Tab Dashboard

This commit is contained in:
Tola Leng
2025-05-23 20:34:18 +08:00
parent a7a1c9a144
commit 395a580032
51 changed files with 3962 additions and 0 deletions
@@ -0,0 +1,92 @@
import { getCurrentEndpoint } from '@/lib/pocketbase';
import { MaintenanceItem, CreateMaintenanceInput } from '../types/maintenance.types';
import { categorizeMaintenance } from './maintenanceUtils';
import {
fetchAllMaintenanceRecords,
updateMaintenanceStatus,
updateMaintenance,
deleteMaintenance,
createMaintenance as createMaintenanceRecord,
clearMaintenanceCache
} from './api';
// Helper function to get the API URL
const getApiUrl = (): string => {
return getCurrentEndpoint();
};
// Get all maintenance records with performance optimizations
const getMaintenanceRecords = async (): Promise<MaintenanceItem[]> => {
return await fetchAllMaintenanceRecords();
};
// Get upcoming maintenance with caching
const getUpcomingMaintenance = async (): Promise<MaintenanceItem[]> => {
try {
const allRecords = await getMaintenanceRecords();
const { upcoming } = categorizeMaintenance(allRecords);
return upcoming;
} catch (error) {
console.error('Error fetching upcoming maintenance:', error);
return [];
}
};
// Get ongoing maintenance with caching
const getOngoingMaintenance = async (): Promise<MaintenanceItem[]> => {
try {
const allRecords = await getMaintenanceRecords();
const { ongoing } = categorizeMaintenance(allRecords);
return ongoing;
} catch (error) {
console.error('Error fetching ongoing maintenance:', error);
return [];
}
};
// Get completed maintenance with caching
const getCompletedMaintenance = async (): Promise<MaintenanceItem[]> => {
try {
const allRecords = await getMaintenanceRecords();
const { completed } = categorizeMaintenance(allRecords);
return completed;
} catch (error) {
console.error('Error fetching completed maintenance:', error);
return [];
}
};
// Create a new maintenance record
const createMaintenance = async (data: CreateMaintenanceInput): Promise<void> => {
await createMaintenanceRecord(data);
clearMaintenanceCache(); // Force cache refresh after creation
};
// Update an existing maintenance record
const updateMaintenanceRecord = async (id: string, data: Partial<MaintenanceItem>): Promise<void> => {
await updateMaintenance(id, data);
clearMaintenanceCache(); // Force cache refresh after update
};
// Refresh cache manually
const refreshMaintenanceData = (): void => {
clearMaintenanceCache();
};
// Export all functions as the maintenanceService object
export const maintenanceService = {
getApiUrl,
getMaintenanceRecords,
getUpcomingMaintenance,
getOngoingMaintenance,
getCompletedMaintenance,
updateMaintenanceStatus,
updateMaintenance: updateMaintenanceRecord,
deleteMaintenance,
createMaintenance,
refreshMaintenanceData
};
// Re-export types for convenience
export type { MaintenanceItem, CreateMaintenanceInput };