aboutsummaryrefslogtreecommitdiffstats
path: root/webui/src/list/FilterToolbar.js
diff options
context:
space:
mode:
Diffstat (limited to 'webui/src/list/FilterToolbar.js')
-rw-r--r--webui/src/list/FilterToolbar.js60
1 files changed, 60 insertions, 0 deletions
diff --git a/webui/src/list/FilterToolbar.js b/webui/src/list/FilterToolbar.js
new file mode 100644
index 00000000..e6d6f4ed
--- /dev/null
+++ b/webui/src/list/FilterToolbar.js
@@ -0,0 +1,60 @@
+import { makeStyles } from '@material-ui/styles';
+import React from 'react';
+import Toolbar from '@material-ui/core/Toolbar';
+import ErrorOutline from '@material-ui/icons/ErrorOutline';
+import CheckCircleOutline from '@material-ui/icons/CheckCircleOutline';
+import Filter, { parse, stringify } from './Filter';
+
+const useStyles = makeStyles(theme => ({
+ toolbar: {
+ backgroundColor: theme.palette.grey['100'],
+ borderColor: theme.palette.grey['300'],
+ borderWidth: '1px 0',
+ borderStyle: 'solid',
+ margin: theme.spacing(0, -1),
+ },
+ spacer: {
+ flex: 1,
+ },
+}));
+
+function FilterToolbar({ query, queryLocation }) {
+ const classes = useStyles();
+ const params = parse(query);
+ const hasKey = key => params[key] && params[key].length > 0;
+ const hasValue = (key, value) => hasKey(key) && params[key].includes(value);
+ const replaceParam = (key, value) => {
+ const p = {
+ ...params,
+ [key]: [value],
+ };
+ return queryLocation(stringify(p));
+ };
+
+ // TODO: open/closed count
+ // TODO: author/label/sort filters
+ return (
+ <Toolbar className={classes.toolbar}>
+ <Filter
+ active={hasValue('status', 'open')}
+ to={replaceParam('status', 'open')}
+ icon={ErrorOutline}
+ >
+ open
+ </Filter>
+ <Filter
+ active={hasValue('status', 'closed')}
+ to={replaceParam('status', 'closed')}
+ icon={CheckCircleOutline}
+ >
+ closed
+ </Filter>
+ <div className={classes.spacer} />
+ <Filter active={hasKey('author')}>Author</Filter>
+ <Filter active={hasKey('label')}>Label</Filter>
+ <Filter active={hasKey('sort')}>Sort</Filter>
+ </Toolbar>
+ );
+}
+
+export default FilterToolbar;