fix: recover stale BlockNote render ids
This commit is contained in:
33
src/components/blockNoteRenderRecovery.ts
Normal file
33
src/components/blockNoteRenderRecovery.ts
Normal file
@@ -0,0 +1,33 @@
|
||||
const BLOCKNOTE_MISSING_ID_ERROR = "Block doesn't have id"
|
||||
const BLOCKNOTE_RECOVERY_BOUNDARY_NAME = 'BlockNoteRenderRecoveryBoundary'
|
||||
const RECOVERED_BLOCKNOTE_RENDER_ERROR_MARK = '__tolariaRecoveredBlockNoteRenderError'
|
||||
|
||||
type MarkedRecoveredBlockNoteRenderError = Error & {
|
||||
[RECOVERED_BLOCKNOTE_RENDER_ERROR_MARK]?: true
|
||||
}
|
||||
|
||||
function hasRecoveredRenderErrorMark(error: unknown): boolean {
|
||||
if (!(error instanceof Error)) return false
|
||||
return (error as MarkedRecoveredBlockNoteRenderError)[RECOVERED_BLOCKNOTE_RENDER_ERROR_MARK] === true
|
||||
}
|
||||
|
||||
export function isRecoverableBlockNoteRenderError(error: unknown): boolean {
|
||||
return error instanceof Error && error.message.includes(BLOCKNOTE_MISSING_ID_ERROR)
|
||||
}
|
||||
|
||||
export function markRecoveredBlockNoteRenderError(error: unknown): void {
|
||||
if (!isRecoverableBlockNoteRenderError(error)) return
|
||||
const markedError = error as MarkedRecoveredBlockNoteRenderError
|
||||
markedError[RECOVERED_BLOCKNOTE_RENDER_ERROR_MARK] = true
|
||||
}
|
||||
|
||||
export function isRecoveredBlockNoteRenderError(
|
||||
error: unknown,
|
||||
componentStack: string,
|
||||
): boolean {
|
||||
return isRecoverableBlockNoteRenderError(error)
|
||||
&& (
|
||||
hasRecoveredRenderErrorMark(error)
|
||||
|| componentStack.includes(BLOCKNOTE_RECOVERY_BOUNDARY_NAME)
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user