Skip to content
This repository was archived by the owner on May 30, 2024. It is now read-only.

Commit 7e3c9ea

Browse files
author
Noah Lee
authored
Refactoring the Members page (#394)
* Move the `MemberList` into the view * Fix the props of Pagination
1 parent e0c78b1 commit 7e3c9ea

File tree

7 files changed

+77
-76
lines changed

7 files changed

+77
-76
lines changed

Diff for: ui/src/App.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import Home from "./views/Home"
99
import Repo from "./views/Repo"
1010
import Deployment from "./views/Deployment"
1111
import Settings from "./views/Settings"
12-
import Members from "./views/Members"
12+
import Members from "./views/members"
1313

1414
function App(): JSX.Element {
1515
return (

Diff for: ui/src/components/MemberList.tsx

-40
This file was deleted.

Diff for: ui/src/components/Pagination.tsx

+4-6
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,17 @@
11
import { Button } from 'antd'
22

33
interface PaginationProps {
4-
page: number
5-
isLast: boolean
4+
disabledPrev: boolean
5+
disabledNext: boolean
66
onClickPrev(): void
77
onClickNext(): void
88
}
99

1010
export default function Pagination(props: PaginationProps): JSX.Element {
11-
const isFirst = props.page <= 1
12-
1311
return (
1412
<div>
15-
<Button disabled={isFirst} onClick={props.onClickPrev} style={{borderTopRightRadius: 0, borderBottomRightRadius: 0}}>Prev</Button>
16-
<Button disabled={props.isLast} onClick={props.onClickNext} style={{borderTopLeftRadius: 0, borderBottomLeftRadius: 0}}>Next</Button>
13+
<Button disabled={props.disabledPrev} onClick={props.onClickPrev} style={{borderTopRightRadius: 0, borderBottomRightRadius: 0}}>Prev</Button>
14+
<Button disabled={props.disabledNext} onClick={props.onClickNext} style={{borderTopLeftRadius: 0, borderBottomLeftRadius: 0}}>Next</Button>
1715
</div>
1816
)
1917
}

Diff for: ui/src/views/Home.tsx

+6-3
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,6 @@ export default function Home(): JSX.Element {
5757
f()
5858
}
5959

60-
const isLast = repos.length < perPage
61-
6260
if (loading) {
6361
return (
6462
<Main>
@@ -95,7 +93,12 @@ export default function Home(): JSX.Element {
9593
<RepoList repos={repos}></RepoList>
9694
</div>
9795
<div style={{marginTop: "20px", textAlign: "center"}}>
98-
<Pagination page={page} isLast={isLast} onClickPrev={onClickPrev} onClickNext={onClickNext} ></Pagination>
96+
<Pagination
97+
disabledPrev={page <= 1}
98+
disabledNext={repos.length < perPage}
99+
onClickPrev={onClickPrev}
100+
onClickNext={onClickNext}
101+
/>
99102
</div>
100103
</Main>
101104
)

Diff for: ui/src/views/RepoHome.tsx

+6-3
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,6 @@ export default function RepoHome(): JSX.Element {
4646
// eslint-disable-next-line
4747
}, [dispatch])
4848

49-
const isLast = deployments.length < perPage
50-
5149
const onChangeEnv = (env: string) => {
5250
dispatch(slice.actions.setEnv(env))
5351
dispatch(fetchDeployments())
@@ -85,7 +83,12 @@ export default function RepoHome(): JSX.Element {
8583
}
8684
</div>
8785
<div style={{marginTop: "20px", textAlign: "center"}}>
88-
<Pagination page={page} isLast={isLast} onClickPrev={onClickPrev} onClickNext={onClickNext} ></Pagination>
86+
<Pagination
87+
disabledPrev={page <= 1}
88+
disabledNext={deployments.length < perPage}
89+
onClickPrev={onClickPrev}
90+
onClickNext={onClickNext}
91+
/>
8992
</div>
9093
</div>
9194
)

Diff for: ui/src/views/members/MemberList.tsx

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import { shallowEqual } from "react-redux"
2+
import { List, Switch, Button, Avatar } from "antd"
3+
4+
import { useAppSelector, useAppDispatch } from "../../redux/hooks"
5+
import { updateUser, deleteUser } from "../../redux/members"
6+
7+
import { User } from "../../models"
8+
9+
export default function MemberList(): JSX.Element {
10+
const { users } = useAppSelector(state => state.members, shallowEqual)
11+
const dispatch = useAppDispatch()
12+
13+
const onChangeSwitch = (user: User, checked: boolean) => {
14+
dispatch(updateUser({user, admin: checked}))
15+
}
16+
17+
const onClickDelete = (user: User) => {
18+
dispatch(deleteUser(user))
19+
}
20+
21+
return (
22+
<List
23+
itemLayout="horizontal"
24+
dataSource={users}
25+
renderItem={(user) => (
26+
<List.Item
27+
actions={[
28+
<Switch
29+
checkedChildren="Adm"
30+
unCheckedChildren="Mem"
31+
checked={user.admin}
32+
onChange={(checked) => {onChangeSwitch(user, checked)}}
33+
/>,
34+
<Button
35+
type="primary"
36+
danger
37+
onClick={() => {onClickDelete(user)}}
38+
>
39+
Delete
40+
</Button>
41+
]}
42+
>
43+
<List.Item.Meta
44+
avatar={<Avatar src={user.avatar} />}
45+
title={user.login}
46+
/>
47+
</List.Item>
48+
)}
49+
/>
50+
)
51+
}

Diff for: ui/src/views/Members.tsx renamed to ui/src/views/members/index.tsx

+9-23
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,16 @@ import { shallowEqual } from "react-redux"
33
import { Input } from "antd"
44
import { Helmet } from "react-helmet"
55

6-
import { useAppSelector, useAppDispatch } from "../redux/hooks"
7-
import { membersSlice as slice, fetchUsers, updateUser, deleteUser, perPage } from "../redux/members"
6+
import { useAppSelector, useAppDispatch } from "../../redux/hooks"
7+
import { membersSlice as slice, fetchUsers, perPage } from "../../redux/members"
88

9-
import { User } from "../models"
10-
11-
import Main from './Main'
12-
import MemberList from "../components/MemberList"
13-
import Pagination from "../components/Pagination"
9+
import Main from '../Main'
10+
import MemberList from "./MemberList"
11+
import Pagination from "../../components/Pagination"
1412

1513
const { Search } = Input
1614

17-
export default function Member(): JSX.Element {
15+
export default function Members(): JSX.Element {
1816
const { users, page } = useAppSelector(state => state.members, shallowEqual)
1917
const dispatch = useAppDispatch()
2018

@@ -27,14 +25,6 @@ export default function Member(): JSX.Element {
2725
dispatch(fetchUsers())
2826
}
2927

30-
const onChangeSwitch = (user: User, checked: boolean) => {
31-
dispatch(updateUser({user, admin: checked}))
32-
}
33-
34-
const onClickDelete = (user: User) => {
35-
dispatch(deleteUser(user))
36-
}
37-
3828
const onClickPrev = () => {
3929
dispatch(slice.actions.decreasePage())
4030
dispatch(fetchUsers())
@@ -57,16 +47,12 @@ export default function Member(): JSX.Element {
5747
<Search placeholder="Search user ..." onSearch={onSearch} enterButton />
5848
</div>
5949
<div style={{marginTop: "40px"}}>
60-
<MemberList
61-
users={users}
62-
onChangeSwitch={onChangeSwitch}
63-
onClickDelete={onClickDelete}
64-
/>
50+
<MemberList/>
6551
</div>
6652
<div style={{marginTop: "40px", textAlign: "center"}}>
6753
<Pagination
68-
page={page}
69-
isLast={users.length !== perPage}
54+
disabledPrev={page <= 1}
55+
disabledNext={users.length < perPage}
7056
onClickPrev={onClickPrev}
7157
onClickNext={onClickNext}
7258
/>

0 commit comments

Comments
 (0)