From 3df550927dc4fe1f4647208d2039c3c8df5b6950 Mon Sep 17 00:00:00 2001 From: Steven Date: Sun, 10 Sep 2023 10:33:22 +0800 Subject: [PATCH] chore: update user profile page --- api/v1/docs.go | 3 - api/v1/resource.go | 45 +---------- api/v1/swagger.yaml | 2 - web/src/components/CreateResourceDialog.tsx | 28 +------ web/src/components/Memo.tsx | 12 ++- .../components/Settings/StorageSection.tsx | 54 +++++--------- .../components/UpdateLocalStorageDialog.tsx | 4 +- web/src/locales/de.json | 3 - web/src/locales/en.json | 3 - web/src/locales/hi.json | 3 - web/src/locales/hr.json | 3 - web/src/locales/it.json | 3 - web/src/locales/ja.json | 3 - web/src/locales/ko.json | 3 - web/src/locales/ru.json | 3 - web/src/locales/zh-Hans.json | 3 - web/src/locales/zh-Hant.json | 3 - web/src/pages/Auth.tsx | 8 +- web/src/pages/DailyReview.tsx | 2 +- web/src/pages/Explore.tsx | 2 +- web/src/pages/MemoDetail.tsx | 74 +++++++++---------- web/src/pages/UserProfile.tsx | 2 +- web/src/router/index.tsx | 2 +- web/src/types/modules/resource.d.ts | 1 - 24 files changed, 74 insertions(+), 195 deletions(-) diff --git a/api/v1/docs.go b/api/v1/docs.go index 3828ece7..b4056609 100644 --- a/api/v1/docs.go +++ b/api/v1/docs.go @@ -2687,9 +2687,6 @@ const docTemplate = `{ "v1.CreateResourceRequest": { "type": "object", "properties": { - "downloadToLocal": { - "type": "boolean" - }, "externalLink": { "type": "string" }, diff --git a/api/v1/resource.go b/api/v1/resource.go index d171cb31..38394fbe 100644 --- a/api/v1/resource.go +++ b/api/v1/resource.go @@ -6,7 +6,6 @@ import ( "encoding/json" "fmt" "io" - "mime" "net/http" "net/url" "os" @@ -50,11 +49,10 @@ type Resource struct { } type CreateResourceRequest struct { - Filename string `json:"filename"` - InternalPath string `json:"internalPath"` - ExternalLink string `json:"externalLink"` - Type string `json:"type"` - DownloadToLocal bool `json:"downloadToLocal"` + Filename string `json:"filename"` + InternalPath string `json:"internalPath"` + ExternalLink string `json:"externalLink"` + Type string `json:"type"` } type FindResourceRequest struct { @@ -172,41 +170,6 @@ func (s *APIV1Service) CreateResource(c echo.Context) error { if linkURL.Scheme != "http" && linkURL.Scheme != "https" { return echo.NewHTTPError(http.StatusBadRequest, "Invalid external link scheme") } - - if request.DownloadToLocal { - resp, err := http.Get(linkURL.String()) - if err != nil { - return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Failed to request %s", request.ExternalLink)) - } - defer resp.Body.Close() - - blob, err := io.ReadAll(resp.Body) - if err != nil { - return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Failed to read %s", request.ExternalLink)) - } - - mediaType, _, err := mime.ParseMediaType(resp.Header.Get("Content-Type")) - if err != nil { - return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Failed to read mime from %s", request.ExternalLink)) - } - create.Type = mediaType - - filename := path.Base(linkURL.Path) - if path.Ext(filename) == "" { - extensions, _ := mime.ExtensionsByType(mediaType) - if len(extensions) > 0 { - filename += extensions[0] - } - } - create.Filename = filename - create.ExternalLink = "" - create.Size = int64(len(blob)) - - err = SaveResourceBlob(ctx, s.Store, create, bytes.NewReader(blob)) - if err != nil { - return echo.NewHTTPError(http.StatusInternalServerError, "Failed to save resource").SetInternal(err) - } - } } resource, err := s.Store.CreateResource(ctx, create) diff --git a/api/v1/swagger.yaml b/api/v1/swagger.yaml index f2b27e6d..e7393883 100644 --- a/api/v1/swagger.yaml +++ b/api/v1/swagger.yaml @@ -265,8 +265,6 @@ definitions: type: object v1.CreateResourceRequest: properties: - downloadToLocal: - type: boolean externalLink: type: string filename: diff --git a/web/src/components/CreateResourceDialog.tsx b/web/src/components/CreateResourceDialog.tsx index 4aefb5e4..d41a8f5b 100644 --- a/web/src/components/CreateResourceDialog.tsx +++ b/web/src/components/CreateResourceDialog.tsx @@ -13,7 +13,7 @@ interface Props extends DialogProps { onConfirm?: (resourceList: Resource[]) => void; } -type SelectedMode = "local-file" | "external-link" | "download-link"; +type SelectedMode = "local-file" | "external-link"; interface State { selectedMode: SelectedMode; @@ -32,7 +32,6 @@ const CreateResourceDialog: React.FC = (props: Props) => { filename: "", externalLink: "", type: "", - downloadToLocal: false, }); const [fileList, setFileList] = useState([]); const fileInputRef = useRef(null); @@ -71,7 +70,7 @@ const CreateResourceDialog: React.FC = (props: Props) => { destroy(); }; - const handleSelectedModeChanged = (mode: "local-file" | "external-link" | "download-link") => { + const handleSelectedModeChanged = (mode: "local-file" | "external-link") => { setState((state) => { return { ...state, @@ -130,10 +129,6 @@ const CreateResourceDialog: React.FC = (props: Props) => { if (resourceCreate.filename === "" || resourceCreate.externalLink === "" || resourceCreate.type === "") { return false; } - } else if (state.selectedMode === "download-link") { - if (resourceCreate.externalLink === "") { - return false; - } } return true; }; @@ -166,9 +161,6 @@ const CreateResourceDialog: React.FC = (props: Props) => { createdResourceList.push(resource); } } else { - if (state.selectedMode === "download-link") { - resourceCreate.downloadToLocal = true; - } const resource = await resourceStore.createResource(resourceCreate); createdResourceList.push(resource); } @@ -203,7 +195,6 @@ const CreateResourceDialog: React.FC = (props: Props) => { > - {state.selectedMode === "local-file" && ( @@ -288,21 +279,6 @@ const CreateResourceDialog: React.FC = (props: Props) => { )} - {state.selectedMode === "download-link" && ( - <> - - {t("resource.create-dialog.external-link.link")} - - - - )} -
-
-
-

{t("setting.storage-section.type-local")}

-
-
- - - - } - /> -
-
{storageList.map((storage) => (
= (props: Props) => {

{t("setting.storage-section.update-local-path-description")}

-
-

e.g. {"assets/{filename}"}

+
+ e.g. {"assets/{timestamp}_{filename}"}
{
- -

{systemStatus.customizedProfile.name}

+ +

{systemStatus.customizedProfile.name}

{!disablePasswordLogin && ( -
+
{ className="w-full" size="lg" type="password" + disabled={actionBtnLoadingState.isLoading} placeholder={t("common.password")} value={password} onChange={handlePasswordInputChanged} diff --git a/web/src/pages/DailyReview.tsx b/web/src/pages/DailyReview.tsx index f9909376..6ade07a9 100644 --- a/web/src/pages/DailyReview.tsx +++ b/web/src/pages/DailyReview.tsx @@ -91,7 +91,7 @@ const DailyReview = () => {

toggleShowDatePicker()} > {t("daily-review.title")} diff --git a/web/src/pages/Explore.tsx b/web/src/pages/Explore.tsx index c65842d5..55ef505f 100644 --- a/web/src/pages/Explore.tsx +++ b/web/src/pages/Explore.tsx @@ -96,7 +96,7 @@ const Explore = () => { return ; })} {isComplete ? ( - memos.length === 0 && ( + sortedMemos.length === 0 && (

{t("message.no-data")}

diff --git a/web/src/pages/MemoDetail.tsx b/web/src/pages/MemoDetail.tsx index 359b323a..949b44c8 100644 --- a/web/src/pages/MemoDetail.tsx +++ b/web/src/pages/MemoDetail.tsx @@ -1,20 +1,18 @@ -import { useEffect } from "react"; +import { useEffect, useState } from "react"; import { toast } from "react-hot-toast"; -import { Link, useLocation, useParams } from "react-router-dom"; -import Icon from "@/components/Icon"; +import { useParams } from "react-router-dom"; +import FloatingNavButton from "@/components/FloatingNavButton"; import Memo from "@/components/Memo"; +import UserAvatar from "@/components/UserAvatar"; import useLoading from "@/hooks/useLoading"; -import { useGlobalStore, useMemoStore } from "@/store/module"; -import { useTranslate } from "@/utils/i18n"; +import { useMemoStore, useUserStore } from "@/store/module"; const MemoDetail = () => { - const t = useTranslate(); const params = useParams(); - const location = useLocation(); - const globalStore = useGlobalStore(); const memoStore = useMemoStore(); + const userStore = useUserStore(); const loadingState = useLoading(); - const customizedProfile = globalStore.state.systemStatus.customizedProfile; + const [user, setUser] = useState(); const memoId = Number(params.memoId); const memo = memoStore.state.memos.find((memo) => memo.id === memoId); @@ -22,7 +20,9 @@ const MemoDetail = () => { if (memoId && !isNaN(memoId)) { memoStore .fetchMemoById(memoId) - .then(() => { + .then(async (memo) => { + const user = await userStore.getUserByUsername(memo.creatorUsername); + setUser(user); loadingState.setFinish(); }) .catch((error) => { @@ -30,39 +30,35 @@ const MemoDetail = () => { toast.error(error.response.data.message); }); } - }, [location]); + }, [memoId]); return ( -
-
-
-
- -

{customizedProfile.name}

+ <> +
+
+
+ +
+

{user?.nickname}

+
+ {!loadingState.isLoading && + (memo ? ( + <> +
+ +
+ + ) : ( + <> +

Not found

+ + ))}
- {!loadingState.isLoading && - (memo ? ( - <> -
- -
-
- - {t("router.back-to-home")} - -
- - ) : ( - <> -

Not found

- - ))} -
-
+ + + + ); }; diff --git a/web/src/pages/UserProfile.tsx b/web/src/pages/UserProfile.tsx index 90a9bf3e..862be4b9 100644 --- a/web/src/pages/UserProfile.tsx +++ b/web/src/pages/UserProfile.tsx @@ -39,7 +39,7 @@ const UserProfile = () => {
- +

{user?.nickname}

diff --git a/web/src/router/index.tsx b/web/src/router/index.tsx index bd04d464..48674e00 100644 --- a/web/src/router/index.tsx +++ b/web/src/router/index.tsx @@ -218,7 +218,7 @@ const router = createBrowserRouter([ }, }, { - path: "u/:username", + path: "/u/:username", element: , loader: async () => { await initialGlobalStateLoader(); diff --git a/web/src/types/modules/resource.d.ts b/web/src/types/modules/resource.d.ts index f1deab96..0fd7618c 100644 --- a/web/src/types/modules/resource.d.ts +++ b/web/src/types/modules/resource.d.ts @@ -18,7 +18,6 @@ interface ResourceCreate { filename: string; externalLink: string; type: string; - downloadToLocal: boolean; } interface ResourcePatch {