From a169918b93e8dd159a4c25cb7f2e0c84183eb963 Mon Sep 17 00:00:00 2001 From: nyne Date: Sat, 5 Jul 2025 20:40:48 +0800 Subject: [PATCH] Show file uploader. --- frontend/.prettierrc | 3 +- frontend/src/network/models.ts | 2 +- frontend/src/pages/resource_details_page.tsx | 51 +++++++++++++++----- server/dao/resource.go | 1 + server/model/file.go | 14 +++--- 5 files changed, 49 insertions(+), 22 deletions(-) diff --git a/frontend/.prettierrc b/frontend/.prettierrc index dffb6f2..1cb4ed4 100644 --- a/frontend/.prettierrc +++ b/frontend/.prettierrc @@ -1,3 +1,4 @@ { - "quoteProps": "consistent" + "quoteProps": "consistent", + "endOfLine": "auto" } diff --git a/frontend/src/network/models.ts b/frontend/src/network/models.ts index 0bc9639..5365465 100644 --- a/frontend/src/network/models.ts +++ b/frontend/src/network/models.ts @@ -100,7 +100,7 @@ export interface RFile { description: string; size: number; is_redirect: boolean; - user_id: number; + user: User; } export interface UploadingFile { diff --git a/frontend/src/pages/resource_details_page.tsx b/frontend/src/pages/resource_details_page.tsx index 6c7ae6d..1d0f79f 100644 --- a/frontend/src/pages/resource_details_page.tsx +++ b/frontend/src/pages/resource_details_page.tsx @@ -23,7 +23,7 @@ import Markdown from "react-markdown"; import "../markdown.css"; import Loading from "../components/loading.tsx"; import { - MdAdd, + MdAdd, MdOutlineArchive, MdOutlineArticle, MdOutlineComment, MdOutlineDataset, @@ -41,7 +41,7 @@ import Pagination from "../components/pagination.tsx"; import showPopup, { useClosePopup } from "../components/popup.tsx"; import { Turnstile } from "@marsidev/react-turnstile"; import Button from "../components/button.tsx"; -import Badge, { BadgeAccent } from "../components/badge.tsx"; +import Badge from "../components/badge.tsx"; import Input, { TextArea } from "../components/input.tsx"; import { useAppContext } from "../components/AppContext.tsx"; import { BiLogoSteam } from "react-icons/bi"; @@ -609,6 +609,10 @@ function FileTile({ file }: { file: RFile }) { const { t } = useTranslation(); + const userLink = `/user/${encodeURIComponent(file.user.username)}`; + + const navigate = useNavigate(); + return (
@@ -617,11 +621,34 @@ function FileTile({ file }: { file: RFile }) {

{file.description}

-

- +

+ { + e.preventDefault(); + navigate(userLink); + }} + > + + {"avatar"} + {file.user.username} + + + + {file.is_redirect ? t("Redirect") : fileSizeToString(file.size)} - -

+
+ + +
- -
@@ -1116,14 +1141,14 @@ function UpdateFileInfoDialog({ file }: { file: RFile }) { setLoading(false); }; - if (!app.isAdmin() && app.user?.id !== file.user_id) { + if (!app.isAdmin() && app.user?.id !== file.user.id) { return <>; } return ( <>
@@ -1275,13 +1300,13 @@ function DeleteFileDialog({ return ( <>
diff --git a/server/dao/resource.go b/server/dao/resource.go index 75e78c9..1ba2cb8 100644 --- a/server/dao/resource.go +++ b/server/dao/resource.go @@ -38,6 +38,7 @@ func GetResourceByID(id uint) (model.Resource, error) { Preload("Images"). Preload("Tags"). Preload("Files"). + Preload("Files.User"). First(&r, id).Error; err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { return model.Resource{}, model.NewNotFoundError("Resource not found") diff --git a/server/model/file.go b/server/model/file.go index f8d2def..e4c5d8f 100644 --- a/server/model/file.go +++ b/server/model/file.go @@ -21,12 +21,12 @@ type File struct { } type FileView struct { - ID string `json:"id"` - Filename string `json:"filename"` - Description string `json:"description"` - Size int64 `json:"size"` - IsRedirect bool `json:"is_redirect"` - UserID uint `json:"user_id"` + ID string `json:"id"` + Filename string `json:"filename"` + Description string `json:"description"` + Size int64 `json:"size"` + IsRedirect bool `json:"is_redirect"` + User UserView `json:"user"` } func (f *File) ToView() *FileView { @@ -36,6 +36,6 @@ func (f *File) ToView() *FileView { Description: f.Description, Size: f.Size, IsRedirect: f.RedirectUrl != "", - UserID: f.UserID, + User: f.User.ToView(), } }