From 4b625b7120c83e9dafc7a1e23c2cbe7406b4f212 Mon Sep 17 00:00:00 2001 From: StarFleetCPTN Date: Sun, 9 Mar 2025 22:02:02 -0700 Subject: [PATCH] refactor: Improve HTMX partial rendering for file metadata views - Rename FileMetadataListContent to FileMetadataListPartial for consistency - Add separate FileMetadataSearchContent template for search results - Enhance handler logic to support HTMX partial rendering - Implement more robust HTMX request detection - Improve error handling and empty state rendering for file lists and search results --- components/file_metadata.templ | 600 +++++++++--------- .../web/handlers/file_metadata_handlers.go | 134 +++- 2 files changed, 420 insertions(+), 314 deletions(-) diff --git a/components/file_metadata.templ b/components/file_metadata.templ index 1f6f48b..e833047 100644 --- a/components/file_metadata.templ +++ b/components/file_metadata.templ @@ -148,7 +148,134 @@ script triggerFileDelete(dialogId string, fileID uint, fileName string) { window.currentlyDeletingFile = true; } -// FileMetadataList renders a list of file metadata with pagination and filters +// Rename from FileMetadataListContent to FileMetadataListPartial to match what the handler expects +templ FileMetadataListPartial(data FileMetadataListData) { + +
+ + for _, file := range data.Files { + @FileMetadataDialog( + fmt.Sprintf("delete-file-dialog-%d", file.ID), + "Delete File Metadata", + fmt.Sprintf("Are you sure you want to delete the metadata for '%s'? This cannot be undone.", file.FileName), + "btn-danger", + "Delete", + "delete", + file.ID, + file.FileName, + "list", + ) + } +
+ + + + + + + + + if data.Job == nil { + + } + + + + + for _, file := range data.Files { + + + + + + + if data.Job == nil && file.Job.ID > 0 { + + } + + + } + +
IDFilenameSizeProcessedStatusJobActions
{ strconv.FormatUint(uint64(file.ID), 10) } + + { file.FileName } + + { formatFileSize(file.FileSize) }{ file.ProcessedTime.Format("2006-01-02 15:04:05") } + + { file.Status } + + + + { file.Job.Name } + + + + + + + +
+ + + if data.TotalPages > 1 { +
+
+ if data.Page > 1 { + + + + } else { + + + + } + + for i := 1; i <= data.TotalPages; i++ { + if i == data.Page { + + { strconv.Itoa(i) } + + } else if i == 1 || i == data.TotalPages || (i >= data.Page-2 && i <= data.Page+2) { + + { strconv.Itoa(i) } + + } else if i == data.Page-3 || i == data.Page+3 { + ... + } + } + + if data.Page < data.TotalPages { + + + + } else { + + + + } +
+
+ } +} + +// Update the main FileMetadataList template to use the partial template templ FileMetadataList(ctx context.Context, data FileMetadataListData) { @LayoutWithContext("File Metadata", ctx) {