Skip to content

Commit 15ee5b9

Browse files
alencarlucasdavimacedo
authored andcommitted
fix: Avoid filter tab disappears on apply filter (#1229)
* fix: Avoid filter tab disapears on apply filter * feat: Close filter tab on external click
1 parent 10325ef commit 15ee5b9

File tree

3 files changed

+19
-21
lines changed

3 files changed

+19
-21
lines changed

src/components/BrowserFilter/BrowserFilter.react.js

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -27,29 +27,30 @@ export default class BrowserFilter extends React.Component {
2727
open: false,
2828
filters: new List(),
2929
};
30+
this.toggle = this.toggle.bind(this)
3031
}
3132

3233
componentDidMount() {
3334
this.node = ReactDOM.findDOMNode(this);
3435
}
3536

3637
componentWillReceiveProps(props) {
37-
if (props.schema !== this.props.schema) {
38+
if (props.className !== this.props.className) {
3839
this.setState({ open: false });
3940
}
4041
}
4142

42-
open() {
43+
toggle() {
4344
let filters = this.props.filters;
4445
if (this.props.filters.size === 0) {
4546
let available = Filters.availableFilters(this.props.schema, null, BLACKLISTED_FILTERS);
4647
let field = Object.keys(available)[0];
4748
filters = new List([new Map({ field: field, constraint: available[field][0] })]);
4849
}
49-
this.setState({
50-
open: true,
50+
this.setState(prevState => ({
51+
open: !prevState.open,
5152
filters: filters,
52-
});
53+
}));
5354
this.props.setCurrent(null);
5455
}
5556

@@ -62,9 +63,7 @@ export default class BrowserFilter extends React.Component {
6263
}
6364

6465
clear() {
65-
this.setState({ open: false }, () => {
66-
this.props.onChange(new Map());
67-
});
66+
this.props.onChange(new Map());
6867
}
6968

7069
apply() {
@@ -76,27 +75,26 @@ export default class BrowserFilter extends React.Component {
7675
}*/
7776
return filter;
7877
})
79-
this.setState({ open: false }, () => {
80-
this.props.onChange(formatted);
81-
});
78+
this.props.onChange(formatted);
8279
}
8380

8481
render() {
8582
let popover = null;
83+
let buttonStyle = [styles.entry];
84+
8685
if (this.state.open) {
8786
let position = Position.inDocument(this.node);
8887
let popoverStyle = [styles.popover];
88+
buttonStyle.push(styles.title);
89+
8990
if (this.props.filters.size) {
9091
popoverStyle.push(styles.active);
9192
}
9293
let available = Filters.availableFilters(this.props.schema, this.state.filters);
9394
popover = (
94-
<Popover fixed={true} position={position}>
95+
<Popover fixed={true} position={position} onExternalClick={this.toggle}>
9596
<div className={popoverStyle.join(' ')} onClick={() => this.props.setCurrent(null)}>
96-
<div className={styles.title} onClick={() => this.setState({ open: false })}>
97-
<Icon name='filter-solid' width={14} height={14} />
98-
<span>{this.props.filters.size ? 'Filtered' : 'Filter'}</span>
99-
</div>
97+
<div onClick={this.toggle} style={{ cursor: 'pointer', width: this.node.clientWidth, height: this.node.clientHeight }}></div>
10098
<div className={styles.body}>
10199
<Filter
102100
blacklist={BLACKLISTED_FILTERS}
@@ -129,13 +127,12 @@ export default class BrowserFilter extends React.Component {
129127
</Popover>
130128
);
131129
}
132-
let buttonStyle = [styles.entry];
133130
if (this.props.filters.size) {
134131
buttonStyle.push(styles.active);
135132
}
136133
return (
137134
<div className={styles.wrap}>
138-
<div className={buttonStyle.join(' ')} onClick={this.open.bind(this)}>
135+
<div className={buttonStyle.join(' ')} onClick={this.toggle}>
139136
<Icon name='filter-solid' width={14} height={14} />
140137
<span>{this.props.filters.size ? 'Filtered' : 'Filter'}</span>
141138
</div>

src/components/Popover/Popover.react.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
* This source code is licensed under the license found in the LICENSE file in
66
* the root directory of this source tree.
77
*/
8-
import PropTypes from 'lib/PropTypes';
8+
import PropTypes from 'lib/PropTypes';
99
import hasAncestor from 'lib/hasAncestor';
1010
import React from 'react';
1111
import ReactDOM from 'react-dom';
@@ -83,7 +83,7 @@ export default class Popover extends React.Component {
8383
}
8484

8585
_checkExternalClick(e) {
86-
if (!hasAncestor(e.target, this._popoverLayer) &&
86+
if (!hasAncestor(e.target, this._popoverWrapper) &&
8787
this.props.onExternalClick) {
8888
this.props.onExternalClick(e);
8989
}

src/dashboard/Data/Browser/BrowserToolbar.react.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,8 @@ let BrowserToolbar = ({
169169
setCurrent={setCurrent}
170170
schema={schema}
171171
filters={filters}
172-
onChange={onFilterChange} />
172+
onChange={onFilterChange}
173+
className={className} />
173174
<div className={styles.toolbarSeparator} />
174175
{enableSecurityDialog ? <SecurityDialog
175176
setCurrent={setCurrent}

0 commit comments

Comments
 (0)