diff --git a/src/components/BrowserFilter/BrowserFilter.react.js b/src/components/BrowserFilter/BrowserFilter.react.js index af000adb67..945c0f05c4 100644 --- a/src/components/BrowserFilter/BrowserFilter.react.js +++ b/src/components/BrowserFilter/BrowserFilter.react.js @@ -110,7 +110,7 @@ export default class BrowserFilter extends React.Component { filters={this.state.filters} onChange={filters => this.setState({ filters: filters })} renderRow={props => ( - 0} /> + 0} parentContentId={POPOVER_CONTENT_ID} /> )} />
diff --git a/src/components/BrowserFilter/FilterRow.react.js b/src/components/BrowserFilter/FilterRow.react.js index 4c8c2c12da..f7c2eb05ef 100644 --- a/src/components/BrowserFilter/FilterRow.react.js +++ b/src/components/BrowserFilter/FilterRow.react.js @@ -27,7 +27,7 @@ let setFocus = (input) => { } } -function compareValue(info, value, onChangeCompareTo, active) { +function compareValue(info, value, onChangeCompareTo, active, parentContentId) { switch (info.type) { case null: return null; @@ -70,7 +70,8 @@ function compareValue(info, value, onChangeCompareTo, active) { className={styles.date} value={Parse._decode('date', value)} onChange={(value) => onChangeCompareTo(Parse._encode(value))} - ref={setFocus} /> + ref={setFocus} + parentContentId={parentContentId} /> ); } } @@ -87,6 +88,7 @@ let FilterRow = ({ onChangeCompareTo, onDeleteRow, active, + parentContentId, }) => (
Constraints[c].name)} onChange={(c) => onChangeConstraint(constraintLookup[c])} /> - {compareValue(compareInfo, compareTo, onChangeCompareTo, active)} + {compareValue(compareInfo, compareTo, onChangeCompareTo, active, parentContentId)}
); diff --git a/src/components/DateTimeEntry/DateTimeEntry.react.js b/src/components/DateTimeEntry/DateTimeEntry.react.js index 176155cc42..d1eb69c093 100644 --- a/src/components/DateTimeEntry/DateTimeEntry.react.js +++ b/src/components/DateTimeEntry/DateTimeEntry.react.js @@ -87,7 +87,7 @@ export default class DateTimeEntry extends React.Component { let popover = null; if (this.state.open) { popover = ( - + +
e.stopPropagation()} > { let timeRef = this.props.value || hoursFrom(new Date(), 1); let newDate = this.props.local ? new Date( diff --git a/src/components/Popover/Popover.react.js b/src/components/Popover/Popover.react.js index 4c5900035d..3a23f91732 100644 --- a/src/components/Popover/Popover.react.js +++ b/src/components/Popover/Popover.react.js @@ -57,6 +57,10 @@ export default class Popover extends React.Component { this._popoverLayer.className = styles.transition; } + if (this.props.parentContentId) { + this._popoverLayer.dataset.parentContentId = this.props.parentContentId; + } + document.body.addEventListener('click', this._checkExternalClick); } @@ -78,7 +82,7 @@ export default class Popover extends React.Component { : this._popoverLayer; const isChromeDropdown = e.target.parentNode.classList.contains('chromeDropdown'); if ( - !hasAncestor(e.target, popoverWrapper) && + !hasAncestor(e.target, popoverWrapper, contentId) && this.props.onExternalClick && !isChromeDropdown ) { diff --git a/src/lib/hasAncestor.js b/src/lib/hasAncestor.js index 04a3b5550d..b846eb9a68 100644 --- a/src/lib/hasAncestor.js +++ b/src/lib/hasAncestor.js @@ -5,11 +5,13 @@ * This source code is licensed under the license found in the LICENSE file in * the root directory of this source tree. */ -export default function hasAncestor(node, ancestor) { +export default function hasAncestor(node, ancestor, contentId) { let cur = node.parentNode; while (cur && cur.nodeType === 1) { if (cur === ancestor) { return true; + } else if (contentId && cur.dataset.parentContentId === contentId) { + return true; } cur = cur.parentNode; }