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

Refactoring the Members page #394

Merged
merged 2 commits into from
Apr 2, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion ui/src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import Home from "./views/Home"
import Repo from "./views/Repo"
import Deployment from "./views/Deployment"
import Settings from "./views/Settings"
import Members from "./views/Members"
import Members from "./views/members"

function App(): JSX.Element {
return (
Expand Down
40 changes: 0 additions & 40 deletions ui/src/components/MemberList.tsx

This file was deleted.

10 changes: 4 additions & 6 deletions ui/src/components/Pagination.tsx
Original file line number Diff line number Diff line change
@@ -1,19 +1,17 @@
import { Button } from 'antd'

interface PaginationProps {
page: number
isLast: boolean
disabledPrev: boolean
disabledNext: boolean
onClickPrev(): void
onClickNext(): void
}

export default function Pagination(props: PaginationProps): JSX.Element {
const isFirst = props.page <= 1

return (
<div>
<Button disabled={isFirst} onClick={props.onClickPrev} style={{borderTopRightRadius: 0, borderBottomRightRadius: 0}}>Prev</Button>
<Button disabled={props.isLast} onClick={props.onClickNext} style={{borderTopLeftRadius: 0, borderBottomLeftRadius: 0}}>Next</Button>
<Button disabled={props.disabledPrev} onClick={props.onClickPrev} style={{borderTopRightRadius: 0, borderBottomRightRadius: 0}}>Prev</Button>
<Button disabled={props.disabledNext} onClick={props.onClickNext} style={{borderTopLeftRadius: 0, borderBottomLeftRadius: 0}}>Next</Button>
</div>
)
}
9 changes: 6 additions & 3 deletions ui/src/views/Home.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,6 @@ export default function Home(): JSX.Element {
f()
}

const isLast = repos.length < perPage

if (loading) {
return (
<Main>
Expand Down Expand Up @@ -95,7 +93,12 @@ export default function Home(): JSX.Element {
<RepoList repos={repos}></RepoList>
</div>
<div style={{marginTop: "20px", textAlign: "center"}}>
<Pagination page={page} isLast={isLast} onClickPrev={onClickPrev} onClickNext={onClickNext} ></Pagination>
<Pagination
disabledPrev={page <= 1}
disabledNext={repos.length < perPage}
onClickPrev={onClickPrev}
onClickNext={onClickNext}
/>
</div>
</Main>
)
Expand Down
9 changes: 6 additions & 3 deletions ui/src/views/RepoHome.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,6 @@ export default function RepoHome(): JSX.Element {
// eslint-disable-next-line
}, [dispatch])

const isLast = deployments.length < perPage

const onChangeEnv = (env: string) => {
dispatch(slice.actions.setEnv(env))
dispatch(fetchDeployments())
Expand Down Expand Up @@ -85,7 +83,12 @@ export default function RepoHome(): JSX.Element {
}
</div>
<div style={{marginTop: "20px", textAlign: "center"}}>
<Pagination page={page} isLast={isLast} onClickPrev={onClickPrev} onClickNext={onClickNext} ></Pagination>
<Pagination
disabledPrev={page <= 1}
disabledNext={deployments.length < perPage}
onClickPrev={onClickPrev}
onClickNext={onClickNext}
/>
</div>
</div>
)
Expand Down
51 changes: 51 additions & 0 deletions ui/src/views/members/MemberList.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import { shallowEqual } from "react-redux"
import { List, Switch, Button, Avatar } from "antd"

import { useAppSelector, useAppDispatch } from "../../redux/hooks"
import { updateUser, deleteUser } from "../../redux/members"

import { User } from "../../models"

export default function MemberList(): JSX.Element {
const { users } = useAppSelector(state => state.members, shallowEqual)
const dispatch = useAppDispatch()

const onChangeSwitch = (user: User, checked: boolean) => {
dispatch(updateUser({user, admin: checked}))
}

const onClickDelete = (user: User) => {
dispatch(deleteUser(user))
}

return (
<List
itemLayout="horizontal"
dataSource={users}
renderItem={(user) => (
<List.Item
actions={[
<Switch
checkedChildren="Adm"
unCheckedChildren="Mem"
checked={user.admin}
onChange={(checked) => {onChangeSwitch(user, checked)}}
/>,
<Button
type="primary"
danger
onClick={() => {onClickDelete(user)}}
>
Delete
</Button>
]}
>
<List.Item.Meta
avatar={<Avatar src={user.avatar} />}
title={user.login}
/>
</List.Item>
)}
/>
)
}
32 changes: 9 additions & 23 deletions ui/src/views/Members.tsx → ui/src/views/members/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,16 @@ import { shallowEqual } from "react-redux"
import { Input } from "antd"
import { Helmet } from "react-helmet"

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

import { User } from "../models"

import Main from './Main'
import MemberList from "../components/MemberList"
import Pagination from "../components/Pagination"
import Main from '../Main'
import MemberList from "./MemberList"
import Pagination from "../../components/Pagination"

const { Search } = Input

export default function Member(): JSX.Element {
export default function Members(): JSX.Element {
const { users, page } = useAppSelector(state => state.members, shallowEqual)
const dispatch = useAppDispatch()

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

const onChangeSwitch = (user: User, checked: boolean) => {
dispatch(updateUser({user, admin: checked}))
}

const onClickDelete = (user: User) => {
dispatch(deleteUser(user))
}

const onClickPrev = () => {
dispatch(slice.actions.decreasePage())
dispatch(fetchUsers())
Expand All @@ -57,16 +47,12 @@ export default function Member(): JSX.Element {
<Search placeholder="Search user ..." onSearch={onSearch} enterButton />
</div>
<div style={{marginTop: "40px"}}>
<MemberList
users={users}
onChangeSwitch={onChangeSwitch}
onClickDelete={onClickDelete}
/>
<MemberList/>
</div>
<div style={{marginTop: "40px", textAlign: "center"}}>
<Pagination
page={page}
isLast={users.length !== perPage}
disabledPrev={page <= 1}
disabledNext={users.length < perPage}
onClickPrev={onClickPrev}
onClickNext={onClickNext}
/>
Expand Down