Start integrating the onboarding flow with backend 12
This commit is contained in:
@@ -6,10 +6,7 @@ import { classificationService } from '../services/classification';
|
||||
import {
|
||||
ProductClassificationRequest,
|
||||
BatchClassificationRequest,
|
||||
ProductSuggestionResponse,
|
||||
BusinessModelAnalysisResponse,
|
||||
ClassificationApprovalRequest,
|
||||
ClassificationApprovalResponse,
|
||||
ProductSuggestionResponse
|
||||
} from '../types/classification';
|
||||
import { ApiError } from '../client';
|
||||
|
||||
@@ -28,48 +25,6 @@ export const classificationKeys = {
|
||||
},
|
||||
} as const;
|
||||
|
||||
// Queries
|
||||
export const usePendingSuggestions = (
|
||||
tenantId: string,
|
||||
options?: Omit<UseQueryOptions<ProductSuggestionResponse[], ApiError>, 'queryKey' | 'queryFn'>
|
||||
) => {
|
||||
return useQuery<ProductSuggestionResponse[], ApiError>({
|
||||
queryKey: classificationKeys.suggestions.pending(tenantId),
|
||||
queryFn: () => classificationService.getPendingSuggestions(tenantId),
|
||||
enabled: !!tenantId,
|
||||
staleTime: 30 * 1000, // 30 seconds
|
||||
...options,
|
||||
});
|
||||
};
|
||||
|
||||
export const useSuggestionHistory = (
|
||||
tenantId: string,
|
||||
limit: number = 50,
|
||||
offset: number = 0,
|
||||
options?: Omit<UseQueryOptions<{ items: ProductSuggestionResponse[]; total: number }, ApiError>, 'queryKey' | 'queryFn'>
|
||||
) => {
|
||||
return useQuery<{ items: ProductSuggestionResponse[]; total: number }, ApiError>({
|
||||
queryKey: classificationKeys.suggestions.history(tenantId, limit, offset),
|
||||
queryFn: () => classificationService.getSuggestionHistory(tenantId, limit, offset),
|
||||
enabled: !!tenantId,
|
||||
staleTime: 2 * 60 * 1000, // 2 minutes
|
||||
...options,
|
||||
});
|
||||
};
|
||||
|
||||
export const useBusinessModelAnalysis = (
|
||||
tenantId: string,
|
||||
options?: Omit<UseQueryOptions<BusinessModelAnalysisResponse, ApiError>, 'queryKey' | 'queryFn'>
|
||||
) => {
|
||||
return useQuery<BusinessModelAnalysisResponse, ApiError>({
|
||||
queryKey: classificationKeys.analysis.businessModel(tenantId),
|
||||
queryFn: () => classificationService.getBusinessModelAnalysis(tenantId),
|
||||
enabled: !!tenantId,
|
||||
staleTime: 10 * 60 * 1000, // 10 minutes
|
||||
...options,
|
||||
});
|
||||
};
|
||||
|
||||
// Mutations
|
||||
export const useClassifyProduct = (
|
||||
options?: UseMutationOptions<
|
||||
@@ -117,84 +72,4 @@ export const useClassifyProductsBatch = (
|
||||
},
|
||||
...options,
|
||||
});
|
||||
};
|
||||
|
||||
export const useApproveClassification = (
|
||||
options?: UseMutationOptions<
|
||||
ClassificationApprovalResponse,
|
||||
ApiError,
|
||||
{ tenantId: string; approvalData: ClassificationApprovalRequest }
|
||||
>
|
||||
) => {
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
return useMutation<
|
||||
ClassificationApprovalResponse,
|
||||
ApiError,
|
||||
{ tenantId: string; approvalData: ClassificationApprovalRequest }
|
||||
>({
|
||||
mutationFn: ({ tenantId, approvalData }) =>
|
||||
classificationService.approveClassification(tenantId, approvalData),
|
||||
onSuccess: (data, { tenantId }) => {
|
||||
// Invalidate suggestions lists
|
||||
queryClient.invalidateQueries({ queryKey: classificationKeys.suggestions.pending(tenantId) });
|
||||
queryClient.invalidateQueries({ queryKey: classificationKeys.suggestions.history(tenantId) });
|
||||
|
||||
// If approved and ingredient was created, invalidate inventory queries
|
||||
if (data.approved && data.created_ingredient) {
|
||||
queryClient.invalidateQueries({ queryKey: ['inventory', 'ingredients'] });
|
||||
}
|
||||
},
|
||||
...options,
|
||||
});
|
||||
};
|
||||
|
||||
export const useUpdateSuggestion = (
|
||||
options?: UseMutationOptions<
|
||||
ProductSuggestionResponse,
|
||||
ApiError,
|
||||
{ tenantId: string; suggestionId: string; updateData: Partial<ProductSuggestionResponse> }
|
||||
>
|
||||
) => {
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
return useMutation<
|
||||
ProductSuggestionResponse,
|
||||
ApiError,
|
||||
{ tenantId: string; suggestionId: string; updateData: Partial<ProductSuggestionResponse> }
|
||||
>({
|
||||
mutationFn: ({ tenantId, suggestionId, updateData }) =>
|
||||
classificationService.updateSuggestion(tenantId, suggestionId, updateData),
|
||||
onSuccess: (data, { tenantId }) => {
|
||||
// Invalidate suggestions lists
|
||||
queryClient.invalidateQueries({ queryKey: classificationKeys.suggestions.pending(tenantId) });
|
||||
queryClient.invalidateQueries({ queryKey: classificationKeys.suggestions.history(tenantId) });
|
||||
},
|
||||
...options,
|
||||
});
|
||||
};
|
||||
|
||||
export const useDeleteSuggestion = (
|
||||
options?: UseMutationOptions<
|
||||
{ message: string },
|
||||
ApiError,
|
||||
{ tenantId: string; suggestionId: string }
|
||||
>
|
||||
) => {
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
return useMutation<
|
||||
{ message: string },
|
||||
ApiError,
|
||||
{ tenantId: string; suggestionId: string }
|
||||
>({
|
||||
mutationFn: ({ tenantId, suggestionId }) =>
|
||||
classificationService.deleteSuggestion(tenantId, suggestionId),
|
||||
onSuccess: (data, { tenantId }) => {
|
||||
// Invalidate suggestions lists
|
||||
queryClient.invalidateQueries({ queryKey: classificationKeys.suggestions.pending(tenantId) });
|
||||
queryClient.invalidateQueries({ queryKey: classificationKeys.suggestions.history(tenantId) });
|
||||
},
|
||||
...options,
|
||||
});
|
||||
};
|
||||
Reference in New Issue
Block a user