diff --git a/landing/investors.react.js b/landing/investors.react.js --- a/landing/investors.react.js +++ b/landing/investors.react.js @@ -13,7 +13,9 @@ const { pushModal } = useModalContext(); const onClickInvestorProfileCard = React.useCallback( - (id: string) => pushModal(), + (id: string) => { + pushModal(); + }, [pushModal], ); diff --git a/lib/components/modal-provider.react.js b/lib/components/modal-provider.react.js --- a/lib/components/modal-provider.react.js +++ b/lib/components/modal-provider.react.js @@ -5,12 +5,14 @@ import { getUUID } from '../utils/uuid'; +export type PushModal = React.Node => string; + type Props = { +children: React.Node, }; type ModalContextType = { +modals: $ReadOnlyArray<[React.Node, string]>, - +pushModal: React.Node => void, + +pushModal: PushModal, +popModal: () => void, +clearModals: () => void, }; @@ -18,7 +20,7 @@ const ModalContext: React.Context = React.createContext( { modals: [], - pushModal: () => {}, + pushModal: () => '', popModal: () => {}, clearModals: () => {}, }, @@ -36,6 +38,7 @@ const pushModal = React.useCallback(newModal => { const key = getUUID(); setModals(oldModals => [...oldModals, [newModal, key]]); + return key; }, []); const clearModals = React.useCallback(() => setModals([]), []); diff --git a/web/calendar/day.react.js b/web/calendar/day.react.js --- a/web/calendar/day.react.js +++ b/web/calendar/day.react.js @@ -10,7 +10,10 @@ createLocalEntry, createLocalEntryActionType, } from 'lib/actions/entry-actions'; -import { useModalContext } from 'lib/components/modal-provider.react'; +import { + useModalContext, + type PushModal, +} from 'lib/components/modal-provider.react'; import { onScreenThreadInfos as onScreenThreadInfosSelector } from 'lib/selectors/thread-selectors'; import { entryKey } from 'lib/shared/entry-utils'; import type { EntryInfo } from 'lib/types/entry-types'; @@ -45,7 +48,7 @@ +nextLocalID: number, +timeZone: ?string, +dispatch: Dispatch, - +pushModal: (modal: React.Node) => void, + +pushModal: PushModal, +popModal: () => void, }; type State = { diff --git a/web/calendar/entry.react.js b/web/calendar/entry.react.js --- a/web/calendar/entry.react.js +++ b/web/calendar/entry.react.js @@ -14,7 +14,10 @@ deleteEntry, concurrentModificationResetActionType, } from 'lib/actions/entry-actions'; -import { useModalContext } from 'lib/components/modal-provider.react'; +import { + useModalContext, + type PushModal, +} from 'lib/components/modal-provider.react'; import { threadInfoSelector } from 'lib/selectors/thread-selectors'; import { entryKey } from 'lib/shared/entry-utils'; import { colorIsDark, threadHasPermission } from 'lib/shared/thread-utils'; @@ -68,7 +71,7 @@ +createEntry: (info: CreateEntryInfo) => Promise, +saveEntry: (info: SaveEntryInfo) => Promise, +deleteEntry: (info: DeleteEntryInfo) => Promise, - +pushModal: (modal: React.Node) => void, + +pushModal: PushModal, +popModal: () => void, }; type State = { 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 @@ -12,7 +12,10 @@ import { useDispatch } from 'react-redux'; import Switch from 'react-switch'; -import { useModalContext } from 'lib/components/modal-provider.react'; +import { + useModalContext, + type PushModal, +} from 'lib/components/modal-provider.react'; import { filteredThreadIDsSelector, includeDeletedSelector, @@ -42,7 +45,7 @@ +filteredThreadIDs: ?$ReadOnlySet, +includeDeleted: boolean, +dispatch: Dispatch, - +pushModal: (modal: React.Node) => void, + +pushModal: PushModal, }; type State = { +query: string, diff --git a/web/input/input-state-container.react.js b/web/input/input-state-container.react.js --- a/web/input/input-state-container.react.js +++ b/web/input/input-state-container.react.js @@ -28,7 +28,10 @@ type MultimediaUploadCallbacks, type MultimediaUploadExtras, } from 'lib/actions/upload-actions'; -import { useModalContext } from 'lib/components/modal-provider.react'; +import { + useModalContext, + type PushModal, +} from 'lib/components/modal-provider.react'; import { getNextLocalUploadID } from 'lib/media/media-utils'; import { pendingToRealizedThreadIDsSelector } from 'lib/selectors/thread-selectors'; import { @@ -110,7 +113,7 @@ text: string, ) => Promise, +newThread: (request: ClientNewThreadRequest) => Promise, - +pushModal: (modal: React.Node) => void, + +pushModal: PushModal, +sendCallbacks: $ReadOnlyArray<() => mixed>, +registerSendCallback: (() => mixed) => void, +unregisterSendCallback: (() => mixed) => void, diff --git a/web/media/multimedia.react.js b/web/media/multimedia.react.js --- a/web/media/multimedia.react.js +++ b/web/media/multimedia.react.js @@ -10,7 +10,10 @@ AlertCircle as AlertCircleIcon, } from 'react-feather'; -import { useModalContext } from 'lib/components/modal-provider.react'; +import { + useModalContext, + type PushModal, +} from 'lib/components/modal-provider.react'; import type { MediaType } from 'lib/types/media-types'; import Button from '../components/button.react'; @@ -28,7 +31,7 @@ }; type Props = { ...BaseProps, - +pushModal: (modal: React.Node) => void, + +pushModal: PushModal, }; class Multimedia extends React.PureComponent { diff --git a/web/modals/account/log-in-first-modal.react.js b/web/modals/account/log-in-first-modal.react.js --- a/web/modals/account/log-in-first-modal.react.js +++ b/web/modals/account/log-in-first-modal.react.js @@ -2,7 +2,10 @@ import * as React from 'react'; -import { useModalContext } from 'lib/components/modal-provider.react'; +import { + useModalContext, + type PushModal, +} from 'lib/components/modal-provider.react'; import css from '../../style.css'; import Modal from '../modal.react'; @@ -14,7 +17,7 @@ type Props = { ...BaseProps, - +pushModal: (modal: React.Node) => void, + +pushModal: PushModal, +popModal: () => void, }; diff --git a/web/settings/relationship/block-list-modal.react.js b/web/settings/relationship/block-list-modal.react.js --- a/web/settings/relationship/block-list-modal.react.js +++ b/web/settings/relationship/block-list-modal.react.js @@ -29,10 +29,9 @@ const { onClose } = props; const { pushModal } = useModalContext(); - const openBlockUsersModal = React.useCallback( - () => pushModal(), - [onClose, pushModal], - ); + const openBlockUsersModal = React.useCallback(() => { + pushModal(); + }, [onClose, pushModal]); return ( pushModal(), - [onClose, pushModal], - ); + const openNewFriendsModal = React.useCallback(() => { + pushModal(); + }, [onClose, pushModal]); return (