feat: add search and filter network members

About #45
This commit is contained in:
NoobTW 2023-04-16 13:26:52 +08:00
commit cb6c64799c
No known key found for this signature in database
GPG key ID: 3C04B63FD6FB4159

View file

@ -3,8 +3,10 @@ import {
AccordionDetails, AccordionDetails,
AccordionSummary, AccordionSummary,
Checkbox, Checkbox,
Divider,
Grid, Grid,
IconButton, IconButton,
TextField,
Typography, Typography,
} from "@material-ui/core"; } from "@material-ui/core";
import ExpandMoreIcon from "@material-ui/icons/ExpandMore"; import ExpandMoreIcon from "@material-ui/icons/ExpandMore";
@ -24,6 +26,9 @@ import MemberSettings from "./components/MemberSettings";
function NetworkMembers({ network }) { function NetworkMembers({ network }) {
const { nwid } = useParams(); const { nwid } = useParams();
const [members, setMembers] = useState([]); const [members, setMembers] = useState([]);
const [filter, setFilter] = useState("");
const [filterActive, setFilterActive] = useState(false);
const [filterInactive, setFilterInactive] = useState(false);
const fetchData = useCallback(async () => { const fetchData = useCallback(async () => {
try { try {
@ -169,12 +174,45 @@ function NetworkMembers({ network }) {
<IconButton color="primary" onClick={fetchData}> <IconButton color="primary" onClick={fetchData}>
<RefreshIcon /> <RefreshIcon />
</IconButton> </IconButton>
<Grid container>
<Grid item sm={6}>
<Typography>Search (Addr/Name)</Typography>
<TextField
value={filter}
onChange={(e) => setFilter(e.target.value)}
/>
</Grid>
<Grid item sm="auto">
<Typography>Display Filter</Typography>
<Checkbox
checked={filterActive}
color="primary"
onChange={(e) => setFilterActive(e.target.checked)}
/>
<span>Active</span>
<Checkbox
checked={filterInactive}
color="primary"
onChange={(e) => setFilterInactive(e.target.checked)}
/>
<span>Inactive</span>
</Grid>
<Divider />
</Grid>
<Grid container> <Grid container>
{members.length ? ( {members.length ? (
<DataTable <DataTable
noHeader={true} noHeader={true}
columns={columns} columns={columns}
data={[...members]} data={[...members]
.filter((x) => {
return (
(x.name.includes(filter) || x.id.includes(filter)) &&
(filterActive ? x.online === 1 : true) &&
(filterInactive ? x.online === 0 : true)
)
})
}
/> />
) : ( ) : (
<Grid <Grid