Added filter type selector.

master
Sander Vocke 6 years ago
parent 6f805cf926
commit 130b7d7968
  1. 44
      src/userquerywidget.js

@ -19,7 +19,7 @@ import { makeStyles } from '@material-ui/core/styles';
import {
filter_is_const_false, ConstFilter, LogicalOperatorFilter, MatchingFilter,
ResultTypeEnum, LogicalOperatorEnum, MatchTypeEnum
ResultTypeEnum, LogicalOperatorEnum, MatchTypeEnum, NegationFilter
} from './queries.js'
const useStyles = makeStyles(theme => ({
@ -79,7 +79,6 @@ export function EditLogicalOperatorFilterExpression(props) {
const labelid = _.uniqueId("logic_op_label_");
function handleChange(e) {
console.log("changing to value: ", e.target.value);
var newfilter = _.cloneDeep(filter);
newfilter.operator = e.target.value;
onChange(newfilter);
@ -105,6 +104,13 @@ export function EditFilterExpressionDialog(props) {
const { onClose, startingFilter, open } = props;
const [filter, setFilter] = React.useState(startingFilter);
const FilterTypeEnum = {
CONST: 0,
NEGATION: 1,
MATCHING: 2,
LOGICAL: 3,
};
useEffect(() => {
setFilter(startingFilter);
}, [startingFilter]);
@ -113,8 +119,31 @@ export function EditFilterExpressionDialog(props) {
onClose(filter);
};
const handleTypeChange = e => {
var val = e.target.value;
if(val == FilterTypeEnum.CONST) {
setFilter(new ConstFilter(filter.result_type, true));
} else if(val == FilterTypeEnum.MATCHING) {
setFilter(new MatchingFilter(filter.result_type, "", MatchTypeEnum.MATCH_IMAGE_NAME_NATURAL));
} else {
throw new Error('Unsupported filter type: ' + val);
}
}
const getFilterType = filter => {
if(filter instanceof ConstFilter) { return FilterTypeEnum.CONST; }
else if(filter instanceof NegationFilter) { return FilterTypeEnum.NEGATION; }
else if(filter instanceof MatchingFilter) { return FilterTypeEnum.MATCHING; }
else if(filter instanceof LogicalOperatorFilter) { return FilterTypeEnum.LOGICAL; }
else {
throw new Error('Unsupported filter type: ' + filter);
}
}
var _ = require('lodash');
const id = _.uniqueId("simple_dialog_title_");
const selectId = _.uniqueId("select_");
const selectLabelId = _.uniqueId("select_label_");
var control = <></>;
var subprops = {
@ -132,6 +161,17 @@ export function EditFilterExpressionDialog(props) {
return (
<Dialog aria-labelledby={id} open={open}>
<DialogTitle id={id}>Edit expression</DialogTitle>
<FormControl>
<Select
labelId={selectLabelId}
id={selectId}
value={getFilterType(filter)}
onChange={handleTypeChange}
>
<MenuItem value={FilterTypeEnum.CONST}>Constant</MenuItem>
<MenuItem value={FilterTypeEnum.MATCHING}>Matching</MenuItem>
</Select>
</FormControl>
{control}
<Button onClick={handleClose}>
Done

Loading…
Cancel
Save