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
d371cfd7
Commit
d371cfd7
authored
Jul 26, 2022
by
boojack
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
chore: update member list action buttons
parent
7b1bad5b
Changes
9
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
104 additions
and
14 deletions
+104
-14
ChangePasswordDialog.tsx
web/src/components/ChangePasswordDialog.tsx
+2
-0
ConfirmResetOpenIdDialog.tsx
web/src/components/ConfirmResetOpenIdDialog.tsx
+2
-0
MemberSection.tsx
web/src/components/Settings/MemberSection.tsx
+48
-5
MyAccountSection.tsx
web/src/components/Settings/MyAccountSection.tsx
+1
-0
api.ts
web/src/helpers/api.ts
+6
-2
dialog.less
web/src/less/dialog.less
+1
-1
member-section.less
web/src/less/settings/member-section.less
+26
-2
userService.ts
web/src/services/userService.ts
+10
-4
user.d.ts
web/src/types/modules/user.d.ts
+8
-0
No files found.
web/src/components/ChangePasswordDialog.tsx
View file @
d371cfd7
...
...
@@ -55,7 +55,9 @@ const ChangePasswordDialog: React.FC<Props> = ({ destroy }: Props) => {
}
try
{
const
user
=
userService
.
getState
().
user
as
User
;
await
userService
.
patchUser
({
id
:
user
.
id
,
password
:
newPassword
,
});
toastHelper
.
info
(
"Password changed."
);
...
...
web/src/components/ConfirmResetOpenIdDialog.tsx
View file @
d371cfd7
...
...
@@ -25,7 +25,9 @@ const ConfirmResetOpenIdDialog: React.FC<Props> = ({ destroy }: Props) => {
resetBtnClickLoadingState
.
setLoading
();
try
{
const
user
=
userService
.
getState
().
user
as
User
;
await
userService
.
patchUser
({
id
:
user
.
id
,
resetOpenId
:
true
,
});
}
catch
(
error
)
{
...
...
web/src/components/Settings/MemberSection.tsx
View file @
d371cfd7
import
React
,
{
useEffect
,
useState
}
from
"react"
;
import
{
isEmpty
}
from
"lodash-es"
;
import
{
userService
}
from
"../../services"
;
import
{
useAppSelector
}
from
"../../store"
;
import
*
as
api
from
"../../helpers/api"
;
import
toastHelper
from
"../Toast"
;
import
"../../less/settings/member-section.less"
;
...
...
@@ -12,6 +14,7 @@ interface State {
}
const
PreferencesSection
:
React
.
FC
<
Props
>
=
()
=>
{
const
currentUser
=
useAppSelector
((
state
)
=>
state
.
user
.
user
);
const
[
state
,
setState
]
=
useState
<
State
>
({
createUserEmail
:
""
,
createUserPassword
:
""
,
...
...
@@ -66,6 +69,30 @@ const PreferencesSection: React.FC<Props> = () => {
});
};
const
handleArchiveUserClick
=
async
(
user
:
User
)
=>
{
await
userService
.
patchUser
({
id
:
user
.
id
,
rowStatus
:
"ARCHIVED"
,
});
fetchUserList
();
};
const
handleRestoreUserClick
=
async
(
user
:
User
)
=>
{
await
userService
.
patchUser
({
id
:
user
.
id
,
rowStatus
:
"NORMAL"
,
});
fetchUserList
();
};
// TODO: show a dialog to confirm delete user.
const
handleDeleteUserClick
=
async
(
user
:
User
)
=>
{
await
userService
.
deleteUser
({
id
:
user
.
id
,
});
fetchUserList
();
};
return
(
<
div
className=
"section-container member-section-container"
>
<
p
className=
"title-text"
>
Create a member
</
p
>
...
...
@@ -86,15 +113,31 @@ const PreferencesSection: React.FC<Props> = () => {
<
div
className=
"member-container field-container"
>
<
span
className=
"field-text"
>
ID
</
span
>
<
span
className=
"field-text"
>
EMAIL
</
span
>
<
span
></
span
>
</
div
>
{
userList
.
map
((
user
)
=>
(
<
div
key=
{
user
.
id
}
className=
"member-container"
>
<
div
key=
{
user
.
id
}
className=
{
`member-container ${user.rowStatus === "ARCHIVED" ? "archived" : ""}`
}
>
<
span
className=
"field-text id-text"
>
{
user
.
id
}
</
span
>
<
span
className=
"field-text email-text"
>
{
user
.
email
}
</
span
>
{
/* TODO */
}
{
/* <div className="buttons-container">
<span>delete</span>
</div> */
}
<
div
className=
"buttons-container"
>
{
currentUser
?.
id
===
user
.
id
?
(
<
span
className=
"tip-text"
>
Yourself
</
span
>
)
:
user
.
rowStatus
===
"NORMAL"
?
(
<
span
className=
"btn archive"
onClick=
{
()
=>
handleArchiveUserClick
(
user
)
}
>
archive
</
span
>
)
:
(
<>
<
span
className=
"btn restore"
onClick=
{
()
=>
handleRestoreUserClick
(
user
)
}
>
restore
</
span
>
<
span
className=
"split-line"
>
/
</
span
>
<
span
className=
"btn delete"
onClick=
{
()
=>
handleDeleteUserClick
(
user
)
}
>
delete
</
span
>
</>
)
}
</
div
>
</
div
>
))
}
</
div
>
...
...
web/src/components/Settings/MyAccountSection.tsx
View file @
d371cfd7
...
...
@@ -39,6 +39,7 @@ const MyAccountSection: React.FC<Props> = () => {
try
{
await
userService
.
patchUser
({
id
:
user
.
id
,
name
:
username
,
});
toastHelper
.
info
(
"Username changed"
);
...
...
web/src/helpers/api.ts
View file @
d371cfd7
...
...
@@ -34,7 +34,7 @@ export function createUser(userCreate: UserCreate) {
return
axios
.
post
<
ResponseObject
<
User
>>
(
"/api/user"
,
userCreate
);
}
export
function
getUser
()
{
export
function
get
Myself
User
()
{
return
axios
.
get
<
ResponseObject
<
User
>>
(
"/api/user/me"
);
}
...
...
@@ -47,7 +47,11 @@ export function getUserById(id: number) {
}
export
function
patchUser
(
userPatch
:
UserPatch
)
{
return
axios
.
patch
<
ResponseObject
<
User
>>
(
"/api/user/me"
,
userPatch
);
return
axios
.
patch
<
ResponseObject
<
User
>>
(
`/api/user/
${
userPatch
.
id
}
`
,
userPatch
);
}
export
function
deleteUser
(
userDelete
:
UserDelete
)
{
return
axios
.
delete
(
`/api/user/
${
userDelete
.
id
}
`
);
}
export
function
getMemoList
(
memoFind
?:
MemoFind
)
{
...
...
web/src/less/dialog.less
View file @
d371cfd7
...
...
@@ -2,7 +2,7 @@
.dialog-wrapper {
.flex(column, flex-start, center);
@apply fixed top-0 left-0 w-full h-full pt-16 z-100
0
overflow-x-hidden overflow-y-scroll bg-transparent transition-all;
@apply fixed top-0 left-0 w-full h-full pt-16 z-100 overflow-x-hidden overflow-y-scroll bg-transparent transition-all;
.hide-scroll-bar();
&.showup {
...
...
web/src/less/settings/member-section.less
View file @
d371cfd7
...
...
@@ -32,7 +32,7 @@
}
> .member-container {
@apply w-full grid grid-cols-
5
border-b py-2;
@apply w-full grid grid-cols-
6
border-b py-2;
> .field-text {
@apply text-base pl-2 mr-4 w-16;
...
...
@@ -47,7 +47,31 @@
}
> .buttons-container {
@apply col-span-1;
@apply col-span-2;
> .btn {
@apply px-2 py-1 border rounded shadow hover:opacity-80;
&.archive {
@apply bg-yellow-100 text-yellow-600;
}
&.restore {
@apply bg-green-100 text-green-600;
}
&.delete {
@apply bg-red-100 text-red-600;
}
}
> .tip-text {
@apply text-gray-400;
}
> .split-line {
@apply font-mono text-gray-300 mx-1;
}
}
}
}
web/src/services/userService.ts
View file @
d371cfd7
...
...
@@ -33,7 +33,7 @@ const userService = {
}
}
const
{
data
:
user
}
=
(
await
api
.
getUser
()).
data
;
const
{
data
:
user
}
=
(
await
api
.
get
Myself
User
()).
data
;
if
(
user
)
{
store
.
dispatch
(
setUser
(
convertResponseModelUser
(
user
)));
}
...
...
@@ -53,7 +53,7 @@ const userService = {
},
doSignIn
:
async
()
=>
{
const
{
data
:
user
}
=
(
await
api
.
getUser
()).
data
;
const
{
data
:
user
}
=
(
await
api
.
get
Myself
User
()).
data
;
if
(
user
)
{
store
.
dispatch
(
setUser
(
convertResponseModelUser
(
user
)));
}
else
{
...
...
@@ -78,8 +78,14 @@ const userService = {
patchUser
:
async
(
userPatch
:
UserPatch
):
Promise
<
void
>
=>
{
const
{
data
}
=
(
await
api
.
patchUser
(
userPatch
)).
data
;
if
(
userPatch
.
id
===
store
.
getState
().
user
.
user
?.
id
)
{
const
user
=
convertResponseModelUser
(
data
);
store
.
dispatch
(
patchUser
(
user
));
}
},
deleteUser
:
async
(
userDelete
:
UserDelete
)
=>
{
await
api
.
deleteUser
(
userDelete
);
},
};
...
...
web/src/types/modules/user.d.ts
View file @
d371cfd7
...
...
@@ -22,7 +22,15 @@ interface UserCreate {
}
interface
UserPatch
{
id
:
UserId
;
rowStatus
?:
RowStatus
;
name
?:
string
;
password
?:
string
;
resetOpenId
?:
boolean
;
}
interface
UserDelete
{
id
:
UserId
;
}
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