diff --git a/proto/api/v1/memo_service.proto b/proto/api/v1/memo_service.proto index 3a9bb4612..cfd62f017 100644 --- a/proto/api/v1/memo_service.proto +++ b/proto/api/v1/memo_service.proto @@ -301,6 +301,9 @@ message ListMemosRequest { // Optional. If true, show deleted memos in the response. bool show_deleted = 6 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. If true, include comment memos in the response. + bool show_comments = 7 [(google.api.field_behavior) = OPTIONAL]; } message ListMemosResponse { diff --git a/proto/gen/api/v1/memo_service.pb.go b/proto/gen/api/v1/memo_service.pb.go index 16360a3a0..e962abeaf 100644 --- a/proto/gen/api/v1/memo_service.pb.go +++ b/proto/gen/api/v1/memo_service.pb.go @@ -571,7 +571,9 @@ type ListMemosRequest struct { // Refer to `Shortcut.filter`. Filter string `protobuf:"bytes,5,opt,name=filter,proto3" json:"filter,omitempty"` // Optional. If true, show deleted memos in the response. - ShowDeleted bool `protobuf:"varint,6,opt,name=show_deleted,json=showDeleted,proto3" json:"show_deleted,omitempty"` + ShowDeleted bool `protobuf:"varint,6,opt,name=show_deleted,json=showDeleted,proto3" json:"show_deleted,omitempty"` + // Optional. If true, include comment memos in the response. + ShowComments bool `protobuf:"varint,7,opt,name=show_comments,json=showComments,proto3" json:"show_comments,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -648,6 +650,13 @@ func (x *ListMemosRequest) GetShowDeleted() bool { return false } +func (x *ListMemosRequest) GetShowComments() bool { + if x != nil { + return x.ShowComments + } + return false +} + type ListMemosResponse struct { state protoimpl.MessageState `protogen:"open.v1"` // The list of memos. @@ -2053,7 +2062,7 @@ const file_api_v1_memo_service_proto_rawDesc = "" + "\amemo_id\x18\x02 \x01(\tB\x03\xe0A\x01R\x06memoId\x12(\n" + "\rvalidate_only\x18\x03 \x01(\bB\x03\xe0A\x01R\fvalidateOnly\x12\"\n" + "\n" + - "request_id\x18\x04 \x01(\tB\x03\xe0A\x01R\trequestId\"\xed\x01\n" + + "request_id\x18\x04 \x01(\tB\x03\xe0A\x01R\trequestId\"\x97\x02\n" + "\x10ListMemosRequest\x12 \n" + "\tpage_size\x18\x01 \x01(\x05B\x03\xe0A\x01R\bpageSize\x12\"\n" + "\n" + @@ -2061,7 +2070,8 @@ const file_api_v1_memo_service_proto_rawDesc = "" + "\x05state\x18\x03 \x01(\x0e2\x13.memos.api.v1.StateB\x03\xe0A\x01R\x05state\x12\x1e\n" + "\border_by\x18\x04 \x01(\tB\x03\xe0A\x01R\aorderBy\x12\x1b\n" + "\x06filter\x18\x05 \x01(\tB\x03\xe0A\x01R\x06filter\x12&\n" + - "\fshow_deleted\x18\x06 \x01(\bB\x03\xe0A\x01R\vshowDeleted\"\x84\x01\n" + + "\fshow_deleted\x18\x06 \x01(\bB\x03\xe0A\x01R\vshowDeleted\x12(\n" + + "\rshow_comments\x18\a \x01(\bB\x03\xe0A\x01R\fshowComments\"\x84\x01\n" + "\x11ListMemosResponse\x12(\n" + "\x05memos\x18\x01 \x03(\v2\x12.memos.api.v1.MemoR\x05memos\x12&\n" + "\x0fnext_page_token\x18\x02 \x01(\tR\rnextPageToken\x12\x1d\n" + diff --git a/proto/gen/openapi.yaml b/proto/gen/openapi.yaml index 34db04b4b..01041e8f6 100644 --- a/proto/gen/openapi.yaml +++ b/proto/gen/openapi.yaml @@ -672,6 +672,11 @@ paths: description: Optional. If true, show deleted memos in the response. schema: type: boolean + - name: showComments + in: query + description: Optional. If true, include comment memos in the response. + schema: + type: boolean responses: "200": description: OK diff --git a/scripts/build.sh b/scripts/build.sh index 832813342..f417bf102 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash set -e diff --git a/server/router/api/v1/memo_service.go b/server/router/api/v1/memo_service.go index aa111338f..b656f6a1b 100644 --- a/server/router/api/v1/memo_service.go +++ b/server/router/api/v1/memo_service.go @@ -108,8 +108,7 @@ func (s *APIV1Service) CreateMemo(ctx context.Context, request *v1pb.CreateMemoR func (s *APIV1Service) ListMemos(ctx context.Context, request *v1pb.ListMemosRequest) (*v1pb.ListMemosResponse, error) { memoFind := &store.FindMemo{ - // Exclude comments by default. - ExcludeComments: true, + ExcludeComments: !request.ShowComments, } if request.State == v1pb.State_ARCHIVED { state := store.Archived @@ -705,7 +704,7 @@ func (s *APIV1Service) RenameMemoTag(ctx context.Context, request *v1pb.RenameMe memoFind := &store.FindMemo{ CreatorID: &user.ID, Filters: []string{fmt.Sprintf("tag in [\"%s\"]", request.OldTag)}, - ExcludeComments: true, + ExcludeComments: false, } if (request.Parent) != "memos/-" { memoUID, err := ExtractMemoUIDFromName(request.Parent) @@ -759,7 +758,7 @@ func (s *APIV1Service) DeleteMemoTag(ctx context.Context, request *v1pb.DeleteMe CreatorID: &user.ID, Filters: []string{fmt.Sprintf("tag in [\"%s\"]", request.Tag)}, ExcludeContent: true, - ExcludeComments: true, + ExcludeComments: false, } if request.Parent != "memos/-" { memoUID, err := ExtractMemoUIDFromName(request.Parent) diff --git a/server/router/api/v1/user_service_stats.go b/server/router/api/v1/user_service_stats.go index 95583aceb..e95cab2a5 100644 --- a/server/router/api/v1/user_service_stats.go +++ b/server/router/api/v1/user_service_stats.go @@ -22,8 +22,7 @@ func (s *APIV1Service) ListAllUserStats(ctx context.Context, _ *v1pb.ListAllUser normalStatus := store.Normal memoFind := &store.FindMemo{ - // Exclude comments by default. - ExcludeComments: true, + ExcludeComments: false, ExcludeContent: true, RowStatus: &normalStatus, } @@ -83,9 +82,8 @@ func (s *APIV1Service) GetUserStats(ctx context.Context, request *v1pb.GetUserSt normalStatus := store.Normal memoFind := &store.FindMemo{ - CreatorID: &userID, - // Exclude comments by default. - ExcludeComments: true, + CreatorID: &userID, + ExcludeComments: false, ExcludeContent: true, RowStatus: &normalStatus, } diff --git a/web/src/components/MemoDisplaySettingMenu.tsx b/web/src/components/MemoDisplaySettingMenu.tsx index e906913fc..317afc4a9 100644 --- a/web/src/components/MemoDisplaySettingMenu.tsx +++ b/web/src/components/MemoDisplaySettingMenu.tsx @@ -1,5 +1,6 @@ import { Settings2Icon } from "lucide-react"; import { observer } from "mobx-react-lite"; +import { Checkbox } from "@/components/ui/checkbox"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { cn } from "@/lib/utils"; import { viewStore } from "@/store"; @@ -59,6 +60,18 @@ const MemoDisplaySettingMenu = observer(({ className }: Props) => { +