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
7dc4bc57
Commit
7dc4bc57
authored
Oct 03, 2023
by
Steven
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
chore: update resource service
parent
2e82ba50
Changes
13
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
832 additions
and
218 deletions
+832
-218
resource.go
api/v1/resource.go
+0
-1
resource_service.go
api/v2/resource_service.go
+23
-0
user_service.go
api/v2/user_service.go
+9
-9
resource_service.proto
proto/api/v2/resource_service.proto
+30
-0
README.md
proto/gen/api/v2/README.md
+71
-0
resource_service.pb.go
proto/gen/api/v2/resource_service.pb.go
+403
-72
resource_service.pb.gw.go
proto/gen/api/v2/resource_service.pb.gw.go
+208
-0
resource_service_grpc.pb.go
proto/gen/api/v2/resource_service_grpc.pb.go
+74
-0
ChangeResourceFilenameDialog.tsx
web/src/components/ChangeResourceFilenameDialog.tsx
+0
-100
index.tsx
web/src/components/MemoEditor/index.tsx
+5
-2
api.ts
web/src/helpers/api.ts
+0
-12
resource.ts
web/src/store/module/resource.ts
+8
-13
resource.ts
web/src/store/reducer/resource.ts
+1
-9
No files found.
api/v1/resource.go
View file @
7dc4bc57
...
...
@@ -47,7 +47,6 @@ type Resource struct {
type
CreateResourceRequest
struct
{
Filename
string
`json:"filename"`
InternalPath
string
`json:"internalPath"`
ExternalLink
string
`json:"externalLink"`
Type
string
`json:"type"`
}
...
...
api/v2/resource_service.go
View file @
7dc4bc57
...
...
@@ -44,6 +44,29 @@ func (s *ResourceService) ListResources(ctx context.Context, _ *apiv2pb.ListReso
return
response
,
nil
}
func
(
s
*
ResourceService
)
UpdateResource
(
ctx
context
.
Context
,
request
*
apiv2pb
.
UpdateResourceRequest
)
(
*
apiv2pb
.
UpdateResourceResponse
,
error
)
{
currentTs
:=
time
.
Now
()
.
Unix
()
update
:=
&
store
.
UpdateResource
{
ID
:
request
.
Id
,
UpdatedTs
:
&
currentTs
,
}
for
_
,
field
:=
range
request
.
UpdateMask
{
if
field
==
"filename"
{
update
.
Filename
=
&
request
.
Resource
.
Filename
}
else
if
field
==
"memo_id"
{
update
.
MemoID
=
request
.
Resource
.
MemoId
}
}
resource
,
err
:=
s
.
Store
.
UpdateResource
(
ctx
,
update
)
if
err
!=
nil
{
return
nil
,
status
.
Errorf
(
codes
.
Internal
,
"failed to update resource: %v"
,
err
)
}
return
&
apiv2pb
.
UpdateResourceResponse
{
Resource
:
convertResourceFromStore
(
resource
),
},
nil
}
func
(
s
*
ResourceService
)
DeleteResource
(
ctx
context
.
Context
,
request
*
apiv2pb
.
DeleteResourceRequest
)
(
*
apiv2pb
.
DeleteResourceResponse
,
error
)
{
user
,
err
:=
getCurrentUser
(
ctx
,
s
.
Store
)
if
err
!=
nil
{
...
...
api/v2/user_service.go
View file @
7dc4bc57
...
...
@@ -76,33 +76,33 @@ func (s *UserService) UpdateUser(ctx context.Context, request *apiv2pb.UpdateUse
ID
:
currentUser
.
ID
,
UpdatedTs
:
&
currentTs
,
}
for
_
,
path
:=
range
request
.
UpdateMask
{
if
path
==
"username"
{
for
_
,
field
:=
range
request
.
UpdateMask
{
if
field
==
"username"
{
if
!
usernameMatcher
.
MatchString
(
strings
.
ToLower
(
request
.
User
.
Username
))
{
return
nil
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"invalid username: %s"
,
request
.
User
.
Username
)
}
update
.
Username
=
&
request
.
User
.
Username
}
else
if
path
==
"nickname"
{
}
else
if
field
==
"nickname"
{
update
.
Nickname
=
&
request
.
User
.
Nickname
}
else
if
path
==
"email"
{
}
else
if
field
==
"email"
{
update
.
Email
=
&
request
.
User
.
Email
}
else
if
path
==
"avatar_url"
{
}
else
if
field
==
"avatar_url"
{
update
.
AvatarURL
=
&
request
.
User
.
AvatarUrl
}
else
if
path
==
"role"
{
}
else
if
field
==
"role"
{
role
:=
convertUserRoleToStore
(
request
.
User
.
Role
)
update
.
Role
=
&
role
}
else
if
path
==
"password"
{
}
else
if
field
==
"password"
{
passwordHash
,
err
:=
bcrypt
.
GenerateFromPassword
([]
byte
(
request
.
User
.
Password
),
bcrypt
.
DefaultCost
)
if
err
!=
nil
{
return
nil
,
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"failed to generate password hash"
)
.
SetInternal
(
err
)
}
passwordHashStr
:=
string
(
passwordHash
)
update
.
PasswordHash
=
&
passwordHashStr
}
else
if
path
==
"row_status"
{
}
else
if
field
==
"row_status"
{
rowStatus
:=
convertRowStatusToStore
(
request
.
User
.
RowStatus
)
update
.
RowStatus
=
&
rowStatus
}
else
{
return
nil
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"invalid update path: %s"
,
path
)
return
nil
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"invalid update path: %s"
,
field
)
}
}
...
...
proto/api/v2/resource_service.proto
View file @
7dc4bc57
...
...
@@ -9,9 +9,16 @@ import "google/protobuf/timestamp.proto";
option
go_package
=
"gen/api/v2"
;
service
ResourceService
{
rpc
CreateResource
(
CreateResourceRequest
)
returns
(
CreateResourceResponse
)
{
option
(
google.api.http
)
=
{
post
:
"/api/v2/resources"
};
}
rpc
ListResources
(
ListResourcesRequest
)
returns
(
ListResourcesResponse
)
{
option
(
google.api.http
)
=
{
get
:
"/api/v2/resources"
};
}
rpc
UpdateResource
(
UpdateResourceRequest
)
returns
(
UpdateResourceResponse
)
{
option
(
google.api.http
)
=
{
put
:
"/api/v2/resources/{id}"
};
option
(
google.api.method_signature
)
=
"id"
;
}
rpc
DeleteResource
(
DeleteResourceRequest
)
returns
(
DeleteResourceResponse
)
{
option
(
google.api.http
)
=
{
get
:
"/api/v2/resources/{id}"
};
option
(
google.api.method_signature
)
=
"id"
;
...
...
@@ -28,12 +35,35 @@ message Resource {
optional
int32
memo_id
=
7
;
}
message
CreateResourceRequest
{
string
filename
=
1
;
string
external_link
=
2
;
string
type
=
3
;
optional
int32
memo_id
=
4
;
}
message
CreateResourceResponse
{
Resource
resource
=
1
;
}
message
ListResourcesRequest
{}
message
ListResourcesResponse
{
repeated
Resource
resources
=
1
;
}
message
UpdateResourceRequest
{
int32
id
=
1
;
Resource
resource
=
2
;
repeated
string
update_mask
=
3
;
}
message
UpdateResourceResponse
{
Resource
resource
=
1
;
}
message
DeleteResourceRequest
{
int32
id
=
1
;
}
...
...
proto/gen/api/v2/README.md
View file @
7dc4bc57
...
...
@@ -24,11 +24,15 @@
-
[
MemoService
](
#memos-api-v2-MemoService
)
-
[
api/v2/resource_service.proto
](
#api_v2_resource_service-proto
)
-
[
CreateResourceRequest
](
#memos-api-v2-CreateResourceRequest
)
-
[
CreateResourceResponse
](
#memos-api-v2-CreateResourceResponse
)
-
[
DeleteResourceRequest
](
#memos-api-v2-DeleteResourceRequest
)
-
[
DeleteResourceResponse
](
#memos-api-v2-DeleteResourceResponse
)
-
[
ListResourcesRequest
](
#memos-api-v2-ListResourcesRequest
)
-
[
ListResourcesResponse
](
#memos-api-v2-ListResourcesResponse
)
-
[
Resource
](
#memos-api-v2-Resource
)
-
[
UpdateResourceRequest
](
#memos-api-v2-UpdateResourceRequest
)
-
[
UpdateResourceResponse
](
#memos-api-v2-UpdateResourceResponse
)
-
[
ResourceService
](
#memos-api-v2-ResourceService
)
...
...
@@ -330,6 +334,39 @@
<a
name=
"memos-api-v2-CreateResourceRequest"
></a>
### CreateResourceRequest
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| filename |
[
string
](
#string
)
| | |
| external_link |
[
string
](
#string
)
| | |
| type |
[
string
](
#string
)
| | |
| memo_id |
[
int32
](
#int32
)
| optional | |
<a
name=
"memos-api-v2-CreateResourceResponse"
></a>
### CreateResourceResponse
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| resource |
[
Resource
](
#memos-api-v2-Resource
)
| | |
<a
name=
"memos-api-v2-DeleteResourceRequest"
></a>
### DeleteResourceRequest
...
...
@@ -400,6 +437,38 @@
<a
name=
"memos-api-v2-UpdateResourceRequest"
></a>
### UpdateResourceRequest
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| id |
[
int32
](
#int32
)
| | |
| resource |
[
Resource
](
#memos-api-v2-Resource
)
| | |
| update_mask |
[
string
](
#string
)
| repeated | |
<a
name=
"memos-api-v2-UpdateResourceResponse"
></a>
### UpdateResourceResponse
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| resource |
[
Resource
](
#memos-api-v2-Resource
)
| | |
...
...
@@ -414,7 +483,9 @@
| Method Name | Request Type | Response Type | Description |
| ----------- | ------------ | ------------- | ------------|
| CreateResource |
[
CreateResourceRequest
](
#memos-api-v2-CreateResourceRequest
)
|
[
CreateResourceResponse
](
#memos-api-v2-CreateResourceResponse
)
| |
| ListResources |
[
ListResourcesRequest
](
#memos-api-v2-ListResourcesRequest
)
|
[
ListResourcesResponse
](
#memos-api-v2-ListResourcesResponse
)
| |
| UpdateResource |
[
UpdateResourceRequest
](
#memos-api-v2-UpdateResourceRequest
)
|
[
UpdateResourceResponse
](
#memos-api-v2-UpdateResourceResponse
)
| |
| DeleteResource |
[
DeleteResourceRequest
](
#memos-api-v2-DeleteResourceRequest
)
|
[
DeleteResourceResponse
](
#memos-api-v2-DeleteResourceResponse
)
| |
...
...
proto/gen/api/v2/resource_service.pb.go
View file @
7dc4bc57
This diff is collapsed.
Click to expand it.
proto/gen/api/v2/resource_service.pb.gw.go
View file @
7dc4bc57
This diff is collapsed.
Click to expand it.
proto/gen/api/v2/resource_service_grpc.pb.go
View file @
7dc4bc57
...
...
@@ -19,7 +19,9 @@ import (
const
_
=
grpc
.
SupportPackageIsVersion7
const
(
ResourceService_CreateResource_FullMethodName
=
"/memos.api.v2.ResourceService/CreateResource"
ResourceService_ListResources_FullMethodName
=
"/memos.api.v2.ResourceService/ListResources"
ResourceService_UpdateResource_FullMethodName
=
"/memos.api.v2.ResourceService/UpdateResource"
ResourceService_DeleteResource_FullMethodName
=
"/memos.api.v2.ResourceService/DeleteResource"
)
...
...
@@ -27,7 +29,9 @@ const (
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
type
ResourceServiceClient
interface
{
CreateResource
(
ctx
context
.
Context
,
in
*
CreateResourceRequest
,
opts
...
grpc
.
CallOption
)
(
*
CreateResourceResponse
,
error
)
ListResources
(
ctx
context
.
Context
,
in
*
ListResourcesRequest
,
opts
...
grpc
.
CallOption
)
(
*
ListResourcesResponse
,
error
)
UpdateResource
(
ctx
context
.
Context
,
in
*
UpdateResourceRequest
,
opts
...
grpc
.
CallOption
)
(
*
UpdateResourceResponse
,
error
)
DeleteResource
(
ctx
context
.
Context
,
in
*
DeleteResourceRequest
,
opts
...
grpc
.
CallOption
)
(
*
DeleteResourceResponse
,
error
)
}
...
...
@@ -39,6 +43,15 @@ func NewResourceServiceClient(cc grpc.ClientConnInterface) ResourceServiceClient
return
&
resourceServiceClient
{
cc
}
}
func
(
c
*
resourceServiceClient
)
CreateResource
(
ctx
context
.
Context
,
in
*
CreateResourceRequest
,
opts
...
grpc
.
CallOption
)
(
*
CreateResourceResponse
,
error
)
{
out
:=
new
(
CreateResourceResponse
)
err
:=
c
.
cc
.
Invoke
(
ctx
,
ResourceService_CreateResource_FullMethodName
,
in
,
out
,
opts
...
)
if
err
!=
nil
{
return
nil
,
err
}
return
out
,
nil
}
func
(
c
*
resourceServiceClient
)
ListResources
(
ctx
context
.
Context
,
in
*
ListResourcesRequest
,
opts
...
grpc
.
CallOption
)
(
*
ListResourcesResponse
,
error
)
{
out
:=
new
(
ListResourcesResponse
)
err
:=
c
.
cc
.
Invoke
(
ctx
,
ResourceService_ListResources_FullMethodName
,
in
,
out
,
opts
...
)
...
...
@@ -48,6 +61,15 @@ func (c *resourceServiceClient) ListResources(ctx context.Context, in *ListResou
return
out
,
nil
}
func
(
c
*
resourceServiceClient
)
UpdateResource
(
ctx
context
.
Context
,
in
*
UpdateResourceRequest
,
opts
...
grpc
.
CallOption
)
(
*
UpdateResourceResponse
,
error
)
{
out
:=
new
(
UpdateResourceResponse
)
err
:=
c
.
cc
.
Invoke
(
ctx
,
ResourceService_UpdateResource_FullMethodName
,
in
,
out
,
opts
...
)
if
err
!=
nil
{
return
nil
,
err
}
return
out
,
nil
}
func
(
c
*
resourceServiceClient
)
DeleteResource
(
ctx
context
.
Context
,
in
*
DeleteResourceRequest
,
opts
...
grpc
.
CallOption
)
(
*
DeleteResourceResponse
,
error
)
{
out
:=
new
(
DeleteResourceResponse
)
err
:=
c
.
cc
.
Invoke
(
ctx
,
ResourceService_DeleteResource_FullMethodName
,
in
,
out
,
opts
...
)
...
...
@@ -61,7 +83,9 @@ func (c *resourceServiceClient) DeleteResource(ctx context.Context, in *DeleteRe
// All implementations must embed UnimplementedResourceServiceServer
// for forward compatibility
type
ResourceServiceServer
interface
{
CreateResource
(
context
.
Context
,
*
CreateResourceRequest
)
(
*
CreateResourceResponse
,
error
)
ListResources
(
context
.
Context
,
*
ListResourcesRequest
)
(
*
ListResourcesResponse
,
error
)
UpdateResource
(
context
.
Context
,
*
UpdateResourceRequest
)
(
*
UpdateResourceResponse
,
error
)
DeleteResource
(
context
.
Context
,
*
DeleteResourceRequest
)
(
*
DeleteResourceResponse
,
error
)
mustEmbedUnimplementedResourceServiceServer
()
}
...
...
@@ -70,9 +94,15 @@ type ResourceServiceServer interface {
type
UnimplementedResourceServiceServer
struct
{
}
func
(
UnimplementedResourceServiceServer
)
CreateResource
(
context
.
Context
,
*
CreateResourceRequest
)
(
*
CreateResourceResponse
,
error
)
{
return
nil
,
status
.
Errorf
(
codes
.
Unimplemented
,
"method CreateResource not implemented"
)
}
func
(
UnimplementedResourceServiceServer
)
ListResources
(
context
.
Context
,
*
ListResourcesRequest
)
(
*
ListResourcesResponse
,
error
)
{
return
nil
,
status
.
Errorf
(
codes
.
Unimplemented
,
"method ListResources not implemented"
)
}
func
(
UnimplementedResourceServiceServer
)
UpdateResource
(
context
.
Context
,
*
UpdateResourceRequest
)
(
*
UpdateResourceResponse
,
error
)
{
return
nil
,
status
.
Errorf
(
codes
.
Unimplemented
,
"method UpdateResource not implemented"
)
}
func
(
UnimplementedResourceServiceServer
)
DeleteResource
(
context
.
Context
,
*
DeleteResourceRequest
)
(
*
DeleteResourceResponse
,
error
)
{
return
nil
,
status
.
Errorf
(
codes
.
Unimplemented
,
"method DeleteResource not implemented"
)
}
...
...
@@ -89,6 +119,24 @@ func RegisterResourceServiceServer(s grpc.ServiceRegistrar, srv ResourceServiceS
s
.
RegisterService
(
&
ResourceService_ServiceDesc
,
srv
)
}
func
_ResourceService_CreateResource_Handler
(
srv
interface
{},
ctx
context
.
Context
,
dec
func
(
interface
{})
error
,
interceptor
grpc
.
UnaryServerInterceptor
)
(
interface
{},
error
)
{
in
:=
new
(
CreateResourceRequest
)
if
err
:=
dec
(
in
);
err
!=
nil
{
return
nil
,
err
}
if
interceptor
==
nil
{
return
srv
.
(
ResourceServiceServer
)
.
CreateResource
(
ctx
,
in
)
}
info
:=
&
grpc
.
UnaryServerInfo
{
Server
:
srv
,
FullMethod
:
ResourceService_CreateResource_FullMethodName
,
}
handler
:=
func
(
ctx
context
.
Context
,
req
interface
{})
(
interface
{},
error
)
{
return
srv
.
(
ResourceServiceServer
)
.
CreateResource
(
ctx
,
req
.
(
*
CreateResourceRequest
))
}
return
interceptor
(
ctx
,
in
,
info
,
handler
)
}
func
_ResourceService_ListResources_Handler
(
srv
interface
{},
ctx
context
.
Context
,
dec
func
(
interface
{})
error
,
interceptor
grpc
.
UnaryServerInterceptor
)
(
interface
{},
error
)
{
in
:=
new
(
ListResourcesRequest
)
if
err
:=
dec
(
in
);
err
!=
nil
{
...
...
@@ -107,6 +155,24 @@ func _ResourceService_ListResources_Handler(srv interface{}, ctx context.Context
return
interceptor
(
ctx
,
in
,
info
,
handler
)
}
func
_ResourceService_UpdateResource_Handler
(
srv
interface
{},
ctx
context
.
Context
,
dec
func
(
interface
{})
error
,
interceptor
grpc
.
UnaryServerInterceptor
)
(
interface
{},
error
)
{
in
:=
new
(
UpdateResourceRequest
)
if
err
:=
dec
(
in
);
err
!=
nil
{
return
nil
,
err
}
if
interceptor
==
nil
{
return
srv
.
(
ResourceServiceServer
)
.
UpdateResource
(
ctx
,
in
)
}
info
:=
&
grpc
.
UnaryServerInfo
{
Server
:
srv
,
FullMethod
:
ResourceService_UpdateResource_FullMethodName
,
}
handler
:=
func
(
ctx
context
.
Context
,
req
interface
{})
(
interface
{},
error
)
{
return
srv
.
(
ResourceServiceServer
)
.
UpdateResource
(
ctx
,
req
.
(
*
UpdateResourceRequest
))
}
return
interceptor
(
ctx
,
in
,
info
,
handler
)
}
func
_ResourceService_DeleteResource_Handler
(
srv
interface
{},
ctx
context
.
Context
,
dec
func
(
interface
{})
error
,
interceptor
grpc
.
UnaryServerInterceptor
)
(
interface
{},
error
)
{
in
:=
new
(
DeleteResourceRequest
)
if
err
:=
dec
(
in
);
err
!=
nil
{
...
...
@@ -132,10 +198,18 @@ var ResourceService_ServiceDesc = grpc.ServiceDesc{
ServiceName
:
"memos.api.v2.ResourceService"
,
HandlerType
:
(
*
ResourceServiceServer
)(
nil
),
Methods
:
[]
grpc
.
MethodDesc
{
{
MethodName
:
"CreateResource"
,
Handler
:
_ResourceService_CreateResource_Handler
,
},
{
MethodName
:
"ListResources"
,
Handler
:
_ResourceService_ListResources_Handler
,
},
{
MethodName
:
"UpdateResource"
,
Handler
:
_ResourceService_UpdateResource_Handler
,
},
{
MethodName
:
"DeleteResource"
,
Handler
:
_ResourceService_DeleteResource_Handler
,
...
...
web/src/components/ChangeResourceFilenameDialog.tsx
deleted
100644 → 0
View file @
2e82ba50
import
{
useState
}
from
"react"
;
import
{
toast
}
from
"react-hot-toast"
;
import
{
useResourceStore
}
from
"@/store/module"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
import
{
generateDialog
}
from
"./Dialog"
;
import
Icon
from
"./Icon"
;
import
"@/less/change-resource-filename-dialog.less"
;
interface
Props
extends
DialogProps
{
resourceId
:
ResourceId
;
resourceFilename
:
string
;
}
const
validateFilename
=
(
filename
:
string
):
boolean
=>
{
if
(
filename
.
length
===
0
||
filename
.
length
>=
128
)
{
return
false
;
}
const
startReg
=
/^
([
+
\-
.
])
.*/
;
const
illegalReg
=
/
[/
@#$%^&*()[
\]]
/
;
if
(
startReg
.
test
(
filename
)
||
illegalReg
.
test
(
filename
))
{
return
false
;
}
return
true
;
};
const
ChangeResourceFilenameDialog
:
React
.
FC
<
Props
>
=
(
props
:
Props
)
=>
{
const
{
destroy
,
resourceId
,
resourceFilename
}
=
props
;
const
t
=
useTranslate
();
const
resourceStore
=
useResourceStore
();
const
[
filename
,
setFilename
]
=
useState
<
string
>
(
resourceFilename
);
const
handleFilenameChanged
=
(
e
:
React
.
ChangeEvent
<
HTMLInputElement
>
)
=>
{
const
nextUsername
=
e
.
target
.
value
as
string
;
setFilename
(
nextUsername
);
};
const
handleCloseBtnClick
=
()
=>
{
destroy
();
};
const
handleSaveBtnClick
=
async
()
=>
{
if
(
filename
===
resourceFilename
)
{
handleCloseBtnClick
();
return
;
}
if
(
!
validateFilename
(
filename
))
{
toast
.
error
(
t
(
"message.invalid-resource-filename"
));
return
;
}
try
{
await
resourceStore
.
patchResource
({
id
:
resourceId
,
filename
:
filename
,
});
toast
.
success
(
t
(
"message.resource-filename-updated"
));
handleCloseBtnClick
();
}
catch
(
error
:
any
)
{
console
.
error
(
error
);
toast
.
error
(
error
.
response
.
data
.
message
);
}
};
return
(
<>
<
div
className=
"dialog-header-container"
>
<
p
className=
"title-text"
>
{
t
(
"message.change-resource-filename"
)
}
</
p
>
<
button
className=
"btn close-btn"
onClick=
{
handleCloseBtnClick
}
>
<
Icon
.
X
/>
</
button
>
</
div
>
<
div
className=
"dialog-content-container"
>
<
input
className=
"input-text"
type=
"text"
value=
{
filename
}
onChange=
{
handleFilenameChanged
}
/>
<
div
className=
"btns-container"
>
<
button
className=
"btn-text"
onClick=
{
handleCloseBtnClick
}
>
{
t
(
"common.cancel"
)
}
</
button
>
<
button
className=
"btn-primary"
onClick=
{
handleSaveBtnClick
}
>
{
t
(
"common.save"
)
}
</
button
>
</
div
>
</
div
>
</>
);
};
function
showChangeResourceFilenameDialog
(
resourceId
:
ResourceId
,
resourceFilename
:
string
)
{
generateDialog
(
{
className
:
"change-resource-filename-dialog"
,
dialogName
:
"change-resource-filename-dialog"
,
},
ChangeResourceFilenameDialog
,
{
resourceId
,
resourceFilename
,
}
);
}
export
default
showChangeResourceFilenameDialog
;
web/src/components/MemoEditor/index.tsx
View file @
7dc4bc57
...
...
@@ -226,9 +226,12 @@ const MemoEditor = (props: Props) => {
if
(
resource
)
{
uploadedResourceList
.
push
(
resource
);
if
(
memoId
)
{
await
resourceStore
.
patch
Resource
({
await
resourceStore
.
update
Resource
({
id
:
resource
.
id
,
memoId
,
resource
:
Resource
.
fromPartial
({
memoId
,
}),
updateMask
:
[
"memo_id"
],
});
}
}
...
...
web/src/helpers/api.ts
View file @
7dc4bc57
...
...
@@ -135,10 +135,6 @@ export function deleteMemo(memoId: MemoId) {
return
axios
.
delete
(
`/api/v1/memo/
${
memoId
}
`
);
}
export
function
getResourceList
()
{
return
axios
.
get
<
Resource
[]
>
(
"/api/v1/resource"
);
}
export
function
createResource
(
resourceCreate
:
ResourceCreate
)
{
return
axios
.
post
<
Resource
>
(
"/api/v1/resource"
,
resourceCreate
);
}
...
...
@@ -147,14 +143,6 @@ export function createResourceWithBlob(formData: FormData) {
return
axios
.
post
<
Resource
>
(
"/api/v1/resource/blob"
,
formData
);
}
export
function
patchResource
(
resourcePatch
:
ResourcePatch
)
{
return
axios
.
patch
<
Resource
>
(
`/api/v1/resource/
${
resourcePatch
.
id
}
`
,
resourcePatch
);
}
export
function
deleteResourceById
(
id
:
ResourceId
)
{
return
axios
.
delete
(
`/api/v1/resource/
${
id
}
`
);
}
export
function
getTagSuggestionList
()
{
return
axios
.
get
<
string
[]
>
(
`/api/v1/tag/suggestion`
);
}
...
...
web/src/store/module/resource.ts
View file @
7dc4bc57
import
{
resourceServiceClient
}
from
"@/grpcweb"
;
import
*
as
api
from
"@/helpers/api"
;
import
{
Resource
}
from
"@/types/proto/api/v2/resource_service"
;
import
{
Resource
,
UpdateResourceRequest
}
from
"@/types/proto/api/v2/resource_service"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
import
store
,
{
useAppSelector
}
from
"../"
;
import
{
deleteResource
,
patchResource
,
setResources
}
from
"../reducer/resource"
;
import
{
patchResource
,
setResources
}
from
"../reducer/resource"
;
import
{
useGlobalStore
}
from
"./global"
;
export
const
useResourceStore
=
()
=>
{
...
...
@@ -16,11 +17,6 @@ export const useResourceStore = () => {
getState
:
()
=>
{
return
store
.
getState
().
resource
;
},
async
fetchResourceList
():
Promise
<
Resource
[]
>
{
const
{
data
:
resourceList
}
=
await
api
.
getResourceList
();
store
.
dispatch
(
setResources
(
resourceList
));
return
resourceList
;
},
async
createResource
(
resourceCreate
:
ResourceCreate
):
Promise
<
Resource
>
{
const
{
data
:
resource
}
=
await
api
.
createResource
(
resourceCreate
);
const
resourceList
=
state
.
resources
;
...
...
@@ -40,14 +36,13 @@ export const useResourceStore = () => {
store
.
dispatch
(
setResources
([
resource
,
...
resourceList
]));
return
resource
;
},
async
patchResource
(
resourcePatch
:
ResourcePatch
):
Promise
<
Resource
>
{
const
{
data
:
resource
}
=
await
api
.
patchResource
(
resourcePatch
);
async
updateResource
(
request
:
UpdateResourceRequest
):
Promise
<
Resource
>
{
const
{
resource
}
=
await
resourceServiceClient
.
updateResource
(
request
);
if
(
!
resource
)
{
throw
new
Error
(
"resource is null"
);
}
store
.
dispatch
(
patchResource
(
resource
));
return
resource
;
},
async
deleteResourceById
(
id
:
ResourceId
)
{
await
api
.
deleteResourceById
(
id
);
store
.
dispatch
(
deleteResource
(
id
));
},
};
};
web/src/store/reducer/resource.ts
View file @
7dc4bc57
...
...
@@ -39,17 +39,9 @@ const resourceSlice = createSlice({
}),
};
},
deleteResource
:
(
state
,
action
:
PayloadAction
<
ResourceId
>
)
=>
{
return
{
...
state
,
resources
:
state
.
resources
.
filter
((
resource
)
=>
{
return
resource
.
id
!==
action
.
payload
;
}),
};
},
},
});
export
const
{
setResources
,
upsertResources
,
patchResource
,
deleteResource
}
=
resourceSlice
.
actions
;
export
const
{
setResources
,
upsertResources
,
patchResource
}
=
resourceSlice
.
actions
;
export
default
resourceSlice
.
reducer
;
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