MVP Build

This commit is contained in:
Eric Gullickson
2025-08-09 12:47:15 -05:00
parent 2e8816df7f
commit 8f5117a4e2
92 changed files with 5910 additions and 0 deletions

View File

@@ -0,0 +1,78 @@
/**
* @ai-summary React hooks for vehicles feature
*/
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
import { vehiclesApi } from '../api/vehicles.api';
import { CreateVehicleRequest, UpdateVehicleRequest } from '../types/vehicles.types';
import toast from 'react-hot-toast';
interface ApiError {
response?: {
data?: {
error?: string;
};
};
message?: string;
}
export const useVehicles = () => {
return useQuery({
queryKey: ['vehicles'],
queryFn: vehiclesApi.getAll,
});
};
export const useVehicle = (id: string) => {
return useQuery({
queryKey: ['vehicles', id],
queryFn: () => vehiclesApi.getById(id),
enabled: !!id,
});
};
export const useCreateVehicle = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (data: CreateVehicleRequest) => vehiclesApi.create(data),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['vehicles'] });
toast.success('Vehicle added successfully');
},
onError: (error: ApiError) => {
toast.error(error.response?.data?.error || 'Failed to add vehicle');
},
});
};
export const useUpdateVehicle = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: ({ id, data }: { id: string; data: UpdateVehicleRequest }) =>
vehiclesApi.update(id, data),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['vehicles'] });
toast.success('Vehicle updated successfully');
},
onError: (error: ApiError) => {
toast.error(error.response?.data?.error || 'Failed to update vehicle');
},
});
};
export const useDeleteVehicle = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (id: string) => vehiclesApi.delete(id),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['vehicles'] });
toast.success('Vehicle deleted successfully');
},
onError: (error: ApiError) => {
toast.error(error.response?.data?.error || 'Failed to delete vehicle');
},
});
};