mirror of
https://github.com/hedgedoc/hedgedoc.git
synced 2025-05-14 07:04:45 -04:00

* Remove redundant equal value Signed-off-by: Tilman Vatteroth <git@tilmanvatteroth.de> * Add NoteLoadingBoundary to fetch note from API before rendering Signed-off-by: Tilman Vatteroth <git@tilmanvatteroth.de> * Improve debug message for setHandler Signed-off-by: Tilman Vatteroth <git@tilmanvatteroth.de> * Add test for boundary Signed-off-by: Tilman Vatteroth <git@tilmanvatteroth.de> * Use common error page for note loading errors Signed-off-by: Tilman Vatteroth <git@tilmanvatteroth.de> * Fix tests Signed-off-by: Tilman Vatteroth <git@tilmanvatteroth.de> * Format code Signed-off-by: Tilman Vatteroth <git@tilmanvatteroth.de> * Add missing snapshot Signed-off-by: Tilman Vatteroth <git@tilmanvatteroth.de> * Reformat code Signed-off-by: Tilman Vatteroth <git@tilmanvatteroth.de>
50 lines
1.8 KiB
TypeScript
50 lines
1.8 KiB
TypeScript
/*
|
|
* SPDX-FileCopyrightText: 2021 The HedgeDoc developers (see AUTHORS file)
|
|
*
|
|
* SPDX-License-Identifier: AGPL-3.0-only
|
|
*/
|
|
|
|
import equal from 'fast-deep-equal'
|
|
import { useEffect, useRef } from 'react'
|
|
import { getGlobalState } from '../../../redux'
|
|
import { updateLocalHistoryEntry } from '../../../redux/history/methods'
|
|
import { useApplicationState } from '../../../hooks/common/use-application-state'
|
|
import type { HistoryEntryWithOrigin } from '../../../api/history/types'
|
|
import { HistoryEntryOrigin } from '../../../api/history/types'
|
|
|
|
export const useUpdateLocalHistoryEntry = (): void => {
|
|
const id = useApplicationState((state) => state.noteDetails.id)
|
|
const userExists = useApplicationState((state) => !!state.user)
|
|
const currentNoteTitle = useApplicationState((state) => state.noteDetails.title)
|
|
const currentNoteTags = useApplicationState((state) => state.noteDetails.frontmatter.tags)
|
|
|
|
const lastNoteTitle = useRef('')
|
|
const lastNoteTags = useRef<string[]>([])
|
|
|
|
useEffect(() => {
|
|
if (userExists) {
|
|
return
|
|
}
|
|
if (currentNoteTitle === lastNoteTitle.current && equal(currentNoteTags, lastNoteTags.current)) {
|
|
return
|
|
}
|
|
const history = getGlobalState().history
|
|
const entry: HistoryEntryWithOrigin = history.find((entry) => entry.identifier === id) ?? {
|
|
identifier: id,
|
|
title: '',
|
|
pinStatus: false,
|
|
lastVisitedAt: '',
|
|
tags: [],
|
|
origin: HistoryEntryOrigin.LOCAL
|
|
}
|
|
if (entry.origin === HistoryEntryOrigin.REMOTE) {
|
|
return
|
|
}
|
|
entry.title = currentNoteTitle
|
|
entry.tags = currentNoteTags
|
|
entry.lastVisitedAt = new Date().toISOString()
|
|
updateLocalHistoryEntry(id, entry)
|
|
lastNoteTitle.current = currentNoteTitle
|
|
lastNoteTags.current = currentNoteTags
|
|
}, [id, userExists, currentNoteTitle, currentNoteTags])
|
|
}
|