From b9cbe6626f770080e62ceefbbdd75ed14f3b5435 Mon Sep 17 00:00:00 2001 From: Steven Date: Sat, 27 Jan 2024 05:26:32 +0800 Subject: [PATCH] chore: update tag rename --- api/v1/resource.go | 1 + api/v2/resource_service.go | 3 +++ api/v2/tag_service.go | 2 +- .../MemoContent/EmbeddedContent/EmbeddedMemo.tsx | 4 ++-- web/src/components/RenameTagDialog.tsx | 16 ++++++++-------- 5 files changed, 15 insertions(+), 11 deletions(-) diff --git a/api/v1/resource.go b/api/v1/resource.go index d162b875..c4702cae 100644 --- a/api/v1/resource.go +++ b/api/v1/resource.go @@ -233,6 +233,7 @@ func (s *APIV1Service) UploadResource(c echo.Context) error { if err != nil { return echo.NewHTTPError(http.StatusInternalServerError, "Failed to create resource").SetInternal(err) } + metric.Enqueue("resource create") return c.JSON(http.StatusOK, convertResourceFromStore(resource)) } diff --git a/api/v2/resource_service.go b/api/v2/resource_service.go index 8cf3dc5b..dd5a67d2 100644 --- a/api/v2/resource_service.go +++ b/api/v2/resource_service.go @@ -11,6 +11,7 @@ import ( "google.golang.org/protobuf/types/known/timestamppb" apiv2pb "github.com/usememos/memos/proto/gen/api/v2" + "github.com/usememos/memos/server/service/metric" "github.com/usememos/memos/store" ) @@ -44,6 +45,8 @@ func (s *APIV2Service) CreateResource(ctx context.Context, request *apiv2pb.Crea if err != nil { return nil, status.Errorf(codes.Internal, "failed to create resource: %v", err) } + + metric.Enqueue("resource create") return &apiv2pb.CreateResourceResponse{ Resource: s.convertResourceFromStore(ctx, resource), }, nil diff --git a/api/v2/tag_service.go b/api/v2/tag_service.go index f9922642..98ccaa8b 100644 --- a/api/v2/tag_service.go +++ b/api/v2/tag_service.go @@ -104,7 +104,7 @@ func (s *APIV2Service) RenameTag(ctx context.Context, request *apiv2pb.RenameTag return nil, status.Errorf(codes.Internal, "failed to parse memo: %v", err) } traverseASTNodes(nodes, func(node ast.Node) { - if tag, ok := node.(*ast.Tag); ok { + if tag, ok := node.(*ast.Tag); ok && tag.Content == request.OldName { tag.Content = request.NewName } }) diff --git a/web/src/components/MemoContent/EmbeddedContent/EmbeddedMemo.tsx b/web/src/components/MemoContent/EmbeddedContent/EmbeddedMemo.tsx index ac6618eb..224d7d09 100644 --- a/web/src/components/MemoContent/EmbeddedContent/EmbeddedMemo.tsx +++ b/web/src/components/MemoContent/EmbeddedContent/EmbeddedMemo.tsx @@ -38,8 +38,8 @@ const EmbeddedMemo = ({ resourceId, params: paramsStr }: Props) => { // Add the memo to the set of embedded memos. This is used to prevent infinite loops when a memo embeds itself. context.embeddedMemos.add(resourceName); const params = new URLSearchParams(paramsStr); - const useInlineMode = params.has("inline"); - if (useInlineMode) { + const inlineMode = params.has("inline"); + if (inlineMode) { return (
diff --git a/web/src/components/RenameTagDialog.tsx b/web/src/components/RenameTagDialog.tsx index c8a95602..3ac66369 100644 --- a/web/src/components/RenameTagDialog.tsx +++ b/web/src/components/RenameTagDialog.tsx @@ -4,6 +4,7 @@ import { toast } from "react-hot-toast"; import { tagServiceClient } from "@/grpcweb"; import useCurrentUser from "@/hooks/useCurrentUser"; import useLoading from "@/hooks/useLoading"; +import { useFilterStore } from "@/store/module"; import { useTranslate } from "@/utils/i18n"; import { generateDialog } from "./Dialog"; import Icon from "./Icon"; @@ -15,6 +16,7 @@ interface Props extends DialogProps { const RenameTagDialog: React.FC = (props: Props) => { const { tag, destroy } = props; const t = useTranslate(); + const filterStore = useFilterStore(); const currentUser = useCurrentUser(); const [newName, setNewName] = useState(tag); const requestState = useLoading(false); @@ -24,8 +26,8 @@ const RenameTagDialog: React.FC = (props: Props) => { }; const handleConfirm = async () => { - if (!newName) { - toast.error("Please fill all required fields"); + if (!newName || newName.includes(" ")) { + toast.error("Tag name cannot be empty or contain spaces"); return; } if (newName === tag) { @@ -40,13 +42,12 @@ const RenameTagDialog: React.FC = (props: Props) => { newName: newName, }); toast.success("Rename tag successfully"); - setTimeout(() => { - window.location.reload(); - }, 300); + filterStore.setTagFilter(newName); } catch (error: any) { console.error(error); toast.error(error.details); } + destroy(); }; return ( @@ -75,9 +76,8 @@ const RenameTagDialog: React.FC = (props: Props) => { />
- All memes with this tag will be updated. - If the amount of data is large, it will take longer and the server load will become higher. - The page will be automatically refreshed when the task is completed + All your memos with this tag will be updated. + If the number of related memos is large, it will take longer and the server load will become higher.