diff --git a/src/App.tsx b/src/App.tsx index ff0ba94..62ea014 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -181,7 +181,14 @@ function AppRoutes({ onLogout }: AppProps) { return; } - // Regular custom request submission + // If requestData has backendId, it means it came from the API flow (CreateRequest component) + // The hook already shows the toast, so we just navigate + if (requestData.backendId) { + navigate('/my-requests'); + return; + } + + // Regular custom request submission (old flow without API) // Generate unique ID for the new custom request const requestId = `RE-REQ-2024-${String(Object.keys(CUSTOM_REQUEST_DATABASE).length + dynamicRequests.length + 1).padStart(3, '0')}`; diff --git a/src/pages/CreateRequest/hooks/useCreateRequestSubmission.ts b/src/pages/CreateRequest/hooks/useCreateRequestSubmission.ts index b227330..e4bcb9a 100644 --- a/src/pages/CreateRequest/hooks/useCreateRequestSubmission.ts +++ b/src/pages/CreateRequest/hooks/useCreateRequestSubmission.ts @@ -3,6 +3,7 @@ */ import { useState } from 'react'; +import { toast } from 'sonner'; import { FormData, RequestTemplate } from '@/hooks/useCreateRequestForm'; import { buildCreatePayload, @@ -72,6 +73,12 @@ export function useCreateRequestSubmission({ documentsToDelete ); + // Show toast after backend confirmation + toast.success('Request Submitted Successfully!', { + description: `Your request "${formData.title}" has been submitted and sent for approval.`, + duration: 5000, + }); + onSubmit?.({ ...formData, backendId: editRequestId, @@ -87,14 +94,24 @@ export function useCreateRequestSubmission({ const result = await createAndSubmitWorkflow(createPayload, documents); + // Show toast after backend confirmation + toast.success('Request Submitted Successfully!', { + description: `Your request "${formData.title}" has been created and sent for approval.`, + duration: 5000, + }); + onSubmit?.({ ...formData, backendId: result.id, template: selectedTemplate, }); } - } catch (error) { + } catch (error: any) { console.error('Failed to submit workflow:', error); + toast.error('Failed to Submit Request', { + description: error?.response?.data?.message || error?.message || 'An error occurred while submitting the request.', + duration: 5000, + }); setSubmitting(false); } }; @@ -130,6 +147,11 @@ export function useCreateRequestSubmission({ documentsToDelete ); + toast.success('Draft Saved Successfully!', { + description: `Your request "${formData.title}" has been saved as draft.`, + duration: 5000, + }); + onSubmit?.({ ...formData, backendId: editRequestId, @@ -145,14 +167,23 @@ export function useCreateRequestSubmission({ const result = await createWorkflow(createPayload, documents); + toast.success('Draft Saved Successfully!', { + description: `Your request "${formData.title}" has been saved as draft.`, + duration: 5000, + }); + onSubmit?.({ ...formData, backendId: result.id, template: selectedTemplate, }); } - } catch (error) { + } catch (error: any) { console.error('Failed to save draft:', error); + toast.error('Failed to Save Draft', { + description: error?.response?.data?.message || error?.message || 'An error occurred while saving the draft.', + duration: 5000, + }); setSavingDraft(false); } };