package components import ( "context" "strconv" "fmt" "github.com/starfleetcptn/gomft/internal/db" ) // FileMetadataFilter represents filter parameters for file metadata queries type FileMetadataFilter struct { Status string JobID string FileName string Hash string StartDate string EndDate string } // FileMetadataListData contains data for the file metadata list template type FileMetadataListData struct { Files []db.FileMetadata TotalCount int64 Page int Limit int TotalPages int Job *db.Job // Optional: if viewing files for a specific job Filter FileMetadataFilter } // FileMetadataDetailsData contains data for the file metadata details template type FileMetadataDetailsData struct { File db.FileMetadata } // FileMetadataSearchData contains data for the file metadata search template type FileMetadataSearchData struct { Files []db.FileMetadata TotalCount int64 Page int Limit int TotalPages int Filter FileMetadataFilter } // getStatusBadgeClass returns the appropriate CSS class for a file status badge func getStatusBadgeClass(status string) string { switch status { case "processed": return "bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-300" case "archived": return "bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-300" case "deleted": return "bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-300" case "archived_and_deleted": return "bg-orange-100 text-orange-800 dark:bg-orange-900 dark:text-orange-300" case "error": return "bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-300" default: return "bg-gray-100 text-gray-800 dark:bg-gray-700 dark:text-gray-300" } } // formatFileSize formats a file size in bytes to a human-readable string func formatFileSize(size int64) string { if size < 1024 { return fmt.Sprintf("%d B", size) } else if size < 1024*1024 { return fmt.Sprintf("%.2f KB", float64(size)/1024) } else if size < 1024*1024*1024 { return fmt.Sprintf("%.2f MB", float64(size)/(1024*1024)) } else { return fmt.Sprintf("%.2f GB", float64(size)/(1024*1024*1024)) } } // Updated Dialog component using Flowbite templ FileMetadataDialog(id string, title string, message string, confirmClass string, confirmText string, action string, fileID uint, fileName string, section string) {
} script triggerFileDelete(dialogId string, fileID uint, fileName string) { // Hide the dialog document.getElementById(dialogId).classList.add("hidden"); document.getElementById(dialogId).classList.remove("flex"); // Store data in a way that's accessible to event handlers window.lastDeletedFile = { id: fileID, name: fileName }; // Add custom marker to track this deletion window.currentlyDeletingFile = true; } // Rename from FileMetadataListContent to FileMetadataListPartial to match what the handler expects templ FileMetadataListPartial(data FileMetadataListData) {| ID | Filename | Size | Processed | Status | if data.Job == nil {Job | }Actions |
|---|---|---|---|---|---|---|
| { strconv.FormatUint(uint64(file.ID), 10) } | { file.FileName } | { formatFileSize(file.FileSize) } | { file.ProcessedTime.Format("2006-01-02 15:04:05") } | { file.Status } | if data.Job == nil && file.Job.ID > 0 {{ file.Job.Name } | }
No file metadata found matching your criteria.
File ID: { strconv.FormatUint(uint64(data.File.ID), 10) }
| Filename | { data.File.FileName } |
|---|---|
| Size | { formatFileSize(data.File.FileSize) } |
| Hash | if data.File.FileHash != "" { { data.File.FileHash } } else { Not available } |
| Status | { data.File.Status } |
| Original Path |
{ data.File.OriginalPath }
|
| Destination Path |
{ data.File.DestinationPath }
|
| Job | { data.File.Job.Name } |
|---|---|
| Processed Time |
{ data.File.ProcessedTime.Format("2006-01-02 15:04:05") }
|
| Creation Time |
{ data.File.CreationTime.Format("2006-01-02 15:04:05") }
|
| Modification Time |
{ data.File.ModTime.Format("2006-01-02 15:04:05") }
|
| Error |
{ data.File.ErrorMessage }
|
| Record Created | { data.File.CreatedAt.Format("2006-01-02 15:04:05") } |
| Record Updated | { data.File.UpdatedAt.Format("2006-01-02 15:04:05") } |
| ID | Filename | Size | Processed | Status | Job | Actions |
|---|---|---|---|---|---|---|
| { strconv.FormatUint(uint64(file.ID), 10) } | { file.FileName } | { formatFileSize(file.FileSize) } | { file.ProcessedTime.Format("2006-01-02 15:04:05") } | { file.Status } | if file.Job.ID > 0 { { file.Job.Name } } else { N/A } | |
|
No files found matching your search criteria. |
||||||