From 711d79f9a43ef1fab46f4976156d7ea953be2fa3 Mon Sep 17 00:00:00 2001 From: wisplite Date: Thu, 19 Feb 2026 07:35:30 -0600 Subject: [PATCH] nice little popover --- backend/internal/models/settings.go | 7 +++ frontend/src/gallery/components/MediaList.jsx | 46 +++++++++++++++---- 2 files changed, 45 insertions(+), 8 deletions(-) create mode 100644 backend/internal/models/settings.go diff --git a/backend/internal/models/settings.go b/backend/internal/models/settings.go new file mode 100644 index 0000000..2eb2d6e --- /dev/null +++ b/backend/internal/models/settings.go @@ -0,0 +1,7 @@ +package models + +// Settings are stored in the database as key-value pairs. +type Settings struct { + Key string `json:"key" gorm:"primaryKey"` + Value string `json:"value"` +} \ No newline at end of file diff --git a/frontend/src/gallery/components/MediaList.jsx b/frontend/src/gallery/components/MediaList.jsx index 928f5d9..20a4786 100644 --- a/frontend/src/gallery/components/MediaList.jsx +++ b/frontend/src/gallery/components/MediaList.jsx @@ -1,4 +1,4 @@ -import { EllipsisVertical, Upload } from 'lucide-react' +import { EllipsisVertical, Upload, Pencil, Trash2, Share2 } from 'lucide-react' import MediaUploadModal from './MediaUploadModal' import AuthImage from '../../components/AuthImage' import { useState, useEffect } from 'react' @@ -6,11 +6,13 @@ import { getServerUrl } from '../../hooks/getConstants' import { useAccount } from '../../contexts/useAccount' import { useNotifier } from '../../contexts/useNotifier' import { useNavigate } from 'react-router-dom' +import * as Popover from '@radix-ui/react-popover' export default function MediaList({ albumId, albumName }) { const { getAccessToken } = useAccount() const [open, setOpen] = useState(false) const [media, setMedia] = useState([]) const [aspectRatios, setAspectRatios] = useState({}) + const [openPopoverId, setOpenPopoverId] = useState(null) const { showError, showInfo } = useNotifier() const navigate = useNavigate() useEffect(() => { @@ -92,14 +94,42 @@ export default function MediaList({ albumId, albumName }) { navigate(`/viewer/${albumId ? albumId : 'root'}/${item.ID}`) }} > -
+

{item.Title}

- + setOpenPopoverId(isOpen ? item.ID : null)} + > + + + + + e.stopPropagation()} + > + + +
+ + + +