diff --git a/components/file_metadata.templ b/components/file_metadata.templ index d8dbc31..4cafbe2 100644 --- a/components/file_metadata.templ +++ b/components/file_metadata.templ @@ -74,9 +74,213 @@ func formatFileSize(size int64) string { } } +// Dialog component for confirmation dialogs +templ FileMetadataDialog(id string, title string, message string, confirmClass string, confirmText string, action string, fileID uint, fileName string, section string) { + +} + +script hideFileDialog(id string) { + document.getElementById(id).classList.add("hidden"); +} + +script showFileDialog(id string) { + document.getElementById(id).classList.remove("hidden"); +} + +script triggerFileDelete(dialogId string, fileID uint, fileName string) { + // Hide the dialog + document.getElementById(dialogId).classList.add("hidden"); + + // 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; +} + // FileMetadataList renders a list of file metadata with pagination and filters templ FileMetadataList(ctx context.Context, data FileMetadataListData) { @LayoutWithContext("File Metadata", ctx) { + +

@@ -142,6 +346,23 @@ templ FileMetadataList(ctx context.Context, data FileMetadataListData) {

if len(data.Files) > 0 { + +
+ + 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", + ) + } +
@@ -158,7 +379,7 @@ templ FileMetadataList(ctx context.Context, data FileMetadataListData) { for _, file := range data.Files { - + @@ -265,6 +486,140 @@ func buildPaginationURL(data FileMetadataListData, page int) string { // FileMetadataDetails renders detailed information about a file templ FileMetadataDetails(ctx context.Context, data FileMetadataDetailsData) { @LayoutWithContext("File Details", ctx) { + +
@@ -373,11 +728,23 @@ templ FileMetadataDetails(ctx context.Context, data FileMetadataDetailsData) { Back to Files + + + @FileMetadataDialog( + fmt.Sprintf("delete-file-dialog-%d", data.File.ID), + "Delete File Metadata", + fmt.Sprintf("Are you sure you want to delete the metadata for '%s'? This cannot be undone.", data.File.FileName), + "btn-danger", + "Delete", + "delete", + data.File.ID, + data.File.FileName, + "details", + )
@@ -390,6 +757,138 @@ templ FileMetadataDetails(ctx context.Context, data FileMetadataDetailsData) { // FileMetadataSearch renders an advanced search form for file metadata templ FileMetadataSearch(ctx context.Context, data FileMetadataSearchData) { @LayoutWithContext("Search Files", ctx) { + +
{ strconv.FormatUint(uint64(file.ID), 10) } @@ -183,11 +404,11 @@ templ FileMetadataList(ctx context.Context, data FileMetadataListData) { -
@@ -476,7 +992,7 @@ templ FileMetadataSearch(ctx context.Context, data FileMetadataSearchData) { for _, file := range data.Files { - + diff --git a/internal/web/handlers/file_metadata_handlers.go b/internal/web/handlers/file_metadata_handlers.go index 09526d8..b2ce615 100644 --- a/internal/web/handlers/file_metadata_handlers.go +++ b/internal/web/handlers/file_metadata_handlers.go @@ -1,6 +1,7 @@ package handlers import ( + "fmt" "net/http" "strconv" @@ -344,6 +345,8 @@ func (h *FileMetadataHandler) SearchFileMetadata(c *gin.Context) { func (h *FileMetadataHandler) DeleteFileMetadata(c *gin.Context) { userID := c.GetUint("userID") + fmt.Println("Deleting file metadata") + // Get file ID from URL parameter fileID, err := strconv.ParseUint(c.Param("id"), 10, 64) if err != nil { @@ -373,6 +376,16 @@ func (h *FileMetadataHandler) DeleteFileMetadata(c *gin.Context) { return } - // Redirect to the file list - c.Redirect(http.StatusFound, "/files") + fmt.Println("File deleted successfully") + + // Check if this is an HTMX request + isHtmxRequest := c.GetHeader("HX-Request") == "true" + + if isHtmxRequest { + // For HTMX requests, just return a 200 status - client will handle UI updates + c.Status(http.StatusOK) + } else { + // For regular browser requests, redirect to the file list + c.Redirect(http.StatusFound, "/files") + } }
{ strconv.FormatUint(uint64(file.ID), 10) } @@ -499,11 +1015,11 @@ templ FileMetadataSearch(ctx context.Context, data FileMetadataSearchData) { -