1
0
Fork 0
mirror of https://github.com/hedgedoc/hedgedoc.git synced 2025-03-28 03:43:40 +00:00
hedgedoc/frontend/src/components/global-dialogs/motd-modal/cached-motd-modal.tsx
Tilman Vatteroth dfbd45301c fix(frontend): fix motd e2e test
Signed-off-by: Tilman Vatteroth <git@tilmanvatteroth.de>
2023-10-24 13:49:12 +02:00

54 lines
1.8 KiB
TypeScript

'use client'
/*
* SPDX-FileCopyrightText: 2023 The HedgeDoc developers (see AUTHORS file)
*
* SPDX-License-Identifier: AGPL-3.0-only
*/
import React, { useCallback, useMemo, useState } from 'react'
import { useMotdContextValue } from '../../motd/motd-context'
import { useLocalStorage } from 'react-use'
import { MotdModal } from './motd-modal'
import { testId } from '../../../utils/test-id'
import { isTestMode } from '../../../utils/test-modes'
import { IGNORE_MOTD, MOTD_LOCAL_STORAGE_KEY } from './local-storage-keys'
/**
* Reads the motd from the context and shows it in a modal.
* If the modal gets dismissed by the user then the "last modified" identifier will be written into the local storage
* to prevent that the motd will be shown again until it gets changed.
*/
export const CachedMotdModal: React.FC = () => {
const contextValue = useMotdContextValue()
const [cachedLastModified, saveLocalStorage] = useLocalStorage<string>(MOTD_LOCAL_STORAGE_KEY, undefined, {
raw: true
})
const [dismissed, setDismissed] = useState(false)
const show = useMemo(() => {
const lastModified = contextValue?.lastModified
if (cachedLastModified === IGNORE_MOTD && isTestMode) {
return false
}
if (cachedLastModified === lastModified || lastModified === undefined) {
return false
}
return !dismissed
}, [cachedLastModified, contextValue?.lastModified, dismissed])
const doDismiss = useCallback(() => {
const lastModified = contextValue?.lastModified
if (lastModified) {
saveLocalStorage(lastModified)
}
setDismissed(true)
}, [contextValue, saveLocalStorage])
if (contextValue?.lastModified === undefined && process.env.NODE_ENV === 'test') {
return <span {...testId('loaded not visible')} />
}
return <MotdModal show={show} onDismiss={doDismiss}></MotdModal>
}