feat: use predefined filters

This commit is contained in:
Aien Saidi 2021-03-24 01:16:51 +01:00 committed by Sascha
parent 92ce861fab
commit f82071a3d7
2 changed files with 62 additions and 5 deletions

View File

@ -153,7 +153,7 @@ function FilterDropdown({
PaperProps={{
style: {
maxHeight: ITEM_HEIGHT * 4.5,
width: '20ch',
width: '25ch',
},
}}
>

View File

@ -1,19 +1,23 @@
import { ApolloError } from '@apollo/client';
import { pipe } from '@arrows/composition';
import React, { useState, useEffect, useRef } from 'react';
import { useLocation, useHistory, Link } from 'react-router-dom';
import { Button } from '@material-ui/core';
import { Button, FormControl, Menu, MenuItem } from '@material-ui/core';
import IconButton from '@material-ui/core/IconButton';
import InputBase from '@material-ui/core/InputBase';
import Paper from '@material-ui/core/Paper';
import { makeStyles, Theme } from '@material-ui/core/styles';
import ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';
import ErrorOutline from '@material-ui/icons/ErrorOutline';
import KeyboardArrowLeft from '@material-ui/icons/KeyboardArrowLeft';
import KeyboardArrowRight from '@material-ui/icons/KeyboardArrowRight';
import Skeleton from '@material-ui/lab/Skeleton';
import { useCurrentIdentityQuery } from '../../components/CurrentIdentity/CurrentIdentity.generated';
import IfLoggedIn from 'src/components/IfLoggedIn/IfLoggedIn';
import { parse, Query, stringify } from './Filter';
import FilterToolbar from './FilterToolbar';
import List from './List';
import { useListBugsQuery } from './ListQuery.generated';
@ -192,6 +196,8 @@ function ListQuery() {
const query = params.has('q') ? params.get('q') || '' : 'status:open';
const [input, setInput] = useState(query);
const [filterMenuIsOpen, setFilterMenuIsOpen] = useState(false);
const filterButtonRef = useRef<HTMLButtonElement>(null);
const classes = useStyles({ searching: !!input });
@ -293,14 +299,65 @@ function ListQuery() {
history.push(queryLocation(input));
};
const {
loading: ciqLoading,
error: ciqError,
data: ciqData,
} = useCurrentIdentityQuery();
if (ciqError || ciqLoading || !ciqData?.repository?.userIdentity) {
return null;
}
const user = ciqData.repository.userIdentity;
const loc = pipe(stringify, queryLocation);
const qparams: Query = parse(query);
const replaceParam = (key: string, value: string) => (
params: Query
): Query => ({
...params,
[key]: [value],
});
return (
<Paper className={classes.main}>
<header className={classes.header}>
<div className="filterissueContainer">
<form onSubmit={formSubmit}>
<label className={classes.filterissueLabel} htmlFor="issuefilter">
Filter
</label>
<FormControl>
<Button
aria-haspopup="true"
ref={filterButtonRef}
onClick={(e) => setFilterMenuIsOpen(true)}
>
Filter <ArrowDropDownIcon />
</Button>
<Menu
open={filterMenuIsOpen}
onClose={() => setFilterMenuIsOpen(false)}
getContentAnchorEl={null}
anchorEl={filterButtonRef.current}
anchorOrigin={{
vertical: 'bottom',
horizontal: 'left',
}}
transformOrigin={{
vertical: 'top',
horizontal: 'left',
}}
>
<MenuItem
component={Link}
to={pipe(
replaceParam('author', user.displayName),
replaceParam('sort', 'creation'),
loc
)(qparams)}
onClick={() => setFilterMenuIsOpen(false)}
>
Your newest issues
</MenuItem>
</Menu>
</FormControl>
<InputBase
id="issuefilter"
placeholder="Filter"