diff --git a/src/components/filter/FilterEditor.jsx b/src/components/filter/FilterEditor.jsx index a458cf25..4fd890b9 100644 --- a/src/components/filter/FilterEditor.jsx +++ b/src/components/filter/FilterEditor.jsx @@ -13,6 +13,19 @@ import SpecDoc from '../inputs/SpecDoc' import ExpressionProperty from '../fields/_ExpressionProperty'; +function combiningFilter (props) { + let filter = props.filter || ['all']; + + let combiningOp = filter[0]; + let filters = filter.slice(1); + + if(combiningFilterOps.indexOf(combiningOp) < 0) { + combiningOp = 'all'; + filters = [filter.slice(0)]; + } + + return [combiningOp, ...filters]; +} function migrateFilter (filter) { return migrate(createStyleFromFilter(filter)).layers[0].filter; @@ -92,39 +105,25 @@ export default class CombiningFilterEditor extends React.Component { super(); this.state = { showDoc: false, - isSimpleFilter: checkIfSimpleFilter(this.combiningFilter(props)), + displaySimpleFilter: checkIfSimpleFilter(combiningFilter(props)), }; } // Convert filter to combining filter - combiningFilter(props=this.props) { - let filter = props.filter || ['all'] - - let combiningOp = filter[0] - let filters = filter.slice(1) - - if(combiningFilterOps.indexOf(combiningOp) < 0) { - combiningOp = 'all' - filters = [filter.slice(0)] - } - - return [combiningOp, ...filters] - } - onFilterPartChanged(filterIdx, newPart) { - const newFilter = this.combiningFilter().slice(0) + const newFilter = combiningFilter(this.props).slice(0) newFilter[filterIdx] = newPart this.props.onChange(newFilter) } deleteFilterItem(filterIdx) { - const newFilter = this.combiningFilter().slice(0) + const newFilter = combiningFilter(this.props).slice(0) newFilter.splice(filterIdx + 1, 1) this.props.onChange(newFilter) } addFilterItem = () => { - const newFilterItem = this.combiningFilter().slice(0) + const newFilterItem = combiningFilter(this.props).slice(0) newFilterItem.push(['==', 'name', '']) this.props.onChange(newFilterItem) } @@ -135,38 +134,52 @@ export default class CombiningFilterEditor extends React.Component { }); } + makeFilter = () => { + this.setState({ + displaySimpleFilter: true, + }) + } + makeExpression = () => { - let filter = this.combiningFilter(); + let filter = combiningFilter(this.props); this.props.onChange(migrateFilter(filter)); this.setState({ - isSimpleFilter: false, + displaySimpleFilter: false, }) } static getDerivedStateFromProps (props, currentState) { const {filter} = props; - const isSimpleFilter = checkIfSimpleFilter(props.filter); + const displaySimpleFilter = checkIfSimpleFilter(combiningFilter(props)); // Upgrade but never downgrade - if (!isSimpleFilter && currentState.isSimpleFilter === true) { + if (!displaySimpleFilter && currentState.displaySimpleFilter === true) { return { - isSimpleFilter: false, + displaySimpleFilter: false, + valueIsSimpleFilter: false, }; } + else if (displaySimpleFilter && currentState.displaySimpleFilter === false) { + return { + valueIsSimpleFilter: true, + } + } else { - return {}; + return { + valueIsSimpleFilter: false, + }; } } render() { const {errors} = this.props; - const {isSimpleFilter} = this.state; + const {displaySimpleFilter} = this.state; const fieldSpec={ doc: latest.layer.filter.doc + " Combine multiple filters together by using a compound filter." }; const defaultFilter = ["all"]; - const isNestedCombiningFilter = isSimpleFilter && hasNestedCombiningFilter(this.combiningFilter()); + const isNestedCombiningFilter = displaySimpleFilter && hasNestedCombiningFilter(combiningFilter(this.props)); if (isNestedCombiningFilter) { return