From 8f27ba081cca190e004e4f4459f163ea4c63702a Mon Sep 17 00:00:00 2001 From: Tanmay Deep Sharma Date: Wed, 2 Jul 2025 12:52:45 +0530 Subject: [PATCH 1/6] feat: add PDF upload functionality --- .../dashboard/api/captain/document.js | 8 + .../document/CreateDocumentDialog.vue | 32 ++- .../pageComponents/document/DocumentForm.vue | 249 ++++++++++++++++-- .../components-next/fileUpload/FileUpload.vue | 201 ++++++++++++++ .../dashboard/captain/documents/Index.vue | 6 + .../dashboard/store/captain/document.js | 17 ++ 6 files changed, 479 insertions(+), 34 deletions(-) create mode 100644 app/javascript/dashboard/components-next/fileUpload/FileUpload.vue diff --git a/app/javascript/dashboard/api/captain/document.js b/app/javascript/dashboard/api/captain/document.js index dc22b0c32..a4ec6b23e 100644 --- a/app/javascript/dashboard/api/captain/document.js +++ b/app/javascript/dashboard/api/captain/document.js @@ -15,6 +15,14 @@ class CaptainDocument extends ApiClient { }, }); } + + uploadPdf(formData) { + return axios.post(`${this.url}/upload_pdf`, formData, { + headers: { + 'Content-Type': 'multipart/form-data', + }, + }); + } } export default new CaptainDocument(); diff --git a/app/javascript/dashboard/components-next/captain/pageComponents/document/CreateDocumentDialog.vue b/app/javascript/dashboard/components-next/captain/pageComponents/document/CreateDocumentDialog.vue index 7db74f523..40ad2cc6a 100644 --- a/app/javascript/dashboard/components-next/captain/pageComponents/document/CreateDocumentDialog.vue +++ b/app/javascript/dashboard/components-next/captain/pageComponents/document/CreateDocumentDialog.vue @@ -7,7 +7,7 @@ import { useI18n } from 'vue-i18n'; import Dialog from 'dashboard/components-next/dialog/Dialog.vue'; import DocumentForm from './DocumentForm.vue'; -const emit = defineEmits(['close']); +const emit = defineEmits(['close', 'success']); const { t } = useI18n(); const store = useStore(); @@ -18,12 +18,32 @@ const i18nKey = 'CAPTAIN.DOCUMENTS.CREATE'; const handleSubmit = async newDocument => { try { - await store.dispatch('captainDocuments/create', newDocument); - useAlert(t(`${i18nKey}.SUCCESS_MESSAGE`)); + if (newDocument.type === 'pdf') { + // Handle PDF upload + const formData = new FormData(); + formData.append('pdf_document', newDocument.pdf_document); + formData.append('assistant_id', newDocument.assistant_id); + + await store.dispatch('captainDocuments/uploadPdf', formData); + useAlert('PDF uploaded successfully! Processing will begin shortly.'); + } else { + // Handle URL creation + await store.dispatch('captainDocuments/create', { + document: { + external_link: newDocument.external_link, + assistant_id: newDocument.assistant_id, + }, + }); + useAlert('Document created successfully!'); + } + + // Emit success event to refresh the list + emit('success'); dialogRef.value.close(); } catch (error) { const errorMessage = - error?.response?.message || t(`${i18nKey}.ERROR_MESSAGE`); + error?.response?.data?.message || + 'Failed to create document. Please try again.'; useAlert(errorMessage); } }; @@ -42,8 +62,8 @@ defineExpose({ dialogRef });