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/assistant/DocumentCard.vue b/app/javascript/dashboard/components-next/captain/assistant/DocumentCard.vue
index d6e546581..d0e85d246 100644
--- a/app/javascript/dashboard/components-next/captain/assistant/DocumentCard.vue
+++ b/app/javascript/dashboard/components-next/captain/assistant/DocumentCard.vue
@@ -26,6 +26,10 @@ const props = defineProps({
type: String,
required: true,
},
+ file: {
+ type: Object,
+ default: null,
+ },
createdAt: {
type: Number,
required: true,
@@ -63,6 +67,22 @@ const menuItems = computed(() => {
const createdAt = computed(() => dynamicTime(props.createdAt));
+const displayLink = computed(() => {
+ // For PDF uploads, show the filename instead of the generated external_link
+ if (props.file?.filename) {
+ return props.file.filename;
+ }
+ return props.externalLink;
+});
+
+const actualLink = computed(() => {
+ // For PDF uploads, return the actual file URL; for URLs, return the external_link
+ if (props.file?.url) {
+ return props.file.url;
+ }
+ return props.externalLink;
+});
+
const handleAction = ({ action, value }) => {
toggleDropdown(false);
emit('action', { action, value, id: props.id });
@@ -103,12 +123,15 @@ const handleAction = ({ action, value }) => {
{{ assistant?.name || '' }}
-
- {{ externalLink }}
-
+ {{ displayLink }}
+
{{ createdAt }}
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..995453ae6 100644
--- a/app/javascript/dashboard/components-next/captain/pageComponents/document/CreateDocumentDialog.vue
+++ b/app/javascript/dashboard/components-next/captain/pageComponents/document/CreateDocumentDialog.vue
@@ -2,28 +2,43 @@
import { ref } from 'vue';
import { useStore } from 'dashboard/composables/store';
import { useAlert } from 'dashboard/composables';
-import { useI18n } from 'vue-i18n';
-
import Dialog from 'dashboard/components-next/dialog/Dialog.vue';
import DocumentForm from './DocumentForm.vue';
-const emit = defineEmits(['close']);
-const { t } = useI18n();
+const emit = defineEmits(['close', 'success']);
const store = useStore();
const dialogRef = ref(null);
const documentForm = ref(null);
-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 +57,8 @@ defineExpose({ dialogRef });