main #11
@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
// src/pages/contribute/knowledgebase.astro - SIMPLIFIED: Issues only, minimal validation
|
// src/pages/contribute/knowledgebase.astro
|
||||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||||
import { withAuth } from '../../utils/auth.js';
|
import { withAuth } from '../../utils/auth.js';
|
||||||
import { getToolsData } from '../../utils/dataService.js';
|
import { getToolsData } from '../../utils/dataService.js';
|
||||||
@ -242,7 +242,6 @@ class KnowledgebaseForm {
|
|||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
this.init();
|
this.init();
|
||||||
this.checkUploadStatus();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private init() {
|
private init() {
|
||||||
@ -313,7 +312,7 @@ class KnowledgebaseForm {
|
|||||||
// Client-side validation before upload
|
// Client-side validation before upload
|
||||||
const validation = this.validateFileBeforeUpload(file);
|
const validation = this.validateFileBeforeUpload(file);
|
||||||
if (!validation.valid) {
|
if (!validation.valid) {
|
||||||
this.showMessage('error', `Cannot upload ${file.name}: ${validation.error}`);
|
console.log('[UPLOAD]Cannot upload ', file.name, ' Error: ', validation.error);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -409,7 +408,6 @@ class KnowledgebaseForm {
|
|||||||
fileItem.url = responseData.url;
|
fileItem.url = responseData.url;
|
||||||
this.renderFileList();
|
this.renderFileList();
|
||||||
|
|
||||||
this.showMessage('success', `Successfully uploaded ${fileItem.name}`);
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
if (responseData && responseData.details) {
|
if (responseData && responseData.details) {
|
||||||
@ -424,7 +422,6 @@ class KnowledgebaseForm {
|
|||||||
? error.message
|
? error.message
|
||||||
: 'Unknown upload error';
|
: 'Unknown upload error';
|
||||||
|
|
||||||
this.showMessage('error', `Failed to upload ${fileItem.name}: ${errorMessage}`);
|
|
||||||
this.removeFile(fileId);
|
this.removeFile(fileId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -496,7 +493,6 @@ class KnowledgebaseForm {
|
|||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('[KB FORM] Submission error:', error);
|
console.error('[KB FORM] Submission error:', error);
|
||||||
this.showMessage('error', 'Submission failed. Please try again.');
|
|
||||||
} finally {
|
} finally {
|
||||||
this.isSubmitting = false;
|
this.isSubmitting = false;
|
||||||
(this.elements.submitBtn as HTMLButtonElement).disabled = false;
|
(this.elements.submitBtn as HTMLButtonElement).disabled = false;
|
||||||
@ -525,65 +521,6 @@ class KnowledgebaseForm {
|
|||||||
this.renderFileList();
|
this.renderFileList();
|
||||||
}
|
}
|
||||||
|
|
||||||
private showMessage(type: 'success' | 'error' | 'warning', message: string, details?: string) {
|
|
||||||
const container = document.getElementById('message-container');
|
|
||||||
if (!container) return;
|
|
||||||
|
|
||||||
const messageEl = document.createElement('div');
|
|
||||||
messageEl.className = `message message-${type}`;
|
|
||||||
|
|
||||||
// Create message content with optional details
|
|
||||||
const messageContent = document.createElement('div');
|
|
||||||
messageContent.className = 'message-content';
|
|
||||||
messageContent.textContent = message;
|
|
||||||
|
|
||||||
messageEl.appendChild(messageContent);
|
|
||||||
|
|
||||||
// Add details if provided
|
|
||||||
if (details) {
|
|
||||||
const detailsEl = document.createElement('div');
|
|
||||||
detailsEl.className = 'message-details';
|
|
||||||
detailsEl.textContent = details;
|
|
||||||
messageEl.appendChild(detailsEl);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add close button
|
|
||||||
const closeBtn = document.createElement('button');
|
|
||||||
closeBtn.className = 'message-close';
|
|
||||||
closeBtn.innerHTML = '×';
|
|
||||||
closeBtn.onclick = () => messageEl.remove();
|
|
||||||
messageEl.appendChild(closeBtn);
|
|
||||||
|
|
||||||
container.appendChild(messageEl);
|
|
||||||
|
|
||||||
// Auto-remove after 10 seconds for errors (to give time to read), 5 seconds for others
|
|
||||||
const timeout = type === 'error' ? 10000 : 5000;
|
|
||||||
setTimeout(() => {
|
|
||||||
if (messageEl.parentNode) {
|
|
||||||
messageEl.remove();
|
|
||||||
}
|
|
||||||
}, timeout);
|
|
||||||
}
|
|
||||||
|
|
||||||
private async checkUploadStatus() {
|
|
||||||
try {
|
|
||||||
console.log('[DIAGNOSTIC] Checking upload endpoint status');
|
|
||||||
const response = await fetch('/api/upload/media', { method: 'GET' });
|
|
||||||
const status = await response.json();
|
|
||||||
console.log('[DIAGNOSTIC] Upload status:', status);
|
|
||||||
|
|
||||||
if (!status.storage?.nextcloud?.configured && !status.storage?.local?.available) {
|
|
||||||
this.showMessage('warning', 'No upload storage configured. Check server configuration.');
|
|
||||||
}
|
|
||||||
|
|
||||||
return status;
|
|
||||||
} catch (error) {
|
|
||||||
console.error('[DIAGNOSTIC] Failed to check upload status:', error);
|
|
||||||
this.showMessage('error', 'Could not connect to upload service');
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public removeFileById(fileId: string) {
|
public removeFileById(fileId: string) {
|
||||||
this.removeFile(fileId);
|
this.removeFile(fileId);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user