diff --git a/web/calendar/calendar.react.js b/web/calendar/calendar.react.js --- a/web/calendar/calendar.react.js +++ b/web/calendar/calendar.react.js @@ -166,7 +166,7 @@ let calendarContentStyle = null; let filterButtonStyle = null; if (this.state.filterPanelOpen) { - filterPanel = ; + filterPanel = ; calendarContentStyle = { marginLeft: '300px' }; filterButtonStyle = { backgroundColor: 'rgba(0,0,0,0.67)' }; } diff --git a/web/calendar/filter-panel.react.js b/web/calendar/filter-panel.react.js --- a/web/calendar/filter-panel.react.js +++ b/web/calendar/filter-panel.react.js @@ -8,6 +8,7 @@ } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import classNames from 'classnames'; +import invariant from 'invariant'; import * as React from 'react'; import { useDispatch } from 'react-redux'; import Switch from 'react-switch'; @@ -26,6 +27,7 @@ } from 'lib/types/filter-types'; import type { Dispatch } from 'lib/types/redux-types'; +import { ModalContext } from '../modals/modal-provider.react'; import ThreadSettingsModal from '../modals/threads/thread-settings-modal.react'; import { useSelector } from '../redux/redux-utils'; import { @@ -35,16 +37,13 @@ import { MagnifyingGlass } from '../vectors.react'; import css from './filter-panel.css'; -type BaseProps = { - +setModal: (modal: ?React.Node) => void, -}; type Props = { - ...BaseProps, +filterThreadInfos: () => $ReadOnlyArray, +filterThreadSearchIndex: () => SearchIndex, +filteredThreadIDs: ?$ReadOnlySet, +includeDeleted: boolean, +dispatch: Dispatch, + +setModal: (modal: ?React.Node) => void, }; type State = { +query: string, @@ -363,25 +362,25 @@ }; } -const ConnectedFilterPanel: React.ComponentType = React.memo( - function ConnectedFilterPanel(props) { - const filteredThreadIDs = useSelector(filteredThreadIDsSelector); - const filterThreadInfos = useSelector(webFilterThreadInfos); - const filterThreadSearchIndex = useSelector(webFilterThreadSearchIndex); - const includeDeleted = useSelector(includeDeletedSelector); - const dispatch = useDispatch(); +function ConnectedFilterPanel(): React.Node { + const filteredThreadIDs = useSelector(filteredThreadIDsSelector); + const filterThreadInfos = useSelector(webFilterThreadInfos); + const filterThreadSearchIndex = useSelector(webFilterThreadSearchIndex); + const includeDeleted = useSelector(includeDeletedSelector); + const dispatch = useDispatch(); + const modalContext = React.useContext(ModalContext); + invariant(modalContext, 'modalContext should be set'); - return ( - - ); - }, -); + return ( + + ); +} export default ConnectedFilterPanel;