diff --git a/frontend/src/constants/localStorage.ts b/frontend/src/constants/localStorage.ts index 64dbb45c9f..aac2e4e5fd 100644 --- a/frontend/src/constants/localStorage.ts +++ b/frontend/src/constants/localStorage.ts @@ -22,3 +22,8 @@ export const ROLLOUT_ANNOUNCEMENT_KEY_PREFIX = 'has-seen-rollout-announcement-' * Key to store whether the admin has seen the feature tour in localStorage. */ export const FEATURE_TOUR_KEY_PREFIX = 'has-seen-feature-tour-' + +/** + * Key to store whether a user has seen the emergency contact number modal in localStorage. + */ +export const EMERGENCY_CONTACT_KEY_PREFIX = 'has-emergency-contact' diff --git a/frontend/src/features/workspace/WorkspacePage.stories.tsx b/frontend/src/features/workspace/WorkspacePage.stories.tsx index 3b35a2b1f3..43fb7b3960 100644 --- a/frontend/src/features/workspace/WorkspacePage.stories.tsx +++ b/frontend/src/features/workspace/WorkspacePage.stories.tsx @@ -13,6 +13,7 @@ import { getMobileViewParameters, mockDateDecorator, StoryRouter, + ViewedEmergencyContactDecorator, ViewedRolloutDecorator, } from '~utils/storybook' @@ -56,6 +57,7 @@ export default { component: WorkspacePage, decorators: [ ViewedRolloutDecorator, + ViewedEmergencyContactDecorator, StoryRouter({ initialEntries: [ROOT_ROUTE], path: ROOT_ROUTE, diff --git a/frontend/src/features/workspace/WorkspacePage.tsx b/frontend/src/features/workspace/WorkspacePage.tsx index 86406f3329..73a29af7df 100644 --- a/frontend/src/features/workspace/WorkspacePage.tsx +++ b/frontend/src/features/workspace/WorkspacePage.tsx @@ -10,11 +10,15 @@ import { useSearchParams } from 'react-router-dom' import { Box, Container, Grid, useDisclosure } from '@chakra-ui/react' import { chunk } from 'lodash' -import { ROLLOUT_ANNOUNCEMENT_KEY_PREFIX } from '~constants/localStorage' +import { + EMERGENCY_CONTACT_KEY_PREFIX, + ROLLOUT_ANNOUNCEMENT_KEY_PREFIX, +} from '~constants/localStorage' import { useLocalStorage } from '~hooks/useLocalStorage' import Pagination from '~components/Pagination' import { RolloutAnnouncementModal } from '~features/rollout-announcement/RolloutAnnouncementModal' +import { EmergencyContactModal } from '~features/user/emergency-contact/EmergencyContactModal' import { useUser } from '~features/user/queries' import CreateFormModal from './components/CreateFormModal' @@ -122,6 +126,24 @@ export const WorkspacePage = (): JSX.Element => { [isUserLoading, hasSeenAnnouncement], ) + const emergencyContactKey = useMemo( + () => (user?._id ? EMERGENCY_CONTACT_KEY_PREFIX + user._id : null), + [user], + ) + + const [hasSeenEmergencyContact, setHasSeenEmergencyContact] = + useLocalStorage(emergencyContactKey) + + const isEmergencyContactModalOpen = useMemo( + () => + !isUserLoading && + // Open emergency contact modal after the rollout announcement modal + Boolean(hasSeenAnnouncement) && + !hasSeenEmergencyContact && + !user?.contact, + [isUserLoading, hasSeenAnnouncement, hasSeenEmergencyContact, user], + ) + return ( <> { onClose={() => setHasSeenAnnouncement(true)} isOpen={isAnnouncementModalOpen} /> + setHasSeenEmergencyContact(true)} + isOpen={isEmergencyContactModalOpen} + /> { + const userId = parameters.userId + const emergencyContactKey = EMERGENCY_CONTACT_KEY_PREFIX + userId + window.localStorage.setItem(emergencyContactKey, JSON.stringify(true)) + + useEffect(() => { + return () => window.localStorage.removeItem(emergencyContactKey) + }, [emergencyContactKey, userId]) + + return storyFn() +} + export const EditFieldDrawerDecorator: DecoratorFn = (storyFn) => { const deleteFieldModalDisclosure = useDisclosure() return (