Skip to content

Commit b96b48f

Browse files
fix: Incorrect date picker position in data browser filter dialog (#2425)
1 parent 9dc8dab commit b96b48f

File tree

2 files changed

+36
-29
lines changed

2 files changed

+36
-29
lines changed

src/components/BrowserFilter/BrowserFilter.react.js

+6-3
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ export default class BrowserFilter extends React.Component {
2424

2525
this.state = {
2626
open: false,
27+
editMode: true,
2728
filters: new List(),
2829
blacklistedFilters: Filters.BLACKLISTED_FILTERS.concat(props.blacklistedFilters)
2930
};
@@ -48,7 +49,8 @@ export default class BrowserFilter extends React.Component {
4849
}
4950
this.setState(prevState => ({
5051
open: !prevState.open,
51-
filters: filters
52+
filters: filters,
53+
editMode: this.props.filters.size === 0
5254
}));
5355
this.props.setCurrent(null);
5456
}
@@ -59,7 +61,8 @@ export default class BrowserFilter extends React.Component {
5961
this.setState(({ filters }) => ({
6062
filters: filters.push(
6163
new Map({ field: field, constraint: available[field][0] })
62-
)
64+
),
65+
editMode: true
6366
}));
6467
}
6568

@@ -116,7 +119,7 @@ export default class BrowserFilter extends React.Component {
116119
onChange={filters => this.setState({ filters: filters })}
117120
onSearch={this.apply.bind(this)}
118121
renderRow={props => (
119-
<FilterRow {...props} active={this.props.filters.size > 0} parentContentId={POPOVER_CONTENT_ID} />
122+
<FilterRow {...props} active={this.props.filters.size > 0} editMode={this.state.editMode} parentContentId={POPOVER_CONTENT_ID} />
120123
)}
121124
/>
122125
<div className={styles.footer}>

src/components/BrowserFilter/FilterRow.react.js

+30-26
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import DateTimeEntry from 'components/DateTimeEntry/DateTimeEntry.react';
1111
import Icon from 'components/Icon/Icon.react';
1212
import Parse from 'parse';
1313
import PropTypes from 'lib/PropTypes';
14-
import React from 'react';
14+
import React, { useCallback } from 'react';
1515
import styles from 'components/BrowserFilter/BrowserFilter.scss';
1616
import validateNumeric from 'lib/validateNumeric';
1717

@@ -20,13 +20,7 @@ for (let c in Constraints) {
2020
constraintLookup[Constraints[c].name] = c;
2121
}
2222

23-
let setFocus = (input) => {
24-
if (input !== null) {
25-
input.focus();
26-
}
27-
}
28-
29-
function compareValue(info, value, onChangeCompareTo, onKeyDown, active, parentContentId) {
23+
function compareValue(info, value, onChangeCompareTo, onKeyDown, active, parentContentId, setFocus) {
3024
switch (info.type) {
3125
case null:
3226
return null;
@@ -91,25 +85,35 @@ let FilterRow = ({
9185
onDeleteRow,
9286
active,
9387
parentContentId,
94-
}) => (
95-
<div className={styles.row}>
96-
<ChromeDropdown
97-
color={active ? 'blue' : 'purple'}
98-
value={currentField}
99-
options={fields}
100-
onChange={onChangeField} />
101-
<ChromeDropdown
102-
width={compareInfo.type ? '175' : '325'}
103-
color={active ? 'blue' : 'purple'}
104-
value={Constraints[currentConstraint].name}
105-
options={constraints.map((c) => Constraints[c].name)}
106-
onChange={(c) => onChangeConstraint(constraintLookup[c], compareTo)} />
107-
{compareValue(compareInfo, compareTo, onChangeCompareTo, onKeyDown, active, parentContentId)}
108-
<button type='button' className={styles.remove} onClick={onDeleteRow}><Icon name='minus-solid' width={14} height={14} fill='rgba(0,0,0,0.4)' /></button>
109-
</div>
110-
);
88+
editMode
89+
}) => {
90+
91+
let setFocus = useCallback((input) => {
92+
if (input !== null && editMode) {
93+
input.focus();
94+
}
95+
}, [])
96+
97+
return (
98+
<div className={styles.row}>
99+
<ChromeDropdown
100+
color={active ? 'blue' : 'purple'}
101+
value={currentField}
102+
options={fields}
103+
onChange={onChangeField} />
104+
<ChromeDropdown
105+
width={compareInfo.type ? '175' : '325'}
106+
color={active ? 'blue' : 'purple'}
107+
value={Constraints[currentConstraint].name}
108+
options={constraints.map((c) => Constraints[c].name)}
109+
onChange={(c) => onChangeConstraint(constraintLookup[c], compareTo)} />
110+
{compareValue(compareInfo, compareTo, onChangeCompareTo, onKeyDown, active, parentContentId, setFocus)}
111+
<button type='button' className={styles.remove} onClick={onDeleteRow}><Icon name='minus-solid' width={14} height={14} fill='rgba(0,0,0,0.4)' /></button>
112+
</div>
113+
);
114+
}
111115

112-
export default FilterRow;
116+
export default React.memo(FilterRow);
113117

114118
FilterRow.propTypes = {
115119
fields: PropTypes.arrayOf(PropTypes.string).isRequired,

0 commit comments

Comments
 (0)