Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
canifa_note
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Vũ Hoàng Anh
canifa_note
Commits
79558028
Commit
79558028
authored
Jan 25, 2024
by
Steven
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: implement rename tag
parent
70d1301d
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
611 additions
and
93 deletions
+611
-93
tag_service.go
api/v2/tag_service.go
+69
-0
tag_service.proto
proto/api/v2/tag_service.proto
+15
-0
README.md
proto/gen/api/v2/README.md
+35
-0
tag_service.pb.go
proto/gen/api/v2/tag_service.pb.go
+245
-87
tag_service.pb.gw.go
proto/gen/api/v2/tag_service.pb.gw.go
+87
-0
tag_service_grpc.pb.go
proto/gen/api/v2/tag_service_grpc.pb.go
+37
-0
RenameTagDialog.tsx
web/src/components/RenameTagDialog.tsx
+107
-0
TagList.tsx
web/src/components/TagList.tsx
+16
-6
No files found.
api/v2/tag_service.go
View file @
79558028
...
@@ -11,6 +11,10 @@ import (
...
@@ -11,6 +11,10 @@ import (
"google.golang.org/grpc/codes"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
"google.golang.org/grpc/status"
"github.com/usememos/memos/plugin/gomark/ast"
"github.com/usememos/memos/plugin/gomark/parser"
"github.com/usememos/memos/plugin/gomark/parser/tokenizer"
"github.com/usememos/memos/plugin/gomark/restore"
apiv2pb
"github.com/usememos/memos/proto/gen/api/v2"
apiv2pb
"github.com/usememos/memos/proto/gen/api/v2"
"github.com/usememos/memos/store"
"github.com/usememos/memos/store"
)
)
...
@@ -70,6 +74,71 @@ func (s *APIV2Service) ListTags(ctx context.Context, request *apiv2pb.ListTagsRe
...
@@ -70,6 +74,71 @@ func (s *APIV2Service) ListTags(ctx context.Context, request *apiv2pb.ListTagsRe
return
response
,
nil
return
response
,
nil
}
}
func
(
s
*
APIV2Service
)
RenameTag
(
ctx
context
.
Context
,
request
*
apiv2pb
.
RenameTagRequest
)
(
*
apiv2pb
.
RenameTagResponse
,
error
)
{
username
,
err
:=
ExtractUsernameFromName
(
request
.
User
)
if
err
!=
nil
{
return
nil
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"invalid username: %v"
,
err
)
}
user
,
err
:=
s
.
Store
.
GetUser
(
ctx
,
&
store
.
FindUser
{
Username
:
&
username
,
})
if
err
!=
nil
{
return
nil
,
status
.
Errorf
(
codes
.
Internal
,
"failed to get user: %v"
,
err
)
}
if
user
==
nil
{
return
nil
,
status
.
Errorf
(
codes
.
NotFound
,
"user not found"
)
}
// Find all related memos.
memos
,
err
:=
s
.
Store
.
ListMemos
(
ctx
,
&
store
.
FindMemo
{
CreatorID
:
&
user
.
ID
,
ContentSearch
:
[]
string
{
fmt
.
Sprintf
(
"#%s"
,
request
.
OldName
)},
})
if
err
!=
nil
{
return
nil
,
status
.
Errorf
(
codes
.
Internal
,
"failed to list memos: %v"
,
err
)
}
// Replace tag name in memo content.
for
_
,
memo
:=
range
memos
{
nodes
,
err
:=
parser
.
Parse
(
tokenizer
.
Tokenize
(
memo
.
Content
))
if
err
!=
nil
{
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
{
tag
.
Content
=
request
.
NewName
}
})
content
:=
restore
.
Restore
(
nodes
)
if
err
:=
s
.
Store
.
UpdateMemo
(
ctx
,
&
store
.
UpdateMemo
{
ID
:
memo
.
ID
,
Content
:
&
content
,
});
err
!=
nil
{
return
nil
,
status
.
Errorf
(
codes
.
Internal
,
"failed to update memo: %v"
,
err
)
}
}
// Delete old tag and create new tag.
if
err
:=
s
.
Store
.
DeleteTag
(
ctx
,
&
store
.
DeleteTag
{
CreatorID
:
user
.
ID
,
Name
:
request
.
OldName
,
});
err
!=
nil
{
return
nil
,
status
.
Errorf
(
codes
.
Internal
,
"failed to delete tag: %v"
,
err
)
}
tag
,
err
:=
s
.
Store
.
UpsertTag
(
ctx
,
&
store
.
Tag
{
CreatorID
:
user
.
ID
,
Name
:
request
.
NewName
,
})
if
err
!=
nil
{
return
nil
,
status
.
Errorf
(
codes
.
Internal
,
"failed to upsert tag: %v"
,
err
)
}
tagMessage
,
err
:=
s
.
convertTagFromStore
(
ctx
,
tag
)
if
err
!=
nil
{
return
nil
,
status
.
Errorf
(
codes
.
Internal
,
"failed to convert tag: %v"
,
err
)
}
return
&
apiv2pb
.
RenameTagResponse
{
Tag
:
tagMessage
},
nil
}
func
(
s
*
APIV2Service
)
DeleteTag
(
ctx
context
.
Context
,
request
*
apiv2pb
.
DeleteTagRequest
)
(
*
apiv2pb
.
DeleteTagResponse
,
error
)
{
func
(
s
*
APIV2Service
)
DeleteTag
(
ctx
context
.
Context
,
request
*
apiv2pb
.
DeleteTagRequest
)
(
*
apiv2pb
.
DeleteTagResponse
,
error
)
{
username
,
err
:=
ExtractUsernameFromName
(
request
.
Tag
.
Creator
)
username
,
err
:=
ExtractUsernameFromName
(
request
.
Tag
.
Creator
)
if
err
!=
nil
{
if
err
!=
nil
{
...
...
proto/api/v2/tag_service.proto
View file @
79558028
...
@@ -13,6 +13,9 @@ service TagService {
...
@@ -13,6 +13,9 @@ service TagService {
rpc
ListTags
(
ListTagsRequest
)
returns
(
ListTagsResponse
)
{
rpc
ListTags
(
ListTagsRequest
)
returns
(
ListTagsResponse
)
{
option
(
google.api.http
)
=
{
get
:
"/api/v2/tags"
};
option
(
google.api.http
)
=
{
get
:
"/api/v2/tags"
};
}
}
rpc
RenameTag
(
RenameTagRequest
)
returns
(
RenameTagResponse
)
{
option
(
google.api.http
)
=
{
patch
:
"/api/v2/tags:rename"
};
}
rpc
DeleteTag
(
DeleteTagRequest
)
returns
(
DeleteTagResponse
)
{
rpc
DeleteTag
(
DeleteTagRequest
)
returns
(
DeleteTagResponse
)
{
option
(
google.api.http
)
=
{
delete
:
"/api/v2/tags"
};
option
(
google.api.http
)
=
{
delete
:
"/api/v2/tags"
};
}
}
...
@@ -46,6 +49,18 @@ message ListTagsResponse {
...
@@ -46,6 +49,18 @@ message ListTagsResponse {
repeated
Tag
tags
=
1
;
repeated
Tag
tags
=
1
;
}
}
message
RenameTagRequest
{
// The creator of tags.
// Format: users/{username}
string
user
=
1
;
string
old_name
=
2
;
string
new_name
=
3
;
}
message
RenameTagResponse
{
Tag
tag
=
1
;
}
message
DeleteTagRequest
{
message
DeleteTagRequest
{
Tag
tag
=
1
;
Tag
tag
=
1
;
}
}
...
...
proto/gen/api/v2/README.md
View file @
79558028
...
@@ -175,6 +175,8 @@
...
@@ -175,6 +175,8 @@
-
[
GetTagSuggestionsResponse
](
#memos-api-v2-GetTagSuggestionsResponse
)
-
[
GetTagSuggestionsResponse
](
#memos-api-v2-GetTagSuggestionsResponse
)
-
[
ListTagsRequest
](
#memos-api-v2-ListTagsRequest
)
-
[
ListTagsRequest
](
#memos-api-v2-ListTagsRequest
)
-
[
ListTagsResponse
](
#memos-api-v2-ListTagsResponse
)
-
[
ListTagsResponse
](
#memos-api-v2-ListTagsResponse
)
-
[
RenameTagRequest
](
#memos-api-v2-RenameTagRequest
)
-
[
RenameTagResponse
](
#memos-api-v2-RenameTagResponse
)
-
[
Tag
](
#memos-api-v2-Tag
)
-
[
Tag
](
#memos-api-v2-Tag
)
-
[
UpsertTagRequest
](
#memos-api-v2-UpsertTagRequest
)
-
[
UpsertTagRequest
](
#memos-api-v2-UpsertTagRequest
)
-
[
UpsertTagResponse
](
#memos-api-v2-UpsertTagResponse
)
-
[
UpsertTagResponse
](
#memos-api-v2-UpsertTagResponse
)
...
@@ -2503,6 +2505,38 @@
...
@@ -2503,6 +2505,38 @@
<a
name=
"memos-api-v2-RenameTagRequest"
></a>
### RenameTagRequest
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| user |
[
string
](
#string
)
| | The creator of tags. Format: users/{username} |
| old_name |
[
string
](
#string
)
| | |
| new_name |
[
string
](
#string
)
| | |
<a
name=
"memos-api-v2-RenameTagResponse"
></a>
### RenameTagResponse
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| tag |
[
Tag
](
#memos-api-v2-Tag
)
| | |
<a
name=
"memos-api-v2-Tag"
></a>
<a
name=
"memos-api-v2-Tag"
></a>
### Tag
### Tag
...
@@ -2564,6 +2598,7 @@
...
@@ -2564,6 +2598,7 @@
| ----------- | ------------ | ------------- | ------------|
| ----------- | ------------ | ------------- | ------------|
| UpsertTag |
[
UpsertTagRequest
](
#memos-api-v2-UpsertTagRequest
)
|
[
UpsertTagResponse
](
#memos-api-v2-UpsertTagResponse
)
| |
| UpsertTag |
[
UpsertTagRequest
](
#memos-api-v2-UpsertTagRequest
)
|
[
UpsertTagResponse
](
#memos-api-v2-UpsertTagResponse
)
| |
| ListTags |
[
ListTagsRequest
](
#memos-api-v2-ListTagsRequest
)
|
[
ListTagsResponse
](
#memos-api-v2-ListTagsResponse
)
| |
| ListTags |
[
ListTagsRequest
](
#memos-api-v2-ListTagsRequest
)
|
[
ListTagsResponse
](
#memos-api-v2-ListTagsResponse
)
| |
| RenameTag |
[
RenameTagRequest
](
#memos-api-v2-RenameTagRequest
)
|
[
RenameTagResponse
](
#memos-api-v2-RenameTagResponse
)
| |
| DeleteTag |
[
DeleteTagRequest
](
#memos-api-v2-DeleteTagRequest
)
|
[
DeleteTagResponse
](
#memos-api-v2-DeleteTagResponse
)
| |
| DeleteTag |
[
DeleteTagRequest
](
#memos-api-v2-DeleteTagRequest
)
|
[
DeleteTagResponse
](
#memos-api-v2-DeleteTagResponse
)
| |
| GetTagSuggestions |
[
GetTagSuggestionsRequest
](
#memos-api-v2-GetTagSuggestionsRequest
)
|
[
GetTagSuggestionsResponse
](
#memos-api-v2-GetTagSuggestionsResponse
)
| |
| GetTagSuggestions |
[
GetTagSuggestionsRequest
](
#memos-api-v2-GetTagSuggestionsRequest
)
|
[
GetTagSuggestionsResponse
](
#memos-api-v2-GetTagSuggestionsResponse
)
| |
...
...
proto/gen/api/v2/tag_service.pb.go
View file @
79558028
...
@@ -268,6 +268,118 @@ func (x *ListTagsResponse) GetTags() []*Tag {
...
@@ -268,6 +268,118 @@ func (x *ListTagsResponse) GetTags() []*Tag {
return
nil
return
nil
}
}
type
RenameTagRequest
struct
{
state
protoimpl
.
MessageState
sizeCache
protoimpl
.
SizeCache
unknownFields
protoimpl
.
UnknownFields
// The creator of tags.
// Format: users/{username}
User
string
`protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"`
OldName
string
`protobuf:"bytes,2,opt,name=old_name,json=oldName,proto3" json:"old_name,omitempty"`
NewName
string
`protobuf:"bytes,3,opt,name=new_name,json=newName,proto3" json:"new_name,omitempty"`
}
func
(
x
*
RenameTagRequest
)
Reset
()
{
*
x
=
RenameTagRequest
{}
if
protoimpl
.
UnsafeEnabled
{
mi
:=
&
file_api_v2_tag_service_proto_msgTypes
[
5
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
}
}
func
(
x
*
RenameTagRequest
)
String
()
string
{
return
protoimpl
.
X
.
MessageStringOf
(
x
)
}
func
(
*
RenameTagRequest
)
ProtoMessage
()
{}
func
(
x
*
RenameTagRequest
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_api_v2_tag_service_proto_msgTypes
[
5
]
if
protoimpl
.
UnsafeEnabled
&&
x
!=
nil
{
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
if
ms
.
LoadMessageInfo
()
==
nil
{
ms
.
StoreMessageInfo
(
mi
)
}
return
ms
}
return
mi
.
MessageOf
(
x
)
}
// Deprecated: Use RenameTagRequest.ProtoReflect.Descriptor instead.
func
(
*
RenameTagRequest
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_api_v2_tag_service_proto_rawDescGZIP
(),
[]
int
{
5
}
}
func
(
x
*
RenameTagRequest
)
GetUser
()
string
{
if
x
!=
nil
{
return
x
.
User
}
return
""
}
func
(
x
*
RenameTagRequest
)
GetOldName
()
string
{
if
x
!=
nil
{
return
x
.
OldName
}
return
""
}
func
(
x
*
RenameTagRequest
)
GetNewName
()
string
{
if
x
!=
nil
{
return
x
.
NewName
}
return
""
}
type
RenameTagResponse
struct
{
state
protoimpl
.
MessageState
sizeCache
protoimpl
.
SizeCache
unknownFields
protoimpl
.
UnknownFields
Tag
*
Tag
`protobuf:"bytes,1,opt,name=tag,proto3" json:"tag,omitempty"`
}
func
(
x
*
RenameTagResponse
)
Reset
()
{
*
x
=
RenameTagResponse
{}
if
protoimpl
.
UnsafeEnabled
{
mi
:=
&
file_api_v2_tag_service_proto_msgTypes
[
6
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
}
}
func
(
x
*
RenameTagResponse
)
String
()
string
{
return
protoimpl
.
X
.
MessageStringOf
(
x
)
}
func
(
*
RenameTagResponse
)
ProtoMessage
()
{}
func
(
x
*
RenameTagResponse
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_api_v2_tag_service_proto_msgTypes
[
6
]
if
protoimpl
.
UnsafeEnabled
&&
x
!=
nil
{
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
if
ms
.
LoadMessageInfo
()
==
nil
{
ms
.
StoreMessageInfo
(
mi
)
}
return
ms
}
return
mi
.
MessageOf
(
x
)
}
// Deprecated: Use RenameTagResponse.ProtoReflect.Descriptor instead.
func
(
*
RenameTagResponse
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_api_v2_tag_service_proto_rawDescGZIP
(),
[]
int
{
6
}
}
func
(
x
*
RenameTagResponse
)
GetTag
()
*
Tag
{
if
x
!=
nil
{
return
x
.
Tag
}
return
nil
}
type
DeleteTagRequest
struct
{
type
DeleteTagRequest
struct
{
state
protoimpl
.
MessageState
state
protoimpl
.
MessageState
sizeCache
protoimpl
.
SizeCache
sizeCache
protoimpl
.
SizeCache
...
@@ -279,7 +391,7 @@ type DeleteTagRequest struct {
...
@@ -279,7 +391,7 @@ type DeleteTagRequest struct {
func
(
x
*
DeleteTagRequest
)
Reset
()
{
func
(
x
*
DeleteTagRequest
)
Reset
()
{
*
x
=
DeleteTagRequest
{}
*
x
=
DeleteTagRequest
{}
if
protoimpl
.
UnsafeEnabled
{
if
protoimpl
.
UnsafeEnabled
{
mi
:=
&
file_api_v2_tag_service_proto_msgTypes
[
5
]
mi
:=
&
file_api_v2_tag_service_proto_msgTypes
[
7
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
ms
.
StoreMessageInfo
(
mi
)
}
}
...
@@ -292,7 +404,7 @@ func (x *DeleteTagRequest) String() string {
...
@@ -292,7 +404,7 @@ func (x *DeleteTagRequest) String() string {
func
(
*
DeleteTagRequest
)
ProtoMessage
()
{}
func
(
*
DeleteTagRequest
)
ProtoMessage
()
{}
func
(
x
*
DeleteTagRequest
)
ProtoReflect
()
protoreflect
.
Message
{
func
(
x
*
DeleteTagRequest
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_api_v2_tag_service_proto_msgTypes
[
5
]
mi
:=
&
file_api_v2_tag_service_proto_msgTypes
[
7
]
if
protoimpl
.
UnsafeEnabled
&&
x
!=
nil
{
if
protoimpl
.
UnsafeEnabled
&&
x
!=
nil
{
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
if
ms
.
LoadMessageInfo
()
==
nil
{
if
ms
.
LoadMessageInfo
()
==
nil
{
...
@@ -305,7 +417,7 @@ func (x *DeleteTagRequest) ProtoReflect() protoreflect.Message {
...
@@ -305,7 +417,7 @@ func (x *DeleteTagRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use DeleteTagRequest.ProtoReflect.Descriptor instead.
// Deprecated: Use DeleteTagRequest.ProtoReflect.Descriptor instead.
func
(
*
DeleteTagRequest
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
DeleteTagRequest
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_api_v2_tag_service_proto_rawDescGZIP
(),
[]
int
{
5
}
return
file_api_v2_tag_service_proto_rawDescGZIP
(),
[]
int
{
7
}
}
}
func
(
x
*
DeleteTagRequest
)
GetTag
()
*
Tag
{
func
(
x
*
DeleteTagRequest
)
GetTag
()
*
Tag
{
...
@@ -324,7 +436,7 @@ type DeleteTagResponse struct {
...
@@ -324,7 +436,7 @@ type DeleteTagResponse struct {
func
(
x
*
DeleteTagResponse
)
Reset
()
{
func
(
x
*
DeleteTagResponse
)
Reset
()
{
*
x
=
DeleteTagResponse
{}
*
x
=
DeleteTagResponse
{}
if
protoimpl
.
UnsafeEnabled
{
if
protoimpl
.
UnsafeEnabled
{
mi
:=
&
file_api_v2_tag_service_proto_msgTypes
[
6
]
mi
:=
&
file_api_v2_tag_service_proto_msgTypes
[
8
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
ms
.
StoreMessageInfo
(
mi
)
}
}
...
@@ -337,7 +449,7 @@ func (x *DeleteTagResponse) String() string {
...
@@ -337,7 +449,7 @@ func (x *DeleteTagResponse) String() string {
func
(
*
DeleteTagResponse
)
ProtoMessage
()
{}
func
(
*
DeleteTagResponse
)
ProtoMessage
()
{}
func
(
x
*
DeleteTagResponse
)
ProtoReflect
()
protoreflect
.
Message
{
func
(
x
*
DeleteTagResponse
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_api_v2_tag_service_proto_msgTypes
[
6
]
mi
:=
&
file_api_v2_tag_service_proto_msgTypes
[
8
]
if
protoimpl
.
UnsafeEnabled
&&
x
!=
nil
{
if
protoimpl
.
UnsafeEnabled
&&
x
!=
nil
{
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
if
ms
.
LoadMessageInfo
()
==
nil
{
if
ms
.
LoadMessageInfo
()
==
nil
{
...
@@ -350,7 +462,7 @@ func (x *DeleteTagResponse) ProtoReflect() protoreflect.Message {
...
@@ -350,7 +462,7 @@ func (x *DeleteTagResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use DeleteTagResponse.ProtoReflect.Descriptor instead.
// Deprecated: Use DeleteTagResponse.ProtoReflect.Descriptor instead.
func
(
*
DeleteTagResponse
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
DeleteTagResponse
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_api_v2_tag_service_proto_rawDescGZIP
(),
[]
int
{
6
}
return
file_api_v2_tag_service_proto_rawDescGZIP
(),
[]
int
{
8
}
}
}
type
GetTagSuggestionsRequest
struct
{
type
GetTagSuggestionsRequest
struct
{
...
@@ -366,7 +478,7 @@ type GetTagSuggestionsRequest struct {
...
@@ -366,7 +478,7 @@ type GetTagSuggestionsRequest struct {
func
(
x
*
GetTagSuggestionsRequest
)
Reset
()
{
func
(
x
*
GetTagSuggestionsRequest
)
Reset
()
{
*
x
=
GetTagSuggestionsRequest
{}
*
x
=
GetTagSuggestionsRequest
{}
if
protoimpl
.
UnsafeEnabled
{
if
protoimpl
.
UnsafeEnabled
{
mi
:=
&
file_api_v2_tag_service_proto_msgTypes
[
7
]
mi
:=
&
file_api_v2_tag_service_proto_msgTypes
[
9
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
ms
.
StoreMessageInfo
(
mi
)
}
}
...
@@ -379,7 +491,7 @@ func (x *GetTagSuggestionsRequest) String() string {
...
@@ -379,7 +491,7 @@ func (x *GetTagSuggestionsRequest) String() string {
func
(
*
GetTagSuggestionsRequest
)
ProtoMessage
()
{}
func
(
*
GetTagSuggestionsRequest
)
ProtoMessage
()
{}
func
(
x
*
GetTagSuggestionsRequest
)
ProtoReflect
()
protoreflect
.
Message
{
func
(
x
*
GetTagSuggestionsRequest
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_api_v2_tag_service_proto_msgTypes
[
7
]
mi
:=
&
file_api_v2_tag_service_proto_msgTypes
[
9
]
if
protoimpl
.
UnsafeEnabled
&&
x
!=
nil
{
if
protoimpl
.
UnsafeEnabled
&&
x
!=
nil
{
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
if
ms
.
LoadMessageInfo
()
==
nil
{
if
ms
.
LoadMessageInfo
()
==
nil
{
...
@@ -392,7 +504,7 @@ func (x *GetTagSuggestionsRequest) ProtoReflect() protoreflect.Message {
...
@@ -392,7 +504,7 @@ func (x *GetTagSuggestionsRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetTagSuggestionsRequest.ProtoReflect.Descriptor instead.
// Deprecated: Use GetTagSuggestionsRequest.ProtoReflect.Descriptor instead.
func
(
*
GetTagSuggestionsRequest
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
GetTagSuggestionsRequest
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_api_v2_tag_service_proto_rawDescGZIP
(),
[]
int
{
7
}
return
file_api_v2_tag_service_proto_rawDescGZIP
(),
[]
int
{
9
}
}
}
func
(
x
*
GetTagSuggestionsRequest
)
GetUser
()
string
{
func
(
x
*
GetTagSuggestionsRequest
)
GetUser
()
string
{
...
@@ -413,7 +525,7 @@ type GetTagSuggestionsResponse struct {
...
@@ -413,7 +525,7 @@ type GetTagSuggestionsResponse struct {
func
(
x
*
GetTagSuggestionsResponse
)
Reset
()
{
func
(
x
*
GetTagSuggestionsResponse
)
Reset
()
{
*
x
=
GetTagSuggestionsResponse
{}
*
x
=
GetTagSuggestionsResponse
{}
if
protoimpl
.
UnsafeEnabled
{
if
protoimpl
.
UnsafeEnabled
{
mi
:=
&
file_api_v2_tag_service_proto_msgTypes
[
8
]
mi
:=
&
file_api_v2_tag_service_proto_msgTypes
[
10
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
ms
.
StoreMessageInfo
(
mi
)
}
}
...
@@ -426,7 +538,7 @@ func (x *GetTagSuggestionsResponse) String() string {
...
@@ -426,7 +538,7 @@ func (x *GetTagSuggestionsResponse) String() string {
func
(
*
GetTagSuggestionsResponse
)
ProtoMessage
()
{}
func
(
*
GetTagSuggestionsResponse
)
ProtoMessage
()
{}
func
(
x
*
GetTagSuggestionsResponse
)
ProtoReflect
()
protoreflect
.
Message
{
func
(
x
*
GetTagSuggestionsResponse
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_api_v2_tag_service_proto_msgTypes
[
8
]
mi
:=
&
file_api_v2_tag_service_proto_msgTypes
[
10
]
if
protoimpl
.
UnsafeEnabled
&&
x
!=
nil
{
if
protoimpl
.
UnsafeEnabled
&&
x
!=
nil
{
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
if
ms
.
LoadMessageInfo
()
==
nil
{
if
ms
.
LoadMessageInfo
()
==
nil
{
...
@@ -439,7 +551,7 @@ func (x *GetTagSuggestionsResponse) ProtoReflect() protoreflect.Message {
...
@@ -439,7 +551,7 @@ func (x *GetTagSuggestionsResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetTagSuggestionsResponse.ProtoReflect.Descriptor instead.
// Deprecated: Use GetTagSuggestionsResponse.ProtoReflect.Descriptor instead.
func
(
*
GetTagSuggestionsResponse
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
GetTagSuggestionsResponse
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_api_v2_tag_service_proto_rawDescGZIP
(),
[]
int
{
8
}
return
file_api_v2_tag_service_proto_rawDescGZIP
(),
[]
int
{
10
}
}
}
func
(
x
*
GetTagSuggestionsResponse
)
GetTags
()
[]
string
{
func
(
x
*
GetTagSuggestionsResponse
)
GetTags
()
[]
string
{
...
@@ -472,56 +584,73 @@ var file_api_v2_tag_service_proto_rawDesc = []byte{
...
@@ -472,56 +584,73 @@ var file_api_v2_tag_service_proto_rawDesc = []byte{
0x52
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x6e
,
0x73
,
0x65
,
0x12
,
0x25
,
0x0a
,
0x04
,
0x74
,
0x61
,
0x67
,
0x73
,
0x52
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x6e
,
0x73
,
0x65
,
0x12
,
0x25
,
0x0a
,
0x04
,
0x74
,
0x61
,
0x67
,
0x73
,
0x18
,
0x01
,
0x20
,
0x03
,
0x28
,
0x0b
,
0x32
,
0x11
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x18
,
0x01
,
0x20
,
0x03
,
0x28
,
0x0b
,
0x32
,
0x11
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x32
,
0x2e
,
0x54
,
0x61
,
0x67
,
0x52
,
0x04
,
0x74
,
0x61
,
0x67
,
0x73
,
0x22
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x32
,
0x2e
,
0x54
,
0x61
,
0x67
,
0x52
,
0x04
,
0x74
,
0x61
,
0x67
,
0x73
,
0x22
,
0x37
,
0x0a
,
0x10
,
0x44
,
0x65
,
0x6c
,
0x65
,
0x74
,
0x65
,
0x54
,
0x61
,
0x67
,
0x52
,
0x65
,
0x71
,
0x75
,
0x5c
,
0x0a
,
0x10
,
0x52
,
0x65
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x54
,
0x61
,
0x67
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x23
,
0x0a
,
0x03
,
0x74
,
0x61
,
0x67
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x0b
,
0x65
,
0x73
,
0x74
,
0x12
,
0x12
,
0x0a
,
0x04
,
0x75
,
0x73
,
0x65
,
0x72
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x32
,
0x11
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x32
,
0x2e
,
0x09
,
0x52
,
0x04
,
0x75
,
0x73
,
0x65
,
0x72
,
0x12
,
0x19
,
0x0a
,
0x08
,
0x6f
,
0x6c
,
0x64
,
0x5f
,
0x6e
,
0x54
,
0x61
,
0x67
,
0x52
,
0x03
,
0x74
,
0x61
,
0x67
,
0x22
,
0x13
,
0x0a
,
0x11
,
0x44
,
0x65
,
0x6c
,
0x65
,
0x61
,
0x6d
,
0x65
,
0x18
,
0x02
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x07
,
0x6f
,
0x6c
,
0x64
,
0x4e
,
0x61
,
0x74
,
0x65
,
0x54
,
0x61
,
0x67
,
0x52
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x6e
,
0x73
,
0x65
,
0x22
,
0x2e
,
0x0a
,
0x6d
,
0x65
,
0x12
,
0x19
,
0x0a
,
0x08
,
0x6e
,
0x65
,
0x77
,
0x5f
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x18
,
0x03
,
0x18
,
0x47
,
0x65
,
0x74
,
0x54
,
0x61
,
0x67
,
0x53
,
0x75
,
0x67
,
0x67
,
0x65
,
0x73
,
0x74
,
0x69
,
0x6f
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x07
,
0x6e
,
0x65
,
0x77
,
0x4e
,
0x61
,
0x6d
,
0x65
,
0x22
,
0x38
,
0x0a
,
0x6e
,
0x73
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x12
,
0x0a
,
0x04
,
0x75
,
0x73
,
0x65
,
0x11
,
0x52
,
0x65
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x54
,
0x61
,
0x67
,
0x52
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x6e
,
0x72
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x04
,
0x75
,
0x73
,
0x65
,
0x72
,
0x22
,
0x2f
,
0x0a
,
0x73
,
0x65
,
0x12
,
0x23
,
0x0a
,
0x03
,
0x74
,
0x61
,
0x67
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x0b
,
0x32
,
0x19
,
0x47
,
0x65
,
0x74
,
0x54
,
0x61
,
0x67
,
0x53
,
0x75
,
0x67
,
0x67
,
0x65
,
0x73
,
0x74
,
0x69
,
0x6f
,
0x11
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x32
,
0x2e
,
0x54
,
0x6e
,
0x73
,
0x52
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x6e
,
0x73
,
0x65
,
0x12
,
0x12
,
0x0a
,
0x04
,
0x74
,
0x61
,
0x61
,
0x67
,
0x52
,
0x03
,
0x74
,
0x61
,
0x67
,
0x22
,
0x37
,
0x0a
,
0x10
,
0x44
,
0x65
,
0x6c
,
0x65
,
0x74
,
0x67
,
0x73
,
0x18
,
0x01
,
0x20
,
0x03
,
0x28
,
0x09
,
0x52
,
0x04
,
0x74
,
0x61
,
0x67
,
0x73
,
0x32
,
0xbd
,
0x65
,
0x54
,
0x61
,
0x67
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x23
,
0x0a
,
0x03
,
0x74
,
0x03
,
0x0a
,
0x0a
,
0x54
,
0x61
,
0x67
,
0x53
,
0x65
,
0x72
,
0x76
,
0x69
,
0x63
,
0x65
,
0x12
,
0x62
,
0x0a
,
0x61
,
0x67
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x0b
,
0x32
,
0x11
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x09
,
0x55
,
0x70
,
0x73
,
0x65
,
0x72
,
0x74
,
0x54
,
0x61
,
0x67
,
0x12
,
0x1e
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x32
,
0x2e
,
0x54
,
0x61
,
0x67
,
0x52
,
0x03
,
0x74
,
0x61
,
0x67
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x32
,
0x2e
,
0x55
,
0x70
,
0x73
,
0x65
,
0x72
,
0x74
,
0x22
,
0x13
,
0x0a
,
0x11
,
0x44
,
0x65
,
0x6c
,
0x65
,
0x74
,
0x65
,
0x54
,
0x61
,
0x67
,
0x52
,
0x65
,
0x73
,
0x54
,
0x61
,
0x67
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x1f
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x70
,
0x6f
,
0x6e
,
0x73
,
0x65
,
0x22
,
0x2e
,
0x0a
,
0x18
,
0x47
,
0x65
,
0x74
,
0x54
,
0x61
,
0x67
,
0x53
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x32
,
0x2e
,
0x55
,
0x70
,
0x73
,
0x65
,
0x72
,
0x74
,
0x75
,
0x67
,
0x67
,
0x65
,
0x73
,
0x74
,
0x69
,
0x6f
,
0x6e
,
0x73
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x54
,
0x61
,
0x67
,
0x52
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x6e
,
0x73
,
0x65
,
0x22
,
0x14
,
0x82
,
0xd3
,
0xe4
,
0x74
,
0x12
,
0x12
,
0x0a
,
0x04
,
0x75
,
0x73
,
0x65
,
0x72
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x93
,
0x02
,
0x0e
,
0x22
,
0x0c
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x32
,
0x2f
,
0x74
,
0x61
,
0x67
,
0x04
,
0x75
,
0x73
,
0x65
,
0x72
,
0x22
,
0x2f
,
0x0a
,
0x19
,
0x47
,
0x65
,
0x74
,
0x54
,
0x61
,
0x67
,
0x53
,
0x73
,
0x12
,
0x5f
,
0x0a
,
0x08
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x54
,
0x61
,
0x67
,
0x73
,
0x12
,
0x1d
,
0x2e
,
0x75
,
0x67
,
0x67
,
0x65
,
0x73
,
0x74
,
0x69
,
0x6f
,
0x6e
,
0x73
,
0x52
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x6e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x32
,
0x2e
,
0x4c
,
0x69
,
0x73
,
0x73
,
0x65
,
0x12
,
0x12
,
0x0a
,
0x04
,
0x74
,
0x61
,
0x67
,
0x73
,
0x18
,
0x01
,
0x20
,
0x03
,
0x28
,
0x09
,
0x74
,
0x54
,
0x61
,
0x67
,
0x73
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x1e
,
0x2e
,
0x6d
,
0x52
,
0x04
,
0x74
,
0x61
,
0x67
,
0x73
,
0x32
,
0xa8
,
0x04
,
0x0a
,
0x0a
,
0x54
,
0x61
,
0x67
,
0x53
,
0x65
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x32
,
0x2e
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x72
,
0x76
,
0x69
,
0x63
,
0x65
,
0x12
,
0x62
,
0x0a
,
0x09
,
0x55
,
0x70
,
0x73
,
0x65
,
0x72
,
0x74
,
0x54
,
0x54
,
0x61
,
0x67
,
0x73
,
0x52
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x6e
,
0x73
,
0x65
,
0x22
,
0x14
,
0x82
,
0xd3
,
0x61
,
0x67
,
0x12
,
0x1e
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0xe4
,
0x93
,
0x02
,
0x0e
,
0x12
,
0x0c
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x32
,
0x2f
,
0x74
,
0x61
,
0x32
,
0x2e
,
0x55
,
0x70
,
0x73
,
0x65
,
0x72
,
0x74
,
0x54
,
0x61
,
0x67
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x67
,
0x73
,
0x12
,
0x62
,
0x0a
,
0x09
,
0x44
,
0x65
,
0x6c
,
0x65
,
0x74
,
0x65
,
0x54
,
0x61
,
0x67
,
0x12
,
0x73
,
0x74
,
0x1a
,
0x1f
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x1e
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x32
,
0x2e
,
0x44
,
0x32
,
0x2e
,
0x55
,
0x70
,
0x73
,
0x65
,
0x72
,
0x74
,
0x54
,
0x61
,
0x67
,
0x52
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x65
,
0x6c
,
0x65
,
0x74
,
0x65
,
0x54
,
0x61
,
0x67
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x6e
,
0x73
,
0x65
,
0x22
,
0x14
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x0e
,
0x22
,
0x0c
,
0x2f
,
0x61
,
0x70
,
0x1f
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x32
,
0x2e
,
0x44
,
0x69
,
0x2f
,
0x76
,
0x32
,
0x2f
,
0x74
,
0x61
,
0x67
,
0x73
,
0x12
,
0x5f
,
0x0a
,
0x08
,
0x4c
,
0x69
,
0x73
,
0x65
,
0x6c
,
0x65
,
0x74
,
0x65
,
0x54
,
0x61
,
0x67
,
0x52
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x6e
,
0x73
,
0x65
,
0x74
,
0x54
,
0x61
,
0x67
,
0x73
,
0x12
,
0x1d
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x22
,
0x14
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x0e
,
0x2a
,
0x0c
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x69
,
0x2e
,
0x76
,
0x32
,
0x2e
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x54
,
0x61
,
0x67
,
0x73
,
0x52
,
0x65
,
0x71
,
0x32
,
0x2f
,
0x74
,
0x61
,
0x67
,
0x73
,
0x12
,
0x85
,
0x01
,
0x0a
,
0x11
,
0x47
,
0x65
,
0x74
,
0x54
,
0x61
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x1e
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x67
,
0x53
,
0x75
,
0x67
,
0x67
,
0x65
,
0x73
,
0x74
,
0x69
,
0x6f
,
0x6e
,
0x73
,
0x12
,
0x26
,
0x2e
,
0x6d
,
0x2e
,
0x76
,
0x32
,
0x2e
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x54
,
0x61
,
0x67
,
0x73
,
0x52
,
0x65
,
0x73
,
0x70
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x32
,
0x2e
,
0x47
,
0x65
,
0x74
,
0x54
,
0x6f
,
0x6e
,
0x73
,
0x65
,
0x22
,
0x14
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x0e
,
0x12
,
0x0c
,
0x2f
,
0x61
,
0x61
,
0x67
,
0x53
,
0x75
,
0x67
,
0x67
,
0x65
,
0x73
,
0x74
,
0x69
,
0x6f
,
0x6e
,
0x73
,
0x52
,
0x65
,
0x71
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x32
,
0x2f
,
0x74
,
0x61
,
0x67
,
0x73
,
0x12
,
0x69
,
0x0a
,
0x09
,
0x52
,
0x65
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x27
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x54
,
0x61
,
0x67
,
0x12
,
0x1e
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x2e
,
0x76
,
0x32
,
0x2e
,
0x47
,
0x65
,
0x74
,
0x54
,
0x61
,
0x67
,
0x53
,
0x75
,
0x67
,
0x67
,
0x65
,
0x73
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x32
,
0x2e
,
0x52
,
0x65
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x54
,
0x61
,
0x67
,
0x74
,
0x69
,
0x6f
,
0x6e
,
0x73
,
0x52
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x6e
,
0x73
,
0x65
,
0x22
,
0x1f
,
0x82
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x1f
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x19
,
0x12
,
0x17
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x32
,
0x2f
,
0x74
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x32
,
0x2e
,
0x52
,
0x65
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x54
,
0x61
,
0x67
,
0x61
,
0x67
,
0x73
,
0x2f
,
0x73
,
0x75
,
0x67
,
0x67
,
0x65
,
0x73
,
0x74
,
0x69
,
0x6f
,
0x6e
,
0x42
,
0xa7
,
0x52
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x6e
,
0x73
,
0x65
,
0x22
,
0x1b
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x15
,
0x01
,
0x0a
,
0x10
,
0x63
,
0x6f
,
0x6d
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x32
,
0x13
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x32
,
0x2f
,
0x74
,
0x61
,
0x67
,
0x73
,
0x3a
,
0x72
,
0x2e
,
0x76
,
0x32
,
0x42
,
0x0f
,
0x54
,
0x61
,
0x67
,
0x53
,
0x65
,
0x72
,
0x76
,
0x69
,
0x63
,
0x65
,
0x50
,
0x65
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x12
,
0x62
,
0x0a
,
0x09
,
0x44
,
0x65
,
0x6c
,
0x65
,
0x74
,
0x65
,
0x54
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x50
,
0x01
,
0x5a
,
0x30
,
0x67
,
0x69
,
0x74
,
0x68
,
0x75
,
0x62
,
0x2e
,
0x63
,
0x61
,
0x67
,
0x12
,
0x1e
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x6f
,
0x6d
,
0x2f
,
0x75
,
0x73
,
0x65
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2f
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x32
,
0x2e
,
0x44
,
0x65
,
0x6c
,
0x65
,
0x74
,
0x65
,
0x54
,
0x61
,
0x67
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x2f
,
0x70
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x2f
,
0x67
,
0x65
,
0x6e
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x73
,
0x74
,
0x1a
,
0x1f
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x76
,
0x32
,
0x3b
,
0x61
,
0x70
,
0x69
,
0x76
,
0x32
,
0xa2
,
0x02
,
0x03
,
0x4d
,
0x41
,
0x58
,
0xaa
,
0x02
,
0x32
,
0x2e
,
0x44
,
0x65
,
0x6c
,
0x65
,
0x74
,
0x65
,
0x54
,
0x61
,
0x67
,
0x52
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x0c
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x41
,
0x70
,
0x69
,
0x2e
,
0x56
,
0x32
,
0xca
,
0x02
,
0x0c
,
0x6e
,
0x73
,
0x65
,
0x22
,
0x14
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x0e
,
0x2a
,
0x0c
,
0x2f
,
0x61
,
0x70
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x5c
,
0x41
,
0x70
,
0x69
,
0x5c
,
0x56
,
0x32
,
0xe2
,
0x02
,
0x18
,
0x4d
,
0x69
,
0x2f
,
0x76
,
0x32
,
0x2f
,
0x74
,
0x61
,
0x67
,
0x73
,
0x12
,
0x85
,
0x01
,
0x0a
,
0x11
,
0x47
,
0x65
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x5c
,
0x41
,
0x70
,
0x69
,
0x5c
,
0x56
,
0x32
,
0x5c
,
0x47
,
0x50
,
0x42
,
0x4d
,
0x74
,
0x54
,
0x61
,
0x67
,
0x53
,
0x75
,
0x67
,
0x67
,
0x65
,
0x73
,
0x74
,
0x69
,
0x6f
,
0x6e
,
0x73
,
0x12
,
0x65
,
0x74
,
0x61
,
0x64
,
0x61
,
0x74
,
0x61
,
0xea
,
0x02
,
0x0e
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x3a
,
0x26
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x32
,
0x2e
,
0x47
,
0x3a
,
0x41
,
0x70
,
0x69
,
0x3a
,
0x3a
,
0x56
,
0x32
,
0x62
,
0x06
,
0x70
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x33
,
0x65
,
0x74
,
0x54
,
0x61
,
0x67
,
0x53
,
0x75
,
0x67
,
0x67
,
0x65
,
0x73
,
0x74
,
0x69
,
0x6f
,
0x6e
,
0x73
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x27
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x32
,
0x2e
,
0x47
,
0x65
,
0x74
,
0x54
,
0x61
,
0x67
,
0x53
,
0x75
,
0x67
,
0x67
,
0x65
,
0x73
,
0x74
,
0x69
,
0x6f
,
0x6e
,
0x73
,
0x52
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x6e
,
0x73
,
0x65
,
0x22
,
0x1f
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x19
,
0x12
,
0x17
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x32
,
0x2f
,
0x74
,
0x61
,
0x67
,
0x73
,
0x2f
,
0x73
,
0x75
,
0x67
,
0x67
,
0x65
,
0x73
,
0x74
,
0x69
,
0x6f
,
0x6e
,
0x42
,
0xa7
,
0x01
,
0x0a
,
0x10
,
0x63
,
0x6f
,
0x6d
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x32
,
0x42
,
0x0f
,
0x54
,
0x61
,
0x67
,
0x53
,
0x65
,
0x72
,
0x76
,
0x69
,
0x63
,
0x65
,
0x50
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x50
,
0x01
,
0x5a
,
0x30
,
0x67
,
0x69
,
0x74
,
0x68
,
0x75
,
0x62
,
0x2e
,
0x63
,
0x6f
,
0x6d
,
0x2f
,
0x75
,
0x73
,
0x65
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2f
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2f
,
0x70
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x2f
,
0x67
,
0x65
,
0x6e
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x32
,
0x3b
,
0x61
,
0x70
,
0x69
,
0x76
,
0x32
,
0xa2
,
0x02
,
0x03
,
0x4d
,
0x41
,
0x58
,
0xaa
,
0x02
,
0x0c
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x41
,
0x70
,
0x69
,
0x2e
,
0x56
,
0x32
,
0xca
,
0x02
,
0x0c
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x5c
,
0x41
,
0x70
,
0x69
,
0x5c
,
0x56
,
0x32
,
0xe2
,
0x02
,
0x18
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x5c
,
0x41
,
0x70
,
0x69
,
0x5c
,
0x56
,
0x32
,
0x5c
,
0x47
,
0x50
,
0x42
,
0x4d
,
0x65
,
0x74
,
0x61
,
0x64
,
0x61
,
0x74
,
0x61
,
0xea
,
0x02
,
0x0e
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x3a
,
0x3a
,
0x41
,
0x70
,
0x69
,
0x3a
,
0x3a
,
0x56
,
0x32
,
0x62
,
0x06
,
0x70
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x33
,
}
}
var
(
var
(
...
@@ -536,35 +665,40 @@ func file_api_v2_tag_service_proto_rawDescGZIP() []byte {
...
@@ -536,35 +665,40 @@ func file_api_v2_tag_service_proto_rawDescGZIP() []byte {
return
file_api_v2_tag_service_proto_rawDescData
return
file_api_v2_tag_service_proto_rawDescData
}
}
var
file_api_v2_tag_service_proto_msgTypes
=
make
([]
protoimpl
.
MessageInfo
,
9
)
var
file_api_v2_tag_service_proto_msgTypes
=
make
([]
protoimpl
.
MessageInfo
,
11
)
var
file_api_v2_tag_service_proto_goTypes
=
[]
interface
{}{
var
file_api_v2_tag_service_proto_goTypes
=
[]
interface
{}{
(
*
Tag
)(
nil
),
// 0: memos.api.v2.Tag
(
*
Tag
)(
nil
),
// 0: memos.api.v2.Tag
(
*
UpsertTagRequest
)(
nil
),
// 1: memos.api.v2.UpsertTagRequest
(
*
UpsertTagRequest
)(
nil
),
// 1: memos.api.v2.UpsertTagRequest
(
*
UpsertTagResponse
)(
nil
),
// 2: memos.api.v2.UpsertTagResponse
(
*
UpsertTagResponse
)(
nil
),
// 2: memos.api.v2.UpsertTagResponse
(
*
ListTagsRequest
)(
nil
),
// 3: memos.api.v2.ListTagsRequest
(
*
ListTagsRequest
)(
nil
),
// 3: memos.api.v2.ListTagsRequest
(
*
ListTagsResponse
)(
nil
),
// 4: memos.api.v2.ListTagsResponse
(
*
ListTagsResponse
)(
nil
),
// 4: memos.api.v2.ListTagsResponse
(
*
DeleteTagRequest
)(
nil
),
// 5: memos.api.v2.DeleteTagRequest
(
*
RenameTagRequest
)(
nil
),
// 5: memos.api.v2.RenameTagRequest
(
*
DeleteTagResponse
)(
nil
),
// 6: memos.api.v2.DeleteTagResponse
(
*
RenameTagResponse
)(
nil
),
// 6: memos.api.v2.RenameTagResponse
(
*
GetTagSuggestionsRequest
)(
nil
),
// 7: memos.api.v2.GetTagSuggestionsRequest
(
*
DeleteTagRequest
)(
nil
),
// 7: memos.api.v2.DeleteTagRequest
(
*
GetTagSuggestionsResponse
)(
nil
),
// 8: memos.api.v2.GetTagSuggestionsResponse
(
*
DeleteTagResponse
)(
nil
),
// 8: memos.api.v2.DeleteTagResponse
(
*
GetTagSuggestionsRequest
)(
nil
),
// 9: memos.api.v2.GetTagSuggestionsRequest
(
*
GetTagSuggestionsResponse
)(
nil
),
// 10: memos.api.v2.GetTagSuggestionsResponse
}
}
var
file_api_v2_tag_service_proto_depIdxs
=
[]
int32
{
var
file_api_v2_tag_service_proto_depIdxs
=
[]
int32
{
0
,
// 0: memos.api.v2.UpsertTagResponse.tag:type_name -> memos.api.v2.Tag
0
,
// 0: memos.api.v2.UpsertTagResponse.tag:type_name -> memos.api.v2.Tag
0
,
// 1: memos.api.v2.ListTagsResponse.tags:type_name -> memos.api.v2.Tag
0
,
// 1: memos.api.v2.ListTagsResponse.tags:type_name -> memos.api.v2.Tag
0
,
// 2: memos.api.v2.DeleteTagRequest.tag:type_name -> memos.api.v2.Tag
0
,
// 2: memos.api.v2.RenameTagResponse.tag:type_name -> memos.api.v2.Tag
1
,
// 3: memos.api.v2.TagService.UpsertTag:input_type -> memos.api.v2.UpsertTagRequest
0
,
// 3: memos.api.v2.DeleteTagRequest.tag:type_name -> memos.api.v2.Tag
3
,
// 4: memos.api.v2.TagService.ListTags:input_type -> memos.api.v2.ListTagsRequest
1
,
// 4: memos.api.v2.TagService.UpsertTag:input_type -> memos.api.v2.UpsertTagRequest
5
,
// 5: memos.api.v2.TagService.DeleteTag:input_type -> memos.api.v2.DeleteTagRequest
3
,
// 5: memos.api.v2.TagService.ListTags:input_type -> memos.api.v2.ListTagsRequest
7
,
// 6: memos.api.v2.TagService.GetTagSuggestions:input_type -> memos.api.v2.GetTagSuggestionsRequest
5
,
// 6: memos.api.v2.TagService.RenameTag:input_type -> memos.api.v2.RenameTagRequest
2
,
// 7: memos.api.v2.TagService.UpsertTag:output_type -> memos.api.v2.UpsertTagResponse
7
,
// 7: memos.api.v2.TagService.DeleteTag:input_type -> memos.api.v2.DeleteTagRequest
4
,
// 8: memos.api.v2.TagService.ListTags:output_type -> memos.api.v2.ListTagsResponse
9
,
// 8: memos.api.v2.TagService.GetTagSuggestions:input_type -> memos.api.v2.GetTagSuggestionsRequest
6
,
// 9: memos.api.v2.TagService.DeleteTag:output_type -> memos.api.v2.DeleteTagResponse
2
,
// 9: memos.api.v2.TagService.UpsertTag:output_type -> memos.api.v2.UpsertTagResponse
8
,
// 10: memos.api.v2.TagService.GetTagSuggestions:output_type -> memos.api.v2.GetTagSuggestionsResponse
4
,
// 10: memos.api.v2.TagService.ListTags:output_type -> memos.api.v2.ListTagsResponse
7
,
// [7:11] is the sub-list for method output_type
6
,
// 11: memos.api.v2.TagService.RenameTag:output_type -> memos.api.v2.RenameTagResponse
3
,
// [3:7] is the sub-list for method input_type
8
,
// 12: memos.api.v2.TagService.DeleteTag:output_type -> memos.api.v2.DeleteTagResponse
3
,
// [3:3] is the sub-list for extension type_name
10
,
// 13: memos.api.v2.TagService.GetTagSuggestions:output_type -> memos.api.v2.GetTagSuggestionsResponse
3
,
// [3:3] is the sub-list for extension extendee
9
,
// [9:14] is the sub-list for method output_type
0
,
// [0:3] is the sub-list for field type_name
4
,
// [4:9] is the sub-list for method input_type
4
,
// [4:4] is the sub-list for extension type_name
4
,
// [4:4] is the sub-list for extension extendee
0
,
// [0:4] is the sub-list for field type_name
}
}
func
init
()
{
file_api_v2_tag_service_proto_init
()
}
func
init
()
{
file_api_v2_tag_service_proto_init
()
}
...
@@ -634,7 +768,7 @@ func file_api_v2_tag_service_proto_init() {
...
@@ -634,7 +768,7 @@ func file_api_v2_tag_service_proto_init() {
}
}
}
}
file_api_v2_tag_service_proto_msgTypes
[
5
]
.
Exporter
=
func
(
v
interface
{},
i
int
)
interface
{}
{
file_api_v2_tag_service_proto_msgTypes
[
5
]
.
Exporter
=
func
(
v
interface
{},
i
int
)
interface
{}
{
switch
v
:=
v
.
(
*
Delet
eTagRequest
);
i
{
switch
v
:=
v
.
(
*
Renam
eTagRequest
);
i
{
case
0
:
case
0
:
return
&
v
.
state
return
&
v
.
state
case
1
:
case
1
:
...
@@ -646,7 +780,7 @@ func file_api_v2_tag_service_proto_init() {
...
@@ -646,7 +780,7 @@ func file_api_v2_tag_service_proto_init() {
}
}
}
}
file_api_v2_tag_service_proto_msgTypes
[
6
]
.
Exporter
=
func
(
v
interface
{},
i
int
)
interface
{}
{
file_api_v2_tag_service_proto_msgTypes
[
6
]
.
Exporter
=
func
(
v
interface
{},
i
int
)
interface
{}
{
switch
v
:=
v
.
(
*
Delet
eTagResponse
);
i
{
switch
v
:=
v
.
(
*
Renam
eTagResponse
);
i
{
case
0
:
case
0
:
return
&
v
.
state
return
&
v
.
state
case
1
:
case
1
:
...
@@ -658,7 +792,7 @@ func file_api_v2_tag_service_proto_init() {
...
@@ -658,7 +792,7 @@ func file_api_v2_tag_service_proto_init() {
}
}
}
}
file_api_v2_tag_service_proto_msgTypes
[
7
]
.
Exporter
=
func
(
v
interface
{},
i
int
)
interface
{}
{
file_api_v2_tag_service_proto_msgTypes
[
7
]
.
Exporter
=
func
(
v
interface
{},
i
int
)
interface
{}
{
switch
v
:=
v
.
(
*
GetTagSuggestions
Request
);
i
{
switch
v
:=
v
.
(
*
DeleteTag
Request
);
i
{
case
0
:
case
0
:
return
&
v
.
state
return
&
v
.
state
case
1
:
case
1
:
...
@@ -670,6 +804,30 @@ func file_api_v2_tag_service_proto_init() {
...
@@ -670,6 +804,30 @@ func file_api_v2_tag_service_proto_init() {
}
}
}
}
file_api_v2_tag_service_proto_msgTypes
[
8
]
.
Exporter
=
func
(
v
interface
{},
i
int
)
interface
{}
{
file_api_v2_tag_service_proto_msgTypes
[
8
]
.
Exporter
=
func
(
v
interface
{},
i
int
)
interface
{}
{
switch
v
:=
v
.
(
*
DeleteTagResponse
);
i
{
case
0
:
return
&
v
.
state
case
1
:
return
&
v
.
sizeCache
case
2
:
return
&
v
.
unknownFields
default
:
return
nil
}
}
file_api_v2_tag_service_proto_msgTypes
[
9
]
.
Exporter
=
func
(
v
interface
{},
i
int
)
interface
{}
{
switch
v
:=
v
.
(
*
GetTagSuggestionsRequest
);
i
{
case
0
:
return
&
v
.
state
case
1
:
return
&
v
.
sizeCache
case
2
:
return
&
v
.
unknownFields
default
:
return
nil
}
}
file_api_v2_tag_service_proto_msgTypes
[
10
]
.
Exporter
=
func
(
v
interface
{},
i
int
)
interface
{}
{
switch
v
:=
v
.
(
*
GetTagSuggestionsResponse
);
i
{
switch
v
:=
v
.
(
*
GetTagSuggestionsResponse
);
i
{
case
0
:
case
0
:
return
&
v
.
state
return
&
v
.
state
...
@@ -688,7 +846,7 @@ func file_api_v2_tag_service_proto_init() {
...
@@ -688,7 +846,7 @@ func file_api_v2_tag_service_proto_init() {
GoPackagePath
:
reflect
.
TypeOf
(
x
{})
.
PkgPath
(),
GoPackagePath
:
reflect
.
TypeOf
(
x
{})
.
PkgPath
(),
RawDescriptor
:
file_api_v2_tag_service_proto_rawDesc
,
RawDescriptor
:
file_api_v2_tag_service_proto_rawDesc
,
NumEnums
:
0
,
NumEnums
:
0
,
NumMessages
:
9
,
NumMessages
:
11
,
NumExtensions
:
0
,
NumExtensions
:
0
,
NumServices
:
1
,
NumServices
:
1
,
},
},
...
...
proto/gen/api/v2/tag_service.pb.gw.go
View file @
79558028
...
@@ -103,6 +103,42 @@ func local_request_TagService_ListTags_0(ctx context.Context, marshaler runtime.
...
@@ -103,6 +103,42 @@ func local_request_TagService_ListTags_0(ctx context.Context, marshaler runtime.
}
}
var
(
filter_TagService_RenameTag_0
=
&
utilities
.
DoubleArray
{
Encoding
:
map
[
string
]
int
{},
Base
:
[]
int
(
nil
),
Check
:
[]
int
(
nil
)}
)
func
request_TagService_RenameTag_0
(
ctx
context
.
Context
,
marshaler
runtime
.
Marshaler
,
client
TagServiceClient
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
(
proto
.
Message
,
runtime
.
ServerMetadata
,
error
)
{
var
protoReq
RenameTagRequest
var
metadata
runtime
.
ServerMetadata
if
err
:=
req
.
ParseForm
();
err
!=
nil
{
return
nil
,
metadata
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"%v"
,
err
)
}
if
err
:=
runtime
.
PopulateQueryParameters
(
&
protoReq
,
req
.
Form
,
filter_TagService_RenameTag_0
);
err
!=
nil
{
return
nil
,
metadata
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"%v"
,
err
)
}
msg
,
err
:=
client
.
RenameTag
(
ctx
,
&
protoReq
,
grpc
.
Header
(
&
metadata
.
HeaderMD
),
grpc
.
Trailer
(
&
metadata
.
TrailerMD
))
return
msg
,
metadata
,
err
}
func
local_request_TagService_RenameTag_0
(
ctx
context
.
Context
,
marshaler
runtime
.
Marshaler
,
server
TagServiceServer
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
(
proto
.
Message
,
runtime
.
ServerMetadata
,
error
)
{
var
protoReq
RenameTagRequest
var
metadata
runtime
.
ServerMetadata
if
err
:=
req
.
ParseForm
();
err
!=
nil
{
return
nil
,
metadata
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"%v"
,
err
)
}
if
err
:=
runtime
.
PopulateQueryParameters
(
&
protoReq
,
req
.
Form
,
filter_TagService_RenameTag_0
);
err
!=
nil
{
return
nil
,
metadata
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"%v"
,
err
)
}
msg
,
err
:=
server
.
RenameTag
(
ctx
,
&
protoReq
)
return
msg
,
metadata
,
err
}
var
(
var
(
filter_TagService_DeleteTag_0
=
&
utilities
.
DoubleArray
{
Encoding
:
map
[
string
]
int
{},
Base
:
[]
int
(
nil
),
Check
:
[]
int
(
nil
)}
filter_TagService_DeleteTag_0
=
&
utilities
.
DoubleArray
{
Encoding
:
map
[
string
]
int
{},
Base
:
[]
int
(
nil
),
Check
:
[]
int
(
nil
)}
)
)
...
@@ -231,6 +267,31 @@ func RegisterTagServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux,
...
@@ -231,6 +267,31 @@ func RegisterTagServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux,
})
})
mux
.
Handle
(
"PATCH"
,
pattern_TagService_RenameTag_0
,
func
(
w
http
.
ResponseWriter
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
{
ctx
,
cancel
:=
context
.
WithCancel
(
req
.
Context
())
defer
cancel
()
var
stream
runtime
.
ServerTransportStream
ctx
=
grpc
.
NewContextWithServerTransportStream
(
ctx
,
&
stream
)
inboundMarshaler
,
outboundMarshaler
:=
runtime
.
MarshalerForRequest
(
mux
,
req
)
var
err
error
var
annotatedContext
context
.
Context
annotatedContext
,
err
=
runtime
.
AnnotateIncomingContext
(
ctx
,
mux
,
req
,
"/memos.api.v2.TagService/RenameTag"
,
runtime
.
WithHTTPPathPattern
(
"/api/v2/tags:rename"
))
if
err
!=
nil
{
runtime
.
HTTPError
(
ctx
,
mux
,
outboundMarshaler
,
w
,
req
,
err
)
return
}
resp
,
md
,
err
:=
local_request_TagService_RenameTag_0
(
annotatedContext
,
inboundMarshaler
,
server
,
req
,
pathParams
)
md
.
HeaderMD
,
md
.
TrailerMD
=
metadata
.
Join
(
md
.
HeaderMD
,
stream
.
Header
()),
metadata
.
Join
(
md
.
TrailerMD
,
stream
.
Trailer
())
annotatedContext
=
runtime
.
NewServerMetadataContext
(
annotatedContext
,
md
)
if
err
!=
nil
{
runtime
.
HTTPError
(
annotatedContext
,
mux
,
outboundMarshaler
,
w
,
req
,
err
)
return
}
forward_TagService_RenameTag_0
(
annotatedContext
,
mux
,
outboundMarshaler
,
w
,
req
,
resp
,
mux
.
GetForwardResponseOptions
()
...
)
})
mux
.
Handle
(
"DELETE"
,
pattern_TagService_DeleteTag_0
,
func
(
w
http
.
ResponseWriter
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
{
mux
.
Handle
(
"DELETE"
,
pattern_TagService_DeleteTag_0
,
func
(
w
http
.
ResponseWriter
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
{
ctx
,
cancel
:=
context
.
WithCancel
(
req
.
Context
())
ctx
,
cancel
:=
context
.
WithCancel
(
req
.
Context
())
defer
cancel
()
defer
cancel
()
...
@@ -366,6 +427,28 @@ func RegisterTagServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux,
...
@@ -366,6 +427,28 @@ func RegisterTagServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux,
})
})
mux
.
Handle
(
"PATCH"
,
pattern_TagService_RenameTag_0
,
func
(
w
http
.
ResponseWriter
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
{
ctx
,
cancel
:=
context
.
WithCancel
(
req
.
Context
())
defer
cancel
()
inboundMarshaler
,
outboundMarshaler
:=
runtime
.
MarshalerForRequest
(
mux
,
req
)
var
err
error
var
annotatedContext
context
.
Context
annotatedContext
,
err
=
runtime
.
AnnotateContext
(
ctx
,
mux
,
req
,
"/memos.api.v2.TagService/RenameTag"
,
runtime
.
WithHTTPPathPattern
(
"/api/v2/tags:rename"
))
if
err
!=
nil
{
runtime
.
HTTPError
(
ctx
,
mux
,
outboundMarshaler
,
w
,
req
,
err
)
return
}
resp
,
md
,
err
:=
request_TagService_RenameTag_0
(
annotatedContext
,
inboundMarshaler
,
client
,
req
,
pathParams
)
annotatedContext
=
runtime
.
NewServerMetadataContext
(
annotatedContext
,
md
)
if
err
!=
nil
{
runtime
.
HTTPError
(
annotatedContext
,
mux
,
outboundMarshaler
,
w
,
req
,
err
)
return
}
forward_TagService_RenameTag_0
(
annotatedContext
,
mux
,
outboundMarshaler
,
w
,
req
,
resp
,
mux
.
GetForwardResponseOptions
()
...
)
})
mux
.
Handle
(
"DELETE"
,
pattern_TagService_DeleteTag_0
,
func
(
w
http
.
ResponseWriter
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
{
mux
.
Handle
(
"DELETE"
,
pattern_TagService_DeleteTag_0
,
func
(
w
http
.
ResponseWriter
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
{
ctx
,
cancel
:=
context
.
WithCancel
(
req
.
Context
())
ctx
,
cancel
:=
context
.
WithCancel
(
req
.
Context
())
defer
cancel
()
defer
cancel
()
...
@@ -418,6 +501,8 @@ var (
...
@@ -418,6 +501,8 @@ var (
pattern_TagService_ListTags_0
=
runtime
.
MustPattern
(
runtime
.
NewPattern
(
1
,
[]
int
{
2
,
0
,
2
,
1
,
2
,
2
},
[]
string
{
"api"
,
"v2"
,
"tags"
},
""
))
pattern_TagService_ListTags_0
=
runtime
.
MustPattern
(
runtime
.
NewPattern
(
1
,
[]
int
{
2
,
0
,
2
,
1
,
2
,
2
},
[]
string
{
"api"
,
"v2"
,
"tags"
},
""
))
pattern_TagService_RenameTag_0
=
runtime
.
MustPattern
(
runtime
.
NewPattern
(
1
,
[]
int
{
2
,
0
,
2
,
1
,
2
,
2
},
[]
string
{
"api"
,
"v2"
,
"tags"
},
"rename"
))
pattern_TagService_DeleteTag_0
=
runtime
.
MustPattern
(
runtime
.
NewPattern
(
1
,
[]
int
{
2
,
0
,
2
,
1
,
2
,
2
},
[]
string
{
"api"
,
"v2"
,
"tags"
},
""
))
pattern_TagService_DeleteTag_0
=
runtime
.
MustPattern
(
runtime
.
NewPattern
(
1
,
[]
int
{
2
,
0
,
2
,
1
,
2
,
2
},
[]
string
{
"api"
,
"v2"
,
"tags"
},
""
))
pattern_TagService_GetTagSuggestions_0
=
runtime
.
MustPattern
(
runtime
.
NewPattern
(
1
,
[]
int
{
2
,
0
,
2
,
1
,
2
,
2
,
2
,
3
},
[]
string
{
"api"
,
"v2"
,
"tags"
,
"suggestion"
},
""
))
pattern_TagService_GetTagSuggestions_0
=
runtime
.
MustPattern
(
runtime
.
NewPattern
(
1
,
[]
int
{
2
,
0
,
2
,
1
,
2
,
2
,
2
,
3
},
[]
string
{
"api"
,
"v2"
,
"tags"
,
"suggestion"
},
""
))
...
@@ -428,6 +513,8 @@ var (
...
@@ -428,6 +513,8 @@ var (
forward_TagService_ListTags_0
=
runtime
.
ForwardResponseMessage
forward_TagService_ListTags_0
=
runtime
.
ForwardResponseMessage
forward_TagService_RenameTag_0
=
runtime
.
ForwardResponseMessage
forward_TagService_DeleteTag_0
=
runtime
.
ForwardResponseMessage
forward_TagService_DeleteTag_0
=
runtime
.
ForwardResponseMessage
forward_TagService_GetTagSuggestions_0
=
runtime
.
ForwardResponseMessage
forward_TagService_GetTagSuggestions_0
=
runtime
.
ForwardResponseMessage
...
...
proto/gen/api/v2/tag_service_grpc.pb.go
View file @
79558028
...
@@ -21,6 +21,7 @@ const _ = grpc.SupportPackageIsVersion7
...
@@ -21,6 +21,7 @@ const _ = grpc.SupportPackageIsVersion7
const
(
const
(
TagService_UpsertTag_FullMethodName
=
"/memos.api.v2.TagService/UpsertTag"
TagService_UpsertTag_FullMethodName
=
"/memos.api.v2.TagService/UpsertTag"
TagService_ListTags_FullMethodName
=
"/memos.api.v2.TagService/ListTags"
TagService_ListTags_FullMethodName
=
"/memos.api.v2.TagService/ListTags"
TagService_RenameTag_FullMethodName
=
"/memos.api.v2.TagService/RenameTag"
TagService_DeleteTag_FullMethodName
=
"/memos.api.v2.TagService/DeleteTag"
TagService_DeleteTag_FullMethodName
=
"/memos.api.v2.TagService/DeleteTag"
TagService_GetTagSuggestions_FullMethodName
=
"/memos.api.v2.TagService/GetTagSuggestions"
TagService_GetTagSuggestions_FullMethodName
=
"/memos.api.v2.TagService/GetTagSuggestions"
)
)
...
@@ -31,6 +32,7 @@ const (
...
@@ -31,6 +32,7 @@ const (
type
TagServiceClient
interface
{
type
TagServiceClient
interface
{
UpsertTag
(
ctx
context
.
Context
,
in
*
UpsertTagRequest
,
opts
...
grpc
.
CallOption
)
(
*
UpsertTagResponse
,
error
)
UpsertTag
(
ctx
context
.
Context
,
in
*
UpsertTagRequest
,
opts
...
grpc
.
CallOption
)
(
*
UpsertTagResponse
,
error
)
ListTags
(
ctx
context
.
Context
,
in
*
ListTagsRequest
,
opts
...
grpc
.
CallOption
)
(
*
ListTagsResponse
,
error
)
ListTags
(
ctx
context
.
Context
,
in
*
ListTagsRequest
,
opts
...
grpc
.
CallOption
)
(
*
ListTagsResponse
,
error
)
RenameTag
(
ctx
context
.
Context
,
in
*
RenameTagRequest
,
opts
...
grpc
.
CallOption
)
(
*
RenameTagResponse
,
error
)
DeleteTag
(
ctx
context
.
Context
,
in
*
DeleteTagRequest
,
opts
...
grpc
.
CallOption
)
(
*
DeleteTagResponse
,
error
)
DeleteTag
(
ctx
context
.
Context
,
in
*
DeleteTagRequest
,
opts
...
grpc
.
CallOption
)
(
*
DeleteTagResponse
,
error
)
GetTagSuggestions
(
ctx
context
.
Context
,
in
*
GetTagSuggestionsRequest
,
opts
...
grpc
.
CallOption
)
(
*
GetTagSuggestionsResponse
,
error
)
GetTagSuggestions
(
ctx
context
.
Context
,
in
*
GetTagSuggestionsRequest
,
opts
...
grpc
.
CallOption
)
(
*
GetTagSuggestionsResponse
,
error
)
}
}
...
@@ -61,6 +63,15 @@ func (c *tagServiceClient) ListTags(ctx context.Context, in *ListTagsRequest, op
...
@@ -61,6 +63,15 @@ func (c *tagServiceClient) ListTags(ctx context.Context, in *ListTagsRequest, op
return
out
,
nil
return
out
,
nil
}
}
func
(
c
*
tagServiceClient
)
RenameTag
(
ctx
context
.
Context
,
in
*
RenameTagRequest
,
opts
...
grpc
.
CallOption
)
(
*
RenameTagResponse
,
error
)
{
out
:=
new
(
RenameTagResponse
)
err
:=
c
.
cc
.
Invoke
(
ctx
,
TagService_RenameTag_FullMethodName
,
in
,
out
,
opts
...
)
if
err
!=
nil
{
return
nil
,
err
}
return
out
,
nil
}
func
(
c
*
tagServiceClient
)
DeleteTag
(
ctx
context
.
Context
,
in
*
DeleteTagRequest
,
opts
...
grpc
.
CallOption
)
(
*
DeleteTagResponse
,
error
)
{
func
(
c
*
tagServiceClient
)
DeleteTag
(
ctx
context
.
Context
,
in
*
DeleteTagRequest
,
opts
...
grpc
.
CallOption
)
(
*
DeleteTagResponse
,
error
)
{
out
:=
new
(
DeleteTagResponse
)
out
:=
new
(
DeleteTagResponse
)
err
:=
c
.
cc
.
Invoke
(
ctx
,
TagService_DeleteTag_FullMethodName
,
in
,
out
,
opts
...
)
err
:=
c
.
cc
.
Invoke
(
ctx
,
TagService_DeleteTag_FullMethodName
,
in
,
out
,
opts
...
)
...
@@ -85,6 +96,7 @@ func (c *tagServiceClient) GetTagSuggestions(ctx context.Context, in *GetTagSugg
...
@@ -85,6 +96,7 @@ func (c *tagServiceClient) GetTagSuggestions(ctx context.Context, in *GetTagSugg
type
TagServiceServer
interface
{
type
TagServiceServer
interface
{
UpsertTag
(
context
.
Context
,
*
UpsertTagRequest
)
(
*
UpsertTagResponse
,
error
)
UpsertTag
(
context
.
Context
,
*
UpsertTagRequest
)
(
*
UpsertTagResponse
,
error
)
ListTags
(
context
.
Context
,
*
ListTagsRequest
)
(
*
ListTagsResponse
,
error
)
ListTags
(
context
.
Context
,
*
ListTagsRequest
)
(
*
ListTagsResponse
,
error
)
RenameTag
(
context
.
Context
,
*
RenameTagRequest
)
(
*
RenameTagResponse
,
error
)
DeleteTag
(
context
.
Context
,
*
DeleteTagRequest
)
(
*
DeleteTagResponse
,
error
)
DeleteTag
(
context
.
Context
,
*
DeleteTagRequest
)
(
*
DeleteTagResponse
,
error
)
GetTagSuggestions
(
context
.
Context
,
*
GetTagSuggestionsRequest
)
(
*
GetTagSuggestionsResponse
,
error
)
GetTagSuggestions
(
context
.
Context
,
*
GetTagSuggestionsRequest
)
(
*
GetTagSuggestionsResponse
,
error
)
mustEmbedUnimplementedTagServiceServer
()
mustEmbedUnimplementedTagServiceServer
()
...
@@ -100,6 +112,9 @@ func (UnimplementedTagServiceServer) UpsertTag(context.Context, *UpsertTagReques
...
@@ -100,6 +112,9 @@ func (UnimplementedTagServiceServer) UpsertTag(context.Context, *UpsertTagReques
func
(
UnimplementedTagServiceServer
)
ListTags
(
context
.
Context
,
*
ListTagsRequest
)
(
*
ListTagsResponse
,
error
)
{
func
(
UnimplementedTagServiceServer
)
ListTags
(
context
.
Context
,
*
ListTagsRequest
)
(
*
ListTagsResponse
,
error
)
{
return
nil
,
status
.
Errorf
(
codes
.
Unimplemented
,
"method ListTags not implemented"
)
return
nil
,
status
.
Errorf
(
codes
.
Unimplemented
,
"method ListTags not implemented"
)
}
}
func
(
UnimplementedTagServiceServer
)
RenameTag
(
context
.
Context
,
*
RenameTagRequest
)
(
*
RenameTagResponse
,
error
)
{
return
nil
,
status
.
Errorf
(
codes
.
Unimplemented
,
"method RenameTag not implemented"
)
}
func
(
UnimplementedTagServiceServer
)
DeleteTag
(
context
.
Context
,
*
DeleteTagRequest
)
(
*
DeleteTagResponse
,
error
)
{
func
(
UnimplementedTagServiceServer
)
DeleteTag
(
context
.
Context
,
*
DeleteTagRequest
)
(
*
DeleteTagResponse
,
error
)
{
return
nil
,
status
.
Errorf
(
codes
.
Unimplemented
,
"method DeleteTag not implemented"
)
return
nil
,
status
.
Errorf
(
codes
.
Unimplemented
,
"method DeleteTag not implemented"
)
}
}
...
@@ -155,6 +170,24 @@ func _TagService_ListTags_Handler(srv interface{}, ctx context.Context, dec func
...
@@ -155,6 +170,24 @@ func _TagService_ListTags_Handler(srv interface{}, ctx context.Context, dec func
return
interceptor
(
ctx
,
in
,
info
,
handler
)
return
interceptor
(
ctx
,
in
,
info
,
handler
)
}
}
func
_TagService_RenameTag_Handler
(
srv
interface
{},
ctx
context
.
Context
,
dec
func
(
interface
{})
error
,
interceptor
grpc
.
UnaryServerInterceptor
)
(
interface
{},
error
)
{
in
:=
new
(
RenameTagRequest
)
if
err
:=
dec
(
in
);
err
!=
nil
{
return
nil
,
err
}
if
interceptor
==
nil
{
return
srv
.
(
TagServiceServer
)
.
RenameTag
(
ctx
,
in
)
}
info
:=
&
grpc
.
UnaryServerInfo
{
Server
:
srv
,
FullMethod
:
TagService_RenameTag_FullMethodName
,
}
handler
:=
func
(
ctx
context
.
Context
,
req
interface
{})
(
interface
{},
error
)
{
return
srv
.
(
TagServiceServer
)
.
RenameTag
(
ctx
,
req
.
(
*
RenameTagRequest
))
}
return
interceptor
(
ctx
,
in
,
info
,
handler
)
}
func
_TagService_DeleteTag_Handler
(
srv
interface
{},
ctx
context
.
Context
,
dec
func
(
interface
{})
error
,
interceptor
grpc
.
UnaryServerInterceptor
)
(
interface
{},
error
)
{
func
_TagService_DeleteTag_Handler
(
srv
interface
{},
ctx
context
.
Context
,
dec
func
(
interface
{})
error
,
interceptor
grpc
.
UnaryServerInterceptor
)
(
interface
{},
error
)
{
in
:=
new
(
DeleteTagRequest
)
in
:=
new
(
DeleteTagRequest
)
if
err
:=
dec
(
in
);
err
!=
nil
{
if
err
:=
dec
(
in
);
err
!=
nil
{
...
@@ -206,6 +239,10 @@ var TagService_ServiceDesc = grpc.ServiceDesc{
...
@@ -206,6 +239,10 @@ var TagService_ServiceDesc = grpc.ServiceDesc{
MethodName
:
"ListTags"
,
MethodName
:
"ListTags"
,
Handler
:
_TagService_ListTags_Handler
,
Handler
:
_TagService_ListTags_Handler
,
},
},
{
MethodName
:
"RenameTag"
,
Handler
:
_TagService_RenameTag_Handler
,
},
{
{
MethodName
:
"DeleteTag"
,
MethodName
:
"DeleteTag"
,
Handler
:
_TagService_DeleteTag_Handler
,
Handler
:
_TagService_DeleteTag_Handler
,
...
...
web/src/components/RenameTagDialog.tsx
0 → 100644
View file @
79558028
import
{
Button
,
IconButton
,
Input
,
List
,
ListItem
}
from
"@mui/joy"
;
import
React
,
{
useState
}
from
"react"
;
import
{
toast
}
from
"react-hot-toast"
;
import
{
tagServiceClient
}
from
"@/grpcweb"
;
import
useCurrentUser
from
"@/hooks/useCurrentUser"
;
import
useLoading
from
"@/hooks/useLoading"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
import
{
generateDialog
}
from
"./Dialog"
;
import
Icon
from
"./Icon"
;
interface
Props
extends
DialogProps
{
tag
:
string
;
}
const
RenameTagDialog
:
React
.
FC
<
Props
>
=
(
props
:
Props
)
=>
{
const
{
tag
,
destroy
}
=
props
;
const
t
=
useTranslate
();
const
currentUser
=
useCurrentUser
();
const
[
newName
,
setNewName
]
=
useState
(
tag
);
const
requestState
=
useLoading
(
false
);
const
handleTagNameInputChange
=
(
e
:
React
.
ChangeEvent
<
HTMLInputElement
>
)
=>
{
setNewName
(
e
.
target
.
value
.
trim
());
};
const
handleConfirm
=
async
()
=>
{
if
(
!
newName
)
{
toast
.
error
(
"Please fill all required fields"
);
return
;
}
if
(
newName
===
tag
)
{
toast
.
error
(
"New name cannot be the same as the old name"
);
return
;
}
try
{
await
tagServiceClient
.
renameTag
({
user
:
currentUser
.
name
,
oldName
:
tag
,
newName
:
newName
,
});
toast
.
success
(
"Rename tag successfully"
);
setTimeout
(()
=>
{
window
.
location
.
reload
();
},
300
);
}
catch
(
error
:
any
)
{
console
.
error
(
error
);
toast
.
error
(
error
.
details
);
}
};
return
(
<>
<
div
className=
"dialog-header-container"
>
<
p
className=
"title-text"
>
{
"Rename tag"
}
</
p
>
<
IconButton
size=
"sm"
onClick=
{
()
=>
destroy
()
}
>
<
Icon
.
X
className=
"w-5 h-auto"
/>
</
IconButton
>
</
div
>
<
div
className=
"dialog-content-container max-w-xs"
>
<
div
className=
"w-full flex flex-col justify-start items-start mb-3"
>
<
div
className=
"relative w-full mb-2 flex flex-row justify-start items-center space-x-2"
>
<
span
className=
"w-20 text-sm whitespace-nowrap shrink-0 text-right"
>
Old Name
</
span
>
<
Input
className=
"w-full"
readOnly
disabled
type=
"text"
placeholder=
"A new tag name"
size=
"md"
value=
{
tag
}
/>
</
div
>
<
div
className=
"relative w-full mb-2 flex flex-row justify-start items-center space-x-2"
>
<
span
className=
"w-20 text-sm whitespace-nowrap shrink-0 text-right"
>
New Name
</
span
>
<
Input
className=
"w-full"
type=
"text"
placeholder=
"A new tag name"
size=
"md"
value=
{
newName
}
onChange=
{
handleTagNameInputChange
}
/>
</
div
>
<
List
className=
"!leading-5"
size=
"sm"
marker=
"disc"
>
<
ListItem
>
All memes with this tag will be updated.
</
ListItem
>
<
ListItem
>
If the amount of data is large, it will take longer and the server load will become higher.
</
ListItem
>
<
ListItem
>
The page will be automatically refreshed when the task is completed
</
ListItem
>
</
List
>
</
div
>
<
div
className=
"w-full flex flex-row justify-end items-center mt-2 space-x-2"
>
<
Button
color=
"neutral"
variant=
"plain"
disabled=
{
requestState
.
isLoading
}
loading=
{
requestState
.
isLoading
}
onClick=
{
destroy
}
>
{
t
(
"common.cancel"
)
}
</
Button
>
<
Button
color=
"primary"
disabled=
{
requestState
.
isLoading
}
loading=
{
requestState
.
isLoading
}
onClick=
{
handleConfirm
}
>
{
t
(
"common.confirm"
)
}
</
Button
>
</
div
>
</
div
>
</>
);
};
function
showRenameTagDialog
(
props
:
Pick
<
Props
,
"tag"
>
)
{
generateDialog
(
{
className
:
"rename-tag-dialog"
,
dialogName
:
"rename-tag-dialog"
,
},
RenameTagDialog
,
props
);
}
export
default
showRenameTagDialog
;
web/src/components/TagList.tsx
View file @
79558028
import
{
Dropdown
,
Menu
,
MenuButton
,
MenuItem
}
from
"@mui/joy"
;
import
{
useEffect
,
useState
}
from
"react"
;
import
{
useEffect
,
useState
}
from
"react"
;
import
useToggle
from
"react-use/lib/useToggle"
;
import
useToggle
from
"react-use/lib/useToggle"
;
import
{
useFilterStore
,
useTagStore
}
from
"@/store/module"
;
import
{
useFilterStore
,
useTagStore
}
from
"@/store/module"
;
...
@@ -5,6 +6,7 @@ import { useMemoList } from "@/store/v1";
...
@@ -5,6 +6,7 @@ import { useMemoList } from "@/store/v1";
import
{
useTranslate
}
from
"@/utils/i18n"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
import
showCreateTagDialog
from
"./CreateTagDialog"
;
import
showCreateTagDialog
from
"./CreateTagDialog"
;
import
Icon
from
"./Icon"
;
import
Icon
from
"./Icon"
;
import
showRenameTagDialog
from
"./RenameTagDialog"
;
interface
Tag
{
interface
Tag
{
key
:
string
;
key
:
string
;
...
@@ -116,17 +118,25 @@ const TagItemContainer: React.FC<TagItemContainerProps> = (props: TagItemContain
...
@@ -116,17 +118,25 @@ const TagItemContainer: React.FC<TagItemContainerProps> = (props: TagItemContain
return
(
return
(
<>
<>
<
div
<
div
className=
"relative group flex flex-row justify-between items-center w-full h-8 py-0 mt-px first:mt-1 rounded-lg text-base sm:text-sm cursor-pointer select-none shrink-0 hover:opacity-80"
>
className=
"relative group flex flex-row justify-between items-center w-full h-8 py-0 mt-px first:mt-1 rounded-lg text-base sm:text-sm cursor-pointer select-none shrink-0 hover:opacity-80"
onClick=
{
handleTagClick
}
>
<
div
<
div
className=
{
`flex flex-row justify-start items-center truncate shrink leading-5 mr-1 text-gray-600 dark:text-gray-400 ${
className=
{
`flex flex-row justify-start items-center truncate shrink leading-5 mr-1 text-gray-600 dark:text-gray-400 ${
isActive && "!text-blue-600"
isActive && "!text-blue-600"
}`
}
}`
}
>
>
<
Dropdown
>
<
MenuButton
slots=
{
{
root
:
"div"
}
}
>
<
div
className=
"shrink-0"
>
<
Icon
.
Hash
className=
"w-4 h-auto shrink-0 opacity-60 mr-1"
/>
<
Icon
.
Hash
className=
"w-4 h-auto shrink-0 opacity-60 mr-1"
/>
<
span
className=
"truncate"
>
{
tag
.
key
}
</
span
>
</
div
>
</
MenuButton
>
<
Menu
size=
"sm"
placement=
"bottom-start"
>
<
MenuItem
onClick=
{
()
=>
showRenameTagDialog
({
tag
:
tag
.
text
})
}
>
Rename
</
MenuItem
>
</
Menu
>
</
Dropdown
>
<
span
className=
"truncate"
onClick=
{
handleTagClick
}
>
{
tag
.
key
}
</
span
>
</
div
>
</
div
>
<
div
className=
"flex flex-row justify-end items-center"
>
<
div
className=
"flex flex-row justify-end items-center"
>
{
hasSubTags
?
(
{
hasSubTags
?
(
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment